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."

sábado, 29 de diciembre de 2012

Eliminar advertencia "reading configurations from ~/.fonts.conf is deprecated."

El fichero ~/.fonts.conf se debe mover de lugar.  Los programas que aun lo leen ahí causan la siguiente advertencia:

Fontconfig warning: "/etc/fonts/conf.d/50-user.conf", line 9: reading configurations from ~/.fonts.conf is deprecated.

Para eliminarla, podemos:
mkdir ~/.config/fontconfig; mv ~/.fonts.conf ~/.config/fontconfig/fonts.conf
Pero los programas que aun no se han actualizado pueden volver a crearlo.

PS3 Move: "¿Cómo podemos copiar el Wii sin que sea muy obvio?"

"¡Ya sé!  ¡Hagámoslo aburrido!"

jueves, 29 de noviembre de 2012

Configurando los módems DSL de Telmex/Prodigy Infinitum

Acceso de servicio


El acceso de servicio muestra más opciones e información que la interfaz normal, algunas muy útiles como los registros de sistema, cambiar la IP o reiniciar el módem mismo.  El usuario y contraseña son los normales: TELMEX y la contraseña WiFi de fábrica.

2Wire Gateway 2700HG: http://home/mdc, o http://gateway.2wire.net/management, o http://192.168.1.254/management.

2Wire 4011G: http://home/xslt?PAGE=C_4_0, o http://gateway.2wire.net/xslt?PAGE=C_4_0, o http://192.168.1.254/xslt?PAGE=C_4_0.

 

Configurando un 2Wire Gateway 2700HG sin usar el programa de Telmex (desde Linux, por ejemplo)


El Gateway debe estar conectado a la red local (el foco Ethernet debe estar prendido) y a la línea telefénica (el foco DSL debe estar prendido sin parpadear; si parpadea constantemente, significa que no detecta una señal DSL).

Para ver la página de configuración del modem, hay que estar en su mismo rango.  Por omisión, la dirección del modem es http://192.168.1.254 y trae activado DHCP, así que es posible cambiar la dirección/añadir un alias a nuestro adaptador de red al rango 192.168.1 y después abrir http://192.168.1.254; o configurar la conexión del adaptador para usar DHCP ("Obtener IP/DNS automáticamente") y reiniciarla/repararla.
La primera vez el modem inicia en el asistente de configuración.  Hay que introducir un código (hay más en http://www.2wire.com/?p=268):

Preconfiguración para Prodigy Infinitum: 52AD-2AD4-6266-22NA-B27M
Preconfiguración para PPPoE: 5225-26P4-6262-22AS-B2E7
Configuración manual completa: 5225-2374-WG62-22AS-BJ7P

Una vez proporcionados tu nombre de usuario y contraseña el modem procederá a conectarse.  Puedes cancelar el asistente en cualquier momento para acceder a la página de configuración completa.  Si le cambias la IP al modem, recuerda cambiar/renovar la de tu máquina inmediatamente después.

Para deshabilitar los servicios de ruteo (incluyendo DHCP, NAT, y PPPoE) en el modem para ponerlo en modo puente, ("bridge," para que puedas enrutar desde Linux o Windows), tienes que entrar a la consola de administración y diagnóstico en http://homeportal/mdc, Enlace de banda ancha -> Configurar y cambiar VCI a 35, deshabilitar Búsqueda de ATM PVC, y cambiar Tipo de conexión a Dirección IP Directa; y por último deshabilitar enrutamiento en Avanzada -> Configurar Servicios.

jueves, 1 de noviembre de 2012

Dirección de correo desechable al gusto: Mailinator personalizado

Ya sea por simple estética, o porque muchos de los sitios que innecesariamente te obligan a registrarte bloquean los dominios conocidos de Mailinator, puedes querer tu propio dominio de correo desechable.

Para empezar, necesitas tener tu propio dominio.  ¿No quieres usar uno de paga?  Never fear, freedns.afraid.org has you covered.  Primero, tienes que crear una cuenta... pero es por una buena causa, para después registrar un subdominio en sus más de noventamil dominios, de a grapas:

  1. Encuentra uno que te guste y da clic en su nombre (por ejemplo, spam-o-matic.com).
  2. Cambia Type a MX (registro de correo).
  3. Escribe el nombre de subdominio que desees en Subdomain (algo como "protectedby" para obtener protectedby.spam-o-matic.com).
  4. Escribe 10:mail.mailinator.com en Destination.
  5. Listo, puedes recibir correos inmediatamente con cualquier nombre de usuario (XXXX@protectedby.spam-o-matic.com), usando ese mismo nombre de usuario para checarlo en mailinator.com
Claro que nos ahorraríamos todo esto (y más) si todo el mundo usara OpenID.

P.S.d.P. (de pasadita): puedes crear de la misma manera dominios gratis para tu sitio web, ya sea por dirección IP (cambiando Type a A), haciendo un alias a un dominio ya existente (Type CNAME), o haciendo una redirección a una dirección (URL) específica (crea un registro A o CNAME, guárdalo, edítalo y dale clic a Forward to a URL.


jueves, 23 de agosto de 2012

Hacer que el complemento Last.fm de Amarok deje de usar KWallet

Esto hace que el complemento de Last.fm guarde su contraseña en texto simple --que es más inseguro, pero evita el uso de KWallet.
  1. Cierra tu cartera en KWallet.
  2. Inicia Amarok y cancela cuando quiera abrir tu cartera.
  3. Ve a la configuración del complemento de Last.fm, y cancela el nuevo intento de acceder a la cartera.
  4. Introduce los datos de tu cuenta y Acepta.
  5. Cancela KWallet una última vez. 
  6. Amarok preguntará KWallet no se está ejecutando.  ¿Le gustaría que Amarok almacenara sus credenciales en texto simple?
  7. ¡Siiiiiií!!!!!!
  8. Reiniciar Amarok.
Alternativamente:
  1. Deshabilitar KWallet en el fichero de configuración de Amarok:
    perl -pi -e 'print STDERR "Reemplazando $&\n" if s/(ignoreWallet)=.*/$1=yes/;' ~/.kde/share/config/amarokrc 
  2. Reiniciar Amarok.
  3. Introducir tu cuenta en la configuración de Last.fm si nunca la has guardado como texto antes.