miércoles, 28 de noviembre de 2012

Expresiones Regulares | ¿Como lee mi navegador una direccion email o numero de teléfono?

Cuando tecleamos en nuestro navegador web una direccion email, un numero de teléfono, un numero de cuenta,o cualquier otro dato, nos podemos preguntar, ¿como lo hace? ¿que hay mas abajo de lo que estoy viendo?
Pues la respuesta es muy interesante, si tecleamos un numero de telefono se está usando una expresion regular para reconocerlo.

Por ejemplo si tecleo el telefono 999666333, ¿que expresion regular se ha encargado de reconocerlo?
Pues esta: \d{9}.
Es muy sencilla, \d es una expresion regular que acepta un solo digito y con {9} permitimos que sean nueve digitos.
¿Que pasa si tecleo el tecleo el telefono de otra forma, por ejemplo 666 333 o 66 63 33?
Pues la expresion regular \d{9} ya no nos vale porque es demasiado restrictiva y tenemos que modificarla para que acepte una u otra forma de teclear el numero de telefono.

Vamos a ir a primero a modificar la expresion regular para aceptar el formato sin prefijo 666 333:
Queda de la forma: (\d{3} )(\d{3}).
Aqui (\d{3} ) es la E.R. que reconoce el primer campo, 666 (terminado en espacio en blanco).
Y (\d{3}) es la que reconoce el segundo campo, 333.
Es decir hemos formado una expresion regular juntando dos expresiones regulaes y la unica diferencia entre una y otra es que la de la izquierda acepta un espacio en blanco y la segunda no.

Ahora le llega el turno al formato 66 63 33:
Pues la expresion regular tiene que aceptar tres campos de dos numeros y ademas los dos primeros campos tienen espacio en blanco.
Hmm, bueno ¿si tengo tres campos de dos numeros entonces tengo que juntar tres expresiones regulares que acepten solo dos numeros?
Tic tac... ¡Correcto!
Pues la expresion regular es esta: (\d{2} ){2}(\d{2}).

La cosa se pone interesante cuando nos preguntamos: ¿pero todo el mundo no memoriza  los numeros de telefono de la misma forma asi que si yo introduzco en el navegador mi numero de telefono puede que no me lo reconozca solo por el formato en el que yo lo suelo escribir?
No hay problema, usamos un O logico (simbolo |).
Asi que la expresion resultante es: ((\d{3} )(\d{3})|(\d{2} ){2}(\d{2}))
Vale, es mas grande pero solo son las dos E.R. anteriores juntadas y se le añaden parentesis de prioridad al igual que en la multiplicacion, si como en la E.S.O.

Vamos a ser excepticos, hoy en dia hay que teclear siempre el prefijo, pues ¡vamos a por el!
Si hemos estado atentos y teniendo en cuenta que un prefijo es un numero de tres cifras entonces la expresion regular para el prefijo es esta: (\d{3} ).

Y por fin ya podemos aceptar numeros con prefijo y tecleando de una forma o de otra con:
 (\d{3} )((\d{3} )(\d{3})|(\d{2} ){2}(\d{2}))

Como podemos ver las expresiones regulares es lo que los ordenadores usan para almacenar datos como numeros telefonicos, nombres y apellidos, direcciones de correo, numeros de cuenta, etc..
Antes de terminar se deja como curiosidad la expresion regular necesaria para reconocer direcciones de correo, se complica algo mas: \w[\w.%+-]*@(\w[\w-]*\.)+[a-zA-Z]{2,6}.
Ala, ahora a ver que significa cada cosa...

Podeis ampliar mas informacion pinchando aqui:
http://www.regular-expressions.info/characters.html

Y aqui para poner a prueba las expresiones regulares que se os ocurran:
http://www.regexplanet.com/advanced/java/index.html

Linux | Montar y formatear un disco



Montaje 
Para evitar borrar por accidente algún dato de nuestro disco vamos simular el montaje y formateo con un dispositivo loop.
El usuario Turing va a montar a través de un dispositivo loop un sistema de ficheros ext4 creado en un fichero de nombre /home/Turing/discoduro.img.

El punto de montaje sera /home/Turing/puntomontaje
Fácil, muy fácil. Como root y añadimos esta linea al fichero /etc/fstab:


/home/Turing/discoduro.img /home/Turing/puntomontaje ext4 defaults, loop, user 0 0

  
Y ya tenemos discoduro.img montado en /home/Turing/puntomontaje. Podemos verificar que se ha montado con:

ls /home/Turing/puntomontaje 

Si discoduro.img esta dentro de la ruta /home/Turing/puntomontaje es que este esta montado.
 
Formateo
Como usuario Turing vamos a darle al fichero /home/Turing/discoduro.img un tamaño menor de 100MB y lo vamos a formatear con Ext4.


Estando en /home/Turing ejecutar:


dd if =/dev/zero of=discoduro.img bs=1M count=100 


Donde bs es un bloque de 1M y count indica que queremos 100 bloques, luego el tamaño del disco es de 100M.
Y finalmente le damos formato con:


mke2fs -t ext4 discoduro.img 


Y si todo ha ido bien ya tenemos discoduro.img montado y con el formato Ext4.

Salimos de root. Podemos comprobar el montaje con las siguientes instrucciones como usuario normal:

mkdir puntomontaje 
mount /home/Turing/puntomontaje

touch puntomontaje/ficherovacio

mkdir puntomontaje/directorio
umount /home/Turing/puntomontaje 

Simplemente creamos un directorio para nuestro sistema de ficheros, lo montamos y creamos dentro de este un fichero y un directorio, como no surge ningún problema finalmente desmontamos el sistema de ficheros con la instrucción umount.
 

Linux | Crear un usuario con contraseña



Saber crear usuarios en Linux es importante porque necesitamos tener como mínimo dos usuarios, el normal y el superusuario, es decir el root.
Simplemente con el comando adduser podemos crear un usuario.
Y con passwd le damos una contraseña, si no le asignamos contraseña obviamente no podemos logearnos con este nombre de usuario.
Aunque el bash nos devuelve que no es una contraseña segura, no pasa nada porque esta está creada y se puede usar.
La contraseñas de los usuarios están almacenadas en /etc/shadow pero no se pueden ver porque están encriptadas.
El fichero /etc/passwd indica si un usuario tiene o no contraseña con una 'x' a la derecha del nombre de usuario. En este fichero hay un montón de usuarios que el S.O. usa para la gestión de procesos.

Vamos a hacerlo paso a paso creando un usuario que se llama Turing con la contraseña 1234.
Teclear en el bash:
 
adduser Turing
passwd 1234

Y ya tenemos el usuario Turing creado, si nos hemos equivocado en algún paso (raro, porque solo son dos) podemos comprobar si se ha creado el usuario mirando los ficheros /etc/passwd o /etc/shadow.
Para ver nuestro usuario tenemos que bajar al final del fichero.