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 }
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
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
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...
sábado, 24 de abril de 2010
Religion vs Dharma vs Cocodrilo
Aunque no lo parezca esto no tiene nada que ver con Lost. Hay unas cuantas de cosas curiosas que me gustaría destacar de la religión, si, esa cosa que la gente sigue fanáticamente sin llegar a conocer a veces el porque.
Nacido en un seno "católico" y también por la escuela que nos enseñaba religión aunque no quisiéramos, aprendí ciertas cosas sobre el cristianismo. Que había un Dios todopoderoso, que un hombre hacia cosas buenas por los demás, que había un libro santo donde se recogía su vida y obra, que existía unos mandamientos, unos pecados, capitales algunos... patatin y patatan...
Cuando comencé a tener uso de razón, decidí que eso no era lo mio, y empecé a indagar sobre otras culturas religiosas como el islam, el budismo, la madre tierra(gaia) e incluso en flujo de energía del final fantasy VII. Todo esto me llevó a darme cuenta de que todas eran exactamente la misma!!! solamente teníamos que cambiar Dios por Ala, Jesús por Mahoma o por Budha, Biblia, Corán, Canon, mandamientos, sendero óctuple, 7 pecados capitales, 5 venenos, etc etc.
En un principio pensé que seria la propia naturaleza del hombre, el miedo, la inseguridad, lo que los ha llevado a creer en este tipo de cosas dado que todas las civilizaciones caen en la misma patraña absurda. Te hace replantearte cierto tipo de cosas, ¿realmente existe una fuerza superior? ¿Que los ha llevado a crear una religión? a escribir un libro, a imponernos unas doctrinas y unas normas según ellos sagradas, ¿A sido la búsqueda de poder? ¿De fama? ¿De dinero? ¿De niños a los que tocar?.
Todo es mucho mas antiguo que esto, si analizamos su origen. Dharma, que proviene del budismo y significa 'religión', 'ley natural', 'orden social', 'conducta adecuada' o 'virtud' es un buen ejemplo de ello. Los primeros escritos referentes a la religiones intentaban inculcar en el populacho inculto y bárbaro de la época, unas normas de comportamiento, educación, empatía, modos de vida saludables y sanidad, de las que antiguamente la gente no tenía conocimiento.
Por ejemplo, el hecho de que los musulmanes no coman cerdo es debido a la triquinosis, enfermedad que en su día mato a bastante gente pero que hoy en día sería impensable. Que en el Coran expliquen detalladamente como lavarnos los bajos. O que los indues no coman vacas por ser un símbolo de que Dios esta en todos los seres vivos (ya podrían haber elegido a otro animal para simbolizar). En fin, cientos de cosas que en su día tuvieron un porque, pero que hoy en día han quedado obsoletas.
Explicaciones... explicaciones "de quita y pon" para incógnitas que nadie sabe resolver, ¿Como hemos llegado aquí?, ¿Que sucede cuando morimos? ¿Y que hay mas allá del universo infinito?, respuestas que ninguno de nosotros tendrá, al menos en esta vida.
¿Y el Cocodrilo?
Lectura recomendada:
Albert Samuel. Para comprender las religiones en nuestro tiempo. Ed. Verbo Divino. Navarra 1991.
jueves, 22 de abril de 2010
Empatizando el mundo
Me pasa de vez en cuando:
(Otra persona): -No me cae nada bien, esta loc@!
Yo: -Pues a mi me cae de puta madre.
(Otra persona): -¿Por que? Si esta mal de la cabeza.
Yo: -Pues porque de gente normal esta el mundo lleno.
A veces tras un breve periodo de silencio y meditación responde:
(Otra persona): - Pues ahora que lo mencionas, tienes toda la razón...