kReiSSy (se pronuncia como la palabra "crazy" del inglés) es uno de mis proyectos más ambiciosos en este momento (tengo uno mayor, pero está en el freezer; ya hablaré de él). en resumen, puedo decir que kReiSSy es un lector de feeds (rss, atom, quéno[1]) alimentado a gofios, o como dicen ahora, en esteroides. otra descripción puede ser: es un concentrador de información externa con categorzación basada en tags.

¿qué features lo hacen tan pulenta? veamos:

  • tagging[2] de posts (eso lo hace cualquiera).
  • almacenamiento local de posts (en una base de datos, no borra ninguno).
  • browser integrado. acá empecé a irme al carajo.
  • tagging de páginas "leídas por ahí", que las convierte en first class citizens del programa.

¿qué significan estos dos últimos fatures? que puedo estar leyendo un post, seguir un link, de ahí a otro, y otro, todo en el browser integrado, y así hasta que encuentro otra página que nada que ver por dónde empecé, y entonces puedo tagear dicha página. esto hace dos cosas automáticas: guarda la página en la base de datos como si fuera un post más, y me permite luego buscar dicha página por tag.

ahora, me fui de boca un poco al decir "browser integrado" (esta es la sección "proyect status"). por ahora el browser nos permite ir hacia adelante, siguiendo links, pero no para atrás. es decir, le faltan todos los botones de navegación. también se podría marcar un post como "leer después", pero no hay código que lo haga. el filtrado por varios feeds o varios tags está roto/no anda (esto se debe o a un bug en SQLAlchemy o a mi inoperancia). aún no graba bien su sesión, cosa de volver en el mismo estado en que lo dejamos. y hace un par de chanchadas con los archivos, asume un par de paths y negradas así.

¿y en qué está hecha semejante bestia? python, obvio, mi lenguaje de cabecera desde hace unos añitos ya. pero no python puro, sino con varios agregados.

uno ya lo mencioné, SQLAlchemy, un ORM bastante potente, pues no fuerza muchas cosas. para usarlo como un ORM clásico (una clase por tabla) hay que hacer un par de giladas, pero nada grave. y permite hacer queries con SQL a lo macho, aunque no me llevo muy bien con eso. sqlite por debajo.

feedparser y beautifulsoup, un lector de múltiples tipos de feeds, y un html scrapper.

y la vedette de todos, y el motivo por el que empecé este proyecto: PyKDE. soy un usuario y fanático de kde desde que usé un redhat5.2 allá por el '98 o así. conozco bastante la infraestructura que hay por debajo, he leído varias veces cachos de código en busca de solucionar algún bug que me mordió, algunas veces hasta logré repararlo y todo. si bien su look no es muy bonito, la infraestructura que hay debajo es impresionante.

a tal punto que hacer este programa me resultó muy sencillo hasta ahora, pues sólo me concentré en mi funcionalidad. la parte de mostrado de html u otro tipo de archivos se lo dejé a KDE:

    mime= KMimeType.findByURL(url, 0, False, False)
    mimeType= mime.name ()
    if mimeType=='application/octet-stream':
        mimeType= KIO.NetAccess.mimetype (url, self);
    else:
    # asumo que es html
        mimeType= "text/html"

    ptr= KTrader.self().query(mimeType, "'KParts/ReadOnlyPart' in <span class="createlink">ServiceTypes</span>")[0]
    part= createReadOnlyPart (ptr.library (), tab, ptr.name ())

esto hace la fantástica magia de fijarse qué MimeType es el link (dado por url) y luego KTrader me entrega un KPart que sabe mostrar ese MimeType. simplemente la embebo en un tab y ya. juzguen ustedes.

ok, suficiente por ahora. ya estaré hablando de éste y otros proyectos.


[1] no es una traducción literal del "whatnot" en inglés, sino una reimplementación en castellano de la misma idea.

[2] uso muchos términos en inglés que ni me gasto en traducir. deal with it.

kreissy python pykde

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy

(A pedido de fbatista, trataré de poner mayúsculas al empezar las oraciones.)

Estuve todo el finde procrastinando algo que ya era necesario hacer: hacer releases de mis proyectitos. En realidad, estos releases son un paso más en el trabajo hormiga que ya venía haciendo: poner tracs y publicar info sobre ellos. Fue como poner el plato y luego las semillas para correcaminos. También la trampa, en forma de bugtrackers y pedidos de ayuda.

Y el último paso consiste en poner los carteles: anunciar los releases. En este moemnto estoy usando tres canales de anuncios (cuatro con éste): freshmeat, appsy y el Python Package Index.

Para hacer el anuncio en este último usé las distutils. Sólo tuve que poner info como la que pueden ver en la versión actual del setup.py de kreissy. Luego uno corre python setup.py register, quien pide user y pass de pypi, y yastá! Esta info también la uso para crear los .tar.gz con python setup.py sdist. Pero estas cosas ya las sabían, ¿no?

Para psync yo usaba también packer (WARN: colores horripilantes tras ese link) para crear paquetes para distintas distros, pero hace un año que no lo usaba y parece que ya no funciona como antes bajo Debian Sid. Una lástima.

Así que ahí tienen: kreissy 0.2.0 y psync 0.4.0.

kreissy psync python

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy

hoy a pedido de humitos puse acceso remoto por svn al repo donde estoy desarrollando kreissy. si bien hice un par de releases en su página en berlios (que no es su página oficial; pienso poner un trac en casa para eso), no andan, y actualemnte lo mejor es usar el branch en el que estoy desarrollando.

así que msin mas introducción, les dejo un comando muy especial:

$ svn co svn://grulicueva.homelinux.net/home/mdione/src/projects/kreissy/svn/branches/multi-feed-tag kreissy

necesita SQLalchemy, BeautifulSoup, FeedParser, PyKDE y sqlite3. una vez bajado, correr make. correr siempre (por ahora) del directorio donde lo bajaron. creo que es todo. ya pondré el trac a andar y podré recibir mejor sugerencias, comentarios, etc.

kreissy python

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy

En 20 minutos parto para las playas del sur. Dicen que no vuelvo antes del 20 pero sí antes del 23. La última cosa que hice antes de calzar la mochila fué sacar kreissy 0.2.2. Que lo disfruten y nos vemos en dos semanas.

kreissy

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy

esta noche me voy a dedicar rápidamente a poner un trac para kreissy. la idea final es que el URL anterior sea la páfina oficial del proyecto, pero que no necesariamente sea el URL final; puede que haya un redirect al medio. ya explicaré porqué.

lo primero es crear un trac-env para eso:

mdione@skid:~/src/projects/kreissy$ trac-admin trac initenv kReiSSy sqlite:db/trac.db svn /home/mdione/src/projects/kreissy/svn /usr/share/trac/templates

también se puede con:

mdione@skid:~/src/projects/kreissy$ trac-admin trac

a secas, ejecutar el comando initenv y responder las preguntas, que en realidad son, en ese orden, los parámetro sde allá arriba.

el punto complicado es enganchar esto con el apache. hay varios métodos: usándolo como un cgi común y coriente, con FastCGI, con mod_python y con mod_wsgi. hoy me siento valiente así que usaría mod_wsgi, pero como creo que en algún momento esto puede correr en un debian stable, me voy al más seguro mod_python.

la documentación de trac es muy explícita con respecto a los pasos a seguir, así que no pienso repetirlos acá. sí voy a tratar de explicar cómo lo adapté a mi situación.

resultó ser más sencillo que antes. la última que lo probé, hará unas cuantas versiones de trac, me quedó un chancullo muy feo. pero ahora sólo bastó este archivo .htaccess en el directorio en mi public_html:

<span class="createlink">SetHandler</span> mod_python
<span class="createlink">PythonHandler</span> trac.web.modpython_frontend
<span class="createlink">PythonOption</span> <span class="createlink">TracEnv</span> /home/mdione/src/projects/kreissy/trac
<span class="createlink">PythonOption</span> <span class="createlink">TracUriRoot</span> /~mdione/projects/kreissy

y ya tengo el trac andando! ftatico! ahora a llenar contendo y eso. pero eso mañana...

sysadmin trac kreissy [[!tagling tags/apache]]

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy

una de las cosas que hago al menos una vez a la semana es actualizar mi Debian Sid. para esto uso dselect (ya mencioné mi relación de amistad con él[1]), quien desde tiempos inmemoriables sabe mencionar qué paquetes nuevos hay (y en sid hay varios por semana).

la cuestión que hoy me llamó mucho la atención python-avc. he aquí sus descripción:

AVC, the Application View Controller is a multiplatform, fully automatic, live connection among the values displayed by graphical interface widgets and application variables. AVC supports in a uniform way the most popular widget toolkits: GTK, Qt3, Qt4, Tk. The connections are autogenerated by looking for matching names between widget names and variable names.

en estos días voy a tratar de darle una probada en kreissy.

python kreissy


[1] «somos solo amigos» [sic].

Posted Wed 27 Jan 2010 11:55:55 PM CET Tags: tags/kreissy