viernes, noviembre 24, 2006

Blogger beta

Acabo de migrar el blog a la próxima versión de Blogger, que ahora está en fase beta.

Aparentemente la migración ha ido bien, no he visto que se haya roto ni descolocado nada de la plantilla (que por otra parte es bastante simple).

Lo más interesante que tiene la nueva versión es la posibilidad de poner (¡por fin!) etiquetas o categorías a los posts de forma nativa sin tener que hacer apaños raros con el Technorati o el Delicious. A partir de ahora las iré poniéndo, pero en los que ya están escritos no creo, a no ser que haga referencia a ellos.

lunes, octubre 02, 2006

La aberración suprema

Esta mañana que la he tenido tranquila en el trabajo me he dedicado a probar IEs4Linux, cuyo nombre es justamente lo que parece, el Internet Explorer funcionando en Linux.

Gracias a Wine se pueden hacer correr programas de Windows en plataforma Linux sin cambiar el código ni recompilarlo; y ni siquiera es necesario tener instalado el sistema de Microsoft. El problema es que no todos funcionan, y para lograrlo con algunos hay que sudar tinta para configurar adecuadamente el Wine, mientras que para otros simplemente no se puede. Yo hace un tiempo lo estuve intentando precisamente con el IE, pero aunque lo conseguí hacer arrancar no funcionaba como yo necesitaba.

Pues bien, para este programa concreto (IE) ese problema se soluciona con la ayuda de IEs4Linux. Se trata de un script que tras lanzarlo nos hace unas pocas preguntas sencillas: Qué versión de IE quiero usar (la 5, 5.5, o 6.0, o todas ellas), si quiero que me instale también el plugin del Flash, y dónde lo quiero instalar. A continuación él solito se descarga el Explorer de la web de Microsoft (recuérdese que es gratuito, aunque no libre) y tras ello lo descomprime, lo instala, y configura automáticamente el Wine de la forma necesaria para que funcione. Finalmente, crea un acceso directo en el escritorio, y listo, ya se puede usar, y funciona.

Lo primero que he hecho ha sido probar este mi humilde blog con el nuevo engendro, en concreto el vídeo de Youtube que puse en mi entrada anterior, y se ha visto y oído a la perfección.

Después me ha asaltado una duda. ¿Cómo aparecerá en las estadísticas de las páginas web? ¿Como Internet Explorer corriendo sobre Linux? He entrado en Show my IP, que entre otras cosas muestra el navegador y sistema con el que estás navegando, y no, no salía eso, me detectaba como Win32 en lugar de Linux :-)


Y... ¿para qué puede servir tener al IE en Linux, teniendo como tenemos otros navegadores mejores (Firefox, Opera, SeaMonkey, etc). Pues básicamente para dos cosas:

- Para probar cómo se ve esa página que estas desarrollando en todos los navegadores.

- Para entrar en páginas diseñadas para IE que no cumplen los estándares del W3C. Concretamente a mi me viene estupendamente porque la intranet que tenemos en mi empresa está programada de esa forma, y hasta ahora si quería hacer compras, pedir vacaciones, o rellenar partes de trabajo tenía que hacerlo conectándome por terminal server a otro equipo o reiniciando el mio con Windows. A partir de ahora, ya no.

viernes, septiembre 15, 2006

¡Mi primer vídeo!

El otro día por la tarde me dió por hacer un vídeo y subirlo a Youtube, la primera vez que hago las dos cosas :-)

Es la demo de introducción de un juego del antiguo sistema MSX, con el que me inicié en esto de la informática hace ya unos cuantos añitos. Se llamaba Psycho World, empezaba tal que así:



El juego en era bastante divertido, el clásico de plataformas, con unos gráficos sencillos pero muy resultones, en otra tarde tonta intentaré hacer otro vídeo de una partida del mismo.

El proceso para crearlo fué un tanto laborioso, y para ello usé las siguientes herramientas, todas sobre Linux, of course.

- La demó la ejecuté en el emulador openMSX. Dispone de una opción para grabar el sonido de lo que emula en un fichero wav, mediante la orden soundlog start.

- Para capturar la imagen en movimiento utilicé un programa bastante simple y antiguo llamado Xvidcap. Permite seleccionar un recuadro de la imagen de la pantalla y grabar en un fichero MPEG un vídeo de lo que ocurre en ella.

- Ya tengo el vídeo y el audio por separado, ahora hay que recortarlos un poco y unirlos. Para ello uso Avidemux, pero tiene un problema, y es que no deja editar vídeos si no son AVI, y el que yo tengo es MPEG.

- Lo convierto a ese formato con otro programa más, Mencoder, que viene con Mplayer, un gran reproductor de vídeo para Linux que se traga prácticamente todo lo que le eches.

- Una vez convertido a AVI, lo abro con Avidemux, le digo que le ponga el audio de un fichero externo, y me dedico a cortar por aquí, poner desfases por allá, para que lo que se ve y se oye esté lo más sincronizado posible.

El resultado es bastante decente, más que nada porque el sonido y la imagen no están fuertemente relacionados. El problema que me encontré fue que en el vídeo faltan frames, porque mi ordenador no da de sí lo suficiente para correr el emulador y comprimir MPEG2 en tiempo real. Tendré que probar alguna optimización, como reducir el tamaño de la ventana del emulador, o capturar en imágenes fijas y luego generar el vídeo en lugar de comprimirlo al mismo tiempo.

Por cierto, resulta curioso que en trasto que corre a 2400 Mhz necesite más o menos un 30% - 40% de CPU para emular un cacharro que iba a 3,5 Mhz :-)

viernes, septiembre 08, 2006

Fechas del futuro

El otro día un usuario me llamó para decirme que tenía un problema extraño con una aplicación. Cuando arrancaba le salía el siguiente error:

system clock has been set back

A lo que inmediatamente le pregunto si ha cambiado la fecha del ordenador y me dice que sí, que estaba mirando el calendario del Windows y sin querer adelantó dos meses la fecha actual. Le digo que le ponga la fecha bien y pruebe otra vez, y me dice que ya lo ha hecho y sigue sin funcionarle.

Me acerco porque nunca me ha pasado algo como esto y quiero verlo con mis propios ojos. Primero sincronizo el reloj del ordenador al segundo con el controlador del dominio con el comando 'net time /set /yes \\servidor_de_dominio'. Vuelvo a intentarlo y nada, pasa lo mismo.

Desinstalo el programa y lo vuelvo a reinstalar un par de veces sin ningún resultado. Fijándome bien en la ventana del error me doy cuenta de que el problema no es del programa en sí (Ansys, en este caso) sino de su gestor de licencias, FlexLm. Lo siguiente que hago es reinstalar solo este componente, sin que tampoco se resuelva el problema. Después de desinstalarlo una vez más, elimino la carpeta donde estaba, que se había quedado sin borrar junto con un par de ficheros, y elimino toda referencia que encuentro en el registro del Windows. Reinicio, lo instalo, vuelvo a probar, y nada, que sigue sin funcionar.

Meto el error en el google y encuentro muchas páginas donde se habla sobre el error, pero ninguna dice cómo solucionarlo. Tras un buen rato al fin encuentro una pista. Viene a decir que hay que buscar todos los ficheros del ordenador que tengan fecha del futuro y borrarlos. Y que si alguno de ellos es del sistema (alguna DLL), entonces no queda más remedio que reinstalar el Windows.

Vuelvo al ordenador y hago eso, con el buscador del pu*o perro del XP busco todos los ficheros de fecha posterior a la que me encontraba y me salen muchos. Y como era de esperar, algunos son programas que si me los cargo así sin más puede suceder cualquier cosa. Y desde luego, me niego a reinstalar el ordenador solo porque a causa de un cambio de fecha uno de los programas no funciona. ¿Qué hacer? Si fuera un sistema Linux lo arreglaría en dos patadas con los comandos find y touch, pero en Windows no se cómo hacerlo. Mientras, el perro de la ventana de búsqueda me mira sonriente a través de la pantalla, como regondeándose de mi adversidad.

Entonces se me ocurre... ¿y por qué no arreglarlo igual que lo haría en Linux? No cuesta nada probarlo, así que voy y me bajo el Cygwin, que es un conjunto de utilidades y programas de Linux portadas a Windows, y que tiene herramientas como el bash, el find y el touch. Lo instalo, y observo con agrado que la instalación por defecto trae esas utilidades y no tengo que seleccionar entre varias decenas de paquetes adicionales, así que le doy a Siguiente -> Siguiete -> Siguiente y en pocos minutos lo tengo instalando.

Entonces me abro una ventana de bash y ejecuto estas dos únicas órdenes:

touch ahora_mismo.txt
find / -newer ahora_mismo.txt -exec touch {} \;

touch sirve para cambiar la fecha y hora a un fichero. Si no se especifica ninguna, pone la de ese momento. Si se indica un fichero que no existe (ahora_mismo.txt) lo crea vacío.

find es para buscar ficheros que cumplan alguna condición en todo el árbol de directorios, en este caso ficheros que sean más nuevos que el que acabo de crear. Con -exec le digo que para los ficheros encontrados ejecute la acción que va a continuación, que es de nuevo el comando touch para poner la fecha de ahora al fichero, que se indica mediante las dos llaves {}. El \; del final es para indicar el fin del comando.

O sea, lo que hace es buscar todos los ficheros del disco duro cuya fecha de creación sea del futuro, y a los que encuentre les ponga la fecha actual.

Lo dejo corriendo unos minutos mientras oigo como rasca el disco duro. Observo en la ventana del bash que además de en los ficheros busca también en las claves del registro de Windows, cosa que yo no sabía. No puede modificarlas porque no tiene permiso, pero me lo apunto en mi cabeza por si puede serme útil en el futuro. Cuando termina, procedo a lanzar otra vez el programa.

Y funciona :)

Eso es solucionar el problema 'a la Unix way'.

lunes, septiembre 04, 2006

Backup al apagar el ordenador

Mi amigo Ocularis recientemente se ha hecho ubuntero y un día hablando me preguntó si era posible hacerse una copia de seguridad de su directorio home cada vez que apagase el ordenador. La respuésta es que , de forma bastante sencilla. Como no es la primera persona que me pregunta eso (de hecho es la segunda :-) lo voy a explicar porque puede ser de interés para quienes caigan por aquí googleando.


Directo al grano

Lo primero que hay que hacer es programarse un pequeño script que sea el que haga la copia de seguridad en sí mismo. Se puede crear con tu editor de texto favorito (vi, emacs, nano, pico...). Por ejemplo, algo como esto:

#!/bin/sh
DIR_ORIGEN=/home/pepito
DIR_DESTINO=/mnt/disco_externo/copia_seguridad

echo "******************************"

echo "Haciendo copia de seguridad..."
echo "******************************"

cp -Ru $DIR_ORIGEN $DIR_DESTINO


Que lo que hace es copiar (comando cp) el directorio DIR_ORIGEN (/home/pepito) y todos sus subdirectorios (opción -R) en el directorio DIR_DESTINO (/mnt/disco_externo/copia_seguridad). La otra opción de cp, la -u es de update, y lo que hace es que si ya existen en el destino los ficheros, solo los copia (sobrescribiéndolos) si el fichero de origen es más reciente. De esta forma, la primera vez que hagamos la copia le costará un rato, pero en las veces sucesivas solo se copiarán los ficheros que hayamos modificado y será más rápida. La primer línea (#!/bin/sh) sirve para indicar qué interprete de comandos ha de usarse para ejecutar el script. Si no entiendes que significa esto, no pasa nada, quédate con que es la forma habitual correcta de comenzar un script.

Ya tenemos el script, que supongamos que hemos llamado backup.sh. No olvidéis darle permisos de ejecución para que no haya problemas: chmod +x backup.sh


Ahora vamos a hacer que se ejecute cuando apaguemos el ordenador. Para ello nos situaremos en el directorio /etc/rc0.d Una vez ahí escribiremos lo siguiente:

sudo ln -s /home/pepito/backup.sh K10mi_backup

Si listamos el contenido del directorio veremos que aparece una línea:

lrwxrwxrwx 1 root root 18 mar 21 2005 K10mi_backup -> /home/pepito/backup.sh

Lo que hemos hecho es un link, que es una forma de nombrar un fichero cualquiera (/home/pepito/backup.sh) con otro nombre diferente (K10mi_backup). Y además, por haberlo puesto en ese directorio, se ejecutará cuando apaguemos el ordenador.

Pues ya está, sencillo ¿verdad?


Mejoras (para nota):
- Comprimir lo que se va a copiar (Pista: tar cvfz... ).
- Guardar varias copias de fechas distintas.
- Informar al usuario en el siguiente arranque del resultado de la copia (por ejemplo con un mail).
- Lo anterior solo funciona al apagar el ordenador, pero no al reiniciarlo. ¿Cómo hacer que también se ejecute en ese caso? (pista: leer el siguiente apartado y saber que el nivel 0 es el de apagado y el 6 el de reinicio)


La explicación

Se me han ido las ganas de escribir, ja ja, pero en este link tenéis una explicación muy completa de cómo funciona el arranque y parada de un sistema Linux. Lo anterior se aplica a casi todas las distribuciones de Linux con pequeñas variaciones, y a otros sistemas Unix como Solaris o HP-UX. En cambio, en otras familias (AIX, FreeBSD y derivados) la cosa funciona de otra manera.

Editado: En la explicación del link anterior hay un pequeño error, que un anónimo usuario de ubuntu ha descubierto y comentado.