Linux, Java, Música y otras hierbas…
Aplicaciones
Vala, Gtk, Pino y Twitter
Apr 7th
Últimamente en mis ratos de ocio he estado aprendiendo un lenguaje nuevo llamado Vala.
Mi desafío para aprender a hacer algo en vala + gtk fue agregar una funcionalidad al cliente de twitter Pino, que dicho sea de paso esta bastante bueno. La funcionalidad es bastante simple, agregar un nuevo proveedor para acortar URLs bit.ly
Complejidades, bondades y rarezas que me encontré:
- Facilidad para enganchar las señales.
- Lo parecido a Java del lenguaje, lo que me ayudo mucho, aquí una ayuda para los Java Developers
- Aún le falta mucho a los IDEs (valide esta muy verde).
- El compilador tiene poca ayuda, sólo dice que fallo pero no en donde ni por qué, rara vez te dice te falta un “;”
- Aun son enredado los script de compilación, al más puro estilo de macros m4, automake y vainas por el estilo, aquí hay mucho por mejorar.
- La API si bien es cierto esta bien documentada en valadoc aún prefiero la facilidad para encontrar las cosas del javadoc
Les dejo aquí mis mejoras de pino-twitter-2.0.5.tar y a ver si lo van mejorando un poco más, por lo pronto voy a subir los cambios al tracker para que los incluyan en la release.
Para compilar es simple, obviamente deben tener todas las herramientas para compilar:
$ ./waf configure --prefix=/home/tu_user/directorio_destino $ ./waf clean buid install $ cd /home/tu_user/directorio_destino/bin $ ./pino &
Espero sus comentarios
Crash de Glipper al iniciar Gnome
Apr 2nd
Desde hace tiempo (2 o 3 releases de Ubuntu hacia atrás) que Glipper viene haciendo clank al iniciar la sesión de Gnome, no he encontrado alguna razón del por qué. Buscando en los reportes alguien dijo que había que darle tiempo para que partes del escritorio estuvieran cargadas y luego pudiera correr Glipper.
Para corregir el crash de Glipper al inicio de sesión haz lo siguiente, edita el siguiente archivo /usr/lib/glipper/glipper con tu editor de texto favorito.
$ sudo vim /usr/lib/glipper/glipper
Y justo antes de que empiece la ejecución agrega un par de líneas, es un timer que hace un pequeño delay al inicio (justo bajo los comentarios línea 21 y 22):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/env python # Glipper - Clipboardmanager for GNOME # Copyright (C) 2007 Glipper Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import time time.sleep(10) import gobject gobject.threads_init() |
Con eso debería bastar, si aun sigues con el problema juega con el numerito (10) hasta que encuentres el tiempo apropiado para tu inicio de sesión.
Nótese que esto es un parche y que no arregla el problema de fondo, seguiré investigando a ver que puede hacer, pero con esto ya queda funcionando.
Reparar el molesto ruido que genera Pulseaudio en Ubuntu Karmic
Nov 9th
Después de haber navegado por todos lados buscando el por qué PulseAudio genera un ruido molesto (se pedorrea), encontré una explicación y al parecer es que por ahorro de energía el dispositivo de audio lo desconecta provocando un chasquido molesto cada N segundos definidos en la configuración. (se conecta y se desconecta)
Solución: Modificar el archivo donde se configura dicho parámetro:
$ sudo gedit /etc/modprobe.d/alsa-base.conf
Luego buscar la linea que dice mas o menos así:
# Power down HDA controllers after 10 idle seconds options snd-hda-intel power_save=10 power_save_controller=N
Y finalmente hay que modificar el parámetro que dice power_save=10 aumentando el valor o simplemente comentando la linea, quedando de la siguiente forma:
# Power down HDA controllers after 10 idle seconds # options snd-hda-intel power_save=10 power_save_controller=N
Esto funciona bien en mi maquina, un HP530 con tarjeta de sonido intel:
$ lspci Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller
Listo… ahora a trabajar!
Pequeño script de ubiquity
Jul 26th
![]()
Como todos sabrán, Ubiquity es un complemento para Mozilla Firefox que trata de acercar a la web el lenguaje natural, como por ejemplo, puedes decirle, google wikipedia y ubiquity realizara la búsqueda en Google con la palabra Wikipedia. Además tiene un pequeño recuadro de preview donde mostrara los posibles resultados de búsqueda (ver imagen):
Mas información acerca de Ubiquity en Firefox Chile.

Hoy visitando algunos sitios me encontré con que muchos de ellos publican las URL’s sin que sean un link, es decir, un texto simple al cual no se le puede hacer clic y visitar dicho link.
De ahí partió la necesidad de tener algo a la mano que me permita abrir estos pseudolinks, miré rápidamente ubiquity para ver si tenía un comando para este problema y me fue mal. Entonces me decidí a hacerlo yo mismo
, les dejo el código para que lo enchulen mejoren a su medida o hagan sus contribuciones.
/* * Open URL selected in browser. */ CmdUtils.CreateCommand({ names: ["openurl"], icon: "http://www.mozilla.com/favicon.ico", description: "Abre una pestaña con la url seleccionada", help: "open + selected url", author: { name: "Francisco Collao Garate", email: "pcollaog[at]firefox[dot]cl" }, license: "GPL", homepage: "http://pcollaog.firefox.cl/", arguments: [{role: 'object', nountype: noun_arb_text}], preview: function preview(pblock, args) { var selectedText = args.object.text; if (Utils.isEmpty(selectedText)){ pblock.innerHTML = "Debes seleccionar una URL."; }else{ pblock.innerHTML = "Abrirás la siguiente URL en una nueva" + " pestaña: <strong>" + selectedText + "</strong>"; } }, execute: function execute(args) { var selectedText = args.object.text; // TODO: validar que la URL sea valida if (Utils.isEmpty(selectedText)) { return; } Utils.openUrlInBrowser(selectedText); displayMessage("Se abrirá la siguiente URL: " + selectedText, this); } });
El código se divide en dos grandes partes, la función preview y la función execute, que como sus nombres lo dicen, una muestra una previsualización de la acción y la otra ejecuta la acción.
Analicemos primero la función preview:
Lo primero que hace es obtener desde el argumento la URL seleccionada asignándosela a la variable selectedText y luego valida que ésta variable no este vacía. En ambos casos (vacía o no) se le envia un mensaje al usuario en el cuadro de preview (en el cuadro de dialogo abajo).
Vamos ahora por la función execute:
Hace lo mismo que la función preview al principio, es decir, asigna el valor del argumento a una variable y valida que no este vacía.
Luego viene la parte interesante, toma la URL seleccionada y haciendo uso de la función Utils.openUrlInBrowser() nos permite abrirla en una nueva pestaña. Luego de eso mandamos una notificación al usuario sobre la acción ejecutada, para eso utilizamos la función displayMessage().
Eso seria por ahora, ahora a seguir jugando con Ubiquity. Espero sus comentarios y/o aportes.
Código: OpenURL ubiquity code
Agregar llaves de repositorios apt en Ubuntu
Apr 26th
Les ha pasado que cuando agregan repositorios extras a su sources.list a veces apt alega de que los paquetes no están firmados o de que no puede encontrar la llave para verificarlos?
Bueno… la mayoría de las veces uno no pone atención y le da aceptar al apt, entonces ¿Cómo podemos hacerlo de la forma correcta?
- Primero: Debes estar seguro que el repositorio es fiable, es decir, que puedas confiar en lo que los desarrolladores ponen a disposición de los usuarios. Ha pasado que a veces los repositorios son intervenidos por manos negras y alteran los paquetes agregándoles algo que beneficie al atacante. Paso hace un tiempo atrás en debian y los repos de fedora.
- Segundo: Una vez que tienes certeza del primer punto, puedes importar la llave del repositorio en cuestión. ¿Cómo se hace eso? veamos un ejemplo
Descargados 55,6kB en 4min 39s (199B/s) Leyendo lista de paquetes... Hecho W: Error de GPG: http://ppa.launchpad.net jaunty Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY B9F1C432AE74AE63 W: Error de GPG: http://192.168.1.101 testing Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY A040830F7FAC5991 W: Error de GPG: http://192.168.1.101 intrepid Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 079A381C44869960 W: Tal vez quiera ejecutar 'apt-get update' para corregir estos problemas
Si esto les ha pasado mas de una vez es porque les falta la firma y llave de ese repositorio, entonces hagámoslo de la forma clásica:
Primero importamos la llave con lo que sale en la información del error de apt, donde dice NO_PUBKEY NUMERO y luego el segundo comando exporta la llave importada para que apt-key pueda agregarla a su llavero.
$ sudo gpg --keyserver keyserver.ubuntu.com --recv 079A381C44869960 $ sudo gpg --export --armor 079A381C44869960 | sudo apt-key add -
Una forma un poco mas eficiente es utilizando el comando apt-key directamente, veamos como se hace todo en un solo paso:
$ sudo apt-key adv --recv-keys --keyserver \ keyserver.ubuntu.com 079A381C44869960
De esta forma no utilizamos el llavero o keyring de gpg sino que usamos directamente el llavero de apt. Este lo pueden ver en /etc/apt/trusted.gpg
Ahora bien, para facilitarnos la vida en ubuntu (no se si debian lo tenga, creo que no) existe un paquete (que hay que instalar) llamado add-apt-key que nos permite hacer este mismo trabajo de forma mas simple. Lo primero es instalar el paquete:
$ sudo apt-get install add-apt-key
Luego importamos las llaves de la siguiente forma (como root):
$ sudo su - # add-apt-key --keyserver keyserver.ubuntu.com 079A381C44869960
Es todo por hoy, espero que les sea útil este pequeño post. En otra oportunidad profundizaré en los conceptos de gpg, llaves y llaveros.
Instalando Amarok 1.4 en Ubuntu Jaunty
Apr 19th
Simplemente Amarok 2 apesta hasta ahora, es cierto que falta mucho para que dicha versión madure como lo hizo con la versión anterior. Lamentablemente los que nos subimos al carro de las últimas actualizaciones hemos sufrido los cambios que estas traen, entre ellas Ubuntu Jaunty no trae en sus repos la versión de Amarok 1.4 sino que trae la última Amarok 2.
Es por eso que empece a buscar un buen reemplazo para Amarok, y encontré varios reproductores cada uno con sus pros y contras.
Vamos por el primero:
Exaile

Exaile es un reproductor de música que tiene una interfaz muy parecida a la de Amarok 1.4, sin embargo, encuentro que le faltan algunas funcionalidades útiles, como por ejemplo:
- Agrupar los discos que son de Varios Artistas, es una molestia que a veces te muestra un Artista con una sola canción. (esa canción pertenece a un disco de varios artistas)
- Configuración de las teclas para manejar a Exaile desde cualquier lado. Por ejemplo: usar la tecla <Super>+<c> para pausar una canción. Como lo resolví, en el centro de control de Compiz agregué algunos mappings de teclas/comando para poder controlar Exaile (No es simple ni obvio).
- La importación de discos a la Coleción no te permite crear un patrón de Directorios, por ejemplo:
- Artista/Año-Albun/Track-NombreCancion.ext
Banshee

Cuando instale Banshee me llevé una grata sorpresa, (lo había usado antes cuando se inicio el proyecto) había mejorado bastante tanto en rendimiento como en interfaz. Recuerdo que lo des-instalé por lento y de verdad se comía la máquina por un buen rato mientras indexaba tu música y cuando tienes mucha música es muuuuuucho tiempo. Cuando me animé otra vez a utilizar Banshee el indexado mejoro mucho, solo tardo un par de minutos. Veamos algunos puntos importantes:
- Indexación de música mejorada y rápida.
- Al utilizar el plugin de lista de reproducción inteligente se convierte en la primera versión de Banshee, lento lento lento. Parece que los amigos que desarrollaron el Plugin Mirage no consideraron colecciones grandes de música. Este punto se convierte en un EPIC TIMEOUT FAIL !!
- El ecualizador (EQ) anda como las pelotas, lo configuras y se cambia la canción y pierdes el EQ.
- La interfaz si bien es cierto es intuitiva, la lógica de reproducción no lo es. Tienes una lista que se llama “Cola de Reproducción” y se supone que ahí puedes ir en encolando tus canciones (suena lógico), pero si te paras en la colección de un momento a otro empieza a tocar lo que ahí aparece. Al final no sabes que suena y menos de donde lo sacó.
- La lista de reproducción inteligente es tonta, simplemente no sirve.
- No tiene al igual que Exaile una forma rápida de poner nota (puntuación) tu música poniendo nota, tienes que abrir el reproductor ver que se esta reproduciendo (presionar Ctrl+j) y luego aplicar la puntuación.
- Tampoco tiene una importación de música parametrizable, sin embargo te permite hacer algo, pero es muy muy básico.
- Al igual que Exaile no tiene agrupación de varios artistas y esto se convierte en un dolor de cabeza cuando en tus preferencias le pones que Actualice los Nombres y Carpetas. Toda tu colección se revuelve y deja de ser el paraíso maniáticamente ordenado.
- Un punto a favor de Banshee es que puede manejar listas de Videos.
Conclusión y Amarok 1.4
Si bien es cierto, todas estas aplicaciones han madurado mucho, creo que no es suficiente. Hasta el momento el mejor reproductor de música que he usado hasta el momento ha sido Amarok 1.4. Tiene todo lo que no tienen los otros y que ya mencioné en el post.
Amarok 2 esta en proceso de maduración y queda descartado por no tener EQ al igual que otros como Songbird. Este último ya posee un hack de @fcatrin que permite manejar un EQ. Según lo que me contó @fcatrin estará disponible pronto mediante un plugin, sin embargo no descarta que se incluya en Songbird. Mas info aquí.
Instalando Amarok 1.4 en Ubuntu Jaunty
Lo primero es agregar un par de repos a tu sources.list.
deb http://ppa.launchpad.net/bogdanb/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/bogdanb/ppa/ubuntu jaunty main
Luego debes importar la llave del repositorio para que apt no te lo reclame.
sudo apt-key adv --recv-keys --keyserver \ keyserver.ubuntu.com 0x1d7e9dd033e89ba781e32a24b9f1c432ae74ae63
Luego hace un update y luego instalar:
$ sudo apt-get update $ sudo apt-get install amarok14
Nota: El paquete de amarok 1.4 se ha renombrado a amarok14 para evitar conflictos son amarok 2.
Encuesta Mozilla Firefox
Dec 17th

Estimados:
Mozilla nos invita a participar de una encuesta que tiene relación con el uso de Firefox y la experiencia con él.
Les prometo que no dura mas de 5 minutos contestarla y esta en distintos idiomas (arriba puedes cambiarlo).
Les dejo el Link: http://surveys.mozilla.org/?id=16
Escuchando: “Steve Vai – Salamanders In The Sun”
Dato Freak! – OpenOffice Game
Nov 22nd
El WTF – Dato Freak.. Sigue las siguientes instrucciones:
- Abre una planilla de cálculos de OpenOffice
- En una celda escribe =game() y presiona enter
- La celda te preguntará say what?
- Por ultimo debajo de la celda escribe =game(“StarWars”)
- Charaaaaaaaaaaaaaaaan!!

Juego StarWars de OpenOffice
Encuentre la Pifia
Oct 7th
Este es un screenshot que saqué a mi calendario de Thunderbird+Lightning, específicamente en el área de las tareas que es donde se produce el bug.

Bug en Thunderbird+Linghtning
Escuchando: “Paul Gilbert – 2 Become 1“




