Browsing in Informática

Hoy me he peleado con el mencoder del mplayer para poder convertir un archivo de audio.

El problema principal era que no dejaba procesar el archivo porque no tenía una parte de video. Así que tras indagar un poco vi que la solución era “engañar” al mencoder, poniendo un archivo inútil de video… que no se usará ;)

mencoder -ovc frameno -oac mp3lame -lameopts cbr:br=128 -of rawaudio -o resultado.mp3 -audiofile entrada.amr dummyvideo.avi

Y sí, lo he usado para convertir un amr (los archivos de audio grabados con un movil) que es solo audio, no video como los 3gp, a mp3.

Porque todo el mundo cree que tienes sus datos seguros… hasta que los pierde. Y yo los he perdido. 1TB ¬¬

Lo irónico, es que yo SÍ era consciente de la situación, y estaba a punto de configurar el sistema para dejar un disco duro de 500gb como almacén para los backups… Además, ya había recibido varias alarmas (en el pasado) de que podía perder fácilmente muchos datos, y entre exámenes y falta de tiempo he ido diciendo… “ya lo configuraré cuando terminé los exámenes” y cosas por el estilo.

Bien. Pues si se tienen datos que se consideren importantes (porque las series, pelis, música, siempre se pueden bajar de nuevo, pero cosas propias… no), sería cuestión de valorar si necesitamos copias de seguridad o no.

Lo más fácil es ir guardando cada X tiempo cosas en un DvD, pero si lo queremos organizar un poco mejor… podemos utilizar rsync, un comando estándar en unix que sirve perfectamente para esto.

Solución rápida:

rsync -au --delete /directorio/de/origen /directorio/de/destino/

Con esto conseguimos hacer una copia de seguridad incremental del directorio de origen al de destino. Podemos ejecutarlo las veces que queramos, que solo se copiarán los archivos nuevos, borrando del directorio de destino los que se hayan borrado del origen siempre que no sean más nuevos.

Mete eso en un crontab para que se ejecute todas las noches, y listo.

Solución detallada:

Con el parámetro -a, es como si pusiésemos -rlptgoD. Una manera rápida de decir que se aplique recursión en directorios y que se preserve prácticamente todo (permisos, fecha de modificación, grupo, propietario, etc).

Con --delete estamos diciendo que también se sincronicen los archivos borrados. Es decir, si borramos un archivo en el directorio de origen, también se borrará en el de destino si existía de un backup anterior. Es muy útil porque lo que hacemos es crear una copia exacta, sin dejar archivos residuales.

Con el parámetro -u indicamos que no queremos borrar los ficheros del directorio de destino que sean más nuevos que los del de origen que hayan sido borrados. Por si trabajamos sobre el directorio de destino (sobre el backup) y luego borramos ese fichero en el de origen.

Con esto tenemos ya un comando bastante decente, que podemos hacer que cron lo ejecute, por ejemplo, cada día a las 5 de la mañana (para que nos pille durmiendo y no moleste), simplemente añadiendo la siguiente linea en el crontab (ejecutando crontab -e editamos el fichero de crontab):

0 5 * * * rsync -au --delete /directorio/de/origen /directorio/de/destino/

Por supuesto, intentad tener el directorio de destino en otro lugar distinto al de origen, como por ejemplo un disco duro que solo uséis para hacer backups y nada más (vamos, que no se menee mucho y se pueda romper fácilmente).

Luego también tenemos muchas opciones más, como por ejempo, que los ficheros que se borren con el --delete no se borren de verdad en la copia de seguridad, sino que sean movidos a otro directorio de backup. Esto lo conseguimos añadiendo -b y --backup-dir=$PWD/backup_$(date +%y%m%d)

Así especificamos que el directorio de backup sea un directorio dentro de cada directorio con el prefijo backup_ y la fecha. Por ejemplo backup_091003.

Con esto conseguiríamos tener todas las versiones de cada fichero antes de ser borrado, y que se puedan consultar. Ocuparía más espacio, pero también podemos recuperar archivos de otros días si nos arrepentimos de haberlos borrado :)

Aquí vemos un ejemplo de todo lo explicado:

Tenemos un directorio (llamado original) del que queremos hacer la copia de seguridad:

$ ll original/
total 0
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 15:32 f1
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 01:42 f2

Así que la hacemos:

$ rsync -avb --delete --backup-dir=$PWD/backup_$(date +%y%m%d) original/ backup
sending incremental file list
./
f1
f2
 
sent 154 bytes  received 53 bytes  414.00 bytes/sec
total size is 0  speedup is 0.00
$ ll backup/
total 0
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 15:32 f1
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 01:42 f2

Ahora, borramos el fichero f1 del directorio original… y volvemos a hacer una copia de seguridad.

$ rm original/f1
$ rsync -avb --delete --backup-dir=$PWD/backup_$(date +%y%m%d) original/ backup
sending incremental file list
./
deleting f1
 
sent 65 bytes  received 15 bytes  160.00 bytes/sec
total size is 0  speedup is 0.00

Y podemos comprobar, que también se ha borrado de backup, pero se ha creado un directorio llamado backup_091003 donde se ha guardado este fichero borrado:

$ ll backup
total 0
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 01:42 f2
 
$ ll backup_091003/
total 0
-rw-r--r-- 1 danikaze danikaze 0 2009-10-03 15:32 f1

Modificando el funcionamiento por defecto de rsync:

Por defecto, rsync considera nuevo los ficheros para ser copiados comparando la fecha y el tamaño, aunque podemos modificar este comportamiendo, haciendo que haga un checksum con la opción -c

A la hora de copiar un archivo, aunque el cambio sea muy pequeño (p.e. un archivo contenía “12345678″ y le añadimos un 9 para que valga “123456789″), rsync lo copia entero (en este caso 9 bytes) ya que funciona por defecto con la opcíon -W (–copy-whole-file). Podemos hacer que copie la parte diferente solamente (1 byte) con la opción –no-whole-file (que no copie el fichero entero vaya xD). Aunque generalmente el cálculo de la diferencia supone una carga mayor que la copia del archivo completo :P

También podemos hacer que se compriman los ficheros antes de copiarlos con la opción -z, lo que conlleva en un mayor uso de CPU aunque se tarde menos la copia. Puede ser útil a la hora de pasar archivos entre máquinas remotas.

Copiando archivos entre máquinas remotas:

¿Y si queremos mandar o traernos las copias de seguridad desde otro ordenador, o algún servidor que tengamos por ahí?

Pues exáctamente igual, solo que la ruta la especificamos de la siguiente manera:

usuario@host:/ruta/del/directorio

Como por defecto se usa ssh (ergo scp), conviene tener configurado ssh de manera que podamos hacer login de forma transparente. Esto es, dejando configurado los archivos ~/.ssh/config y las claves públicas y privadas para que no tengamos que escribir la contraseña.

Esto último no tengo ganas de explicarlo, que no tiene que ver con rsync, pero podéis consultar esos dos links del párrafo anterior, que viene todo muy clarito :)

Yo no soy muy navideño, aunque me guste el ambiente, pero es que últimamente, hasta el VLC se pone navideño ;)
vlc

Por cierto, que yo soy más de MPlayer, pero para ver DvDs si que uso el VLC (Sin City en este caso ^_^)

pantallazo-el-corte-ingles-cine-mozilla-firefoxHoy noche del 17, madrugada del 18 de Diciembre (y no se hasta cuando estará, ya que lleva al menos dos horas así), en la página del producto de la colección de Akira Kurosawa en la web de El Corte Inglés, al ampliar la imagen del pack, salía una imagen que no debería de estar ahí…

Sí, la que estáis viendo a la derecha… ^^’

¿Coñas de los desarrolladores? ¿Referencia cruzada a la sección de lencería? ¿Marketing? No lo sé, pero esto debe ser catalogado como FAIL!

Por cierto, la imagen original (sin ampliar) era la siguiente:

kurosawa

A más de un@ conozco que antes de subir las imágenes, le gusta poner un texto con su nick, o un borde a la imagen, para dejarla bonita.

Eso no lo veo tan necesario, pero cuando subo imágenes a flickr por ejemplo, si que noto que tarda mucho, cuando cada imagen pesa entre 2 y 4 MB (y más ahora con mi nueva Canon 450D ^^)

El problema es, que al redimensionar, editar y procesar las imágenes, muchas veces se hace de tal manera que se pierde la información EXIF de la propia foto (la que indica los datos de la fotografía, modelo de cámara, velocidad del obturador, etc.)

Para ello anoche hice un pequeño script en bash, que usa los paquetes Imagemagick para hacer las transformaciones y zenity para mostrar una interfaz agradable al usuario ^^

Bola!

El script lo puedes descargar desde aquí, y lo debes guardar en algún lugar que este en tu path de ejecución (p.e. en ~/bin) y asignarles permisos de ejecución!
Como podeis ver, he llamado al script (al comando) fotoflickr porque lo hice pensado para subir mis fotos a flickr (que por cierto, uso postr para ello ^^)

Una vez guardado, tienes varias variables configurables para editar la ejecución del script:

  • ARCHIVOS=’.*jpg’
    Indica el tipo archivos a procesar (expresion regular no case-sensitive entre comillas simples)
  • ANCHO=1024
    ALTO=1024
    Es el tamaño máximo permitido para las imágenes (conserva las proporciones)
  • DESTINO=”/home/danikaze/Desktop/procesado2″
    Es la carpeta donde guardar los resultados
    Si es una ruta relativa (no empieza por /), la carpeta de DESTINO se creara dentro de donde esté cada imagen (p.e. si la imagen esta en /ruta/a/la/imagen.jpg el resultado estara en /ruta/a/la/DESTINO/imagen.jpg)
    Si es una ruta absoluta (empieza por /), todas las imagenes se guardaran en DESTINO independientemente de su origen (con lo que pueden sobreescribirse imágenes si tienen los mismos nombres)
  • BLEND=”50″
    Nivel de transparencia de la imagen de watermark
  • WM=”/home/danikaze/bin/danikaze.png”
    Ruta a la imagen de watermark
  • CALIDAD=95
    Calidad de compresion JPG
  • LIMITE=500
    Mostrará una ventana que te avisa si el número de imágenes es superior al LIMITE (por si hemos cogido una carpeta incorrecta o con subcarpetas)
  • AUTOCERRAR=0
    cierra la ventana de progreso al finalizar automaticamente

Para usar el script solo hacen falta esos paquetes, y nautilus-actions está recomendado (si estás en un sistema debian, con apt-get):

sudo apt-get install zenity imagemagick libimage-exiftool-perl nautilus-actions

Nautilus-actions, lo que hace es añadir una nueva acción al menú contextual del navegador de archivos (Nautilus), para que se muestre una opción al pulsar el click derecho sobre una imagen o carpeta.

Para ello, simplemente nos vamos a (en Ubuntu) Sistema > Preferencias > Configuración de acciones de Nautilus y nos saldrá una ventanita donde seleccionaremos Añadir.

Los parámetros los configuraremos como en los pantallazos de a continuación, y listo para usar :)

Seguro que la mayoría de la gente usa el bittorrent, y muchos el Azureus, el que creo que es el cliente de bittorrent más famoso que existe. Es muy bonito, tiene muchas opciones, y funciona en muchos sistemas. ¿Desventajas? Está programado en Java y eso es sinónimo de usar muchos recursos.

Por eso yo llevo bastante tiempo usando el cliente rtorrent, un cliente que funciona por linea de comandos (ncurses) y que unido a la aplicación screen, da mucho juego :)

Su principal ventaja respecto al rendimiento es que está escrito en C++ y que usa directamente la pila de red. En conexiones de alta velocidad es capaz de dar una velocidad el triple que otros clientes de bittorrent habituales ^_^

Ante todo, para instalar el rtorrent, en un sistema debian: sudo apt-get install rtorrent y listo. Si no, pues a descargar desde aquí.

Si uno se molesta un momento en configurarlo como es debido (sólo lleva unos minutos, al igual que cualquier programa ^^), pues se obtienen muy buenos resultados y prácticamente sin afectar al rendimiento del sistema. Y para simplificar, os diré todos los pasos necesarios para dejarlo listo:

Una vez instalado, lo primero que tenemos que hacer es tener una carpetita dedicada al bittorrent. En mi caso es /media/Almacen/Bittorrent, y dentro de ella tengo dos carpetas más, torrents e incompletos. En la carpeta principal tendré los archivos descargados, en la carpeta torrents, los archivos .torrent, y en incompletos, los archivos temporales mientras se descarguen. Esto es muy útil ya que podemos saber cuando se terminan de bajar los archivos o no :)

Si ya tenemos preparada la estructura en nuestro disco duro para empezar a bajar, nos vamos a crear un archivo de configuración, llamado ~/.rtorrent.rc

Así que para ello usa tu editor de textos habitual, nano, vi, emacs, kedit, gedit… y ábrelo:

$ gedit ~/.rtorrent.rc &

Yo he añadido las siguientes lineas de configuración:

Para guardar mis archivos que se están bajando en la carpeta especificada:
directory = /media/Almacen/Bittorrent/incompletos

El rango de puertos que usará el torrent. Asegurarse de abrirlos en el router/firewall
port_range = 8000-8010

Cuando se completen los archivos, moverlos a la carpeta principal:
on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,/media/Almacen/Bittorrent/ ;d.set_directory=/media/Almacen/Bittorrent/"

Limito la bajada desde las 10 de la mañana hasta la 1 de la noche a 30kb/s, pero le quito los límites por la noche:
schedule = throttle_1,01:00:00,24:00:00,download_rate=0
schedule = throttle_2,10:00:00,24:00:00,download_rate=30

Comprueba el directorio por nuevos archivos .torrent, reinicia los nuevos torrents copiados y para aquellos que hayan sido borrados:
schedule = watch_directory,10,10,load_start=~/media/Almacen/Bittorrent/torrents/*.torrent
schedule = tied_directory,10,10,start_tied=
schedule = untied_directory,10,10,close_untied=

Cuando haya menos de 100Mb de disco duro, para de descargar archivos
schedule = low_diskspace,5,60,close_low_diskspace=100M

Por cierto, teneis un archivo de configuración de ejemplo en /usr/share/doc/rtorrent/examples/rtorrent.rc con lo que podeis abrirlo, toquetearlo a vuestro gusto, y luego guardarlo en ~/.rtorrent.rc para que se cargue por defecto.

Además, el rtorrent ya acepta almacenamiento en sistema de ficheros NTFS (lo que hizo que un tiempo usase el Azureus… – ya no mas!)

Cambiando de tema, una pregunta que muchos se harán es… “Como el rtorrent es una aplicación de consola, ¿necesito tener una consola abierta y dedicada al rtorrent?” — No! Con screen, es posible dejar cualquier aplicación de consola en segundo plano ;)

Arrancar rtorrent:
$ screen rtorrent

Dentro del rtorrent, para dejarlo en segundo plano:
[Control + A] [Control + D]

Para retomar el rtorrent, desde una consola:
$ screen -r

De todas maneras, hay más detalles en las páginas de manual de screen ;)

Después de informarnos sobre la precaria situación de la Ingeniería Informática, hoy ha tenido lugar la manifestación a las 12:00, en la plaza de la Constitución de Málaga (en otras ciudades se supone que también, habrá que esperar a ver si sale algo en las noticias…).

Por de pronto tenemos en la versión digital del Malaga Hoy un video de lo ocurrido.

Según la tesorera del consejo de estudiantes de la universidad de Informática de Málaga, hemos sido unos 2500 (según el estado seguramente unos 150 xD).

Yo por mi parte, como no podía faltar, he hecho un montón de fotos y videos, que os dejo aquí para que lo veais.

Computer Science strike in Málaga
Esperando a que empiece la manifestación…

Computer Science strike in Málaga
La gente se lo curraba ;)

Computer Science strike in Málaga
La cabeza de la manifa

Computer Science strike in Málaga
En marcha por calle Larios

Computer Science strike in Málaga
Sentada en un paso de peatones de la Alameda. Por 15 minutos aquí, seguramente se colapsó el tráfico de toda Málaga xD

Computer Science strike in Málaga
Pobre abuelete esperando un autobús en la calle que cortamos…

Computer Science strike in Málaga
Computer Science strike in Málaga

Computer Science strike in Málaga
Invadimos el paseo del Parque, cuando no teníamos permiso para cortar el tráfico…

Computer Science strike in Málaga
Y por ello la presidenta del Consejo de Estudiantes ahora tiene una ficha policial x’D

Computer Science strike in Málaga
Computer Science strike in Málaga
Reivindicando en frente del Rectorado de la Universidad de Málaga.

Computer Science strike in Málaga
Y aquí, reunidos con la Rectora, Adelaida de la Calle

Computer Science strike in Málaga
Esta foto lo dice todo…

También tenéis más información en el blog del Consejo de Estudiantes ETSII Málaga, más fotos en mi Set de Flickr, y más videos… próximamente :)

ACTUALIZACIÓN: En el Diario Sur han publicado también la noticia con video, y en Malaga hoy también.

Un grupo de hackers ha entrado en los sistemas informáticos del LHC que ha sido recién inaugurado, aunque los daños han sido mínimos, ya que podían haber entrado incluso a los controles de la máquina.

Por lo visto han dejado una nota diciendo que los administradores son un “puñado de escolares”.

nautilus-gnomeHoy al intentar descargar una película me he dado cuenta de que me estaba quedando sin espacio en mi partición /home, pero me parecía extraño ya que yo nunca la uso para guardar nada que ocupe espacio.

Use el Analizador del uso de disco (el comando baobab, que me parece simplemente genial y terriblemente útil), y vi que tenia 2 gb usados por el directorio ~/.thumbnails

El directorio ~/.thumbnails lo gestiona el navegador de archivos nautilus para guardar las previsualizaciones de las imágenes de nuestro disco duro… y por lo visto yo tengo muchas imágenes (y las he usado mucho estos días ya que he estado subiendo muchas fotos a flickr y por tanto se han generado literalmente miles de archivos nuevos).

Para limpiar un poco el espacio, he eliminado las thumbnails de aquellos archivos que no se hayan accedido durante los últimos 7 días, simplemente ejecutando el siguiente comando:

find ~/.thumbnails -type f -atime +7 -exec rm {} \;

Quizás una buena idea sería meter este comando en el crontab para que se ejecute una vez por semana a una hora que no se use el ordenador por ejemplo ;)

Hace poco tiempo que empecé a utilizar el sistema de objetos de PHP 5 y… ya quiero que salga la versión 6.

¿Por qué? Porque la herencia no tiene el comportamiento esperado de otros lenguajes orientados a objetos.

Veamos un ejemplo:

class A {
	private $var;
	
	function __construct() {
		$this->var = 'A';
	}
	
	function ver() {
		echo $this->var;
	}
}

class B extends A {
	function __constrct() {
		$this->var = 'B';
	}
}

$a = new A();
$b = new B();
echo $a->ver();
echo $b->ver();

La salida esperada sería “AB”, pero lo que realmente sale es “AA”.

Lo que pasa es que al ejecutarse una función de una clase superior, se ejecuta en el entorno del padre, cogiendo sus variables y todo lo que haga falta… y esto, sinceramente, es una putada.

Avisados quedais!

Página siguiente »