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.
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?
- Instalamos screen y finch en nuestro servidor.
- Configuramos nuestras cuentas de mensajería en ese finch, una sola vez.
- 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…)
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.10El nuevo mando para Wii, out now!
Se llama Yuki! Ni lo ha fabricado Nintendo, ni vale como micrófono, pero mola un cacho.
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.
Otras cosa que les gustan hacer, aparte de tirarse por precipicios, es engancharse a lo anzuelo en tubos demasiado pequeños.
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.
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.09The 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!
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/"/\"/g" $ffile perl -pi -e "s/&/&/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.09En 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.09Google’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.020s11.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.09Puls, 256 bytes intro by Arriola
This post is twice the size of Puls 😯
09.2.09hoygan, 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.09Frikuriosidades 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?