Categoría: Linux


Recursive crop with Imagemagick

Marzo 4th, 2010 — 2:12am

A very simple and tiny shellscript for cropping images recursively with Imagemagick on Linux. In my case I am working on a Ruby on Rails website, managing images and its thumbnails with attachment_fu. After some months I decided to convert all user stored thumbnails to a cropped format. This is what this script was for.

#!/bin/bash
#
# very little and tiny shellscript for cropping images
# massively and recursively with Linux and Imagemagick
# Make sure you have Imagemagick installed (ie: try to
# execute "convert" binary)
#
# USAGE: place this script in your images parent directory,
# edit and change the size names and widths
#
# Ivan Belmonte <ivan@ivanhq.net - http://ivanhq.net>

SIZES="icon:48 thumb:120" # change them for your needs
FORMATS="jpg JPG jpeg JPEG gif GIF png PNG"


# remove previously sized files
for SIZE in ${SIZES}; do
  SIZENAME=`echo ${SIZE} | cut -f 1 -d :`
  find . | grep -i _${SIZENAME} | xargs rm -f
done


# start resizing and cropping
for FORMAT in ${FORMATS}; do

  for FILE in `find . | grep ${FORMAT}`; do

    for SIZE in ${SIZES}; do

      SIZENAME=`echo ${SIZE} | cut -f 1 -d :`
      SIZEWIDTH=`echo ${SIZE} | cut -f 2 -d :`
      FILENAME=`echo ${FILE} | sed s/".${FORMAT}"//g`

      convert ${FILE} -resize \
      "${SIZEWIDTH}^>" ${FILENAME}_${SIZENAME}.${FORMAT}

      convert -gravity Center -crop \
      ${SIZEWIDTH}x${SIZEWIDTH}+0+0 \
      ${FILENAME}_${SIZENAME}.${FORMAT} \
      ${FILENAME}_${SIZENAME}.${FORMAT}

    done

  done

done

echo "OK"

# enjoy :-)

Comentar » | Linux, scripts

Massive emailer

Noviembre 20th, 2009 — 2:04pm

Yesterday I did a talk at Xing offices in Barcelona. It was about some tips on how to send emails massively from a Ruby on Rails application without being tagged as a spammer by Hotmail, Gmail or Yahoo. I’m not a dedicated expert on this, but I’ve been learning these things while developing last internet site, and I thought it may be also interesting for other developers.
Here are the slides (in english) of the presentation, formerly named “Massive emailing with Linux, Postfix and Ruby on Rails“.

Here is the PDF for downloading.

Comentar » | Linux, Networking, Programación, Ruby on Rails

Remote pair programming

Marzo 24th, 2009 — 2:53am

Pair programming es una técnica en la que dos programadores trabajan con una misma consola, sobre el mismo código. Normalmente uno hace la función de driver y el otro la de observer. El objetivo es evidente: crear un mejor código, a la vez que conseguir que ambos programadores lo conozcan con el mismo nivel de profundidad.

Hoy tenía un problema con el proyecto en el que estoy trabajando, y pedí a Mauro que me echase un cable a ver si entre los dos conseguíamos solucionarlo. Él estaba en su casa, y yo en la mía. Los ingredientes para cocinar un pair programming realmente fluído en remoto:

  • Port forwarding: un puerto para el acceso remoto por SSH y otro para el acceso al servidor de aplicaciones (acceso web)
  • screen: Usando una versión ligeramente modificada del screenrc de r0sk. Usamos tres consolas: [0] log del servidor, [1] vim con el código, [2] una bash para hacer accesos de mysql u otras cosas que necesitemos
  • vim: con los controles mapeados para trabajar con tabs, y el plugin de FuzzyFinderTextMate para buscar y abrir archivos… así se puede hacer todo en una sola consola
  • Skype: Para hablar todo el rato durante la sesión de programación

Los programadores maceros que usan TextMate suelen hacer el pair programming usando VNC, pero aunque no lo he probado pongo las dos manos en el fuego a que tiene que ser una cagada. La pareja screen+vim es brutal por lo lightweight y lo flexible, y consume muy poquito ancho de banda con lo que la comunicación del conjunto (ssh + skype) es perfecta.

La experiencia ha sido GENIAL, y hemos resuelto el problema en aproximadamente 1 hora. Es como trabajar en pair programming en local, tocando el mismo código y comentando todo el rato. Ha sido una pasada, y lo recomiendo a todos los programadores que trabajen separados físicamente del resto del equipo.

Comentar » | Linux, Networking, Programación

backupMussol 0.1

Septiembre 8th, 2008 — 2:00pm

Ya son varios los amigos o colegas que me preguntan cómo hago los backups en los servidores del trabajo. En realidad uso sólamente tres herramientas: Mondo Rescue, DAR y el ya conocido rsync.

  • Mondo es una herramienta para crear imágenes del sistema autoarrancables (liveCD) y poderlas planchar en un CD o DVD (o en varios si es muy grande). Después se puede arrancar el sistema con ellas y restaurarlo así al estado en que se encontraba en el momento de sacar el backup.
  • DAR, por su parte, es una herramienta de backup diferencial.
  • Y rsync todos sabemos lo que es. Yo lo uso para hacer un mirror de los discos en lugar de usar RAID1, de esta forma tengo una ventana de tiempo de 24 horas para restaurar un backup en caso de fallo en el filesystem (ya que con un RAID1 se propaga al momento, y sí: lo he sufrido ya una vez, la primera y la última).

Todas estas herramientas las uso mediante un pequeño set de scripts, es muy sencillito y no tiene mucha complicación, así que he decidido liberarlos para que los podais usar si estais interesados.

He creado una página nueva (se ve en el menú lateral) llamada Mussol Scripts y lo he dejado ahí junto con un par más que había escrito anteriormente para otras cosas.

Espero que os sea de utilidad :-)

Comentar » | Linux

Serveralias en lighttpd

Junio 13th, 2008 — 1:28am

Valga cuanto menos a modo de recordatorio personal.

Un virtualhost habitual (atención al ==):

$HTTP["host"] == "www.something.net" {

Para que www.something.net, www.something.com o www.something.lo_que_sea apunten al mismo documentroot (atención al =~):

$HTTP["host"] =~ "www.something" {

Y para que www.something.net y www.otherthing.net apunten al mismo documentroot:

$HTTP["host"] =~ "(www.something.net|www.otherthing.net)" {

Comentar » | Linux, Networking

Project-open en Debian (update 1)

Noviembre 20th, 2007 — 8:45pm

po-mini.jpgHe actualizado el mini tutorial de instalación de ]Project-open[ en Debian ETCH. Un chico llamado Martin Van Es me ha escrito explicando algunos trucos para hacer funcionar la versión 4 de Aolserver con la versión 8.x de PostgreSQL. Yo lo he probado y funciona perfectamente.

Aquí está el tuto. Como siempre, espero que sea de ayuda!

I have updated the mini-tutorial about installing ]Project-open[ on Debian ETCH. A guy called Martin Van Es sent me some emails with tips on making it work with Aolserver4 and PostgreSQL 8.1. I’ve tested it and works okay.

Here is the tutorial. I hope it helps!

Comentar » | Debian, Linux, project-open

Paquetes de Slackware con makepkg

Septiembre 25th, 2007 — 10:32pm

Siempre cuando he impartido cursos de Linux lo he hecho bajo Slackware. Uno de los temas que me parecen más interesantes es la gestión de paquetes. Entre otras cosas porque es prácticamente lo que más se le ha echado en cara siempre a Slackware desde Debian o Red Hat.

Slackware tiene herramientas de gestión de paquetes, y son flexibles y funcionan perfectamente. Desde luego jamás he visto petar un paquete de slackware como he visto petar un paquete instalado con apt.
El sistema de paquetes de Slackware es muy sencillo: descomprimir el binario, copiar los contenidos a su sitio y guardar una base de datos de referencia para borrarlos cuando se desee. No falla. ¿Para qué más?

Ahora bien, no hay paquetes de slackware para todo lo que se desea. Así que aquí va una pequeña explicación de cómo crear paquetes para Slackware usando makepkg, una de las herramientas propias de la distribución.

1. Crear un área de trabajo para compilar el paquete

mkdir /work
mkdir /work/scripts
mkdir /work/builds

2. Descargar el fuente y compilarlo

cd /usr/local/src
tar zxvfp progname-progversion.tar.gz
cd progname-progversion/
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make

3. Instalarlo dentro del área de trabajo

make install DESTDIR=/work/builds
cp -Rp doc/ /work/builds/usr/
# copiar más cosas que se quieran incorporar al paquete

4. Crear el paquete

cd /work/builds
makepkg progname-progversion-arch-build.tgz
# contestar SI a la pregunta sobre enlaces y permisos

5. Mover el paquete a su sitio y limpiar los restos

mkdir -p /var/spool/packages
mv progname-progversion-arch-build.tgz /var/spool/packages/
rm -rf *

6. Instalar el paquete

cd /var/spool/packages
installpkg progname-progversion-arch-build.tgz

7. Praise Bob!

bob.jpg

1 comentario » | Linux, Slackware, opinión

]Project-open[ on Debian

Septiembre 18th, 2007 — 7:21pm

po-mini1.jpgHe escrito una página con las instrucciones y los paquetes para instalar ]Project-open[ en Debian ETCH. Nunca había hecho paquetes de Debian, así que supongo que serán un poco primitivos. En cualquier caso son perfectamente funcionales.
También lo he posteado en la web de la empresa.
Será bien recibida cualquier aportación o comentario :-)

----

I've written a page with instructions and packages for installing ]Project-open[ on Debian ETCH. I’ve never built any debian package, so maybe they’re so primitive. But anyway they’re completely functional.
I’ve posted it on my company’s website too.
Comments will be appreciated :-)

Comentar » | Linux, project-open

Habemus Slackware 12

Julio 4th, 2007 — 4:41pm

slackware.pngComo muchos sabeis, el comienzo de mi andadura como usuario de Linux se centró en la distribución de Slackware, de la que he sido usuario durante 5 o 6 años en todos los entornos, y que implanto ahora en mis servidores personales y una parte de los de mi empresa.
Aunque la vida del sysadmin suele abrir nuevos caminos con el tiempo, Slackware siempre ha formado parte de un sentimiento íntimo, algo de lo que no me puedo despegar.
Entre otras cosas cabe remarcar que es la primera distribución de GNU/Linux, que sale al marcado en el 93 como evolución del Softstanding Linux System.

En mi vida he encontrado dos tipos de detractores de Slackware: los fanáticos de Debian, y los usuarios de las distribuciones gráficas (Red Hat, SuSE, Mandrake…). Los primeros argumentan la inexistencia del control de dependencias en el sistema de paquetería oficial (hay herramientas externas que sí lo incorporan). A mí personalmente me parece una patraña, el sistema de paquetes de Slackware ofrece una flexibilidad y una transparencia que no ofrece ningún derivado de Debian por mucho que se empeñe.
Por otro lado, los usuarios de distribuciones cargadas de GUI’s para la instalación y configuración de cualquier mínima parte del sistema. Éstos suelen decir que Slackware es difícil. Pero no importa: también lo dicen de Debian, de Gentoo o de cualquier otra distribución que no tenga un slideshow de greetings durante la instalación. Éste tipo de opiniones me parecen propias del quiero y no puedo, usuarios incapaces de leer un man y a los que les produce urticaria el prompt de una shell.

Slackware me ha proporcionado siempre las herramientas mínimas sobre las que he podido trabajar y aprender. El resto siempre me había sobrado, tenía siempre lo que necsitaba: una bash, un compilador y la Glibc.
En mi trabajo como profesor de administración de sistemas en varios centros, he enseñado siempre sobre Slackware. Siempre he inculcado el aprendizaje de los conceptos, el de las herramientas básicas, el de la construcción de un entorno personalizado, y sobretodo RASCAR mucha mucha, pero muuuuucha bash.

Sé que han ido saliendo varias versiones durante los últimos años, y no he hecho ninguna mención especial en mi blog. Pero hacía tiempo que no seguía las noticias sobre la evolución de la distro, y ésta nueva release me ha pillado por sorpresa. Me ha hecho recordar, y me alegro muchísimo de que el desarrollo y el mantenimiento de este excelente sistema siga vivo. Con una mención especial a su mantenedor: Patrick J. Volkerding, que a pesar del golpe que le proporcionó en 2004 una extraña y complicada enfermedad ha tenido el coraje y las ganas de seguir adelante, haciendo un trabajo muy muy bueno, del que en la actualidad nos beneficiamos muchos administradores de sistemas.

Y para terminar, recomiendo a los lectores echar una ojeada al site de Subgenius, la secta espiritual de donde Pat recogió el espíritu geek de J.R. Bob Dobbs.

Praise Bob!

1 comentario » | Linux, Slackware

PocketPC en Debian ETCH

Junio 29th, 2007 — 1:12pm

Hace ya algún tiempo escrbí un pequeño manualito sobre cómo conectar y sincronizar la PocketPC en Linux usando Ubuntu. En aquel momento Ubuntu venía con Hotplug y yo usaba GNOME.
Ahora hace ya tiempo que dejé aparcado este tema, aparte de que volví a Gentoo en cuanto hubo drivers para la gráfica y la tarjeta de sonido del Vaio.

He instalado Debian con KDE para unos trabajos concretos, y he vuelto a tener la necesidad de sincronizar la PocketPC, pero ahora la cosa es mas sencilla por usar KDE (hay paquetes de integración), y a la vez más complicada por no disponer de Hotplug, que en Debian ETCH ha sido completamente reemplazado por Udev.
Bien, esto es lo que más problemas me ha dado, así que aquí va otro pequeño manual, sin ánimo de repetirme demasiado.

Los paquetes a instalar son básicamente los mismos:

apt-get install synce-serial synce-kde synce-dccm synce-multisync-plugin multisync libmultisync-plugin-all usbview

Hay que darle el dispositivo que crea el módulo usbview en /dev, que se puede consultar tranquilamente en el syslog (tail -f /var/log/messages, y encender la pocket). Las IP’s local y remota pueden dejarse por defecto tal cual están. El servidor DNS puede usarse cualquiera, yo uso los de la timo, que para eso pago (194.179.1.100).

Para la integración con KDE, no estoy seguro de si he instalado yo los paquetes o venían con la ristra de material innecesario, pero por si acaso el paquete a instalar es éste:

apt-get install synce-kde

Esto instala una aplicación llamada Raki, que sirve para la sicronización y el acceso al dispositivo. Al lanzarla desde el menú de KDE aparece un trayicon en el Kicker que da las opciones de acceso.

Hay que ejecutar el siguiente comando para establecer la conexión serie con la PocketPC, cambiando el nombre del dispositivo por el que se genera en /dev (consultar pasos anteriores)

synce-serial-config ttyUSB0

Si todo va bien, dice algo como You can now run synce-serial-start to start a serial connection. Ahora ejecutando synce-serial-start la conexión serie se establece y ya se puede lanzar Raki para conectar con el aparato.
Hay que ejecutarlo cada vez que se quiera sincronizar el aparato, que es un coñazo. Antes esto estaba solucionado con un pequeño script de hotplug, pero como decía al principio Debian ETCH viene completamente integrada con Udev.

Crear un fichero /etc/udev/rules.d/10-ipaq.rules con el siguiente contenido:

# udev rules file for SynCE
BUS!=="usb", ACTION!=="add", KERNEL!=="ttyUSB*", GOTO=="synce_rules_end"
# Establish the connection
RUN+="/usr/bin/synce-serial-start"
LABEL="synce_rules_end"

Y reiniciar Udev:

/etc/init.d/udev restart

Y ya está. Ahora ya se puede encender la PocketPC directamente y en seguida se establece la conexión. Para sincronizarla hay que seguir el manual que mencinaba al principio (multisync + evolution), aquí dejo un copy-paste:

Para sincronizar la agenda y los contactos hay que ejecutar Multisync. Crear (NEW) un nuevo emparejamiento, y en el primer plug-in poner Synce Plugin, y en el segundo poner Ximian Evolution 2. El nombre del emparejamiento (digo yo que se traducirá así…) no influye en nada, así que se puede poner Imate, o PocketPC o lo que sea. Ahora apretando el botón de Multisync, se sincroniza la PDA con Evolution.

También se puede lanzar Raki para acceder al dispositivo desde Konqueror vía rapip://

Me queda sólamente un pequeño quiz: mi Pocket es un teléfono (I-mate Jam), y cada vez que lanzo Raki, el dispositivo lanza una conexión a Internet por GPRS que yo tengo que cancelar a mano. Si se llega a conectar, Orange me cobra una pasta, y encima pierdo la conexión con Synce. Supongo que éste ya es problema de Windows Mobile…

Alguien sabe cómo solucionar ésto?

EDITADO: No me había dado cuenta y en el manual de Ubuntu tenía un comentario de R. Juncos explicando la solución de Udev (gracias :-P). De todas formas no está de más unificar el tema en un post para Debian ETCH con KDE, así que creo que no eliminaré esta entrada.

NOTA: Al acceder al dispositivo desde RAKI (rapip://) veo sólamente 2 o 3 ficheros y 1 directorio, algunos carácteres raros y ya está. No sé a qué se debe, alguien ha tenido este problema?

Comentar » | Imate-JAM, Linux

Volver arriba