Archive for the ‘Tenía que ser un geek.’ Category.

stail-notify.bash

El siguiente script hace que cada línea nueva que aparezca en un archivo remoto, salte en mi pantalla como notificación.

Con pocas modificaciones se puede hacer lo mismo para un archivo local.

Se puede colocar el comando en el arranque de sesión, pero se va a bloquear para pedir la contraseña. Se recomienda tener acceso al servidor remoto por medio de claves públicas para que el agente de SSH automáticamente pida la contrafrase en pantalla.

Puesto que tail -f nunca debería salirse, tal vez sería conveniente agregar una línea después del SSH que mande una alerta de que concluyó el tail -f o de que falló la conexión con el servidor. Tal vez se pueda hacer revisando el código de retorno, pero hay que ver qué ruido le provoca el tubo.

Se puede modificar para que también el icono y la severidad de la notificación sean distintas, pero en mi caso no es necesario.

El comando podría fallar si la cadena a mostrar contiene comillas.

#!/bin/bash

# stail-notify.bash
# Escrito por Octavio Alvarez.
# Licencia: WTFPL

[ $# -lt 3 ] && {
	echo "usage: "`basename $0`" <user@host> <file-to-tail> <alert-title>"
	exit
}

ssh $1 "tail -n 0 -f "$2 | while read M D T ELSE; do notify-send -t 5000 -i dialog-warning -u critical "$3" "$ELSE"; done

Para usarlo, lo ejecutan así:

stail-notify.bash alvarezp@192.168.2.100 /var/log/messages "Alerta de Syslog"

Gratis vs. libre: La compra de Skype por Microsoft

Gratis vs. Libre

Gratis vs. Libre

Cuando no se requiere de pago alguno para usar plenamente un programa se dice que es “gratuito”. Dos ejemplos son Skype y OpenOffice.org. Sin embargo, existe una diferencia radical entre ambos: las libertades legales que la licencia de OpenOffice.org garantiza. Por eso se le llama software “libre”.

OpenOffice.org es más que simplemente gratuito y más —incluso— que simplemente “de código abierto”. Disponer del código fuente de un programa no implica la libertad legal de hacer públicas las mejoras.
Continue reading ‘Gratis vs. libre: La compra de Skype por Microsoft’ »

Superkb 0.22 liberado!

¡Superkb 0.22 ha sido liberado! Esta es una liberación menor. ¿Quieres saber qué hay de nuevo? Échale un vistazo a la página de la versión 0.22 en el Wiki de Superkb.

Superkb es un lanzador de aplicaciones basado en atajos de teclado con pistas gráficas en pantalla. Está escrito en C usando Xlib con la ayuda de Cairo graphics, Pango, Imlib2, Xinerama, etc. y con su código fuente manejado con Git.

Tus atajos de teclado pintados por Superkb 0.22

Tus atajos de teclado pintados por Superkb 0.22

Algunas de las características de Superkb:

  • Fácil de usar. Se selecciona una tecla mágica (por omisión Super) como la base de los lanzadores y basta con presionar Super+Tecla para ejecutar cualquier comando configurado o aplicación seleccionada.
  • No estorboso. Siendo basado en atajos no se necesita nada en pantalla. Al mantener presionada la tecla mágica mostrará en las pistas en pantalla y al soltarla desaparecen.
  • Soporte para diferentes geometrías del teclado según lo provea el servidor de X Window System.
  • Provee indicadores en pantalla sobre las acciones invocadas.
  • La configuración se escribe en un archivo. Instalar la misma configuración en otra computadora es tan simple como copiar el archivo.
  • La tecla mágica no se desperdicia. Se puede usar F8 como tecla mágica y al presionarla sin lanzar nada se envía a la aplicación que actualmente tiene el foco. Yo uso esto para la Thinkpad T42.

Superkb 0.22 released

Superkb 0.22 has been released! This is a minor release. Do you want to know what’s new? Take a look at the 0.22 page on the Superkb Wiki.

Superkb is a shortcut-based launcher with on-screen graphical hints. It is written in C using Xlib, with the help of Cairo graphics, Pango, Imlib2, Xinerama, etc. and the source code is managed using Git.

Continue reading ‘Superkb 0.22 released’ »

Diaspora, primera vista previa de la tecnología

diaspora_large_new

Hoy estoy feliz. Tal vez ya oyeron algo sobre Diaspora, el proyecto dirigido a ser una red social como Facebook pero de código abierto y distribuída.

¿Por qué? Porque no confío en Facebook. Yo no conozco las instrucciones exactas en el software que gobierna el servicio. Siendo distribuida y de código abierto, confío en que miles de usuarios y desarrolladores podrán ver y analizar el código, yo mismo incluído. Tendré la posibilidad de ver exactamente lo que el código dice si así lo deseo. Más aún, podré publicar mi información personal en mi propio servidor en lugar de en uno centralizado que no es de mi confianza. También significa que quienes confían más en mí que en Facebook tendrán una alternativa (y un administrador de sistemas a quien sí le importe).

(Oh, y personalmente, considero la actual falta de aplicaciones similares a Farmville como una buena oferta.)

Aún estamos hablando de subir información a Internet, de modo que no se puede tomar más a la ligera que publicar información personal diariamente en un periódico o en la televisión. Si publico una imagen la puedo quitar de mi servidor, pero tal vez no podría quitarla de otro servidor a donde ya se haya replicado.

Desde el momento en que escuché de este proyecto he estado esperando a meter las manos en la masa y probarlo yo mismo. Ese día finalmente llegó. El 15 de septiembre de 2010 el equipo de desarrollo liberó el código al público en su repositorio Git hospedado en Github.

Encontré unas instrucciones en inglés para instalar Diaspora en Debian y decidí probarlas en mi caja Sid. Parece que ya no están completas (el código está cambiando rápidamente conforme avanza el desarrollo). Tuve algunos problemas iniciales, pero al final, con ayuda de la gente en #diaspora, trabajó suficientemente bien como para hacer este artículo.

Eventualmente logré que me mostrara esta pantalla:

diaspora screenshot: the login page.

El identificador de usuario tiene la forma usuario@dominio.com. Como se puede ver en la barra de direcciones de mi navegador, estoy accediendo a mi PC y no a un servidor cualquiera en Internet.

Después de algunas afinaciones logré intercambiar requisiciones de “amistad” con otra persona. Hecho esto, pudimos intercambiar mensajes bidireccionalmente.

Diaspora screenshot: last messages of my "diaspora" aspect.

Diaspora tiene estas cosas llamadas “aspectos” que se entienden como los “aspectos de tu vida”. Los dos disponibles por defecto son “trabajo” y “familia”. Cuando añades a un amigo, los añades bajo uno (¿o tal vez más?) de estos aspectos.

Los mensajes se intercambian en tiempo real. Tan pronto como publiqué el mensaje se fue directo hacia my nuevo amigo en un servidor externo en Internet donde recibió ese mensaje y se mostró en su navegador sin siquiera tener que refrescar la página. Igual de vuelta: añadió un mensaje y yo lo vi en mi navegador.

El mensaje se fue cifrado sobre el alambre (lo cual es muy bueno). Después de decodificar, esto fue lo que obtuve:

{"aes_key":"Cl2Xtq/VO [... muchas letras ...] A9lSnqEYk=",
"ciphertext":"YT47xNE [... muchas letras ...] KbqlQNx+Y="}

En mis pruebas yo no pude subir imágenes; por algún motivo fallaron. Los pantallazos de los desarrolladores muestran que las imágenes ya funcionan. Tal vez algo se rompió en los últimos días.

Básicamente, además de lo que indicaban las instrucciones, tuve que abrir los puertos de mi cortafuegos para hacerlo funcionar. Se necesita iniciar el servicio desde el script provisto en ./script/server.

También, las instrucciones recomiendan usar directamente build pero esto no cargará el websocket en el puerto 8080. Tuve que aplicar un PATH=$PATH:/var/lib/gems/1.8/bin artificialmente para incluir ese directorio en las rutas de búsqueda para que ./script/server pudiera llamar build.

MUY IMPORTANTE: Esta versión está en calidad de desarrollo (lo que básicamente se traduce a “mejor esfuerzo”) o como dicen en el repositorio Git, “pre-alpha”. Aún le falta mucho para ser usable de forma popular. Tiene problemas de seguridad conocidos (tu cuenta de diaspora puede ser adueñada remotamente); tiene fallas (la carga de imágenes está rota en algunas configuraciones); y puede ser que pierdas tus datos de diaspora, así de la nada (como en cualquier versión de desarrollo), particularmente después de alguna actualización que no salga bien. La recomendación actual es que NO SUBAS TU INFORMACIÓN IMPORTANTE todavía. Repito: es una liberación de desarrollo, una vista previa. Está en una etapa muy temprana. Hasta puedes llamarla “prototipo” si gustas pero acepta los riesgo según estén el día de hoy.

Si lo quieres probar por ti mismo, revisa el Wiki de Diaspora. Incluye información sobre servidores públicos, instalación, terminología que yo no leí y que pudo haber evitado desperdiciar tiempo valioso de la gente de #diaspora. Ahora es un buen momento para agradecerles.

Equipo de diaspora: ¡gran trabajo!

Diaspora, first Technology Preview

diaspora_large_new

I’m so glad today. Some of you may have heard of Diaspora, the project aimed to be a social network like Facebook but open source and distributed.

Continue reading ‘Diaspora, first Technology Preview’ »

De creencias y ateísmo

Atheism / Personally, I find atheists just as annoying as fundamentalist christians. / Well, the important thing is that you've found a way to feel superior to both.
From XKCD

Casualidad de la vida. recientemente dije por Twitter lo siguiente:

Debatir si existe o no existe “Dios” es como debatir si el 0 es positivo o negativo. La realidad es que ambos son el mismo número.

Para mí, +0 == -0 y la comparación me gusta. Y sí, ya me criticaron… pero en fin.

En código me lo imagino así:

function dios_existe() {
	if (sign(0) == 1) return True;
	if (sign(0) == -1) return False;
	return dios_existe() /* jaja, porque esto pasa con el ser humano */
}

On beliefs and atheism

Atheism / Personally, I find atheists just as annoying as fundamentalist christians. / Well, the important thing is that you've found a way to feel superior to both.
From XKCD

What a coincidence. I recently said the following over Tweeter (translated from Spanish):

To debate if “God” exists or not is like arguing if 0 is positive or negative. The thruth is both are the same number.

For me, +0 == -0 and I like the analogy. And yes, I have already been criticized… but, oh well.

In code I think it could be like this:

function dios_existe() {
	if (sign(0) == 1) return True;
	if (sign(0) == -1) return False;
	return dios_existe() /* haha, because that's just what happens with human beings */
}