Archive for the ‘planet.igalia.com’ Category

Pestañas laterales en Empathy

14:55 hrs.

Vamos directamente a la parte interesante de esta entrada.

Si usas Ubuntu Saucy 13.10 y quieres tener pestañas laterales en Empathy, sólo tienes que ejecutar los comandos siguientes:


$ sudo add-apt-repository ppa:tanty/ppa

Si además de Ubuntu Saucy 13.10 también utilizas el PPA del GNOME3 Team, también tienes que ejecutar:


$ sudo add-apt-repository ppa:tanty/gnome3

Sin más, actualiza tus repositorios, actualiza Empathy y escoge la configuración adecuada:


$ sudo apt-get update && sudo apt-get install empathy
...
$ gsettings set org.gnome.Empathy.conversation tab-position 'left'

Lo siguiente es abrir una ventana de chat desde una nueva instancia de ejecución de Empathy. Esta es una captura de algo similar a lo que deberías de ver:

Side tabs in Empathy by ::Tanty::
Side tabs in Empathy, a screenshot by ::Tanty:: on Flickr.

Motivación

Desde hace mucho tiempo soy usuario de Jabber y Empathy. Los uso a diario en mis comunicaciones y en Igalia tenemos también salas internas que usamos para coordinarnos. Debido a la cantidad de salas en las que estoy habitualmente, la ventana de chat de Empathy no es capaz de mostrar todas las pestañas en la barra superior de las conversaciones.

Esto me obliga, o bien a abrir diferentes ventanas en las que repartir las pestañas, o bien a navegar entre las pestañas de la ventana en busca de alguna actualización interesante. Una tarea bastante molesta :) .

Hace tiempo fue reportado el bug #586145 que pide tener la posibilidad de posicionar las pestañas no sólo en una barra superior sino, especialmente, también en los laterales.

Por esto, decidí retomar la propuesta de parche existente y hacer unos cuantos pequeños cambios sobre el trabajo previo de Neil Roberts completando la posibilidad de tener estas pestañas laterales.

Con esta característica nueva es posible cambiar la posición de las pestañas sólo con cambiar la configuración pertinente ya que ambas están conectadas. Para posicionar las pestañas ‘arriba’, a la ‘izquierda’, ‘abajo’ o a la ‘derecha’ respectivamente, sólo tenemos que ejecutar:


$ gsettings set org.gnome.Empathy.conversation tab-position 'top'
$ gsettings set org.gnome.Empathy.conversation tab-position 'left'
$ gsettings set org.gnome.Empathy.conversation tab-position 'bottom'
$ gsettings set org.gnome.Empathy.conversation tab-position 'right'

Tras los cambios, he actualizado el parche propuesto y ya sólo estoy esperando pasar la revisión e integrarlos en el código.

Esta característica es una pequeñísima mejora del gran trabajo realizado por varios desarrolladores de GNOME a lo largo de los años. Sin embargo, significa una importante diferencia en mi uso cotidiano y es por esto que he decidido compartirla lo más pronto posible por si hubiera más gente interesada ya que llevará un tiempo hasta que alcance a las principales distribuciones. Para ello, he migrado el parche a la versión de Empathy que estoy utilizando en mi Ubuntu Saucy 13.10.

Si quieres probarla, simplemente sigue las instrucciones que he escrito al principio de esta entrada.

Notas finales

Además de Empathy, también puedes encontrar en mis PPAs:

  • Una versión personalizada del paquete icecc oficial que no funciona. En ella he aplicado los parches que corrigen el bug LP#1182491.
  • Una versión personalizada de webkitgtk en la que he aplicado los parches que arreglan el bug WK#115650. Estos cambios aceleran sustancialmente la velocidad a la que se abren pestañas nuevas en Web.

Que disfrutes de Emapthy!

Actualización: Recientemente he añadido las versiones parcheadas de empathy también para Ubuntu Trusty 14.04.

Cómo publicar rápidamente en tu PPA de Ubuntu

02:57 hrs.

Esta entrada es, principalmente, unas cuantas notas personales con instrucciones para publicar rápidamente un paquete (habitualmente parcheado) en mis propios PPAs.

Parcheando un paquete existente

Lo primero es descargar las fuentes del paquete del repositorio que está proporcionando la versión que queremos parchear y cuyo binario tenemos instalado en el sistema.

Por ejemplo, para parchear webkitgtk, si el paquete que está instalado procede directamente de Ubuntu, sólo tendremos que comprobar que tenemos el repositorio de fuentes oficial de Ubuntu. Sin embargo, si el paquete procede de otro PPA, tendremos que comprobar que también tenemos el repositorio con las fuentes de ese mismo PPA. De no ser así, tendremos que descargar los ficheros necesarios de forma manual. Asumamos que el paquete que tenemos instalado procede del PPA del GNOME3 Team:


$ cd ~/ppa/ && mkdir -p webkitgtk/gnome3 && cd webkitgtk/gnome3
$ apt-get source webkitgtk
Reading package lists... Done
Building dependency tree
Reading state information... Done
NOTICE: 'webkitgtk' packaging is maintained in the 'Git' version control system at:
git://git.debian.org/git/pkg-webkit/webkit.git
Need to get 9,440 kB of source archives.
Get:1 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu/ saucy/main webkitgtk 2.3.2-1ubuntu6~saucy1 (tar) [9,353 kB]
Get:2 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu/ saucy/main webkitgtk 2.3.2-1ubuntu6~saucy1 (diff) [82.2 kB]
Get:3 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu/ saucy/main webkitgtk 2.3.2-1ubuntu6~saucy1 (dsc) [4,577 B]
Fetched 9,440 kB in 3s (2,769 kB/s)
gpgv: Signature made Sun 22 Dec 2013 01:34:25 AM EET using RSA key ID 153ACABA
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./webkitgtk_2.3.2-1ubuntu6~saucy1.dsc
dpkg-source: info: extracting webkitgtk in webkitgtk-2.3.2
dpkg-source: info: unpacking webkitgtk_2.3.2.orig.tar.xz
dpkg-source: info: unpacking webkitgtk_2.3.2-1ubuntu6~saucy1.debian.tar.gz
dpkg-source: info: applying 02_notebook_scroll.patch
dpkg-source: info: applying aarch64.patch
dpkg-source: info: applying fix-ppc.diff
dpkg-source: info: applying fix-aarch64.patch
dpkg-source: info: applying remove-use-lockfree-threadsaferefcounted.patch
dpkg-source: info: applying no-jit-build-failure.patch
dpkg-source: info: applying 0001-GTK-Fails-to-build-with-freetype-2.5.1.patch
dpkg-source: info: applying disable-jit-harder.patch
dpkg-source: info: applying fix-llint-c-loop.patch
dpkg-source: info: applying fix-armv7.patch
dpkg-source: info: applying bugzilla_clear_surface.patch
dpkg-source: info: applying ppc64el.patch
$ cd webkitgtk-2.3.2

Por si acaso, algo que me gusta hacer es añadir el código descargado a un sistema de control de versiones local con git:


$ git init
$ git add *
$ git commit -m "Initial commit"
...

Ahora es el momento de realizar los cambios al código fuente. Esta es mi principal razón por la que git puede resultarnos útil si es que los cambios no son triviales y necesitamos realizar algo de trabajo para tener una versión funcional. Una vez que hemos finalizado los cambios debemos añadirlos al paquete debian como un parche adicional al código fuente original. Esto lo haremos con dpkg-source:


$ dpkg-source --commit
dpkg-source: info: local changes detected, the modified files are:
webkitgtk-2.3.2/Source/WebKit2/GNUmakefile.am
webkitgtk-2.3.2/Source/WebKit2/GNUmakefile.list.am
webkitgtk-2.3.2/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.h
webkitgtk-2.3.2/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
webkitgtk-2.3.2/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp
webkitgtk-2.3.2/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.h
webkitgtk-2.3.2/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp
Enter the desired patch name: 0001-GTK-WK2-Blocks-when-fetching-plugins-information.patch
...

Escribimos el nombre del parche y la descripción de los cambios realizados:


$ cat debian/patches/0001-GTK-WK2-Blocks-when-fetching-plugins-information.patch
Description: [GTK][WK2] Blocks when fetching plugins information

https://bugs.webkit.org/show_bug.cgi?id=115650

.
Patch by Carlos Garcia Campos.
Reviewed by Gustavo Noronha Silva.
.
Use a persistent cache to store the plugins metadata to avoid
having to load all the plugins everytime a plugin is used for the
first time.
.
* GNUmakefile.am:
* GNUmakefile.list.am:
* Shared/Plugins/Netscape/NetscapePluginModule.h:
* Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
(WebKit::NetscapePluginModule::parseMIMEDescription): Make this
method public.
(WebKit::NetscapePluginModule::buildMIMEDescription): Added this
helper to build the MIME description string.
* UIProcess/Plugins/gtk/PluginInfoCache.cpp: Added.
(WebKit::PluginInfoCache::shared):
(WebKit::PluginInfoCache::PluginInfoCache):
(WebKit::PluginInfoCache::~PluginInfoCache):
(WebKit::PluginInfoCache::saveToFileIdleCallback):
(WebKit::PluginInfoCache::saveToFile):
(WebKit::PluginInfoCache::getPluginInfo):
(WebKit::PluginInfoCache::updatePluginInfo):
* UIProcess/Plugins/gtk/PluginInfoCache.h: Added.
* UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
(WebKit::PluginInfoStore::getPluginInfo): Check first if we have
metadata of the plugin in the cache and update the cache if we
loaded the plugin to get its metadata.
...

Finalmente, modificaremos la información de publicación añadiendo o incrementando el digito “non-maintainer”. Por ejemplo, para este caso la versión del código descargado es 2.3.2-1ubuntu6~saucy1 por lo que modificaremos la versión a 2.3.2-1ubuntu6~saucy1.1. Debemos también acordarnos de proporcionar el nombre adecuado de distribución o bien modificarlo al adecuado cuando estemos introduciendo el resumen de los cambios realizados. En este caso la distribución sería saucy. Comprueba también que estás utilizando la dirección de correo electrónico adecuada en el resumen de los cambios. En el caso de mis PPAs, uso mi cuenta personal:


$ DEBEMAIL="mi@cuenta-de.correo" dch -n -D saucy
$ cat debian/changelog
webkitgtk (2.3.2-1ubuntu6~saucy1.1) saucy; urgency=low

* Fixes #115650:
- debian/patches/0001-GTK-WK2-Blocks-when-fetching-plugins-information.patch

-- Andres Gomez <mi@cuenta-de.correo> Wed, 19 Mar 2014 14:26:19 +0200
...

Con esto habremos terminado de modificar el código fuente del paquete.

Construyendo el paquete con el código fuente

Sólo tenemos que tener en cuenta que, si tenemos más de una clave GPG, el firmado del paquete fallará, tal y como muestra la siguiente línea:


$ debuild -S -rfakeroot
...
Finished running lintian.
Now signing changes and any dsc files...
signfile webkitgtk_2.3.2-1ubuntu6~saucy1.1.dsc Andres Gomez <mi@cuenta-de.correo>
gpg: skipped "Andres Gomez <mi@cuenta-de.correo>": secret key not available
gpg: /tmp/debsign.vhpVY32w/webkitgtk_2.3.2-1ubuntu6~saucy1.1.dsc: clearsign failed: secret key not available
debsign: gpg error occurred! Aborting....
debuild: fatal error at line 1280:
running debsign failed

Debido a esto, tenemos que especificar el id de la clave a usar mediante el parámetro -k.

Además, si el código fuente del paquete no procede de uno de los repositorios oficiales de Ubuntu, tendremos que proporcionar el código fuente original para que también sea transferido al PPA. Esto lo haremos pasando el parámetro -sa. En nuestro ejemplo, como el código fuente proced del PPA del GNOME3 Team, el comando sería algo como:


$ debuild -S -sa -rfakeroot -k3FEA1034

Mientras que para otros paquetes que hayamos modificado a partir de fuentes que procedan directamente de uno de los repositorios oficiales de Ubuntu, usaremos:


$ debuild -S -rfakeroot -k3FEA1034

Construcción local opcional

Construir el paquete localmente no es un paso realmente necesario pero nos dirá si los cambios realizados están “rompiendo” la compilación.

La mejor manera de hacer esto de una manera confiable es mediante pbuilder.

Cuando usemos pbuilder nos tendremos que asegurar de que estamos usando los paquetes adecuados, no sólo los que proceden de los repositorios oficiales de Ubuntu, si no también que estamos usando los que proporcionan los PPAs de los cuales depende nuestro PPA y también los proporcionados por nuestro propio PPA.

Yo ya me he creado los ficheros comprimidos con los “chroot” necesarios con las distribuciones adecuadas para mis PPAs. Sin embargo, con el ánimo de mostrar un ejemplo, usaríamos un comando parecido al que sigue para crear este fichero comprimido si mi PPA objetivo fuese gnome3, que depende de mi otro PPA ppa y también del PPA gnome3 del GNOME3 Team:


$ sudo pbuilder --create --distribution saucy --mirror "http://fi.archive.ubuntu.com/ubuntu/" --othermirror "deb http://fi.archive.ubuntu.com/ubuntu/ saucy restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-updates main restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-proposed main restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-security main restricted universe multiverse|deb http://archive.canonical.com/ubuntu saucy partner|deb http://ppa.launchpad.net/tanty/ppa/ubuntu saucy main|deb http://ppa.launchpad.net/tanty/gnome3/ubuntu saucy main" --basetgz /<ruta_base_de_pbuilder>/saucy-gnome3.tgz --buildplace /<ruta_base_de_pbuilder>/build --aptcache /<ruta_base_de_pbuilder>/aptcache/

Utilizo <ruta_base_de_pbuilder> porque, por defecto, todo el proceso de la creación del fichero comprimido se realiza en /var y no siempre tengo el espacio necesario allí.

Una vez que el fichero comprimido ha sido creado y siguiendo nuestro ejemplo, construiríamos el paquete para el PPA objetivo gnome3 tal y como sigue:


$ sudo pbuilder --build --mirror "http://fi.archive.ubuntu.com/ubuntu/" --othermirror "deb http://fi.archive.ubuntu.com/ubuntu/ saucy main restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-updates main restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-proposed main restricted universe multiverse|deb http://fi.archive.ubuntu.com/ubuntu/ saucy-security main restricted universe multiverse|deb http://archive.canonical.com/ubuntu saucy partner|deb http://ppa.launchpad.net/tanty/ppa/ubuntu saucy main|deb http://ppa.launchpad.net/tanty/gnome3/ubuntu saucy main" --basetgz /<ruta_base_de_pbuilder>/saucy-gnome3.tgz --buildplace /<ruta_base_de_pbuilder>/build --aptcache /<ruta_base_de_pbuilder>/aptcache/ ../webkitgtk_2.3.2-1ubuntu6~saucy1.1.dsc

Ya sólo resta esperar y comprobar los resultados.

Publicando en el PPA

El último paso es transferir el paquete con los cambios a nuestro PPA.

En mi caso, tengo un PPA para pruebas por cada PPA estable. Estos PPAs no están pensados para su utilización por el usuario de Ubuntu general sino, simplemente, para poder jugar con los cambios que realizo hasta que siento que son lo suficientemente estables como para ser publicados en mis PPAs estables. Por esto, los 4 PPAs que manejo son:

  • ppa: Donde publico los paquetes procedentes de repositorios oficiales de Ubuntu con cambios que me son útiles.
  • ppa-next: No dirigido al público general. Aquí tengo los paquetes inestables hasta que son suficientemente estables como para ser publicados en el PPA ppa.
  • gnome3: Donde publico los paquetes procedentes del PPA del GNOME3 Team con cambios que me son útiles.
  • gnome3-next: No dirigido al público general. Aquí tengo los paquetes inestables hasta que son suficientemente estables como para ser publicados en el PPA gnome3.

Durante el primer ciclo de desarrollo publico los cambios en mis PPAs inestables antes de publicarlos en los estables. Siguiendo nuestro ejemplo, el PPA en el que publicaría por primera vez sería gnome3-next:

$ dput ppa:tanty/gnome3-next ../webkitgtk_2.3.2-1ubuntu6~saucy1.1_source.changes

Cuando ya estoy lo suficientemente convencido de mis cambios, lo siguiente sería publicar en el PPA estable:

$ dput -f ppa:tanty/gnome3 ../webkitgtk_2.3.2-1ubuntu6~saucy1.1_source.changes

El argumento -f lo utilizo para evitar el error que se produce cuando ya existe un fichero de “log” procedente de una publicación anterior de un fichero “.changes” mediante dput.

Tras esto, sólo tenemos que esperar a que el paquete sea contruído en los bots del PPA, actualizar nuestros repositorios y actualizar el sistema:

$ sudo apt-get update && sudo apt-get upgrade

Disfruta tu nuevo paquete!

What’s up with the scrollbar?

21:07 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

Presentando Facerecognition Resetter Plugin para el N9 de Nokia

17:06 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

Igalia wallpapers

18:41 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

Attending the Automotive Linux Summit 2012

14:59 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

NSLU2, Grilo and UPnP in Ubuntu’s GNOME

18:33 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

Tasting some more Spain at GUADEC

21:44 hrs.

Disculpa, pero esta entrada está disponible sólo en English.

GUADEC 2012 T-Shirts and other [d|r]usty artwork

14:08 hrs.

Let’s go quickly to the important stuff: I’ve been helping the great team that is organizing GUADEC 2012 in A Coruña. I cannot count myself among this amazing group of people since I’ve scarcely devoted any time to the tasks they needed from me but this is the result out of it, in the shape of a t-shirt :)

GUADEC 2012 Attendant T-Shirt

I cannot get all the credit of it, I was basing the final design on the previous work done by William Carlson and some drafts done by Alba Castro. You can find all the material in this public git repository hosted at Igalia.

Also, I did a small variation for the t-shirts of the staff, which will be red. This is back of the female’s version:

GUADEC 2012 Staff T-Shirt

Doing artwork for GNOME events is no new thing for me. I’ve been regularly doing some stuff for them. Some just for Igalia, my company, but also some other for the event itself.

2010

Last thing I designed before 2012 were the t-shirts (again) for the GUADEC-ES 2010 that took place also in Coruña. I got inspired that year by the soccer world cup that would be won by Spain (yeah!!!). Here you can see the 3 versions, starting by the Brazil one:

GUADEC-ES 2010 Brazil T-Shirt FrontGUADEC-ES 2010 Brazil T-Shirt Back

Denmark:

GUADEC-ES 2010 Denmark T-Shirt FrontGUADEC-ES 2010 Denmark T-Shirt Back

And a female’s version:

GUADEC-ES 2010 Female T-Shirt FrontGUADEC-ES 2010 Female T-Shirt Back

This last model is the one that holds the final sorting of the back logos that was printed for all the t-shirts. Actually, Xulia Barros, from FreeWear did a small modification to the final design leaving some space among the lines for the “7″ in the back.

Again, you can find all the material in this public git repository hosted at Igalia.

2006

Even before 2010 I found myself tangled with The Gimp, Sodipodi and Inkscape, later. In 2006 I did a small design for that year’s GUADEC-ES which consisted on the header:

GUADEC-ES 2006 Header

and foot of its webpage:

GUADEC-ES 2006 Foot

The lady was inspired on Pasiphaë who has a sculpture in Vilanova’s see shore while the sea tide was inspired by The Great Wave off Kanagawa.

You can find all the material in this public git repository hosted at Igalia.

And finally getting to the end … or maybe better the beginning.

2005

In 2005 Coruña was hosting for the first of several times the GUADEC-ES. For that event I did most of the artwork that was used. Web page, printed banners, badges, talks’ book, but one of the things that I was most proud of was the animated banners that were featuring for some time in Barrapunto, the Spanish version of Slashdot:

GUADEC-ES 2005 Banner Animation

And I learn to do it the hard way. You cannot imagine how difficult was by the time to do a GIF animation with The GIMP!

Also, that year was a great one for the t-shirts. Most of the attendants liked them and we had them in several colors: red, green, blue, orange and, as always (or almost ;) ), black. I think that was once in a lifetime for a hacker’s conference :D

GUADEC-ES 2005 T-Shirt

Even, with Chema‘s help, the master of organizing events, I was experimenting with some sketches done directly in the sand, from which I got inspired to do the rest of the material:

GNOME in the sand

Of course, you can find all the material in this public git repository hosted at Igalia.

BTW, if you have been able to read this boring post until here, you are my hero :D

GUADEC is at home … and I’m abroad

01:52 hrs.

Or kind of … because unlike you may guess from the title, I’m actually attending mighty GUADEC 2012

Attending GUADEC 2012 badge

I’ve attended GUADEC 2006 in Vilanova i la Geltru, GUADEC 2007 in Birmingham, GUADEC 2008 in Istanbul and the Desktop Summit in Gran Canaria as a guest in all of them.

Finally, this year the event comes home but, funnily enough, I moved to Helsinki some months ago so I’m again a visitor. Now in A Coruña :)

Honestly, I can’t wait to attend some of the talks and meet again the GNOME folks. Also, my mates Igalians are featuring quite some talks in the program meanwhile Igalia itself has been doing quite an effort to host some of the hackfests and meetings that are happening during these days.

And not only that!. As I was saying, I’m a visitor again so I only have pending to thank Igalia again for sponsoring my trip!

Igalia