Soporte de anotaciones en Evince

Hace un par de días recibí un email con el ChangeLog de Evince 2.27.1 . Entre esas novedades, una que me ha hecho bajar el código de Poppler, compilarlo, bajar el código de Evince, compilarlo e irme a dormir tranquilo, por fin, tras varios años esperando este momento 🙂

* Preliminary annotations support (#315002, Carlos Garcia Campos, Iñigo Martínez)

¡Soporte de anotaciones en Evince! Por el momento muy rudimentario, sólo permite visualizar las anotaciones de un PDF (ni crearlas ni editarlas), pero algo es algo. ¡Felicidades a Iñigo y a Carlos! Se lo han currado…

Trucos para Flex Builder 3 en Linux (I)

Últimamente paso muchas horas delante de Flex Builder 3, desarrollando junto con otros programadores una aplicación que espero dé mucho de lo que hablar (para bien 🙂 Algunos de mis compañeros desarrollan sobre Windows y ahí FB va fino. Pero en Linux, al ser una versión Alpha, tenemos algunos problemas. Poco a poco los vamos solucionando. Veamos hoy uno de ellos.

Al lanzar una aplicación .mxml, nos encontramos con el siguiente pop-up:

Y el error: «Flash Player not found / Flex Builder cannot locate the required version of Flash Player. You might need to install Flash Player 9 or reinstall Flex Builder. Do you want to try to run your application with the current version?» Si pulsamos en «Yes» todo funciona correctamente. Pero ese popup es un verdadero tostón. ¿Cómo evitarlo? Bien, tras muchas vueltas, la solución es sencilla (como todo, cuando lo conoces 😉 :

Basta con lanzar FlexBuilder usando el script Adobe_Flex_builder.sh que se genera en la carpeta de instalación de FB. Ese script inicializa la variable MOZ_PLUGIN_PATH que apunta al directorio de plugins de Firefox (donde deberías de tener tu plugin Flash bajo el nombre de fichero libflashplayer.so )

El problema añadido es que ese script no suele funcionar :-O Así que lo mejor en esos casos es ejecutar a mano lo que el script se supone que automatizaría:

$ export MOZ_PLUGIN_PATH=$HOME/.mozilla/plugins
$ eclipse -Xmx 512M

La primera línea define la variable de entorno MOZ_PLUGIN_PATH y la segunda incrementa el tamaño máximo del heap de la JVM a 512MB (útil para que FB no se atragante con errores de memoria insuficiente). Ya puedes decir adiós al dichoso popup.

Dar formato al código de un programa en VIM

Receta rápida para darle formato al código en VIM (el lenguaje: cualquiera de los soportados por VIM, o sea, legión):

Ejemplo en PHP; indicamos el tipo de archivo:
:set filetype=php

Marcamos todo el texto y le damos formato, pulsando ESCgg=G

ESC –> Modo comando
gg –> saltar a la primera línea
= –> formatear el código
G –> hasta la última línea

Hackit!: nivel 3

Warning! Este post muestra paso a paso cómo superar la prueba 4 (nivel 3) del HackIt! de la Gipuzkoa Encounter 2009. Si no quieres verlo, deja de leer… ¿Todavía estás aquí? Entonces ¿quieres leer la solución? Vale, tú mismo. Allá vamos:

0) Descargar el ejecutable para Windows a crackear. Si estás en Linux, aprovecha para pasarle el comando strings y ver si encuentras algo interesante – no hay gran cosa-. Ya puestos ábrelo en vi (sí! abrimos el binario en vi) . Aquí sí que vemos algunas cadenas interesantes. Entre ellas UPX!

1) UPX es un empaquetador de ejecutables (tanto para Win como para Linux). Descargamos UPX. Desempaquetamos el ejecutable (se puede hacer en Linux con Wine si se desea)

/tmp/upx303w$ wine upx.exe -d ../crackit.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 – 2008
UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
——————– —— ———– ———–
28672 <- 8704 30.36% win32/pe crackit.exe
Unpacked 1 file.

2) La idea ahora es abrir el ejecutable con algún debugger para Win. Por ejemplo, OllyDBG. Lo he probado con Wine y no ha ido muy fino así que abrámoslo en el sistema del maligno 😉

Abrimos el fichero desempaquetado crackit.exe en OllyDBG.

Ponemos un punto de ruptura en la primera línea ejecutable del .exe (en la 00401811). Para ello, basta con hacer doble click sobre la línea en cuestión (el número de línea se pondrá rojo, igual que en la imagen). Ahora, dado que la primera línea es un «call 004023E4» lo inspeccionamos con «step into», es decir, pulsamos F7 para ver el código al que ese call está llamando. Ahora, empezamos a navegar por el código usando F8 (o sea, step over, es decir, ejecución línea por línea, sin meternos en los call)

Seguimos así hasta la línea 00401665 «call 00401005». Realmente la idea es que pulsamos F8 hasta ver cuándo se abre una ventana MS-DOS que nos está pidiendo login y password. En ese momento apuntamos la línea que provocó esa llamada y nos damos cuenta de que es la 00401665. Ahora reiniciamos la sesión de debug y pulsamos F7/F8  hasta pararnos en 00401665. Pulsamos F7 (step into) para ver «las tripas» de ese método.

Ahí hay un «jmp 00401010». Pulsamos F7. Y seguimos con F8, línea a línea. En la 00401050 vemos que se prepara el string que nos indicará por pantalla «En esta prueba es importante saber quién eres…». F8 y veremos que se hace una llamada a printf. Seguimos con F8. En la línea 004010A2 vemos que se hace una llamada a fgets (se solicita por teclado un string al usuario). Tecleamos «euskal» y pulsamos intro para seguir depurando. F8 hasta que nos pida el password. Tecleamos cualquier cosa (12345678, por ejemplo).

Ahora se supone que en algún momento deberá de compararse lo que hemos tecleado nosotros (12345678) con la clave correcta que se supone que deberíamos de teclear. Así que vamos pulsando F8 hasta que veamos el «strcmp» pasar por delante nuestro y justo antes, el string con el que comparar  🙂

(pulsa sobre la imagen para ver la contraseña en la línea 004011B3). Suerte con el nivel 4 😉

¿Qué pasa cuando Google falla masivamente?

¿Qué ocurre? que no funciona el buscador Google, obviamente. Pero es que tampoco Gmail. Ni Google Reader. No funciona GoogleSyndication.com… ni google-analytics.com, ni googleads.g.doubleclick.com, ni Google Adsense, ni ajax.googleapis.com. Eso es lo que pasa, entre otras cosas cuando Google deja de funcionar. Es decir, que medio Internet (yo diría que más de medio) deja de funcionar. ¿Por qué? Porque algunos navegadores (Firefox entre ellos), cuando no encuentra el banner de Google Adsense correspondiente, deja de mostrar el resto de la página. Se queda en modo «guru meditation», cargando y cargando sin mostrar nada más que lo que ya cargó al llegar a ese banner fatídico. ¿Y cuál es el porcentaje de webs que hacen uso de Google Adsense? MUY alto. Y si no, harán uso de ajax.googleapis.com, o de cualquier otro servicio de Google. No somos conscientes de lo que esta empresa ha conseguido acaparar. Y lo peor es que somos fieles usuarios y la tenemos en un pedestal (¡yo el primero, no podría sobrevivir en Internet sin los servicios de Google!). Cada vez que muestra algún servicio nuevo nos metemos de cabeza. Y a gusto, sin ningún remordimiento. Miedo me da.

Nota técnica: para poder al menos navegar medio decentemente, se pueden meter los dominios de Google apuntando a localhost en /etc/hosts. Aunque sea de forma temporal, hasta que el cataclismo que haya ocurrido en los servidores de tío Google se consiga solucionar.