Archivo de la categoría: Software Libre

Curso de Introducción a AngularJS

El pasado mes de julio di un curso de introducción a AngularJS dentro del marco de los cursillos de julio del e-ghost, el grupo de Software Libre de la Universidad de Deusto.

Es muy básico, pero quizá te interese si estás empezando 😉

Aquí tienes la primera parte:

Y aquí la segunda:

Y en la web del cursillo están los materiales que empleamos.

Happy hacking! 😉

Karaoke casero con Audacity

Os voy a contar un truco muy sencillo -pero muy útil- para quitar la voz a vuestras canciones favoritas con Audacity, y de esta forma poder hacer el ridículo en karaokes improvisados, malograr con vuestra voz versiones apócrifas de canciones o iniciaros en el mundo de los mashups 😉

Lo primero que necesitamos es una canción en WAV o cualquier formato que entienda el Audacity (MP3 puede valer). Yo he elegido “Hotel California” de “The Eagles”, por ejemplo.

Una vez abierta con el Audacity, veremos que es una canción stereo, con dos canales:

Si usamos el zoom, podremos ver la forma de la onda en cada uno de ellos y cómo son ligeramente diferentes:

Nos basaremos en el siguiente principio para eliminar la voz: si sumas una onda y su versión invertida, la anulas. Dado que la voz es mono (suele haber un solo cantante con una sola boca) normalmente, estará copiada igual en los dos canales, así que al invertir uno y sumarlo con el otro, se anulará.

¿Cómo hacemos esto? Muy fácil, separamos la pista stereo en dos canales mono:

Seleccionamos solamente una de las pistas:

Y aplicamos el efecto de inversión:

Finalmente volvemos a juntar los canales en una pista estéreo:

Y exportamos el resultado a un MP3.

Si lo hemos hecho bien, tendremos una versión de “Hotel California” en la que no se escuchará la voz y podremos arruinarla con nuestros alaridos.

Realmente este método no es perfecto y si nos fijamos bien, todavía quedará algún resto de la voz en nuestro MP3. Esto es debido a los filtros y efectos de post-producción que se emplean para mejorar las canciones, que no afectan por igual a los dos canales y por tanto dejan trazas que no se anulan al sumar una onda con su inversa. En algunas canciones estos efectos son tan extremos que la voz permanece totalmente audible después de emplear este método ;-(

Una vez eliminada la voz, podemos pensar en cómo se haría para quedarnos solamente con la voz y juntar la voz a la música sin voz de otra canción para inventar nuevas y estrambóticas versiones de música comercial. ¿Se os ocurre cómo podría hacerse? 😉

Claws-mail y la renovación de certificados SSL de Gmail

Estos últimos días estoy teniendo un problema a la hora de usar claws-mail con Gmail (en Deusto tenemos el correo con Google Apps for Education, así que lo tengo que usar sí o sí) porque cada cierto tiempo (1-2 años) Gmail renueva sus certificados SSL para sus servidores de correo.

Esto no debería suponer el mayor problema, pero al no renovar todos los certificados a la vez, durante unos días algunas conexiones van servidores con el certificado SSL antiguo y otras al nuevo. Cuando claws-mail detecta el cambio de certificado, nos avisa de que deberíamos comprobarlo y aceptarlo, así que en esos días inmediatamente posteriores al cambio, hay que estar aceptando certificados a cada rato lo cual es un peñazo fino.

Revisando en foros y en la documentación de claws-mail he dado con la solución: hay que habilitar la opción “unsafe_ssl_certs” dentro del fichero de configuración, ya que no hay ninguna opción para hacerlo desde el interfaz gráfico de claws-mail.

Así, si sufrís este incordio como yo, no tenéis más que editar el fichero ~/.claws-mail/clawsrc, ir a la línea donde se encuentra la opción unsafe_ssl_certs y fijarla a 1:

unsafe_ssl_certs=1

Esto no deshabilita la comprobación del certificado, como pudiera parecer (esa opción es skip_ssl_cert_check), sino que permite almacenar varios certificados para cada servidor, lo que coincide perfectamente con el caso en el que nos encontramos 😉

Embeber proyectos Scratch en cualquier sitio

Esta semana he estado muy involucrado en dos eventos que me encantan: la MoodleMoot (Jornada de encuentro de la comunidad Moodle) y SLUN (Software Libre en la Docencia). En ambos eventos he participado en la organización e impartiendo talleres 🙂

Resulta que a raíz del taller que dí en SLUN sobre Scratch, un asistente me preguntó cómo se llevan Moodle y Scratch y cómo de fácil es embeber proyectos de Scratch en Moodle. La respuesta es sencilla y basta con fijarse en el código que genera la propia web de Scratch para ello, pero para que la gente que no se maneja bien con HTML no se líe, he creado este pequeño generador de código HTML para embeber proyectos de Scratch donde sea.

Para usarlo, solamente tienes que poner la dirección del proyecto Scratch que quieres embeber y pulsar en el botón de generar código. Automáticamente se generará el código necesario y se incluirá en esta página para comprobar que el código generado es correcto.

Qué lo disfrutéis 😉





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 😉

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 😉

Lessig en Euskadi

El pasado 17 de octubre, Araba Enpresa Digitala invitó a Lawrence Lessig a dar una conferencia en Euskadi. Gracias a David Montero, tuve la oportunidad de presentar el evento y de hablar distendidamente con el ponente al finalizar la conferencia 🙂

Lessig en Euskadi

Lessig en Euskadi

Lo cañero del asunto es que Lessig podría ser nombrado “director informático” del gobierno de Barack Obama, así que ahí me tienen, comentando la jugada con quien puede liderar el futuro tecnológico de EEUU :-O La charla que tuvimos después de la conferencia fue muy agradable. A pesar de que las diferencias entre Stallman y Lessig son evidentes, Lessig me pareció una persona muy agradable, correctísimo en sus formas y atinado en sus comentarios. Hablamos de su trabajo en Stanford, de su estilo de presentación y de DRM… bufff, igual Lawrence venía demasiado cansado después de más de 24h de avión como para sufrir mi conversación. Yo lo disfruté un montón, pero no sabría decir si el sentimiento fue mutuo 😀

Esto es lo que dije en el texto de presentación (tengo que agradecer la traducción a Mikel Olasagasti 😉 ):

Gaurko eguna Lawrence Lessig maixuak akademikoki zein profesionalki lortu dituen arrakastak zerrendatzen hasi gintezke (Standford, Harvard, Yale, Cambridge…), baino guzti hori Wikipedian dugu eskuragarri. Ez dago inolako zalantza izpirik Lessig maixuaren gorentasuna kolokan jarriko duenik.

Hala ere, berarengan zerbait nabarmendu beharko banu bere hacker alderdia izango litzateke. Mende honetako hackerrak ez doaz patinetan eta ez dituzte letra berdez betetako eta fondo beltza duten terminalik erabiltzen. Lawrence Lessig ondoen ezagutzen duen kodearen hacker bat da, kode juridikokoa alegia. Bere ekintza hackerrik aipagarriena Creative Commons lizentziak dira, lan artistikoen askapenean izugarrizko iraultza sortu dutenak. Baina hacker on baten moduan ez da horretan geratu eta kultura libre baten aldeko borrokara softwarearen patenteen aurkako kritikak edo espektro radioelektrikoaren askapena gehitu ditu. Gaur egun korrupzio politikoaren aurkako borroka sustatzeko sortu duen “Change Congress” proiektuan buru belarri dabil.

Hemen bildu garen ‘copyfighter’ askorentzat inspirazio iturri bat da, ez soilik mezuan, baita moduetan ere. Ikusiko duzue zertaz hari naizen Lessig aurkezpen metodoa ikusten duzuenean.

Podríamos comenzar la jornada de hoy enumerando los abundantes logros académicos y profesionales de Lawrence Lessig (Stanford, Harvard, Yale, Cambridge…), pero para eso ya está la Wikipedia. Que el profesor Lessig es toda una eminencia es algo fuera de toda duda.

Sin embargo, lo que más me gustaría es resaltar su faceta hacker. Los hackers de este siglo no van en patines en línea ni usan terminales en verde sobre negro. Lawrence Lessig es un hacker del código que mejor conoce, el código jurídico. Uno de sus hackeos más conocidos se plasmó en las licencias Creative Commons que han provocado una auténtica revolución en la liberación de obras artísticas. Pero como buen hacker, no se ha limitado a eso sino que ha sumado a su lucha por la cultura
libre la crítica a las patentes de software o la liberación del espectro radioeléctrico. Actualmente se ha centrado en combatir la corrupción política impulsando su proyecto “Change Congress”.

Lessig es fuente de inspiración de muchos de los copyfighters que hoy nos reunimos aquí, no solamente en el mensaje, sino también en la forma. Ya sabréis de qué hablo cuando veáis en vivo el método Lessig para presentaciones.

Tenéis el resto de fotos de la jornada aquí (cortesía de David Montero), y lo más interesante, el audio de la charla, aquí (cortesía de Euskadi Digital).

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