viernes, 30 de agosto de 2013

Borrando y reinicializando la colección de música de un iPod Touch / iPhone desde Linux

Para inicializar base de datos de iTunes de un iPod Touch o iPhone nuevo o recién formateado, o para borrar la colección de música (si está corrupta, o simplemente queremos cambiar de canciones) desde Linux hay que salvar un par de obstáculos:

Primero, hay que acceder al dispositivo montándolo manualmente (p.e. sudo mkdir /media/iPod; sudo chmod 777 /media/iPod; ifuse /media/iPod;) o dejando que un programa lo haga por nosotros (Amarok monta automáticamente /var/mobile/Media en /tmp/kde-$USER/amarok/imobiledevice_*).

Nuestra música, la base de datos de iTunes y demás se encuentran en Media/iTunes_Control.  Podemos eliminar (o renombrar) todo para deshacernos de la colección, con excepción de Media/iTunes_Control/Device/HashInfo.  Este fichero contiene el código con el que Apple pretende impedir nuestro libre acceso a nuestro dispositivo.  Por tanto, conviene hacer un respaldo del mismo.

En caso de una nueva instalación, tendremos que obtener HashInfo, a menos que tengamos un respaldo.  Afortunadamente, Héctor Martín Cantero ha creado un generador público: iPhone/iPod hash generation.  Para usarlo, necesitamos el UUID de nuestro dispositivo, que usualmente es listado como SerialNumber en sus propiedades, las cuales se pueden ver en syslog.  Este comando puede ayudar:

perl -ne 'our $UUID; if (/Manufacturer: Apple/) { $_=<>; $UUID=$1 if /SerialNumber: (.+)/; } END { print "$UUID\n" if $UUID;}' /var/log/syslog

Una vez que tenemos HashInfo en su lugar, podemos dejar el trabajo más pesado a Amarok o gtkpod; si borramos la colección de música con alguno de los dos abierto, tendremos que expulsar nuestro dispositivo y volverlo a conectar; si no, simplemente ejecutamos uno de los dos, que inmediatamente nos ofrecerá inicializar nuestro juguete; si no sabes su modelo, puedes verlo en sus Ajustes de sistema / General / Información / Modelo (en mi caso, ignorando el primer y los dos últimos caracteres).

martes, 27 de agosto de 2013

Puenteando routers Asus RT-N56U y TP-Link WR-740N

IP inicial 192.168.3.1 y servidor DHCP deshabilitado, cuando el default debía ser 192.168.1.1.  Encontrada sin hacer reset, creando una Conexión cableada compartida en Kubuntu y conectándola al puerto WAN, para después ver la dirección asignada al router en syslog y abrirla en el navegador (¡aunque la interface del router no debería ser accesible por WAN!).

Para usarlo como repetidor solo soporta el modo de puente WDS.  Imposible conectarlo a un TP-Link WR-740N.

¿Único router Asus que no soporta ninguno de los principales firmwares abiertos?  OpenWRT tiene soporte preliminar.

ASUS RT-N56U/RT-N65U custom firmware no está mal.  Ruso, ¿basado en OpenWRT?

Añade el modo "AP + cliente AP", pero tampoco funciona con el WR-740N.

Tiempo de cambiar el WR-740N a algo mejor.  DD-WRT es una masacre de daemonios y un desastre en general.  OpenWRT+LuCi funciona muy bien, pero solo quedan 100 kB libres. Gargoyle, su rebelde y minimalista vástago, funciona igual de bien y deja 400 kB (!)--excepto porque después de flashearlo no se activó el DHCP ni el inalámbrico; un poco preocupante hasta que haces ssh root@192.168.1.1 y ves que todo funciona.

OpenWRT también añade "AP + cliente AP" al TP-Link, y ahora ambos routers funcionan a la perfección como maestro o cliente.  Aaaah... la vida es una barca.

domingo, 18 de agosto de 2013

Atajos de teclado y otras funciones dependientes de DBUS dejan de funcionar

Al actualizar KDE a la última versión (de Kubuntu-Backports) DBUS dejó de funcionar:

qdbus org.kde.amarok /Player
qdbus: could not find a Qt installation of ''


Al parecer hay un batidillo de dependencias ahora que están portando todo a QT5, y hace falta instalar qtchooser, o algún otro paquete de desarrollo.  La cosa es que todos los necesarios se instalan con qt-default:

apt-get install qt4-default

Ojo que tiene que ser la misma versión de dbus.  Si instalamos QT5 con DBUS 4, nos sale:

qdbus: could not exec '/usr/lib/x86_64-linux-gnu/qt5/bin/qdbus': No such file or directory

viernes, 9 de agosto de 2013

Kubuntu muestra la hora en UTC sin importar la zona horaria seleccionada

El problema (reporte aquí) reside en zic, usado por el módulo de Fecha y Hora de KDE (y otros programas), que copia la zona horaria a /etc/localtime sin checar si la original es una liga simbólica y por lo tanto, sin dereferenciarla apropiadamente, por lo que termina creando una liga rota:

ls -l /etc/localtime
lrwxrwxrwx 2 root root 25 mar 14 10:46 /etc/localtime -> ../posix/Europe/Guča


Para arreglarlo temporalmente:

sudo dpkg-reconfigure tzdata

O un paliativo más duradero (y extremo):

sudo mv /usr/sbin/zic /usr/sbin/zic-bad

Pues KDE puede funcionar sin zic (otros programas, quien sabe ;).


martes, 4 de junio de 2013

Insertar, no abrir, una URL al arrastrarla del navegador a Emacs

Basta con hacer:

M-x customize-variable
dnd-protocol-alist


y remover de las expresiones regulares los protocols que queremos insertar como texto, además de el pipe que les sigue (v.g. remover https?\|ftp\| y dejar ^\(file\|nfs\)://).  Para finalizar Guardamos para sesiones futuras y listo, a dragandroppear ligas directo a nuestros documentos.

jueves, 24 de enero de 2013

Renaming multiple files with Perl's Regex power

(puedes leer esta publicación en español aquí)

Useful one-liner to rename multiple files using regular expressions:

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renaming "$_"\n      to "$ren"\n); rename($_, $ren); }}' <pattern> <replacement> <files...>

Brought up because of the Programming Languages class at Coursera, whose videos are numbered without padding zeros, (p.e. "2 - 9 - Functions Formally (856).mp4"), messing up sort order in many programs (like VLC).

To fix it from our trusty Linux terminal, first we create an alias for neatness (which you can also save permanently in your ~/.bashrc):

alias renamregex='perl -we '\''$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renaming "$_"\n      to "$ren"\n); rename($_, $ren); }}'\'

Then we  change to the directory with the videos, replacing mine with your own of course (or you can simply press F4 in Dolphin to open a terminal in it, if you use KDE):

cd "~/Documentos/Educación/Cursos en línea/Coursera UoW - Programming Languages/"

And we add an underscore to the video length (so the video name is the same as the subtitle):

renamregex '(\d)(\d\d\)\.mp4)' '$1_$2' *.mp4
Renaming "2 - 9 - Functions Formally (856).mp4"       to "2 - 9 - Functions Formally (8_56).mp4"
And then we rename all files, adding a zero to all the lone digits, except the last--we don't want to change the extension:

renamregex '(^|\D)(\d)(\D)' '${1}0$2$3' *
Renaming "2 - 9 - Functions Formally (8_56).mp4"      to "02 - 09 - Functions Formally (08_56).mp4"
As a goodie for using the best OS for developers, you can install all the programs required on the class with a single command (in Debian/Ubuntu and friends):
sudo apt-get install emacs24 smlnj sml-mode racket ruby libtcltk-ruby

Though SML mode requires a quick fix (to fix the "require: Constant symbol `:group' specified in defvar" error):

sudo perl -pi -e 's/^\(defvar :.*\n//' /usr/share/emacs/site-lisp/sml-mode/sml-compat.el
sudo emacs -batch -f batch-byte-compile  /usr/share/emacs2*/site-lisp/sml-mode/sml-compat.el

If you want to use Emacs instead of DrRacket, install Quack and Geiser with:
sudo apt-get install emacs-goodies-el

and for the latest Geiser:
wget http://ubuntu.wikimedia.org/ubuntu/pool/universe/g/geiser/geiser_0.4-1_all.deb
sudo dpkg -i geiser_0.4-1_all.deb
rm geiser_0.4-1_all.deb

(or you can just apt-get install geiser if you're already in Ubuntu Sausy or Debian Jessie).

And add to your ~/.emacs:

;; Improved scheme-mode for Racket
(require 'geiser-install)
(require 'quack)
(quack-install)




If you're in Windows, you'll have to install Perl and run something like:

cd "$HOME\Mis Documentos\Educación\Cursos en línea\Coursera UoW - Programming Languages\" 

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renaming "$_"\n      to "$ren"\n); rename($_, $ren); }}'
'(\d)(\d\d\)\.mp4)' '$1_$2' *.mp4

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renaming "$_"\n      to "$ren"\n); rename($_, $ren); }}' '(^|\D)(\d)(\D)' '${1}0$2$3' *.*

Though I haven't tried it.

Renombrando múltiples ficheros con el poder ExReg de Perl

Práctico comando para renombrar ficheros usando expresiones regulares:

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renombrando "$_"\n          a "$ren"\n); rename($_, $ren); }}' <patrón> <reemplazo> <ficheros...>

Sacado a colación a propósito de el curso de Lenguajes de Programación en Coursera, cuyos videos están numerados sin cero de prefijo ("2 - 9 - Functions Formally (856).mp4"), por lo que son ordenados incorrectamente en la mayoría de los programas (como VLC).

Para arreglarlo en una terminal de Linux, primero creamos un alias para mayor legilibilidad (que también puedes guardar permanentemente en tu .bashrc):

alias renamregex='perl -we '\''$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renombrando "$_"\n          a "$ren"\n); rename($_, $ren); }}'\'

Después cambiamos al directorio donde tenemos los videos, reemplazando mi directorio con el tuyo claro (también puedes simplemente presionar F4 en Dolphin para abrir una terminal en él, si usas KDE):

cd "~/Documentos/Educación/Cursos en línea/Coursera UoW - Programming Languages/"

Y añadimos un guión bajo a la duración (para que el nombre del video coincida con el del subtítulo):

renamregex '(\d)(\d\d\)\.mp4)' '$1_$2' *.mp4
Renombrando "2 - 9 - Functions Formally (856).mp4"
          a "2 - 9 - Functions Formally (8_56).mp4"
Para después renombrar todos los ficheros añadiendo un cero a todos los dígitos solitarios, excepto el último--no queremos cambiar la extensión:

renamregex '(^|\D)(\d)(\D)' '${1}0$2$3' *
Renombrando "2 - 9 - Functions Formally (8_56).mp4"
          a "02 - 09 - Functions Formally (08_56).mp4"
Como premio extra por usar el mejor SO para los desarrolladores, puedes instalar todos los programas del curso con un solo comando (para Debian/Ubuntu y amigos):

sudo apt-get install emacs24 smlnj sml-mode racket ruby libtcltk-ruby

Aunque el modo SML requiere un pequeño arreglo (para  prevenir el error "require: Constant symbol `:group' specified in defvar"):

sudo perl -pi -e 's/^\(defvar :.*\n//' /usr/share/emacs/site-lisp/sml-mode/sml-compat.el
sudo emacs -batch -f batch-byte-compile  /usr/share/emacs2*/site-lisp/sml-mode/sml-compat.el

Si quieres usar Emacs en lugar de DrRacket, instala Quack y Geiser con:
sudo apt-get install emacs-goodies-el

y para el último Geiser:
wget http://ubuntu.wikimedia.org/ubuntu/pool/universe/g/geiser/geiser_0.4-1_all.deb
sudo dpkg -i geiser_0.4-1_all.deb
rm geiser_0.4-1_all.deb

(o si ya usas Ubuntu Sausy o Debian Jessie, puedes simplemente hacer apt-get install geiser).

y añade a tu ~/.emacs:

;; Improved scheme-mode for Racket
(require 'geiser-install)
(require 'quack)
(quack-install)



Si estás en Windows, tendrás que instalar Perl por tu cuenta y ejecutar algo como:

cd "$HOME\Mis Documentos\Educación\Cursos en línea\Coursera UoW - Programming Languages\" 

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renombrando "$_"\n          a "$ren"\n); rename($_, $ren); }}'
'(\d)(\d\d\)\.mp4)' '$1_$2' *.mp4

perl -we '$regex = shift(@ARGV); $rep = shift(@ARGV); $rep =~ s/"/\\"/g; $rep = qq("$rep"); foreach (@ARGV) { if (/$regex/) { $ren = s/$regex/$rep/geer;  print qq(Renombrando "$_"\n          a "$ren"\n); rename($_, $ren); }}' '(^|\D)(\d)(\D)' '${1}0$2$3' *.*

Pero no lo he probado.

martes, 22 de enero de 2013

Programas recomendados para tu Thinkpad

TPFanControl: permite monitorear la temperatura de los diferentes componentes del sistema en Windows, y especificar la velocidad del ventilador, o dejar que TPFanControl la decida--muy recomendable, pues el Gestor de Energía de Thinkpad no regula la velocidad del ventilador apropiadamente--especialmente cuando tenemos un acelerador gráfico discreto, como la ATI FireGL  de mi W500--lo que causa que el sistema se duerma o apague repentinamente cuando se sobre-calienta (cuando alcanza más de 90º).

Intercambiar Fn y Control: firmware del BIOS modificado para intercambiar las teclas Función y Control.  El sistema se reiniciará varias veces durante el "flashing," esto es normal.  Aun así, no se recomienda si tienes problemas cardíacos.

lunes, 7 de enero de 2013

Partición NTFS deja de funcionar después de despertar la máquina

ls da el siguiente error:

ls: cannot access /mnt/Winbugs: Transport endpoint is not connected
El problema está resuelto en la versión 2.9.2 de fuse, que tardará en llegar a Ubuntu.  Pero el paquete de Debian Sid  funciona perfectamente:

wget http://ftp.mx.debian.org/debian/pool/main/f/fuse/fuse_2.9.2-2_amd64.deb http://ftp.mx.debian.org/debian/pool/main/f/fuse/libfuse2_2.9.2-2_amd64.deb
dpkg -i  *fuse*.deb

(si tu procesador no es de 64 bits, reemplazar amd64 con i386 o tu arquitectura apropiada)

martes, 1 de enero de 2013

Guarda Contactos de Telcel: "X contactos en tu SIM han sido modificados..."

Si cometiste la locura de activar el Guarda Contactos, seguro recibes avisos ("X contactos en tu SIM han sido modificados, deseas guardar tus cambios ahora?") que no dejan que tu teléfono se apague.  Puedes desactivarlo en el menú de Telcel (usualmente con el icono de una tarjeta SIM) > Aplicaciones (hasta abajo) > Guarda Contactos.  Al seleccionarlo, dale Ok a mensaje de descripción ("Este servicio te permite respaldar tus contactos..."), después ve a Ajustes y Desactívalo.

"Telcel siempre contigo, cobrándote por descargar tu batería."