02.3.11

Cliente *libre* de mensajeria en la nube (part 1)

Vamos a darle un poco de caña al blog, que lo tengo abandonao! Voy a explicar como tener un cliente de mensajería instantánea en “la nube”. Antes de nada,  vamos a explicar el concepto.

Mario clouds are bushes!

El Concepto

Tradicionalmente, nuestro usuario Joe tiene:
– Un chat en Facebook
– Un chat en Gmail (Google Talk)
– Un chat en su PC (Microsoft Messenger)
Y algunos frikis tenemos además cuentas de ICQ, Jabber, IRC, y quién sabe qué más.

Tanta nube, tanta nube, pero necesitamos configurar un cliente de IM en cada ordenador (sobremesa, netbook, oficina…). Los clientes multiprotocolo (como Kopete o Pidgin) ayudan un poco. Pero cuidado como intentes conectarte desde varios ordenadores a la misma cuenta de MSN o de ICQ (porque es técnicamente imposible). Y si además quieres buscar algo en tu historial de conversaciones, te hará falta mucho café, algunas aspirinas, conectividad a todos los ordenadores y webs por las que hayas hablado, y una buena dosis de bash-fu para parsear todos los logs.

Lo suyo sería olvidarse de tanto protocolo, y usar Apache Wave, pero como a la gente no le gusta el cambio, voy a presentar no una, sino DOS soluciones a este problema. En ambos casos, nos hace falta una nube, es decir, un servidor que vaya a estar online permanentemente. Ya sea algún hierro viejo encendido en el trastero, o un servidor alquilado a terceros en la vasta red.

Ambas soluciones permiten:

  • Estar conectado 24/7 a todas nuestras redes de IM, sin necesitar un solo ordenador encendido en casa.
  • Tener el historial de conversaciones en un sitio centralizado.
  • Poder acceder a esas redes simultáneamente desde varios ordenadores, sin ningún problema en absoluto.
  • No necesitar configurar nuestras redes de IM en cada ordenador que toquemos.
  • No depender de software propietario para nada.

Primera solución: ssh + screen + finch

Si eres un frikón como dios manda, conocerás GNU screen. Esta utilidad permite tener sesiones de terminal abiertas “en background“, pudiendo verlas en pantalla u ocultarlas cuando se quiera.

SSH, obviamente, es una forma de conectarte de un ordenador a otro, ya sea con putty, openssh, o el cliente de turno.

Y finalmente, Finch es, para entendernos, un Pidgin portado a la terminal. Es un cliente IM multiprotocolo, que en vez de GTK o QT, usa letras en tu terminal. De hecho, tanto Finch como Pidgin se apoyan internamente en libpurple, una librería de IM multiprotocolo.

Como montamos el tinglado entonces?

  1. Instalamos screen y finch en nuestro servidor.
  2. Configuramos nuestras cuentas de mensajería en ese finch, una sola vez.
  3. Creamos un bucle/demonio/cron que mantenga finch arrancado en un screen todo el rato (por si peta, que se arranque de nuevo él solo).

Una vez hecho esto, basta conectarnos vía SSH al servidor, y acceder al screen donde está finch encendido. Por ejemplo:

$ ssh stenyak@servidor.com
$ screen -x miFinch

Y en pantalla veremos nuestro cliente, con su lista de contactos, sus pestañas para cada conversación, etc.

Por ejemplo, he aquí una sesión de Finch conectado a GTalk, MSN y un canal IRC en Freenode:

(por si alguien se pregunta donde entra Facebook en todo esto, comentar que el chat de Facebook tira desde hace bastantes semanas del protocolo Jabber. No es 100% compliant, pero cualquier cliente de Jabber decente debería poder conectarse a él)

Como podéis comprobar, es una solución solo apta para muy frikis. Los logs están todos legibles en texto plano en ~/.purple/logs.

Segunda solución

Pero a estas alturas de la vida, muchos linuxeros prefieren poder hacer clics y cosas así; por ello existe otra segunda solución, que como es un poco tarde, explicaré en el siguiente post.

Stay tuned!

(continúa en la parte 2…)

05.1.10

Yuki TV

Akí teneis a Yuki en vivo y en diferido!

No estaba muy activa en ese momento, pero a veces se pone a dar vueltas por el sofa y no hay quien le haga una foto, así que mejor así.

03.25.10

El nuevo mando para Wii, out now!

Se llama Yuki! Ni lo ha fabricado Nintendo, ni vale como micrófono, pero mola un cacho.

Es inalámbrico, y no lleva baterías! Y el año que viene la Black Edition al doble de precio, eh MA?

Yukiphone

Al igual que Kintaro con sus currelos, todos los días se aprende algo nuevo con los erizos.

Hoy he aprendido que si la eriza quiere suicidarse sofá pabajo, mejor no intentes salvarla. Su técnica ninja de aterrizaje pelota-style funciona. Agujerearte la mano intentando frenar suavemente su caída, no.

Mi barba no pincha tanto, pero debería podarla un poco de todas formas...

El efecto tunel

Otras cosa que les gustan hacer, aparte de tirarse por precipicios, es engancharse a lo anzuelo en tubos demasiado pequeños.

Refactorizando código de espaguetti

Se va a convertir en toda una hacker

Como veis, también le gusta programar en PHP. Aunque estoy pensando en enseñarle un lenguaje más apropiado, de más bajo nivel.

lo cogeis? jugar! comida! turu-tukiisss!!! :-D

A Yuki le gusta jugar con la comida

Nada más anochecer, se pone a darle un poco al PacMan mientras come (lo que en realidad es su desayuno, $DEITY sabe por qué).

Bueno, hay mil fotos más, pero con esto vale rescatar el blog, y de paso seguir la serie de petposts.

12.18.09

The Chuck Norris Facts Bash Script

Pon un Chuck Norris en tu vida! O mejor aun, pon miles de Chuck Facts en tu consola!

Bored STenyaK Productions presents: chuckfacts.sh!

Chuck Norris for god
Coming this winter to a console in front of you…

#!/bin/bash

# check for parameters
if [ -z $1 ]
then
    echo "Please specify the destination chuck norris facts file."
    echo "E.g.: $0 ~/.chuckfacts.txt"
    exit
fi
ffile=$1

old=0
if [ -s $ffile ]
then
    old=$(wc -l $ffile |sed "s/\s.*//g")
fi

echo -n "Getting facts pack"
# download the 170 first chuck norris pages of 4q.cc site to disk
for i in $(seq 1 170)
do
    echo -n " $i"
    # only store facts
    wget -qO - \
       "http://4q.cc/index.php?pid=listfacts&person=chuck&page=$i" \
        | grep "index.php?pid=fact&person=chuck" >> $ffile
done
echo ""

echo -n "Post-processing facts..."
# remove unnecessary html code
perl -pi -e "s/.*id=.{32,32}\">//g;s/<\/a>.*//g" $ffile

# replace most common html entities
perl -pi -e "s/&quot;/\"/g" $ffile
perl -pi -e "s/&amp;/&/g" $ffile

# remove empty lines
perl -ni -e "print unless /pid=/" $ffile

# remove redundant lines
cat $ffile |sort |uniq > /tmp/chuckfacts.tmp
mv /tmp/chuckfacts.tmp $ffile
new=$(wc -l $ffile |sed "s/\s.*//g")
echo " OK"
echo "Generated $(($new-$old)) new facts ($new in total) facts."

# show how to add a fortune-like command to bashrc
echo ""
echo "You can add this to your ~/.bashrc file:"
echo 'test -s '$ffile' && cowsay -f $(ls /usr/share/cowsay/cows
      | shuf |head -1) "$(cat '$ffile' |shuf |head -1)"'

Mira que no me aburro a veces ni nada eh…

12.2.09

En defensa de los derechos de los ciudadanos en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

11.12.09

Google’s “go” simple & stupid benchmark (2nd round: memspeed)

Continued from Round 1: I/O

Thanks to Juanval for the suggestion.

$ cat hello.cpp && g++ hello.cpp &&
> time for i in $(seq 10); do ./a.out; done
int main (int argc, char** argv)
{
    const int size = 250;
    int a[size],b[size],c[size];
    for(int i=0;i<size;++i)
        for(int j=0;j<size;++j)
            for(int k=0;k<size;++k)
                c[k]+=a[i]*b[j];
}
real	0m1.041s
user	0m0.944s
sys	0m0.020s

$ cat hello.py &&
> time for i in $(seq 10); do python hello.py; done
size = 250
a,b,c = [0]*size, [0]*size, [0]*size
for i in a:
    for j in b:
        for k in range(0,size):
            c[k] += i*j
real	1m7.210s
user	1m4.924s
sys	0m0.084s

$ cat hello.go && 8g hello.go && 8l hello.8 &&
> time for i in $(seq 10); do ./8.out; done
package main
func main()
{
    var a,b,c [250]int;
    for i := range a
    {
        for j := range b
        {
            for k := range c
            {
                c[k] += a[i] * b[j];
            }
        }
    }
}
real	0m3.000s
user	0m2.812s
sys	0m0.020s

11.11.09

Google’s “go” simple & stupid benchmark (1st round: I/O)

Systems programming language? They gotta be kiddin…

$ cat hello.cpp && g++ hello.cpp &&
> time for i in $(seq 100); do ./a.out >/dev/null; done

#include <stdio.h>
int main (int argc, char** argv)
{
    for (int i=10000;i--;)
    {
        printf("hello, world\n");
    }
}

real 0m0.427s
user 0m0.220s
sys 0m0.164s

$ cat hello.py &&
> time for i in $(seq 100); do python hello.py >/dev/null; done

for i in range(1,10001):
    print "hello, world"

real 0m3.809s
user 0m2.800s
sys 0m0.724s

$ cat hello.go && 8g hello.go && 8l hello.8 &&
> time for i in $(seq 100); do ./8.out >/dev/null; done

package main
import "fmt"
func main()
{
    for i:=10000;i>0;i--
    {
        fmt.Printf("hello, world\n")
    }
}

real 0m7.528s
user 0m6.388s
sys 0m0.664s

Continued in Round 2: memspeed

09.11.09

Puls, 256 bytes intro by Arriola

This post is twice the size of Puls 😯

09.2.09

hoygan, no puedo resizear las afotos, cómo ago!

Hay momentos en la vida en que pringar puede ser divertido. Por supuesto, se trata de cuando alguien te ruegadeja migrar su apestoso Microsoft Windows Whatever (TM) a Linux.

En su primeras horas de contacto con una Ubuntu 9.04 recién instalada, mi querida aikurushii se me queja en formato hoygan (que en mala hora se me ocurrió enseñarle) de que en Windows podía redimensionar imágenes con solo hacer click derecho, y ahora en Linux no, y que Linux apesta.

Como acto reflejo, me calzo un ssh a su ordenador, y esgrimiendo vim a dos manos le esbozo un bash en 5 minutos:

#!/bin/bash
size=$(echo "$0" |sed "s/.*\.\(.*\)\.sh/\1/g")
for i in "$@"
do
        newname="$(echo "$i" |sed "s/\.\(...\)$/.$size.\1/g")"
        cp "$i" "$newname"
        mogrify -resize $size "$newname"
done
text="Resized to $size px wide."
#some optional user interface candy, uncomment at will:
#zenity --info --text "$text"
#echo $text

El script en cuestión se guarda en, por ejemplo, /usr/local/bin/resizer.640.sh, o resizer.1024.sh, o la resolución a la que se quiera redimensionar las imágenes (también se puede symlinkear el script con varios nombres, por supuesto, y cada uno resizeará a un tamaño diferente).

Y por fin, desde el navegador de ficheros de turno, se le dice que abra las imágenes en cuestion con el susodicho script, et voilà, Linux doesn’t suck any more!

Bueno, y entonces es cuando se me ocurre googlear un poco 😀 y encuentro esta cosa llamada NIS… si el caso es reinventar la rueda 😀 😀 😀

06.5.09

Frikuriosidades estadisticas en bash

Tras descubrir el excelente sitio CommandLineFu, no he podido resistirme a probar uno de sus fus con los cuatro usuarios que utilizo mas a menudo.

El comando en cuestion muestra un Top 10 de comandos usados en bash:

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Los resultados obtenidos son:

stenyak@home     root@home      stenyak@work      root@work
3195 ls          1098 ls        1481 ls           182 pacman
2240 cd          639 cd         1310 svn          146 ls
1147 hg          356 vi         1045 cd           80 rm
1077 vi          303 emerge     1017 vi           74 vi
393 rm           233 eix        979 make          58 cd
381 su           144 rm         386 rm            36 for
357 find         93 grep        373 grep          23 ping
333 man          87 mount       269 ssh           19 umount
293 mplayer      82 man         266 svndiff.sh    19 grep
275 mv           81 smartctl    161 hg            15 su

Por supuesto, las estadisticas son todo mentiras. Cabe destacar el buen trabajo que hacen muchas distribuciones en conseguir que bash autodestruya sus historiales. No me he molestado en comprobarlo en las Gentoo y ArchLinux que utilizo, pero si usais Ubuntu, que sepais que os ocurre by default.

Pero weno, que he hecho esto porque me aburria, asi que la rigurosidad de la prueba nos la pela un poco, no? xD

He probao el script en la RedHat de mi server offsite, pero parece no funcionar; si alguno hoygais un fix, ruego compartais el conocimiento.

(tenia pensao meter una grafica de gnumeric o gnuplot por aki, que los posts siempre quedan mejor con dibujines para que la gente no tenga que leer, pero sorry, no me aburro tanto esta vez 😀 . Weno, vamos a intentar hacer el blog un poco mas interactivo, a ver que tal sale…)

¿Cual es tu Top 10 como luser y como root?