17 diciembre, 2009

Poliamor

«Como digo, soy un hombre. Me gustan las mujeres. A veces esa atracción está incluso fuera de mi control. Puedo controlar mis actos, aunque no lo que siento. Miro a las chicas por la calle, y a algunas las encuentro realmente atractivas. No sentiré especial devoción por Sorolla o Velázquez, pero es que no todas las obras de arte se encuentran en los museos. A veces me salto a los intermediarios y voy directamente a la exposición de Dios.»
-- Javier Malonda (aunque bien se puede atribuir a cualquier hombre heterosexual)

Al final de la entrada de donde he extraído lo anterior se da el enlace de la Wikipedia del Poliamor. Después de leerlo veo que un poliamoroso famoso es Eric S. Raymond. Que la wikipedia lo define como:
«Raymond es un neopagano, un confeso anarcocapitalista, y un defensor del derecho a poseer y utilizar armas de fuego. Tiene un gran interés en la ciencia ficción. Es músico amateur y cinturón negro de taekwondo. Además sufre una leve parálisis cerebral congénita.»
A eso añádele poliamoroso. El amigo «dospistolas» no se aburre, y es más listo que el hambre, como se suele decir.

02 noviembre, 2009

TTS 2.0

He publicado la versión 2.0 de TTS (TalkToSerial) que tiene las siguientes mejoras:
  • Se ha añadido fichero de autocompletado de BASH para que su uso sea mas sencillo
  • Tiene nuevas opciones para el control de los timeouts.
  • Ahora muestra todos los flags
  • Permite monitorizar los flags en tiempo real
  • En el modo interactivo permite tener un hilo para la lectura inmediata.
  • Permite tener lecturas de gracia.
  • Admite poner varios mensajes para enviar datos en diferentes "write"
  • En modo interactivo se puede mostrar la salida en hexadecimal

Para más info visitad el Wiki. Y si se quiere descargar, aquí está el código fuente.

06 septiembre, 2009

Cómo instalar LTC32 en Debian 64 bits

Después de un tiempo, Fer y yo hemos conseguido hacer funcionar el lector/grabador LTC32 por puerto serie (RS-232) en Debian Sid 64 bits. Hemos tenido que hacer lo siguiente: Esto trata sobre el lector grabador LCT32 por puerto serie de C3PO, ya que los nuevos modelos USB se pueden usar nativamente sin hacer nada. Para empezar, hay que obtener los controladores de la página del fabricante: http://www.c3po.es/downloads/ltc32/drivers/rs232/ltc3x_muscle_20051222.tar.gz Si te lees los archivos y simplemente haces lo que te dicen no funciona, porque el Makefile no hace todo lo que debe. Para empezar, aparece un error de compilación, que se soluciona retocando el archivo ifdhandler.h. La solución es añadir:
#define RESPONSECODE int
Justo antes de la línea «
#include <pcsclite.h>
». El siguiente error es que algunos archivos binarios no se pueden enlazar porque son para 32 bits, pero no para 64.Algo como:
                                                                                                           
ld: i386 architecture of input file `openct/checksum.o' is incompatible with i386:x86-64 output                             
ld: i386 architecture of input file `openct/buffer.o' is incompatible with i386:x86-64 output                               
ld: i386 architecture of input file `openct/proto-t1.o' is incompatible with i386:x86-64 output                             
Este error sale porque lo que nos hemos bajado del fabricamente ya trae unos archivos compilados para 32 bits y el Makefile no limpia ese directorio. Es tan sencillo como borrar los que vienen:
                                                                                                                                                     
rm openct/*.o
y luego ejecutar:
                                                                                                                                                
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/checksum.o openct/checksum.c                                                                                                                    
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/buffer.o openct/buffer.c                                                                                                                        
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/proto-t1.o openct/proto-t1.c                                                                                                                    
 
Una vez tenemos esto compilado para 64 bits, ejecutamos el Makefile:
                                                                                                                                                
make
Ya tenemos el controlador para 64 bits.

El acceso al lector de tarjeta se realiza a través de PCSCD, por lo que lo instalamos:
                                                                     
apt-get install pcscd
Ahora, se copia el controlador a su directorio correspondiente par que lo encuentre pscscd:
 
mkdir -p /usr/local/pcsc/drivers/ltc3x/
sudo cp libltc3x.so /usr/local/pcsc/drivers/ltc3x/
A continuación configuramos «pcscd», que es tan sencillo, siempre que no tengáis otros lectores de tarjetas, como:
 
cat libltc3x > /etc/reader.conf
En caso de que tengáis más de un lector, podéis hacerlo con
cat libltc3x >> /etc/reader.conf
y editarlo para ver que está todo correcto.

Después editáis la línea «DEVICENAME» de /etc/reader.conf poniendo el puerto serie al que tengáis conectado el lector. Reiniciamos el servidor:
sudo /etc/init.d/pcscd restart
Si todo ha ido bien, debería encenderse un momento una luz roja y luego apagarse todo.
Si introduces una tarjeta debería encenderse una luz verde fija.

Podemos probar que lee la tarjeta con la orden «pcsc_scan» y al introducir un DNIe debería salir algo como:
 Reader 0: C3PO LTC3x Serial Smart Card Reader 00 00
  Card state: Card inserted,
  ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00

ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 38 --> Fi=744, Di=12, 62 cycles/ETU
    64516 bits/s at 4 MHz, fMax for Fi = 8 MHz => 129032 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 44 4E 49 65 20 02 4C 34 01 13
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
3B 7F 38 00 00 00 6A 44 4E 49 65 [1,2]0 02 4C 34 01 13 03 90 00
        DNI electronico (Spanish electronic ID card)
        http://www.dnielectronico.es
Ale, ya somos capaces de leer el DNIe, ahora vamos a hacer que esto nos sea útil.

Para ello, hay que obtener los paquete del DNIe que tiene publicados la FMNT en: http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/opensc_1.4.6_menu64.html Elegís el de Debian (por supuesto :-D): http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Debian_Lenny_64/Debian_Lenny_opensc-dnie_1.4.6-2_amd64.deb.tar Este tar contiene tres paquetes de Debian:
$ tar -xvf Debian_Lenny_opensc-dnie_1.4.6-2_amd64.deb.tar libopensc2_0.11.7-7_amd64.deb opensc-dnie_1.4.6-2_amd64.deb opensc_0.11.7-7_amd64.deb
A pesar de que el único que no está en Debian oficialmente es opensc-dnie_1.4.6-2_amd64.deb, debéis instalar los tres. Esto es porque cambian configuraciones y no se lo han querido currar hasta ese punto. Incluso hay una dependencia más especificada, pero no da problemas.

Es posible que os salga un warning diciendo que cuidado que estáis desactualizando un paquete, no hay problema, es necesario desactualizarlo por lo anterior.
Al instalar estos paquetes aparecerá un mensaje en que dice que una vez instalado, se vaya al menú de aplicaciones, sección de oficina y se ejecute el icono Registar módulo DNIe PKCS#11
Esto abre una página de Iceweasel y salen varias ventanas, seguid las instrucciones. Una vez hecho esto, reiniciamos Iceweasel.

Si todo ha ido según lo esperado, podremos ir a Iceweasel y en Editar-> Preferencias-> Avanzado -> Cifrado -> Ver certificados. Ahí nos pedirá el PIN del DNIe y entonces debería aparecer nuestro nombre.

Para comprobar que todo va bien y que se puede usar en internet podemos usar una página de verificación que proporciona la casa de la moneda. Haciendo click aquí deberías ver toda tu información e incluso firmar un mensaje, aunque esto a mí no me funciona.

Una nota a la hora que autenticarse en páginas es que cuando te sale la ventana de selección de certificado a usar, a mí me aparece preseleccionado el de firma electrónica, con lo que la autenticación no funciona, hay que seleccionar el otro, el de autenticación.

Una vez hecho esto ya podremos hacer mucho más rápidamente gestiones con los ministerios.

Esta entrada ha sido creada con la inestimable ayuda de Fer.

22 agosto, 2009

Manejo avanzado de ficheros en BASH

Cualquier script, en cuanto llega a ser un poco complejo o necesita manejar grandes cantidades de datos hace uso de los ficheros.

El uso intensivo de ficheros no tiene porqué suponer una pérdida de eficiencia muy grande en el script, ya que si un fichero se crea y se destruye en menos de N segundos, éste no llega a ser escrito en disco y sólo existe en memoria. Esa N en linux suelen ser 30 segundos.

El caso es que cuando uno, o al menos yo hasta ahora, piensa en el tratamiento de ficheros en BASH suele ir a pensar en cut, grep, head, tail, sed y amigos.

Después de 10 años he redescubierto ed. Os cuento la bonita historia.

Andaba yo tranquilamente haciendo un script que hace uso de otros scripts antiguos que hice y que, como es BASH, se pueden usar independientemente por línea de órdenes o en otros scripts. Resumiendo, mi problema era que necesitaba mover una linea de un fichero. Esto se puede hacer con una ristra de heads, tails y greps. El caso es que no se cómo llegué a la página de manual de ed y descubro que para mover una linea de sitio en un fichero con ed sólo hay que hacer:
ed $mifichero << EOF
3m7
wq
EOF
Esto coge la línea 3 y la pone como 7.
Otro clásico es querer obtener la línea N de un fichero. Hasta ahora lo que hacía era algo como head -n $N $mifichero | tail -1, pero se esas dos órdenes se pueden quedar en una haciendo:
ed $mifichero <<< "${N}p"
También muchas veces se necesita insertar una cadena en la linea N de un fichero. Pues bien, con ED es algo tan sencillo como:
ed $mifichero << EOF
${N}i
$LineaQueQuieroAnadir
wq


Podría estar muchas páginas hablando de las cosas que se pueden hacer con ed pero lo mejor es que leáis la página del manual de ed. Que ya he escrito bastante y va siendo hora de hacer la comida.

12 agosto, 2009

Cómo hacer trim en Bash

No sé a vosotros, pero a mí en los scripts que hago siempre suelo necesitar hacer trim de una cadena, esto es, eliminar los espacios al comienzo y al final de una cadena.

Bien pues esto es tan «sencillo» como jugar con las expansiones de BASH (más info en man bash), aquí va un ejemplo:
#!/bin/bash
cadena='     prueba de trim        '
#Los :: son para ver claramente los espacios
echo "+ Cadena original ::${cadena}::"
# quito los espacios del principio
cadena="${cadena#"${cadena%%[![:space:]]*}"}"
# quito los espacios del final
cadena="${cadena%"${cadena##*[![:space:]]}"}"
echo "+ Cadena sin espacios ::${cadena}::" 

La salida de este script será
+ Cadena original ::     prueba de trim        ::
+ Cadena sin espacios ::prueba de trim::

Esto es sólo un ejemplo de cosas que se pueden hacer con BASH y que ha acelerado 10 veces un script (antes había sed y cut por todos lados), os recomiendo leeros detenidamente man bash. Tiene cosas muy divertidas, pero eso lo dejaremos para entradas futuras :-)

23 julio, 2009

Scripts útiles para KDE4 (II)

Este es uno que acabo de descubrir.

La situación es que Kopete no se me conectaba automáticamente al arracar y abajo a la derecha me aparecía un icono que al sobrevolar con el ratón me decía «El escritorio está desconectado» (The desktop is offline).

Googleando descubrí que eso que el gestor de red de KDE (o algo así) no es capaz de monitorizar la red. Yo uso el /etc/network/interfaces de toda la vida y no quiero cambiar. Al parecer que el escritorio esté desconectado implica que las aplicaciones pasan a modo offline y sólo se conectan y acceden a al red bajo petición. Un c*ñazo vamos.

El caso es que he descubierto una orden que soluciona la cuestión:

qdbus org.kde.kded /modules/networkstatus\
   org.kde.Solid.Networking.Service.setNetworkStatus SolidNetwork 0


Donde «SolidNetwork» es el nombre de la interfaz que quiero activar y que he obtenido con:

qdbus org.kde.kded /modules/networkstatus org.kde.Solid.Networking.networks


Basta ejecutarlo una vez cada inicio de sesión como si fuera un medicamento y listo.

22 julio, 2009

Scripts útiles para KDE4 (I)

Hace poco me instalé KDE4 en mi Debian Sid~Experimental amd64.

Después de algún «problema» por falta de paquetes, como el «systemsettings» (nuevo kcontrol). Todo está solucionado.

A lo que iba. También me he instalado Amarok2, que en mi opinión es bastante peor que su anterior versión. Tiene bastante menos funcionalidad y la interfaz me gustaba más la anterior.

Pero dejando eso de lado, una cosa que me molestó mucho es que ya no tenía disponible el script que pausaba la música cuando se bloqueaba la sesión. Yo siempre que me levanto de mi sitio bloqueo la sesión con una tecla, y siempre me ha gustado que cuando lo hiciera se pausara la música y cuando desbloqueara la sesión que volviera a sonar.

KDE4 ya no usa dcop, sino que se ha pasado a DBUS, tampoco me gusta mucho pero es lo que hay. Así que trasteando por aquí y por allí he hecho este script (en bash, por supuesto) que es el que lanzo para bloquear la sesión:

#!/bin/bash

#Tomamos la posicion actual
a=$(qdbus org.mpris.amarok /Player \
  org.freedesktop.MediaPlayer.PositionGet)
sleep 1;
#Tomamos la posicion actual
b=$(qdbus org.mpris.amarok /Player \
  org.freedesktop.MediaPlayer.PositionGet)

#Si las posiciones han cambiado es que estaba sonando.
#Es cutre pero no se me ocurre otra formas
if [ $a -ne $b ];then
  SONANDO="SI"
  qdbus org.kde.amarok /Player \
    org.freedesktop.MediaPlayer.Pause
else
  unset SONANDO
fi

#bloqueo la pantalla
qdbus org.kde.screensaver /ScreenSaver \
  org.freedesktop.ScreenSaver.Lock
sleep 1 #esto es para darle tiempo a bloquear

while :;do
  #miro si la pantalla esta bloqueada
  estado=$(qdbus org.kde.screensaver /ScreenSaver\
    org.freedesktop.ScreenSaver.GetActive) 

  if [ $estado == "false" ];then
    if [ "$SONANDO" ];then
      #sino esta bloqueada y estaba sonando,
      #   le doy al play
      qdbus org.kde.amarok /Player \
        org.freedesktop.MediaPlayer.Play
    fi
    exit 0
  fi
  sleep 5 #compruebo cada 5 segundos
done


Si la interfaz de DBUS de Amarok2 fuera un poco más completa (sólo un poco, no pido mucho) se podrían hacer cosas más divertidas como las que tenía hechas antes y que si alguna vez consigo migralas, las publicaré.

Sed buenos.

20 abril, 2009

Asimov

Después de 16 libros y más de 30 cuentos he terminado.

He terminado de leerme la gran historia de Asimov, su ciclo de robótica y su ciclo de Trantor.
Cada libro es independiente pero se engarza en el universo creado por el autor de tal manera que todos los libros juntos forman una línea temporal.En las historias de robots partimos de lo que podría ser la actualidad (ojo y digo actualidad [año 2009] cuando las primeras historias fueron escritas en los años 40 del siglo XX) con máquinas que nos van haciendo la vida más facil, y cómo poco a poco van desembocando en robots, y más adelante en robots humaniformes que en sucesivas revisiones van solucionando fallos.

Poco a poco va avanzando la historia y los años. Asimov explica cómo se «descubre» el salto hiperespacial con un detalle que sólo le falta ponerte la fórmula. De ahí se pasa a la conquista del espacio primero por una sociedad completamente robotizada que fracasa y más adelante por una «completamente» desrrobotizada que es con la que termina la historia.

La trilogía (de 7 libros ;-D) de La Fundación que es la más famosa del autor cuenta el final de la historia.

Me podría pasar horas y horas hablando de esta gran historia. Pero me centraré en lo que más me ha gustado, y han sido las historias de robots. No me refiero a los libros que normalmente se enmarcan con este nombre sino a cualquier libro de Asimov que incluya entre los personajes algún robot. Concretamente, de toda la saga los dos libros que más me han gustado han sido: «Los Robots del Amanecer» y «Robots e Imperio»; que además se escribieron un año antes y uno después de que naciera.

Ahora me encuentro en un vacío, así que lanzo una pregunta al aire: ¿alguno me recomienda alguna novela que trate sobre robótica o parecidos? Y no me sirve la tira ecol, básicamente porque ya me la he leído ;-)

En la wikipedia se puede ver con más detalle El Ciclo de Trantor.

15 febrero, 2009

Enrutar sobre varias redes idénticas II

En capítulos anteriores, expliqué como hacer con VMWare unas redes locales virtuales idénticas y luego enrutar hacia ellas.

El problema es que usaba VMWare, que no es libre y que a mí por lo menos me ha dado siempre problemillas.
El caso es que un día VMWare me dejó de funcionar, así que encontré la excusa perfecta para pasarlo todo a software libre, concretamente con Qemu.

La idea es la misma y el script es muy parecido, los iptables son idénticos...pero había un problema y eran los "switchs" a donde las máquinas virtuales se "conectan". Con VMWare esto es trivial ya que tienes unos /dev/vmnetXX donde metes las máquinas de esa red. Pero no conocía nada parecido para Qemu.

Buscando buscando encontré vde_switch que resultó ser exactamente lo que buscaba. Gracias a eso y a las interfaces TUN/TAP pude montarlo todo con software libre, un resumen del script seria este:

#Levantamos ip pública del "router"
ifconfig eth0:1 xxx.xxx.xxx.xxx/xx

#Creamos el switch y creamos la interfaz local del "router"
vde_switch -d -s red1.sock -t tap1
ifconfig tap1 yyy.yyy.yyy.yyy/yy

#Si queremos, "abrimos" los puerto que queramos
iptables -A PREROUTING -t nat -d xxx.xxx.xxx.xxx -p tcp --dport PP -j DNAT --to jjj.jjj.jjj.jjj

#Marcamos los paquetes para saber luego redirigirlos
#marcamos los que seran de entrada para que iproute2 pueda identificarlos
iptables -A PREROUTING -t mangle -d xxx.xxx.xxx.xxx -i ! tap1 -j MARK --set-mark 1

#marcamos los que seran de salida para que iproute2 pueda identificarlos
iptables -A PREROUTING -t mangle -d ! xxx.xxx.xxx.xxx -i tap1-j MARK --set-mark 1001

#marcamos los de salida para que luego el routing sepa que direccion de origen poner
iptables -A PREROUTING -t nat -d ! xxx.xxx.xxx.xxx -i tap1 -j CONNMARK --set-mark 1001

#Creamos las tablas que luego usaremos...
echo 201 ruta1 >> /etc/iproute2/rt_tables
echo 401 salida1 >> /etc/iproute2/rt_tables

#los paquetes con marca tal, que usen la tabla cual
ip rule add fwmark 1 table ruta1
ip rule add fwmark 1001 table salida1

# la tabla tal es que sobreescribe la ruta y la envia por la interfaz correnpondiente (el replace es que si esta la machaca y sino esta la añade)
#esta es para los paquetes que entran que los meta por la interfaz que corresponde
ip route replace dev tap1 table ruta1

#esta es para los paquetes que salen, para que el siguiente salto sea la ip de salida
ip route replace via xxx.xxx.xxx.xxx table salida1

#Y la linea magica que hace NAT, los paquetes con la marca de salida que pusimos al principio, hace NAT poniendo como direccion de origen la ip publica de la tienda
iptables -t nat -A POSTROUTING -p all -m connmark --mark 1001 -o eth0 -j SNAT --to-source xxx.xxx.xxx.xxx

Y con esto y un bizcocho ya tenemos nuestras redes creadas, sólo falta lanzar Qemu y decirle que "conecte" la máquina virtual donde debe. Esto lo conseguimos con la siguiente llamada:
vdeqemu -net nic -net vde,sock=red1.sock miimagenqemu
Recomiendo muy encarecidamente que a la interfaz «nic» le indiquéis la opción «macaddr» ya que sino Qemu asigna la misma MAC a todas las máquinas de la red con los problemas que supongo todos conocéis.

Espero os sirva de ayuda, personalmente he aprendido mucho haciendo esto y es divertido ;-D

25 enero, 2009

Linus Torvalds cambia KDE por GNOME

Para mí esta va a ser la noticia del día. Torvalds es el creador y actual líder del proyecto Linux. Los que le conozcáis sabréis que de vez en cuando tiene alguna salida de tono, como cualquier otra persona; lo que ocurre que al ser el líder del proyecto libre más importante (desde mi punto de vista) hace que cada comentario flamable sea noticia.

En una reciente entrevista en Australia, dice que ha cambiado su escritorio KDE por GNOME. Lo hace porque KDE4 parece ser que no le gustó ya que la distribución que él usa, Fedora («for historical reasons», menos mal), puso esta versión de KDE que lleva tantos cambios que, lógicamente, su primera versión es un poco inestable.

En los flames que tenemos en el GUL de KDE vs GNOME, donde todos son de GNOME menos yo. Suelo invocar el poder de Linus para que acabe con esos nazis del escritorio. :-D

Al ver esta noticia me sentí un tanto desolado pero al leer la entrevista entera, que es muy recomendable, se lee que volverá a usar KDE cuando instale su siguiente máquina, esto es dentro de 6 meses. Así que el mundo por suerte no está del todo perdido. Todos hemos tenido nuestros momentos.

Pero la razón por la que escribo esta entrada es lo siguiente:

How is life at the moment, are you enjoying work at the Linux Foundation in Portland, Oregon?
I'm all happy with my life. The reason I come to Linux.conf.au is it is summer here and freezing in Portland. My job is the same and I do the kernel and nobody tells me what to do and they pay me for it, which is just the way I like it.

Are you going to say 2009 is the year of the Linux desktop?
I make controversial statements without thinking a lot. I'm not going to say it's the year of the Linux desktop as it is a small encroachment process.

De mayor quiero ser como Linus; y para empezar, me la suda lo que piensen los demás. PD:después de ver cómo habla de Git y svn, tendré que probar Git.

06 enero, 2009

Queridos Reyes Magos...

Se ve que he sido un niño muy bueno porque SS.MM. me han traído lo que les había pedido...

Si no lo puedes ver, púlsame


Si no lo puedes ver, púlsame

Efectivamente, como habéis podido comprobar me han traido la Wii-Fit, que aunque me ha hecho ilusión tengo que admitir que no tanta como al zagal este...

null - Watch more free videos
Si no lo puedes ver, púlsame

Muchas gracias Melchor, Gaspar y Baltasar.