Jugando con Android

Ya tenía rato queriendo probar Android, pero por una cosa o por otra no podía. Sin embargo, ahora que la empresa de telefonía celular Docomo va a sacar un modelo que lo incluye, pensé que es buen momento para comenzar a estudiarlo y ver qué se puede hacer con él.

Creí que sería más difícil, pero no me tomó ni 20 minutos tener el SDK listo y Eclipse con todo lo necesario para hacer un ¡hola mundo! Fácil, rápido, y lo mejor: es Java.

Como se pueden dar cuenta, el japonés se muestra a la perfección (ya tiene por default todo en UTF-8). Sin embargo, había un problema: no viene con ningún método para escribir en japonés, lo cual merma mucho lo que se puede hacer con el emulador por estos lares.

Después de estar buscando un rato, me encontré con Simeji, un programa que hace precisamente lo que necesito. Lo único que hay que hacer es bajar el archivo. apk, instalarlo en algún device creado previamente (el emulador) y listo. Ahora sí se puede comenzar a pensar en aplicaciones dirigidas al público japonés.

Como es un emulador, no tiene acceso al market, pero si hay forma de bajar el .apk a la computadora, la instalación es sencilla gracias al programa adb.

Hay versión para Linux, Mac y Windows. Si tienen un poco de tiempo, valdría la pena que lo prueben, para que se den una idea de lo que se puede (y podrá) hacer con Android.

Por cierto, Android está causando revuelo porque ha podido ser instalado en netbooks con éxito. La que se menciona más es la EeePC 701 (que tengo justo al lado, je), pero he visto videos en donde lo tienen instalado con Dell también. Obviamente no funciona todo todavía, pero la comunidad de desarrolladores ha logrado un excelente avance con los drivers de red (ya funciona). Falta pulir un buen, pero de concretarse, será muy interesante ver la batalla en netbooks: Linux, Android, y Windows 7, que ya se dijo que la versión starter podrá ser instalada en ellas.

RTFJD!

En donde JD = Javadoc. Una adaptación del famoso RTFM! (y no salgan con TL. DR por favor :P).

Si uno hace una clase en Java y se toma la molestia de escribir la documentación como se debe y de hacer el Javadoc, lo mínimo que esperas al momento de que le haces un cambio al código es que quien usa tu clase lea la documentación para ver qué cambió, sobre todo si le dijiste en persona que los cambios estaban hechos y documentados debidamente.

Una de las principales clases que he creado en mi trabajo (casi desde que entré, y de la que estoy 100% a cargo) ha sufrido cambios considerables. Y como en la empresa no conocían el concepto de “versión de software”, decidí levantar un servidor de svn en mi máquina. Así ha sido más fácil que el jefe baje el código nuevo una vez que ha sido modificado. También subí al svn el Javadoc. Total: esta clase de la que hablo regresaba, hasta el momento, un array de 2 LinkedList<String>. Bien pude haber regresado algo como LinkedList<LinkedList<String>>, pero como eran 2 listas máximo, preferí un arreglo. Sin embargo, en el cambio más reciente que me pidieron, ahora regreso un arreglo de 4 listas ligadas de strings. Termino la modificación de código, hago pruebas, veo que todo funciona, documento código, subo al svn la modificación.

Varias horas después, cuando el jefe tiene tiempo de probar el nuevo código, me dice “me da error, revisa qué pasa”. Y yo con cara de “¿eh? ¿En dónde le da error?” Al mostrarme su código, me di cuenta de que nunca escuchó que ahora el arreglo contenía 4 listas ligadas, y, por tanto, donde él usa mi código mandaba una ArrayIndexOutOfBoundsException.

Quizá de lo que más me puedo quejar de mi trabajo es que me exigen todo bien documentado… y no leen la documentación. No sé por qué me recuerda a cierto sensei en cierto laboratorio en cierta universidad (de la que me gradué); pero no digo nombres, porque si no yo mismo me enojo 😛

Puliendo código

Ahora que me he puesto de lleno la meta de sacar algunas herramientas sencillas para procesamiento de lenguaje natural, estoy puliendo, y en algunas partes rehaciendo, una parte del código que creé durante mi estancia en la universidad por acá.

Haber escogido Java no suena tan lógico, sobre todo cuando existen lenguajes como Perl, Ruby e incluso Python, que hacen la vida más tranquila en cuanto a procesamiento de texto. ¿Entonces? La verdad, no hay una razón definida; simplemente recuerdo que cuando comencé a programar la idea que tenía en mente recordé que quería practicar Java porque tenía rato que no lo usaba… y el resultado fue que terminé haciendo gran parte del código en ese lenguaje.

Una vez, creo que hace como 3 años, comencé a portar código a Ruby y recuerdo que obtuve buenos resultados, pero como nunca le di seguimiento en serio, el código se perdió y me quedé de nuevo en Java. No es malo del todo, ya que he aprendido muchos trucos del lenguaje. Sin embargo, con todo y que tengo mucho tiempo de no hacer nada en serio en él, me sigue gustando más C++.

Precisamente para practicar un poco en C, C++, Python y, en menor medida, LUA, estoy tratando de instalar el psptoolchain; de esta manera, puedo continuar con el algoritmo del jueguito de PSP que quería sacar hace ya tiempo (y del cual sí terminé de codificar el “esqueleto”). El problema es que siempre truena en la parte final de la compilada. Necesito sentarme a revisar el error y buscar información.

Ciertamente es diferente sentarte a programar con un monitor de 19″ (wide) enfrente. La computadora de la casa siempre ha estado conectada al monitor de 32″ que funge también como televisión, pero con la mudanza el escritorio quedó en el mismo cuarto que el monitorzote, así que opté por usar el de 19″ para cosas más serias, y el de 32″ para cuando quiero ver alguna película, serie o similares. La tarjeta de video que tengo es una nVidia Corporation G70 [GeForce 7600 GS] (gracias a lspci -v); la tengo con la opción “TwinView” en true y como “Clone”. Cierto es que podría usarla como extensión de un solo escritorio (como queda configurada originalmente en Windows), pero para fines prácticos, en Linux la tengo como clon.

Necesito ponerme a hacer limpieza de discos duros. Tengo muy poco espacio libre y hay muchas cosas que bien pueden estar en DVD sin mayor problema (como videos musicales). Me llama la atención comprar una unidad de BluRay, pero nunca termino de convencerme, incluso con el hecho de que ya bajó de precio (y seguro bajará más). Lo que sí urge comprar es un armazón nuevo, porque el que tengo de plano no funciona: es de esos “sin tornillos”, y gracias a eso tengo la unidad lectora de tarjetas “bailando”… la tengo que detener con las 2 manos cuando pongo una SD Card o una Memory Stick, si no, se va hasta adentro y tengo que abrir la máquina nada más para empujarla hacia afuera.

Por lo pronto, a dormir… De verdad que los días se pasan volando.

Cambios en el hack de las categorías

Las 2 barras laterales comienzan a estar muy pobladas. Me percaté de que la sección “Categorías” ocupaba mucho espacio vertical, así que opté por moverle al código para que quedara todo más compactado.

Los cambios se realizaron, como siempre, en wp-includes/classes.php:

  • Todo es dentro de la clase Walker_Category
  • En start_el, dejo la variable catimg como la tenía originalmente en el hack, esto es, $catimg = “<img src = \”caticons/” . $cat_name . “.jpg\”>”;
  • Cambio la asignación de la variable $link para que solo tenga la imagen de la categoría después de la liga, es decir, omito los nombres de categorías:
    $link .= $catimg . ‘</a>’;
  • Omito la primera asignación a la variable $output, que es en donde se designa a cada elemento como miembro de una lista.
  • Cambio la asignación de la variable $output para que solo contenga lo que la variable $link contiene.
  • En end_el, simplemente omito la asignación del tag de fin de elemento de lista </li> a $output.

El resultado es notable. Estuve tratando de poner la liga a los feeds en la primera barra, pero por alguna razón la primera imagen nunca aparece. No me quise pelear más por hoy.

Mérito

Verdad que ni me lo esperaba:

Revisando el correo de la casa me encuentro con uno del staff de la conferencia realizada en Hong Kong en la que presenté mi último paper. En él, me informan que mi paper ganó el certificado al mérito (modalidad estudiante) de la conferencia. Aunque hay varios premios similares, el de modalidad estudiante es uno solo, y me lo dieron a mí.

Ni yo me la creo.

Sobre el premio en sí, no es dinero ni nada por el estilo, sino un simple certificado. Lo bueno es que tiene valor curricular y eso es lo que realmente importa.

Sigo en shock

Problemas actualizando Fedora 10

Hoy por la mañana prendí la computadora para anotar unas direcciones de casas que quiero ir a ver debido a que me tengo que mudar. Hasta ayer por la noche todo funcionaba bien, pero de repente la computadora se quedaba en una pantalla negra y no me dejaba avanzar.

Después de buscarle un poco, me di cuenta de que el problema era que los drivers de mi tarjeta de video (Nvidia) no estaban sincronizados con la versión del kernel. Fedora hizo no sé qué cosas, y terminó rompiendo las dependencias de los paquetes. Así, tenía 2 cosas diferentes, fuera de sincronía, y no podía arrancar.

Reinicié en modo texto y, con la laptop, busqué información en internet. Efectivamente, el problema era el driver de Nvidia, pero la cuestión es que esos drivers salen junto con cada nueva versión del kernel, por lo que algo me estaba faltando. Ejecuté un yum update y vi, después de una hora de buscarle, el problema: el repositorio de livna no respondía, y eso hacía que los demás repositorios no se actualizaran del todo.

Moví el archivo .repo a un directorio temporal, otra vez ejecuté un  yum update, y, como lo esperaba, todo se actualizó normalmente. Reinicié en runlevel 5 y GNOME se carga a la perfección.

Me divertí, como siempre lo hago con estos problemas, sin embargo, con eso de que traigo el tiempo encima para mudarme, esa hora que me tomó resolver esto la voy a tener que reponer en el laboratorio al rato. Ni modo, a ver si con esto aprendo a respaldar bookmarks 😀

Inocencia (como deberían ser las cosas)

Aunque ya tengo un poco más de tiempo para mí, últimamente he estado ocupado en actividades extraescolares que me consumen gran parte del día. No obstante, me he dado tiempo para responder a las personas que me han enviado correo. Recuerden tener un poco de paciencia. Leo todo lo que me llega, solo que a veces no puedo responder tan rápido como quisiera.

Hace como una semana estaba platicando en línea con un tío. Me comentaba que había encontrado un video de 1994 donde salgo yo (es el cumpleaños de un primo), y que quería enviármelo. Según lo que me decía, el video dura alrededor de 50 minutos, y por lo que me comentaba, todo indicaba que quería enviarlo como archivo adjunto en un correo a hotmail.

Le expliqué que posiblemente el archivo era muy grande y que habría que codificarlo, pero que aun así no creía que se pudiera enviar por hotmail. No sé si no me entendió o quiso demostrarme que sí se podía, pero días después recibí un correo en donde “me enviaba” el video… Sobra decir que lo que me mandó fueron archivos .ifo, y en general archivos de, a lo mucho, 170 kb. ¿para un video de 50 minutos? Tomando en cuenta que un capítulo de animación de 30 minutos, codificado con DivX o Xvid mide unos 150 MB en promedio, creo que no necesito decir que no me mandó nada.

Le escribí otro correo explicándole lo que había pasado y lo que habría que hacer para que el video me llegara, a lo que él me respondió con un “gracias por el consejo”, visiblemente molesto por mi explicación. Al leer su respuesta, de nuevo recordé (aunque nunca lo he olvidado) lo complicado que puede ser para muchas personas manejar una computadora, y al mismo tiempo, cuál es el trabajo que nosotros los profesionales en este campo tenemos para poder satisfacer a esos clientes, a la gente que no pasa su vida enfrente de un monitor, y para quienes abrir una carpeta o hacer un doble click puede ser toda una hazaña de la que se sienten orgullosos. La inocencia de estos usuarios es la pauta que marca el reto al que nos enfrentamos al hacer un sistema: muchas veces el usuario no sabe realmente lo que quiere, y como ellos no conocen los límites les es fácil pedir muchos detalles (algunos de ellos complícadísimos o de plano imposibles).

Debo reiterar también que ciertamente la necesidad es la madre de la invención, y que mi hermana, que no sabe NADA de computadoras, haya podido ejecutar como súper usuario un fsck -A para reparar un problema que le salió en el disco duro, prueba que, esa “inocencia” es a veces “flojera”. Bueno, gracias a eso los de soporte técnico tienen trabajo. Al final, creo que todos quedamos contentos.

¿Y el video? Cuando lo reciba, lo subo para que todos vean mis años mozos… eso claro si es que lo recibo 😀

“Ripiando” DVDs en Linux

Me aventé la tarea de hacer esto en Linux debido a que siempre dependía de programas como Magic DVD, Super DVD Ripper, etc., en las ventanitas. Como siempre, era simple cuestión de leer.

Me encontré con programas como dvd::rip, que es muy, pero muy bueno. Obviamente que todos (o la mayoría) de los programas gráficos se basan en otros que son de línea de comando. En este caso me encontré con transcode y mencoder (para las codificaciones), y hubo uno en especial que me gustó mucho por su sencillez: lxdvdrip.

lxdvdrip es un programa que hace que copiar un DVD sea increíblemente fácil. Lo único que realiza es sacar el VOB del DVD al disco duro, presentar un preview con mplayer, y después pedir un DVD para copiar. Es todo. Tiene, sin embargo, algunas opciones interesantes que se activan con el parámetro -st. Algunas de ellas son:

-st=copy: Con la versión reciente, permite copiar tanto DVD-5 como DVD-9 sin problemas. Antes solo permitía copiar DVD de 4.7 GB.
-st=partialcopy: Aún en fase experimental. Esta opción dumpea el DVD completo al disco duro y después te da la opción de escoger los títulos que quieres que se copien al nuevo DVD.

Sabemos que primero hay que sacar del DVD el archivo .VOB que contenga el video en sí (dumpear). Eso es fácil. Luego viene la tarea de cambiarlo a algún formato como .avi usando códecs, y es ahí donde lxdvdrip no llega, pero las demás opciones varían: K3b incluye una opción para sacar el video de los DVD y codificarlos en avi usando Xvid; dvd::rip usa transcode para crear los avi; mencoder tiene la ventaja de poder agregar bitrate variable en el audio.

Continue reading ““Ripiando” DVDs en Linux”

Esperanza para el recién llegado

Después de las motherboards pandora-proof que salieron para el PSP-2000 (Slim), sobra decir que hay que tener cuidado si se quiere comprar un PSP en este momento. ¿Por qué? Por la sencilla razón de que todavía son “incrackeables”.

El PSP-3000 salió. Como siempre, le hicieron mucha publicidad por este lado del mundo. Sin embargo, la gente dentro de la scene inmediatamente encontró tanto que no se podía crackear, como ciertos problemas con la pantalla. En pocas palabras, aunque tiene más brillo, la imagen tiene mucho mejor definición y nitidez en un PSP Slim.

Nadie en su sano juicio (que no sea desarrollador y que no sepa de homebrew para el PSP) compraría un PSP-3000, y tendría mucho, mucho cuidado al comprar un Slim. Sin embargo, como suele suceder, alguien encontró un “exploit” en un juego llamado GripShift (que dicen que es quizá el peor juego para PSP en la actualidad); este exploit permite correr código externo en el PSP, funciona en todos los modelos desde el FW 1.50 hasta el 5.02, y ya hay un Hello World:

[youtube]http://www.youtube.com/watch?v=0KdIrzsi4IA[/youtube]

El exploit es un simple buffer overflow, justo como pasó con Illuminati en Lumines; la diferencia es que en Illuminati solo había unos 2.5 Kb libres en el save file para poner código, mientras que ahora en GripShift hay 25 Kb, es decir, mucho más espacio, lo que se puede traducir en muchas más posibilidades.

Lamentablemente, el exploit es en user mode, y hay que recordar que para tener acceso a las funciones necesarias para hacer downgrades se necesita estar en kernel mode. Pero al menos esto trae esperanza para quienes tienen un Slim con motherboard reciente o un PSP-3000. Recordemos que en los tiempos del phat, el acceso a homebrew para firmwares 2.50 y 2.60 se realizaba con en eLoader de Fanjita (después Noobz team). Este exploit podría abrir las puertas a un nuevo eLoader, y con suerte, a un nuevo downgrade.

Muchos auguran que pronto habrá una nueva versión de firmware oficial para parchar este exploit. La haya o no, de momento hay ya varios elementos con los que se puede trabajar. Esperamos que Dark Alex o algún otro desarrollador encuentren la forma de burlar la “seguridad” que Sony ha implementado, para así poder tomar de nuevo la ventaja en la eterna lucha entre hackers vs. Sony. De lograrlo, Sony las llevaría de perder, porque una vez que se logre un downgrade en el PSP-3000, la única forma de detenerlo físicamente sería sacando otro modelo de motherboard u otro de PSP, y es algo que, por los números con los que está trabajando la compañía, no es muy factible que digamos.

Más razones para leer logs y manuales

Ayer que llegué temprano a la casa me dispuse a ver una serie de capítulos de 創聖のアクアリオン (Sousei no Aquarion), una de las muchas que están en la lista de espera. Sin embargo, me desesperé mucho por todas las fallas que tiene la librería y el códec que había mencionado en un escrito anterior: las imágenes se pixeleaban, había brincos en la reproducción que causaban que no hubiera sincronización del audio y el video… en fin.

Hoy decidí mejor entrar en Windows y ver los capítulos usando el mplayer para ese sistema operativo. Antes no me gustaba porque el video siempre se quedaba en el centro de la pantalla (tengo widescreen), pero, leyendo el manual, me di cuenta de que la opción -monitoraspect era lo que estaba buscando. Así, el comando mplayer -fs -monitoraspect 16:12 <archivo de video> me da el video de pantalla completa. Fui feliz durante un rato, pero pensé que debería hacer otro intento en Linux, ya que no amerita arrancar las ventanitas nada más para ver videos.

Generalmente instalo mplayer desde el código fuente, pero ahora con Fedora 10 decidí probar con yum, además de que cuando lo compilaba me aparecían problemas que antes no tenía. Decidí volver a bajar las fuentes del subversion y aventarme los pasos como siempre: códecs en /usr/local/lib/codecs, ./configure (nunca le pongo GUI), make y make install. Dos versiones de mplayer en la máquina, la original en /usr/bin/mplayer y la recién compilada en /usr/local/bin/mplayer. Usando exactamente los mismos códecs, la versión original seguía con los problemas, pero la nueva versión no me daba en el video, pero ahora no escuchaba antes. Revisé el log y me di cuenta de que por alguna razón se selecciona oss como dispositivo de salida de audio. Intenté con mplayer -ao alsa y sí funcionó, pero la imagen a veces se congelaba de la nada (problema que había tenido antes). Acto seguido, probé con mplayer -ao sdl y tenía sonido y nada de congelamientos… pero había una especie de “ruido” en el sonido, no  molesto, pero sí notorio. Más problemas…

Revisé el configure.log porque se me hizo muy raro no haber tenido sonido con mplayer -ao pulse (para usar pulseaudio) y mi sorpresa fue que no lo había detectado. ¿La razón? No tenía los archivos para desarrollar pulseaudio. Un yum -y install pulseaudio-libs-devel instaló lo necesario, y de nuevo a repetir el proceso de instalación. Probé con mplayer -ao pulse Futurama4x18.avi y al fin tuve éxito: no congelamientos, sincronía correcta en audio y video, y con la opción de -monitoraspect 16:12 de nuevo tengo videos de pantalla completa en Linux. Y para no errarle más puse todo en el archivo de configuración (~/.mplayer/config); además, así evito la fatiga de estar tecleando cada vez las opciones de monitoraspect, fs y ao.

Todo esto lo pude resolver gracias a que me aventé la leída completa del manual de mplayer (man mplayer) y a que ya se me pegó la costumbre de ver los logs de todo (antes también los veía, pero me daba flojera hacerles caso o analizarlos a fondo). Es algo muy simple y hasta lógico, pero muchas veces simplemente lo pasamos por alto.

Eso sí: ¿alguien ha leído completa la licencia de Windows? Yo confieso que no. Seguro el panda al menos la leyó completa una vez, pero, ¿qué tal los demás? No es un log ni un manual, pero supongo que ha de tener puntos interesantes.