Túnel SSH para acceder a máquina remota

Mi conexión a Internet no tiene IP fija, y eso supone a veces un problema. Hay veces que por motivos de seguridad el acceso a un servidor está restringido a ciertas direcciones IP y si no tengo IP fija no me la pueden autorizar.

En estos casos lo que hago es dar la dirección IP de algún servidor que tengo contratado (servidor intermedio) y que no tiene restricción de IPs; entro por SSH a mi servidor y desde ahí hago SSH al servidor final. Esto funciona bien, pero es un poco engorroso, así que es mejor utilizar un túnel SSH. Lo que hace el túnel es conectar un puerto de mi ordenador con el puerto 22 del servidor final a través del servidor intermedio. El comando para hacer esto es:

sudo ssh -Nf -L localhost:32:SERVIDOR_FINAL:22 USUARIO_INTERMEDIO@SERVIDOR_INTERMEDIO

Una vez hecho esto, conectando al puerto 32 de mi localhost estaré accediendo al puerto 22 del servidor final. Si, por ejemplo, quisiera subir un fichero a ese servidor, podría hacerlo con el comando scp:

scp -P 32 /home/koas/fichero.jpg USUARIO_FINAL@localhost:/home/www/fichero.jpg

Enviar paquetes UDP desde línea de comandos

Estoy haciendo un programa para poder hacer una consola tipo Firebug pero para código PHP, y la idea es que el PHP envíe datos a esa consola mediante UDP. He empezado a hacer el programa y para hacer pruebas rápidas del servidor necesitaba enviar paquetes UDP. La solución más sencilla es un programa que se llama sendip, que permite enviar paquetes de distintos tipos a cualquier destino.

Para instalarlo en Ubuntu:

sudo apt-get install sendip

Una vez instalado, el uso es muy sencillo:

sudo sendip -p ipv4 -p udp -is 192.168.0.199 -us 5000 -ud 1947 -d "Soy un paquete udp" localhost

Los parámetros son estos:

  • -p ipv4: le indica al programa que usaremos  ipV4.
  • -p udp: le indica al programa que usaremos UDP.
  • -is 192.168.0.199: es la dirección IP de origen del paquete.
  • -us 5000: puerto de origen.
  • -ud 1947: puerto de destino.
  • -d “Soy un paquete udp”: los datos a enviar.
  • localhost: el host al que enviaremos el paquete.

Minimizador de JS y CSS

En las páginas que están en producción es conveniente minimizar el código JavaScript y el CSS para que pesen menos y ayuden a que la velocidad de carga de la página sea rápida. Si bien los navegadores cachean estos ficheros y esto solamente se aplica a la primera carga siempre conviene que sea lo más rápida posible (además de reducir el ancho de banda que consumimos en nuestro servidor).

Hay muchos minimizadores de código JavaScript y de CSS, yo uso JavaScript Minifier simplemente porque tiene un enlace en la misma página a su minimizador de CSS, y hace todo el proceso más rápido.

Canciones que hice con el Scream Tracker

Hace muuuuuuuuchos años, cuando mi ordenador era un 386 con 4, ojito, 4 megazas de RAM y 33 MHz de velocidad de procesador 386, dedicaba los ratos muertos a hacer cancioncillas con el ordenador.

Para hacerlas usaba Scream Tracker, un programa hecho por un tal Sami Tammilehto, un figura finlandés (hay mucho que agradecer a Finlandia, desde Linus Torvalds a Stratovarius) que formaba parte de un grupo de demos que se llamaba Future Crew.

Estos Future Crew eran unos cracks. Hacían demos que exprimían toda la potencia de los procesadores de la época. Recuerdo que la primera vez que vi la demo de Second Reality (en el link se ve como video pero lo mismo que se ve en la pantalla estaba generado en tiempo real con un 386) me quedé flipado, para mí era incomprensible poder hacer esas cosas con el ordenador. Vale la pena verse los nueve minutos que dura la demo, pero si no tenéis mucho tiempo saltad hasta el minuto 1:38, con la música os engancharéis hasta el final.

Este Sami programó Scream Tracker para que lo usaran los músicos de Future Crew para hacer la música de las demos, e hizo público el programa. Yo lo conseguí con un disquete de una revista (¡1.4 MB de datos, cuidado!) y empecé a hacer cancioncillas.

La primera que hice fue en 1.995, y era una especie de canción ratonera que no tenía pies ni cabeza. Hice muchas, y una vez en casa de g puse una y le gustó, así que me he propuesto vencer la vergüenza que siempre da enseñar las canciones de uno y hacer una web desde donde se puedan descargar las canciones.

Pero solamente lo haré si consigo que en esta entrada haya cuatro comentarios o más. Así que comentad, o no, según veáis 🙂

Plugin de jQuery para animaciones

Aunque sé perfectamente que tiene que haber mil plugins que hagan esto me he permitido reinventar la rueda porque nunca había hecho un plugin de jQuery y ya tocaba.

Como el formato MNG aún no está soportado en todos los navegadores hay que buscarse las castañas para hacer animaciones con imágenes que llevan transparencia alpha, Este plugin lo que hace es coger una imagen que tiene todos los fotogramas de la animación uno encima del otro, y lo pone como imagen de fondo de un div, cambiando periódicamente la posición de la imagen de fondo para hacer el efecto de animación.

/*
Plugin para animaciones
v1.0
============================================================

Este plugin está pensado para poder tener animaciones tipo GIF pero con
imágenes PNG con transparencia alpha.

Utiliza una imagen en la que los frames están colocados uno encima del otro.
El plugin va cambiando la posición de la imagen de fondo del div para hacer el
efecto de animación.

USO: 

Se crea un div con estos atributos:

* data-spriteImg: URL de la imagen que contiene los frames
* data-numSteps: número de frames en la imagen

Se llama a la función animPic en el div pasando como variable el intervalo
de tiempo entre frames (en milisegundos), que por defecto es 1000.

$("#nuestroDiv").animPic({timeStep: 1000});

============================================================
*/
(function($)
{
    $.fn.animPic = function(options)
    {
        var defaults =
        {
            timeStep  : 1000 // Tiempo entre cambios de imagen (milisegundos)
        };

        options = $.extend(defaults, options);
        if (!this)
            return false;

        return this.each(function()
        {
            var obj;
            var height;
            var spriteimg;
            var numSteps;
            var currentStep = 0;

            obj = $(this);
            spriteImg = obj.attr('data-spriteImg');
            numSteps = obj.attr('data-numSteps');

            var i = $(document.createElement("img"));
            i.load(function()
            {
                height = this.height / numSteps;
                obj.css("width", this.width + "px");
                obj.css("height", height + "px");
                obj.css("background-position", "0 0");
                obj.css("background-image", "url('" + this.src + "')");

                setInterval(function()
                {
                    ++currentStep;
                    if (currentStep == numSteps)
                        currentStep = 0;
                    obj.css("background-position", "0 -" + (currentStep * height) + "px");
                }, options.timeStep);
            });
            i.attr("src", spriteImg);
        });
    };
}(jQuery));

SUOP, un operador móvil colaborativo

Hoy me he encontrado con esta empresa, SUOP, que es un operador móvil colaborativo. La idea en la que se basa es sencilla: tener una comunidad de usuarios que sea la base de la empresa, que decidan qué servicios quieren que se les ofrezca y que colaboren entre ellos y con la empresa para que todos ganen.

La verdad es que me ha costado un poco entender el concepto, porque es algo que no había visto nunca aplicado en una empresa como un operador de telecomunicaciones. En otros ámbitos sí lo he visto y sé que funciona muy bien, siendo el mejor ejemplo el sistema operativo GNU / Linux. Cuando no sé cómo hacer algo busco en Internet y encuentro foros donde alguien que sabe más que yo me ayuda y me explica cómo hacerlo. Si necesito un programa que haga algo busco a ver si alguien ya lo ha hecho y, si no existe y puedo hacerlo yo, lo hago y lo pongo a disposición de los demás usuarios.

Bien, pues este concepto de comunidad y de colaboración es lo que esta gente ha tomado como base de su empresa. En lugar de gastar dinero en, por ejemplo, un servicio de atención al cliente (que además en el 99% de los casos suele ser de calidad bastante mediocre, o al menos es la sensación que he tenido yo cuando he tenido que llamar a cualquier servicio técnico) en SUOP ese servicio técnico lo dan otros usuarios de la empresa con conocimientos técnicos. A cambio de este servicio se van acumulando puntos que luego se canjean por dinero. Este dinero se puede cobrar, cambiarlo por saldo o donarlo a una ONG. Pongo aquí un pequeño video en el que explican en qué consiste su empresa:

 

En fin, que la idea me gusta, me he registrado con ellos  y estoy seguro de que va a ser un éxito, igual que lo ha sido GNU / Linux. ¿Una operadora de telecomunicaciones, que son probablemente los mayores exponentes de “empresas tiburón” que hay en el mundo, que se rige por una filosofía Ubuntu (soy porque nosotros somos)? Sí, por favor, muchas gracias.

Descargar la Wikipedia al disco duro

Tenía por casa un portátil DELL Inspiron 7000 del año 99 y no sabía bien qué hacer con él cuando me acordé de que mi padre siempre se queda pasmado con la Wikipedia cuando la ve en mi ordenador, le asombra la cantidad de información que tiene. Me sonaba que se podía descargar al disco duro, así que investigué un poco y efectivamente se puede y además es muy sencillo. Así el portátil podrá ser útil durante unos años más como Wikipedia offline.

Lo primero que haremos será descargarnos Kiwix, que es un programa para visualizar textos de wikis en formato ZIM. Una vez instalado necesitaremos descargarnos el contenido de la Wikipedia en este formato ZIM, para ello podemos hacerlo desde la página de descargas de kiwix.org o a través de este torrent. Yo usé el torrent y hay muchas fuentes, se descargó muy rápido (ojo, son 10GB y eso que no incluye las imágenes). El fichero .zim contiene un volcado de Wikipedia de marzo de 2012.

Una vez tengamos instalado Kiwix simplemente abrimos el fichero .zim y ya tenemos la Wikipedia a nuestra disposición.

iotop: ver procesos que acceden al disco duro

Hay veces que uno está con el ordenador ganándose las lentejas y no está haciendo nada del otro mundo pero se escucha al disco duro “rascando” continuamente. Para saber qué procesos están accediendo al disco existe un programa que se llama iotop. Si lo ejecutamos podremos ver exactamente quién es el responsable de la actividad del disco.

Aquí una pantalla de ejemplo, ejecutando iotop con el parámetro -a (que va guardando el histórico de accesos desde que se inició iotop).

iotop

Para instalarlo, basta con ejecutar

sudo apt-get install iotop

Y luego ejecutarlo como root:

sudo iotop -a

CKEditor: forzar pegado como texto plano

El CKEditor es el editor de textos WYSIWYG para web que más me gusta, funciona estupendamente y tiene una API muy intuitiva.

Lo uso siempre que en un gestor de contenidos hay que poder editar texto dando un cierto formato, metiendo imágenes, tablas, etc… El problema suele venir cuando los clientes, al usarlo, copian y pegan de programas como Word, que mete su propio código HTML y cambia fuentes, tamaños de letra, espacios. Al final el contenido acaba quedando horroroso.

Pero nos podemos evitar estos dolores de cabeza con una opción de configuración muy sencilla:

config.forcePasteAsPlainText = true;

Simplemente añadiendo esta línea cualquier texto que se pegue se pegará como texto plano, librándonos de cualquier formato que pudiera tener el texto original y respetando el estilo de nuestra página.