domingo, 28 de noviembre de 2010

La Sociedad Prefabricada


Caminando por un prado, un granjero se encontró un huevo de águila. Lo metió en una bolsa y, una vez en su granja, lo colocó en el nido de una gallina de corral. Así fue como el aguilucho fue incubado y creado junto a una nidada de pollos. Al creer que era uno de ellos el águila se limitó a hacer durante toda su vida lo mismo que hacían todos los demás. Escarbaba en la tierra en busca de gusanos e insectos, piando cacareando. Incluso sacudía las alas y volaba unos metros por el aire, imitando así el vuelo del resto de gallina.

Los años fueron pasando y el águila se convirtió en un pájaro fuerte y vigoroso. Y un buen día divisó una magnifica ave que planeaba majestuosamente por el cielo. El águila no podía dejar de mirar hacia arriba, asombrada de cómo aquel pájaro surcaba las corrientes de aire moviendo sus poderosas alas. "¿Que es eso?", le preguntó maravillada a una gallina que estaba a su lado.

"Es el águila, el rey de todas las aves", respondió cabizbaja su compañera. "Es todo lo contrario de lo que somos. Tú y yo hemos nacido para mantener la cabeza agachada y mirar hacia el suelo". Y así fue como el águila nunca más volvió a mirar hacia el cielo. Tal como le habían dicho, murió creyendo que era una simple gallina de corral.

Vivimos en una sociedad prefabricada, y las escuelas y medios no son mas que una parte de la maquinaria de esta gran cadena de montaje.

domingo, 14 de noviembre de 2010

Cambiando el orden natural de las cosas (Powered by Java)

Diferencia entre Comparable y Comparator

La diferencia principal entre Comparable y Comparator es que Comparable es utilizado para implementar el orden natural, sin necesidad de especificar un Comparator, por ejemplo, los String son comparados alfabéticamente. Usamos Comparator cuando queramos crear otro tipo de orden que no sea el natural.

El contrato que implica implementar Comparable requiere de un parámetro extra, el objeto con el que comparar compareTo(obj1) de forma que la comparación se realizará del objeto en si (this) con el objeto pasado como parámetro. Comparator, sin embargo obliga a implementar el método compare (obj1, obj2) de forma que los dos objetos a comparar son pasado como parámetro y el objeto que implementa el método compare simplemente sirve de apoyo a la comparación.
Sobreescritura de los métodos compareTo y compare

La forma de sobreescribir estos métodos es muy similar al equals. Los dos métodos cumplen las mismas restricciones que podemos objtener del API de Java:

* Devolvemos un número negativo si el objeto es menor, devolvemos un cero si es igual y un número positivo si el objeto es mayor.
* Comparamos el objeto con otro objeto del mismo tipo. Si no son del mismo tipo, lanzamos un ClassCastException.

La notación sgn(expresion) es la función matemática signum, la cual devuelve -1,0, o 1 según sea negativo, zero o positivo

* Debemos asegurar que:

sgn(compare(x,y)) == -sgn(compare(x,y)), para todo x, y.

Esto implica que compare(x,y)) lanzará una excepción sii compare(x,y) también la lanza.

* Debemos asegurar que la relación es transitiva:

compare(x,y) > 0 && compare(y,z) > 0 implica que compare(x,z) > 0

* Debemos asegurar que:

compare(x,y) == 0 implica que

sgn(compare(x,z)) == sgn(compare(y,z)), para todo z.

* Se recomienda, aunque no es estrictamente neceario, nos puede evitar poblemas al usar colecciones que implementen esta interfaz.

(compare(x,y) == 0) == (x.equals(y))

* El orden natural para una clase “c” tiene que ser consistente con el equals si y solo sí:

compare(e1,e2) == 0 tiene que ser el mismo resultado que

para e1.equals(e2) para cada e1 y e2 de la clase “c”.
Uso de Comparable y Comparator

Podemos usarlos en listas y arrays mediante los métodos Collections.sort y Arrays.sort.También como claves en un mapa ordenado TreeMap o como elementos en un set ordenado TreeSet.

En el caso de Comparable los objetos tienen que implementar esta interfaz para que los ordene automáticamente. Para el caso del Comparator debemos especificar el Comparator.
Ejemplos

01 //Ejemplo Comparable
02 public class Person implements Comparable {
03 private String firstName;
04 private String lastName;
05
06 public Person(String firstName, String lastName) {
07 if (firstName == null || lastName == null)
08 throw new NullPointerException();
09 this.firstName = firstName;
10 this.lastName = lastName;
11 }
12
13 @Override
14 public String toString() {
15 return String.format("%s, %s", firstName, lastName);
16 }
17
18 @Override
19 public int compareTo(Person p) {
20 int lastCmp = firstName.compareTo(p.firstName);
21 return (lastCmp != 0 ? lastCmp : lastName.compareTo(p.lastName));
22 }
23
24 public static void main(String[] args) {
25 Set p = new TreeSet();
26 p.add(new Person("Ana", "Rodes"));
27 p.add(new Person("Hector", "Lopez"));
28 p.add(new Person("Ana", "Buigues"));
29 p.add(new Person("Carlitos", "Perez"));
30
31 for (Person person : p)
32 System.out.println(person);
33 }
34 }

La salida será:

01 //Ejemplo Comparator
02 public class LengthComparator implements Comparator {
03 @Override
04 public int compare(Person t1, Person t2) {
05 if (t1.toString().length() > t2.toString().length())
06 return 1;
07 else if (t1.toString().length() < t2.toString().length())
08 return -1;
09 else
10 return 0;
11 }
12
13 public static void main(String[] args) {
14 List p = new ArrayList();
15 p.add(new Person("Ana", "Rodes"));
16 p.add(new Person("Hector", "Lopez"));
17 p.add(new Person("Ana", "Buigues"));
18 p.add(new Person("Carlitos", "Perez"));
19 Collections.sort(p, new LengthComparator());
20
21 for (Person person : p)
22 System.out.println(person);
23 }
24 }

viernes, 12 de noviembre de 2010

Teoremas bajo una farola


Hoy en día, en estos tiempos oscuros y que cambia tan rápidamente, el concepto gay, lesbiana o bi han quedado obsoletos. Ya no podemos decir este, o aquel, se ha cambiado de acera porque si lo pensamos bien realmente. ¿En que acera estaba? ¿ha cruzado del todo? ¿o lo ha cogido un coche?

Sabemos que hay personas hetero 100% u homo 100%, pero entre ambos hay infinidad de posibilidades, amanerados heteros, bisexuales pero que para una pareja estable prefieren mujeres, bujarras totales pero que también buscan mujeres, gays amanerados, gays sin amanerar, etc etc etc y lo mismo aplicable a las mujeres.

Por lo tanto, y como la búsqueda tantos nombres que califiquen tales estados sería una tarea ardua y tediosa. Propongo la teoría de "Las Múltiples Aceras Paralelas" y/o "Teorema de la Calle Peatonal", que consiste ni mas ni menos en que todo ser vivo nace con un porcentaje de heterosexualidad u homosexualidad. Yo puedo ser por ejemplo 85% hetero 15% homo, aquel puede ser 37% hetero 63% homo o incluso un 100% hetero macho iberico español de toda la vida. Estaríamos hablando de una gráfica que toma valores continuos o analógicos y no digitales 0 ó 1, como creíamos anteriormente...

sábado, 6 de noviembre de 2010

Solo animales


A ver, no se trata de maltratar o no a los animales. Pero si es verdad que en el intento de muchas personas de proteger a sus mascotas o cierto tipo de especie animal a la que sin un motivo razonable consideran indefensa, muchas veces caemos en el error de equiparar los derechos de los animales, con los derechos humanos. No es lo mismo el estado de indefensión de un animal que el de un niño pequeño o una persona minusválida. Dejemos de malgastar recursos.

De toda la vida los animales se han usado para la caza, alimento, vestido, nunca ha existido una relación de reciprocidad que obligue a protegerlos o darles un trato especial. En la naturaleza se vive con la vida y la muerte, y seguro que ninguno de ellos se ha planteado nunca "que es la muerte", "porque sufro" o "que voy a hacer con mi vida". Realmente la muerte tiene la importancia que queramos darle nosotros como seres humanos que razonan, ellos ni se lo plantean. Es mucho mayor la sensación de sufrimiento que percibimos que el sufrimiento real.

Y usando el tema de los toros que está tan de moda, os lanzo esta pregunta: ¿Que preferiríais ser, un cerdo que vive en una jaula de 2x1 durante 4 años cebandolo en espera una muerte rápida, o un toro bravo suelto por una pradera, comiendo bien durante 4 años, apareandose y morir en la plaza peleando con el torero?


Si nos ponemos triquismiquis tampoco podríamos experimentar con vacunas y medicamentos en monos, ovejas, etc, vestirnos con pieles o simplemente comer carne, porque tener a un animal en condiciones tan infrahumanas es una crueldad... ay! perdon ¿he dicho infrahumanas? es cierto, que no son humanos, solo animales...