Grrrmbfhlx…!
La blasfemia es el único lenguaje que de verdad conocen todos los programadores.
(Sexto postulado sobre la programación de Troutman. Más tonterías no menos ciertas en la página correspondiente de Wikiquote.)
Anotaciones relacionadas con el mundo de los Sistemas Operativos y del software en general.
La blasfemia es el único lenguaje que de verdad conocen todos los programadores.
(Sexto postulado sobre la programación de Troutman. Más tonterías no menos ciertas en la página correspondiente de Wikiquote.)
Desde hace un año tengo un ASUS Eee PC T101MT. Estos netbooks, como otros de la gama Eee PC, vienen con Windows 7 preinstalado y, aunque lo mueven, con Linux van muchísimo mejor. No obstante, existe un pequeño problema —no muy importante, pero molesto—: el brillo máximo de la pantalla con Linux es bastante inferior al que obtiene con Windows. Y no encontraba la manera de solucionarlo… hasta hoy.
Así que por aquí dejo la solución para todo aquel que tenga un Eee PC con Linux y sufra este problema en silencio. Basta con editar el archivo /etc/rc.local y añadir la siguiente línea:
setpci -s 00:02.0 f4.b=ff
Reiniciar y listo.
Fabrice Bellard es un extraordinario programador francés que no deja de sorprenderme con hazañas de lo más variopintas. La primera vez que encontré una mención a su nombre, fue un día que andaba yo buscando algoritmos que calculasen el dígito enésimo de π. (Inciso. Esto es posible gracias al trabajo de David H. Bailey, Peter Borwein y Simon Plouffe, tres matemáticos que, en 1995, encontraron una fórmula que lleva su nombre que permite calcular el enésimo decimal de π sin conocer los n-1 anteriores). Como decía, en esta búsqueda di con la fórmula de Bellard, la cual es un 43 % más rápida que la original. También obtuvo un récord de generación de dígitos de π con un ordenador personal que le duró casi un año (el récord).
A partir de ahí, seguí indagando un poquito acerca de este peculiar personaje. Resulta que es el creador de FFmpeg, una colección de software libre para el tratamiento de vídeo y audio de las más populares en Linux; de QEMU, una fantástica herramienta de virtualización, y de TCC (o Tiny C Compiler), un compilador de C pequeño y rápido que permite compilar y lanzar el kernel de Linux en menos de 15 segundos o utilizar C como un lenguaje de scripting, entre otras cosas. Ahí es nada.
Su última creación es un emulador de PC escrito en JavaScript para el navegador web. Aprovecha la gran velocidad de ejecución que logran los motores de JavaScript de Firefox 4 y Chrome 11 para ejecutar una pequeña versión de Linux totalmente funcional ¡dentro del navegador!
Él dice que lo hace por diversión, y probablemente este sea uno de esos programas que encajan en la categoría de idas de olla totalmente inútiles, pero no por ello deja de ser una curiosidad digna de admiración. Me quito el sombrero.
Carlos Capote nos cuenta en su blog Cómo dar de baja tu cuenta Spotify free/open y no morir en el intento:
Últimamente se han dado dos ocasiones que han hecho que mucha gente se plantease dejar de utilizar Spotify. Una fue su apoyo a la visita del Papa. Otra los recortes a su servicio Spotify free/open. Sin embargo, ¡en Spotify no hay una opción de cancelar tu cuenta free! De hecho, en sus términos y condiciones de uso sólo hacen referencia a la posibilidad de darte de baja si tienes una cuenta de pago en caso de cambio de precios.
[...]
Así no me extraña que su número de usuarios crezca y crezca tan rápidamente. ¡Son una secta digital! En cualquier caso, hay que decir que existe una posibilidad para escaparse. [...]
El método para dar de baja tu cuenta consiste en acudir a su formulario de contacto y solicitarla. Visita el blog de Carlos (enlace al comienzo) para conocer todos los detalles del proceso.
Aprovecho la ocasión para recomendar Grooveshark, un servicio online de streaming de música similar a Spotify, pero que no requiere instalación (se accede directamente a través del navegador). La versión gratuita inserta unos banners de publicidad en la parte derecha de la pantalla, pero nada de molestos anuncios sonoros entre canción y canción.
No obstante, si tampoco podemos soportar esa modalidad de publicidad y gracias a que Grooveshark es una aplicación web, podemos eliminarla aun utilizando una cuenta gratuita. ¿Cómo? Tenemos dos opciones.
El servidor de publicidad de Grooveshark utiliza el puerto 8081. Por lo tanto, si lo bloqueamos, no se cargará la publicidad y el recuadro de la derecha aparecerá gris y vacío. Para ello, en Firefox basta con seguir estos pasos:
about:config y asegurarle que tendremos cuidado.ports.banned, doble click para editar y añadir el puerto 8081.¿Qué es Greasemonkey? Es un complemento para navegadores que nos permite asociar programas a determinadas páginas web. Esto significa que, cuando una página web se carga, inmediatamente se lanza el programa que le hayamos asociado previamente. Dichos programas son scripts en JavaScript que podemos crear nosotros mismos o podemos descargar hechos de la inmensa cantidad que ya hay.
¿Qué nos permite Greasemonkey? Todo lo que imaginemos y más. Una vez que se carga una página web, el documento está enteramente a nuestra disposición para hacer lo que queramos con él. Por tanto, estos scripts pueden añadir elementos, borrar elementos, modificar elementos, etc.; de forma que se añadan funcionalidades, quiten funcionalidades, etc. A modo de ejemplo, podemos hacer que Enchufa2 tenga una apariencia en nuestro navegador distinta a la original, con tonos rositas… o podemos quitar la publicidad de Grooveshark.
¿Cómo? En Firefox hay que añadirlo como complemento. Ya sabéis: hay que buscarlo, añadirlo a Firefox y reiniciar el navegador. Y a partir de ahí, a añadir scripts. Disponemos desde scripts que se limitan a quitar la publicidad hasta scripts que la reemplazan por las letras de las canciones que vamos escuchando. ¿Útil, no?
Todos los que hayáis picado alguna vez alguna línea de código habréis acabado en la web Stack Overflow buscando alguna duda. Se trata de una web de preguntas y respuestas sobre programación con una comunidad de usuarios bastante grande, por lo que probablemente cualquier duda que os surja esté solucionada ahí. Además, implementa un sistema de votación para las respuestas, por lo que, aunque un tema tenga cientos de ellas, la que dé en el clavo estará inmediatamente después de la pregunta.
Esta mañana he descubierto una serie de preguntas muy interesantes llamadas «Hidden features of…». En ellas, los usuarios escriben sobre funcionalidades ocultas o, al menos, poco conocidas sobre diferentes lenguajes que no os dejarán indiferentes. Como para pasarse horas leyendo sin parar de sorprenderse. Pasen y vean:
Y seguro que encontraréis más si exploráis a fondo los resultados de esta búsqueda.
Estoy usando Firefox 4 desde que sacaron la versión RC (Release Candidate), y la verdad es que han hecho un gran trabajo. Un largo trabajo, por otra parte, pero el resultado, en general, lo vale. No entro en valoraciones objetivas de rendimiento porque no he hecho pruebas, pero la experiencia del usuario (que es lo que cuenta al final) es muy buena.
No obstante, no estoy de acuerdo con todos los cambios que se han realizado. El que más me ha molestado es la supresión del botón RSS de la barra de direcciones. Era realmente útil. Tanto es así que yo diseñé algunos aspectos de Enchufa2 teniéndolo en cuenta. No veréis, por ejemplo, enlace RSS en los comentarios de las entradas ni en las categorías del blog, porque yo contaba con ese botoncito de Firefox 3 donde se muestran cómodamente todos los canales de suscripción posibles de la página actual. Ahora, con Firefox 4, la gente de Mozilla ha desplazado esta funcionalidad al menú de marcadores (oculto por defecto).
Al parecer, la razón de dicha desaparición es que el porcentaje de usuarios de Firefox que lo usa es realmente bajo (del 7 %, según puede verse en esta estadística). Si esa es la razón real, cabría preguntarse por qué han hecho desaparecer también el botón Home si lo usa un 37 % de los usuarios. También cabe argumentar que hay cosas que hay que incluir en la interfaz por defecto por poco que se usen, como por ejemplo el botón de identificación del sitio (al principio de la barra de direcciones) —o como, en mi opinión, el botón RSS—.
Algunos se quejan de que el problema está en la interfaz: el usuario medio no identifica ese icono naranja con RSS y mucho menos sabe explicar qué carajo es eso de RSS; adicionalmente, los usuarios son reacios a hacer click en aquello que no conocen (lo primero bien, pero esto último es difícilmente defendible ante la cantidad de virus que se propagan por ejecutables en ficheros adjuntos de emails…).
Mi queja es mucho más simple: no me parece significativo el porcentaje de usuarios que utiliza el botón. Me parece una estadística mucho más justa el porcentaje de usuarios que utiliza el botón RSS de todos los usuarios que utilizan las suscripciones RSS. Lo que mide Mozilla me parece normal que sea bajo. Lo que propongo yo… habría que verlo.
En cualquier caso, siempre podremos seguir disfrutando del botón con una extensión (vista en 11 extensiones esenciales para Firefox 4).
Cuando atacamos un problema con un lenguaje de programación relativamente nuevo, es razonable pensar que ya habrá código escrito en lenguajes más antiguos. De hecho, en muchos casos nos encontramos con que existen librerías en C que resuelven parte de nuestro problema. En Python, existen varias formas de reutilizar código escrito en C/C++. Hasta donde yo sé, cuatro herramientas diferentes: Python/C API, SWIG, Ctypes y Cython. He aquí una tabla comparativa extraída de Python Bindings Overview:

Entre los parámetros que considera, está la curva de aprendizaje (cuán sencillo es de aprender a utilizar), lo pythónico que es (si el código Python resultante es de mayor o menor pureza, por así decirlo), si soporta C, si soporta C++, si existe para otros lenguajes de programación y si maneja excepciones. En este artículo vamos a centrarnos en Ctypes ya que, como podéis observar, es la herramienta más sencilla y más pythónica. El único punto en contra es que no soporta C++ (tampoco maneja excepciones, lógicamente, porque C no tiene excepciones).
Ctypes es una FFI (Foreign Function Interface) que forma parte de Python desde la versión 2.5. Nos proporciona mecanismos muy sencillos para realizar llamadas a funciones de C en nuestro código Python y tratar con tipos de datos nativos de C. A continuación, vamos a poner un ejemplo muy sencillo (es una bobada, aviso), pero suficiente para mostrar el potencial de Ctypes.
Supongamos que tenemos una función escrita en C que calcula la media de dos números:
#Archivo calc_mean.c
double mean(double a, double b) {
return (a+b)/2;
}
Para reutilizar esta función en nuestro programa en Python, realizaremos los siguientes pasos:
Esta tarea se puede realizar de forma directa mediante GCC, por ejemplo. Sin embargo, he encontrado una manera mucho más sencilla y elegante: mediante SCons. Consiste en crear un archivo llamado SConstruct en el mismo directorio donde se encuentran los archivos fuente de C (en este caso, en el mismo directorio que nuestro calc_mean.c) con el siguiente contenido:
env=Environment()
env.Replace(CFLAGS=['-O2','-Wall','-ansi','-pedantic'])
env.SharedLibrary('libmean.so', ['calc_mean.c'])
Como se puede deducir, la primera línea es obligatoria, la segunda especifica las flags que utilizará GCC (no hace falta tocarlo) y la tercera indica que el archivo calc_mean.c se convertirá en una librería compartida con el nombre libmean.so.
Por último, basta con teclear en una terminal —en el mismo directorio— scons. Y listo: ya tenemos nuestra librería compartida.
Lo más directo es ver un código de ejemplo comentado.
# Archivo ejemplo.py
# Importamos Ctypes
from ctypes import *
# Importamos la librería compartida
libmean = CDLL('./libmean.so')
# Asignamos la función a una variable más corta y manejable
mean = libmean.mean
# Especificamos los tipos C que acepta como entrada
mean.argtypes = [c_double, c_double]
# Especificamos el tipo C que devuelve
mean.restype = c_double
# Lista para su utilización
print mean(3,8)
# Devuelve 5.5