Instalar Hauppauge MiniStick-HD en Linux

Hace tiempo me compré este cacharrito que permite ver la tele en el ordenador, y aquí dejo copiadas las instrucciones para instalarlo en Ubuntu:

– Lo primero es instalar el paquete linux-firmware-nonfree. A continuación instalamos MeTV y reiniciamos el ordenador.

– Una vez hecho esto al arrancar MeTV nos habrá detectado el sintonizador y podremos buscar canales. En el desplegable de países nos aparece España, pero al escanear usando esa zona solamente nos aparecen unos pocos canales.

– Nos descargamos entonces el paquete w-scan, que contiene la utilidad para escanear canales, y (asegurándonos de haber cerrado del todo MeTV) ejecutamos

sudo w_scan -ft -X -c ES >> channels.conf

– Después de un rato escaneando nos habrá generado un fichero channels.conf que podremos cargar en MeTV. Antes de hacerlo lo abrimos con un editor de textos y eliminamos los acentos, eñes, etc… para que no haya errores al hacer la importación en MeTV.

Cuando el todo es mayor que la suma de las partes

Hace poco nació mi sobrinita y fui a visitar a mi hermano y a mi cuñada. Encontré en la biblioteca de mi hermano el libro “Slash: De Guns N’ Roses a Velvet Revolver. La biografía” y me lo leí. Vaya vida ha tenido el bueno de Saul Hudson

A raíz de eso me dio por investigar un poco qué habían hecho los demás miembros de GN’R al dejar el grupo, en el que solamente queda Axl Rose. Todos han tenido otras bandas y han sacado discos. A lo largo de esta semana he escuchado a Slash en Slash’s Snakepit, Velvet Revolver y en solitario; a Izzy en Ju Ju Hounds y en solitario; a Duff en solitario y el último disco de GN’R Chinese Democracy y…

…no me ha gustado NINGUNO.

Están bien, son buenas canciones, pero ninguna me gustó realmente, ni fú ni fá, no me apetecía volver a escuchar ninguno de esos discos una vez había terminado. No me dejaron flipado como me dejaron flipado las canciones de los cuatro primeros discos de GN’R cuando las escuché por primera vez.

Ya me imagino lo que estaréis pensando: “A ver, Koas, cuado escuchaste GN’R por primera vez tenías 12 o 13 años, eras impresionable y todo te parecía la monda. Ahora tienes 35 y no te flipas tanto con grupos nuevos”. ¡Pues no! En los últimos años he descubierto grupos que no conocía y que me han flipado, así que no es por la edad.

Así que en el caso de GN’R tristemente el todo era mayor que la suma de sus partes. Hicieron la música que hicieron porque estaban juntos y cuando han intentado hacerlo por su cuenta el resultado ha sido muy inferior.

Por suerte esto no siempre sucede en los grupos de música. Cuando a Dave Mustaine le echaron de Metallica formó Megadeth y tanto Metallica como Megadeth pudieron hacer discos buenísimos. También pasó con Kai Hansen / Gamma Ray y Helloween. En estos dos casos fue una única persona la que se separó del grupo y montó otro que era igual de bueno o mejor que el que abandonaron mientras el grupo original seguía sacando discos buenísimos.

¿Por qué no pasó esto con GN’R? ¿Qué hacía que las canciones de los cuatro primeros discos fueran tan increíbles? ¿Por qué ninguno de ellos ha conseguido esa calidad en solitario? Puede que fuera la edad, puede que fuera porque se ponían hasta las patas de todas las drogas habidas y por haber, no lo sé.

Pero me pone de mal humor. Podría estar disfrutando de cuatro bandas buenísimas y en cambio solo tengo cuatro discos maravillosos que ponen un listón que sus propios creadores, visto lo visto, no volverán a alcanzar jamás.

 

Máquinas virtuales para Internet Explorer

En cualquier desarrollo web hay que comprobar que se ve correctamente en todos los navegadores. Si usamos GNU Linux no tenemos el Internet Explorer, así que debemos ingeniárnoslas para hacer las pruebas.

La misma gente de Microsoft nos lo pone muy fácil: han creado una página desde donde se pueden descargar ficheros para máquinas virtuales que tienen las versiones de Internet Explorer desde la 6 a la 11. Basta con instalarse  VirtualBox y descargar estas máquinas virtuales para poder hacer pruebas con todas las versiones de Internet Explorer que queramos.

Este es el enlace para la descarga: https://modern.ie/en-us/virtualization-tools#downloads

Usar la tecla Alt en Photoshop con Linux

El único programa para el que no he encontrado un equivalente en GNU Linux es Adobe Photoshop. Sé que GIMP es un excelente programa pero yo no consigo hacerme con él y por eso uso Adobe Photoshop a través de WINE.

Funciona muy bien, esta gente de WINE son unos cracks, pero hay una pequeña cosa que me estaba irritando, una pequeña china en el zapato. En Photoshop se utiliza la tecla Alt como modificador de algunas herramientas; por ejemplo si tenemos seleccionada la lupa haciendo clic en la imagen la agrandamos y haciendo Alt – clic la reducimos. Sin embargo en Gnome la tecla Alt también se utiliza para mover una ventana pinchando sobre cualquier parte de ella, y esto es una gozada porque no hace falta mover el ratón hasta colocarlo exactamente en la barra de título, podemos mover la ventana pulsando Alt y moviéndola desde cualquier punto de la ventana.

Esto hace que si en Photoshop intentamos pulsar Alt y pinchar en una imagen esta no se reduce, el sistema operativo da preferencia a la acción de mover la ventana, y esto es un fastidio. Podría modificar las preferencias de GNOME y desasignar la tecla Alt del movimiento de la ventana, pero también llevo mucho tiempo usándola y no quiero cambiarla.

¿La solución? Pulsar primero la tecla de Windows y luego Alt. No estoy muy seguro de por qué funciona, pero es así. Aunque es un poco más engorroso porque nos obliga a pulsar una tecla más como las dos están pegadas realmente no es muy complicado de hacer, y recuperamos el modificador Alt para las herramientas de Photoshop.

Nota adicional: para incluir fuentes en Photoshop deberemos copiarlas a la carpeta .wine/drive_c/windows/Fonts de nuestro usuario y luego asegurarnos de reiniciar WINE mediante el comando

wineserver -k

Posicionar de forma absoluta elementos dentro de celdas en Firefox

Una nota rápida para no tirarme media hora en el futuro sufriendo por esto…

Firefox tiene un bug muy curioso: si intentamos posicionar elementos de forma absoluta dentro de una celda (ya sea una celda de tabla normal o un div con estilo display:table-cell) él amablemente nos enseña el dedo más largo de su peluda patita y los coloca con respecto al primer elemento de fuera de la tabla.

Para evitarlo hay que crear como primer hijo de la celda un div con posición relativa que ocupe todo el ancho y alto de la celda, y meter dentro de él los elementos que queramos posicionar de forma absoluta. Entonces sí funciona.

Redirigir al usuario y continuar trabajando en PHP

Hay veces en las que debemos realizar alguna tarea con PHP que lleva demasiado tiempo (convertir imágenes, videos, etc…). En estos casos no es elegante dejar esperando al usuario, es preferible redirigirle a una página donde se le informe de que se está llevando a cabo la tarea.

Una solución podría ser implementar un sistema de workers que realicen el trabajo; así nuestro script de PHP simplemente tendría que lanzar el trabajo y terminaría inmediatamente. Esta es la mejor solución porque los sistemas de workers permiten un escalado horizontal.

Pero hay ocasiones en las que por las características de nuestro proyecto no se pueden o no se quieren implementar estos workers. En estos casos nos bastará con redirigir al usuario a una página informativa y realizar el trabajo desde nuestro script de PHP.

Esta técnica la encontré, y está perfectamente documentada, en esta página, que podéis consultar para una explicación detallada. Aquí me limito a copiar el código:

    //Redirect to messageToUser.php
    header("Location: messageToUser.php");
    //Erase the output buffer
    ob_end_clean();
    //Tell the browser that the connection's closed
    header("Connection: close");

    //Ignore the user's abort (which we caused with the redirect).
    ignore_user_abort(true);

    //Extend time limit to 30 minutes
    set_time_limit(1800);
    //Extend memory limit to 10MB
    ini_set("memory_limit","10M");
    //Start output buffering again
    ob_start();

    //Tell the browser we're serious... there's really
    //nothing else to receive from this page.
    header("Content-Length: 0");

    //Send the output buffer and turn output buffering off.
    ob_end_flush();
    //Yes... flush again.
    flush();

    //Close the session.
    session_write_close();

    //Do some work

    //Then notify the user that it's finished

Actualización 14/09/2021: si usamos PHP-FPM hay una función que nos permite cerrar la conexión con el navegador y seguir haciendo lo que queramos en nuestro código, fastcgi_finish_request.

Enlaces en páginas web sin especificar protocolo

Últimamente he estado viendo en bastantes sitios que los enlaces a documentos externos se escriben sin especificar el protocolo. Es decir, en lugar de escribir

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

escribiríamos esto

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

Así a bote pronto me ha chocado un poco, porque de toda la vida yo pensaba que era el http:// lo que distinguía a un enlace externo de uno que hacía referencia a un documento dentro del árbol de ficheros de nuestra página.

Pero por lo visto resulta que es el // lo que hace que el navegador interprete el enlace como externo, por lo que nos podemos ahorrar el http o https en la URL siempre que queramos que el enlace use el protocolo http y no otros como ftp, mailto, o tel.

Además tenemos una ventaja añadida si quitamos el protocolo: el navegador usará el protocolo que esté usando la página en la que está el enlace. Si hemos accedido a ella mediante http usará http, y si hemos accedido mediante https usará https. Esto significa que si estamos cargando un fichero con http (contenido no seguro) en una página cargada con https (contenido seguro) el navegador no protestará (que yo recuerde esto solamente lo hace Internet Explorer).

Actualización del 17/11/2015: no es solo Internet Explorer, otros navegadores también bloquean por ejemplo ficheros de JS cargados desde una URL no segura si se ha accedido a la página a través de una URL segura. Un motivo más para usar esta forma de escribir las URL.

Extensión Google Chrome para videos de YouTube que se cuelgan esperando a clickberry.tv

Antes de cambiar de ordenador utilizaba Ubuntu 12.10 32 bits y me pasaba una cosa muy extraña: en muchas páginas había incrustados videos de YouTube que no podía ver; el navegador Google Chrome se quedaba mostrando el mensaje “Esperando a clickberry.tv” durante un buen rato y finalmente mostraba un mensaje de error en el vídeo.

Al cambiar el ordenador e instalar Ubuntu 13.10 64 bits pensaba que el problema se solucionaría pero resulta que no, me sigue pasando lo mismo. Después de mucho buscar en Google no he encontrado ninguna solución, ni siquiera he podido encontrar referencias de que esto le pase a alguien más.

Como el problema era bastante molesto decidí investigar las extensiones de Chrome para intentar solucionar el asunto. Resulta que las extensiones son simplemente HTML, CSS y JS, así que resulta muy sencillo hacer una. Este es el código JS que soluciona el problema:

$(document).find("iframe").each(function()
{
	var src = $(this).attr("src");

	if (src.indexOf("youtube.com/embed") > -1)
	{
		var code = src.split("/embed/")[1].split("?")[0];
		var button = $(document.createElement("div"));
		button.addClass("button");
		button.html(chrome.i18n.getMessage("button_caption"));
		button.click(function()
		{
			window.open("http://www.youtube.com/watch?v=" + code);
		});
		button.insertBefore($(this));
	}
});

Realmente no soluciona el problema, el video incrustado sigue esperando a clickberry.tv, pero la extensión añade un botón encima que abre el video en la página de YouTube, donde se ve sin problemas.

La extensión está disponible de forma gratuita en la Chrome Web Store.

Cargar un programa al inicio con retardo

Es posible que alguna vez necesitemos que un programa se inicie al arrancar Ubuntu pero con cierto retardo, por ejemplo pasados dos minutos. Para eso tenemos que añadir el programa en la aplicación “Startup Applications”, pero en lugar de poner simplemente el nombre del ejecutable del programa pondremos esto:

bash -c "sleep 2m && /ruta/del/ejecutable"

Con el código del ejemplo (sleep 2m) retrasaremos dos minutos la ejecución del programa, si quisiéramos que fueran treinta segundos pondríamos sleep 30 (por defecto el argumento de sleep es en segundos).