03 julio 2009

Solucionar error de Megaupload Toolbar en Firefox

Al igual que muchos/as, acostumbro descargar diversidad de cosas de los varios file-hosting/alojamientos de archivos que hay en la vuelta. Algunos de estos proveen herramientas para facilitarnos la vida al momento de subir/descargar, organizar y/o buscar archivos.
En este post hablaré y mostrare cómo solucionar un problema que presenta la herramienta Mega Toolbar, que es propia y desarrollada para el file-hosting Megaupload.

El problema que trato a continuación se da si se cumplen los siguientes requisitos, lo cual no quita que suceda en algún otro caso particular.
  • Navegador Mozilla Firefox (versión 1.5 hasta la 3.5 inclusive)
  • Sistema operativo Windows XP en español
  • Mega Toolbar 3

El que windows este en español no es un error. Capaz que basta con que no este en inglés pero, al no estar seguro, prefiero no darlo por sentado. Así pues puede que este post sea provechoso para la comunidad habla hispana más que nada :p

Advertencia! De aquí en más comienza la explicación del problema y de cómo solucionarlo uno mismo. Para arreglarlo sin entrar en más detalles vaya directamente al último párrafo del post.


En la siguiente imagen se ve la Mega Toolbar como la vemos en firefox, y también aprovecho para señalar no la raiz de este problema pero sí la funcionalidad que esta estrechamente vínculada mismo: el Email.

Mega Toolbar instalada en el browser Mozilla Firefox

Ya con la barra instalada en el sistema y activado el complemento de ésta en Firefox, cada vez que levantamos este último nos muestra esta excepción,

[Exception... "Component returned failure code: 0x80520001
(NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsILocalFile.initWithPath]" nsresult: "0x80520001
(NS_ERROR_FILE_UNRECOGNIZED_PATH)" lccation: "JS frame :: chrome://megaupload/content/xpcom/network.js :: anonymous :: line 38" data: no]

Capaz con una imagen es más fácil de reconocerla

Mensaje de error al levantar el browser Mozilla Firefox

La excepción indica que el error se produce en la línea nro 38 del JavaScript network.js. Si se desea se puede ver el script directamente en el navegador accediendo a la dirección "chrome://megaupload/content/xpcom/network.js" (notar que se escribe chrome y no http).
En la línea 38 veremos la sentencia 'file.initWithPath(path);' en la cual se produce la excepción pero no es el problema. Esta función, según su especificación, debe recibir rutas absolutas.

Durante la carga del complemento de firefox para instanciar la barra, se pretende asociar el ejecutable EmailNotifier.exe a la funcionalidad Email que se muestra en la primer imagen, el cual se ubica en directorios diferentes acorde al idioma de nuestra distribución de windows:
  • español C:\Documents and Settings\All Users\Datos de programa\EmailNotifier
  • inglés C:\Documents and Settings\All Users\Appliaction Data\EmailNotifier


Ahora antes de avanzar más, ubicaremos dicho complemento de firefox para esta barra problemática.
Como habrán notado, en un mismo equipo, cada usuario puede gestionar su preferencias de firefox independientemente de las preferencias de los demás usuarios, en lo que también se incluyen los complementos.
La información de las preferencias y complementos se almacenan en el perfil del usuario. Este se encuentra en el directorio 'C:\Documents and Settings\NOMBRE DE USUARIO\Datos de programa\Mozilla\Firefox\Profiles' (cambiando Datos de programa a Application Data para la versión en inglés). Nuestro profile lo encontraremos en una carpeta con un nombre raro que tiene como postfijo el texto '.default'.
El contenido de esta no lo tocaremos pues lo que nos es relevante esta en la carpeta extensions.
Una vez en la carpeta extensions, veremos carpetas con nombres más que desagradables. Lo que debemos hacer es encontrar la que corresponde a el complemento de la Mega Toolbar, lo cual lograremos buscando aquella que tenga, dentro de una carpeta con nombre chrome, el archivo megaupload.jar.

Para esclarecer donde se debe ubicar el archivo megaupload.jar, pondré como ejemplo el directorio donde se ubica en mi caso;
C:\Documents and Settings\Guillermo\Datos de programa\Mozilla\Firefox\Profiles\luybz4xj.default\extensions\{991A772A-BA13-4c1d-A9EF-F897F31DEC7D}\chrome\megaupload.jar
Horrible, no es verdad?

Cuando accedimos con el navegador al script network.js a través de la dirección chrome://megaupload/.../network.js lo que hicimos fue navegar dentro de éste archivo jar.


Continuando con el problema.
Necesitaremos abrir dicho jar para explorar su contenido (así como abrimos un .zip) utilizando algún compresor que lo soporte.
WinRAR lo hace; para abrirlo debemos ir a Abrir con y seleccionar el programa WinRAR, pusto que sino puede que intente ejecutarlo como a un ejecutable java.
Yo recomiendo utilizar el compresor 7-Zip el cual es free y soporta casi que todo formato.

Una vez abierto debermos extraer el archivo content\xpcom\dir.js para poder editarlo y luego sustituir el que se encuentra en el jar.

Este javascript define funciones que son utilizadas por el complemento para obtener las rutas (absolutas) de varios directorios en nuestro sistema operativo. El que nos es relevante, como se mencionó antes, es el de Datos de programa.
La función encargada de ubicar dicho directorio es 'DTFox.dirUtil.getProgDataDir' como vemos en la línea nro 64 del archivo. La siguiente imagen es una captura del script original.

funcion DTFox.dirUtil.getProgDataDir del javascript dir.js original
No hay que ser un gran conocedor de la programación para darse cuenta que lo que hace es usar la ruta en que se encuentra la carpeta Start Menu, puesto que la carpeta Datos de programa se ubica en el mismo directorio que ésta. Aquí es donde falla el complemento.
La carpeta Start Menu tiene por nombre Menú Inicio para windows en español. Por esto es que no encuentra el directorio y retorna un ruta no absoluta que también daría problema porque diría /Application Data cuando debería ser Datos de programa en español.

A continuación tienen una implementación de dicha función y luego una captura de como quedaría el archivo. Bastara con que sustituyan la original por la que aquí les paso y graben, en el archivo jar, el javascript dir.js ya modificado. También cabe mencionar que cada uno puede y sabrá arreglar dicha función como mejor le parezca, aquí simplemente les hago llegar mi solución la cual he comprobado que funciona.

// Return Program Data directory
DTFox.dirUtil.getProgDataDir = function (){
common = DTFox.dirUtil._getSpecialDir('CmStrt');
if (common.substr(0, common.lastIndexOf("\\Microsoft")) == ''){
if (-1 != common.lastIndexOf("\\Start Menu")) { // encontro start menu (english)
progData = common.substr(0, common.lastIndexOf("\\Start Menu")) + "\\Application Data";
} else if (-1 != common.lastIndexOf("\\Menú Inicio")) { // encontro menu inicio (spanish)
progData = common.substr(0, common.lastIndexOf("\\Menú Inicio")) + "\\Datos de programa";
} else {
alert("The lenguaje of your windows distribution is not well supported by " +
"Megaupload Toolbar, sorry :s\nMegaupload Toolbar no soporta muy " +
"bien que digamos el lenguaje de tu distribución de windows, lo lamento :s");
}
}else{
progData = common.substr(0, common.lastIndexOf("\\Microsoft"));
}
return progData;
}


funcion DTFox.dirUtil.getProgDataDir del javascript dir.js arreglada

Luego de haber hecho todo lo anterior tenemos que reiniciar el complemento de la Mega Toolbar para que tome los cambios. El reiniciar un complemento es simplemente desactivarlo y luego volverlo a activar.
Para esto, en Firefox deben realizar los siguientes pasos:
  1. acceder al menú Herramientas >> Complementos y buscar el complemento Megaupload Toolbar 3.x
  2. seleccionar y desactivar (no desinstalar) el complemento
  3. reiniciar Firefox
  4. acceder nuevamente al menú de Complementos, buscar el complemento Megaupload Toolbar y activarlo
  5. reiniciar Firefox nuevamente

Con esto estaría solucionado.
Igual quiero mencionar que este problema no tiene que ver con el problema de la página que aparece al crear nuevas tabs. Esto un tema de configuración que explicaré como modificarla en el próximo post seguramente.


Claro esta que no voy a esperar que todo el mundo siga el proceso anterior. Lo hice a fin de explicar a quien le interese saber cómo lo solucione.

Para quien busque arreglarlo rápidamente y seguir con otra cosa, aquí debajo dejo un link (haganme saber si lo necesitan pero ya caduco) para que descarguen el archivo megaupload.jar el cual tendrán que simplemente ubicarlo, sustituyendo al original que más arriba mencioné cómo encontrarlo, en un direcotorio similar a este C:\Documents and Settings\nombre_de_usuario\Datos de programa\Mozilla\Firefox\Profiles\nombre_horrible.default\extensions\{991A772A-BA13-4c1d-A9EF-F897F31DEC7D}\chrome\megaupload.jar.

Archivo megaupload.jar arreglado


29 junio 2009

Cómo conseguir diccionarios para Eclipse Spelling con Aspell

Aquí explicaré una forma de conseguir diccionarios para luego incorporarlos al corrector ortográfico de Eclipse.

La configuración de dicho corrector se encuentra en Windows >> Preferences >> General >> Editors >> Text Editors >> Spelling como se muestra en este link donde también se describen brevemente las opciones.

El campo que nos interésa es User defined dictionary puesto que en este deberemos indicar la ruta al archivo diccionario que crearemos más abajo.

Eclipse toma como diccionario a cualquier tipo de archivo que ahí se le indique, del cual identificará las palabras como una secuencia de caracteres separadas por saltos de línea y/o espacios. Por lo tanto bastará con crear un archivo donde se listen todas las palabras del diccionario en cuestión separándolas por espacios y/o saltos de línea.
Hasta el momento no he conseguido encontrar alguna base a partir de la cual armar el listado, pero sí una solución provisoria que pasa por utilizar los diccionarios que usa Aspell.

Aspell es un corrector ortográfico que se puede usar como una aplicación autónoma o incluida en otros programas.

En un sistema linux (Ubuntu en este ejemplo) lo instalamos así,
sudo apt-get install aspell

Y luego debemos instalar los diccionarios de nuestro interés como el español en este ejemplo,
sudo apt-get install aspell-es


Luego, como los diccionarios de aspell no van 100% acorde a lo que requiere el Eclipse, vamos a instalar el mawk o gawk, basta con uno cualquiera. Estos son intérpretes del lenguaje de programación AWK.
AWK es útil para el tratamiento de archivos de datos, recuperación y tratamiento de texto, para lo que le daré uso a continuación.

Para crear un archivo con un diccionario pronto para importar en Eclipse debemos ejecutar lo siguiente:

aspell dump master es | awk -F/ '{print $1}' > dic_es.txt


El último paso consta simplemente de setear la ruta al archivo dic_es.txt en el campo User defined dictionary como se menciono anteriormente.

Nota:
Se debe reiniciar el Eclipse cada vez que se vuelva a setear la ruta del archivo diccionario.
Eclipse hace referencia a dicho archivo y no así lo registra, por lo cual debe prestarse atención al momento de definir su ubicación.



Explicando un poco la última linea:
  • aspell dump master es - Por si sola mostrará el diccionario 'es'. La falg master es la que permite elejir el diccionario a mostrar. Por más información de los comandos Aspell basta con ejecutar en consola 'info aspell'.
  • awk -F/ '{print $1}' - Lo que hace es tomar el diccionario aspell-es procesar cada lína de este delimitando las palabras mediante el signo '/' indicado por la flag -F (para tener más claro el por qué de ésto, sugiero ejecutar solo el comando aspell para ver la salida que genera). Luego lo parseado hasta el caracter delimitador es almacenado en la variable $1 que es impresa con el comando '{print &1}'. Así estas impresiones son almacenadas en el archivo dic_es.txt generando un diccionario limpio para utilizar en Eclipse.


Agregado 09/11/2010 (diccionario expandido):
Aquí tienen el comando para conseguir una lista de palabras mucho más completa que la que se explica previamente en el post. Esta, como podan probar, funciona correctamente y el archivo generado es soportado por el Eclipse pese a que es unas 20 veces más grande que pueden generar con la versión no extendida.
aspell -l es dump master | aspell -l es expand | sed "s/ /\n/g" > dic_es_expandido.txt


Comparando librerías de componentes JSF AJAX - JSFMatrix

JSF AJAX Component Library Feature Matrix es el nombre que lleva la tabla que encontraran en el sitio JSFMatrix, y noten que no digo 'una' sino 'la tabla'.
Como veran, en esta se comparan librerías de componentes JSF incluyendo también comenarios con soluciones y problemas que aplican a éstas además de algunos ejemplos y/o demos. Entre las librerías que se comparan encontramos Tomahawk y Trinidad de Apache, ICEfaces, RichFaces de JBoss, Woodstock de Glassfish, entre otras.


Para aquel que no sepa, JSF (Java Server Faces) es un framework de desarrollo basado en el patrón MVC (Modelo Vista Controlador) que busca simplificarnos la vida al desarrollar interfaces web de usuario en aplicaciones Java EE (Java Enterprise Edition).

A continuación dejo una serie de links, para quien quiera introducirse en el tema, empezando por el sitio oficial de JSF.


Nro de visita Cantidad de visitas recibidas