lunes, 19 de octubre de 2009

La gobernadora Ivonne Ortega regala siete camionetas a diputados federales

Digo .. nadie es perfecto, sólo fue algo que sucedió ERRÓNEAMENTE.

... [Leer más ...]

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.


... [Leer más ...]

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.

... [Leer más ...]

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.

... [Leer más ...]

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:

http://ara-san.blogspot.com/

... [Leer más ...]

domingo, 6 de septiembre de 2009

High-Speed Robot Hand

Video muy chingón de unos robotsines

... [Leer más ...]

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:


10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
o bien:

172.16/12
192.168/16
10/8
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:

Números de un dígito:
  • Se permiten números en el rango [0-9].
Número de dos dígitos:
  • 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].
Números de tres dígitos:
  • 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].
El texto de arriba "mapeado" a expresiones regulares puede quedar más o menos así:
Números de un dígito:

[0-9]
Números de dos dígitos:

[1-9][0-9]
Números de tres dígitos:

1[0-9][0-9]
2([0-4][0-9]|5[0-5])
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:

[0-9] | [1-9][0-9] | 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]
es lo mismo que:

[1-9]?[0-9]
? es un operador que indica que puede haber uno o ningún dígito en el rango [1-9]
factorizamos:

[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])
para evitar cualquier confusión, separamos cada término usando paréntesis:

([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])))"

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;
}

... [Leer más ...]

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ónDescripción
Nombre del nodoSelecciona 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:
book
El siguiente código selecciona al elemento raíz bookstore. Si la expresión comienza con una barra (/), se refiere a una dirección absoluta:
/bookstore
Selecciona todos los elementos hijos llamados book del elemento bookstore.
bookstore/book
Selecciona a todos los elementos llamados book, sin importar en que parte del documento se encuentren:
//book
Selecciona 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//book
Seleeciona 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ónDescripció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']

Seleccionar varios nodos

Ejemplos

Ejes

Ejemplos

Operadores

Ejemplos

Referencia principal:

XPath Introduction

... [Leer más ...]