Infopoint, more words

abbadingo, networks, software No Comments »

The idea  with the Infopoint is to facilitate the daily tasks of a real group, without being intrusive or bureaucratic. It will not replace a group of people, but it will help to organize its work.

The infopoint is a live cd to install a NOC, a Network Operations Center, in a social space. Is linked to the physical space is built for, and to the people that makes the space run, or comes to it.

The Infopoint is a machine that runs on the local network and provides several network services like network shaping or web proxy, but also will help with calendaring, resources allocation, to do lists.

Why we want to make a new application? There are several applications on the open source business side of things to handle schedules/resource allocation. But all of them are based on a hierarchical, business mind. We would like to develop a tool to help other forms of more empathic or also changing organizations, where people comes to collaborate once a week but is not there every day, for example.

On the resources allocation, somebody could come to the desk where there is a person doing the shift of that evening and say: “I want to give a workshop about something the day 15 and I need a projector and also I would like to record the talk”. All this information can be put in the machine, and the projector and the room will be reserved for that talk.

Other person can see there’s a task to be done, but cannot do it. This task can go to a task pool, so everybody on the group knows about it.

Is important to notice how much time people that works on production - management of a cultural space spends on the phone and repeating things. Specially in non-professional environments.

mapa de la información que se maneja en un espacio social

enamorada de django (el cantante no! el framework!)

abbadingo, howto, internet, networks 5 Comments »

Llevo unos días flipando con el Django. Un framework de desarrollo web en Python, que digamos vendría a reemplazar al php… pero mucho mejor. Y con todas las posibilidades de python (import antigravedad!)

En Django diseñas tu data layer de un modo más abstracto, casi como si fuera la abstracción de la información que vas a utilizar, totalmente programado con objetos, y django lo convierte en el esquema de la base de datos, poniendo constraints y primary keys.

Todo limpito, como se ve en este ejemplo de declaración de un modelo para hacer un calendario, que se conecta con el módulo de Auth.User (que viene con django en el svn):


class Event(models.Model):

        title = models.CharField(max_length=100)
        description = models.TextField(null=True,blank=True)
        start_date = models.DateTimeField(help_text='event start')
        end_date = models.DateTimeField(help_text='event end')
        location = models.ForeignKey(Location,blank=True)
        link = models.URLField(blank=True)
        site = models.ManyToManyField(Site,blank=True)
        calendar = models.Manager()
        events = EventManager()
        status = models.CharField(max_length=1, choices=EVENT_STATUS_CHOICES,default=2)
        event_class = models.CharField(max_length=1, choices=EVENT_CLASS_CHOICES,default=1)
        pixie = models.ManyToManyField(User,blank=True,null=True,related_name=’events’)
        picture = models.FileField(upload_to=’events/’, null=True,blank=True)
        redes = models.ManyToManyField(Group, through=’Network’,null=True,blank=True, related_name=’events’)
        atendees = models.ManyToManyField(User, through=’Attendance’, null=True,blank=True)
        def __unicode__(self):
                return self.title

(Attenti aquí a las ForeignKeys, que relacionan con simplicidad unas tablas y otras, y a los tipos de modelos, que vienen con validación incorporada, es decir, si luego generas un formulario desde esta clase, y tratas de rellenar el campo con “gwgwg”, antes de procesarlo en la base de datos se genera un error InvalidEmail o similar….)

Vas creando apps de python y los puedes instalar y desinstalar. Cuando instalas un nuevo app, haces directamente python manage.py syncdb en el directorio de tu django… y crea la tabla en la base de datos.

Las distintas páginas las creas con apps de python también, y tienes una consola maravillosa basada en ipython en la que puedes ir probando todas las funciones, vistas, y modelos que vas haciendo. Es una estructura un poco compleja al principio, pero tan bien pensada que enseguida va teniendo sentido y en un par de semanas (o menos si eres más rápida) ya puedes estar desarrollando cositas interesantes. Yo me maravillo ante lo fácil que ha sido integrarlo con el graphviz, gracias a la librería pyDot y a la facilidad de django. Me di cuenta de las posibilidades por esta aplicación que viene en el svn del django, modelviz.py, de Antonio Cavedoni, que crea un gráfico (hermoso!) de los modelos de tu aplicación django: más en django-graphviz. Aquí algunas pruebas con el infopoint que estoy haciendo:

Un ensayo del modelviz:

infopoint_models

Una imagen para el imagemap de navegación:

group_1

Más info también en GraphModels.

Todavía quedan algunas partes del programa por pulir, lo que no está mal ya que acaban de sacar la primera versión, pero van saliendo más y más módulos que puedes instalar con dolor mínimo y probar en tu aplicación.

Por ejemplo un lugar interesante para ver las posibilidades de django es django snippets, una plataforma donde la gente publica sus distintos apps. Aunque si no te enteras muy bien a veces es difícil reutilizarlos por falta de documentación.

Lo que más me gusta de Django es que se evita bastante la burocracia, sobre todo si te metes pronto con las templatetags y los formularios de modelos. El sistema de templates es muy fácil de usar también, con los “parent templates”.

Viene con una interfaz de administración  integrada muy agradable y limpia, y si tienes instalado el docutils de python (apt-get install python-docutils) también tienes acceso a una documentación automática generada de tus distintas funciones, modelos y vistas.

django-model-example