Saturday, July 07, 2007

Recuperando info I

Mi querida primer compu, melón decide agonizar una vez más.
Solo que en esta ocasión está en juego un CVS con relativa data importante.
Los síntomas eran claros y su fin era inminente, pero los backups a conciencia parecen no ser siempre una opción razonable (?). Durante los últimos dos meses el disco rígido principal de esta nos endulzaba el oído con un
tuiiiiiiiiiiiiiiiiiií-tac  tuiiiiiiiiiiiiiiiiiií-tac 
(mis amigos describieron este sonido como el de un respirador artificial, no puedo constatar este hecho por nunca haber tenido la dicha de cruzarme con uno).
Hasta que (tras varios cortes de luz producto de esta crisis energética)...

GRUB loading stage 1.5

GRUB loading, please wait
Error 2

:'( años de compañía tirados a la basura
Así que casi casi me puse a hacer un micro-review de cada GNU/linux live cd de rescate que encontré. A la izquierda una lista de los que fui probando.
Igualmente hay que tener en cuenta que esta
Pentium 166 MMX
no bootea desde CD, así que el primer desafío era encontrar en los confines de mi memoria el famoooooso diskette que alguna vez me permitió bootear cualquier cosa (y realmente es así, te levanta lo que tengas =-o). Después de algún infructuoso mensajes de texto con Marta Rich recuerdo lo importante... http://btmgr.sourceforge.net/ <- Boot Manager
Mini resumen de cada live cd:

  • systemrescuecd: la última versión (0.3.x) no funcionaba en mi pentium viejita, solo en i686, así que me bajé uno más viejo (0.2.19) y con esta distro funcionando pude hacer fsck /dev/hda y luego de muuuuuuchos enters para arreglar cada iNode perdido (no -a cuando está muy fachuteado te dice que lo hagas de manera 'manual'), estaba con condiciones de montar la partición de nuevo.

  • debian-livecd: yo muy contento con bootear un debian posta en cd, muy copado... levantó bien, pude configurar la placa de red, fdisk -l de los discos, monto mis particiones, peeeeeeeeero... no tiene ssh, apt-get update me tiraba "bus error", me bajo el paquete wput en un diskette, lo instalo bien con dpkg -i pero la verdad ponerme a aprender/configurar un servidor ftp, ni ganas. Aparte estaba todo el tiempo con la idea que mi disco iba a estallar en cualquier momento (la cantidad de sonidos raros que cada tanto hacía este rígido no tiene nombre).

  • (R)escue (I)s (P)ossible y Trinity eran muy complicados, con unos menues de booteo infinitos, un embole (incluso el segundo nunca terminó de bootear).

  • Finalmente doy con el bienamado Damn Small Linux, que me permitió bootear lo más bien (con la opción DSL 2 al ppio te levanta solo consola). Tiene ssh así que pude copiar todo de diez mil.

Lo que me queda ahora es ver qué hago con los discos estos que parecen querer morir pero yo no los dejo descansar en paz.
Lo importante es que la data está a resguardo.

Detalle de la foto: la compu destartalada, un disco rídigo sobre una lectora de CD (que a su vez estaba encima de otro disco rígido y este sobre un CD de Bach), una diskettera prestada y, asomándose, el pelo de Vegetta y el de el Negro que se quedó haciendo el aguante

Saturday, May 05, 2007

Locking NFS

Nos volvimos locos viendo por qué los ejemplos de jackrabbit no andaban tirando un "No locks available" (incluso con la JVM de Sun 1.5.0_08 decía "Permission denied") y resulta que es porque NFS (manera sobre como montamos los homes en mi trabajo) no soporta el filelocking que necesitaba una de las clases fundamentales...
En la lista de eclipse sale una explicación un poco más simpática del problema proponiendo soluciones... http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg11812.html.
Para fijarse si anda hagan algo tan simple como:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileLock;

public class TestingLock {

public static void main(String[] args) {
FileLock lock = null;
try {
lock = new RandomAccessFile(new File("lock"), "rw").getChannel().tryLock();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}
Descartado que sea un problema de la JVM de sun, gcj tampoco funciona. Es claramente una deficiencia del sistema de archivos, aunque el error es bastante críptico.

Monday, April 30, 2007

Twin USB Joystick

Me compré hace unos días joysticks bastante baratos, u$s9.50 el par (claro que esto me enteré después de pedir dos -que el vendedor entendió que eran dos pares- y felizmente ahora tengo cuatro). El tema es que en mi Ubuntu Feisty Fawn 7.04 (nunca voy a entender la numeración que ubuntu le pone a sus versiones) no andaba. En realidad andaba "más o menos". Lo que ocurría fundamentalmente era que me lo reconocía como uno solo en lugar de dos. El joystick es raro, de uno de ellos sale un cable que se conecta al segundo y de éste aparte sale el cable usb (o sea, dos joysticks un usb). Indignado por esta falencia y casi al punto de venderlo (a mis amigos con Windows les habían gustado bastante xD) intenté arreglarlo... Y lo mejor es que pude :D Ahora cuento más o menos cómo hice.
Primero que todo leí este INCREÍBLE documento The Linux Kernel Module Programming Guide hasta el capítulo 7 (este cap seguro que también es interesante pero con lo anterior ya me sirvió para lo que quería, después lo leo). Y después Tincho me pasó un post de un flaco que tenía un problema igual pero para otro tipo de joystick pero que la solución terminó siendo la misma. El post de este flaco es Hardware: SmartJoy Dual Plus USB adapter, de hecho van a encontar unas preguntas mías al final de cosas que no me salían en el camino :P.
Un par de cosas de mi entorno donde este parche SI anda.
  • fijarse en la config con la que fue creado el kernel si el módulo usbhid fue compilado como tal o integrado al kernel (en mi máquina lo hice con cat /boot/config-2.6.20-15-generic | grep CONFIG_USB_HID, y por suerte estaba el =m que me fue indicando que era posible reemplazarlo, al menos de la manera que iba aprendiendo)

  • en algún módulo que tengamos seguro fijemenos el vermagic, en mi caso usé modinfo usbhid que tiene que ser igual al uname -r + EXTRAVERSION seteada en el makefile de los sources (grep EXTRAVERSION /usr/src/linux-source-2.6.20/Makefile) si esto no es igual probablemente no tengamos los sources posta del kernel que estamos corriendo
Después de esto copié el directorio de los drivers que necesitaba a mi entorno de desarrollo local. El driver está en /usr/src/linux-source-2.6.20/drivers/usb/input y ajustamos el makefile para no independizarnos de las variables que fueron utilizadas en la compilación posta de todo el sistema. Ésto se hace mirando el Makefile y el config del kernel y reemplazando las variables a mano del Makefile del módulo. Mi Makefile en el entorno de desarrollo quedó
usbhid-objs := hid-core.o
usbhid-objs += hiddev.o

obj-m += usbhid.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Después de esto se aplica mi parchecito que lo subí al launchpad de Ubuntu en https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/111146. Solo queda correr make y si todo sale bien tenemos un usbhid.ko. Sacamos el que está cargado en el kernel #rmmod usbhid y agregamos el nuestro #insmod usbhid.ko.
Enchufás el joystick y vas a ver que en /dev/input ahora están los dos, el /j0 y el /j1 :-D
Espero que a alguien le sea útil y cualquier sugerencia es bienvenida.
Salud!

edit: prestar atención a los comentarios de mi bugreport en launchpad que muestran un módulo mucho más complejo que le agrega incluso forcefeedback a estos joy, yo todavía no lo probé

Thursday, January 11, 2007

Fotolog RSS

Edit: fotolog.com ya puso rss en su site, así que esto quedará como mera fuente de código para pispear como lo hice yo


Siendo ya un acérrimo fanático a Google Reader me encontré con la imposibilidad de agregar fotologs amigos (fotologs únicamente de fotolog.com).
Así que producto de esa frustración surge flog2rss que es un modesto script PHP para justamente este fin.
Apuntes varios al respecto:
- no soy un experto en RSS así que si alguien quiere mejorarlo, para eso es GPL
- no me enorgullezco del código obtenido (básicamente solo me encargué de que funcione) si alguien quiere mejorarlo, para eso es GPL
- funciona solo con fotolog.com, si alguien quiere extenderlo, para eso es GPL
- implementa una pequeña caché debido a que fotolog.com es extremadamente lento, si alguien quiere mejorar la implementación de este mecanismo, está invitado, para eso es GPL
- puse los comentarios en inglés por las dudas, si los quieren traducir, para eso es GPL
- tiene mil casos borde que no contempla (por ahora solo se fija si da 404, cosa extremadamente común en fotolog.com y en tal caso o devuelve lo cacheado o devuelve un RSS vacío), bueno, ya saben que hacer al respecto
- es GPL

por ahora tengo uno instalado y corriendo en
http://www.locolandia.com.ar/feed/feed.php?flogName=[nombre del flog]
es mi máquina, así que por ahí la apague, sea lenta o lo que se me ocurra.

espero que le sea útil a alguien

DOWNLOAD:
http://www.locolandia.com.ar/feed/dist/flog2rss-0.1.tar.gz (también si alguien se copa y lo quiere hostear en algún lugar más adecuado, está invitado)

edit:
se puede pensar en alguna manera de combinar su uso con el de feedburner

Labels: , , ,

Friday, December 22, 2006

Mozilla Thunderbird I

El comportamiento default del thunderbird a la hora de hacer un reply es poner el encabezado "[Autor] wrote:". Existe una manera de cambiarlo.
Ir a Edit > Preferences > Advanced > Tab General y tocar en el botón "Config Editor...".
Escribir mailnews.reply_header_type en el campo Filter y cambiar el valor (que por defecto está en 1) por 2 y quedará "On [date] [author] wrote:" que me parece bastante más piola.

Más info: Thunderbird Help: Tips & Tricks#Change the reply header

Labels: ,

Wednesday, December 06, 2006

Poema en python ;-)

if you in (depressed, sadness, resignation):
print 'me, my sweetheart'
if feel(you) is 'lonely' or feel(you) is 'neglected':
talk_me(this)
while always:
I.take_care(you)
if you.love() is not me:
# I will follow in the madness
# I will
break # down...
for emotion in my.heart:
try:
your.lover = me
except:
your.best_friend = me
if you.hate(me):
love(me)
elif I.annoying():
love(me)
else:

love(me, how='deeply', when='now')
Vía. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496781

Labels: , ,

Thursday, October 26, 2006

Tomcat I y profiling

Pispeando aburrido mientras inicia el tomcat veo en la consola el siguiente mensaje INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path (con voz de Tomcat, y ya sabemos todos que Tomcat tiene una voz bastante metálica). La cosa es que Tomcat (no se por qué en este punto me choca llamarlo 'el' Tomcat :-/) trae un módulo nativo para mejorar la performance. Bajo Debian, se instala así:

#apt-get install libapr1-dev

cd $TOMCAT_HOME/bin
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.3/jni/native
export JAVA_HOME=/usr/lib/j2sdk1.5-sun/
./configure --with-apr=/usr/bin/apr-config
make
make install

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib/

Tambien me tocó ver la parte de profiling, para esto usé jmemprof que es bastante fácil de usar. Siguiendo lo que dice ahí en Building and Installing es muy facil y funciona copado...

Labels: ,