Brillo de la pantalla de los ASUS Eee PC con Linux

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:

[code light=»true»]setpci -s 00:02.0 f4.b=ff[/code]

Reiniciar y listo.

Linux en tu navegador

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.

Cómo dar de baja tu cuenta free/open de Spotify

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.

Impedir que la publicidad se cargue

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:

  1. Introducir en la barra de dirección about:config y asegurarle que tendremos cuidado.
  2. Utilizar como filtro ports.banned, doble click para editar y añadir el puerto 8081.
  3. Ya podemos disfrutar de Grooveshark sin publicidad molesta.

Quitar la publicidad con un script de Greasemonkey

¿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?

«Hidden features of…»

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.

Utilizar funciones y tipos de C en Python

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:

[code lang=»c»]#Archivo calc_mean.c

double mean(double a, double b) {
return (a+b)/2;
}[/code]

Para reutilizar esta función en nuestro programa en Python, realizaremos los siguientes pasos:

  • Compilar el código C en una librería compartida.
  • Importar la librería compartida mediante Ctypes.
  • Asignar los tipos de datos de entrada y salida que acepta la función.
  • Utilizar la función con total normalidad, como si de una función de Python se tratase.

Crear una librería compartida

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:

[code lang=»python»]env=Environment()
env.Replace(CFLAGS=[‘-O2′,’-Wall’,’-ansi’,’-pedantic’])
env.SharedLibrary(‘libmean.so’, [‘calc_mean.c’])[/code]

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.

Utilizar la librería compartida

Lo más directo es ver un código de ejemplo comentado.

[code lang=»python»]# 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[/code]