Paranoyas de ‘software’

Ene 16

Qué desastre, qué desastre, que no doy actualizado el blog… Apuffff y ahora con los exámenes va a estar más complicado. En fin.

Hoy os traigo una pequeña golosina para los que tengáis Wii. Hace un tiempo me compré el pack de instrumentos del rock band, que consta de una guitarra, una batería y un micrófono. El micrófono quedó relegado instantáneamente a un cajón. El caso es que mi tono de voz me impide cantar canciones con normalidad. Por norma general, una persona tiene un tono de voz normal intermedio, y a partir de ahí puede subir o bajar el tono de forma más o menos simétrica. Algo así:
Min – - – - – - – - – - Norm – - – - – - – - – - Max
Sin embargo, yo tengo un registro raro. Tengo un tono de voz normal situado en la parte superior de mi registro, y a partir de ahí, puedo bajar mucho, pero sólo bajar. Algo así:
Min – - – - – - – - – - – - – - – - – Norm – - – Max
La gran mayoría de las canciones usan tanto registro ascendente como descendente, por lo que yo siempre me quedo sin alcance y tengo que andar transportando, lo cual es un coñazo, así que eso, el micro se fue para un cajón derechito.

Ayer se me encendió la bombillita. Antes tenía un teclado con micrófono integrado, lo cual es bastante útil cuando tienes que hacer cosas, como trabajos en grupo a distancia. Como mi hermano me regaló un teclado decente, de corto recorrido y toda la pesca, me quedé sin ese micro integrado. En lugar de comprarme un micrófono de esos de 3 euros y medio en el carrefürer, me dije ¿y no habrá alguna forma de conectar el micrófono de la Wii al PC?

Pues sí que la hay. Es más, es increíblemente sencillo (para los linuxeros. Los que usáis windows probablemente ya sabéis cómo hacerlo, porque con vuestro sistema todo es más fácil y más userfriendly y nosequé hostias en vinagre, así que vosotros mismos). Lo único que hace falta es tener el módulo del kernel de audio usb (sección device drivers / sound card support / alsa / usb sound device), además de tener el soporte para USB, obviamente. Si usáis una distro con un kernel precompilado o usáis genkernel, lo más probable es que ya tengáis esto incluído en el kernel, ya que es un módulo muy común, así que no tendréis problema. Una vez hecho esto, la magia ya está creada. Basta con conectar el micrófono y ya funcionará.

Lo único que tenéis que hacer para poder grabar o hablar con alguien vía skype o similar, es seleccionar el dispositivo del micrófono, ya que ahora os reconocerá 2 bancos de sonido, por un lado el de la tarjeta de sonido, y por otro el del micrófono. Eso ya es cosa de cada programa, y basta con ir a las opciones y seleccionar el dipositivo adecuado. No es complicado.

Para unas instrucciones más detalladas de lo que os acabo de contar, basta con que consultéis este tutorial.

En cuanto a mis impresiones, pues la verdad es que quedé gratamente sorprendido con la calidad del micrófono. Se oye bajito, al menos con los programas con los que probé, porque no incluyen la típica opción de amplificar 20 dB, pero omitiendo eso, la calidad del sonido es muy buena, e incluso el propio micro tiene cancelación de ruido. Os dejo una pequeña prueba, para que lo comprobéis.

Nov 26

Para los que no lo sepan, google wave es una herramienta innovadora parida por google (por quién si no xD) que más o menos junta en un único protocolo la mensajería instantánea, el email, las redes sociales…
Grosso modo podríamos decir que es una herramienta para trabajo conjunto y comunicación en tiempo real. Es un poquillo complicado de describir, pero bueno, echando una ojeada por la nube, podéis encontrar mucha información al respecto.

Hace unos días me enviaron una invitación y llevo un par de semanas pegándole un testeo. La mayoría de la gente dice que es una mierda, pero bueno, yo no estoy de acuerdo. Sí es cierto que consume recursos a mansalva, porque es javascript puro y duro por doquier, y actualmente no va muy fino porque no es ni siquiera versión beta, además de que como todavía no hay mucha gente que lo tenga, no se puede interactuar mucho. En cualquier caso, basándome en mi propia experiencia, opino que es una herramienta muy útil, sobre todo en casos como hacer trabajos conjuntos con gente a la que no vemos a diario, compartir ficheros multimedia, enviar algún que otro mensaje, sustituyendo al mail o a los condenados mensajes offline del msn…

Supongo que cuando esté un poco más pulido, se le podrá sacar más jugo, pero bueno, yo ya digo que a mí tal y como está ya me parece bastante útil. Ahí queda eso.

Ah, se me olvidaba, si alguien quiere, tengo invitaciones para crear una cuenta :P .

Abr 24

Si os digo que penséis mentalmente cómo abriríais un fichero cualquiera de vuestro ordenador, seguramente lo primero que os vendría a la cabeza sería abrir el típico explorador, que se inicia en un directorio concreto, y a partir de ahí vamos clickando en los directorios siguiendo una ruta determinada hasta el fichero que queremos abrir.

Ésto es así desde el principio de los tiempos, desde que existen las interfaces gráficas (e incluso en modo texto se hace de esta forma). Tengo constancia de un par de variantes, pero poco conocidas y que no llegaron a ningún lado.

Ahora imaginaos que vuestro disco duro es como el planeta tierra visto desde el espacio, y que queréis ir… yo qué sé… a la tienda de appinformatica de Pontevedra. Primero os iríais acercando a Europa, luego a España, luego a Galicia, luego a Pontevedra, luego a la ciudad de Pontevedra, luego a la calle San Antoniño, y finalmente aterrizaríais en el edificio correspondiente. Imaginad hacer esto mismo con los ficheros de vuestro ordenador. Pues bien, esta alternativa ya existe, y se llama Eagle mode. Mejor no os hablo del explorador. Entrad en el enlace y ved el vídeo, porque es muy explicativo de lo que estoy diciendo.

Me sorprendió gratamente por muchas razones. Para empezar, es muy fácil de instalar y utilizar. Basta con un comando para compilarlo, otro para instalarlo (no es necesario instalarlo en ningún sitio, podemos ejecutarlo directamente una vez compilado), y para ejecutarlo basta con lanzar un script que crea el propio compilador. El control es realmente bueno. Si andamos cortos de recursos, el zoom y renderizado de las previsualizaciones irá a saltos, pero en ningún momento perderemos el control del sistema (¿verdad, firefox? ¬¬). La versión estable es REALMENTE ESTABLE, a pesar de ser una beta. Yo llevo un buen rato dándole vueltas y no dio ni un sólo error.

En fin, que merece la pena echarle un vistazo, y si usáis linux, en serio, probadlo, porque no os va a costar absolutamente nada compilarlo y merece la pena la experiencia. Yo estoy pensando en usarlo bastante…

Abr 15

Esto es algo que había hecho una vez en windows, y resultó tan sencillo como seleccionar los dos interfaces de red del equipo que iba a usar como pasarela y seleccionar la opción “establecer pasarela”, o algo similar (hace mucho que lo hice y hace mucho que no uso windows). En cualquier caso, me vi en la necesidad de hacer algo similar en linux, pero fue bastante más complicado de lo que pensé que sería. Aquí os pongo el proceso que tuve que seguir de forma muy detallada, para que no os perdáis. Difícil y nada sencillo, pero sí para toda la familia.

Bueno, pues eso, la configuración de la red es la siguiente:

Para poner correctamente la parte cableada, que es de lo que se trata aquí, configuramos las interfaces de los 3 equipos de la siguiente forma:

EQUIPO 1

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0
gateway 192.168.0.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2
up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.0.7
auto eth0

Aquí lo que hacemos es indicarle al equipo que la red wifi (subred 1) se encuentra a través de la puerta de enlace 0.2, y que la subred 2 se encuentra a través de la puerta de enlace 0.7

SERVIDOR

auto lo
iface lo inet loopback

iface eth0 inet static
address 192.168.0.7
netmask 255.255.255.0
gateway 192.168.0.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2
auto eth0

iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
auto eth1

Aquí le indicamos al servidor que la red wifi se encuentra a través de la puerta de enlace 0.2, al igual que con el anterior equipo. A la conexión punto a punto no es necesario ponerle una puerta de enlace.

EQUIPO 2

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

allow-hotplug eth0
iface eth0 inet static
address 192.168.2.5
netmask 255.255.255.0
gateway 192.168.2.1
up route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.2.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1
auto eth0

Aquí le indicamos al equipo que para acceder a las otras 2 subredes tiene que pasar por la puerta de enlace 2.1.

Una vez hecho ésto, tendremos acceso desde cada subred únicamente hasta el servidor, ya que éste no retransmitirá los paquetes de una de sus interfaces a la otra. Para solucionar ésto, es necesario introducir un script de iptables que fuerce esta retransmisión. El script sugerido es el siguiente:

#!/bin/sh

echo Aplicando Reglas de Firewall...

## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -i eth1 -d 192.168.0.0 -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.1.0 -j ACCEPT
iptables -A FORWARD -i eth0 -d 192.168.2.0 -j ACCEPT

echo 1 > /proc/sys/net/ipv4/ip_forward

Aquí hacemos lo siguiente: lo primero es eliminar las anteriores configuraciones de iptables si las hubiese (si tenéis alguna otra cosa, evidentemente tendréis que cambiar ésto).
Posteriormente se establece la política por defecto como aceptación de todos los paquetes (es inseguro. Si os preocupa la seguridad tendréis que cambiar el script para denegarlos por defecto).
A continuación, introducimos una línea para enmascarar la conexión procedente de la subred 2 hacia el exterior. Esta línea es importante, ya que de no ponerla, no podremos conectarnos al router, y por tanto, no habrá acceso hacia internet ni hacia la subred 1.
Después viene el grueso del script. En estas 3 líneas se redireccionan los paquetes, a saber: lo que llega por el interfaz 1 y se dirige a la red 0 se reenvía. Lo mismo para lo que llega por el interfaz 1 y se dirige a la red 1 y para lo que llega por el interfaz 0 y se dirige a la red 2.
Por último ponemos a 1 el bit que activa el ip-forwarding (muy importante. De lo contrario, el script no hará nada).

Una vez hecho ésto, basta con añadir el script a /etc/init.d/ e introducirlo en el arranque del sistema para que se active siempre.

Ene 12

Servidor de descargas con mldonkey (III)

SEPTIMO PROBLEMA: tenía lowID. La solución es sencilla, una redirección de puertos en el router. Sin embargo, no son únicamente los puertos de los servidores a los que nos conectemos. El mldonkey utiliza algunos puertos más para gestionar la conexión (podemos verlos en el fichero de configuración downloads.ini).

Bueno, una vez instalado todo y configurado el mldonkey en el equipo viejo para poder gestionarlo desde toda la red (así se puede poner a bajar desde cualquier ordenador de la casa, y siempre se descarga en el equipo viejo), sólo faltaba un script que pasase ficheros a mi equipo en cuanto estuviesen descargados, por aquello de no llenar aquel disco duro. Como ese ordenador va a estar siempre encendido, lo más cómodo es que el script esté en mi ordenador, y cada cierto tiempo, monte la unidad de red del viejo, compruebe si hay ficheros y, si los hay, los transifera aquí con wget. El script es algo tan sencillo como ésto:

#!/bin/bash

directorio_local="*directorio donde queremos las descargas*"

mkdir $directorio_local/temporal

mount *directorio NFS*
cd *directorio NFS*/incoming/files

for i in * ; do
    cd $directorio_local/temporal

    wget -c ftp://*ip del servidor*/incoming/files/"${i}" --user=*usuario FTP* --password=*password del usuario FTP*

    tamanho1=`ls -l "${i}"`
    tamanho1=`echo $tamanho1 | cut -d\  -f5`
    tamanho2=`ls -l *directorio NFS*/incoming/files/"${i}"`
    tamanho2=`echo $tamanho2 | cut -d\  -f5`

    if [ "$tamanho1" = "$tamanho2" ] ; then
	rm -f *directorio NFS*/incoming/files/"${i}"
	mv "${i}" ../
    fi
done

umount *directorio NFS*

Como veis, en el script se hace uso de todo, del servidor ftp y del directorio NFS. Monta la unidad NFS, comprueba si hay ficheros y luego descarga cada uno por ftp. Para eso es necesario tener un servidor ftp instalado (recordad que lo instalamos al principio “para lo que pudiese hacer falta” :P ). Una vez descargado cada fichero, se comprueba si el tamaño de origen y destino coincide (está entero) y si coinciden, se borra del origen. Además, está implementado un pequeño sistema de seguridad. Los ficheros se descargan inicialmente a un directorio temporal, y cuando la descarga está completa, se mueve al directorio principal. Ésto es así por si reiniciamos el equipo mientras se está copiando algo. De esta forma, sabemos que todo lo que tenemos en el directorio principal está terminado. Tampoco pasa nada por interrumpir una transferencia, porque el parámetro -c del wget continua las descargas incompletas.

Para que se ejecute de vez en cuando, basta con añadirlo al cron (para eso hay múltiples tutoriales por ahí, nada del otro mundo). Además, se puede automatizar un poquito más. Mldonkey permite establecer usuarios, por lo que si queremos colas de descarga separadas, creamos distintos usuarios no administradores, e indicamos un directorio de ficheros descargados distinto para cada uno, indicándole al script de cada usuario que se haga con los ficheros del directorio correspondiente. No es complicado utilizando el gestor web del mldonkey.

En fin, eso es todo. Nada fácil y nada sencillo, pero al menos sí para toda la familia :P

Ene 10

Servidor de descargas con mldonkey (II)

Ahora la fonera tenía millones de posibilidades más de las que tenía antes, y había que configurar todo de nuevo. Me pasé un buen rato hasta que di con una configuración que funcionase, porque según lo que pongamos, perdemos el acceso de unas redes a otras, perdemos el acceso de unas redes a internet, perdemos la posibilidad de conectarnos por ip fija… en fin, una locura. La configuración con la que me funcionó es ésta:

Configuración 1
Aquí podemos ver lo básico. La fonera está configurada para conectarse a la red con una ip fija, con su máscara y sus dns correspondientes. Debajo vemos la configuración del interfaz wifi, tambiéncon su ip fija, y especificando como puerta de enlace la ip del router (de lo contrario, no hay acceso a internet).

Configuración 2
Tenemos varios modos de funcionamiento para la fonera. Como ya hay un router actuando de puerta de enlace, si nos fiamos de la ayuda, deberíamos poner la fonera como router y no como puerta de enlace. Sin embargo, si hacemos ésto perdemos la conexión a internet de todos los dispositivos que se conecten a la fonera. Es necesario configurarla como puerta de enlace.

Configuración 3
En cuanto al modo de funcionamiento, debe ser como punto de acceso. En el tipo de red, podría haber puesto b sin problemas, porque sigue siendo superior a la velocidad del USB del ordenador viejo. Sin embargo, ésto limitaría a todos los demás equipos que se pudiesen conectar, por lo que preferí dejarla en mixed, con los rates en auto.

Configuración 4
Ésto es MUY importante. Debemos desactivar el firewall. De lo contrario, no devuelve ni los pings.

Bueno, una vez configurado el firmware nuevo, intenté dejar las redes como estaban y acceder de una red a la otra. Sorpresa, todavía no funcionaba y recibía el mismo mensaje de paquetes filtrados de antes. Aquí ya tenía un nudo cerebral, pero tras intentar varias cosas, se me ocurrió establecer rutas estáticas, y resultó ser la solución. Establecí ésta en el router:

                       Menu 12.1.1 - Edit IP Static Route

                    Route #: 2
                    Route Name= mldonkey
                    Active= Yes
                    Destination IP Address= 192.168.1.5
                    IP Subnet Mask= 255.255.255.0
                    Gateway IP Address= 192.168.0.2
                    Metric= 1
                    Private= No

Con ésto desde windows ya podía acceder desde una red a la otra, pero desde linux no. Evidentemente el problema residía en que en linux había que establecer la misma ruta para el sistema, que en windows se hace automáticamente (punto a favor). Fácil, simplemente añadir ésto en /etc/network/interfaces, en el campo donde configuráis vuestra tarjeta de red:

up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2

Esto significa que para acceder a cualquier elemento de la red 1, se debe pasar por 0.2, que es el interfaz cableado de la fonera.

Con ésto ya podía acceder por red desde el equipo nuevo al viejo y viceversa. Ahora había que montar los directorios del viejo en red dentro del nuevo, preferiblemente como una carpeta, para aumentar la comodidad. Ésto se hace de forma muy sencilla con NFS. Basta con seguir este tutorial. Una vez hecho ésto ya podía acceder desde este ordenador al viejo, a sus ficheros y demás.

SEXTO PROBLEMA: al acceder de esta forma e intentar copiar un fichero de un equipo a otro, no me da problemas siempre que los ficheros sean inferiores a 5 megas. Cuando intento transferir ficheros mayores, empieza a transmitir a saco, satura la red… Pensé que podría ser culpa del equipo viejo, porque tiene 10 años y el receptor está conectado a un puerto USB1.0 (ni siquiera es 1.1), por lo que la velocidad de transferencia está limitada a 1.5Mbps (no llega a 200 kB/s), y quizás se saturaba con el flujo entrante. Para descartarlo, probé a transmitir un fichero desde el equipo viejo al nuevo, y la red se saturaba igual, así que el problema es de la red en sí. Estuve indagando mecanismos de control de flujo, para limitar la velocidad, etc, pero no encontré nada que lo pudiese hacer de forma sencilla. Sin embargo me di cuenta de que con wget, podía transferir ficheros de un equipo a otro reduciendo considerablemente la saturación. Va bastante lento, aproximadamente a 1/3 de la velocidad que podría dar de sí la red (va a una media de unos 50 kB/s), pero bueno, al menos funciona, y supongo que con un equipo de hace 10 años, otro de hace 6, una fonera y dos paredes de por medio, no puedo pedir mucho más.

Una vez hecho todo ésto, instalé en el equipo antiguo el mldonkey

Servidor de descargas con mldonkey (IV)

Ene 08

Servidor de descargas con mldonkey (I)

Una vez configurada la red, comprobé que con el otro ordenador tenía internet. Efectivamente, el ordenador viejo ya hacía pings a google como un campeón. Le instalé un servidor ssh para poder controlarlo (sin pantalla ni teclado, sería un poco complicado xD) y un servidor ftp para lo que pudiese hacer falta. Los configuré (para más ayuda, google es el camino) y andando. Luego reinicié el cacharro y configuré la bios para que no parase el arranque ante ningún error (por razones de fecha [ese cacharro tiene la pila de la bios gastada], teclado [press F1 to continue, y no hay teclado] y demás), y una vez hecho todo ésto, intenté acceder desde éste al viejo. Tacháaaaaaaaaaan.

CUARTO PROBLEMA: no había acceso desde una red a la otra. Ningún ordenador de la red 0 podía comunicarse con ninguno de la red 1, ni siquiera para hacer pings (el mensaje era que los paquetes estaban siendo filtrados):

fenix:/home/sparkster# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.153.1 icmp_seq=1 Packet filtered

Lo extraño es que desde la red 1 sí tenía acceso a la 0. Tras trastear con varias posibilidades (cambiar máscaras de subred [estaban todas a 255.255.255.0], intentar con la misma red [se me iba al carajo la conexión a internet, cosas de la fonera], cambiar la red 0 por la 1 y la 1 por la 2, etc), supuse que el problema de todo estaba en la fonera, así que decidí la solución más salomónica, más peligrosa, que me dio más problemas y que a la larga era la única solución posible para evitar problemas futuros: flashear la fonera.

Los que tengáis una fonera, sabréis que es una mierda. El firmware que trae es una cacadelavaca, con muy pocas posibilidades, muy capado… Además cada vez que enchufas la fonera, se conecta a internet, cambia el firmware ella solita y hace las de dios. Además leí que el firmware que anda rulando por ahí, de dd-wrt, es bastante completo, lo que ya me hizo decidirme de todo.

QUINTO PROBLEMA: todos los tutoriales que hay para flashear la fonera (TODOS, ABSOLUTAMENTE TODOS) están mal, tienen errores, están incompletos… Vamos, que fue una odisea. Pensé que había estropeado la fonera 3 o 4 veces, porque no se resseteaba, no podía acceder a ella, no servía con desenchufarla… Y resulta que era otro paso de esos “complicados” que no figuran en los tutos… No voy a enlazar ningún tutorial porque no recomiendo intentar flashearla a menos que estéis muy familiarizados con redboot, con telnet y con ssh, además de haber flasheado ya cosas con anterioridad, porque es muy fácil que por culpa de toda esa morralla incompleta que hay por ahí os quedéis sin fonera. En cualquier caso, los pasos que tuve que seguir yo para flashearla son los siguientes (no servirá para que hagáis nada, pero os hacéis una idea).

  1. Entrar en la fonera para verificar la versión del firmware. Era una avanzada, por lo que había que downgradearla
  2. Resetear la fonera para downgradear el firmware (pulsando reset entre 30 y 40 segundos)
  3. Una vez reseteada, configurar la interfaz cableada poniéndola con ip fija (ya la tenía así, pero al resetear se pierde la configuración)
  4. No permitir que la fonera se conecte a internet para que no se actualice el firmware, abrir un script que hay por la web para hacerle un chanchullo al cacharro y que me permita acceder por ssh
  5. Acceder por ssh y cambiar unos cuantos parámetros para que me permita el acceso por redboot y que no se actualice el firmware
  6. Acceder por telnet para cargar los ficheros del redboot y alguna cosilla más. Reiniciar la fonera
  7. Acceder por redboot para cargar parte del firmware nuevo
  8. Enchufar la fonera, esperar 5 segundos, abrir una sesión telnet antes de que pasen 8, cancelar el arranque para que no se cuelgue (flipa) y cargar más cosillas del firmware
  9. Reiniciar la fonera con el firmware nuevo

Algunos de esos pasos, como ya dije, estaban incompletos, erróneos o directamente no aparecían en los tutoriales (como esa sesión telnet antes de 8 segundos tras enchufar la fonera), por lo que pensé que la había jodido varias veces (tras algunos de esos pasos intermedios, la fonera deja de funcionar correctamente, y ya no es accesible de forma normal).

Servidor de descargas con mldonkey (III)

Ene 06

Por razones que no vienen al caso, me vi en casa con mi PII 400MHz aburrido y más parado que un avión de mármol, así que me decidí a buscarle utilidad. Pregunté a la gentuza del foro de teleco y la solución que más me gustó fue la de montar un servidor de descargas. Ya había hecho algo parecido tiempo atrás, pero no había terminado de cuajar la idea.

En fin, vamos al turrón. Hasta ahora la red de mi casa era algo tal que así:

Como veis, había 2 ordenadores cableados conectados a un router, con las ips 5 y 6 de la red 0, así como una fonera. La fonera tenía la ip 2 de la red 0 para la interfaz cableada, y la ip 3 de la misma red para la interfaz wifi. A la fonera se conectaba una nintendo DS configurada mediante DHCP. El router, con la ip 1 era el encargado de proveer acceso a internet a todos los elementos de la red.

Pues bien, me puse al tajo. Lo primero fue instalar el sistema operativo en el otro equipo. Tenía pensado que este cacharro estuviese a pelo, con el mínimo número de programas instalados, por lo que decidí instalar como sistema Linux Debian (mentira cochina, eso ya tenía pensado hacerlo :P ) y tenerlo sin entorno gráfico ni monitor ni teclado ni nada. Pues nada, me hice con el disco de debian stable netinstall y me puse a ello.

PRIMER PROBLEMA: tenía que conseguir que el cacharro utilizase un receptor wifi USB en modo texto, sin ningún tipo de asistente. Una vez instalado, estuve un rato trasteando con ifconfig e iwconfig, y me salían unas cosas más bien raras, a pesar de que el receptor era detectado sin problemas. Lo que ocurría era que a pesar de que lo detectaba, le faltaban los drivers del mismo, ya que el kernel de linux no incluye los drivers de los receptores ralink. Pues nada, no es problema, me hice a través del otro ordenador con los módulos adecuados, los metí en un pendrive y los cargué en el equipo viejo.

SEGUNDO PROBLEMA: los módulos para el receptor son de la rama testing, y en el ordenador antiguo había instalado la rama stable. Al intentar meterlos, me salió un laberinto de dependencias incumplidas que, a pesar de intentarlo, no conseguí solucionar. Al final opté por replantearme la situación, formateé e instalé debian testing (me tuve que bajar el disco entero, no me valía la netinstall). Una vez hecho ésto, sólo tuve que instalar aparte el firmware del receptor (sólo el firmware, nada más), y el paquete wireless-tools.

TERCER PROBLEMA: esta vez el receptor funcionaba correctamente (lo probé instalando el aircrack para hacer un esnifado del aire en sí xD [descargado desde el otro equipo, claro]), pero no tenía muy claro cómo hacer para que se conectase a la fonera sin ningún asistente. Tras un par de consultas a google y a un par de colegas, di con la solución. Lo que hay que hacer es poner ésto en /etc/network/interfaces

iface *dispositivo* inet static
address *ip para el dispositivo*
netmask *mascara de subred*
gateway *ip de la interfaz wifi de la fonera*
wireless-essid *nombre de la red wifi*
auto *dispositivo*

En mi caso, decidí hacer unos cambios a la red. Puse la red cableada como red 0, y la red wifi como red 1, por lo que ahora la fonera pasaba a tener la ip 192.168.1.1 como interfaz wifi. La red ahora tenía ésta pinta:

Por tanto, mi fichero quedó tal que así:

iface wlan0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
wireless-essid wlan
auto wlan0

Servidor de descargas con mldonkey (II)

Dic 17

Bueno, como lo prometido es deuda, estuve trasteando en un script para adaptar imágenes al ipod. El script en cuestión es muy sencillito. Lo único que hace es recorrer el directorio que le indiquemos de forma recursiva, y si encuentra una imagen más alta que ancha (es decir, una imagen vertical), la inclina 90 grados para que se vea mejor en la pantalla del ipod (estamos hablando de un ipod video, con pantalla 4:3).

No hice nada más de conversión de formatos ni tamaño, ni nada por el estilo, porque de eso ya se encarga el tripod, que es un programa muy listo, así que para demás tareas, a bajárselo tocan. En fin, aquí está la obra:

#!/bin/bash

#----------PARAMETROS DE EJECUCION----------
formatos='*.bmp *.BMP *.gif *.GIF *.jpeg *.JPEG *.jpg *.JPG *.png *.PNG'
#-------------------------------------------

#----------FORMATO DE CONVERSION------------
angulo_rotacion='90'
#-------------------------------------------

#-----------FUNCIONES------------------------
function recorrer_directorios {

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    tamanho=`identify "${i}"`

	    #Eliminamos el nombre del fichero de la salida del identify
	    tamanho=${tamanho/"${i}"/}
	    tamanho=`echo $tamanho | cut -d\  -f2`

	    tamanho_h=`echo $tamanho | cut -dx -f1`
	    tamanho_v=`echo $tamanho | cut -dx -f2`

	    if (( $tamanho_v > $tamanho_h )) ; then
		convert "${i}" -rotate $angulo_rotacion "${i}"
		echo "Convertido: $i"
	    else
		echo "No convertido: $i"
	    fi
	fi

    done

    for i in * ; do

	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi
    done
}
#-------------------------------------------

echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion imagemagick.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

También le hice unos pequeños retoques al script para pasar videos a formato ipod, para evitar que sacara unos cuantos mensajes de error inútiles que no pintaban nada y demás. Aquí está la versión definitiva:

#!/bin/bash

#----------PARAMETROS DE EJECUCION----------
ejecutable='ffmpeg'

formatos='*.asf *.ASF *.asx *.ASX *.avi *.AVI *.flv *.FLV *.m1v *.M1V *.m4v *.M4V *.mov *.MOV *.mp2 *.MP2 *.mpg *.MPG *.mpeg *.MPEG *.mp4 *.MP4 *.ogm *.OGM *.qt *.QT *.ra *.RA *.ram *.RAM *.swf *.SWF *.wmv *.WMV'
#-------------------------------------------

#----------FORMATO DE COMPRESION------------
audio_codec='libfaac'
video_codec='mpeg4'
formato_forzado='mp4'
extension='mpg'

audio_sampling_rate='44100'
audio_bitrate='128kb'
video_bitrate='300kb'

tamanho_pantalla='320x240'
#-------------------------------------------

#-----------FUNCIONES------------------------
function recorrer_directorios {

    mkdir procesados
    mkdir salida
    echo ' '

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    #Comprimimos el fichero de video pasandolo a un fichero temporal sin extension de video para no alterar el funcionamiento del bucle
	    $ejecutable -i "${i}" -acodec $audio_codec -ar $audio_sampling_rate -ab $audio_bitrate -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp

	    #Si el tamanho de la salida es 0 por culpa del audio, recomprimimos
	    tamanhotemp=`ls -l $directorio/"${i}".tmp`
	    tamanho=`echo $tamanhotemp | cut -d\  -f5`

	    if [ "$tamanho" = "0" ] ; then

		rm "${i}".tmp
		$ejecutable -i "${i}" -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp
	    fi

	    #Pasamos el fichero a comprimir al directorio de procesados y el fichero comprimido al directorio de salida, con la extension definitiva
	    mv "${i}" procesados
	    mv "${i}".tmp salida/"${i}".$extension
	fi
    done

    #Eliminamos los directorios temporales para no alterar el bucle
    mv salida/* .
    rm -fr salida
    rm -fr procesados

    for i in * ; do

	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi
    done
}
#-------------------------------------------

echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion ffmpeg.'
echo 'Se recomienda comprobar su correcto'
echo 'funcionamiento con el comando:'
echo 'ffmpeg -i fichero -acodec libfaac -ar 44100 -ab 128kb -vcodec mpeg4 -b 300kb -s 320x240 -f mp4 fichero_salida'
echo 'En caso de error, es imprescindible'
echo 'ajustar los parametros adecuados del ffmpeg'
echo 'en el script.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

Ahora lo que más molaría sería que alguien además de yo mismo los usase xD. Si encontráis algún error, o alguna cosilla que se pudiese mejorar, no dudéis en decírmelo, y se hará lo que se pueda.

Dic 16

Hace un tiempo hice un script en bash para cambiar el formato a una serie de videos para poder reproducirlos en el ipod. Era un script muy sencillo, tal que así:

#!/bin/bash
mkdir procesados
mkdir salida
for i in [ *.asf *.avi *.mov *.mp2 *.mpg *.mpeg *.ram *.swf *.wmv ] ; do
ID1=$i
ID2=`echo $i | cut -d. -f1`
ffmpeg -i “${ID1}” -acodec libfaac -vcodec libxvid -b 300kb -s 320×240 -f mp4 “${ID2}”.tmp
mv “${ID1}” procesados
mv “${ID2}”.tmp salida/”${ID2}”.mpg
done

Sin embargo, y debido a la cantidad de carencias que tiene, me decidí a mejorarlo. Le puse unas cuantas variables para que sea más fácil ajustar parámetros, ahora recorre directorios de forma recursiva y alguna paridilla más. Ésto último me costó un poco hacerlo, que me tuvieron que echar una mano en el foro de teleco :P . Bueno, aquí os dejo el resultado de mi procrastinación:

#!/bin/bash

#----------PARAMETROS DE EJECUCION----------
ejecutable='ffmpeg'

formatos='*.asf *.ASF *.asx *.ASX *.avi *.AVI *.flv *.FLV *.m1v *.M1V *.m4v *.M4V *.mov *.MOV *.mp2 *.MP2 *.mpg *.MPG *.mpeg *.MPEG *.mp4 *.MP4 *.ogm *.OGM *.qt *.QT *.ra *.RA *.ram *.RAM *.swf *.SWF *.wmv *.WMV'
#-------------------------------------------

#----------FORMATO DE COMPRESION------------
audio_codec='libfaac'
video_codec='mpeg4'
formato_forzado='mp4'
extension='mpg'

audio_sampling_rate='44100'
audio_bitrate='128kb'
video_bitrate='300kb'

tamanho_pantalla='320x240'
#-------------------------------------------

#-----------FUNCIONES------------------------
function recorrer_directorios {

    mkdir procesados
    mkdir salida
    echo ' '

    for i in $formatos ; do

	#Nos hacemos con el nombre sin extension
	ID=$i

	#Comprimimos el fichero de video pasandolo a un fichero temporal sin extension de video para no alterar el funcionamiento del bucle
	$ejecutable -i "${ID}" -acodec $audio_codec -ar $audio_sampling_rate -ab $audio_bitrate -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${ID}".tmp

	#Si el tamanho de la salida es 0 por culpa del audio, recomprimimos
	tamanhotemp=`ls -l $directorio/"${ID}".tmp`
	tamanho=`echo $tamanhotemp | cut -d\  -f5`

	if [ "$tamanho" = "0" ] ; then

	    rm "${ID}".tmp
	    $ejecutable -i "${ID}" -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${ID}".tmp
	fi

	#Pasamos el fichero a comprimir al directorio de procesados y el fichero comprimido al directorio de salida, con la extension definitiva
	mv "${ID}" procesados
	mv "${ID}".tmp salida/"${ID}".$extension

    done

    mv salida/* .
    rm -fr salida
    rm -fr procesados

    for i in * ; do

	echo $i

	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi
    done
}
#-------------------------------------------

echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion ffmpeg.'
echo 'Se recomienda comprobar su correcto'
echo 'funcionamiento con el comando:'
echo 'ffmpeg -i fichero -acodec libfaac -ar 44100 -ab 128kb -vcodec mpeg4 -b 300kb -s 320x240 -f mp4 fichero_salida'
echo 'En caso de error, es imprescindible'
echo 'ajustar los parametros adecuados del ffmpeg'
echo 'en el script.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio
    cd $directorio

    recorrer_directorios
fi

Al mediodía, cuando termine de currar, haré uno para pasar las fotos a formato ipod. Lo que tengo en mente es, además de convertir el tamaño, inclinar las que sean más altas que anchas, para verlas más grandes en la pantalla del cacharro. Al tener este script ya terminado, el de las imágenes será coser y cantar. Ya lo veréis por aquí puesto.