Recuperando los vídeos Flash borrados por el plugin de Adobe

La nueva versión del plugin de Adobe borra los archivos termporales de vídeo justo después de abrirlos para evitar que tengamos la tentación de copiar el vídeo simplemente copiando el archivo /tmp/FlashXXXX. hons, un usuario de commandlinefu.com ha publicado un comando que crea un enlace simbólico al controlador del archivo con el nombre del archivo borrado: $ for h in $(find /proc/_/fd -ilname "/tmp/Flash_" 2>/dev/null); do > ln -s "$h" $(readlink "$h" | cut -d' ' -f1); > done ...

March 4, 2011 · 2 min · 280 palabras · Nacho Cano

Conectarse por SSH sólo usando la clave

Conectarnos a nuestro servidor de SSH utilizando una clave RSA en lugar de una contraseña es más seguro, dado que la clave RSA será bastante más larga y difícil de comprometer que nuestra contraseña, y más cómodo, dado que ya no tendremos que escribir la contraseña para iniciar sesión. Configuración En el equipo local, creamos la clave. Cuando nos pida contraseña, le asignamos una, que nos será requerida cada vez que queramos usar dicha clave. Si estuviéramos creando las claves en el servidor la dejaríamos en blanco. ...

March 3, 2011 · 3 min · 607 palabras · Nacho Cano

Cabeceras HTTP personalizadas en Apache2

Podemos modificar las cabeceras que devuelve el Apache usando el módulo mod_headers. Por ejemplo, añadiendo a nuestro virtualhost: Header set X-MyHeader "It took %D microseconds to serve this page." Se pueden modificar tanto las cabeceras que van a ser enviadas, con la directiva Header, como las que vienen con una petición, con la directiva RequestHeader. Las acciones que se pueden llevar a cabo son: set, especifica el valor de la cabecera, la crea si no existía o la modifica en caso contrario append, añade el valor al final de la cabecera existente, y separa los valores por comas add, añade una cabecera, duplicando la cabecera si ésta ya existía unset, elimina una cabecera echo, sólo en el caso de la directiva Header, y permite utilizar el valor de una cabecera en el `request` Este es el resultado: ...

February 28, 2011 · 2 min · 268 palabras · Nacho Cano

setuid y setgid

setuid y setgid son unos permisos especiales, también llamados los sticky bits, que se les pueden asignar a los programas ejecutables para que se ejecuten con los permisos del propietario y no del usuario que los ejecuta. Esto sirve para, por ejemplo, que cualquier usuario ejecute el comando ping aunque éste necesite privilegios de administrador, que es el propietario. En GNU/Linux, y en Unix, estos bits se ignoran cuando se aplican a directorios. ...

February 28, 2011 · 2 min · 415 palabras · Nacho Cano

html2pdf = html2ps + ps2pdf

Un buen comando para convertir una web a PDF, idóneo para sitios con documentación pero que ésta sólo está disponible online. Por ejemplo: $ html2ps -W b http://www.vala-project.org/doc/vala/ | ps2pdf - out.pdf Con la opción -W b le decimos a html2ps que siga sólo los enlaces que están en el mismo directorio, o a partir de él, respecto a la ruta proporcionada. Fuente: techpin.com Podemos crear un alias que reciba dos parámetros, la URL y el nombre que queremos ponerle al PDF: ...

February 28, 2011 · 1 min · 100 palabras · Nacho Cano

Mystery

Casi parece que está escrito en chino, o mejor dicho en brainfuck, o puede que no sea muy zen, pero no deja de ser elegante. def mystery(n): a = list(range(n)) [[(yield i) for a[::i] in [([0]*n)[::i]]] for i in a[2:] if a[i]] El nombre de la función pretende no dar pistas para que intentemos averiguar qué hace exactamente esta función. He aquí una pista: Fuente: numberspiral.com >>> f = mystery(20) >>> try: ... while True: ... print f.next() ... except StopIteration: ... pass 2 3 5 7 11 13 17 19

February 26, 2011 · 1 min · 91 palabras · Nacho Cano

Python Zen

Just to keep in mind… Author: euart >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than _right_ now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

February 26, 2011 · 1 min · 154 palabras · Nacho Cano

Abusando del código de estado HTTP

function logged_in(id, txt) { document.getElementById(id).innerHTML = txt; } En el artículo original, de [Mark Cardwell][], se muestra como podemos saber si un visitante de nuestra página está conectado a diferentes servicios, como GMail, Facebook, Twitter, etc, aprovechando las diferencias de comportamiento que muestran estos servicios al acceder a enlaces concretos si el usuario está conectado o no. GMail ----- Conectado a GMail? __**...**__ Para comprobar si el visitante está conectado a GMail se intenta cargar una imagen de la siguiente manera: El src de la imagen hace referencia a la imagen del perfil de Mark, si no hemos iniciado sesión en GMail, la dirección del src no devolverá una imagen, sino que redireccionará a una página HTML. Con los atributos onload y onerror podremos distinguir si la imagen ha cargado o no, por lo que podremos saber si el usuario ha iniciado sesión o no. Esto parece que funciona en Firefox, Chrome, Opera, Safari y varias versiones de Internet Explorer. ...

February 22, 2011 · 4 min · 715 palabras · Nacho Cano

Solucionado el error "Tcl/Tk not found" al instalar OMNeT++ en Ubuntu

OMNeT++ es un entorno de desarrollo modular y extensible desarrollado en C++, y gratuito pasa uso no comercial, especialmente pensado para construir simuladores de redes de eventos discretos en el sentido más amplio: redes de comunicaciones alámbricas, inalámbricas, redes de colas, etc. El soporte para dominios específicos tales como redes de sensores, redes inalámbricas ad-hoc, protocolos de Internet, modelado del rendimiento, etc, viene dado por proyectos desarrollados de forma independiente. OMNeT++ ofrece un IDE basado en eclipse, un entorno de ejecución gráfico y otras herramientas. Hay extensiones para simulación en tiempo real, emulación de redes, lenguages de programación alternativos (Java, C#), integración con bases de datos, etc. ...

February 21, 2011 · 3 min · 531 palabras · Nacho Cano

Cambiar la contraseña de administrador en Django 1.2

A partir de Django 1.2 se ha añadido el comando manage.py changepassword. $ ./manage.py changepassword ['username'] Si no proporcionamos un nombre de usuario se intentará cambiar el nombre de usuario que concuerde con el del usuario que ha iniciado sesión. Este comando nos ahorra escribir lo siguiente: >>> from django.contrib.auth.models import User >>> u = User.objects.get(username__exact='john') >>> u.set_password('new password') >>> u.save() El usuario administrador es el primer usuario del sistema por lo que podemos escribir: ...

February 16, 2011 · 1 min · 149 palabras · Nacho Cano