<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title></title>
	<atom:link href="http://www.imgeek.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.imgeek.net</link>
	<description>[root@Linux th3r0rn]# ./header</description>
	<lastBuildDate>Mon, 06 Sep 2010 02:25:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Como hackear un ipod touch iphone jalibreak</title>
		<link>http://www.imgeek.net/?p=980</link>
		<comments>http://www.imgeek.net/?p=980#comments</comments>
		<pubDate>Mon, 06 Sep 2010 02:07:19 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[Iphone]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod touch]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=980</guid>
		<description><![CDATA[Todos los pasos se hacen con el touch siempre conectado al PC y el Wi-Fi encendido. En caso de que hagas el jailbreak en una laptop, recomiendo conectar la laptop por cable al router y no inalambricamente Este metodo es totalmente automatico. Esta es la ultima version del TouchFree, que aparte de ser automatico, mejora [...]]]></description>
			<content:encoded><![CDATA[<p>Todos los pasos se hacen con el touch siempre conectado al PC y<br />
el Wi-Fi encendido.</p>
<p>En caso de que hagas el jailbreak en una laptop, recomiendo conectar la laptop por cable al router y no inalambricamente</p>
<p>Este metodo es totalmente automatico. Esta es la ultima version del TouchFree, que aparte de ser automatico, mejora algunos problemas con respecto a los errores al momento de poner el IP.</p>
<p>1-. Restaurar el touch a la 1.1.1 desde el iTunes.</p>
<p>2-. Cierra el iTunes y desde el administrador de tareas de windows cerramos el proceso &#8220;iTunesHelper.exe&#8221;y &#8220;iPodService&#8221; (Para abrir el administrador de tareas presionamos Ctrl+Alt+Supr y vamos a la pestaña procesos)</p>
<p>3-. Descargas el paquete TouchFree4, AQUI. Descomprime la carpeta del .rar en el escritorio o donde quieras.</p>
<p>4-. Prende el Wi-Fi y desde el safari del touch vamos a la siguiente direccion http://jailbreak.toc2rta.com. Cuando abres la pagina el safari deberia colgarse o cerrarse, en caso de que esto no pase y veas una imagen pequeña en la parte superior, refresca la pagina hasta que el safari se cuelgue o se cierre.</p>
<p>5-. Ejecuta el archivo &#8220;touchFree.exe&#8221; que esta en la carpeta que descomprimiste del .rar</p>
<p>5.1-. &#8211; Cuando el programa te pida hacer &#8220;reboot&#8221;, lo que tienes que hacer es apagar el touch (deja pisado el boton de sleep) y volver a prenderlo. En este paso hay que estar pendiente, ya que el programa nos pide que pisemos enter para continuar, esto hay que hacerlo antes que el touch arranque por completo, es decir, hay que presionar enter cuando esta la manzana en la pantalla y no cuando aparece el menu.</p>
<p>5.2-. En otro paso de la instalacion te va a pedir que lo reinicies dos veces (reboot twice), en este punto, apagamos y prendemos el ipod como siempre, lo volvemos a apagar y lo prendemos otra vez, solo que esta segunda vez le das a enter cuando cuando veas la manazana en la pantalla (igual que en el paso 5.1)</p>
<p>5.3-. Luego te va a pedir el IP del touch, esto lo sabemos de la siguiente manera:<br />
En el tocuh vamos a &#8220;Ajustes &#8211;> Wi-Fi &#8211;> le damos en la flecha azul que esta a un lado de nuestra conexion y ahi aparece el IP del touch</p>
<p>5.4 Si recibes un mensaje del PuTTy acerca del SSH host Key, hacemos click en yes.</p>
<p>6-. Listo tu touch ya es libre, con el installer listo para usar desde el touch y con SSH y SFTP habilitado. En caso de no ver el installer en el menu del touch, reinicia el touch y listo.</p>
<p>Como instalar aplicaciones<br />
<script type="text/javascript"><!--
google_ad_client = "pub-5812932934360069";
/* 468x15, creado 5/09/10 */
google_ad_slot = "8636788274";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<a href="http://www.elotrolado.net/hilo_-TUTORIAL--Jailbreak-de-iPod-Touch-Con-Windows-Paso-a-paso-mas-Video-Tutoriales_865285">Mas Info<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=980</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campus Party México bate récord de asistentes</title>
		<link>http://www.imgeek.net/?p=973</link>
		<comments>http://www.imgeek.net/?p=973#comments</comments>
		<pubDate>Tue, 10 Aug 2010 17:09:37 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[campus party]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=973</guid>
		<description><![CDATA[La edición mexicana de Campus Party batió un récord de asistentes, con 6.098 entradas vendidas, superando cualquiera de las ediciones que se hayan realizado en el mundo este año. El evento comenzó ayer y recibirá visitantes hasta el domingo en Expo Bancomer en la capital de México. La agenda incluye seminarios de todos tipos y [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://www.imgeek.net/imgs/cp2edicion.jpg" title="campus party mexico 2010" class="aligncenter" width="640" height="425" /><br />
La edición mexicana de Campus Party batió un récord de asistentes, con 6.098 entradas vendidas, superando cualquiera de las ediciones que se hayan realizado en el mundo este año.</p>
<p>El evento comenzó ayer y recibirá visitantes hasta el domingo en Expo Bancomer en la capital de México. La agenda incluye seminarios de todos tipos y conferencias de invitados como el fundador de Apple Steve Wozniak y el hacker Kevin Mitnick.</p>
<p>Durante el evento se estarán realizando concursos también así que hay oportunidades de premios para quienes estén participando.<br />
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/oiU4QZvlMCE&amp;hl=es_MX&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oiU4QZvlMCE&amp;hl=es_MX&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object><br />
Lastima, yo no he podido asistir a esta seguinda edicion por falta de tiempo y cuestiones de trabajo pero espero poder asisitir el proximo año a este gran evento, le mando un saludo a todos mis amigos que estan en este evento como Bucio, Angelbroz, Lil0 etc..<br />
Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=973</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET con SQL SERVER</title>
		<link>http://www.imgeek.net/?p=952</link>
		<comments>http://www.imgeek.net/?p=952#comments</comments>
		<pubDate>Sun, 28 Mar 2010 00:24:03 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ADO]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[CONEXION]]></category>
		<category><![CDATA[SQLSERVER]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=952</guid>
		<description><![CDATA[Hola, en este pequeño texto se pretende explicar como insertar datos a una base de datos sql server desde asp.net Para este ejemplo yo cuento con una base de datos llamada usuarios que contiene una tabla llamada infousers la cual cuenta con dos columnas de tipo text llamadas &#8220;usuario&#8221; y &#8220;pais&#8221; Lo primero que tenemos [...]]]></description>
			<content:encoded><![CDATA[<p>Hola, en este pequeño texto se pretende explicar como insertar datos a una base de datos sql server desde asp.net<br />
Para este ejemplo yo cuento con una base de datos llamada usuarios que contiene una tabla llamada infousers la cual cuenta con dos columnas de tipo text llamadas &#8220;usuario&#8221; y &#8220;pais&#8221;<br />
Lo primero que tenemos que hacer es saber como conectar a sql server desde asp.net</p>
<p>Como primer paso tenemos que tener un crear un nuevo proyecto de pagina web desde visual estudio, eljimos que sea con C#. Posteriormente procederemos a crear nuestro formulario de registro de usuario, solo necesitamos de 3 labels, 2 textbox y un Button Como se muestra en la imagen:<br />
<a href="http://www.imgeek.net/imgs/aspnet.PNG"><img class="alignnone" title="ASP SQL SERVER" src="http://www.imgeek.net/imgs/aspnet.PNG" alt="" width="538" height="323" /></a></p>
<p>Posteriormente procederemos a escribir el codigo denreo del evento del Button, el codigo es el siguiente:</p>
<pre>using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click1(object sender, EventArgs e)
    {
        String cadenaCon;
        String cadenaSql;
        SqlConnection cn;
        SqlCommand cmd;
        cadenaCon = "Data Source=(local);";
        cadenaCon += "Initial Catalog=usuarios;";
        cadenaCon += "user=sa;";
        cadenaCon+="pwd=1234;";
        cadenaSql = "INSERT INTO infousers ";
        cadenaSql += "VALUES('" + TextBox1.Text + "',";
        cadenaSql += "'" + TextBox2.Text + "')";
        cn = new SqlConnection(cadenaCon);
        try
        {
            cn.Open();
            cmd = new SqlCommand(cadenaSql, cn);
            cmd.ExecuteNonQuery();
            Label2.Text = "El usuario se dio de alta correctamente";
        }
        catch (Exception ex)
        {
            Label2.Text = "Error al registrar: " + ex.Message;

        }

        finally

        {
        cn.Close();
        }

    }
}</pre>
<p>Bien, el codigo es muy claro, pero explicare algunas partes basicas de este, en primera instancia hay que agregar una referencia a la libreria de acceso a datos que usaremos, la cual se ve claramente definida:<br />
<code>using System.Data.SqlClient;</code><br />
Hemos definido algunas variables, una de ellas es cadenaCon la cual nos servira para crear la conexion a la base de datos sql server:</p>
<pre>cadenaCon = "Data Source=(local);";
        cadenaCon += "Initial Catalog=usuarios;";
        cadenaCon += "user=sa;";
        cadenaCon+="pwd=1234;";</pre>
<p>Data Source = SERVIDOR<br />
Initial Catalog =  BASE DE DATOS<br />
User = USUARIO DE LA BASE DE DATOS<br />
Pwd = Password de la base de datos<br />
Nota: En sql server se crea un usuario por default el cual es &#8220;sa&#8221; solo tenemos que poner la password que definimos durante la instalacion de sql server ya que esta es la correspondiente password de dicho usuario.<br />
La varianle cadenaSql la usaremos para almacenar una cadena la cual sera la consulta a ejecutar, en este caso la utilizaremos para almacenar la cadena que ejecutara el Insert en la base de datos:</p>
<pre>cadenaSql = "INSERT INTO infousers ";
cadenaSql += "VALUES('" + TextBox1.Text + "',";
cadenaSql += "'" + TextBox2.Text + "')";</pre>
<p>Aclaro que esta cadena se puede almacenar en una sola linea, yo he confeccionado el codigo de esta forma para su mayor entendimiento y comprension.<br />
Posteriormente creamos un objeto cn para poder pasar por parametro la variable que contiene la cadena sql y de esta manera ejecutarla.<br />
Despues creamos el objeto cmd y pasamos por parametros la cadena y conexion, abrimos la conexion y ejecutamos la consulta, en dado caso de no tener algun error mostramos en el label el mensaje de que el usuario fue dado de alta correctamente.</p>
<pre>try
        {
            cn.Open();
            cmd = new SqlCommand(cadenaSql, cn);
            cmd.ExecuteNonQuery();
            Label2.Text = "El usuario se dio de alta correctamente";
        }</pre>
<p>Lo demas no creo haga falta explicarlo. Espero se entienda Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=952</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux Magazine: Enero 2010</title>
		<link>http://www.imgeek.net/?p=950</link>
		<comments>http://www.imgeek.net/?p=950#comments</comments>
		<pubDate>Wed, 27 Jan 2010 14:06:13 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Arch]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=950</guid>
		<description><![CDATA[Descargar PDF: http://ghost1227.com/newsletter/ALM-2010-Jan.pdf Sólo html: http://ghost1227.com/newsletter/ALM-2010-Jan.html Todas las ediciones: http://ghost1227.com/newsletter/index.html Discutir en los foros de Arch Linux la revista: http://bbs.archlinux.org/viewtopic.php?pid=687363]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="arch " src="http://www.imgeek.net/imgs/archmagazine.jpg" alt="" width="417" height="321" /></p>
<p>Descargar PDF:<br />
<a href="http://ghost1227.com/newsletter/ALM-2010-Jan.pdf">http://ghost1227.com/newsletter/ALM-2010-Jan.pdf </a></p>
<p>Sólo html:<br />
<a href="http://ghost1227.com/newsletter/ALM-2010-Jan.html">http://ghost1227.com/newsletter/ALM-2010-Jan.html</a></p>
<p>Todas las ediciones:</p>
<p><a href="http://ghost1227.com/newsletter/index.html">http://ghost1227.com/newsletter/index.html</a></p>
<p>Discutir en los foros de Arch Linux la revista:<br />
<a title="Discusión de la revista" href="http://bbs.archlinux.org/viewtopic.php?pid=687363">http://bbs.archlinux.org/viewtopic.php?pid=687363</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=950</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configurar SSH en ArchLinux</title>
		<link>http://www.imgeek.net/?p=947</link>
		<comments>http://www.imgeek.net/?p=947#comments</comments>
		<pubDate>Sun, 24 Jan 2010 01:53:47 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[ArchLinux]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=947</guid>
		<description><![CDATA[Mucha gente me pregunta cual es el problema que no deja que archlinux conecten por ssh cuando realmente es algo muy facil Primero instalamos ssh pacman -S openssh despues lo inciiamos # /etc/rc.d/sshd start Despues editamos el archivo /etc/hosts.allow nano /etc/hosts.allow Agregamos la linea: sshd: ALL Guardamos y salimos y ya con esto podremos conectarnos [...]]]></description>
			<content:encoded><![CDATA[<p>Mucha gente me pregunta cual es el problema que no deja que archlinux conecten por ssh cuando realmente es algo muy facil<br />
Primero instalamos ssh<br />
<code>pacman -S openssh</code><br />
despues lo inciiamos<br />
<code># /etc/rc.d/sshd start</code><br />
Despues editamos el archivo /etc/hosts.allow<br />
<code>nano /etc/hosts.allow</code><br />
Agregamos la linea:<br />
<code>sshd: ALL</code><br />
Guardamos y salimos y ya con esto podremos conectarnos al servidor ssh de ArchLinux<br />
<code>ssh usuario@IP</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=947</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configurar webcam en Arch</title>
		<link>http://www.imgeek.net/?p=939</link>
		<comments>http://www.imgeek.net/?p=939#comments</comments>
		<pubDate>Sat, 23 Jan 2010 21:40:16 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[cheese]]></category>
		<category><![CDATA[vide]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=939</guid>
		<description><![CDATA[Hola, para aquellos que usen archlinux y quieran configurar su webcam para grabar videos, tomar fotos etc. Pueden hacerlo muy facil y sencillo, yo tengo integrada mi webcam en mi mi portatil y lo que utilizo es Cheese El problema es que no solo basta con instalar cheese y ya lo tendremos funcionando, lo que [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://www.imgeek.net/imgs/arch.png" title="arch" class="alignleft" width="280" height="93" />Hola, para aquellos que usen archlinux y quieran configurar su webcam para grabar videos, tomar fotos etc. Pueden hacerlo muy facil y sencillo, yo tengo integrada mi webcam en mi mi portatil y lo que utilizo es <a href="http://es.wikipedia.org/wiki/Cheese">Cheese</a> El problema es que no solo basta con instalar cheese y ya lo tendremos funcionando, lo que necesitamos es agregar nuestro usuario a el grupo de video:<br />
<code># gpasswd -a <username> video</code><br />
Y establecer los permisos necesarios:<br />
<code># chmod 666 /dev/video0</code><br />
Y ya despues de esto podemos iniciar nuestro Cheese y podremos utilizar nuestra webcam o lo que necesitemos de video.<br />
Para mas informacion pueden consultar en la <a href="http://wiki.archlinux.org/index.php/Webcam">Wiki Oficial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=939</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar teclado y las &#8220;X&#8221; en archLinux</title>
		<link>http://www.imgeek.net/?p=937</link>
		<comments>http://www.imgeek.net/?p=937#comments</comments>
		<pubDate>Sun, 10 Jan 2010 08:29:31 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[teclado]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=937</guid>
		<description><![CDATA[Hola, hace algunos meses que no usaba arch, esta noche me decidi a instalarlo de nuevo y me arme de valor para que no fallar en mis ultimos 3 intentos en los ultimos meses, ya que por un problema de actualiazcion algo salio mal y deje de usarlo. Bien, hace mucho escribi un manual sobre [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.imgeek.net/imgs/arch.png" alt="archlinux" />Hola, hace algunos meses que no usaba arch, esta noche me decidi a instalarlo de nuevo y me arme de valor para que no fallar en mis ultimos 3 intentos en los ultimos meses, ya que por un problema de actualiazcion algo salio mal y deje de usarlo.<br />
Bien, hace mucho escribi un manual sobre como instalar ArchLinux y esta disponible en pdf.<br />
Pasa que algunas coasas han cambiado desde que escribi ese manual pero casi todo es lo mismo.<br />
Entre algunas cosas que cambiaron es que ya no se usa <strong>hwd</strong> para generar las X, Ahora basta con instalar xorg,dbus y el driver de tu tarjeta, la mia es intel por lo cual intstale <strong>xf86-video-intel</strong><br />
Ya que instalamos el paquete de xorg, e instalamos nuestro Desktop preferido, ya sea xfce4,kde,gnome etc.. lo que tebnemos que hacer es generar la configuracion de las X, para esto ejecutamos Xorg -configure, al hacer esto supongo ya tendremos neustro driver instalado y sobretodo <strong>dbus</strong> Si no lo tenemos instalado podemos instalarlo con pacman:<br />
<code>pacman -S dbus</code> y bien, ya que tenemos esto instalado solo tenemos que levantar la interfaz de nuestro escritorio, o mas bien iniciarlo, para esto yo tengo xfce4. y para inicarlo lo hago de la siguiente forma: <strong>startxfce4</strong> Con estto ya debe quedar iniciado nuestro Desktop.<br />
<strong>Configuracion de teclado en español</strong><br />
Pues bien, nos encontraremos con el problema de que nuestro teclado esta mal configurado, pero esto es muy facil de solucionar siguiendo los siguientes pasos:<br />
Si tenemos habilitado hotplug debemos hacer lo siguiente:<br />
Copiamos el archivo de configuración:<br />
<code># cp /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi /etc/hal/fdi/policy/</code><br />
Editamos el archivo para el idioma deseado:<br />
<code># nano /etc/hal/fdi/policy/10-keymap.fdi</code><br />
En el caso del español cambiamos &#8220;us&#8221; por &#8220;es&#8221; en el atributo &#8220;input.xkb.variant&#8221;, quedando así:<br />
<code>  <merge key="input.xkb.layout" type="string">es</merge></code><br />
Y listo!! con esto ya tendremos configurado nuestro teclado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=937</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fin de año 2009</title>
		<link>http://www.imgeek.net/?p=930</link>
		<comments>http://www.imgeek.net/?p=930#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:58:11 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[AÑO]]></category>
		<category><![CDATA[NUEVO]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=930</guid>
		<description><![CDATA[Se termino el año, recuerdo cuando el año pasado escribía un post sobre esto, donde me hice varios propósitos que de manera exitosa cumplí este año. ¿Como me fue este año? La verdad me fue muy bien, ha sido un maravilloso año, de hecho creo que ha sido el mejor que he tenido, no me [...]]]></description>
			<content:encoded><![CDATA[<p>Se termino el año, recuerdo cuando el año pasado escribía un post sobre esto, donde me hice varios propósitos que de manera exitosa cumplí este año.<br />
¿Como me fue este año?<br />
La verdad me fue muy bien, ha sido un maravilloso año, de hecho creo que ha sido el mejor que he tenido, no me puedo quejar la verdad todo estuvo de maravilla, aunque desgraciadamente lo estoy cerrando un poco triste por un golpe que no me esperaba y que me ataco por la retaguardia creo que voy a recuperarme.<br />
Este año vienen nuevos retos que quiero enfrentar y propósitos que no voy a publicar por que pretendo tener reservados.<br />
Cambie mucho este año, espero que haya sido para bien, aunque anoche me estaba preguntando muchas cosas que me hacen pensar que no he cambiado del todo, que sigo siendo el mismo imbecil de siempre y que por alguna razón sigo alejando a las personas que mas quiero de mi. El problema es que no logro saber que es lo que hago mal. Tal vez lo malo que hago es intentar hacer las cosas muy bien&#8230;.<br />
En fin este año me quedare sin respuesta a muchas preguntas.<br />
Por otra parte siento que este año voy a cambiar mucho mas de lo que puedo  imaginar, para bien o par amal?<br />
no lo se, me preparo para nuevos retos y para enfrentarme con muchas cosas.<br />
Este año puede conocer muchos lugares, conocí nueva gente y me la pase muy bien.<br />
El año 2009 sin lugar a duda me dejara lleno de muchos recuerdos bonitos y uno que otro muy malo.<br />
Espero que este año que viene pueda irme mejor que este, he aprendido muchas cosas que puedo aplicar para el nuevo.<br />
Espero poder tener el gusto de escribir una entrada de fin de año el próximo 2010 para despedir muchas cosas. Me gustaría saber que estaré despidiendo en ese post, la verdad es que aunque aqui no lo escribo de manera mas concreta, al redactar esta entrada  me siento bien por que despido este año y con ello despido un ciclo, una vida para dar inicio a una nueva.<br />
Mis mejores deseos para todos mis amigos que leen este blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=930</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mapa conceptual del Software Libre</title>
		<link>http://www.imgeek.net/?p=924</link>
		<comments>http://www.imgeek.net/?p=924#comments</comments>
		<pubDate>Tue, 08 Dec 2009 21:32:14 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Conceptual]]></category>
		<category><![CDATA[Mapa]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=924</guid>
		<description><![CDATA[Soy de las personas que tiene mucha fe en el software libre y pienso que el manejar software libre para desarrollo de grandes proyectos es una idea y una iniciativa que deberian de tomar las empresas de nuestro pais. Para ver completamente la imagen, den clic sobre ella.]]></description>
			<content:encoded><![CDATA[<p>Soy de las personas que tiene mucha fe en el software libre y pienso que el manejar software libre para desarrollo de grandes proyectos es una idea y una iniciativa que deberian de tomar las empresas de nuestro pais.<br />
Para ver completamente la imagen, den clic sobre ella.<br />
<a href="http://www.imgeek.net/imgs/Mapa_conceptual_software_libre.png"><img class="alignnone" title="Mapa software libre" src="http://www.imgeek.net/imgs/Mapa_conceptual_software_libre.png" alt="" width="751" height="521" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=924</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Detectar el pais de procedencia de una direccion IP con PHP</title>
		<link>http://www.imgeek.net/?p=895</link>
		<comments>http://www.imgeek.net/?p=895#comments</comments>
		<pubDate>Sat, 21 Nov 2009 18:41:42 +0000</pubDate>
		<dc:creator>th3r0rn</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[pais]]></category>
		<category><![CDATA[Paises]]></category>

		<guid isPermaLink="false">http://www.imgeek.net/?p=895</guid>
		<description><![CDATA[Hola, jugando un poco con php se me ocurrio como poder detectar el pais de procedencia de una direccion ip, esto nos viene muy util como por ejemplo para hacer alguna tienda virtual y poder calcular la moneda local del pais de nuestro visitante o interactuar contenido de acuerdo a su pais de origen, para [...]]]></description>
			<content:encoded><![CDATA[<p>Hola, jugando un poco con php se me ocurrio como poder detectar el pais de procedencia de una direccion ip, esto nos viene muy util como por ejemplo para hacer alguna tienda virtual y poder calcular la moneda local del pais de nuestro visitante o interactuar contenido de acuerdo a su pais de origen, para obtener una direccion ip contamos con varias funciones en php, el problema aqui es como hacerle para saber el pais de dicha direccion. Pues bueno esto es lo que voy a poner aqui :).</p>
<p>En primer lugar lo que necesitamos para detectar  el pais de una direccion ip es saber que rangos de direcciones ip pertenecen a cada pais, entonces necesitaremos una &#8220;amplia&#8221; base de datos con esta informacion.<span id="more-895"></span></p>
<p>Es aqui cuando nace el trabajo de <a href="http://ip-to-country.webhosting.info/">ip-to-countrry</a> Este sitio nos brinda una base de datos con todos los rangos de ips de todos los paises, la base de datos esta en formato CSV (del inglés <em>comma-separated values.</em>)<br />
 Procedemos a <a href="http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip">descargarla</a> y la descomprimimos a fin de tener el archivo .csv en un directorio. Ahora lo que necesitamos es pasar esos datos de esa base de datos a nuestra base de datos en mysql.<br />
Para esto podemos hacerlo con un script muy sencillo en php:<br />
[cc lang="php"]<?php<br />
  $conexion=@mysql_connect("localhost","root","123456");<br />
  if (!$conexion) die ("NO SE PUDO CONECTAR CON LA DB");</p>
<p>  @mysql_select_db("PAISES",$conexion);<br />
// Se crea la tabla de los rangos de IP, y se verifica.<br />
  $consulta="CREATE TABLE ipCountry (ipStart DOUBLE NOT NULL, ipEnd DOUBLE NOT NULL, countryCode2 CHAR(2) NOT NULL default '', countryCode3 CHAR(3) NOT NULL default '', countryName VARCHAR(50) NOT NULL default '', PRIMARY KEY (ipStart, ipEnd)) TYPE=MyISAM;";<br />
  $hacerConsulta=@mysql_query($consulta, $conexion);<br />
  if (!$hacerConsulta) die ("LA TABLA NO PUDO SER CREADA.");<br />
// Se abre el fichero csv de los rangos de IP's.<br />
  $manejadorFichero=fopen("ip-to-country.csv","r");<br />
// Se define una matriz para almacenar los rangos.<br />
  $matriz=array();<br />
/* Mientras haya datos, se lee cada línea y se almacena en un elemento de $matriz.<br />
Cada elemento es, a su vez, una matriz con cinco elementos. */<br />
  while (!feof($manejadorFichero)){<br />
    $matriz[]=fgetcsv($manejadorFichero);<br />
  }<br />
/* Se recorre la matriz y se desglosa cada elemento, para insertar una nueva fila de la tabla. */<br />
  foreach ($matriz as $rangoIPs){<br />
/* Se comprueba que el elemento tenga un contenido real.*/<br />
    if ($rangoIPs[0]!=""){<br />
      $consulta="INSERT INTO ipCountry (ipStart, ipEnd, countryCode2, countryCode3, countryName) VALUES (\"$rangoIPs[0]\", \"$rangoIPs[1]\", \"$rangoIPs[2]\", \"$rangoIPs[3]\", \"$rangoIPs[4]\");";<br />
      $hacerConsulta=mysql_query($consulta, $conexion);<br />
    }<br />
  }<br />
/* Se cierra el fichero CSV y la BBDD.*/<br />
  fclose ($manejadorFichero);<br />
  mysql_close($conexion);<br />
/* Se muestra el resultado.*/<br />
  echo ("La BBDD y la tabla han sido creadas.<br />&#8220;);<br />
?>[/cc]<br />
Aqui creamos una matriz. En cada elemento de la misma pretendemos almacenar todos los datos del fichero, es decir de uno de los rangos de IP&#8217;S. Para ello, leemos el fichero con un bucle que se estara ejecutando mientras no se encuentre el final (<strong>!feof</strong>) con esta funcion detectamos el final del fichero.<br />
Los datos de cada linea generan un nuevo elemento de la matriz. Y aqui aparece la funcion<strong> fgetcsv()</strong> Esta funcion ha sido implementada en PHP especificamente para la lectura de ficheros CSV. Como argumento recibe el manejador con el que hemos abierto el archivo. El resultado es la lectura de una linea completa hasta el salto de linea. Atraves de las comas identifica cual es cada dato. Cuyo valor debe aparecer entrecomillado, con todos los datos genera una matriz indexeada, con un elemento por dato. En este caso, la matriz tendra cinco elementos. Supongamos que aplicamos la funcion para leer la primera linea, exclusivamente. La matriz tendra los siguientes elementos:</p>
<p>[cc lang="php"]Array(<br />
[0]&#8220;33996344&#8243;<br />
[1]&#8220;33996351&#8243;<br />
[2]&#8220;GB&#8221;<br />
[3]&#8220;GRB&#8221;<br />
[4]&#8220;UNITED KINGDOM&#8221;<br />
)[/cc]<br />
Esto es por que el formato de los ficheros CSV es de esta manera, y si lo revisamos veremos las ips y los demas datos estan en dicho formato:<br />
<code>"50331648","69956103","US","USA","UNITED STATES"</p>
<p>"69956104","69956111","BM","BMU","BERMUDA"</p>
<p>"69956112","72349055","US","USA","UNITED STATES"</p>
<p>"72349056","72349119","BM","BMU","BERMUDA"</p>
<p>"72349120","83886079","US","USA","UNITED STATES"</p>
<p>"100663296","121195295","US","USA","UNITED STATES"</p>
<p>"121195296","121195327","IT","ITA","ITALY"</p>
<p>"121195328","134693119","US","USA","UNITED STATES"</p>
<p>"134693120","134693375","CA","CAN","CANADA"</p>
<p>"134693376","134730239","US","USA","UNITED STATES"</p>
<p>"134730240","134730495","CA","CAN","CANADA"</code><br />
En el caso del bucle de nuestro codigo, esta matriz se almacena en un elemento de la matriz que hemos llamado <strong>$matriz.</strong> Esto significa que <strong>$matriz</strong> al final del bucle, tendra mas de 99753 elementos (uno por cada linea del ficheri CSV) y cada uno sera una pequeña matriz con cinco elementos. Asi pues,<strong> $matriz</strong> es realmente, una matriz de dos dimensiones. Observemos que  a <strong>$matriz</strong> No le hemos asignado un <strong>indice</strong> especifico, asi que en cada iteraccion del bucle se generara un nuevo elemento.<br />
Tras generar $matriz se usa el bucle <strong>foreach</strong> para recorrerla entera. Cada elemento que ya sabemos que es asu vez, una pequeña matriz, contiene cinco datos. Estos se usan para generar un nuevo registro en la tabla MYSQL. Vemos que dentro del bucle foreach se comprueba si la IP inicial (elemento [0] de la matriz) tiene contenido. Esto se hace por que el fichero CSV puede contener lineas en blanco al final  del mismo y estas tambien generan elementos en la matriz principal, pero no debemos almacenarlas en la tabla MySQL.<br />
Ahora el siguiente paso es crear una funcion que encuentre la ip del cliente que se conecta al servidor, esto lo hacemos en un archivo por aparte al que llamaremos <strong>obtenerIP.php</strong><br />
[cc lang="php"]<?</p>
<p>  function obtenerIPCliente() {</p>
<p>/* En la variable $ip se almacenará la dirección del cliente. */</p>
<p>    $ip = 0;</p>
<p>/* Si la variable $_SERVER['HTTP_CLIENT_IP'] tiene algún contenido, se asigna a la variable $ip. */</p>
<p>    if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];</p>
<p>/* Si la variable $_SERVER['HTTP_X_FORWARDED_FOR'] tiene algún contenido, se asigna a la variable $ip.</p>
<p>En ese caso debe separarse la IP pública del cliente de las obtenidas a través de posibles redes locales. */</p>
<p>    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {</p>
<p>/* Se abre la matriz de IP's obtenidas de $_SERVER['HTTP_X_FORWARDED_FOR']. */</p>
<p>      $ListaDeip = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);</p>
<p>/* Si ya hay contenido en $ip, se añade a la matriz. */</p>
<p>      if ($ip) {</p>
<p>        array_unshift($ListaDeip, $ip);</p>
<p>        $ip = 0;</p>
<p>      }</p>
<p>/* Se eliminan IP's privadas, procedentes de posibles redes locales, así como la dirección de bucle local.</p>
<p>Cuando se encuentra una IP pública (externa) se devuelve como resultado de la función. */</p>
<p>      foreach ($ListaDeip as $direccion) if (!eregi("^(192\.168|172\.16|10|224|240|127|0)\.", $direccion)) return $direccion;</p>
<p>    }</p>
<p>/* Si no había contenido en $_SERVER['HTTP_X_FORWARDED_FOR'] se devuelve la IP obtenida mediante $_SERVER['REMOTE_ADDR']. */</p>
<p>    return $ip ? $ip : $_SERVER['REMOTE_ADDR'];</p>
<p>  }</p>
<p>?></p>
<p> [/cc]<br />
Como podemos ver el script es bastante sencillo y no pretendo explicarlo con mas detalles ya que en los comentarios queda mas que claro, ademas si sabemos algo de php esto no sera mayor problema.<br />
Y bueno ahora lo que necesitamos es el script que determinara el pais de la direccion ip:<br />
<strong>determinarPais.php</strong><br />
[cc lang="php"]<?php</p>
<p>//Conectamos y seleccionamos la base de datos</p>
<p>  $conexion=mysql_connect ("localhost", "root", "123456")or </p>
<p>  die("No se puedo conectar con la base de datos");</p>
<p>  $base=mysql_select_db("phpmexic_pruebas", $conexion)or</p>
<p>  die("Problemas para seleccionar la base de datos");</p>
<p>/* Se incluye el archivo que contiene la función para obtener la IP del cliente. */</p>
<p>  include ("obtenerIP.php");</p>
<p>/* Se obtiene la IP del cliente, en el formato típico: "xxx.xxx.xxx.xxx". */</p>
<p>  $direccionReal=obtenerIPCliente();</p>
<p>/* Se convierte la IP a valor numérico. */</p>
<p>  $direccionNumerica=ip2long($direccionReal);</p>
<p>/* Se localiza el registro que corresponde a la ip numérica. */</p>
<p>  $consulta="SELECT countryCode2, countryName FROM ipCountry WHERE ipStart<=$direccionNumerica AND ipEnd>=$direccionNumerica;&#8221;;</p>
<p>  $hacerConsulta=mysql_query($consulta, $conexion);</p>
<p>/* Se recuperan los datos de &#8220;código del país de dos letras y nombre del país. */</p>
<p>$datosDePais=mysql_fetch_array ($hacerConsulta);</p>
<p>  $codigoDePais=strtolower($datosDePais["countryCode2"]);</p>
<p>  $nombreDePais=$datosDePais["countryName"];</p>
<p>/* Se obtiene el nombre de la imagen de la bandera del país. */</p>
<p>  $nombreDeImagen=&#8221;imagenes/banderas/&#8221;.$codigoDePais.&#8221;.gif&#8221;;</p>
<p>/* Se muestran los resultados. */</p>
<p>  echo (&#8220;El pais que corresponde a la IP $direccionReal es: $nombreDePais. &#8220;);</p>
<p>  echo (&#8220;<IMG SRC='$nombreDeImagen' ALT='$nombreDEPais'>&#8220;);</p>
<p>/* Se liberan recursos y se cierra la BBDD. */</p>
<p> // mysql_free_result ($hacerConsulta);</p>
<p>  mysql_close ($conexion);</p>
<p>?></p>
<p>[/cc]<br />
En primer lugar nos conectamos con la base de datos, despues incluimos la funcion que creamos  destinada a obtener la ip del cliente. Usando esta funcion se obtiene la IP de la variable <strong>$direccionReal.</strong> Esta IP esta en formato tipico IPv4, es decir <strong>cuatro valores entre 0 y 255,</strong> separados por puntos. Este valor se almacena como una cadena.<br />
Sin embargo, los rangos de IP&#8217;s que tenemos en la tabla de MySQL estan almacenados como valores numericos, asi que necesitariamos convertir la cadena con la IP de la conexion a un valor numerico. Para estos casos PHP implementa la funcion <strong>ip2long()</strong>, que recibe una cadena representando una IP y la transforma a un valor numerico es decir:<br />
[cc lang="php"]<br />
<?PHP<br />
$ip=192.168.1.254<br />
$IPNumertica=ip2long($ip);<br />
echo $ip;<br />
?>[/cc]<br />
Como resultado tendriamos en pantalla <strong>1921681254</strong> que equivale a la ip que le pasamos la cual es<strong> 192.168.1.254</strong><br />
Tambien tenemos la funcion <strong>long2ip()</strong> que lleva acabo el cometido inverso, recibe un valor de tipo long y devuelve una cadena con una IP.<br />
Una vez convertida la IP a su correspondiente valor numerico, tenemos que localizar en la tabla  un registro en el que el limite inferior del rango sea menor o igual al valor obtenido y el limite superior sea mayor o igual a dicho valor. Para ello creamos la consulta:<br />
[cc lang="php"]<br />
  $consulta=&#8221;SELECT countryCode2, countryName FROM ipCountry<br />
WHERE ipStart<=$direccionNumerica<br />
AND ipEnd>=$direccionNumerica;&#8221;;</p>
<p>[/cc]<br />
Y bueno todo lo que sigue despeus de esto no lo pienso explicar ya que esta mas que claro.<br />
He subido el script para que lo prueben dando <a href="http://phpmexico.net/pruebas/ip/determinarPais.php">clic aqui</a><br />
Tambien he dejado el archivo .sql de la base de datos de ip para aquellos que quieran importar la base de datos ya directamente a mysql, esto lo hago por que en algunos hostings tienen limitada la memoria para el interprete de php por lo cual si intentan ejecutar el script de php que pasa los datos del archivo CSV sature la memoria y no logren importar nada, aqui la soluicion mas viable seria importar el archivo sql desde la consola de comandos de SQL mediante ssh<br />
<a href="http://phpmexico.net/pruebas/ip/iptocountry.sql">Archivo.sql</a><br />
Tambien dejo un archivo comprimido en formato <strong>.tar</strong> que contiene todas las banderas de los paises para mostrar al igual que el script completo:<br />
<a href="http://phpmexico.net/pruebas/ip/ips.tar">Clic para descargar</a><br />
PD. para aquellos que usan windows necesitan tener winrar instalado para descomprimir dicho archivo.<br />
Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imgeek.net/?feed=rss2&amp;p=895</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
