Archivo de la categoría: Informática

La cultura de la remezcla

Creo que hay bastantes cosas que estoy haciendo y que no estoy contando en el blog, así que voy a empezar a ponerlas por aquí, aunque sea de forma desordenada en el tiempo, por si os resultasen de interés.

El pasado mes de septiembre participé en los Cursos de Verano de la EHU/UPV invitado por la gente de Tabakalera para hablar de la «cultura de la remezcla» dentro de un curso sobre «content curators», un rol que muchos realizan en esta sobre-informada sociedad aunque no conozcan tan rimbombante nombre.

Fue muy agradable participar en el curso. La organización fue impecable y la gente que participó muy animada. Además tuve el placer de compartir viajes con Venan Llona, todo un lujo. Lo pasé muy bien.

Si queréis saber lo que conté, estáis de suerte, porque está todo grabado. Ojo, que es un vídeo de un poco más de una hora. Avisados estáis 😉

PABLO GARAIZAR – CONTENT CURATOR from Tabakalera on Vimeo.

La presentación que utilicé está colgada en Slideshare:

Y si preferís la prosa a las artes escénicas, aquí tenéis este borrador sobre el tema:

Todo ello publicado con licencias libres, claro, para que lo remezcléis a gusto 😉

Slideshare Brackets (WordPress plugin)

This plugin is based on Youtube Brackets plugin by Robert Buzink (which is, in turn, based on Quicktime posting plugin by Shawn Van Every), and works in the same way.

WordPress.com doesn’t allow embedding Slideshare code directly, but using a bracket-based syntax is permitted. Here you are an example:

[s1ideshare id=5936296&doc=aprendices-tedxbilbao-101127134340-phpapp01]

If you have migrated your blog from WordPress.com to a standalone WordPress.org based one, and your posts are likely to have embedded Slideshare presentations, this plugin may be helpful 🙂

Download Slideshare Brackets 1.0.

Un añito en barbecho

La última entrada por aquí fue hace un añito exactamente, lo que significa que este blog ha estado un año entero en barbecho 😀

No, no es este el típico post disculpatorio diciendo que pronto volveré a la carga y tal y cual, sino todo lo contrario. Desde su nacimiento, este espacio nunca ha sido un blog sino una manera cómoda de ir recopilando las cosas que hacía relacionadas con la informática y que quería que estuvieran accesibles desde Internet para toda la gente interesada en ellas.

¿Significa esto que no he hecho nada relacionado con la informática en 2010? Sí y no. Claro que he hecho cosas, pero no tan originales como para merecer un artículo por aquí 😀

Bueno, pensándolo un poco mejor, igual cuelgo cómo migré el blog de un wordpress.com a un wordpress.org (nada nuevo) y me tuve que apañar un plugin para WordPress para que me reconozca los tags entre corchetes típicos de wordpress.com para embeber contenido externo. El plugin en concreto embebe presentaciones de Slideshare y es el que me faltaba, porque para Youtube ya hay otros plugins que hacen esto mismo bastante bien. De hecho, el mío de Slideshare no es más que un search&replace de uno que había para Youtube que a su vez era otro search&replace de otro plugin para QuickTime… viva el software libre 😀

Pues nada, que paséis buena noche y que 2011 sea un poco mejor que 2010 😉

Como bajar vídeos flash que se resisten (ComedyCentral, por ejemplo)

Me he pasado unas cuantas horas intentando descargar un vídeo en Flash para no depender de mi conexión a Internet cuando quiera volver a verlo. Con Firefox no suelo tener mayor problema en hacerlo gracias a Video Download Helper, una extensión que a golpe de click te resuelve la papeleta casi siempre. Pero el caso de esta tarde quedaba fuera de los dominios de Video Download Helper, porque no se trataba de un vídeo en Flash (FLV) descargado desde la web (HTTP), sino del típico esquema reproductor multimedia en Flash + streaming de vídeo por RTMP.

En concreto, mi «reto» era descargar la entrevista de Stephen Colbert a Lawrence Lessig (os la recomiendo, muy buena 😉 ).

Buscando en gúguel llegué a páginas bastante desactualizadas que me hablaban de infinidad de programas para Win32 como GetFLV o ReplayAV que terminé probando en Wine y en una máquina Windows con VirtualBox, con poco éxito.

Cada vez que pulsaba el botón de play, mi frustración iba en aumento, porque tenía claro que «si se puede ver, se puede descargar». Así que con el típico enfoque «moscas a cañonazos» que predomina en el recetario de este humilde blog, terminé dando con lo obvio (aunque como dijo Lacan: «Lo obvio suele pasar desapercibido, precísamente por obvio», también procede el más castizo refrán: «vistos los cojones, toro»): capturar todo, buscar URLs en la captura y descargarlas.

Manos a la obra:

1. Captura de tráfico

Para capturar el tráfico, nada como el viejo tcpdump a todo trapo:

tcpdump -i eth0 -p -s 0 -w captura.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C7042 packets captured
7042 packets received by filter
0 packets dropped by kernel

2. Búsqueda en la captura

Para buscar, probamos con grep:

grep -i rtmp captura.pcap
Coincidencia en el fichero binario captura.pcap

Sabemos que estás ahí…

strings captura.pcap | grep rtmp
rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv
rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_480.flv
@rtmp://88.221.92.180:1935/ondemand?_fcs_vhost=cp9950.edgefcs.net

Perfecto, a por ello…

3. Descarga del stream de vídeo

Para bajar un flujo de datos en RTMP, rtmpdump o flvstreamer son nuestros aliados:

flvstreamer -r "rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv" -o colbert.flv
FLVStreamer v1.8e
(c) 2009 Andrej Stepanchuk, The Flvstreamer Team, license: GPL
Connecting ...
Starting download at 0.000 kB
Metadata:
duration 370.94
width 240
height 180
videodatarate 250
audiodatarate 80
framerate 14.98
creationdate Fri Jan 9 01:01:09 2009
lasttimestamp 370.91
lastkeyframetimestamp 368.97
videocodecid 4
audiocodecid 2
audiodelay 0
canSeekToEnd FALSE
filesize 12810455
videosize 8851208
audiosize 3879788
datasize 19758
ERROR: ReadPacket, failed to read RTMP packet body. len: 65812
Download may be incomplete (downloaded about 8.30%), try --resume
Closing connection.

Vaya, parece que se corta cada pocos bytes, probaremos usando la fuerza bruta y la opción «resume»:

while true; do flvstreamer --resume -r "rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv" -o colbert.flv; done

¡Genial! El FLV ya está en nuestro disco duro a buen recaudo. Ahora a remezclaro y vitaminarlo 🙂

Hackit 2009

Tarde, muy tarde, mucho más tarde de lo razonable… pero bueno, aquí está, el hackit del 2009 disponible para que wannabes, hax0rz y demás calaña se entretengan en estas entrañables fiestas. Esta edición ha sido coordinada por el inefable Hey_neken, al que le hemos ayudado entre topo[LB], Futur3, roman – el gallego, thEpOpE / Nocturns, Jonbaine, OntzA, sourcerer, Juanan y otra gente que conformamos la lista creade después del Call for levelz de 2008.

Podéis jugar online desde http://hackit2009.txipinet.com, bajaros el tarball con los niveles y configurar un servidor local o crear un mirror propio en Internet. Si elegís esta última opción, avisadme para referenciar vuestro mirror en la página de hackits 😉

Happy hacking! 😉

PD: Hay dos niveles (11 y 12) que se han quedado fuera del tarball: uno requiere de un servicio de red y el otro es un dump de memoria enorme que no hemos podido traer fácilmente al servidor. Intentaremos colgar este último más adelante, de todas formas.

Bajar presentaciones no disponibles para descarga en Slideshare

Este artículo va de saltarse restricciones, de forma manual y un poco chapucera, pero efectiva O:-)

Restricciones que quizá estén ahí por algo, pero que personalmente me tocan la moral porque no me gusta nada depender de la conexión a Internet y de que los hados de la Cloud Computing se apiaden de mí cuando los necesite.

El caso es que cuando encuentro una presentación en Slideshare que me gusta, suelo descargármela y archivarla en mi PC (muy 1.0, ya sé, pero es que se ven muchos sopapos 2.0 y tampoco estamos para perder el tiempo :-D).

Bueno, al tema. Como os digo, todo esto es un poco manual, quizá se pueda automatizar algo más (animaos a hacer sugerencias en los comentarios 😉 ):

  1. Instalamos GreaseMonkey en nuestro Mozilla Firefox.
  2. Instalamos y activamos el script «SlideShare Downloader» de GreaseMonkey.
  3. Instalamos el complemento DownThemAll! de Mozilla Firefox.
  4. Accedemos a una presentación en Slideshare que no permita la descarga (ésta, por ejemplo). Si hemos hecho los pasos anteriores bien, nos aparecerá un enlace «Download» al lado de la presentación (fijaos que es diferente del original «Get File»): Download Slideshare
  5. Pulsamos en el enlace y nos generará tantos enlaces a ficheros flash como transparencias tenga la presentación: Slideshare download all
  6. En esa ventana, botón derecho > DownThemAll! y nos bajamos todos los SWFs: Slideshare downthemall
  7. Pasamos los SWFs a JPG con SWF2JPG (quizá venga bien un bucle tipo: for F in *.swf; do swf2jpg $F $F.jpg; done).
  8. Con todos los JPGs, hacemos un PDF: convert *jpg presentación.pdf
  9. Profit! 😉

Día de Internet desde la radio

¡Qué curioso!, ¿no? Hablando desde uno de los medios más antiguos de retransmisión de información de uno de los más modernos. Internet killed TV Star? Probablemente. Lo que no tengo tan claro es que haya hecho lo propio con la radio, parece que se llevan bastante bien 🙂

Así que esta mañana, gracias a una invitación de Javier Vizcaino vía Julen, he participado junto a Iratxe Molinuevo en Más que Palabras de Radio Euskadi hablando sobre este día.

No he dicho nada del otro jueves, pero parece que ha gustado, así que me han pasado esa parte del programa:

[audio:http://blog.txipinet.com/wp-content/uploads/2009/05/radioeuskadi20090517-mqp-txipi.mp3]

Luego en los informativos, han dado un corte de este programa:

[audio:http://blog.txipinet.com/wp-content/uploads/2009/05/radioeuskadi20090517-inform-txipi.mp3]

A mi amama no le ha gustado que me llamaran «txipi» por la radio, me ha dicho que sonaba muy poco serio. Ser poco serio es algo que a amama le parece mal, pero a mí me parece de maravilla 🙂

SWF2JPG en Linux

Bueno, realmente esta receta sirve para cualquier plataforma en la que funcionen Gnash y scrot (bonito nombre, LMAO! :-D).

El caso es que ayer me pasé toda la tarde buscando una solución decente para pasar SWFs (ShockWave Flash) a cualquier formato de imagen. Google está repleto de miles de programas cutre-shareware que no funcionan con Wine y la única orientación que veía en los foros de ayuda era usar las swftools, que son geniales, pero no hacen lo que necesitaba (renderizar una animación SWF y sacar un pantallazo de la misma).

Así que pensé: en UNIX se sigue el principio KISS (Keep It Simple, Stupid), cada aplicación pretende hacer pocas cosas y hacerlas bien. Tenemos una aplicación que reproduce SWF desde la línea de comandos y otra que saca pantallazos desde la línea de comandos. Las juntamos con un poco de pegamento shell script y arreglado 🙂

El resultado es un script que hace lo que promete, aunque tiene algunas limitaciones importantes:

  1. Tarda 1 segundo por animación SWF (no es muy lento, pero tampoco es que sea una maravilla).
  2. No te permite hacer nada más con el ordenador mientras se está utilizando (es un segundo por SWF, pero si son muchas… welcome back to the batch-world!!).
  3. Las imágenes generadas tienen la misma resolución que tu escritorio. Si las quieres en otra resolución, cambia la de tu escritorio 😀

Las limitaciones están causadas por el método troglodita para extraer el pantallazo. El script básicamente lanza la animación en pantalla completa, saca el pantallazo y mata el reproductor Flash. Ya sé que no es profesional, pero funciona O:-)

Aquí tenéis el código, quizá a alguien le sea de ayuda:

#!/bin/sh

GNASH="/usr/bin/gtk-gnash"
SCROT="/usr/bin/scrot"
OUTPUTFORMAT="jpg"

if [ $# -ne 1 ]
then
  echo "error, usage: $(basename $0) file.swf"
  exit 1
else
  $GNASH --fullscreen $1 &
  GNASHPID=$!
  $SCROT -d 1 $1.$OUTPUTFORMAT
  kill $GNASHPID
fi

Como podéis observar, es necesario indicar las rutas a Gnash y scrot para que funcione. Si queréis un SWF2PNG o similares, basta con cambiar el OUTPUTFORMAT.

Happy hacking 😉

Tempestades electromagnéticas desde tu ordenador

Hace un par de semanas organizamos en Deusto el Asegur@IT III, un evento relacionado con la Seguridad Informática, con la participación de empresas punteras a nivel estatal: S21sec, Panda Security, la Universidad de Deusto, Informática64 y Microsoft.

Yo participé con la charla más marciana de todas, sin desmerecer la atrapada de Mikel Gastesi e Iñaki Etxebarría con Windows Internals a tope, hablando sobre TEMPEST.

Podría escribir un artículo sobre TEMPEST, pero es más fácil poneros un par de enlaces a la presentación que utilicé y al audio de la charla.

He intentado hacer un slidecast con slideshare, sincronizando transparencias y audio, pero parece que solo admite ficheros de audio hasta 32 minutos. El resto, lo tendréis que sincronizar a mano O;-)

Espero que os resulte de interés 😉

Bombas fork(): un snowcrash para tu shell

Es conocido desde hace tiempo que hay una vulnerabilidad de DoS (Denial of Service, Denegación de Servicio) que afecta a muchos UNIX (¿cuál es el plural de UNIX? UNICES suena fatal :-D), así como en GNU/Linux. Con simplemente escribir este conjuro en una shell, terminamos por colgar el sistema:

:(){ :|:&};:

Menuda movida, ¿no? :-O

Lo primero de todo, ¿qué significa ese código? Bien, si sustituimos «:» por «función» e indentamos bien, se entiende mejor:

:(){ :|:&};:

funcion () { funcion | funcion & }; funcion

funcion () {
  funcion | funcion &
};
funcion

Es decir, primero definimos una función y luego la llamamos. Dentro de esa función, se llama de nuevo a esa función (recursión) dos veces y se une esos dos procesos por una tubería (pipe). Además se pone un & al final para que todo eso se ejecute en segundo plano.

A fin de cuentas lo que tenemos es un proceso que se llama a sí mismo (lo que ocasiona un bucle), pero que no tiene condición de finalización (bucle infinito) y lanza dos procesos hijos cada vuelta del bucle y los une por una tubería (más del doble de recursos necesarios cada vez).

Lo dicho, esto es más viejo que el picor, aunque hay scripts realmente sencillos que hacen cosas parecidas con distinto código. En Journey’s End nos plantean uno:

#!/bin/sh
$0 &
exec $0

Así que el problema no está en el conjuro en sí (no tendría sentido poner en nuestro IDS esa cadena para detectarla como maliciosa, porque habría infinitas cadenas que harían lo mismo), sino en la teoría que subyace: un usuario con un límite demasiado amplio de procesos de usuario creados, puede acabar los recursos del sistema.

¿Cuál es mi límite de procesos? Lo podemos conocer fácilmente con el comando ulimit:

ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 12273
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 12273
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

El número máximo en este sistema es 12273 para mi usuario, más que suficiente para dejarlo tuerto 🙁

Si quisiéramos evitar este problema, bastaría con cambiar ese límite, así:

ulimit -u 1000

De esta manera, evitamos el problema, aunque solamente para la shell en la que hemos ejecutado este comando. Podríamos lanzarlo en el /etc/profile o en algún script de inicio de sesión, pero es bastante más elegante modificarlo en el fichero limits.conf.

grep "nproc" /etc/security/limits.conf
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0

Como vemos, tenemos varios ejemplos que limitan los procesos a 20 o a 50 en función del grupo al que pertenezcan. También se pueden definir límites por usuario o se puede establecer un límite general:

% hard nproc 1000

Con esto limitamos el número máximo de procesos a 1000 para todos los usuarios.

Y entonces podemos preguntarnos ¿cómo la gente de GNU/Linux es tan torpe de poner un límite que nos puede colgar el sistema operativo? La respuesta tiene que ver no solo con la cantidad de procesos, sino con el peso de cada uno de ellos. Si fijamos a 1000 el número máximo de procesos por usuario, nos libramos de las dos bombas fork que hemos visto, pero modificando ligeramente la segunda, podríamos seguir tirando el sistema para muchos menos procesos:

#!/bin/sh
$0 &
find . &
exec $0

Quizá entonces no solamente haya que limitar el número de procesos, sino otros límites definidos en el fichero limits.conf.

Cuando leamos que tal malware permite ejecutar «código arbitrario» en nuestro sistema, nos podremos acordar de este torpe código y de cómo el solito es capaz de tumbar todo el servidor, desde una cuenta de usuario :-O