FTask, gestión de tareas con Flask y mongodb

Simplificando la gestión de tareas (Trello)

La gestión de tareas y las listas de cosas por hacer es un problema general de la vida al que casi todo el mundo se ha tenido que enfrentar alguna vez.

Se han desarrollado multitud de soluciones, agendas, bloc de notas, folios, post-its... Incluso se han desarrollado completas teorías como GTD con las que se han hartado de vender libros desarrollando la fabulosa metodología de apuntar las cosas en una lista e ir tachando una a una.

Con respecto al mundo de las aplicaciones informáticas, también ha habido multitud de aproximaciones con más o menos éxito. El mayor problema que nos encontramos en la mayoría de las aplicaciones informáticas de gestión de tareas es que aunque en un principio pueden ser simples normalmente se van complicando más y más hasta que hacen multitud de cosas y en realidad el apuntar algo para hacerlo luego se convierte en una tarea tediosa, por lo que mucha gente acaba acudiendo a los bonitos post-its pegados en la pantalla.

Recientemente he conocido la fabulosa aplicación web Trello, que no es más que otra solución a este problema mundialmente conocido. El enfoque que dan desde Trello a la gestión de tareas es bien sencillo, implementa un modelo de tablones-listas-tareas en una aplicación web con una interfaz realmente sencilla.

La aplicación es bien sencilla, tienes tablones, donde puedes definir listas y cada lista tiene una serie de tareas. Las tareas se pueden mover entre listas, y de primeras te proponen tres listas: To Do, Doing, Done. Es muy simple empezar apuntando cosas en la lista To Do, cuando estás haciendo algo coges y arrastras la tarea a la lista Doing y una vez terminas la mueves a Done. Algo simple, sencillo y muy similar a tener un montón de post-its pero en tu pantalla.

Otra gran genialidad de Trello es la edición colaborativa, varias personas pueden estar trabajando en un mismo tablón y los cambios se ven en tiempo real.

Por lo tanto Trello es una gran herramienta para gestión de tareas. Es algo simple, que hace completamente su función y que permite trabajar en equipo de una manera más o menos simple.

Haciendolo libre

Trello está muy bien, peeero, no es libre, no puedo descargarme el código, modificarlo y usarlo en el servidor de mi empresa para gestionar mis tareas.

Estando así las cosas y siendo un poco talibán del software libre, qué mejor que implementar un clon libre de esta fabulosa herramienta, y si además durante el proceso aprendemos algunas tecnologías nuevas, pues mejor.

Así pues, desde wadobo labs, nos hemos puesto a desarrollar él clon con una licencia libre AGPLv3.

Trello.com en funcionamiento

Ftask en funcionamiento

Un nombre...

Todo proyecto merece un nombre, y la selección del nombre es uno de los momentos cruciales en el desarrollo. En este caso, en un alarde de originalidad y creatividad el nombre elegido ha sido FTask, porque elegí Flask como framework de desarrollo y se parece mucho Flask a Task, así que combiné las dos palabras et voilá.

Vale, no es un buen nombre. No se me ocurrió uno mejor, siempre podemos cambiarlo más adelante.

Arquitectura

Arquitectura del proyecto FTask

Para el desarrollo de este proyecto quería separar la interfaz de la aplicación.

Normalmente las aplicaciones web tienen una interfaz HTML ligada. Pero últimamente estoy observando que el modelo de simplificar la interfaz facilita el desarrollo y las pruebas de la aplicación. Por lo tanto decidí separar la aplicación en una aplicación básica con una interfaz JSON y una interfaz HTML con todo el acceso al backend a través de AJAX.

Esta arquitectura permite una separación más clara entre aplicación e interfaz y por tanto es mucho más difícil mezclar cosas. Además facilita el desarrollo de futuras aplicaciones no web ya sea integración con escritorio o aplicaciones para dispositivos móviles.

Flask y Mongo

Como ya he dicho antes, he elegido Flask como framework para el desarrollo de esta aplicación. Dado que mi lenguaje favorito de programación es python10, estaba claro que el framework de desarrollo tenía que ser en este lenguaje.

El framework con el que más he trabajado es django, y es un gran framework, pero tiene muchas cosas que no uso y para este proyecto quería usar un micro-framework, algo más pequeño y modular. Ya he trabajado antes con web.py e incluso con cherrypy, pero desde hacía ya algún tiempo venía oyendo hablar de Flask y tenía ganas de hacer algo con este framework, así que el motivo principal por el que elegí este framework fue porque no lo conocía.

Con respecto al almacenamiento tenía muchas ganas de hacer algo con una base de datos no relacional, algo NoSQL. Ya había cacharreado algo con Mongo, pero no había hecho nada serio. Así que decidí utilizar esta base de datos NoSQL.

Tiempo real y Backbone

Como todos los datos de la interfaz se obtienen a través de peticiones AJAX de la API JSON de la aplicación decidí que lo mejor para controlar todos estos datos y mantener sincronizada la interfaz era usar backbone.

Con backbone es relativamente sencillo tener "edición colaborativa en tiempo real" en la aplicación, ya que usando medianamente bien la biblioteca js se separa la representación de los datos y simplemente haciendo polling a la API cada poco tiempo se actualiza automáticamente la interfaz.

Esta parte de backbone en Ftask es muy mejorable, porque actualmente se hace polling y es bastante costoso en tráfico, esas peticiones se pueden optimizar para que sean lo mínimo necesario e incluso se podría utilizar websocket para evitar el polling. Por suerte backbone permite cambiar de polling al uso de websocket de manera más o menos sencilla, por lo que esa tarea la he ido delegando para el momento en el que haya que optimizar.

Versión usable y colaboraciones

Actualmente hay una versión usable en el servidor de wadobo, pero hay muchas cosas y mejoras que se pueden ir añadiendo, desde copias literales de funcionalidad de trello a nueva funcionalidad que a cualquiera se le pueda ocurrir.

El desarrollo de este proyecto es totalmente abierto y estando el código en github es muy fácil hacer un fork y empezar a hacer cositas por ahí, como siempre, toda colaboración será bienvenida.

Comments !