SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Introducci´n
          o                                  Desarrollando JaMp                                           Futuro




                          JaMp - Un cliente para Jamendo

                  Sim´n Pena y Alumnos del M´ster en Software Libre
                     o                      a

                       M´ster en Software Libre, 2009-2010. Edici´n de A Coru˜a
                        a                                        o           n
                                 Igalia - Universidad Rey Juan Carlos


                                 GUADEC-ES – 23 de julio de 2010




Sim´n Pena
   o                                                 M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                      a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                         Desarrollando JaMp                                           Futuro




Licencia



       Esta obra est´ bajo una licencia Attribution-ShareAlike 3.0 Spain
                    a
       de Creative Commons. Para ver una copia de esta licencia, visite
       http://creativecommons.org/licenses/by-sa/3.0/es/ o
       envie una carta a Creative Commons, 171 Second Street, Suite
       300, San Francisco, California 94105, USA.




Sim´n Pena
   o                                        M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                             a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro




Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



¿Qu´ es?
   e



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



¿Qu´ es?
   e



¿Qu´ es JaMp?
   e


       JaMp
               Ejercicio pr´ctico en el m´dulo de desarrollo del M´ster
                           a             o                        a
               Software Libre
               Cliente para Jamendo para la plataforma GNOME
               Git como sistema de control de versiones
               Env´ e integraci´n de parches
                  ıo           o




Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



¿Qu´ es?
   e



¿Qu´ es Jamendo?
   e




               Comunidad de m´sica libre, legal e ilimitada, publicada bajo
                                 u
               licencias Creative Commons
               36299 ´lbumes publicados
                     a
               226880 Rese˜as de ´lbumes
                          n      a
               809051 miembros activos


Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                              Desarrollando JaMp                                           Futuro



¿Qu´ es?
   e



¿Por qu´ JaMp?
       e

       Intereses did´cticos
                    a
               Punto de entrada a la plataforma
               Familiarizarse con tecnolog´ habituales
                                          ıas
                     Acceso y manipulaci´n de contenidos web
                                        o
                     Reproducci´n de los contenidos multimedia
                               o


       Intereses pr´cticos
                   a
               Cliente dedicado (frente a usar plugins)
               Arquitectura solida y modular


Sim´n Pena
   o                                             M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                  a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Arquitectura



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Arquitectura



Arquitectura utilizada




       Patr´n arquitect´nico Model-View-Controller
           o           o
               Un backend para la recuperaci´n de informaci´n de Jamendo
                                            o              o
               y la reproducci´n multimedia
                              o
               Un frontend para la presentaci´n de la informaci´n obtenida y
                                              o                o
               la gesti´n del la reproducci´n
                       o                   o
               Interconexi´n mediante D-Bus
                          o
Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                               Desarrollando JaMp                                           Futuro



Arquitectura



Backend


       Desarrollado en C con GObject
               Un proveedor de datos
                     Accede a Jamendo usando libsoup
                     Manipula los datos recibidos usando libxml
                     Expone un m´todo Query
                                  e
               Un gestor multimedia
                     Permite la reproducci´n de los contenidos usando gstreamer
                                          o
                     Expone m´todos Play, Pause, notificaci´n de progreso. . .
                               e                            o




Sim´n Pena
   o                                              M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                   a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                 Desarrollando JaMp                                           Futuro



Arquitectura



Frontend




                                 Figura: Clientes buscando “rock”


       Desarrollado en Python
               Un cliente para GNOME, desarrollado con Glade
               Un cliente para Maemo, usando Hildon
Sim´n Pena
   o                                                M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                     a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



Arquitectura



Conexi´n mediante D-Bus
      o



               Se usa D-Bus GLib en el lado del backend
               Todas las llamadas son as´
                                        ıncronas
               El modelo est´ totalmente desacoplado de la vista
                            a
               El controlador se puede reaprovechar entre distintas vistas




Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                              Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Manejando se˜ales (I)
            n

       Declarando la se˜al
                       n
       Se instala en la inicializaci´n de la clase (pref foo class init)
                                    o

       jmp_mplayer_signals[ERROR] = g_signal_new ("error",
                                       G_TYPE_FROM_CLASS (klass),
                                       G_SIGNAL_RUN_LAST,
                                       0,
                                       NULL,
                                       NULL,
                                       g_cclosure_marshal_VOID__STRING,
                                       G_TYPE_NONE,
                                       1,
                                       G_TYPE_STRING);




Sim´n Pena
   o                                             M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                  a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Manejando se˜ales (y II)
            n
       Emisi´n
            o
       Se env´ la se˜al de acuerdo a la l´gica de la aplicaci´n (aqu´ al recibir
              ıa     n                   o                   o      ı,
       un error en gstreamer)

       g_signal_emit (self, jmp_mplayer_signals[ERROR], 0, error_message);



       Conexi´n
             o
       Nos conectamos a la se˜al en el cliente que use el componente (que
                             n
       podr´ decidir qu´ comportamiento aplicar en funci´n de los valores
            a          e                                  o
       recibidos)

       g_signal_connect (jmplayer, "error", G_CALLBACK (error_callback), NULL);



Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Marshallers y GClosures (I)


               Los GClosures permiten representar funciones de callback.
               Existe un n´mero de GClosures predefinidos
                          u
                     g cclosure marshal VOID VOID
                     g cclosure marshal VOID BOOLEAN
                     ...
               Es habitual querer callbacks no predefinidos ¿C´mo?
                                                             o
               Usando glib-genmarshal




Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Marshallers y GClosures (I)


               Los GClosures permiten representar funciones de callback.
               Existe un n´mero de GClosures predefinidos
                          u
                     g cclosure marshal VOID VOID
                     g cclosure marshal VOID BOOLEAN
                     ...
               Es habitual querer callbacks no predefinidos ¿C´mo?
                                                             o
               Usando glib-genmarshal




Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Marshallers y GClosures (I)


               Los GClosures permiten representar funciones de callback.
               Existe un n´mero de GClosures predefinidos
                          u
                     g cclosure marshal VOID VOID
                     g cclosure marshal VOID BOOLEAN
                     ...
               Es habitual querer callbacks no predefinidos ¿C´mo?
                                                             o
               Usando glib-genmarshal




Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                           Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Marshallers y GClosures (II)
       glib-genmarshal
               Permite crear GClosures personalizados
               Recibe como entrada una lista
               RETURN VALUE : ARG1 , ARGi , ARGN

       Fichero marshal.list

       VOID:INT64,INT64
       VOID:STRING,POINTER
       VOID:STRING,UINT,POINTER



Sim´n Pena
   o                                          M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                               a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                           Desarrollando JaMp                                           Futuro



Manejando se˜ales
            n



Marshallers y GClosures (y III)
       Soporte en autotools
       jmp-marshal.h: marshal.list
       glib-genmarshal --header --prefix=jmp_marshal marshal.list > $@

       jmp-marshal.c: marshal.list
       glib-genmarshal --body --prefix=jmp_marshal marshal.list > $@



       Us´ndolo en una se˜al
         a               n
       ..., jmp_marshal_VOID__INT64_INT64, G_TYPE_NONE,
            2, G_TYPE_INT64, G_TYPE_INT64, NULL);

       static void
       tick_cb (JmpMplayer *jmplayer, gint64 position, gint64 duration,
                      gpointer user_data)

Sim´n Pena
   o                                          M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                               a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Accediendo a servicios web



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Accediendo a servicios web



Accediendo a Jamendo (I)
Usando libsoup

       Encolando un mensaje
       Encolamos una petici´n para comunicarnos de forma as´
                           o                               ıncrona
       ...
       soup_session_queue_message (session, msg, process_response, cbdata);
       ...


       Recibiendo la respuesta
       Una vez recibida la respuesta, se gestionar´ aqu´
                                                  a    ı
       static void
       process_response (SoupSession *session, SoupMessage *msg,
           gpointer user_data);


Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                Desarrollando JaMp                                           Futuro



Accediendo a servicios web



Accediendo a Jamendo (II)
Analizando la respuesta: usando libxml2

       static GList*
       parse_xml (const char *buffer, int length, JmpRelation relation)
       {
               xmlDocPtr doc = xmlReadMemory (buffer, length, NULL, NULL,
                                              XML_PARSE_NOBLANKS | XML_PARSE_RECOVER);
               if (!doc) return NULL;

                   GList *result = NULL;

                   xmlXPathContextPtr context = xmlXPathNewContext (doc);

                   /* xpath is of the form "/data/album" */
                   xmlXPathObjectPtr xpath_obj =
                           xmlXPathEvalExpression (vos[relation].xpath, context);
                   if (!xpath_obj) goto bail;
                   ...

Sim´n Pena
   o                                               M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                    a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                        Desarrollando JaMp                                           Futuro



Accediendo a servicios web



Accediendo a Jamendo (y III)
Analizando la respuesta: usando libxml2

             xmlNodeSetPtr nodeset = xpath_obj->nodesetval;
             if (nodeset->nodeNr > 0)
                     result = generate_list (nodeset, relation);

             /* generate_list */
             for (i = 0; i < nodes->nodeNr; i++) {
                     xmlNodePtr node = nodes->nodeTab[i];
                     if (node->type == XML_ELEMENT_NODE) {
                             GObject *item = generate_vo (node->children, relation);
                             if (item)
                                     list = g_list_prepend (list, item);
                     }
             }

             /* generate_vo */
             for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
                      if (cur_node->type == XML_ELEMENT_NODE) {
                              char *value = xmlNodeGetContent(cur_node);
                              item_set (item, cur_node->name, value, relation);




Sim´n Pena
   o                                                       M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                            a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Utilizando D-Bus


       Pasos
               Crear una interfaz XML exponiendo los m´todos
                                                      e
               Crear un servicio que implemente la interfaz, empleando
               D-Bus GLib
               Integrar en autotools
               Acceder desde Python




Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                      Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Utilizando D-Bus (II)
Definiendo una interfaz

       <?xml version="1.0" encoding="UTF-8" ?>
       <!DOCTYPE node PUBLIC
         "-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
         "http://standards.freedesktop.org/dbus/1.0/introspect.dtd">
       <node name="/">
         <interface name="org.mswl.jamp">
           <method name="Play">
           </method>
           <method name="GetVolume">
             <arg type="d" name="volume" direction="out" />
           </method>
           <method name="Seek">
             <arg type="x" name="seek_position" direction="in" />
           </method>
           <signal name="tick">
             <arg type="x" name="position" />
             <arg type="x" name="duration" />
           </signal>
         </interface>
       </node>



Sim´n Pena
   o                                                     M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                          a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                      Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Utilizando D-Bus (III)
Implementando la interfaz

       #include <dbus/dbus-glib.h>
       ...
       connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
       ...
       #include <dbus/dbus-glib-bindings.h>
       ...
       gboolean
       jmp_mplayer_service_seek (JmpMplayerService *self, gint64 seek_position,
                                 GError **error)
       {
               return jmp_mplayer_seek (self->priv->player, seek_position);
       }
       ...
       gboolean
       jmp_mplayer_service_get_volume (JmpMplayerService *self, double *volume,
                                       GError **error)
       {
               *volume = jmp_mplayer_get_volume (self->priv->player);
               return TRUE;
       }



Sim´n Pena
   o                                                     M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                          a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                           Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Utilizando D-Bus (III)
Configurando D-Bus


       ...
       DBusGProxy *proxy = dbus_g_proxy_new_for_name (self->priv->connection,
                                          DBUS_SERVICE_DBUS,
                                          DBUS_PATH_DBUS,
                                          DBUS_INTERFACE_DBUS);
       ...
       org_freedesktop_DBus_request_name (proxy,
                                       MPLAYER_SERVICE_NAME,
                                       0, &request_name_result,
                                       &error));
       ...
       dbus_g_connection_register_g_object (self->priv->connection,
                                            MPLAYER_SERVICE_OBJECT_PATH,
                                            G_OBJECT (self));



Sim´n Pena
   o                                          M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                               a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                      Desarrollando JaMp                                           Futuro



Utilizando D-Bus



Utilizando D-Bus (y IV)
Conectando desde Python


       bus = dbus.SessionBus()

       class PlaybackManager:
           def __init__(self, tick_cb=None):
               self._bus = bus
               self._tick_cb = tick_cb
               player_object = self._bus.get_object("org.mswl.jamp",
                                                    "/Player")
               self._player_interface = dbus.Interface(player_object,
                                                 dbus_interface="org.mswl.jamp")
               if self._tick_cb:
                   self._player_interface.connect_to_signal("tick",
                                                            self._tick_cb)
           def seek(self, value):
               self._player_interface.Seek(value)
       ...
       def tick_signal_handler(self, position, duration):
           ...




Sim´n Pena
   o                                                     M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                          a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Port para Maemo



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



Port para Maemo



Port para Maemo
¿Qu´ es Maemo?
   e




               Plataforma que corre en dispositivos m´viles de Nokia
                                                     o
                     Maemo 3: Internet Tablet 770
                     Maemo 4: Internet Tablets N800 y N810
                     Maemo 5: N900
               Alrededor de los dispositivos se forma la comunidad Maemo
Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                           Desarrollando JaMp                                           Futuro



Port para Maemo



Port para Maemo
¿En qu´ fijarse?
      e

       Se utiliza Hildon
       hildon.StackableWindow
       hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
       hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT,
                           hildon.BUTTON_ARRANGEMENT_HORIZONTAL)



       La aplicaci´n no debe parecer bloqueada
                  o
       hildon.hildon_gtk_window_set_progress_indicator(self, True)
       banner = hildon.hildon_banner_show_information(self, "", message)
       banner.set_timeout(milliseconds)



Sim´n Pena
   o                                          M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                               a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                           Desarrollando JaMp                                           Futuro



Port para Maemo



Port para Maemo
¿En qu´ fijarse?
      e

       Se utiliza Hildon
       hildon.StackableWindow
       hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
       hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT,
                           hildon.BUTTON_ARRANGEMENT_HORIZONTAL)



       La aplicaci´n no debe parecer bloqueada
                  o
       hildon.hildon_gtk_window_set_progress_indicator(self, True)
       banner = hildon.hildon_banner_show_information(self, "", message)
       banner.set_timeout(milliseconds)



Sim´n Pena
   o                                          M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                               a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                                  Desarrollando JaMp                                           Futuro



Port para Maemo



Port para Maemo
Claridad y sencillez, “finger friendly”




                             Figura: Pantalla de bienvenida y b´squeda
                                                               u



Sim´n Pena
   o                                                 M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                      a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                       Desarrollando JaMp                                           Futuro



Objetivos



Contenido
       Introducci´n
                 o
           ¿Qu´ es?
              e
           Arquitectura
       Desarrollando JaMp
          Manejando se˜ales
                       n
          Accediendo a servicios web
          Utilizando D-Bus
          Port para Maemo
       Futuro
          Objetivos
           ´
          ¡Unete!

Sim´n Pena
   o                                      M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                           a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Objetivos



Objetivos futuros (I)

       Distribuci´n
                 o
               Empaquetar JaMp
               Crear un repositorio PPA para Ubuntu

       Interacci´n con Jamendo
                o
               Aumentar las APIs implementadas
               Emplear Grilo para el acceso a los datos



Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                            Desarrollando JaMp                                           Futuro



Objetivos



Objetivos futuros (y II)

       Ports
               Completar port para Maemo
               Emplear MAFW en Maemo
               Llevar a otras plataformas

       Otras posibilidades
               Emplear otros toolkits gr´ficos
                                        a



Sim´n Pena
   o                                           M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                          Desarrollando JaMp                                           Futuro



 ´
¡Unete!



Contenido
          Introducci´n
                    o
              ¿Qu´ es?
                 e
              Arquitectura
          Desarrollando JaMp
             Manejando se˜ales
                          n
             Accediendo a servicios web
             Utilizando D-Bus
             Port para Maemo
          Futuro
             Objetivos
              ´
             ¡Unete!

Sim´n Pena
   o                                         M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                              a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                             Desarrollando JaMp                                           Futuro



 ´
¡Unete!


 ´
¡Unete a nosotros!

          ¿Por qu´?
                 e
               Te interesa Jamendo
               Te interesa conocer las tecnolog´ que usamos
                                               ıas
               Te interesa llevar JaMp a una nueva plataforma
               Quieres corregir alg´n error que hayas visto hoy ;)
                                   u

          Descarga el c´digo http://gitorious.org/mswl2010/jamp
                       o
          Ponte en contacto con nosotros jamp-devel@googlegroups.com



Sim´n Pena
   o                                            M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                 a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                      Desarrollando JaMp                                           Futuro



 ´
¡Unete!



¡¡Gracias!!




Sim´n Pena
   o                                     M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                          a                             o           n
JaMp - Un cliente para Jamendo
Introducci´n
          o                              Desarrollando JaMp                                           Futuro



 ´
¡Unete!



Referencias



                 Se˜ales http://library.gnome.org/devel/gobject/stable/signal.html
                   n
                  D-Bus http://www.freedesktop.org/wiki/Software/dbus
                  Hildon http://wiki.maemo.org/Hildon
               PyMaemo http://pymaemo.garage.maemo.org/,
                       http://wiki.maemo.org/PyMaemo/UI_tutorial




Sim´n Pena
   o                                             M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC
                                                  a                             o           n
JaMp - Un cliente para Jamendo

Más contenido relacionado

Destacado (20)

Tipos basicos de java
Tipos basicos de javaTipos basicos de java
Tipos basicos de java
 
Licencias
LicenciasLicencias
Licencias
 
Nuevo acuerdo de capital ro
Nuevo acuerdo de capital   roNuevo acuerdo de capital   ro
Nuevo acuerdo de capital ro
 
GRATITUD
GRATITUDGRATITUD
GRATITUD
 
Dios y su persona
Dios y su personaDios y su persona
Dios y su persona
 
Bicentenario
BicentenarioBicentenario
Bicentenario
 
Somos mutantes
Somos mutantesSomos mutantes
Somos mutantes
 
Ucv sesion 15 diseño optimiz -redes
Ucv sesion 15 diseño optimiz -redesUcv sesion 15 diseño optimiz -redes
Ucv sesion 15 diseño optimiz -redes
 
Cultura de pau al villena
Cultura de pau al villenaCultura de pau al villena
Cultura de pau al villena
 
La sintaxi visual (2)
La sintaxi visual (2)La sintaxi visual (2)
La sintaxi visual (2)
 
Tarea 8
Tarea 8Tarea 8
Tarea 8
 
Sistemas de innovación 2 MCI
Sistemas de innovación 2 MCISistemas de innovación 2 MCI
Sistemas de innovación 2 MCI
 
100716 analisis bvc v1.0 ar
100716 analisis bvc v1.0 ar100716 analisis bvc v1.0 ar
100716 analisis bvc v1.0 ar
 
Minería a cielo abierto
Minería a cielo abiertoMinería a cielo abierto
Minería a cielo abierto
 
Trabajo práctico
Trabajo prácticoTrabajo práctico
Trabajo práctico
 
Clases para matrimonio 6
Clases para matrimonio 6Clases para matrimonio 6
Clases para matrimonio 6
 
100726 puntos claves v1.0 ar
100726 puntos claves v1.0 ar100726 puntos claves v1.0 ar
100726 puntos claves v1.0 ar
 
Las 5s
Las 5sLas 5s
Las 5s
 
Ucv 2014 1_ads clase 13
Ucv 2014 1_ads clase 13Ucv 2014 1_ads clase 13
Ucv 2014 1_ads clase 13
 
Pagina principal
Pagina principalPagina principal
Pagina principal
 

Último

9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Último (16)

9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

Jamp: Un cliente para Jamendo

  • 1. Introducci´n o Desarrollando JaMp Futuro JaMp - Un cliente para Jamendo Sim´n Pena y Alumnos del M´ster en Software Libre o a M´ster en Software Libre, 2009-2010. Edici´n de A Coru˜a a o n Igalia - Universidad Rey Juan Carlos GUADEC-ES – 23 de julio de 2010 Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 2. Introducci´n o Desarrollando JaMp Futuro Licencia Esta obra est´ bajo una licencia Attribution-ShareAlike 3.0 Spain a de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/3.0/es/ o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 3. Introducci´n o Desarrollando JaMp Futuro Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 4. Introducci´n o Desarrollando JaMp Futuro ¿Qu´ es? e Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 5. Introducci´n o Desarrollando JaMp Futuro ¿Qu´ es? e ¿Qu´ es JaMp? e JaMp Ejercicio pr´ctico en el m´dulo de desarrollo del M´ster a o a Software Libre Cliente para Jamendo para la plataforma GNOME Git como sistema de control de versiones Env´ e integraci´n de parches ıo o Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 6. Introducci´n o Desarrollando JaMp Futuro ¿Qu´ es? e ¿Qu´ es Jamendo? e Comunidad de m´sica libre, legal e ilimitada, publicada bajo u licencias Creative Commons 36299 ´lbumes publicados a 226880 Rese˜as de ´lbumes n a 809051 miembros activos Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 7. Introducci´n o Desarrollando JaMp Futuro ¿Qu´ es? e ¿Por qu´ JaMp? e Intereses did´cticos a Punto de entrada a la plataforma Familiarizarse con tecnolog´ habituales ıas Acceso y manipulaci´n de contenidos web o Reproducci´n de los contenidos multimedia o Intereses pr´cticos a Cliente dedicado (frente a usar plugins) Arquitectura solida y modular Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 8. Introducci´n o Desarrollando JaMp Futuro Arquitectura Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 9. Introducci´n o Desarrollando JaMp Futuro Arquitectura Arquitectura utilizada Patr´n arquitect´nico Model-View-Controller o o Un backend para la recuperaci´n de informaci´n de Jamendo o o y la reproducci´n multimedia o Un frontend para la presentaci´n de la informaci´n obtenida y o o la gesti´n del la reproducci´n o o Interconexi´n mediante D-Bus o Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 10. Introducci´n o Desarrollando JaMp Futuro Arquitectura Backend Desarrollado en C con GObject Un proveedor de datos Accede a Jamendo usando libsoup Manipula los datos recibidos usando libxml Expone un m´todo Query e Un gestor multimedia Permite la reproducci´n de los contenidos usando gstreamer o Expone m´todos Play, Pause, notificaci´n de progreso. . . e o Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 11. Introducci´n o Desarrollando JaMp Futuro Arquitectura Frontend Figura: Clientes buscando “rock” Desarrollado en Python Un cliente para GNOME, desarrollado con Glade Un cliente para Maemo, usando Hildon Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 12. Introducci´n o Desarrollando JaMp Futuro Arquitectura Conexi´n mediante D-Bus o Se usa D-Bus GLib en el lado del backend Todas las llamadas son as´ ıncronas El modelo est´ totalmente desacoplado de la vista a El controlador se puede reaprovechar entre distintas vistas Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 13. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 14. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Manejando se˜ales (I) n Declarando la se˜al n Se instala en la inicializaci´n de la clase (pref foo class init) o jmp_mplayer_signals[ERROR] = g_signal_new ("error", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 15. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Manejando se˜ales (y II) n Emisi´n o Se env´ la se˜al de acuerdo a la l´gica de la aplicaci´n (aqu´ al recibir ıa n o o ı, un error en gstreamer) g_signal_emit (self, jmp_mplayer_signals[ERROR], 0, error_message); Conexi´n o Nos conectamos a la se˜al en el cliente que use el componente (que n podr´ decidir qu´ comportamiento aplicar en funci´n de los valores a e o recibidos) g_signal_connect (jmplayer, "error", G_CALLBACK (error_callback), NULL); Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 16. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Marshallers y GClosures (I) Los GClosures permiten representar funciones de callback. Existe un n´mero de GClosures predefinidos u g cclosure marshal VOID VOID g cclosure marshal VOID BOOLEAN ... Es habitual querer callbacks no predefinidos ¿C´mo? o Usando glib-genmarshal Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 17. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Marshallers y GClosures (I) Los GClosures permiten representar funciones de callback. Existe un n´mero de GClosures predefinidos u g cclosure marshal VOID VOID g cclosure marshal VOID BOOLEAN ... Es habitual querer callbacks no predefinidos ¿C´mo? o Usando glib-genmarshal Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 18. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Marshallers y GClosures (I) Los GClosures permiten representar funciones de callback. Existe un n´mero de GClosures predefinidos u g cclosure marshal VOID VOID g cclosure marshal VOID BOOLEAN ... Es habitual querer callbacks no predefinidos ¿C´mo? o Usando glib-genmarshal Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 19. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Marshallers y GClosures (II) glib-genmarshal Permite crear GClosures personalizados Recibe como entrada una lista RETURN VALUE : ARG1 , ARGi , ARGN Fichero marshal.list VOID:INT64,INT64 VOID:STRING,POINTER VOID:STRING,UINT,POINTER Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 20. Introducci´n o Desarrollando JaMp Futuro Manejando se˜ales n Marshallers y GClosures (y III) Soporte en autotools jmp-marshal.h: marshal.list glib-genmarshal --header --prefix=jmp_marshal marshal.list > $@ jmp-marshal.c: marshal.list glib-genmarshal --body --prefix=jmp_marshal marshal.list > $@ Us´ndolo en una se˜al a n ..., jmp_marshal_VOID__INT64_INT64, G_TYPE_NONE, 2, G_TYPE_INT64, G_TYPE_INT64, NULL); static void tick_cb (JmpMplayer *jmplayer, gint64 position, gint64 duration, gpointer user_data) Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 21. Introducci´n o Desarrollando JaMp Futuro Accediendo a servicios web Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 22. Introducci´n o Desarrollando JaMp Futuro Accediendo a servicios web Accediendo a Jamendo (I) Usando libsoup Encolando un mensaje Encolamos una petici´n para comunicarnos de forma as´ o ıncrona ... soup_session_queue_message (session, msg, process_response, cbdata); ... Recibiendo la respuesta Una vez recibida la respuesta, se gestionar´ aqu´ a ı static void process_response (SoupSession *session, SoupMessage *msg, gpointer user_data); Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 23. Introducci´n o Desarrollando JaMp Futuro Accediendo a servicios web Accediendo a Jamendo (II) Analizando la respuesta: usando libxml2 static GList* parse_xml (const char *buffer, int length, JmpRelation relation) { xmlDocPtr doc = xmlReadMemory (buffer, length, NULL, NULL, XML_PARSE_NOBLANKS | XML_PARSE_RECOVER); if (!doc) return NULL; GList *result = NULL; xmlXPathContextPtr context = xmlXPathNewContext (doc); /* xpath is of the form "/data/album" */ xmlXPathObjectPtr xpath_obj = xmlXPathEvalExpression (vos[relation].xpath, context); if (!xpath_obj) goto bail; ... Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 24. Introducci´n o Desarrollando JaMp Futuro Accediendo a servicios web Accediendo a Jamendo (y III) Analizando la respuesta: usando libxml2 xmlNodeSetPtr nodeset = xpath_obj->nodesetval; if (nodeset->nodeNr > 0) result = generate_list (nodeset, relation); /* generate_list */ for (i = 0; i < nodes->nodeNr; i++) { xmlNodePtr node = nodes->nodeTab[i]; if (node->type == XML_ELEMENT_NODE) { GObject *item = generate_vo (node->children, relation); if (item) list = g_list_prepend (list, item); } } /* generate_vo */ for (cur_node = a_node; cur_node; cur_node = cur_node->next) { if (cur_node->type == XML_ELEMENT_NODE) { char *value = xmlNodeGetContent(cur_node); item_set (item, cur_node->name, value, relation); Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 25. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 26. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Utilizando D-Bus Pasos Crear una interfaz XML exponiendo los m´todos e Crear un servicio que implemente la interfaz, empleando D-Bus GLib Integrar en autotools Acceder desde Python Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 27. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Utilizando D-Bus (II) Definiendo una interfaz <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-Bus Object Introspection 1.0//EN" "http://standards.freedesktop.org/dbus/1.0/introspect.dtd"> <node name="/"> <interface name="org.mswl.jamp"> <method name="Play"> </method> <method name="GetVolume"> <arg type="d" name="volume" direction="out" /> </method> <method name="Seek"> <arg type="x" name="seek_position" direction="in" /> </method> <signal name="tick"> <arg type="x" name="position" /> <arg type="x" name="duration" /> </signal> </interface> </node> Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 28. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Utilizando D-Bus (III) Implementando la interfaz #include <dbus/dbus-glib.h> ... connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); ... #include <dbus/dbus-glib-bindings.h> ... gboolean jmp_mplayer_service_seek (JmpMplayerService *self, gint64 seek_position, GError **error) { return jmp_mplayer_seek (self->priv->player, seek_position); } ... gboolean jmp_mplayer_service_get_volume (JmpMplayerService *self, double *volume, GError **error) { *volume = jmp_mplayer_get_volume (self->priv->player); return TRUE; } Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 29. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Utilizando D-Bus (III) Configurando D-Bus ... DBusGProxy *proxy = dbus_g_proxy_new_for_name (self->priv->connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); ... org_freedesktop_DBus_request_name (proxy, MPLAYER_SERVICE_NAME, 0, &request_name_result, &error)); ... dbus_g_connection_register_g_object (self->priv->connection, MPLAYER_SERVICE_OBJECT_PATH, G_OBJECT (self)); Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 30. Introducci´n o Desarrollando JaMp Futuro Utilizando D-Bus Utilizando D-Bus (y IV) Conectando desde Python bus = dbus.SessionBus() class PlaybackManager: def __init__(self, tick_cb=None): self._bus = bus self._tick_cb = tick_cb player_object = self._bus.get_object("org.mswl.jamp", "/Player") self._player_interface = dbus.Interface(player_object, dbus_interface="org.mswl.jamp") if self._tick_cb: self._player_interface.connect_to_signal("tick", self._tick_cb) def seek(self, value): self._player_interface.Seek(value) ... def tick_signal_handler(self, position, duration): ... Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 31. Introducci´n o Desarrollando JaMp Futuro Port para Maemo Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 32. Introducci´n o Desarrollando JaMp Futuro Port para Maemo Port para Maemo ¿Qu´ es Maemo? e Plataforma que corre en dispositivos m´viles de Nokia o Maemo 3: Internet Tablet 770 Maemo 4: Internet Tablets N800 y N810 Maemo 5: N900 Alrededor de los dispositivos se forma la comunidad Maemo Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 33. Introducci´n o Desarrollando JaMp Futuro Port para Maemo Port para Maemo ¿En qu´ fijarse? e Se utiliza Hildon hildon.StackableWindow hildon.GtkButton(gtk.HILDON_SIZE_AUTO) hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_HORIZONTAL) La aplicaci´n no debe parecer bloqueada o hildon.hildon_gtk_window_set_progress_indicator(self, True) banner = hildon.hildon_banner_show_information(self, "", message) banner.set_timeout(milliseconds) Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 34. Introducci´n o Desarrollando JaMp Futuro Port para Maemo Port para Maemo ¿En qu´ fijarse? e Se utiliza Hildon hildon.StackableWindow hildon.GtkButton(gtk.HILDON_SIZE_AUTO) hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_HORIZONTAL) La aplicaci´n no debe parecer bloqueada o hildon.hildon_gtk_window_set_progress_indicator(self, True) banner = hildon.hildon_banner_show_information(self, "", message) banner.set_timeout(milliseconds) Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 35. Introducci´n o Desarrollando JaMp Futuro Port para Maemo Port para Maemo Claridad y sencillez, “finger friendly” Figura: Pantalla de bienvenida y b´squeda u Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 36. Introducci´n o Desarrollando JaMp Futuro Objetivos Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 37. Introducci´n o Desarrollando JaMp Futuro Objetivos Objetivos futuros (I) Distribuci´n o Empaquetar JaMp Crear un repositorio PPA para Ubuntu Interacci´n con Jamendo o Aumentar las APIs implementadas Emplear Grilo para el acceso a los datos Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 38. Introducci´n o Desarrollando JaMp Futuro Objetivos Objetivos futuros (y II) Ports Completar port para Maemo Emplear MAFW en Maemo Llevar a otras plataformas Otras posibilidades Emplear otros toolkits gr´ficos a Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 39. Introducci´n o Desarrollando JaMp Futuro ´ ¡Unete! Contenido Introducci´n o ¿Qu´ es? e Arquitectura Desarrollando JaMp Manejando se˜ales n Accediendo a servicios web Utilizando D-Bus Port para Maemo Futuro Objetivos ´ ¡Unete! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 40. Introducci´n o Desarrollando JaMp Futuro ´ ¡Unete! ´ ¡Unete a nosotros! ¿Por qu´? e Te interesa Jamendo Te interesa conocer las tecnolog´ que usamos ıas Te interesa llevar JaMp a una nueva plataforma Quieres corregir alg´n error que hayas visto hoy ;) u Descarga el c´digo http://gitorious.org/mswl2010/jamp o Ponte en contacto con nosotros jamp-devel@googlegroups.com Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 41. Introducci´n o Desarrollando JaMp Futuro ´ ¡Unete! ¡¡Gracias!! Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo
  • 42. Introducci´n o Desarrollando JaMp Futuro ´ ¡Unete! Referencias Se˜ales http://library.gnome.org/devel/gobject/stable/signal.html n D-Bus http://www.freedesktop.org/wiki/Software/dbus Hildon http://wiki.maemo.org/Hildon PyMaemo http://pymaemo.garage.maemo.org/, http://wiki.maemo.org/PyMaemo/UI_tutorial Sim´n Pena o M´ster en Software Libre. Edici´n de A Coru˜a. Igalia – URJC a o n JaMp - Un cliente para Jamendo