Manejando fechas con python

O como descubrir que si se hacen bien las cosas evitan muchos dolores de cabeza.

Llevo más de 10 años programando en Java y más de 12 programando en general, si me restrinjo a mi vida laboral pues estamos hablando de siete años en Java y seis meses en Python. No entrare a discutir las virtudes y defectos de cada lenguaje, cada uno tiene lo suyo, pero no puedo evitar comparar el manejo de fechas que ha sido un dolor de cabeza en los diferentes proyectos que hemos realizado con Java y que por el momento esta siendo una delicia con Python.

Una pequeña muestra de lo que se puede hacer con el manejo de fechas con Python, mediante la libreria python-dateutil.

Primero instalamos la libreria python-dateutil.

easy_install python-dateutil

A continuación podemos crear un script con el código de ejemplo o lo ejecutamos en la consola intercativa de Python:

from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.rrule import *
from dateutil.parser import *
from datetime import *

today = date.today()
year = rrule(YEARLY,bymonth=8,bymonthday=16,byweekday=FR)[0].year
rdelta = relativedelta(easter(year), today)
print "Hoy es:", today
print "El próximo año en que el 13 de agosto es viernes es el :", year
print "Faltan %s días para el Día de Pascua." %(rdelta)
print "Pascua de ese año es el %s." %(today+rdelta)

El resultado de ejecutar este código es:

Hoy es: 2009-02-06
El próximo año en que el 13 de agosto es viernes es el : 2010
Faltan relativedelta(years=+1, months=+1, days=+29) días para el Día de Pascua.
Pascua de ese año es el 2010-04-04.

Simple y potente, especialmente las rrule, que nos permiten encontrar todos los días que cumplen un cierto patrón. En este caso, buscamos con frecuencia anual, un día de la semana viernes, que sea día 13 del mes de agosto, el primer día que cumple este patrón es en el año 2010, nos devuelve un iterador con todos los días que cumplen esta regla, de cual nosotros queremos conocer el primer año en cumplirla.Esto, son utilidades aparte de las que ya nos ofrece el propio lenguaje de ‘serie’, como restar fechas, añadir o restar periodos,…, por ejemplo hoy más dos días seria tan sencillo como:

import datetime
pasado_manyana = date.today() + timedelta(days=2)
print pasado_manyana
2009-02-08

Y mucho más.

Ultimando el lanzamiento de la nueva web corporativa

Llevamos varios meses trabajando en un cambio absoluto en nuestras web corporativa y esta semana que viene vamos a presentaros el resultado de este esfuerzo.
La nueva web se ejecuta sobre un proyecto que hemos realizado sobre el framework de desarrollo web Django y que vamos a liberar bajo licencia Apache 2.0 o Afero GPL. Por el momento el proyecto es más un ejemplo de trabajo con Django y algunas apliaciones como son django-cms o django-filebrowser, que una verdadera solución, pero esperamos ir añadiendo funcionalidad hasta convertirla en una página corporativa estandar que se pueda enchufar a cualquier proyecto hecho con django.

La experiencia ha sido muy positiva y gracias a ella se ha renovado mi pasión por la programación, como fruto de este proyecto piloto hemos decidido trabajar con Python como lenguaje principal, todavia tenemos muchos proyectos que estan hechos en Java y algunos clientes (principalmente la administración púbica) quieren continuar con el lenguaje de Sun. Antoni Aloy, nos esta ayudando a ponernos al día con Django y creo que el resultado esta siendo excelente. Por el momento, a parte de la web, estamos realizando otros 3 miniproyectos, una aplicación (en el sentido django) para consultar el registro de llamadas de un servidor Asterisk, una galeria de fotográfias artísticas basada en django-photologue y un generador informes sobre una base de datos legada con gráficas basdas en Open Flash Chart; espero ir liberando cada uno de los proyectos cuando esten terminados (primera versión estable) y continuar compartiendo nuestros avances con vosotros.

Estos últimos meses, cada vez que me he sentado delante del ordenador de casa ha sido para programar (en el trabajo no suelo tener tiempo), por lo cual tengo mi cuenta de Flickr abandonada, el blog con menos entradas de las que me gustaría y un par de cenas con amigos pospuestas.

¡La semana que viene página renovada!

Descubriendo aplicaciones de django

Ayer tuve uno de esos raros días en los que puedo sentarme delante del ordenador a hacer lo que más me gusta: programar. Dedique toda la mañana a probar una interesante solución que han montado sobre django la gente del HotClubofFrance: Pinax.

Consiste en un conjunto de aplicaciones (en el sentido que le da django) arrejuntadas para crear una estructura básica de proyecto web 2.0, incluye, de casa, galerías de fotos, blogs, un clon de twitter, mensajes, “tribus” que vienen a ser foros, … Me gusto, porque facilita la vida del programador que quiere hacer una red social sin reinventar la rueda, pero añadiendo las singularidades del proyecto que esta creando.

En Okkum estamos empezando algo parecido, orientado a webs corporativas. De momento es nuestra propia web y a medida que se vaya consolidando lo haremos un poco más flexible, podéis echarle un vistazo y opinar.

También encontré una interesante herramienta psyco (gracias a mundogeek) que permite mejorar los tiempos de ejecución de código python y controlar el rendimiento del mismo.

Además anteayer salio Python 3.0, con novedades que a medio plazo pueden ser muy interesantes para la evolución de este lenguje y la comunidad cada día más amplia de programadores que lo usamos.

Iniciamos un miniproyecto para empezar con Django

En las últimas semanas hemos trabajado duro (especialmente Dani), para comenzar con un proyecto pequeño con el que iniciarnos en Django. Ya comente que tenemos un proyecto grande a la vista que no tenemos claro sobre que tecnología queremos desarrollarlo, así que antes de lanzarme a la piscina sin conocer los pormenores del marco de trabajo (de verdad que si tenéis una traducción mejor la adopto) hemos decidido darle un par de vueltas a nuestra web. Continúa leyendo Iniciamos un miniproyecto para empezar con Django

Primeros avances con Django

Hace unos días comente que estabamos iniciando un nuevo proyecto, que para este proyecto nos estabamos planteando cambiar desde Java hacia Python y vuestras opiniones eran favorables a ir cambiando paulatinamente y comenzar con lo que ya conocemos. Vamos a trabajar sobre nuestra web, que necesita algo más que un lavado de cara, con Django y con la experiencia adquirida veremos si comenzamos el nuevo projecto con la archiconocida combinación Java+JPox+Servlets+GWT o nos pasamos a Python+Django. Continúa leyendo Primeros avances con Django