En castellano más abajo

Normalment, amb l'ús diari de varies eines es fan alguns scripts o programes mig utils, mig curiosos o mig el qué sigui que intentaré posar-los aquí.

No són, en general, programes per fer servir i ja està, sinó segurament poden servir de idea per fer un altre, com a base abans d'evolucionar o els hi falta força provar. És més, en alguns per funcionar potser hem de modfificar algunes cosntancs o variables del codi font. Però sol ser una llàstima que quedin al fons del disc dur sense més utilitat.

Intentaré posar-ho a cada programa tal com toca, però tot el qué hi ha aquí publicat és amb llicència GPL v. 2.0 o posterior.

Si el programa és un sol fitxer posaré el codi directament sense fer .tar, etc. Evidentment, si teniu qualsevol comentari m'ho podeu fer arribar a carles arroba pinux.info.


Índice

Backup a CD's

Necesitaba algun método para hacer backup de varios directorios de más de un CD e capacidad.

No me importaba que no se aprovechara el máximo los CD's, aunque quería la información ordenada en ellos por directorios (más o menos) y que se pudiera leer de los CD's sin problemas (sin tener que usar programas raros, sin estar comprimido, etc.)

Después de buscar programas, no encontré ninguno que hiciera lo que quería exactamente así que lo hice

El sistema de backup ese es para hacer un backup de varios directorios a multiples CD's, el tamaño máximo por CD desaprovechado será el tamaño del fichero más grande de todos, caso bastante improbable porqué debería quedar justo al final de todo de un CD (entonces salta al otro CD). Por ejemplo, si tenemos ficheros MP3 de 3 MB el tamaño máximo del CD desaprovechado será 3 MB

El uso básico es bastante fácil. El programa consta de dos scripts: cds.pl y cd2iso.sh

cds.pl

carles:~# cds.pl --help
/usr/local/bin/cds.pl [num_megues] [desti]
Lo único que tenemos que hacer es pasarle un listado de ficheros y él nos hará varios listados en el directorio donde le indicamos que será lo que iremos a grabar al CD. Por ejemplo:
find /mnt/dades/backup/ -type f | cds.pl 650
Nos crearé en el directorio donde nos encontramos unos ficheros de nombre 01.cd, 02.cd, 03.cd, etc. que serán listados de ficheros (que sumarán unos 650 MB):

(si hacemos cds.pl 650 - veremos cuantos CD's ocupa pero no creará los ficheros)

carles:~# find /mnt/dades/backup/home/home/public/ -type f | cds.pl 650 
Començo CD 1
Capacitat anterior: 646.91. Començo CD: 02
Capacitat anterior: 648.60. Començo CD: 03
Capacitat anterior: 648.71. Començo CD: 04
Capacitat anterior: 646.46. Començo CD: 05
Capacitat anterior: 648.08. Començo CD: 06
Capacitat anterior: 643.04. Començo CD: 07
Capacitat anterior: 646.85. Començo CD: 08
Capacitat anterior: 648.37. Començo CD: 09
Capacitat anterior: 648.07. Començo CD: 10
Capacitat anterior: 649.87. Començo CD: 11
Capacitat anterior: 648.76. Començo CD: 12
Capacitat anterior: 648.89. Començo CD: 13

cd2iso.sh

Una vez tenemos los listados de los ficheros que grabaremos, haremos:
cd2iso.sh
Y él mismo hará los ficheros ISO y los irá grabando, pidiendo el CD, etc.

En el fichero cd2iso.sh tenemos unas variables para definir la velocidad, dispositivo y directorio temporal que usaremos.

Como nota, dado un conjunto de ficheros numeroso, organizarlos de la mejor forma para que quepan en varios CD's es un problema casi irresoluble, es la idea del problema de la mochila típico de Programación y ejemplos de Backtracking.

Los programas


Servidor miniftp

Hecho en Julio de 2002, es un servidor de FTP en general no usable sin ampliarlo un poco aunque ya funcionaba para las cosas más básicas. Cuando lo hice no sabia programar muy bien con Sockets.

Características:

Aquí hay el programa.

Cadencia de tecleo

En mis momentos raros de la noche, hace ya tiempo se me ocurrió que cuando tecleamos la contraseña damos más información que los simples códigos que son las letras.

Al menos, cuando hace tiempo que escribimos una contraseña (cosa que no debería suceder ya que las deberíamos cambiar de forma frecuente) suena de una forma "especial", tiene cierta "cantarella", cierta cadencia...

Para hacer una prueba hice ese programa. Puede funcionar para "aprender" o bien para "comprobar".

Aprender: se ejecuta con ./cadenciatecleo 1. Escribimos la contraseña, el programa hará un fichero llamado sortida.txt donde se guardan las milésimas de segundo entre teclas.

Comprovar: se ejecuta con ./cadenciatecleo 0 y nos pide la contraseña. Se la escribimos, y comprueba si está dentro de los parámetros aceptados. Los parámetros estan en el mismo código fuente, en los defines INDIVIDUAL y ABSOLUT. INDIVIDUAL define el umbral en % del original y la comprovación. ABSOLUT nos dice cuantas teclas pueden superar el umbral para aceptar la contraseña.

El programa no comprueba las teclas en sí, tan solo los "tiempos". Se pueden añadir muchas cosas al programa: más inteligencia para las comprovaciones, pedir varias veces y hacer medias, etc. Podría ser bastante fácil añadirle reglas, se conseguiría más precisión.

Tal como está ahora estoy en un 80% de aciertos de la contraseña.

No es válido en sistemas donde haya latencia (por ejemplo, un ssh remoto) ya que la variación que se añade desvirtua la cadencia de teclado.

El programa


Recuperar datos

Este programa nació a raíz que un amigo perdió un ficheor .bz2 muy importante para él. Contenia la llave privada de todos sus documentos de su vida.

La solución fué hacerle hacer:

cat /dev/fd0 > salvacio
Y me envió el ficheor salvacio por email.

Dentro del fichero salvacio habia el fichero .bz2, y ya que era un fichero realmente pequeño estaba sin fragmentar.

El programa lo único que haces es abrir un fichero llamado salvacio y buscar hasta encontrar una cadena que sea BZh91. Esta cadena es el inicio de cualquier fichero bz2. Una vez encontrado, irá copiando hasta el final del fichero al fichero desti. A partir de aquí podremos hacer un bunzip2 desti, aunque después del final del fichero bz2 haya "basura", bunzip2 nos lo dirá y es suficientemente inteligente como para parar de descomprimir cuando es necesario.

Hay maneras mejor de hacer eso con algunas utilidades, aunque esas normalmente dependen del sistema de ficheros (vfat? ext2? xfs?) y no son tan divertidas :-) En Debian hay varias.

Aquí hay el programita


Contador en PHP

Pequeño programa para contar las visitas en sitios Web.

Usa mysql para guardar el número de visitas de una Web determinada, también guarda el último acceso desde determinada IP y hasta que no han pasado 30 minutos desde la visita de una IP no cuenta de nuevo.

Se podría mejorar porqué usa mucho código PHP que se podría hacer directamente con sentencias de Mysql, pero nadie ha nació enseñado, no? Si lo optimizo lo pondré por aquí también.

Para limpiar la tabla temporal que hace pondremos en el cron una cosa como esa:

10 4    * * *   root    /usr/bin/mysql --user=usuario --password=password_de_mysql -e 'use comptador; delete from temp where hora
Para usarlo, donde quereis que salga el número de visitas haréis:

Aquí teneis el programita en PHP.


Signatura aleatori Me gusta que el final de los mails sea algo como:
-- 
Carles Pina i Estany            GPG id: 0x8CBDAE64
	http://pinux.info
	Todo aparato eléctrico protege a su fusible quemándose antes que él.
Donde la frase última es aleatoria.

Para eso hice este. Aquí hay dos versiones, sign.pl y sign2.pl (se podría hacer una con un modificador pero era una versión con muchas prisas un dia).

El sign.pl lo que hace es coger una línea aleatoria del fichero ~.signature.tags y la pone después del fichero .signature.main y con esto hace el .signature.

El sign.pl genera el .signature y además enseña la frase aleatoria por pantalla (así lo podemos poner en el .bashrc).

En cambio el sign2.pl no lo enseña por pantalla, de esa forma lo podemos poner en el .muttrc o donde queramos de una forma parecida a:

set signature=~/bin/sign2.pl|
Este misma funcionalidad podemos hacerlo con el fortune o otros programas, es solo un ejemplo de Perl para ver una manera más.

Carles Pina i Estany
carles arroba pinux.info