jci's blog

Earthquakes can't stop the rock

Escrito el 08/01/11 12:38:50 pm por jci

It's Gotta Be the Ugliest Hack I Have Ever Done

Categories: GNU/Linux, Programacion, Hacks, Ubuntu

[ debido a algun NDA, no puedo revelar ciertos detalles, pero contare los importantes ]

Intentando mejorar ciertos aspectos de [ censura ], se me ocurrio implementar un sistema de alarmas rapido, eficaz, economico y audaz. Ahora, el asunto es que jugar con protocolos de comunicacion no es uno de mis fuertes pero si lo es el [ censura ] y tambien [ censura ]. Despues claro de intentar hacer funcionar rancios programas hechos en C o Python.

IMG_3489
Snowy day here at the end of the world

De pasadita, encontre un bug que afecta a finch y pidgin, pero los contare otro dia. Ya esta el bug en Launchpad :B

A lo que ibamos.

Empece primero usando XMPP, ya que [ censura ] y ya estaba corriendo, asi que fue mi primera eleccion. Debido a que el servidor estaba corriendo con [ censura ] y no dejaba conectarse por otra cosa que no fuera pidgin...

Despues de reintentos varios donde tuve cosas como hostMistmatch y cepillandome un par de bibliotecas en Python decidi abortar mision. Aunque claro, instalando un XMPP server local, incluso con negociacion con TLS, andaba de peluches.

IMG_1325
Some friends call this a quick action photo

Recorde que hace tiempo me mostraron que Pidgin era compatible con Bonjour. Bonjour (antiguamente Zeroconf) permite mostrar servicios a traves de la red usando (inserte su magia favorita aqui) y los programas que sean capaces de entender estos mensajes, pues los interpretan.

Veamos un ejemplito, sin censura, claro.

Resolved service:
  fullname   = boba\032\09100\05821\0589b\0586a\058a6\058a6\093._workstation._tcp.local.
  hosttarget = boba.local.
  port       = 9
Service added; resolving
Resolved service:
  fullname   = lacantina\032\09100\05821\0589b\05872\058ac\05828\093._workstation._tcp.local.
  hosttarget = lacantina.local.
  port       = 9

Que carajos es esto? Pues bien, un mensaje que indica solamente la presencia de una workstation en la red local. Es todo.
Ah, lo interesante. Es manejado todo por debajo del capo usando Avahi. Si no saben que es, apliquense un google. Y 1000 internets menos.

IMG_3392
Dessert

Todos los que son hosttarget son las maquinas que mDns resuelve de forma economica y audaz. Si quieren mirar la forma de resolucion de estos nombres...

jci@socrates:~/Build/pybonjour-1.1.1/examples$ more /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 # <- LOOKIE HERE!
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Cierto. Primero mira /etc/hosts, de ahi usa mDns para la resolucion de hosts. Si no lo encuentra, usa una version mas completa. Y de ahi mDns en IPV4. Nota : este detalle de IPV4 es super importante en un problema que tuve haciendo pruebas.

Ahora miremos lo que necesitamos : Bonjour. Afortunadamente, este servicio tambien se registra en la red con el nombre de "presence". Y como Bonjour tambien identifica el tipo de conexion (tcp, en este caso), lo unico que nos queda es preguntar en la red local quienes tienen corriendo el servicio presence.

Y voila!

jci@socrates:~/Build/pybonjour-1.1.1/examples$ python browse_and_resolve.py _presence._tcp
Service added; resolving
Resolved service:
  fullname   = jci\064socrates._presence._tcp.local.
  hosttarget = socrates.local.
  port       = 5298
Service added; resolving
Resolved service:
  fullname   = user1\064lacantina._presence._tcp.local.
  hosttarget = lacantina.local.
  port       = 5298
Service added; resolving
Resolved service:
  fullname   = user2\064muldernix._presence._tcp.local.
  hosttarget = asterix.local.
  port       = 5298

Asi que lo que me queda : conectarme directo a cada uno de esos "hosts" (nota : los .local son agregados de la resolucion de mDns) y lanzarles un mensaje.

IMG_3376
Weird collection of weird toys

Spamming time!

#!/bin/bash

for i in `cat listahosts.txt`
do
      echo '<message type="chat"><body>'Feed me a stray cat'</body></message> ^] quit' \ 
      | telnet $i 5298
done

Les dije que el hack era algo feo.

Por supuesto que el mensaje de ejemplo de aca es bastante burdo. El real mensaje que debo enviar es [ censura ].

Si, yo tambien odio los NDA. Pero a fin de cuentas, lo importante no esta censurado. [ censura ]. Creo.

IMG_3431

That's not fog. It's a freaking cloud

Ah, y el problema que tuve con IPV4. Pues bien, al usar Bonjour con Pidgin, si esta habilitado IPV6, va a intentar resolver...con errores. Deshabilitar IPV6 con

# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

Dije que esto se veia feo.

5280 views » Send feedback »

Escrito el 06/17/09 07:33:57 pm por jci

In bed with flu, you get some real quality time with your computer

Categories: GNOME, Tarros, GNU/Linux, Hacks, Ubuntu, Musica

Lo bueno de estar con gripa es que tienes un monton de tiempo para intentar no aburrirte (si es que la vida de uno ya es enteramente aburrida, como la mia). Claro que los antigripales y las mezclas con vitaminas hacen que uno este triplemente activo de noche, a no ser de mandarse unas cuantas pseudoefedrinas o algun antiestaminico. Pero bueh, no les voy a andar enseñando a hacer pebre su higado, sino a hacer pebre su computador.

Esta vez, la pelea mas rotunda : Jackd y Pulseaudio.

Por la cresta. Desde hace un tiempo que la inclusion de Pulseaudio ha sido en parte beneficiosa para GNOME (lease : Ubuntu Jaunty), pero no para mi caso puntual : no hay aplicaciones basadas en Pulseaudio que sirvan para grabar audio de calidad (como Ardour, ya que es Jack-dependiente). Como siempre, termino comprando cosas que no necesito y algunas que llegan de regalo. Como una mezcladora nueva que venia con una tarjeta de sonido USB Behringer:

jci@zaphod:~/Copied$ lsusb
Bus 001 Device 002: ID 152d:2339 JMicron Technology Corp. / JMicron USA Technology Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 0a5c:2039 Broadcom Corp. Bluetooth Device
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 010: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 004 Device 009: ID 045e:00b9 Microsoft Corp. Wireless Optical Mouse 3.0
Bus 004 Device 008: ID 03eb:0902 Atmel Corp.
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 08bb:2902 Texas Instruments Japan
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

(Que hace un Mouse Microsoft? Fue un regalo. Y diablos que ha servido.)

El unico problema es Linux. Las fundaciones de Audio son realmente mal hechas. OSS (que a sorpresa de muchos, se sigue usando para aplicaciones Legacy, como Skype :B ), ALSA (que ya es un parto, pero no voy a seguir hablando mal de el por que hay muchos sitios que lo descueran), ESD (estaba bueno que reemplazaran a este) y Pulseaudio. Ademas que existe Jackd que de hecho lo mostre en el ultimo Encuentro Lainuc en Concepcion. Las autoconexiones y otras cosas que lo hacen un lugar bonito para vivir.

Pero no! Pulseaudio se niega a dejar el bote:

jci@zaphod:~$ killall pulseaudio
(varios segundos despues)
jci@zaphod:~$ sh jackdrc
(challa)
jci@zaphod:~$ killall jackd
jci@zaphod:~$ ps afux | grep pulse
jci 4754 0.0 0.0 4784 536 ? Ss Jun16 0:00 \_ /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /usr/bin/pulse-session /usr/bin/seahorse-agent --execute x-session-manager
jci 4760 0.0 0.0 3144 652 ? S Jun16 0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/pulse-session /usr/bin/seahorse-agent --execute x-session-manager
jci 31884 0.0 0.0 3336 792 pts/4 S+ 19:39 0:00 | \_ grep pulse

Asi ad infinitum. Pulseaudio se niega a irse a pique y la que lo vino a parir.

Hay un monton de soluciones (como desinstalar Pulseaudio), aunque encontre una manera ENTRETENIDA de arreglar todo esto.

  • Desinstalar Pulseaudio! JA! :B
  • Decirle a Pulseaudio que sea un buen ciudadano y que respete a las aplicaciones. Y se eche en el rincon hasta cuando se le llame.

    Editar /etc/pulse/client.conf y cambiar la linea
    autospawn = yes
    por
    autospawn = no

    Y darle a un reinicio al servicio Pulseaudio. Se aconseja salir de la sesion, aunque tambien un reboot lo vale.

    Luego, crear un archivo ~/.pulse/jackd.pa con lo siguiente:
    load-module module-jack-source
    load-module module-jack-sink

    Despues de cargar jack:

    jci@zaphod:~$ /usr/bin/jackd -p128 -dalsa -dhw:1,0 -r48000 -p2048 -n4 -Xseq

    Iniciar Pulseaudio con lo siguiente:

    killall pulseaudio
    pulseaudio -DnF ~/.pulse/jackd.pa

    Y que creen? Hasta puede usarse el multiple output!

Pulseaudio y Jackd vuelven a ser los compañeros aperrados que uno siempre quiso tener en su computador.

NOTA : cuando deshabiliten el modo de autospawn, pulseaudio va a subir siempre y cuando haya una aplicacion Pulseaudio-aware (como Totem). En este caso, intentara incluso llamar a Jackd al iniciar:

jci@zaphod:~$ totem test1.wav.mp3
Cannot connect to server socket err = No such file or directory
Cannot connect to server socket
jack server is not running or cannot be started
no message buffer overruns

Los grises y chaparritos son los de temer.

3818 views » 1 feedback »

Escrito el 06/04/09 05:24:59 pm por jci

With opinions like this one, Internets should be used only for pr0n

Categories: Tarros, GNU/Linux, Ubuntu, Advocacy

Sacado de noubuntu.org. El enfasis es mio.

He incluido algunas experiencias personales y otras que he encontrado en la web.

1.- Ubuntu es como Windows, a la hora de instalar programas no consulta nada sólo instala basura extra a lo requerido, Debian instala lo requerido y es más flexible con las configuraciones. (Step 5 FTW!)

2.- Ubuntu es sencilla y a menudo no obliga al aprendizaje, no implica que sus usuarios sean tontos pero si más flojos, en cambio Debian es más compleja y robusta, lleva a un aprendizaje directo. (Sorry, soy fan de ambos venenitos, pero echarle la culpa a la distribucion...ahora entiendo las peleas de las listas de Debian. Oh, lord...)

3.- La estabilidad no se compara, Debian es como una roca, en mi vida he visto un kernel pánic. Ubuntu se congela con sólo pensar que tiene que realizar una tarea pesada. (He visto kernel panics en miles de lugares. Creo que el autor no sabria por donde partir si ve uno)

4.- Ubuntu se limita al uso personal, Debian funciona sobre todo, portátiles, robots, lanzaderas espaciales, trasatlanticos y submarinos. (....)

5.- Mi preferida, Debian no es un sistema operativo, es el Sistema Operativo Universal, mientras que Ubuntu solo se basa en Debian. (Departamento redundante para redundancias?)

Despues me preguntan que por que pienso que la Internets deberia tener pr0n en vez de opiniones.

Kill. Me. Now.

2061 views » 5 feedbacks »

Escrito el 05/05/09 10:32:05 pm por jci

And now, some stupid news from the Underworld

Categories: GNOME, GNU/Linux, Ubuntu

Cuando fuí a la ultima FLISOL, se me ocurrió upgradear Arthur (MSI Wind que uso para charlas y ser mas mobail que los otros laptops que he echado a perder tengo) a Ubuntu 9.04. El upgrade fue un rico FAIL que no dejaba bootear. Gracias a un reporte del problema que pude salir del paso, aunque debo decir que tenía ganas de poner en problemas a los instaladores que andaban por alla :-)

Y hoy se me ocurrió la genial genial idea de upgradear Zaphod (el desktop para hacer música) a Jaunty.

Nota mental : Upgradear tarros siempre _DESPUES_ de las charlas.

Debo decir que, hasta el momento, a pesar que el kernel no es RT (estoy por ahora usando la rama generic), el funcionamiento ha sido impecable, incluso con los culeros controladores de NVidia habilitados. En 8.04 incluso con repositorios toxicos de backports andaba como las tristes. Ahora estoy teniendo comportamientos raros como

  • Firefox anda algo lento cuando usan CSS masivo (Twittah, Feisbuc, Yutub). Evaluando SWFDEC...
  • Rhythmbox anda como un campeón. Lo he mandado a importar mi colección de musica completa (una pesadilla para cualquiera, 200+ GB ) con 0 pops, 0 clicks y 0 skips en las canciones
  • La instalación fue casi igual que las versiones anteriores. Bootear disco, instalar, blabla. Bootear. Anda _algo_ mas lento al arranque que la encarnacion anterior. Pero considerar que el sistema entero fue reciclado de un HDD de un laptop y pasado a sangre de pato a un desktop con sus hacks correspondientes. En estado de FUBAR que en realidad me daba una macana enorme tener que arreglar. Asi que preferí reinstalar que upgradear. Nota : soy fan del upgrade, incluso piteándose libc.

Y por supuesto, el update post-instalación:

  • Todas las actividades miusicaleis estan detenidas hasta que no instale los paquetes de UBStudio y tenga las tóxicas dependencias que mantenía en Zaphod. Hasta nuevo aviso.
  • Tuve que abrir, vandalizar, sacar HDDs y perder 1 HDD IDE (si, aun esta bazofia usa IDE) en el proceso. Gracias a un ex colega que tengo un cofre "plug and pray" para SATA que está de lo mas que hay. Le soporta hasta hotswap! Alguien del público con un HDD IDE de mas de 100GB que venda/permute?
  • Aún esta en venta Fallout3 para PS3. Incluso lo permuto. Acepto ofertas.
  • Me llego mi mauspad de GNOME, gracias por los stickers!

Thanks to that deja-vu, that car didn't run over me. Is that bad, doctor?

NP: Expose (!!!!) : What you don't know (might hurt you). 80's is a bad bad bad habit.

2460 views » 4 feedbacks »

Escrito el 03/19/09 10:07:07 pm por jci

It's time for another rant

Categories: Tarros, Ubuntu, Musica

**** alsa_pcm: xrun of at least 1237425846222.848 msecs

(durante el uso de Ardour2 y cambiando entre aplicaciones).

Si mis calculos son correctos, el xrun es de casi 39 años. Creo que algo huele a podrido en Realtimelandia.

Apdeit : despues de leer bien los logs de Ardour, correr Fluxbox en vez de GNOME y tratar de arreglar el cacho del repintado (lo cual no iria en un post, quizas pedirle ayuda a FrancoGuayer para eso...), me di cuenta de un leve leve leve detalle al momento de inciar Jackd en Ardour...

$ /usr/bin/jackd -t 4294967295 -p 64 -R -P 60 -T -d alsa -n 4 -r 48000 -p 256 -d hw:0,0 -M -H -S

GUAT DA FAC!

Ahora Jackd corre con

/usr/bin/jackd -p 128 -R -P 10 -T -d alsa -n 4 -r 48000 -p 256 -d hw:0,0 -M -S

Y hasta el momento ni un drama. Claro que tuve que sacrificar el buffer, pero es lo de menos.

Excelsior!

4428 views » Send feedback »

Escrito el 11/18/08 08:20:34 pm por jci

Did I said that out loud?

Categories: Tarros, GNU/Linux, Hacks, Ubuntu

En la segunda parte de como vandalizar el arranque, ahora me fui a la parte mas cochina : Kernel.

No miento, la ultima vez que compile un kernel debio haber sido, quizas 2003? Ahora, volver a las andanzas y tener que recordar las instrucciones, leyendo el readme :B

$ sudo apt-get install linux-source

Lo unico malo, Ubuntu distribuye un kernel "casi vanilla" mas su coleccion de parches (como GFS, que no se para que sirve, pero igual). Lidiar con la configuracion del .config....

Al carajo, hagamos trampa.

Buscando en la interneces, en el wiki de msiwind.net, encontre un .config minimalista para el bicharraco. Y su correspondiente .config. Nota : solo es funcional para los que tengan un MSI Wind, U100X o U100H. La diferencia, Bluetooth. Yo tengo el que NO tiene bluetooth :'(

Primer intento : (sin usar el .config minimalista) : Kernel Panic.
Segundo, tercer y cuarto : igual.

Cuando me di cuenta que no estaba cargando el modulo de ide_generic (un error MUY comun, generalmente le dejo esa pega al initrd), pense en ocupar el .config.

Quinto intento : tiempo de arranque antes del init : 35 segundos (!!!).
Sexto intento (despues de casi 1 hora) : 10 segundos.

La diferencia esta en algo fundamental : al tener los modulos empotrados en el kernel de arranque, los dispositivos van a funcionar si o si. Pero como udev, en los intentos anteriores tomaba mucho rato, mejor no darle en que pensar, y meter todos los puñeteros modulos directo en el kernel.

Despues de un rato, sacar lo innecesario y volver a intentar. Esta vez, for great justice.

Despues de regocijarme con el arranque completo de la maquina, por una rara razon, pensaba que estaba llegando al tiempo ideal, cuando la realidad me atropello como quien atropella un chicle en la carretera.

Analizando la jugada completa

Era evidente que el tiempo de carga se me estaba yendo en dos procesos : gnome-panel y nautilus.

Asi que los siguientes tests, usar twm e intentar nuevamente el experimento.

$ sudo apt-get install twm

Por supuesto, dejar que mi gestor de escritorio fuera xterm. Nota : HACK DA~INO:

$ echo "xterm" > ~/.xinitrc
$ echo "xterm" > ~/.xsessionrc

No se cual de los dos habra funcionado en realidad.

BEHOLD!

intrepid-20081118-17

Bash es ejecutado por xterm en el segundo 31 despues de iniciar el computador. Mientras que revisar el arranque con GNOME completo tomaria 30 segundos adicionales para partir.

Estoy tentado en partir con un $HOME nuevo. Bueh, en casi todo sentido en la vida.

Hare la prueba en un par de horas. Por ahora, la marca de los 35 segundos fue rota!

1178 views » 1 feedback »

:: Next >>

Acerca de este glob

On the Sixth Day, there was a Running Man looking for a Predator to stop a Raw Deal with a Commando. Only True Lies were said. But nao, Junior is about to get Twins, with the help of a Kindergarden Cop. That will be the Terminator of all struggles.

Archives