jueves, 12 de noviembre de 2015

ZinjaI y PSeInt "portables" (para llevar)

Pongo "portables" entre comillas porque me voy a referir a una definición de "portable" que no me gusta. En mis tiempos (como diría el abuelo Simpson) "portable" significaba que podía ejecutarse en diferentes plataformas (GNU/Linux, Windows, Mac OSX, Android, etc). En algún momento el mundo cambió y para cuando yo me di cuenta en Internet se hablaba de "portable" como sinónimo de "no tenés que instalarlo" o "te copias la carpeta en el pendrive y lo corrés desde ahí". Bien, les vengo a contar cómo conseguir esa "portabilidad" [trucha] para ZinjaI y PSeInt. No es mucho trabajo, pero hay un detalle que no estaba documentado y que viene muy bien para el caso. Por si alguno llegó pensando en la otra "portabilidad" (la buena :), de esa ya había hablado en este post.

Ok, saliendo de la discusión casi inútil de la terminología, que me guste o no se ha ampliado, vamos a ver qué necesito para poder llevarme ZinjaI o PSeInt en el pendrive y no tener que instalarlo para usarlo. A partir de ahora me voy a referir siempre a PSeInt en Windows como ejemplo, pero todo lo que diga aplica también para ZinjaI y también en GNU/Linux.

Lo primero que se necesita es: nada. Si instalan PSeInt, y se copian la carpeta de instalación al pendrive, listo! El instalador no hace nada más que crear esa carpeta y asociar las extensiones. No hay archivos importantes (como dlls y esas cosas) que el instalador ponga en el sistema, ya que no hay dependencias (está todo en el exe, enlazado estático). Tampoco hay cambios en el registro ni nada parecido, más allá de la asociación de la extensión, adorno totalmente prescindible para la ejecución. Entonces, no se requiere nada. Copiar la carpeta equivale a una instalación, y la carpeta se puede mover a donde se les ocurra y no pasa nada. Para usarlo, doble click en wxPSeInt.exe, y ya.


Peeeero... Cada vez que en una PC inserten el pendrive y ejecuten desde ahí PSeInt, PSeInt va a pensar que es la primera vez que se ejecuta, y entonces va a pedir que configuremos los accesos, el perfil, y esas cosas. Es un poco molesto. Más aún, va a crear en el home del usuario la carpeta donde va a guardar la configuración y los temporales. Y esa carpeta le va a quedar al usuario cuando nos vallamos. Así que, si bien se puede ejecutar sin problemas, hay dos molestias importantes. Primero, que en cada nueva PC en que lo ejecutamos tenemos que volver a configurar todo. En ZinjaI esto puede implicar mucho más: plantillas, autocompletado, reglas de indentado, coloreado, barras de herramientas, atajos de teclado, mil cosas. Y segundo, que deja algo de "basura" en el sistema luego de la ejecución.

Ambos problemas se solucionan con el mismo truco, que casi nadie conoce porque (que yo sepa o recuerde) no está documentado. Esto es así: normalmente PSeInt busca su configuración en $HOME/.pseint/config ($HOME puede ser, por ejemplo, /home/zaskar en GNU/Linux, o C:\Users\Zaskar en Windows); pero esto solo lo hace si no encuentra primero un archivo "config.here" en su directorio de instalación. Si creamos ese archivo en blanco (con el block de notas, o con cualquier cosa, no importa), PSeInt va a empezar a usar ese archivo. Entonces, si ejecutamos con ese archivo y configuramos algo, esa configuración quedará disponible para la próxima ejecución, aunque no sea en la misma PC o con el mismo usuario. Y con esto resolvemos el problema de la configuración, y las preguntas molestas de la primer ejecución.

Queda el problema de los archivos temporales, que todavía van a parar al home, en una carpeta "pseint" ahí dentro. Y hasta podría generar errores, porque en el config.here aparecerá un directorio para un home que seguramente no deba ser el mismo en otra PC. La solución también es simple, ya que estas rutas figuran en el archivo de configuración, y pueden ser relativas al directorio del programa (desde donde se ejecuta el PSeInt). Entonces, basta con abrir el archivo (es un archivo de texto, pueden usar el block de notas), buscar esas rutas y cambiarlas. Concretamente en PSeInt, es una linea que dice "temp_dir=C:\Users\zaskar\pseint". Creen una carpeta "tmp" en la carpeta de PSeInt y cambien esa linea por "temp_dir=tmp", y listo! Ahora los temporales van a parar a esa carpeta tmp, y ya no necesitamos guardar nada en el home del usuario. La carpeta "pseint" en el home se crea igual (voy a corregir eso en la próxima versión), pero adentro no va a tener nada. Todos los temporales y auxiliares van a estar en "tmp".

Entonces, repasando: 1) instalar PSeInt, 2) copiar/mover la carpeta "pseint" desde "C:\Archivos de programa (x86)" (o de donde sea que lo instalaron) al pendrive 3) crear el archivo config.here y la subcarpeta tmp, y 4) cambiar/agregar la linea "temp_dir=tmp".

En ZinjaI, el config es bastante más largo, y además del temp_dir, van a encontrar otros campos que apuntan al home, como el de el archivo de autocódigos y la carpeta de proyectos por defecto, pero todos se pueden cambiar por rutas relativas a la carpeta del ejecutable de ZinjaI. Si lo prueban justo ahora, atajos y barras de herramientas van a seguir en el home, también voy a corregir eso para la próxima.

No le había dado mucho bolilla a esta funcionalidad porque nadie la usaba (nadie la conocía). Yo no la puse para esto, sino para un caso en que quería evitar que la configuración valla a parar a una partición freezada. Pero ya me han preguntado más de una vez por este tema, así que les cuento el truco, y me comprometo a corregir los detalles que quedan para la próxima release. Espero que a alguno le resulte útil, y que cuando quieran una versión "portable" usen la versión oficial, y no algún reempaquetado no oficial de vaya uno a saber quién y con qué "agregados" que pueden llegar a encontrar en Taringa, Softonic, o cualquier otro lado que no sea SourceForge.

 Actualización importante: desde hace algunas versiones en zinjai cambió el mecanismo y ahora "config.here" debe ser una carpeta y no un archivo.

2 comentarios:

  1. hola, estoy haciendo un curso de programacion, y en algunas maquinas no dejan instalar nada.... esto nos puede servir hasta que autoricen la instalacion. gracias (programa 111mil)

    ResponderEliminar
  2. Que el mismo programa pueda correr tanto en Linux como en Windows como en Android se llama multiplataforma. Pero tiene que ser versiones distintas, porque el sistema de archivos en cada uno de los sitemas operativos mencionados es diferente.

    ResponderEliminar