Aprendiendo a Usar Git: Parte 1

Mi intención con esta serie de artículos es cubrir los fundamentos de Git por medio de un tutorial muy sencillo en donde usaremos los comandos más básicos de esta fantástica herramienta.

En este tutorial asumiremos el rol de un desarrollador web que ha sido contratado por un amigo (Juan) para que le cree un blog muy simple. Como somos personas precavidas, decidimos usar Git para llevar un histórico de las modificaciones que vamos realizando en el sistema y así no correr riesgos en caso de meter la pata con el código o borrar archivos accidentalmente.

Nota: Se asume también que como programadores serios, estamos trabajando en alguna versión de Linux. En mi caso, Ubuntu 12.10.

El primer paso en nuestra aventura es instalar Git

Luego de esto, debemos crear un directorio en donde vivirán todos los archivos de nuestro blog

Iniciamos el repositorio de Git en la carpeta activa (website)

Usualmente, el primer archivo que se crea para cualquier página web es el “home” o la página de inicio. Tradicionalmente, a esta página se le llama index.html

En este punto podemos observar el estado de Git usando el comando git status

Git nos está informando varias cosas:

  1. Estamos actualmente en la rama “master” ( On branch master )
  2. El primer commit que hagamos, será el primero de nuestro repositorio ( Initial commit )
  3. Existen archivos que no están siendo “rastreados” por el repositorio ( Untracked files ), en particular, el archivo index.html
  4. Si intentamos hacer un commit ahora, nada entrará en el repositorio pues no tenemos nada cargado en el escenario ( nothing added to commit )

Si observamos con cuidado, veremos que Git nos indica como agregar al escenario, los archivos que no están siendo rastreados (use "git add <file>..." to include in what will be committed) . Como deseamos agregar el archivo index.html al escenario, ejecutaremos el comando de la siguiente forma:

Ejecutando nuevamente “git status”, podemos observar que el archivo index.html ya está siendo rastreado por el nuestro repositorio y está en la lista de cambios que serán almacenados en el repositorio durante el próximo commit.

Finalmente, para almacenar nuestro archivo index.html en el repositorio, ejecutaremos un commit

Todo mensaje de commit debe estar acompañado de un mensaje explicativo de los cambios que se están almacenando, es por ello que usamos la bandera -m (por message) en el comando, seguido del mensaje en si “El primer commit”.

La salida de este comando nos da información importante:

  1. Nos indica el valor hexadecimal que identifica a este commit dentro del repositorio ( c701efc )
  2. La cantidad de archivos que han cambiado desde el último commit ( 1 file changed ). Para Git, cualquier acción (crear, editar o eliminar) cuenta como una “modificación”
  3. La cantidad de líneas de código que han sido modificadas en total desde el último commit ( 11 insertions (+) ). En nuestro caso, refleja las 11 líneas que tiene nuestro pequeño archivo index.html que han sido agregadas al repositorio (por eso el símbolo +)

Si ejecutamos una vez más git status, veremos que el último commit del repositorio se corresponde exactamente a nuestro directorio de trabajo (working directory)

Para listar el histórico de cambios en el repositorio, hacemos uso del comando “git log”

Acá podemos observar:

  1. El hash que identifica al commit. Este valor hexadecimal es tan largo (para evitar duplicados o colisiones), que usualmente solo se usan los primeros 7 caracteres c701efc . Este es el mismo valor que nos mostró el comando “git commit” en el paso anterior y sirve como alias para identificar un commit en particular.
  2. El nombre y correo de la persona que ha realizado el commit
  3. La fecha y hora del commit, incluyendo la diferencia horaria respecto a UTC (-0430 por ser Venezuela)
  4. El mensaje del commit

Hasta acá llega la primera parte del tutorial, muy pronto estaré montando la segunda parte.

Usando pip con servidores alternativos

Desde que uso pip para instalar los paquetes de python dentro de mis entornos virtuales de desarrollo (virtualenv), me he dado cuenta que instalar Django es particularmente difícil.

Por ejemplo, cuando se ejecuto el comando

La respuesta que se obtengo, luego de esperar un par de minutos, es que la conexión con el servidor ha expirado (timeout) y el paquete no se ha instalado.

Por default, pip trata de descargar los paquetes del servidor http://pypi.python.org/simple/ así que mi primer intento por solventar este problema es usar la opción –use-mirrors del comando para consultar un servidor alternativo

Pero nuevamente, la conexión expira ya que el servidor alternativo consultado http://a.pypi.python.org/simple/ tampoco responde en un tiempo razonable.

Buscando por internet descubrí que es posible definir manualmente un servidor alternativo diferente gracias a la opción –index-url

Si este mirror (servidor espejo) tampoco funciona, es posible probar con cualquiera de los siguientes servidores hasta obtener una conexión con el repositorio de paquetes de pip:

  • http://a.pypi.python.org/simple/
  • http://b.pypi.python.org/simple/
  • http://c.pypi.python.org/simple/
  • http://d.pypi.python.org/simple/
  • http://e.pypi.python.org/simple/
  • http://f.pypi.python.org/simple/
  • http://g.pypi.python.org/simple/

Para poder ver la disponibilidad y tiempo de respuesta de cada uno de estos mirrors se puede consultar esta página web: http://www.pypi-mirrors.org/

Como escribir siempre la dirección completa del mirror es tedioso, es posible definir como servidor default al mirror C modificando el archivo de configuración global de pip

En mi caso el archivo de configuración queda como:

Ahora, cada vez que corra el comando

Estaré consultando el repositorio desde el mirror C y no desde el servidor estándar

Espero que este pequeño tip ayude a otros programadores a no perder tiempo en la configuración de sus entornos virtuales.

Cómo instalar y usar GAWK en Windows

GAWK es un lenguaje simple pero muy útil para procesar logs de información. Aunque originalmente fue desarrollado para Linux, es posible usarlo en Windows gracias a la aplicación cygwin, que no es más que un emulador del terminal de Linux corriendo dentro de Windows.

Para instalar cygwin solo debemos seguir los siguientes pasos:

1) Ingresar a la página http://www.cygwin.com/

2) Descargar el archivo setup.exe que encontramos en dicha página y ejecutarlo

Dibujo1

3) Al ejecutar setup.exe aparece un cuadro de diálogo y se debe hacer clic en “Siguiente”

 cygwin1

4) Usar la selección por defecto y hacer clic en “Siguiente”

cygwin2

5) Usar la selección y la ruta de instalación por defecto y hacer clic en “Siguiente”

cygwin3

6) Usar la ruta por defecto y hacer clic en “Siguiente”

cygwin4

7) En caso de estar tras un proxy (como en el caso de mi máquina en Movilnet), se debe seleccionar la opción “Use HTTP/FRP Proxy” y definir el host “proxy” y el puerto “80”. En cualquier otra circunstancia (la máquina del hogar por ejemplo), usar la opción “Direct Connection”

cygwin5

8) Esperar mientras el instalador busca los “mirrors” disponibles

cygwin6

9) Seleccionar el mirror “http://box-soft.com” y hacer clic en “Siguiente”

cygwin7

10) Dejar las opciones por defecto y hacer clic en “Siguiente”

cygwin8

11) Esperamos mientras se descargan todos los paquetes. Este proceso puede tardar bastante tiempo dependiendo de la velocidad de conexión

cygwin9

12) Usar las opciones por defecto y hacer clic en “Finalizar”

cygwin10

13) Accedemos al terminar haciendo doble clic en el ícono “Cygwin Terminal” en el Escritorio para que se creen los archivos base de nuestro usuario

cygwin11

14) Ingresamos a la carpeta C:\cygwin\home. En esa carpeta existirá una carpeta con nuestro nombre de usuario (en mi caso es dbarre03). Creamos un acceso directo de dicha carpeta en el escritorio para facilitar el trabajo.

cygwin12

Listo, cada vez que querramos procesar un archivo, podemos meter en dicha carpeta tanto el log como el archivo con el código awk y al ejecutar el Cygwin Terminal, tendremos acceso a la consola de Linux dentro de Windows.