Delirios de un Informático

Actualizador de Calibre en Mac OS X

Uso Calibre para gestionar mi biblioteca digital desde hace mucho, y he sufrido la versionitis de su autor con una actualización semanal. Debido a que no dispone de un actualizador automático he creado este pequeño script que descarga la última versión, la instala en /Applications y deja el archivo DMG en la carpeta de descargas:

#!/bin/bash
 
CALIBRE_DOWN="http://status.calibre-ebook.com/dist/osx32"
CALIBRE_LAST=`curl --head --silent ${CALIBRE_DOWN} | grep "Location" \
	| awk '{print $2}' | perl -pi -e 's/\r\n//g'`
 
CURRENT_USER=`whoami`
CALIBRE_NAME=`echo ${CALIBRE_LAST} | awk -F '/' '{print $5}'`
CALIBRE_FILE="/Users/${CURRENT_USER}/Downloads/${CALIBRE_NAME}"
 
if [ ! -f $CALIBRE_FILE ]; then
	wget "${CALIBRE_LAST}" -O "${CALIBRE_FILE}"
fi
 
if [ -f $CALIBRE_FILE ]; then
	cd "/Applications/"
	rm -rf 'Calibre.app'
 
	CALIBRE_VOLUME=`hdiutil attach "${CALIBRE_FILE}" \
		| grep "calibre" | awk '{print $3}'`
 
	cp -R "${CALIBRE_VOLUME}/calibre.app" "/Applications/Calibre.app"
 
	hdiutil detach "${CALIBRE_VOLUME}" > /dev/null
fi

Cómo obtener el PID de un proceso lanzado desde Bash

Al crear scripts en Bash puede ser de utilidad lanzar programas y controlar su ejecución. Eso puede hacerse de diversos modos pero lo más fácil es gestionar los procesos mediante su identificador único. Este PID puede obtenerse filtrando la salida del comando ps pero Bash nos proporciona la variable $! donde se almacena el PID del último proceso lanzado en background. Por ejemplo:

/usr/bin/ejecutable &
PID=$!
echo $PID

Sencillo y muy útil :).

Silenciar Rhythmbox con Python mediante D-Bus

Gnome Rhythmbox tiene algún pequeño problema al pausar y reanudar reproducciones de Last.fm, y teniendo en cuenta que a veces es necesario pararlo o silenciarlo para que no interfiera en otras cosas, me he hecho (porque no he encontrado el modo de silenciarlo de ninguna otra manera) este pequeño script en Python (requiere python-dbus) que permite silenciar Rhythmbox sin parar la reproducción:

#!/usr/bin/env python
import os
import dbus

session_bus = dbus.SessionBus()
proxy_obj = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
player = dbus.Interface(proxy_obj, 'org.gnome.Rhythmbox.Player')

if player.getMute() < 1:
	player.setMute(True)
else:
	player.setMute(False)

Si se combina con xbindkeys para asignarse a una combinación de teclas como Control + Silencio la comodidad ya es total :D.