Digo .. nadie es perfecto, sólo fue algo que sucedió ERRÓNEAMENTE.
lunes, 19 de octubre de 2009
La gobernadora Ivonne Ortega regala siete camionetas a diputados federales
miércoles, 30 de septiembre de 2009
Pesquero gallego graba en directo persecucion ovni aviones militares
Un video pubicado apenas el día de ayer que está generando mucha controversia (suena como a ventaneando jajaja) por la supueta sensura a la que ha sido sometido, dicen ™ que el video fue publicado originalmente en Terra pero que tuvo que ser retirado luego de "presiones externas" ¿de quién? quien sabe, ¿por qué? tampoco che, en fin, juzguen por ustedes mismos.
martes, 29 de septiembre de 2009
Julio Cesar Chavez Highlight
¿Díganme si no es (o fue) un chingón el Chavez?, chequen el movimiento de cintura del minuto 1:02.
viernes, 25 de septiembre de 2009
Video sacaDeOnda
Les dejo un video que según yo saca de onda con algunas de las pinturas, quizas muchos de ustedes sean muy escépticos en el tema pero yo insisto en que los OVNIS, las figuras en los campos y otras cosas son reales, claro que no todo y hay personas que siempre meten mucho ruido en el asunto, en fin, disfrutad del video y si gustan díganme cosas como las que me dice Araceli "!ya hay ovnis por todos lados!" con tono burlón obviamente.
miércoles, 23 de septiembre de 2009
¿revivirá mi asqueroso y aburrido blog?
Hace un shingo que no publico nada, la neta es que me ha dado mucha flojera y cuando he estado a punto de publicar pasa algo que me desanima, en fin, probablemente vuelva a escribir una que otra ñoñería pronto pero la gran noticia de hoy es que la ñoñis ¡ya tiene blog!, sí, así como lo oyen, en respuesta a las miles de cartas de fans hoy ha decidido unirse a la enorme comunidad de personas que comparten anécdotas, opiniones y demás chingaderas en blogspot, la dirección es:
domingo, 6 de septiembre de 2009
viernes, 27 de marzo de 2009
Validar una dirección IP privada en Java
Resulta que, para mi proyecto terminal me vi en la necesidad de verificar que una dirección IP sea una dirección local válida, como todo buen "huevón" me puse a googlear a ver si había algo hecho por ahí, escudándome en aquella muy frecuente (güacala) frase de "reinventar la rueda" no quería hacerlo por mi mismo (aparte de que tenía mucha flojera). A fin de cuentas, no encontré nada decente digno de agregarse a mi ya muy ofuscado código y me decidí a hacerlo, después de todo sólo necesitaba hacer uso de expresiones regulares, un lápiz y un papel.
Bueno, depués de este choro que seguro nadie leerá y no se porque escribí, muestro como lo hice:
Basados en el RFC 1918, una dirección IP privada puede pertenecer a cualquiera de los siguientes tres rangos de direcciones:
o bien:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
A primera vista pareciera que es no es tan complicado hacerlo, pero el problema no es tan trivial (tampoco es difícil ¬¬); por ejemplo: ¿Cómo saber si un número está entre 0 y 255?. La respuesta puede ser algo similar a lo siguiente:
172.16/12
192.168/16
10/8
Números de un dígito:
- Se permiten números en el rango [0-9].
- No pueden comenzar con 0, esto porque no se permiten números como 01, 02, 001, 010, etc.
- Se permite cualquier número que comience con un dígito en el rango [1-9] y siga de un número en el rango [0-9].
- Si comienza con 1 puede seguir de 2 dígitos en el rango [0-9], es decir, se permiten números como 100, 101, 150, 199, etc.
- Si comienza con 2:
- Si después hay un número en el rango [0-4], enseguida puede haber un número en el rango [0-9], es decir, se permiten números en el rango [200-249].
- Si después hay un 5, sólo se permiten números en el rango [0-6], es decir, los entre [250-255].
Números de un dígito:
Números de dos dígitos:
[0-9]
Números de tres dígitos:
[1-9][0-9]
entonces, la expresion regular para validar un número entero en el rango [0-255] es la union de los tres conjuntos de números anteriores:
1[0-9][0-9]
2([0-4][0-9]|5[0-5])
podemos factorizar la expresion anterior, nótese que:
[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2([0-4][0-9] | 5[0-5])
es lo mismo que:
[0-9] | [1-9][0-9]
? es un operador que indica que puede haber uno o ningún dígito en el rango [1-9]
[1-9]?[0-9]
factorizamos:
para evitar cualquier confusión, separamos cada término usando paréntesis:
[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2([0-4][0-9] | 5[0-5])
[1-9]?[0-9] | 1[0-9][0-9] | 2([0-4][0-9] | 5[0-5])
[1-9]?[0-9] | 1[0-9]{2} | 2([0-4][0-9] | 5[0-5])
ahora bien, en java la siguiente expresión valida expresiones en el rango [.0-.255] (se agrega el punto antes de los dígitos):
([1-9]?[0-9]) | (1[0-9]{2}) | (2([0-4][0-9] | 5[0-5]))
"\\.(([1-9]?[0-9])|(1[0-9]{2})|(2([0-4][0-9]|5[0-5])))"
siguiendo los mismos conceptos, el siguiente método escrito en Java valida si una dirección IP es una dirección privada válida:
/**
* Verifica que la dirección IP es una dirección privada válida.
*
* @param ip Cadena de texto con la dirección que se quiere validar.
* @return true si es una dirección válida, false en otro caso.
*/
private bool verificaHost(String ip)
{
/* patrón para los números de .0 a .255 */
String n = "\\.(([1-9]?[0-9])|(1[0-9]{2})|(2([0-4][0-9]|5[0-5])))";
/* patrón para los números de .16 a .31 */
String m = "\\.((1[6-9])|(2[0-9])|(3[01]))";
/* 192.168.0.0 a 192.168.255.255 */
if(ip.matches("^192\\.168(" + n + "){2}$"))
return true;
/* 10.0.0.0 a 10.255.255.255 */
else if(ip.matches("^10(" + n + "){3}$"))
return true;
/* 172.16.0.0 a 172.31.255.255 */
else if(ip.matches("^172" + m + "(" + n + "){2}$"))
return true;
/* la dirección no coincidió con ninguna de las anteriores */
return false;
}
viernes, 6 de marzo de 2009
Aprendiendo XPath (en construcción)
XPath es un lenguaje que nos permite navegar por la información de los documentos XML, permite acceder a los elementos y a los atributos del documento usando una sintaxis similar a la que utilizamos cuando navegamos por los datos de un sistema de archivos.
XPath se convirtió en una recomendación del W3C el 16 de Noviembre de 1999.
A continuación, redacto-traduzco una introducción al lenguaje:
Documento de ejemplo:
El siguiente texto servirá como base para los ejemplos posteriores:Terminología
Nodos
En XPath hay siete tipos distintos de nodos:
- Elementos
- Atributos
- Texto
- Espacios de nombres (namespaces)
- Instrucciones de procesamiento
- Comentarios
- Elementos raíz del documento
Valores atómicos
Los valores atómicos son nodos sin elementos padres o hijos.Ejemplos:
J K. Rowling
"en"
Relación entre nodos
Padres
En el código de ejemplo, el elemento book es padre de los elementos title, author, year y price.Hijos
En el código de ejemplo, los elementos title, author, year y price son hijos del nodo book.Hermanos
Los elementos title, author, year y price son nodos hermanos porque su elemento padre es el mismo.Ancestros
Los ancestros de un nodo son su elemento padre, el padre de su elemento padre, etc.Descendientes
Los descendientes de un nodo son sus nodos hijos, los hijos de sus nodos hijos, etc.Selección de nodos
Selecciona nodos en un documento sin importar en que parte de encuentren.Expresión | Descripción
|
---|---|
Nombre del nodo | Selecciona todos los nodos hijos del nodo especificado.
|
/ | Selecciona del nodo raíz.
|
// | .
|
. | Selecciona el nodo actual.
|
.. | Selecciona al padre del nodo actual.
|
@ | Selecciona los atributos.
|
Ejemplos
El siguiente código selecciona todos los nodos hijos del elemento book:bookEl siguiente código selecciona al elemento raíz bookstore. Si la expresión comienza con una barra (/), se refiere a una dirección absoluta:
/bookstoreSelecciona todos los elementos hijos llamados book del elemento bookstore.
bookstore/bookSelecciona a todos los elementos llamados book, sin importar en que parte del documento se encuentren:
//bookSelecciona a todos los elementos llamados book que tienen como padre a un elemento llamado bookstore, sin importar en que parte del documento se encuentren:
bookstore//bookSeleeciona todos los atributos llamados lang:
//@lang
Predicados
Los predicados son usados para buscar un nodo específico o para encontrar un nodo que contiene cierto valor. Los predicados se expresan entre corchetes.Ejemplos
Seleccionar nodos desconocidos
Existen algunas expresiones que nos ayudan a seleccionar elementos aunque no conozcamos sus nombres o alguna otra información, éstas expresiones son:Expresión | Descripción |
---|---|
* | Selecciona cualquier elemento de cierto nodo |
@* | Selecciona cualquier atributo de un nodo. |
nodo() | Selecciona cualquier nodo de cierto tipo. |
Ejemplos
Selecciona el primer elemento llamado book que sea hijo del elemento raíz blockstore:
/bookstore/book[1]
Selecciona al último elemento llamado book que es hijo del elemento raí< bookstore:
/bookstore/book[last()]
Selects the last but one book element that is the child of the bookstore element
/bookstore/book[last()-1]
Selects the first two book elements that are children of the bookstore element
/bookstore/book[position()<3]
Selects all the book elements of the bookstore element that have a price element with a value greater than 35.00
/bookstore/book[price>35.00]
Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00
/bookstore/book[price>35.00]/title
Selects all the title elements that have an attribute named lang
//title[@lang]
Selects all the title elements that have an attribute named lang with a value of 'eng'
//title[@lang='eng']