Resumiendo días

20 12 2007

Ultimamente no tengo tiempo para nada, asique no me estaba sentando a escribir algún que otro post sobre qué estoy haciendo, o investigando. Esto se debe a que estuve rindiendo una materia de la facultad, dando clases particulares de Python a unos chichos de secundaria, trabajando para Diego (un amigo), peleando con la generación de códigos de barras y demás.

Konqueror

Hace un tiempo me dí cuenta que además de no ser compatible con Gmail, este maravilloso navegador, gestor de archivos y demás, tampoco es compatible con WordPress en su totalidad. No me deja escribir / editar mis post de la forma “What you see is what you get” (Lo que ves es lo que es obtienes -creo que se dice así-), como a los post los venía escribiendo con el Kate y reStructuredText a esto no lo había notado.

Swiftfox

Hace un par de días se me actualizó el Swiftfox a la versión 3.0b3pre; con lo que noté que anda un poco más rápido que antes y dicen que consume menos memoria RAM que antes. A decir verdad, no sé cuanto consumía antes, sé que era mucha, pero no recuerdo cuanto… Ahora lo tengo con 6 solapas abiertas y consume algo así como 71124 kBytes. No me parece poco.

También noté, que puedo pegar con el botón del medio del mouse (como en cualquier aplicación de linux) lo que tengo en el portapapeles de la última selección en la ventana de edición del post. Esto antes no se podía porque aparecía las flechitas de scroll.

Otra cosa, todos los plugins que tenía instalados no son compatibles con esta nueva versión, incluso quise instalar el diccionario Spanish (Argentina) y me dijo que no es compatible con esta versión. Lo cual es bastante malo.

Está bien, estoy de acuerdo con que todavía no es la versión final, pero… ¿Porqué Swiftfox se me actualizó a una versión que no es la final y tiene algunos problemas?

Código de barras

Para el trabajo que estoy haciendo con Diego, necesitábamos de alguna manera generar el código de barra de los productos del negocio. Buscando en Google, preguntando en la lista de PyAr y por otros lados también, caí en una receta de Python la cuál genera el código EAN que queramos. Este tiene algunas limitaciones a mi entender: no puedo generar códigos con letras y como necesitaba esto, lo descarté. Igualmente me fijé como estaba hecho. Levantaba una letra que tenía internamente codificada y luego utilizaba PIL (Python Image Library) para generar un .gif con el código.

Funciona muy bien. Otra restricción que tiene es que el código debe ser de 12 digitos, o 13 si este trae el bit de comprobación, el cuál mediante un algoritmo indica si el código está bien formado o no. Y como los códigos que necesitaba era de una cantidad variable de dígitos tampoco me servía…

Preguntando bastante en la lista de PyAr (se deben acordar de algunos familiares míos :) ) logré hacer el código que realmente necesitaba: escribir cualquier cantidad de caracteres y de cualquier tipo y obtener un código de barra. Lo que hice está muy orientado por Facundo quién me pasó un ejemplo de cómo usar la Font libre de Code39 con PIL, que no tenía mucha idea.

Probando, investigando, reinventando un poco la rueda, peleando con el lector de códigos de barras (que no me quizo agarrar el teclado y el lector al mismo tiempo) llegué a la versión del código que funciona. Esto es, al programa le paso el código que quiero que genere y me guarda en el directorio actual un PNG con ese código. Ejemplo de uso:

[manuel] [~]$ python barras.py "*ABC123*"
*ABC123*
[manuel] [~]$

Ahora en *ABC123*.png tengo el código listo para imprimir. También hice que abajo del código de barras aparezca de forma legible para los humanos el código por si el lector no lo lee. Para esto utilicé una fuente cualquiera, que después cambiaré por una un poco más linda.

Curso de Python

Ayer miércoles, fue la tercer clase que tube con los chicos del curso de Python. Yo les había dado una guía de ejercicios para que hagan en sus casas y un trabajo práctico también. Hacía una semana más o menos que no los veía, y no hicieron casi nada. Sólo 5 ejercicios. Asique les pedí que me expliquen cómo lo habían hecho a algunos y cuales eran las dudas que tenían con respecto a los que no puedieron hacer. La verdad que la hora se pasó volando y alcanzamos a hacer bastante poco, por lo que les dije que si querían se podían quedar un poco más haciendo los ejercicios que les había dado y yo mientras programaba un poco

Me hicieron algunas preguntas, y como estábamos en horario fuera de la clase, los obligué a buscar en Google y a preguntar en el canal de PyAr :D .Entraron, saludaron, preguntaron, y me dijeron que había muy buena onda en ese lugar y que sabían una cantidad los que estában ahí. Espero que se copen con Python y sigan estudiando, que les halla servido lo que intenté enseñarles y aprueben la materia.

Facultad

El martes pasado rendí por segunda vez Sistemas y Organizaciones, una materia de primer año de mi facultad. Con la cual tuve problemas durante los cuatro años que hace que estoy estudiando. Aunque esa materia es una lotería, y a decir verdad, no importa cuanto sepas, sino si pegás un examen en el cual estén un poco menos soretes. El exámen es multiplechoice, son 50 preguntas, las que contestás mal restan, y algunas otras cositas más.

Cuando me dijeron que era multiplechoice, casi que me quedé tranquilo, porque no podía ser muy complicado. Pero bueno, el tema es que no es difícil el exámen, tenés que estar bien concentrado y no dejar llevarte por lo que está en lo que vos estudiaste y sabés que es así. Sino que tenés que pensar como piensan ellos, ponerte en el lado de ellos, pensar como el profesor: “La respuesta verdadera para esta pregunta es la b), pero la mas-verdadera es la d)”; entonces tenés que poner la d).

¿Cómo puede ser esto? No sé, pero en casi todas las respuestas hay dos que son verdaderas, según ellos hay una que es más verdadera. Bueno, eso me dijeron al menos hace dos semanas, la primera vez que la rendía y saqué un 2 con 32 correctas, sobre 35 que se necesita para aprobar. Osea tenía un 64% aprobado del exámen, pero esta matería única en la facultad y en su género se aprueba con 70%.

La segunda vez que la rendí se puede decir que entendí este concepto de mas-verdadera. Si te fijás bien en cada una de las respuestas hay dos que son verdaderas, pero hay una que está un poco más completa la respuesta. Igualmente dicen el concepto de formas totalmente diferentes, y en muchas preguntas me hubiese gustado tener un diccionario ahí.

Además juegan con los nervios de uno porque hacen una pregunta o afirmación y ponen “marque la correcta” o “marque la incorrecta“. Imaginate a la pregunta número 40, pensando cuál es la más verdadera y que sé yo que otra cosa (esas cosas que uno piensa cuando está un final: “Que lindo sería estar en casa con el aire”), sinceramente llega un punto en el que te confunden. Encima también juegan con la doble negación, un ejemplo sencillo de esto: “¿Cuáles de los siguientes conjuntos de partes no es un sistema? (indique lo incorrecto)”. Más de uno caemos en estas trampas…

Cumpleaños

Ayer fue mi cumpleaños, aunque no parezca tengo 22 añitos recién. Si ya sé, estoy de vuelta, pero bueno algún día tendré plata y me pondré botox :) . El sábado no juntamos en mi casa con algunos amigos y amigas a comer unas hamburguesas y tomar algo, después salimos. A ver que tal se pone esto; el año pasado me llovió de una forma increible.

Hoy es el cumple de Juanjo, un amigo de la facultad, al cual ya estoy llegando tarde… Asique me voy para allá.





KeDElicioso

27 11 2007

Aunque le falta un poco de azúcar todavía, puedo decir que hice un plug-out para el Konqueror y los marcadores de del.icio.us. Es un plug-out porque todavía no lo pude meter adentro del navegador. Para esto se necesita tener acceso a la barra lateral que se llama KonqSideBar y está bastante verde todavía en PyKDE, de hecho creo que no está :) .

Estoy convencido que quiero seguir usando el Konqueror, y no tener estos marcadores que sí tenía en Firefox, me impidan seguir usándolo. Además tenía ganas de empezar a ver un poco de HTTP-Auth y demás cosas en Python, de las cuales no tenía idea.

Asique me puse a investigar un par de días. Bajé el plugin que yo ya conocía y me puse a ver cómo funcionaba. Descubrí varias cosas ahí: el plugin para el Konqueror no era más que un archivo externo y que no tenía nada que ver con este. Estaba hecho Perl y se comunicaba con el navegador por medio de DCOP (una de las tantas grandes cosas que tiene KDE). DCOP, rápidamente, es una forma de comunicarse con los programas que están en ejecución, por ejemplo al Konqueror le puedo preguntar que url tiene abierta, cerrar una sesión de Kopete, etc…

Por otro lado, también descubrí que había una API de del.icio.us que explicaba cómo se debía manejar el servicio, cómo eran las consultas y como eran las respuestas. Qué te convenía hacer y demás. Estaba muy bien explicado, la idea es abrir distintas urls con algunos parámetros que se les pasan y esta te devuelve un XML con los Post, Tags y demás que se necesita.

Lo primero que hice fue ver cómo manejaba esto el plugin de Perl, pero lo hacía bastante feo, o por lo menos yo no lo entendía (todavía no sabía que existía esta API). Después conseguí un programita en Python que hacía algo similar a lo que yo quería pero no funcionaba :P . Miré el código y ahí recién descubrí que había una API.

El código no funcionaba porque tenía las direcciones de las páginas en cualquiera y le pasaba cualquier cosa a estas direcciones también. Después leí que la API puede cambiar sin ningún tipo de aviso, sin respetar las versiones anteriores y de la forma que se le dé la gana. En este momento me pregunté: ¿Cuánto tiempo puede durar mi programa funcionando? :D

Me puse a jugar un rato con la API, fue un rato bastante corto, ya que te limitan las consultas a la misma para no sobrecargar el servidor, hice 3 boludeces y se me terminó la joda. Una cagada bah! Asique seguía haciendo cosas por otro lado, y cuando pasaba cierto tiempo volvía a intentar y probar las funciones que había escrito y suponía que funcionarían.

Me filtraron dos veces más y me cansé, me dí cuenta que esto así no podía ser porque si abrías dos veces el navegador y este bajaba los marcadores a la segunda vez no los ibas a poder ver porque estabas filtrado. Además de tener que bajar todos los marcadores cada vez que entrabas al navegador con su correspondiente consumo de ancho de banda.

Me puse a buscar la forma de mejorar esto y me bajé el archivo XML a disco y lo trabajaba desde ahí. Aunque esto era un poco feo, tenía que hacer consultas como: ¿Cuáles son todos los marcadores que tienen tal etiqueta?, ¿Qué marcadores tienen la palabra “linux”?, etc… Asique lo pensé dos segundos y me hice una base de datos con SQLObject que algo sabía de cuando estudié TurboGears y era una boludés.

El problema era que si agregabas un marcador desde otra computadora, este actualizaba los marcadores de la página, pero no la base de datos. Investigué un poco más y encontré la función update en la API de del.icio.us, que indica cuándo fue la última vez que el usuario hizo una modificación. Asique comparando esta con la última fecha de modificación de mi base de datos queda chanta. Pero… ¿cómo saber la última modificación de la base de datos? Aja! Te la encargo. Yo hice una tabla en la que mantengo esa fecha por el momento. Una negrada bah!

Por último empecé a hacer la GUI con PyKDE, primero por el diálogo de Agregar un Marcador, ya que supuestamente lo otro lo iba a meter en el Konqueror (que todavía no he podido :( ), probé esto y funcionaba perfecto. Asique seguí con la parte del filtrado de marcadores, etiquetas y las consultas a la base de datos para estas.

Terminó saliendo algo bastante bueno, por lo menos para mi gusto, y si lo puedo integrar completamente con el Konqueror me va a ser algo muy útil.

Al principio dije que le falta un poco de azúcar todavía porque el sistema de DCOP le asigna un nombre a cada uno de los programas que están en ejecución y soportan este sistema. Pero si se puede tener más de una aplicación del mismo programa, al nombre de esta le suma un número, que este es su PID. Al no estar integrado con Konqueror este número no lo puedo saber ya que la forma sería haciendo un os.getpid() pero como lo estoy corriendo fuera del navegador me devuelve otro número. Asique por el momento esto hay que ponerlo a mano.

Además no hice alguna forma de ingresar el nombre de usuario y la contraseña todavía, porque no he tenido ganas. Hice un archivo config.py en el cuál se pueden poner estos datos. Total, como nadie lo va a usar no me calenté mucho, y si alguién lo quiere probar y no puede me pregunta y le doy una mano :)

El código está lo que se dice horrible, tengo pensado cambiarlo todo para estructurarlo de alguna forma mejor, como no pensaba hacer nada de lo que hice fue saliendo así de feo :D

Hice una página para este programa en la que explico algunas cosas más, hay screenshots, se puede descargar el código, etc:

http://grulicueva.homelinux.net/~humitos/KeDElicioso/





¿Un escritorio? KDE. - Primera parte: Konqueror

23 11 2007

konqueror

Sin dudarlo esa es mi respuesta. Hace algunas semanas, quizás un mes, no tengo idea. Instalé Ubuntu en mi otra pc por medio de la red. Le puse esta distro de linux (con GNOME) ya que la pobre tiene algunos problemas serios y es un poco lenta.

No viene mucho al caso tampoco. El punto importante en esto es que traté varias veces de utilizar este entorno desde la otra pc, pero no pude adaptarme todavía. GNOME tiene muchas cosas que no me gustan, y algunas pocas que sí. Me siento mucho más cómodo con KDE por varios motivos.

Cuando quise configurar la pc con Ubuntu, no me quedaba otra que usar GNOME, además esa era la idea. Varias veces intenté cambiarme, no sé bien porqué, supongo que por
una cuestión de rendimiendo. Hay muchos que dicen que KDE es mucho más pesado que GNOME, quizás sea verdad.

Lo primero que noté, es que la mayoría de los diálogos de GNOME no tienen el botón cancelar, como para deshacer los cambios. Un ejemplo concreto. Si hacemos botón derecho en el escritorio (esto es bien Windows) como para cambiar el fondo de pantalla del escritorio (no digo el camino correcto porque no lo sé). Elegimos uno, al azar, que sé yo, y si luego queríamos dejar la opción como estaba, no podemos, ya que de la única forma que podemos salir es aceptando.

Esto lo confirmo cuando en mi máquina con KDE instalo el programa Día (para hacer diagramas), en el que noté exactamente los mismo. No lo estoy cuestionando, ni diciendo si esto es mejor o peor. Gustos son gustos. A mí particularme esto por ejemplo no me gusta.

En estos últimos días aprendí muchas cosas sobre Konqueror, el navegador web, explorador de archivos, lector de páginas de manuales, y un gigante etcétera, por defecto del KDE. Estuvimos con leo_rockway, un flaco que conocí en el canal de irc de ubuntu argentina (#ubuntu-ar en freenode.net) y además un beta tester oficial de todos mis programas :P .

“El que busca siempre encuentra”, dicen. Hace un tiempo, yo le había comentado a Leo que quería usar los bookmarks de del.icio.us en el Konqueror y no podía. Esto era uno de los motivos por los cuales no dejaba el Swiftfox.

Pasó un largo tiempo, instalé miles de plugins para el Swiftfox, y encima me acostumbré a ellos, mouse gestures, diccionario español para la corrección ortográfico y demás. Después de este tiempo y un poco más, recibo un mail de Leo que decía que había encontrado un plugin para el Konqueror que era para los bookmarks de del.icio.us. Lo probé, pero no me funcionó, tampoco le dí mucha bola porque además tenía los mouse gestures y sabía que el Konqueror eso no lo tenía, asique fue.

Sigió pasando el tiempo, y cada vez necesitaba hacer más y más cosas. Y siempre le volvía a dar una oportunidad más al Konqueror (de hecho, me gusta mucho más que cualquier otro navegador, por eso seguía insistiendo) porque descubría cosas nuevas. En este momento descubrí que presionando la tecla Control, Konqueror te muestra sobre los links unas letras y presionando una de las letras que muestra se hace “click” en ese hipervínculo. Buenísimo, a veces no queremos usar el mouse y esto para esos casos viene petacular!

Seguía pasando el tiempo, y yo al Konqueror no le daba bola, aunque le seguía encontrando cosas que lo hacían cada vez mejor. ¡Yo quería mis bookmarks y mis mouse gestures! Leyendo el blog de nercof, en un artículo que nada que ver con el Konqueror, él usa GNOME y Firefox, asique ni mú. Descubrí que presionando Control+Shift+Arriba o Abajo empieza a desplazarse automáticamente muy sutilmente para la dirección que presionamos. Si presionamos nuevamente aumenta la velocidad. Puede ser útil para leer un texto largo, a una velocidad relativamente baja. Yo no me acostrumbré todavía, pero lo probé y está bueno.

Tampoco hizo que me cambie de navegador, pero al menos me hizo darle otra oportunidad y saber que siempre estaba ahí mi navegador esperándome.

Desde que tengo hosting en el servidor nuevo, necesito acceder varias veces por ssh. A esto lo hacía por medio de una consola o con el mc. Pero para copiar ficheros era bastante embolante usar la consola asique me manejaba con el mc para esto.

Un día en el canal de PyAr escucho que StyXman menciona algo así como ¿Humitos estás conectado con el Konqueror por fish? A lo que respondí que no, que estaba usando el mc. Osea, ni idea de lo que me estaba hablando. Leí algo y ví que se podía acceder del mismo estilo que el mc pero con el Konqueror. Instalando un paquete (kfish en Ubuntu), poniendo en la barra de direcciones:

fish://usuario@host/carpeta/a/acceder

Podemos ver en el Konqueror los archivos que están en esa máquina como si estuvieran en la nuestra, y así poder utilizar cualquier programa que tengamos instalado en nuestra máquina con los archivos que se encuentran en la otra. Por ejemplo el Kate, ya no más Vim :) .

Además me hice un bookmark de esto, así no tengo que escribir más la dirección de la máquina a las que quiero acceder. Por lo que esto me hizo dejar otra vez el Vim, como así también el mc.

Otra cosa, si pongo un cd de audio y lo exploro con el Konqueror, se pueden ver muchas carpetas, con los nombres: Ogg, Mp3, Wav, etc… Cada una contiene todos los temas del disco en el formato especificado por la carpeta. Osea arrastrando esa carpeta a una de nuestro disco, el Konqueror automágicamente nos convierte los temas al formato especificado. ¡Genial!

También se pueden leer los man pages de los comandos desde el Konqueror poniendo en la barra de direcciones este comando. Con las comodidaes que esto trae, como agrandar la letra, y verlo con un formato un poco más amigable que desde la consola:

man:/comando

¿Ya está? No para nada. El Konqueror tiene mucho más. Si quiero pedirle la ayuda de un programa, hago:

help:/programa

Se pueden habilitar los “Accesos rápidos para web” desde las configuraciones del Konqueror, para por ejemplo buscar un montón de cosas en la web. Algunos ejemplos pueden ser, poniendo gg:humitos, busco humitos en Google, qt3:qtimer busca qtimer en la documentación de Qt, en2es:hello busca hello en wordreference… ¿Qué más querés?

Y por último, creo que solo porque me cansé de escribir, y no porque Konqueror termine acá. Mi amigaso leo_rockway hoy me comentó que pudo hacer funcionar los mouse gestures en Konqueror. Incluso este los trae por defecto, no es un plugins aparte ni nada, pero no vienen activados. Para activarlos hay que ir a kcontrol, luego regional y accesibilidad, introducir acciones, preferencias generales, importar nuevas acciones y colocar la dirección:

/usr/share/apps/khotkeys/konqueror_gestures_kde321.khotkeys

¡LISTO! Tengo los gestures que tanto estaba buscando, y además certificado por leo_rockway. También tiene sesiones este navegador, está integrado con el gestor de descargas KGet, tiene soporte para la cartera de KDE, y miles cosas más.

Obviamente, también tiene cosas malas, pero muy pocas. Yo hasta el momento le encontré sólo una: No funciona del todo bien Gmail, me marca como que tiene errores la página, el navegador. Otra cosa que no me gusta, no digo que sea mala esta, pero a mí no me gusta. El plugin que hasta el momento encontré para del.icio.us, no me gusta para ná.

¿Todavía no usás Konqueror? ¿Qué esperás?

PD: Este post lo escribí de una forma rara, pero muy cómoda: reStructuredText, es simple, fácil, rápido.. :D