Guía rápida de GIT (a.k.a. GIT for dummies)

Hay tecnologías que se meten en tu vida, que no las quieres pero se meten en tus estudios, tu trabajo y no hay más remedio de lidiar con ellas con el mejor humor posible; en cambio, hay otras que se te cruzan por delante y te apetece incorporarlas a tu dia a dia desde el momento en que te enteras de su existencia.

GIT logo

Para mi, GIT pertenece a este segundo tipo de tecnologías. Hacía tiempo que tenía ganas de meterme a fondo en este sistema de control de versiones, así que he aprovechado mis primeros pasos en un lenguaje de programación nuevo para escribir esta pequeña guía (me la he escrito para mi pero espero que también os guste a vosotros :) ).

Instalación

Para instalar las herramientas básicas de GIT en Ubuntu (probado en 11.04) sólo hace falta ejecutar el siguiente comando en el terminal.

sudo apt-get install git-core git-gui git-doc

En principio no vamos a utilizar la interfaz gráfica pero el paquete no ocupa mucho (y no estaba convencido que no tuviese que recurrir a ella durante los primeros días).

Configuración de usuario

A nivel de identificación de usuarios GIT no es diferente a otros sistemas de control de versiones. Éste require el envío del usuario que realiza según que acciones para poder implementar un control de acceso fiable (dependiendo del repositorio). Para proporcionar estos datos a todas las operaciones que realicemos desde un mismo equipo podemos ejecutar los siguientes comandos:

git config --global user.name "Nombre Apellidos"
git config --global user.email "alias@dominio.com"

La alternativa a esto es mandar el autor en cada operación con un parámetro extra peeero… no lo recomiendo, es mucho más cómodo esto y como tenemos cuidado de no ir revelando la contraseña de nuestro usuario (verdad? :) ) no vamos a tener problemas.

Creación del repositorio y primer “commit”

GIT, al ser un sistema de control de versiones distribuído, nos permite trabajar sin la necesidad de estar conectados a un servidor que alberga un repositorio central. De esta manera lo primero que debemos hacer es crear un repositorio en nuestra máquina (más tarde ya nos encargaremos de sincronizarlo con un servidor expuesto a Internet).

Para crear un repositorio en nuestra máquina bastará con la ejecución del siguiente comando. La primera vez recomiendo que esta operación se realice en un directorio vacío para controlar 100% como funciona, cuando hayamos adquirido más experiencia ya nos atreveremos a saltarnos pasos :)

git init

Hasta aquí fácil, verdad? Pues vamos a empezar a usar el control de versiones y sincronizarnos con un repositorio remoto.

Versiones en local y sincronización con servidor remoto

Una vez en marcha el repositorio local, crearemos un archivo en el directorio (para el ejemplo vamos a usar “file” como nombre del archivo) y haremos un commit local en nuestra máquina (no se envían a un servidor remoto de forma automática):

git add file
git commit -m "Nuestro primer commit"

NOTA: se sobreentiende que el fichero “file” lo tenéis que crear antes de ejecutar estos comandos.

Una vez creada la primera revisión vamos a sincronizarlo con un servidor remoto. Para realizar esta operación primero tenemos que decirle a GIT dónde encontrar este repositorio y que nombre vamos a utilizar para referirnos a él:

git remote add central usuario@servidor:path/repositorio.git

Antes de seguir vamos a analizar brevemente el comando. “git remote add” es el nombre entero del comando puesto que lo que queremos es añadir la dirección de un repositorio remoto a nuestro entorno de desarrollo, “central” es el alias que vamos a utilizar para referirnos al repositorio remoto y “usuario@servidor:path/repositorio.git” es el método que vamos a utilizar para acceder al repositorio (debemos tener en cuentra que los repositorios GIT son directorios como cualquier otro y que debemos utilizar sistemas como SSH o HTTP para acceder a ellos).

Cuando ya hemos definido como vamos a acceder y referirnos a él, ya podemos intentar sincronizar nuestras modificacione en local con el servidor remoto. Para eso mandaremos todos los cambios de nuestra rama a la rama del repositorio “central”.

git push -u central master

Igual que hemos hecho antes, vamos a analizar este comando por partes. “git push -u” básicamente lo que hace es enviar todos los cambios de una rama hacía otra y “central master” lo único que define es el destino y el orígen de los cambios que queremos enviar.

Cabe destacar que la rama principal que se crea al ejecutar “git init” se llama master. Este nombre se puede cambiar en el momento de la creación de repositorio pero es un valor por defecto que por lo que he podido observar se respeta bastante dentro de la comunidad de usuarios de GIT.

Y… esto es todo por hoy! Espero seguir ampliando esta breve explicación sobre GIT en los siguientes artículos pero no prometo nada. El trabajo, los estudios y otras ocupaciones se podrían entrometer :)

Espero que os haya sido de ayuda!!

ROM para el Nexus One – MIUI

Después de un tiempo con un HTC Desire, del que os he hablado en algún que otro post anterior, he cambiado mi terminal por un Nexus One. No entraré a hacer una reseña del terminal pero sí comentaré que, aunque son dos terminales muy parecidos, me quedo con el Nexus; seguramente se trata de una cuestión de ‘feeling’ pero en mi mano luce mucho mejor.

MIUI

Dicho esto voy a presentaros una de las ROMs que he probado estos días en el Nexus: MIUI. Esta ROM tiene bastante fama y atrae un buen número de las miradas dirigidas al mundo de las ROMs alternativas.

La primera sensación que da esta ROM es de tener los detalles gráficos muy cuidados. La interfaz gráfica es muy limpia y sorprende la fluidez con la que se maneja. En la imágen siguiente podemos ver una captura de pantalla de mi terminal con esta ROM.

MIUI Launcher

NOTA: Las ROMs MIUI permiten tomar capturas de pantalla directamente desde el terminal y sin la instalación de ningún añadido.

A continuación, cuando empezamos a jugar con las configuraciones de esta ROM nos damos cuenta de la flexibilidad de ésta y del potencial que tiene a la hora de personalizar nuestro terminal. Es en este punto donde también se pone de manifiesto una de sus características/defectos que, desde mi punto de vista, le resta punto: el aroma a iPhone que desprenden algunos de sus elementos de diseño. Para ilustrar esto os pongo una captura de los menus de configuración:

MIUI settings

Sinceramente, el rendimiento de esta ROM me ha sorprendido muy gratamente y detalles como el hecho de que incluya ya la última versión del Market o que se actualice todos los viernes de forma programada me hace otorgarle una muy buena nota. Y alguién más debe pensar lo mismo porqué este mismo año se va a poner a la venta un terminal con esta ROM de serie. ¡Ah! se me olvidaba, tiene un gran reproductor de música, le da mil vueltas al reproductor de música por defecto en mi opinión.

Y aun así, no será la que se quede en mi terminal, pues no ofrece acceso al código fuente y esa es una de las grandes virtudes de Android. Cada uno que elija su camino :-)

Actualizar HBOOT en la HTC Desire (AlphaRev)

ATENCIÓN: Este post puede resultar extremadamente friki para aquellos que no estén dentro del mundillo de Android, ROMs y bootloaders.

El euipo de AlphaRev ha publicado recientemente una nueva versión de los HBOOT Oxygen y CyanogenMod7 para la Desire (tienes una Desire y aun no conoces el trabajo de AlphaRev? abre el enlace de su página oficial o del thread en XDA ya!) y comunicaron por Twitter y otros canales la conveniencia de actualizarse.

Las instrucciones para actualizar si ya teníamos el HBOOT de AlphaRev instalado son muy sencillas por lo que no genera ningún tipo de temor el hecho de actualizarlo… hasta que pasa lo que pasa… que te quedas sin móvil… durante los minutos que tardas a llegar hasta aquí.

Para evitar que nos pase esto, primero vamos a repasar los pasos que se describen en la página de AlphaRev:

  1. Hacer un backup desde el recovery (Nandroid)
  2. Descargar y verificar (md5) la imagen del HBOOT
  3. “Flashear” la imagen del HBOOT (fastboot flash hboot nombre_del_archivo_del_hboot.img)
  4. Ejecutar: fastboot reboot-bootloader (y esperar a que reinicie, tarda muy poco)
  5. Ejecutar: fastboot erase cache
  6. Entrar en el recovery, hacer wipe de todo y restaurar el backup

Pues bien, si haces esto con la versión 7 de Cyanogen instalada, la restauración del backup NO funciona y el telefono se queda completamente colgado. Si este es el caso, saca y mete la batería (para devolver la vida a tu móvil) y sigue estos sencillos pasos:

  1. Hacemos wipe de todo (aunque no creo que sea imprescindible)
  2. Instala la versión 7 de Cyanogen desde cero (flash .zip from sd), yo utilicé la versión 7.0.3
  3. Ahora sí, intenta restaurar el backup creado antes de que todo esto ocurriera

Yo conseguí restaurar el backup sin perder nada de nada, pero la sensación de perder completamente el control de la Desire es muuuy desagradable :-)

Evidentemente, no me hago responsable de ladrillos que puedan surgir por culpa de seguir estos pasos. Este procedimiento me ha funcionado a mi (y, en el futuro, quizás a alguna víctima más que encuentre por el trabajo, pero aun no tengo más información que mi experiencia personal).

Cambiar el dia de inicio de semana en Gnome

Hace tiempo que decidí tener instalados los sistemas operativos en el lenguage en el que son concebidos y, nos guste o no al resto del mundo, este idioma es el inglés (más concretamente el locale en_US).

Esto conlleva algunas ventajas pero también algunas desventajas. Una de ellas es ver como en el calendario que se muestra en la barra del sistema las semanas empieza por domingo. Realmente no se trata de un problema pero… ya que utilizamos software libre ¿por qué no vamos a adaptarlo al 100% a nuestros gustos y preferencias?

Manos a la obra…

Primero de todo vamos a editar el fichero “/usr/share/i18n/locales/en_US” y dónde encontremos:
first_weekday 1

Debeis poner:
first_weekday 2

Cómo podréis observar, el valor que ponemos coincide con el valor de la linea que empieza con “first_workday”. ¿Es casualidad? pues no, first_workday define el primer dia laborable de la semana y, por lo tanto, es normal que coincidan si queremos que nuestras semanas empiecen en lunes.

Una vez guardada esta modificación debemos ejecutar el comando “sudo locale-gen”. Esperamos que termine de generar todas las alternativas, reiniciamos la sesión (o ejecutamos “pkill gnome-panel” en el terminal, pero eso yo no lo he dicho!) y… lunes como primer dia de la semana!

Si tienes como primer dia de la semana el lunes y quieres cambiarlo a domingo, en lugar de cambiar el valor de first_weekday de 1 a 2, hazlo al revés :-)

Módulos para Drupal 7 – El navegador de archivos

Un componente básico para blogs y CMS para el público general es un gestor para subir, modificar y eliminar archivos (habitualmente imágenes). En Drupal no existe un gestor de archivos por defecto, así que también debemos recurrir a la instalación de módulos independientes. En este post vamos a ver el módulo IMCE:

El módulo IMCE permite gestionar archivos desde una interfaz bastante intuitiva (bastante… para la gente habituada al entorno web-servidor) con sólo instalarlo. Vamos a ver alguna de sus características:

Como podemos ver en la captura anterior, la interfaz nos permite subir archivos, generar miniaturas, eliminar archivos y redminesionar imágenes. La última opción que podemos ver en la imagen (Insert file) se trata de la posibilidad de insertar la imagen en un editor de texto WYSIWYG (en el caso de que el archivo que hayamos escogido se trate de una imagen).

Quizás una de las características que más se hecha de menos es la de crear directorios o subdirectorios a través de la interfaz gráfica. Se puede navegar por una jerarquía de directorios en el caso que hayan sido creados con anterioridad, pero no se pueden crear desde este módulo.

La segunda captura nos muestra un ejemplo del diálogo de subida de una imagen al servidor. He considerado que esta captura era una buena manera para introducir una de las funcionalidades más interesantes del módulo IMCE, el redimensionado de imágenes. IMCE nos provee una interfaz sencilla para la creación de miniaturas y redimensionado de imágenes (sobreescribiendo la actual o creando una copia).

En el apartado de configuración de IMCE podemos definir el tamaño predeterminado para la generación de miniaturas para así adaptarlas a la estructura de nuestro site:

Y si necesitamos una resolución para una ocasión especial, podemos recurrir a la opción redimensionar sin tener que modificar la configuración general del módulo para un caso concreto :-) :

Como podéis ver, IMCE nos provee un conjunto reducido pero muy potente de herramientas para la gestión de nuestros archivos y, sobretodo, de nuestras imágenes.

La integración con CKEditor es un poco rebuscada porqué el diálogo para insertar imágenes de CKEditor no se integra con IMCE pero se puede abrir desde un botón y la opción “Insert File” devuelve la ruta de la imágen seleccionada al diálogo. En la siguiente captura podemos ver el botón desde dónde se puede acceder al módulo IMCE en la inserción de imágenes en el editor:

Mirad también los módulos que se recomiendan en la página del módulo en Drupal, valen la pena!

Consejo del dia #1

Cuando tu proveedor de hosting hace algo bueno por ti sin que hayas reclamado nada y sin intertar cobrarte más, hazle caso en todo, pero todo todo. Es decir… si te mandan un correo del estilo:

“Estimado colaborador,

Como nos mola cantidad lo que haces en nuestros servidores, hemos decidido darte un mejor servicio sin que tengas que reclamarlo, ni cobrarte más, sólo porqué nos caes bien. Para ti nada va a cambiar…

… pero si algun dia quieres hacer una ofrenda a los dioses sacrificando un gusano verde fluorescente mientras haces el pino y te comes una piruleta de wasabi, nuestros servidores lo agradecerán.”

Si recibes esto ya puedes salir a buscar un gusano verde fluorescente, una piruleta de wasabi y alguien que sepa hacer el pino, porqué si no lo haces, tu proveedor se va a poner triste y se va a vengar.

Tú simplemente hazles caso, siempre (que no te cobren más). :-)

Por cierto, el proveedor de hosting que ha hecho algo bueno para mi sin pedírselo es Hosting24.com. Eso sí… la piruleta de wasabi era bastante picante.

Módulos para Drupal 7 – Login

El módulo que trataremos hoy sirve para mejorar la experiencia de los usuarios (o de los administradores) en todo lo que tenga relación a la identificación o el registro de los usuarios. Este módulo se llama LoginTobogan y está completamente preparado para la versión 7 de Drupal.

LoginTobogan proporciona las siguientes mejoras:

  • Login de los usuarios utilizando el correo electrónico
    Esta es una funcionalidad que muchas páginas deberían implementar. A veces es complicado recordar el nombre de usuario (aunque este siga siendo necesario por qüestiones de privacidad).
  • Presentación de los formularios de identificación/registro en una misma página
    Esta página cambia entre el formulario de login y de registro por JavaScript pero la apariencia se tiene que acabar de afinar (vaya, que el estilo es feo de cojones narices).
  • Modificación de las opciones de registro
    Se añaden la repetición del correo electrónico y la posibilidad de que el usuario defina su password. Esta última característica puede ser un poco problemática ya que los usuarios son capaces de identificarse desde el mismo mo

Módulos para Drupal 7 – Editor WYSIWYG

Tengo que confesar que hace tiempo intenté “meterme” a fondo en la versión 6 de Drupal y fracasé estrepitosamente; nunca conseguí hacerme amigo de los módulos Views y CCK pero parece que los tiempos han cambiado :-)

Y con este cambio, casualmente, me he visto involucrado en dos proyectos que requieren algo más que un WordPress (damn it!). Mi primera idea fué huir despavorido hacía Joomla (siempre me pareció un poco más accesible) pero la reciente aparición de la versión 7 de Drupal me dió confianza suficiente para intentarlo otra vez. Total, al ser una versión nueva, todos partíamos de cero!

Pues bien, la experiencia está siendo bastante grata, he decidido lanzarme a por Drupal definitivamente aunque, como en todo, haya luces y sombras. Por ejemplo, el módulo CCK (integrado ahora en el core de Drupal) parece que tiene más ganas de conocerme y el módulo Views… bueno… sigue siendo el módulo Views, es muy suyo, pero algún dia encontraremos un punto de encuentro, seguro. La experiencia está siendo mucho más agradable pero he detectado que el ecosistema de módulos aun no ha conseguido ponerse al dia y eso da bastantes dolores de cabeza la verdad.

Esta falta de soporte a la nueva versión por parte de los módulos me ha animado a arrancar una série de artículos explicando mi experiencia con esos módulos (a veces en versiones alpha1 :-S ) y como sortear algunos de los problemas más comunes.

Dicho esto, vamos a por el primero de todos: El Editor WYSIWYG

Un Editor WYSIWYG en Drupal 7

Para añadir un editor WYSIWYG en Drupal yo he encontrado dos alternativas interesantes:

  • El módulo WYSIWYG
  • El módulo CKEditor

Módulo WYSIWYG

Con el módulo WYSIWYG vamos a tener que instalar el módulo para luego subir el editor que más nos guste (como TinyMCE, el mismo CKEditor o cualquier otro de los soportados). Una desventaja que tenemos al utilizar el módulo WYSIWYG es que la integración del módulo que nos permite subir imágenes es bastante más laborioso.

La configuración básica de WYSIWYG es muy intuitiva y los menús aparecen en lugares dónde uno espera encontrar las opciones de configuración pero, a medida que se piden más cosas, la cosa se complica. El ejemplo más claro lo tenemos con el módulo IMCE, que nos permite subir imágenes y archivos al espacio de disco destinado al gestor de contenidos.

Para activar el módulo IMCE, si hemos elegido el módulo WYSIWYG, debermos instalar un módulo que haga de puente entre el editor y el gestor de archivos y, posteriormente, instalar y configurar el gestor de archivos.

Da la sensación de que el módulo WYSIWYG es un módulo desarrollado para aspirar a entrar en el core de Drupal. El nivel de abstracción que proporciona hace necesario la instalación y configuración de módulos extra de la misma manera que los componentes internos de la plataforma.

Módulo CKEditor

La particularidad principal del módulo CKEditor es que no instala el editor automáticamente, al igual que pasa con el módulo WYSIWYG, se tiene que subir a posteriori. Esto es bastante extraño si tenemos en cuenta que sólo soporta el mencionado editor y debemos tener en cuenta también que no hace falta más configuración que subir el editor en la carpeta que se indica en las instrucciones de instalación (leedlas!).

La configuración de CKEditor es un poco más complicada que el módulo WYSIWYG pero únicamente porqué la ubicación de los menús de configuración es un poco rebuscada. Una vez correctamente configurado, es muy sencillo habilitar el soporte para gestores de archivos (soporta menos que WYSIWYG) y las tareas de mantenimiento son, realmente, mínimas.

A continuación podéis ver que la configuración para que el editor funcione es realmente sencilla (sólo es necessaria el primer atributo):

En la siguiente imagen os podéis hacer una idea de lo personalizable que puede llegar a ser el módulo si queremos entrar en detalles:

Conclusiones

Cómo ya he avanzado en el apartado del módulo WYSIWYG, éste parece un módulo con aspiraciones a ser incluído en el core de Drupal; proporciona tanta flexibilidad y alternativas que el mantenimiento de este addon constituye una tarea independiente del mantenimiento de la salud del gestor de contenidos. Se trata de una genial alternativa para aquellos que experimentan con Drupal por placer o con vistas a evolucionar sus implementaciones constantemente.

Por otra parte tenemos el módulo CKEditor, que proporciona menos posibilidades pero que hace la vida del desarrollador mucha más fácil. El soporte a gestores de archivos es muy reducido pero soporta el que me gusta a mi así que… perfecto! Las opciones de CKEditor son muchas, pero debemos pensar que nos reducimos a este editor concreto.

Es díficil entender como Drupal se resiste a incluir ciertas funcionalidades en el núcleo de su plataforma. Un editor visual y un gestor mínimos de archivos no me parece algo descabellado, WordPress ha hecho muy buen trabajo con esto y creo que deberían seguir su ejemplo. Claro que seguramente pagando, santa Acquia canta…

Por cierto, si siempre te has preguntado que @#$! significa WYSIWYG… búscalo. Yo lo encontré :-)

Rom para la HTC Desire: Oxygen

Desde la compra de mi primer terminal Android, una HTC Magic, mi interés por este sistema operativo no ha hecho más que crecer. Hace unos días, por cuestiones contractuales conseguí que Vodafone me proporcionara un nuevo terminal Android, concretamente una HTC Desire. Como tenía experiencia en terminales de este tipo me propuse cargarme la garantía en pocas horas y instalar una ROM diferente a la que viene de fabrica.

INCISO
La ROM que viene de fábrica con la Desire NO me parece aceptable para un terminal de estas características. Lleva tantas cosas INÚTILES instaladas que el rendimiento del terminal hace pensar que te has equivocado de teléfono pero no! es culpa del paquete de aplicaciones que instala HTC. El teléfono en si es una pasada :)
FIN DEL INCISO

Con el software de Unrevoked me resultó extremadamente fácil instalar un recovery alternativo pero ahí empezaron mis problemas: La ROM que más satisfacción me había reportado en mi anterior dispositivo (Cyanogenmod 6.1 RC1) no arrancaba y tenía que recurrir a una copia de seguridad de la original para no quedarme con un ladrillo equipado con una preciosa pantalla capacitiva de 3.7 pulgadas (God bless backups!!!).

Y de la forma más tonta me encontré en la tesitura de escoger entre permanecer con la ROM original (no gracias) o poner el mundo de las ROM personalizadas patas para arriba y encontrar una de mi agrado. Y escogí esta última…

… para encontrar una verdadera joya, en estado Beta pero joya al fin y al cabo. La ROM de Oxygen intenta proporcionar una ROM con el software del proyecto de código abierto de Android y muy pocas cosas más (justo para que funcione todo el hardware del teléfono correctamente, como la radio FM por ejemplo).

Mi experiencia con esta nueva ROM es magnífica. Con la última versión a dia de hoy, la 0.2.2, el volumen del auricular para las llamadas quizás es demasiado alto pero el resto funciona de maravilla. Personalmente animo a todos los poseedores de terminales Android a que busquen ROMs lo más cercanas al proyecto Open Source de Android, todos nos beneficiaremos de ello :)

HTC Desire

Problemas con Ubuntu 10.10 en un Macbook

Esto no va a ser una guía para realizar una instal·lación limpia, sino una pequeña indicación para los problemas aparecidos con el touchpad de los Macbooks con la actualización de Ubuntu 10.04 a 10.10.

El escenario es el siguiente: Un Macbook 2,1 (versión del equipo no del procesador) corriendo Ubuntu 10.04 con un touchpad funcionando perfectamente, pierde la capacidad de hacer scroll con dos dedos después de realizar el update del sistema a 10.10 (vale, he usado la release candidate, pero me apostaría algo a que con la versión final esto también va a pasar). La pestaña de “Touchpad” en la aplicación de configuración del mouse también había desaparecido.

La solución, bien simple: Añadir el repositorio del equipo Mactel (ppa:mactel-support) e instalar el paquete bcm5974-dkms (a través del Ubuntu Software Center o mediante comandos). Posteriormente, instalar el paquete xserver-xorg-input-synaptics (mediante comandos). Yo tuve que reinicar pero todo ha vuelto a la normalidad :)

Happy update!!!