Archive for the ‘Linux’ Category.

Se libera msn-pecan 0.1.0 de felipec

Esa es la noticia: se ha liberado msn-pecan 0.1.0! Y me da gusto.

Para citar (traducido) del post de felipec en su blog:

Después de un poco más de dos años de desarrollo, realmente nos orgullece anunciar la primera versión estable de msn-pecan. El proyecto comenzó como un “bifurcación” del protocolo msn de libpurple (lea más abajo por qué no es realmente un bifurcación) pero ha crecido y pronto será una librería por sí misma, también con soporte para Telepathy.

Aunque puse sólo 3 de los 1009 parches y que no entiendo nada del código en sí, debo admitir que me siento parte del projecto.

Hace 7 años inicié un proyecto para escribir un cliente de MSN Messenger para Linux, en modo texto, basado en ncurses. El proyecto aún está registrado en Sourceforge como msnclient. Fue mi primer intento de escribir software libre. Sin embargo, el reto fue demasiado grande y el proyecto rápidamente se murió. Nunca llegué más allá de simplemente iniciar sesión y enviar mensajes de una sola palabra a otro contacto.

Eventualmente aprendí a usar Pidgin y conseguí buen hardware y la necesidad de un cliente personalizado de MSN ya no existía. Aún así creo que msnclient es un buen concepto para ser realizado. Tal vez algún día sea una interfaz basada en las funciones de msn-pecan.

Dicho eso, a mediados de 2009, cuando comencé a aprender Git, felipec me proveyó una rama de su repositorio para probar las conexiones directas (mejor conocidas como “transferencias rápidas” o “transferencias p2p”). No funcionaron en ese entonces.

6 meses y muchos commits sobre su master después: 0.1.0-rc1 salió y directconn aún no funcionaba pero la rama dc-test era ya muy vieja. Había aprendido más sobre Git y creí que era lo suficientemente mejor como para intentar corregir el problema de las conexiones directas. Sin embargo no sabía nada de la funcionalidad de MSN ni del código. Al menos sabía cuál era el primer paso: fuera lo que fuere había que hacer un rebase del código. Así que intenté rebasarlo para que las correcciones de la rama dc-test funcionaran bajo la nueva base de código; al menos sería útil para los desarrolladores. Así que la guerra estaba perdida para mí, pero tal vez felipec se podría motivar lo suficiente para continuar trabajando sobre esta parte de msn-pecan (pero se supone que uno no dice eso, cierto?). Así fue como ví las cosas y obtuve la motivación de hacerlo. Además, sería mi primer git rebase en el mundo real.

El principal problema fue que felipec había hecho muchos cambios de reorganización, renombrado y división de código en julio (algunos bien otros mal). Con un poco de experiencia en C, logré hacer el rebase y lo envié como un par de parches.

De repente felipec continuó trabajando arduamente sobre directconn. No sé si fueron los parches o no; eso es lo de menos. Lo importante es que en msn-pecan 0.1.0, las conexiones directas ya funcionan y de manera estable. Aunque no en todos los casos, es un gran avance.

Ahora creo que fue más allá de aprender a hacer un rebase: Realmente aprendí a contribuir usando Git, tal cual lo hacen los niños grandes en el proyecto del Kernel Linux. Aún no entiendo el código ni el funcionamiento interno del proyecto, pero esos dos parches me permitieron aprender mucho sobre colaboración y revisión de software. Esto fue particularmente útil para Superkb que también está hecho en C y su código fuente está manejado en Git.

Así que, gracias nuevamente, felipec, felicidades y todos deberíamos tomarnos un trago por el proyecto, aunque estemos en diferentes partes del mundo. ¡A tirar fiesta y correr la voz!

felipec’s msn-pecan 0.1.0 released

So that’s the news: msn-pecan 0.1.0 is released! And I’m glad.

To directly quote from Felipec’s post in his blog:

After a bit more than two years of development we are proud to announce the first stable release of msn-pecan. The project started as a “fork” of libpurple’s msn protocol (read below why it’s not really a fork), but it has grown and soon will become a standalone library with support for Telepathy too.

Continue reading ‘felipec’s msn-pecan 0.1.0 released’ »

Debian Bridge

/etc/network/interfaces:

auto br0
iface br0 net dhcp
   bridge_ports eth0 eth1
   bridge_stp off
   bridge_fd 3

De Superkb, GCC pedante y portabilidad

Por fin se me hizo: cambiar el Makefile de Superkb para usar gcc -std=c99 -pedantic-errors en lugar de -std=gnu99.

Lo que me impedía hacerlo era que uso algunas extensiones de GNU, BSD o POSIX que no se encuentran en el estándar C.

Yo no sabía, pero basta con añadir la línea

#define _GNU_SOURCE

o, según el caso,

#define _POSIX_C_SOURCE 2

al principio del código fuente y glibc reconoce y habilita las funciones que hagan falta.

Esto es un paso hacia adelante, pues ahora ya puedo usar un simple “grep” para ver en qué archivos están “solicitando extensiones”.

Desafortunadamente aún falta bastante para llegar al ideal, pues sigo atado a las herramientas de GNU. Por ejemplo ¿qué pasa si trato de compilar sobre OpenSolaris? La última vez que lo intenté, resultó que el Makefile usa extensiones que dependen de gmake (una de ellas es el include no fatal). Pero si hubiera gmake, ¿compilaría?

Sólo hay una manera de saberlo… ;-)

Remplazo interactivo en vim

Una nota rápida para que no se me olvide la siguiente vez.

Para remplazar texto en vim, confirmando cada remplazo, basta con agregar la opción “c” al comando “s”.

Si nuestro comando original era %s/viejo/nuevo/g entonces se usa %s/viejo/nuevo/gc.

Cada posible remplazo se sombrea y vim solicita confirmación con las siguientes opciones:

y = yes, remplazar el texto sombreado.
n = no, ignorar el texto sombreado.
a = all, siempre sí remplazar todo.
l = last, cambiar el actual y terminar.
q = quit, ignorar el actual y terminar.
^E = desplazar el texto hacia adelante (para ver más texto).
^Y = desplazar el texto hacia atrás.

Fuente:
Vim tips: The basics of search and replace

¿Qué falló durante mi plática en el SHDH, 2009?

El pasado 24 de octubre estuve en el Super Happy Dev House, 2009 que se realizó en el CESUN de El Lago.

Además de estar presente para escuchar otras pláticas, yo me apunté a una para presentar sobre Git.

El objetivo de la plática era dar a conocer a Git como un sistema distribuído de control de versiones, y tratar de demostrar su funcionamiento con un ejemplo.

Si bien la parte de la plática salió bien y las primeras muestras en proyección funcionaron, la demostración en la maqueta no salió como esperaba.

Continue reading ‘¿Qué falló durante mi plática en el SHDH, 2009?’ »

Bash prompting

Al diagnosticar un problema intermitente, tener la hora exacta en la que una prueba arrojó un determinado resultado puede ser muy útil al momento de tratarlo con los proveedores o intercambiar información con otro técnico.

Por medio de cambiar el prompt PS1 de Bash he resuelto el problema de saber a qué hora ejecuté un comando.

Continue reading ‘Bash prompting’ »

Bell on new line

To have a Linux beep each time a new line is printed on standard output, just filter your output through the following code:

gawk '{print "\007" $0 }'

This will effectively “prepend” a bell to each line.

You can convert this into an alias or a command (say /usr/local/bin/line-beep.gawk):

#!/usr/bin/gawk -f

{ print "\007" $0; }

So it can be used in a code like the following:

tail -f /var/log/messages | grep --line-buffered dhcpd | line-beep.bash