miércoles, noviembre 21, 2007

Mercurial

Hace un tiempo que vengo usando subversion para matener los proysctos propios (siempre regañé de la incomodidad del setup para el uso personal) y la necesidad de cierta disciplina a la hora de hacer commit. Yo soy un programador de rachas, es decir, existen momentos creativos, y momentos de crítica. Generalmente, cuando me ilumino, hago un commit como medida preventiva si rompo todo :S (para que voy a branchear si estoy trabajando solo). Cuando hago lo mismo trabajando en grupo, es decir ser commit friendly... a veces, se entretejen mis commits, con los de otro programador con su "racha creativa", y se llega a un estado que se puede describir con estas palabras: "perá, no hagas commit", "dale, dale, ahora hacé commit", y cosas así...
Comencé a probar otros mecanismos de control de versiones. Probé Svk y Darcs, Bazaar(muy superficialmente, me parecía que estaba demaciado enfocado al desarrollo de Ubuntu) y finalmente encontré algo sencillo, su nombre es mercurial (aka hg). Sinceramente, no fue por el tema de nuestro proceso caótico de desarrollo, sino por que la máquina donde teníamos nuestro server de svn con apache, estaba alejada geográficamente, y nos conectabamos por vpn, y a veces el enlace no funcionaba.

La documentación oficial es corta, sin embargo suficiente.
La principal diferencia entre un sistema de control distribuido, es que uno hace los commits contra su propio repositorio, luego hace push o pull de sus cambios, hacia o desde otro repositorio respectivamente.
Cada copiad de trabajo, es una rama. Si usamos repositorio central, convergerán en el producto final, pero mientras tanto, podemos mantener localmente las versiones. Debido ha esto aumenta la posibilidad de hacer el merge un poco más caótico, pero creo que estar consiente de esto. Si sospecho que alguien en mi equipo de trabajo puede estar introduciendo cambios que pueden hacer que mi merge contra el repo central sea una odisea, puedo hacer un pull del repo de esta persona y ver como remediar el problema.

El setup para http es bastante sencillo, corre como cgi, es cuestion de una regla para mod_rewrite y un location si queremos tener login.
Otra coasa que no probé pero sonó muy bien, es que es plugineable.

Bien, como se usa?
Primero lo instalamos, apt-get install mercurial, emerge mercurial o yum install mercurial (según usemos Debian/Ubuntu, Gentoo o Fedora).
Para crear el repo, en una carpeta:
$ hg init
ahora, si lo que queremos es hacer un "checkout", sería algo como
$ hg clone http://repo # También podemos enviar los cambios por mail o por ssh
cuando queremos hacer commit (muy similar a svn)
$ hg commit
los rollbacks
$ hg rollback
para enviar los cambios
$ hg push
y para traerlos
$ hg pull
Toda la configuración está en la carpeta oculta .hg en el archivo hgrc (.hg/hgrc)
Los archivos que queremos hacer pasar por lato, los ponemos en un .hgignore en el root del proyecto.
Para servir el proyecto por http, adivinen, hg serve, jeje, para quienes usaron subversion la sintaxis es muy similar en muchos comandos, y para quienes no, creo que es bastante sencillo.

Tiene un plugin para trac, que todavía no probé, pero también es otra feature.

lunes, noviembre 12, 2007

Creación de screencasts

Una imagen vale más que mil palabras, y un video?
La wikipedia define un screencast como:
"Un screencast es una grabación digital de la salida por pantalla de la computadora, a veces conteniendo narración de audio."

Existe bastante software para crear screencasts, en Windows, uno muy popular es Camtasia. En el mundo GNU, existen varias posibilidades, pero solo les voy a hablar de las que me parecen maś apropiadas.
Para capturar el video, la mejor aplicación IMHO es Record-My-Desktop, con su idonea interfase Gtk-Record-My-Desktop. Para instalarlo en Ubuntu:
$ sudo apt-get install gtk-recordmydesktop
La aplicación es muy intuitiva, y la captura no consume tanto CPU como ffmpeg. Los resultados son más que aceptables.

La salida de esta aplicación es un archivo out.ogg en nuestro directorio home, que podremos ver sin problemas con vlc, mplayer (les recomiendo la GUI smplayer) o xine.
Siempre graben 5 segundos más de screencast al final, para que no se les certe el video si los keyframes estan muy lejos.
El problema de este formato OGG/Theora, es que ocupa mucho espacio. Para reducir el espacio, podemos recodificar el video utilizando otra aplicación llamada Avidemux que nos brinda una variedad de codecs interesante.
$ sudo apt-get install avidemux
Avidemux no abre directamente los archivos generados por record-my-desktop, debemos convertirlos a algo que el entienda. Para esto podemos utilizar mencoder.
Para instalar mencoder
$ sudo apt-get install mencoder
y para convertir los videos, desde una consola (que podemos lanzar con F4 en Konqueror), ejecutamos la siguiente linea:
$ mencoder OUT.OGG -o SALIDA.AVI -ovc lavc -oac mp3lame
El archivo SALIDA.AVI puede ser leido sin problemas por avidemux. Tengan en cuenta que si hacen varias grabaciones con record-my-desktop, serán numeradas como out.ogg, out.ogg.1, out.ogg.2, etc.
Una vez cargado el archivo en Avidemux, vamos a configurar el codec de video:
H264 es uno de los codecs más avanzados que probé, produce las mejores relaciones peso/calidad, y no trae muchos problemas a la hora de reproducir los archivos.
A la hora de configurar la tasa de bits y las pasadas existen varias alternativas, pero les recomiendo la de elección de tamaño de archivo. Recuerden que si van a enviar el video por mail, el máximo tamaño de attachment es generalmente 10MBs. En lo posible es mejor no acercarse, a menos que nuestros videos alcancen los 20-30 minutos.
Además del codec de video, podemos aplicar varios filtros, uno útil, es el resizer, esto nos puede ahorrar varios bits :)

Finalmente, si nuestro screencast tiene audio, debemos elegir el codec de audio.
Notarán que no existe ningún botón de "Comenzar" o "Convertir" , para iniciar la conversión, tenemos que ir al menú Archvio > "Añadir a la lista de tareas", poniendo el nombre de la tarea y el nombre del archivo destino. Luego con "Archivo" > "Mostar Lista de Tareas" o Ctrl + J, seleccionamos la tarea y la ejecutamos.

Tengan en cuenta que la barra de progreso debe llenarse dos veces si eligieron una codificación de video de dos pasadas (casi siempre).

Espero que les sirva!

viernes, noviembre 09, 2007

Reflexiones de primera semana

Hoy se cumple la primera semana en el laburo de la Uni. Todo ha ido bastante tranquilo. Me aguarda una gran tarea, la de migrar MDeamon a Postfix/Fetchmail o lo que más convega. Control de tráfico también será una de las tareas a tener en cuenta...
En este ultimo tiempo también he estado trabajando bastante con Django, en un trabajo para una intranet. Aprendí que no hay punto de comparación entre un lenguaje dinámico y uno estático (tipado). Salieron cosas genéricas para generar formularios, para generar búsquedas, listados, cosas que espero podamos liberar cuando estén más maduras. Hoy, cuando la primera entrega se encuentra hecha, veo que necesitamos mejorar el proceso, más que el producto. Los lenguajes ya son lo suficientemente sofisticados, los frameworks, los tenemos en todos los colores y sabores, pero cuando el desarrollo se extiende a más de una persona, el proceso de desarrollo es el principal responsable de las demoras y fallas. Ya se, son las palabras de las materias de ingeniería de software, pero, jejeje, voy a refrescar uno de los dichos de uno de mis profes "si escucho, olvido; si leo, recuerdo; si hago, aprendo"