sábado, agosto 30, 2008

Directorio de programación

En python.es surgió la idea de crear un directorio de blogs sobre python.
No había compartido nunca el enlace enl a lista, pero bueno... la verdad es que ya tengo unos cuantos contenidos en python que pueden ser interesantes.
El link irá a parar a directorioprogramacion.blogspot.com.

Habrá que echarle un ojo a ver como crece su contenido.. .

jueves, agosto 28, 2008

lxml

Ya he mentado en algun post anterior este parser de xml/html, pero no había tenido ocasión de probarlo.
En el proyecto ahora tenemos que manejar unos xml y hasta la fecha habíamos usado libxml2... Era el momento de cambiar... y la verdad es que está muy bien. Y bien documentado.

Ahí van unos enlaces:
  • la web. Que incluye un enlace a el manual (pdf). En formato html se acompaña con el código fuente. En la propia web hay más documentación en formato html, incluyendo el api.
  • Otro tutorial.
  • Y por supuesto tiene lista de correo [archivo].

jueves, agosto 21, 2008

Shutdown programado en windows

Hoy he aprendido un comando superutil:

shutdown -s -t [tiempo]

Te sirve para programar un shutdown en windows. Es muy util, imaginaros que habeis dejado descargandose algo y os quereis ir a la cama...
Con /? podeis ver el resto de opciones.

HTTrack

Hacía mucho que no usaba un Web Spider (o crawler). Y aprovechando que para el proyecto estamos usado HTTrack, lo he probado para un uso personal.

La verdad... esta muy bien. El único pero que le hemos visto es que no puedes obtener un mapeo entre las direcciones web, y las locales.

Se puede usar tanto para Linux, como para Windows.
Y ya lo que me ha sorprendido es que hay disponible una librería python, para usarlo desde python: httrack-py.

En linux, recordar que podemos usar para para los mismo wget.
En la wikipedia, podeis encontrar muchos mas crawlers.

martes, agosto 19, 2008

ConfigParser

Modulo muy útil para manejar ficheros de configuración en formato clave/valor y con secciones.
Vamos... al estilo de los .ini de windows.

Dentro del módulo se definen 3 clases:
  • RawConfigParser
  • ConfigParser
  • SaveConfigParser
RawConfigParser establece el interfaz básico. Una cosa en la que no había reparado es que al constructor se le puede pasar un diccionario con valores por defecto.

Yo hasta la fecha había usado ConfigParser, pero se te puede quedar corta...
El comportamiento de los métodos get() es que si una clave no existe te da una Excepción.
Nosotros hemos ampliado el interfaz con una variante de los métodos para que si una clave no existe, te devuelva el valor que le pasas por defecto. Vamos... similar que lo que puedes hacer desde el constructor, pero a nivel de método.
Lo que si que soporta son 'interpolaciones'. Es decir, el poder usar valores de variables como valores de otras variables dentro del mismo fichero de configuración.

Otra ampliación que le hemos metido es el poder hacer sustituciones en los valores a partir de variables del entorno. Para esto usamos el formato ${varname}. La verdad... Se podría haber hecho con las interpolaciones, usando el argumento opcional 'vars'.

SafeConfigParser simplemente modifica el método ser() para garantizar que el valor pasado sea un string.

jueves, agosto 14, 2008

Chuletilla para subversion

Estaba ya usando desde hacía tiempo subversion, pero la verdad... tampoco había leido demasiado sobre el mismo...
He ido tirando con mis conocimientos (básicos) sobre CVS. Pero notaba mis carestías, por lo que me dispuse a leer los capítulos 1,2 y 3 del siguiente libro. Se lo recomiendo a cualquier que esté trabajando con subversión; o que vaya a trabajar... Se lee rápido.

A continuación una chuletilla de cosas extraidas del susodicho..

Una vez hecho el checkout, el ciclo de trabajo típico es como sigue:
  • Update your working copy
    • svn update
  • Make changes
    • svn add
    • svn delete
    • svn copy
    • svn move
  • Examine your changes (estos comandos se pueden usar sin conectividad con el repositorio)
    • svn status
    • svn diff
      • Se puede usar un programa externo
    • svn revert
  • Merge others' changes
    • svn merge
    • svn resolved
      • elimina los ficheros temporales, cuando hay un conflicto
  • Commit your changes
    • svn commit
Otros comandos útiles son lo que te permiten examinar los ficheros (Examining history)
    • svn log
    • svn diff
    • svn cat
    • svn list
Y finalmente otros comandos:
    • svn import
    • svn cleanup
Notas:
  • Revisiones
    • Subversion lets you refer to these revisions by number, keyword, or date.
      • Con el date, si queremos sacar lo mas cercano a una fecha (incluyendola) hay que mete el día posterior
    • Las revisiones no van asociadas a archivo. Es decir si haces un checkout o un update de una revisión, te va a sacar todo lo que haya en esa rama con esa revisión (lo que hay en el HEAD, es decir lo mas actual con respecto a la revisión solicitada).
  • Se pueden hacer copias con 'history'
  • Los archivos pueden tener propiedades asociadas. Al ejecutar el comando se puede pedir que se ignoren.
  • Y por supuesto hay muchos comandos mas... Todo bien cubierto en el documento enlazado...
Y ya para acabar del todo, unos ejemplos de uso del comando status (muy útil y que no estaba acostumbrado a usar):

  • svn status --verbose --> saca info de todo, aunque no haya cambiado
  • svn status --show-updates --verbose --> este ya contacta repositorio
  • svn status -u -v --> la versión corta
  • svn status -vu | grep "*" --> nos indica que no tenemos actualizado con respecto el repositorio

viernes, agosto 08, 2008

Web Frameworks

En la lista de python últimamente han salido varios hilos sobre desarrollo web en python.
Especialmente interesante este: [1][2]
Aunque hay alguno mas: [3][4]

Los links son del archivo web.