Planet

The privatization of democracy

40 years ago, there were no computer networks as we have today. Voting via Internet was not possible

Taikoa and the future

As some of you may know, I left Wadobo last month and started a new company based in The Netherlands, Taikoa. It was very nice to work with people as proffesional as Danigm and Edulix, we all share a vision how our company should be.

But this was a logical step for me, I wanted to focus more in my life here and I don’t plan to go back to Spain. You never know but we are so comfortable in our new place, I am in love with Delft, It’s a charming little city near cities with a shiny entrepeneurial and freelance life!

The things I value the most here are how people respect the work I do, the quietness of life and the transport, I love to use the bike for everything and the good quality of train service, the lack of stress when moving, It’s a big contrast from Madrid.

Going back to the company, I still work closely with Wadobo, everything is going very well.

I am gonna write about technical stuff in Taikoa Lab, leaving this blog for more personal matters and opinions.


Flashing Firefox OS in the Geeksphone Peak

The official tutorial is excellent to do all the process smoothly, you will need to read it first. I wanted to share with you some problems I found building Firefox OS for the Geeksphone Peak. I am using ArchLinux, but some of the problems aren’t OS related.

After getting the B2G code you will need to use the ./config.sh to build it for the Peak, It’s not in the documentation but you actually can build the peak (the options are there for this device).

To do it you will need its manifest, you can find it in.

git clone git://github.com/mozilla-b2g/b2g-manifest.git

So when you want to build it for Peak without the manifest it will crash, but you can just get the peak.xml from the previous repository.

./config.sh peak route_for_b2g-manifest/peak.xml

Following the official instructions and doing this for the Peak you will be able to config B2G for your device.

When this is finished you will need to have your device connected to run

./build.sh

Keep in mind you need to create the udev rule as It’s documented in the Mozilla instructions.

When the build is done you can flash it, so having the Android SDK correctly installed and in the PATH, you can just.

./flash.sh

If it doesn’t work(it just freezes in waiting for device) I realised I would need root permissions for one of the commands in the script, the one unlocking the Bootloader, fastboot oem unlock, so If It doesn’t work for you try with…

sudo ./flash.sh

This didnt’t work for me because the bootloader was still locked, so this was what I did to fix that.

adb reboot bootloader
sudo fastboot oem unlock

In the chinese page you can push Vol+ to change the checkbox, once is changed you just push the Power button. That’s it! You have your phone unlocked! :-)

Now we could flash the phone, the OS image has changed, so you need to activate the developer remote debugging again to use the flash script.

Once you do that, you just…

./flash.sh # or sudo ./flash.sh

And that will be it! Have fun!

Note: I couldn’t record the errors I had in the process, sorry, but If you have any doubts don’t hesitate to ask, I will try to answer when I have time.


Geeksphone out of stock, again

It seems the geeksphone is out of stock again! Firefox OS is having the attention it deserves and I’m happy for it.

When I was waiting for the shop to open, I create a small script to know when was opened again, just for fun. If you are eager to get one like I was, maybe you would like to use it. :-)

import requests
import time

WAIT = 600
r = requests.get('http://shop.geeksphone.com')
while True:
    if r.status_code == 200:
        print 'Geeksphone available'
    time.sleep(WAIT)

You can change the print to send you an email for example.

import requests
import time
import smtplib
from email.mime.text import MIMEText

WAIT = 600
r = requests.get('http://shop.geeksphone.com')
while True:
    if r.status_code == 200:
        server = 'mymachine@localhost'
        client = 'youremail@whatever.com'
        msg = MIMEText('Geeksphone available!')
        msg['Subject'] = 'Important message'
        msg['From'] = server
        msg['To'] = client
        s = smtplib.SMTP('localhost')
        s.sendmail(server, [client], msg.as_string())
        s.quit()
        break
    time.sleep(WAIT)

If you want to send an email to yourself, install an application like Postfix or Exim for Python to be able to send it.


Continuous Integration, important and fun

Three months ago I installed a server in my place, a month ago I installed my own continuous integration service with Jenkins.

It’s the first time I’m using my own CI service and I couldn’t be happier, I’m saving time and money with this service even when I’m just alone in some of the projects. It helps me being much more careful with my projects and to keep a log of the projects status. I have it here listening in localhost, so It doesn’t have connection to the outside, when I want to see it from the outside I just create a ssh tunnel for that moment.

I have always been very interested in improving my development skills, usually learning new technologies, but I’ve been thinking how to save time and control it this last months and I’m very happy about it. Productivity is always an important matter for a freelance and a difficult one to measure if you don’t have certain discipline. That’s why I’m using Vimwiki and gtimelog every day to control it and create reports of the hours I’m working. My clients want to know too, so I could use the same tool for their reports.

I love the command line and gtimelog is GTK+, so I’m using a tweaked version from Reinout Van Rees to achieve that.


Squid y túnel SSH para estar como en casa, Firefox mediante

Esta semana he puesto a funcionar un proxy vía un servidor en España, al principio fue una tarea ardua, porque no tenía ni idea de lo que necesitaba y no le estaba preguntando los términos correctos a Google, pero tras pelearme y poner en funcionamiento OpenVPN y algunas cosas más me di cuenta que tenía un problema de concepto y que lo que yo necesitaba para ver las motos y la F1 como si estuviera allí era otra cosa.

En Holanda no tenemos televisión en la casa y para ver algo tienes que pagar, mi actual compañía de Internet me ofrecía un paquete por 38.50(IVA de aquí incluido) que es menos que lo que pagaba en Madrid sólo por internet, pero nuestra negativa a no tener televisión es más de convivencia y deshacernos de cosas innecesarias.

Después de entender conceptos y saber lo que necesitaba, montar el proxy para que Firefox entrara con Ip española fue la mar de fácil, voy a comentar aquí lo que se necesita, aunque en muchos lugares podéis encontrar una solucion parecida, eso sí en inglés. El sistema que me sirve a mí es el siguiente:

En el servidor instalar Squid apt-get install squid o pacman -S squid, el paquete puede llamarse también squid3.

La configuración de squid, como sabréis estará normalmente en /etc/squid(3) y no habrá que tocarla mucho, son unas 5000 líneas, pero sin comentar yo tenía poquitas, lo ideal es tener la aplicación escuchando únicamente en localhost por seguridad, y que ssh se encargue de la conexión de los puertos entre el servidor y nuestra máquina local.

Una vez instalado y comprobado que Squid funciona (viendo que el puerto está activo con netstat, mirando con ps ax si el proceso se ha lanzado y si no tenemos ningún firewall incordiando), hacemos el túnel ssh. Si lo pusimos en el puerto por defecto de Squid bastará usar un comando del tipo:

ssh -C2TNvg -L 3128:localhost:3128 usuario@servidor

Si todo ha ido bien podemos probar el proxy con la siguiente orden.

curl --proxy 127.0.0.1:3128 http://javaguirre.net

Si no hay ningún problema recibirás el html de la página principal de esta web.

Una vez funcione la llamada curl podemos introducir los datos del proxy en la configuración de Firefox. Elegimos Preferencias, Avanzado, Configuración en Conexión y dentro Configuración Manual en Firefox, en el SOCKS y en HTTP Host tenemos que meter 127.0.0.1 y el puerto el 3128. También se puede poner las mismas opciones (Ip, puerto) en SSL y FTP si queremos usar el proxy para esos servicios.

Con esto ya tenemos el proxy funcionando y deberíamos poder acceder a las webs que queramos. :-P

Referencias:


/dev/haag meeting and Gitlab

Last Friday I had the opportunity to go to my first /dev/haag meeting, It is a really serious and well organized event with well-prepared talks.

The first one was about Reverse Launching and Gitlab, Sytse Sijbrandij gave us an interesting talk about trying to get feedback even before starting to ship anything, just feeding discussion about a possible market and checking the interest of people in that project in case it would came to reality.

The second one was about the beautiful RijksMuseum new website, Elaine Oliver gave us a talk about how important is to be responsive nowadays and their approach to get it for this site.

The last talk was about a topic I’m concern about, DrWhax tried to immerse us in the world of cryptography in Internet and told us about the Cryptoparties and a more securized world.

It was interesting to talk about Gitlab and its possibilities with Sytse, I had a really good time there and I will repeat next time for sure.

I also got some conclusions about what we are missing in Wadobo without a real project of our own, I think we need to improve that, explore options and try to put more efforts in our projects and less in consulting.


After FOSDEM 2013

This year has been my first time at FOSDEM. I liked the experience but I think I could have enjoyed it more with a community behind, I think this kind of event has more meaning when you are part of a FLOSS community, otherwise you are not enjoying all that offers.

In general the focus of the conferences has been mobile development(Firefox OS and others) and I missed more Hardware content, I am very interested in robotics and it would be good if talks about Open Hardware and 3d printers could have taken place, I understand that’s not anybody’s fault, but I wanted to point it out.

FOSDEM has increased my interest in contributing in a big project, concretely Mozilla, I think there are a lot of interesting stuff to do and learn there and it’s a great place to improve skills as a developer.

I’m very interested in C++, It’s a logical step for me, to start doing something with this language to be able to contribute in more different and meaningful projects.

Good experience, I think we will repeat next year, hopefully. :-)

If you want more, Danigm has written much more and detailed than me in his blog(ES).


FOSDEM''13

Wadobo en el FOSDEM 2013

Este año, Wadobo al completo se ha pasado por el FOSDEM (The Free and Open source Software Developers’ European Meeting), y hemos aprovechado el evento para enterarnos de primera mano de qué es lo que se está moviendo en el mundo del software libre.

Este año, a diferencia del FOSDEM del 2011, donde Edulix habló sobre Timebank y también sobre Ágora, no hemos dado ninguna charla, no por falta de ganas o temas sobre los que hablar, sino más bien porque lo hemos ido dejando pasar y al final no hemos propuesto nada. Supongo que el año que viene estaremos allí otra vez y esta vez con alguna que otra charla.

Hacia dónde va el desarrollo

El FOSDEM es un gran evento que se desarrolla en un corto periodo de tiempo y donde se presentan simultáneamente muchísimas charlas realmente interesantes sobre diferentes tecnologías, sin embargo personalmente he presenciado un ligero cambio en la masa de desarrolladores, o más bien en el interés general.

Mozilla tuvo una sala llena de charlas los dos días. Se habló de web, de comunidad y de firefox, pero sobre todo se habló de Firefox OS. Y creo que es uno de los temas que más atención han recibido en este FOSDEM.

Actualmente las plataformas programables se han multiplicado y hoy en día no sólo existen los ordenadores tradicionales, han aparecido multitud de dispositivos y eso se está notando en la comunidad de software libre, que parece empezar a buscar dispositivos realmente libres sobre los que trabajar. Firefox OS promete algo más de libertad, y también anda por ahí ubuntu y otras cosas como jolla. Por lo que me puedo aventurar a prever un gran movimiento de desarrolladores a este tipo de proyectos que son realmente prometedores llevando el software libre un poco más allá.

Por lo tanto y viendo las diferentes charlas de este último FOSDEM me da la impresión de que el interés en el mundo del software libre, y creo que del desarrollo de software en general, está tendiendo hacia los nuevos dispositivos. Y no creo que este creciente interés sobre estas nuevas tecnologías vaya en detrimento de grandes proyectos que en el pasado pudieron ser el gran foco de interés, como las grandes distribuciones o los entornos de escritorio tradicionales, sino más bien creo que la comunidad de software libre está creciendo y llegando a lugares donde antes era imposible llegar.

Otras cosillas

Hay un par de cosas que han llamado mi atención durante el FOSDEM. Lo primero es la tecnología webrtc, me enteré de esta tecnología en una charla de mozilla y la verdad es que es algo bastante interesante. Esta charla ha motivado que me haya descargado y compilado el firefox desde el repositorio para jugar un poco y tengo pensado hacer algún tipo de aplicación de ejemplo para explorar las posibilidades que ofrece.

La otra cosa que me ha llamado la atención durante este evento ha sido el anuncio de GNOME de la elección del lenguaje oficial para el desarrollo de aplicaciones, y este no es otro que javascript. Aún siendo un defensor de python para todo tengo que decir que no es ninguna locura, javascript es un lenguaje de alto nivel y junto con gobject-instrospection gjs es una herramienta bastante potente. A partir de ahora lo único que hay que hacer es generar buena documentación y el número de aplicaciones para gnome en js crecerá considerablemente, gnome puede convertirse en una buena plataforma de desarrollo.

Lo peor

El FOSDEM es un evento bastante popular y cada vez va más gente lo que en principio es bueno, pero el espacio es finito y se convierte en un problema el pillar sitio para ir a las charlas interesantes. Por ejemplo este año había un track de python donde había bastantes charlas muy interesantes y no pudimos ver ninguna de ellas porque era una sala medianamente pequeña y estaba llena desde primera hora.


Playing with Bootstrap tour, Anchors for navigation and onShown event

Today I have been finishing the integration of Bootstrap tour in our AngularJS application. I was having a problem with navigation with the path element in the steps because they does not support anchors for navigation, so I did a little pull request to fix that to my needs.

The second problem I had was the position of popovers, I wanted to change it after it was shown and I didn't found a good event to cover my needs in the documentation. Although checking the code I fond an onShown event I’m using to fix the position of some of the steps. The solution would be something like this.

var tour = new Tour({
    onShown: function (tour) {
        if(tour._current === 0 || tour._current === null) {
            //do something for the first step
        }
        else if(tour._current == 4) {
            //do something for the fourth step
        }
    }
});

Checking Boostrap Tour

Today we have been started using Bootstrap Tour, interesting stuff. It seems to be easy to create tours for your site with it, but I couldn't get it working perfectly yet.

It’s developed with Coffeescript and has some good events too.

It uses localStorage or cookies to store the current step of the tour and can navigate through your site when you go further in it.

I have some trouble with the integration with my Angular app, something normal, and I have fixed a little bug too, we had time for everything. :-)

There are some things to finish in our integration, I hope we could contribute more in the project.


Avoiding nodes overlapping in d3 trees

This is a simple example to avoid overlapping between siblings in a d3 tree.

I’ve been working a lot with d3 trees lately and dynamic node resizing, which is cool to have a complex representation for you data.

When using simple d3 trees with different node sizes, they sometimes overlap with each other. I knew there is a separation method, but I couldn’t get it working for my case, so using an example designed for d3 force element I could adapt to my current simple tree.

function collide(node, node_sibling) {
  var r = node.size,
      n1y1 = node.x - r,
      n1y2 = node.x + r;
  var r2 = node_sibling.size,
      n2y1 = node_sibling.x - r2,
      n2y2 = node_sibling.x + r2;
  result = (n1y1 < n2y2 && n1y1 > n2y1) || (n1y2 > n2y2 && n1y2 < n2y1);

  return result;
}

The size property doesn’t exist in nodes, so it will be whatever property you want to control the size of them.

I’m just checking in one dimension (x) because I want to control only siblings in my tree and they are aligned across the y axis. You could do the same with the y property in this function.

This kind of function could be aproximately the same for other d3 elements.

To use it in a tree we could use it inside a forEach loop in nodes.

function detectCollisions(nodes) {
  nodes.forEach(function(d, index) {
    for (var i=0; i < siblings.length; i++)
    {
        if(d.id != siblings[i].id) {
            if(collide(d, sibligns[i])) {
                // Do something, like change the position
                // of the current sibling
            }
        }
    }
  });
}

This is it by now, I will get more deeply into it soon if I think there is something worth to comment.


Using SessionAuthentication With Tastypie tests for Django

Today I have been studying more deeply how to create good tests with Tastypie’s alpha version documentation.

It was easy to start if you knew about TestCase and django test Client, but still Tastypie documentation has a lot of blanks in this part.

I was using SessionAuthentication to authenticate my resources and it uses Django sessions in background, so it had to be easy to test it with the ResourceTestCase. It wasn’t as easy as it seemed and we needed to check the code to understand how to do it.

In a real Django app we could use login method from django.test.client.Client, and I thought tastypie.test.TestApiClient could be inheriting from it, but because you can have different kinds of authentication it wasn’t the right choice for the Tastypie api test client architecture.

If we read TestApiClient’s __init__ we can see it has a client attribute, instantiating from django.client.Client.

class TestApiClient(object):
    def __init__(self, serializer=None):
        """
        Sets up a fresh ``TestApiClient`` instance.

        If you are employing a custom serializer, you can pass the class to the
        ``serializer=`` kwarg.
        """
        self.client = Client()
        self.serializer = serializer

        if not self.serializer:
            self.serializer = Serializer()

With this in mind and following the same idea we could just do this in our tests.

from tastypie.test import ResourceTestCase, TestApiClient


class ExampleResourceTest(ResourceTestCase):
    def setUp(self):
        self.api_client = TestApiClient()
        self.get_credentials()
        self.example = {'title': 'My Data'}

    def get_credentials(self):
        result = self.api_client.client.login(username='myuser',
                                              password='secret')
        return result

    def test_post_project(self):
        self.assertHttpCreated(self.api_client.post('/api/v1/example/',
                                                    format='json',
                                                    data=self.example))

Now we can build authenticated requests for tests using SessionAuthentication in Tastypie.

Easy after all. :-)


Google Font for jQuery Mobile Themeroller

This weekend I started to play with Phonegap + jQuery Mobile for a new project I’m developing. I never have worked with it before, but I think it could be a good stack if we mix it with backbone and some other technologies, so I’m gonna give it a try.

In my research I found Theme Roller, a very good service to customize your jquery mobile theme, so I started using it and I realize it could be good to have google font support(among other things) to use it in the preview.

This new functionality is based in the work they were doing before, I reused the font input, so if you add a google font in the list of fonts(it has to be the first one in the list) and you click update font, it will preview your font in the swatches view and will add it to your zip package when you download it.

For example if the fonts are Dosis, Arial, sans-serif it will try to add the Google Font Dosis.

I made a pull request with this functionality and you can check it in my own copy of the project, there is a demo too.

Feedback is much appreciated!


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.


New changes in Gramophone

News about Gramophone music server! We have done so many changes. I said us because I’ve joined forces with Danilo Bragen, a highly skilled developer who had a similar project, but he was builting it with Flash and jPlayer.

Due to his suggestions we moved from cherrypy to Flask. I really prefer Flask too, but I wanted to have the less dependencies possible. I think the change is a good idea since we both have experience with Flask and we both feel more comfortable with it.

We changed the Audio.js player too and we are using jPlayer now, which has more community, supports much more file extensions and has a stable development.

Filters and searching for tracks, authors and artists are also available, and we have done a little improvement in the design, although we need to work more on the frontend part and the update collection task in the server.

You can follow the development in github.


Ágora, democracia directa y federación

Estoy leyendo el libro Direct Democracy de Jos Verhulst & Arjen Nijeboer, y la verdad es que est

PIWEEK!

Hoy ha finalizado la tercera edición de la PIWEEK, que para quien no lo sepa, es una idea genial a las que nos hemos apuntado desde wadobo. Copio la descripción de la misma web:

ΠWEEK viene de Personal Innovation Week y persigue promover la innovación y creatividad en un entorno multicompañía prácticamente sin límites. No se exige propósito comercial, no se impone un filtro específico, sólo es una semana para que todo el mundo haga lo que más desee.

-- piweek

Yo me enteré de la existencia de esta genial idea a través de Yaco, quienes participaron en la última edición y a partir de eso en wadobo decidimos que esto encajaba directamente con nuestra forma de trabajar y por eso nos apuntamos a esta.

Propuesta de trabajos

En la semana anterior a la ΠWEEK se hace una presentación de ideas de proyectos para intentar captar gente e ir creando los grupos de trabajo.

En esta edición se han propuestos varios proyectos bastante interesantes. Edulix propuso Agora como proyecto. Es verdad que no es un proyecto para hacer en una semana y ya hay algo hecho, pero se propuso un objetivo en concreto y en eso hemos estado trabajando.

El equipo de trabajo de Agora Ciudadana en las oficinas de Kaleidos

Para mi la parte más importante y el gran potencial de la ΠWEEK es la colaboración entre empresas, la posibilidad de trabajar y aprender junto a gente de otras empresas y otros lugares, por eso quería colaborar en algún proyecto propuesto por alguien con quién no hubiera trabajado, pero finalmente y por estar un podo a medias en este evento he trabajado solamente en Agora. Por suerte y aún habiendo trabajado en este proyecto con Edulix también hemos tenido la suerte de trabajar con gente de Kaleidos.

Kaleidos

Yo he estado trabajando la mitad de la semana desde Córdoba, pero el jueves me acerqué a Madrid para vivir el evento en toda su plenitud.

Lo primero que tengo que decir es que Kaleidos es una empresa genial, me he sentido como uno más los dos días que he estado por allí y nos han tratado muy bien. He tenido la gran oportunidad de conocer a mucha gente y de trabajar allí un par de días y viendo el ambiente y las oficinas me ha recordado mucho a Yaco y a ese gran ambiente que sólo se consigue juntando a gente muy buena en un ambiente agradable.

Muchas gracias a toda la gente de Kaleidos por organizar estas cosas y por tratarnos tan bien.

Agora

El proyecto Agora ciudadana ya tiene un largo recorrido y la web está en producción, hay gente usándola y sobretodo Edulix, sigue trabajando en esto.

La propuesta para esta semana era refactorizar, trastocar todo el código para hacer la aplicación mejor internamente para facilitar futuros desarrollos y el mantenimiento de la plataforma.

El trabajo principal que hemos estado realizando ha sido el de finalizar la API rest, documentarla y sobretodo, trasladar la lógica de interfaz a cliente utilizando tecnologías como Backbone.

Qué hemos aprendido

Yo personalmente he aprendido mucho de Backbone y javascript en general. Ya he trabajado con javascript muchas veces y es algo que conozco, pero nunca había hecho las cosas tal y como las hemos hecho en ágora y la verdad es que he aprendido mucho.

También hemos tenido la oportunidad de discutir la estructura y ver cuál sería una organización mejor para un entendimiento y desarrollo del proyecto más fácil.

La conclusión técnica más importante que he sacado del trabajo de toda la semana en Agora es que cuando un proyecto comienza a hacerse grande hay que dividir. Hay que buscar siempre la simplicidad y trabajar para que las capas de comunicación entre componentes simples también sea simple, buscando conseguir hacer algo complejo pero entendible por partes. Osea, evitar código espagueti, organizar por funcionalidad y no mezclar funcionalidades. Lo que cuentan todos esos libros de diseño de software y patrones y esas cosas.


Developing Gramophone music server

It’s been a while since I received my Raspberry PI and just a few weeks since I stopped paying my Spotify premium account.

Spotify it’s a good service but the applications for GNU/Linux and Android aren’t good enough. The Spotify app for Linux runs under Wine and has some bugs such as losing the connection unexpectedly and not reconnecting again unless you rerun the app, sometimes the search bar is not working, it uses a lot of resources (it’s using Wine, so it’s not a surprise) and sometimes crashes in dwm (I think this last problem has to be with Wine, not with the Spotify app).

The Android app has a vertical layout, and that’s it, so in my Android tablet it’s a real pain, the natural position for my tablet when is placed somewhere is horizontal, so this problem added with some usability issues made me decide to stop using the service.

I wanted to use a music server in my Raspberry PI to fulfill my needs of music at home, but the one I liked is subsonic and it’s pretty heavy. I was doing some research and I found some alternatives, but I wanted something simple. I love music and I have some free mondays so it’s the perfect excuse to start building a web music server for my RaspPI. :-)

I’ve called it Gramophone (I’m a romantic :-P ), it’s built with Python3 and CherryPy, and the frontend is built with Backbonejs. The database now is Sqlite, I want to install the less packages possible to run the server. For the audio plugin it’s using audiojs, it’s simple but it hasn’t been updated for a long time, so maybe in the future it could be a good idea to change it.

You could follow it’s development in its github repository.


Tecnología, empleo y sociedad

Estaba leyendo esta mañana una interesante noticia en slashdot donde se preguntaban si la tecnología