domingo, 21 de diciembre de 2008

La historia del loco


Argumento:

Francis Petrel (Pajarillo) recuerda lo sucedido veinte años atrás, cuando estaba internado en el Western State Hospital porque escuchaba voces en su cabeza.

Este libro es bueno, no sé si compararlo con el Psicoanalísta, porque creo que perdería. Pero no lo hago porque creo que son algo diferentes. Este es más lento, se basa en mostrar mucho de los personajes principales: sus miedos, sus ideales y sus tragedias, por ello deja a un lado el suspenso y la trama, que tan bien se logra en el otro libro.
Lo recomiendo como una lectura entretenida e interesante sin llegar a ser un gran libro pero tampoco sin ser demasiado simplón como un libro de Dan Brown.

P.D. Creo que los libros de Katzenbach se podrían adaptar fácilmente a una película, investigaré si existen planes al respecto.

viernes, 12 de diciembre de 2008

Así son las mujeres...

Escuché esta cadena en el radio y rápidamente la busqué para darla a conocer, ya que la verdad es genial.

Conversación entre marido y mujer:

Esposa: A dónde vas?
Marido: Salgo un rato

Esposa: Te vas con el auto?
Marido: Sip

Esposa: Tienes gasolina?
Marido: Sí, ya le puse.

Esposa: Vas a tardar mucho?
Marido: No, una horita nomás

Esposa: A dónde vas?
Marido: No sé… por ahí… a dar una vuelta

Esposa: Y no prefieres ir caminando?
Marido: No, voy en el auto

Esposa: Me traes un helado?
Marido: De qué lo quieress?
Esposa: De mango
Marido: Listo, a la vuelta paso por la heladería y te lo traigo

Esposa: A la vuelta?
Marido: sí… si no se derrite
Esposa: Por qué no vas ahora, vuelves y me lo traes?
Marido: Mejor a la vuelta, va a ser mejor
Esposa: Mmmmmtá…

Marido: Cuando vuelva tomamos el helado juntos.
Esposa: Pero no te gusta el de mango
Marido: Me compro otro
Esposa: Trae de vainilla!
Marido: Tampoco me gusta el de vainilla
Esposa: Trae de chocolate entonces, que nos gusta a los dos
Marido: OK. Besos, vuelvo en un rato

Esposa: Amor…
Marido: Qué?
Esposa: Mejor chocolate no… ¡trae de fresa!
Marido: No me gusta la fresa!
Esposa: Entonces traeme mango a mi y tu lo que quieras
Marido: Fue lo que dije al principio…
Esposa: Estás siendo irónico?
Marido: Nop… me voy…

Esposa: Dame un beso!
Marido: Bueno… (beso)

Esposa: Vas con tu auto o con el mío?
Marido: Con el mío

Esposa: Usa el mío, tiene CD. El tuyo no…
Marido: No voy a oir musica, voy a despejarme un poco…

Esposa: Necesitas despejarte?
Marido: No sé, cuando salga te digo.

Esposa: No tardes!
Marido: No tardo… (abre la puerta)

Esposa: mi vida…
Marido: Y ahora qué.?

Esposa: Mhhta que carácter! Qué grosero! Ya vete...
Marido: Amor… estoy intentando irme y no me dejas.

Esposa: Por qué quieres ir solo? Te vas a encontrar con alguien?
Marido: Que insinúas?
Esposa: Nada… olvidalo…

Marido: Ven acá (cariñoso)… Crees que te estoy engañando con alguien?
Esposa: No… claro que no… pero tu viste cómo son…
Marido: Cómo son qué?
Esposa: Los hombres!
Marido: Estás generalizando o estás hablando de mí?
Esposa: Estoy generalizando
Marido: Entonces no se aplica a mí. Sabes que no te haría algo así.
Esposa: Está bien… vete entonces.
Marido: Ya me voy.

Esposa: Mi amor…
Marido: Ay por Dios! Ahora qué?!
Esposa: Llevate el celular !
Marido: Para qué? Para que me estés llamando constantemente?
Esposa: No. Pero por si pasa algo.
Marido: No te preocupes…

Esposa: OK… Perdoname por la desconfianza. Es que te extraño!
Marido: Está bien. No quise contestarte asi. Te amo.
Esposa: Yo también!

Esposa: Puedo usar tu celular?
Marido: Para qué?
Esposa: Los jueguitos!
Marido: Quieres mi celular para jugar?
Esposa: Sip
Marido: Usá la computadora, hay un montón de juegos ahí.
Esposa: No entiendo ese aparato…
Marido: Y para qué me hiciste que te la comprara el mes pasado?
Esposa: No importa… entonces llevate el celular porque si no, lo voy a usar.
Marido: Usálo… no hay nada importante en él.
Esposa: Sí?
Marido: Sí.
Esposa: Dónde está?
Marido: Qué cosa?
Esposa: ¡Lo que debería estar en el celular y no está!
Marido: Qué?
Esposa: Nada! Olvidalo!

Marido: Estás nerviosa?
Esposa: No, no estoy.
Marido: Entonces ya me voy!

Esposa: Cielo!
Marido: QuééééÉÉÉÉ!!??
Esposa: No quiero más el helado!
Marido: Ah no?
Esposa: No!
Marido: ¡Entonces ya no voy a salir!
Esposa: ¿Ah no?
Marido: No!
Esposa: Entonces te quedas conmigo?
Marido: No, me aburriste. ¡Me voy a dormir!
Esposa: Estás nervioso?
Marido: SÍ!

Esposa: Y por qué mejor no te vas a dar una vueltecita para despejarte?

lunes, 8 de diciembre de 2008

Entre manzanitas

Como introducción al video realmente divertido veamos este famoso comercial de 1984, que fue transmitido en medio del SuperBowl de ese año.

Se considera como unos de los mejores comerciales de los tiempos por su diseño y por lo que significó para Apple.



Ahora veamos esta sátira que hacen los Simpsons a la fiebre de que todo debe de tener una manzanita




Muy divertido. Lo más raro de todo es que es verdad lo que dicen los Simpsons :s

sábado, 29 de noviembre de 2008

jueves, 27 de noviembre de 2008

Barack Obama sabe de computación

Resulta que el presidente electo de los EU, supo responder muy bien una pregunta de computación.
Si no me creen vean el video.



Su respuesta es muy buena, incluso es mejor de la que responderían muchos maestros y estudiantes de computación :P

viernes, 21 de noviembre de 2008

El número i


Una pequeña historia del famoso (al menos para mí) número i:
Como ya se sabe, existen algunas ecuaciones de segundo grado que no tienen ninguna solución real. Tal es el caso de la ecuación x2 + 1 = 0.

Para esto se introdujeron los números imaginarios. Un número imaginario es un número cuyo cuadrado es negativo ( i2 = − 1). El término fue acuñado por René Descartes en el siglo XVII

Al número imaginario i se le denomina también constante imaginaria.

Los número imgarinarios extienden el conjunto de los números reales \R al conjunto de los números complejos \mathbb{C}.

Gottfried Leibniz, en el siglo XVII, decía que \sqrt{-1} (es decir, i) es una especie de anfibio entre el ser y la nada.

jueves, 20 de noviembre de 2008

Algunas de las mejores investigaciones que han ganado un Ig Nobel

2008

Biology: Marie-Christine Cadiergues, Christel Joubert, and Michel Franc, for discovering that fleas that live on dogs jump higher than fleas that live on cats
Economics: Geoffrey Miller, Joshua Tyber, and Brent Jordan, for discovering that exotic dancers earn more when at peak fertility
Peace: The Swiss Federal Ethics Committee on Non-Human Biotechnology and the citizens of Switzerland, for adopting the legal principle that plants have dignity.

2007

Peace: The Air Force Wright Laboratory in Dayton, Ohio, for suggesting the research and development of a "gay bomb," which would cause enemy troops to become sexually attracted to each other.
Aviation: Patricia V. Agostino, Santiago A. Plano and Diego A. Golombek, for discovering that hamsters recover from jetlag more quickly when given Viagra.

2006

Ornithology: Ivan R. Schwab, of the University of California Davis, and Philip R.A. May of the University of California Los Angeles, for exploring and explaining why woodpeckers don't get headaches.
Peace
: Howard Stapleton of Merthyr Tydfil, Wales, for inventing an electromechanical teenager repellant -- a device that makes annoying high-pitched noise designed to be audible to teenagers but not to adults; and for later using that same technology to make telephone ringtones that are audible to teenagers but probably not to their teachers.
Physics: Basile Audoly and Sebastien Neukirch of the Université Pierre et Marie Curie,for their analysis that explains why spaghetti breaks into several pieces when it is bent
Mathematics: Nic Svenson and Piers Barnes of the Australian Commonwealth Scientific and Industrial Research Organization, for calculating the number of photographs that must be taken to (almost) ensure that nobody in a group photo will have their eyes closed.
Literature: Daniel M. Oppenheimer of Princeton University for his report "Consequences of Erudite Vernacular Utilized Irrespective of Necessity: Problems with Using Long Words Needlessly"

jueves, 13 de noviembre de 2008

Cómo dar una buena presentación (al estilo Steve Jobs)



Este video, nos muestra varios consejos que puedes aplicar para dar una presentación de lujo, siguiendo algunas técnicas que usa el CEO de Apple Steve Jobs, podemos resaltar:
  1. Establecer el tema. Que sea claro y consistente.
  2. Establece el guión (outline). Divide cada una de las secciones de forma clara y precisa para que el auditorio lo entienda.
  3. Apasionate con lo que vas a presentar.
  4. No vendas productos, números o estadísticas. Vende una experiencia.
  5. Recuerda que lo visual es mejor. No escribas enormes cantidades de texto. Tampoco llenes de imágenes.
  6. Crea un momento memorable de tu presentación.
  7. Practica, practica y practica.
  8. "Y por último" ... Da un bonus a tu audiencia. Antes de terminar puedes hacer algo extra para tus oyentes.

sábado, 1 de noviembre de 2008

¿Quién es la Catrina?


Precisamente hoy dia y mañana que son los "días de muertos" se ponen de moda las calaveras y en especial hay una que llamamos Catrina.

Esta calavera que pareciera una señora muy bien arreglada es precisamente una representación metafórica de la clase social alta de México antes de la revolución mexicana.

El nombre de Catrina, proviene de la palabra ‘catrín’, sinónimo de elegante, distinguido, bien vestido, fino, sofisticado y otros adjetivos con que el pueblo denominaba a las clases privilegiadas de esa época.

Las calaveras que engloban la poesía popular y el grabado fueron iniciadas por Manuel Manilla y continuadas por José Guadalupe Posada.


Y por cierto en Tultepec, Estado de México se hizo la Catrina más grande del mundo.

miércoles, 29 de octubre de 2008

¿Cómo serían los Simpsons en la India?

Encontré un video que me pareció divertido y curioso de como serían los Simpsons del otro lado del mundo.



Interesante ¿no?

lunes, 27 de octubre de 2008

Steve Jobs: Pixar y Apple

Seguro que todos han escuchado de Apple, o han visto la famosa lamparita de Pixar, sin embargo tal vez no conozcan al creador de estas dos compañías y más importante no conozcan su historia.

Aquí están dos videos de un discurso (muy bueno) que dio en Stanford.

La primera parte


La segunda parte

viernes, 24 de octubre de 2008

Mis (Buenos, malos, chafas, estúpidos, aburridos, interesantes...) Profesores

Mi papá me dijo desde hace tiempo que había escuchado de una página donde podías calificar a los maestros de la universidad y hoy en un momento de descanso entre a la página misprofesores.com.

En especial a la BUAP y vi con tristeza que sólo hay dos profesores de mi carrera, además que tienen muy pocas calificaciones, así que espero que los votos aumenten ya que es interesante saber estadísticas sobre lo que pensamos los alumnos de nuestros profes.

jueves, 23 de octubre de 2008

Y el CANACA sigue sigue...

Sin más preambulos (ya que los personajes mostrados son bastante famosos)... vean el trailer de YouTube Wars versión mexicana.

miércoles, 22 de octubre de 2008

El futuro de Netbeans y Java

Es hora de ponerse psíquico y pensar que será de este IDE.


Yo creo que tendrá que ver mucho con cómo se desarrolle Java, por ello mis predicciones sobre: Java, Netbeans y la programación son:
  1. Sabemos que Java es un lenguaje que tuvo (y tiene todavia) un gran boom.
  2. Pero ahora las aplicaciones ya no son centrizadas sino web.
  3. En web ya no hay que crear código desde cero, existen decenas de frameworks que hacen gran parte del trabajo "pesado".
  4. Las bases de datos seguirán usandose mucho, pero será mas fácil la interacción y más transparente al programador.
  5. El paradigma de Modelo-Vista-Controlador será muy usado, tanto como lo son los objetos ahora.
  6. Los closure serán tan comunes en la programación como ahora lo es la recursión.
Por todo ello, creo que Netbeans va a tener que:
  • Soportar más frameworks de forma más sencilla
  • Soportar plugins como Hibernate es decir ORMs
  • Tener un mejor soporte para crear GUIs en Web
  • Soporte para el MVC
Por supuesto se resolverán los problemas de la tardaaaadaaa incialización, y algunos bugs que aparecen de vez en cuando XD.

Generador Automático de Exámenes con soporte para LaTeX


Este proyecto lo realicé como servicio social en mi universidad. Actualmente sigo agregandole funcionalidades.

La idea es simple: hacer un banco de preguntas, meterlas al generador y el se encarga de seleccionar al azar algunas y crear los examenes y la solución.


Sus características principales son :
  • tiene soporte para LaTeX, por lo que las expresiones matemáticas tienen una calidad tipográfica.
  • tiene salida para Moodle. Cuando se genera un examen se hace un archivo GIFT que reconoce Moodle el cual puede ser usado en línea.
  • Es multiplataforma, debido a que usa Java y pdflatex para generar el examen así que no hay problemas con el sistema operativo.
  • Además tiene conexión con Base de Datos (por ahora MySQL).
  • La salida del documento es un PDF y un .tex que puede ser reeditado.
Todo el proyecto fue desarrollado en Netbeans inició con el 5.x, paso por 6.0 y ahora uso el 6.1.

Padre de Familia, Nazis y McCain

Antes fueron los Simpsons quienes mostraron su apoyo a Barack Obama. Esta vez es la serie de televisión Padre de Familia (Family Guy), quien muestra su rechazo a McCain.

En uno de los últimos capítulos se muestra como Brian (el perro) y Stewie (el niño) viajan en el tiempo a Berlín, les roban sus uniformes a unos oficiales nazis y es entonces cuando Stewie se encuentra con algo "muy extraño" en el uniforme...



martes, 21 de octubre de 2008

Eliminar problema con Substance y Swing

Si has tenido dolores de cabeza con esta excepción:

org.jvnet.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread

gracias a esta página puedes resolverlo.

Pero más aún, si estas usando el Framework de Swing lo que puedes hacer es algo parecido a esto. Sólo debes de cambiar el método startup de tu clase que extienda de SingleFrameApplication para agregar unas líneas.

El problema principal se debe a que cuando se muestre la ventana lo debes de hacer dentro del invokeLater, y eso lo logramos ponienod el método show() dentro del run().


Y listo, no mas excepciones!

domingo, 19 de octubre de 2008

(Ensayo sobre la) Ceguera



La semana pasada salió en México la película: Ceguera, basado en el libro Ensayo sobre la ceguera del Nobel de literatura José Saramago.

Interesante es que haya sido dirigida por Fernando Meirelles, quién es famoso por ser el director de la película más cruda (lo cual no quita que sea buena) que haya visto hasta ahora: "Ciudad de dios".

Espero poder ver pronto esta película ya que el libro para mí es el mejor de Saramago y a mí me pareció excelente. Por ahora los dejo con el trailer.

viernes, 17 de octubre de 2008

Matando al Mar Muerto


Resulta que, un comericiante de Israel le pidió a su gobiero que cambie el nombre de este famoso Mar. Lo que pasa es que este hombre es productor de cremas y sales y la palabra Muerto no le da muy buena publicidad.

Ya se realizaron varias encuestas y aun no ha convencido a la mayoría de las personas (
42% de los israelíes lo acepta).

Yo dudo que ésto se realice y el señor de los cosméticos también pues, asegura que:
"Es casi como cambiar de nombre a Jerusalén"

lunes, 13 de octubre de 2008

Quiero tener entre 6 y 15 años


Google lanzó un concurso para que los niños entre 6 y 15 años realicen su Doodle, o sea, su dibujo del logo de Google relacionado con "El México que quiero". Ojalá participen muchos niños, hay premios y aparte sirve para donar alimentos.

domingo, 12 de octubre de 2008

Música de Québec


Ya tiene tiempo que escuché este disco (Putumayo World Music: Québec) y la verdad me parece muy bueno. Tiene ritmos diferentes, desde pop, funk y algo de reggae hasta influencias francesas. A mi parecer las mejores canciones son :
1 Mathieu Mathieu Cette Ville
2 DobaCaracol Étrange
4 Annie Villeneuve Un Homme
5 Chloé Sainte-Marie Brûlots
6 Florent Vollant Nitshiuenan
8 Myreille Bédard Il Fait Dimanche
9 Polémil Bazar Les Viscères

Si quieren escuchar un poco de la música québecoise este es un buen disco. Si quieren algo mas pop esta Marie Mai.

viernes, 10 de octubre de 2008

El Co$to de la vida



Una canción que aún cuando fue escrita hace mas de 10 años es tan actual que asusta.

Juan Luis Guerra siempre con canciones geniales (y que buen ritmo ¿apoco no?)

martes, 7 de octubre de 2008

Los secretos del CANACA

Después del desafortunado suceso de la muerte de "el CANACA" resulta que como todo gran artista, aun cuando ya murió sus seguidores siguen pensando en él y le rinden tributo.

Para muestra, el siguiente video:

jueves, 2 de octubre de 2008

Los Simpsons apoyan a Obama

El próximo 2 de noviembre saldrá al aire el capitulo donde se ve que Homero ejercerá su derecho al voto y lo hará por el candidato Barack Obama.




Quién iba a pensarlo, Homero no es tan tonto...

miércoles, 1 de octubre de 2008

Un gran castillo de arena y una estupida reportera

Pues vean, lo que hizo esta señorita española, quién ya quedó inmortalizada en este video con su idiotez.


lunes, 29 de septiembre de 2008

La quebecoise Marie mai



Marie Mai, es una cantante nacida en un pueblito llamado Varennes, muy cerca de la isla de Montréal. Por esos lugares es muy muy conocida, ya que surgió de un concurso estilo American Idol (o la Academia, Operación Triufo) pero versión candiense.



Tiene 2 albums y su estilo es variado tiene pop-rock y baladas que, aunque comerciales, sus letras tocan temas interesantes y no tan choteados.

(Por cierto, escuchen el marcado acento quebecoise del presentador y de ella, es una maravilla...)

sábado, 27 de septiembre de 2008

¿Cuántos lenguajes de programación conoces?

Name That Code


ASP, C, C++, Cobol, Fortran, Java, Lisp, Shell, Perl, PHP, Python, SQL, Ruby... son sólo algunos ejemplos de lenguajes. Realiza el test y prueba que tanto conoces o desconoces del mundo de la programación.

miércoles, 24 de septiembre de 2008

Windows corriendo con 40Mb de RAM

Sí, aunque parecía imposible que exista un Windows que no sature la memoria, aquí hay un video donde se habla un poco acerca de MinWin, es algo así como el núcleo (kernel) de Windows y dice que funciona con 40M de RAM, 25M de Disco duro y tiene aproximadamente 100 archivos.



Este pequeño nucleo formará parte del nuevo Windows 7 el cual esta en desarrollo en este momento.
Esto plantea muchas buenas consideraciones en el diseño de un sistema operativo y sobre todo del tamaño de lo que es Windows. Ojalá que el próximo Windows sea mejor que la basura de Vista.

martes, 23 de septiembre de 2008

Hibernate con Netbeans 6.1

Este es un pequeño tutorial para usar Hibernate con Netbeans.

Lo primero que tenemos que hacer es bajar Hibernate 3 y SLF4J de sus páginas. Después tenemos que crear una carpeta y juntar los siguientes jars que son necesarios para que todo funcione correctamente. Dentro de Netbeans damos click derecho en el proyecto y nos vamos a las opciones y agregamos las bibliotecas siguientes (todas, sino puede haber problemas):


También podemos bajar un plugin especial para Netbeans, esto no es obligatorio y de hecho todavía esta en versión beta pero puede servir un poco.


Después necesitamos los archivos de configuración de Hibernate y de log4j. Para Hibernate tenemos a hibernate.cfg.xml y los archivos de mapeos que terminan con extensión hbm.xml

Aquí esta un ejemplo del archivo hibernate.cfg.xml el cual tiene que estar en la raiz de tu proyecto para que lo encuentre. Contiene las opciones de configuración (en recuadro rojo se marcan las más importantes)
Finalmente están los archivos de mapeo, cada clase va a corresponder con una tabla de nuestra base de datos. En estos archivos se especifica el nombre de las columnas(para la tabla) y atributos (para la clase)
Después de todo esto podemos empezar a programar y listo.

Aquí hay otro tutorial bastante bueno en inglés.

Y uno en español para casos más avanzados.

domingo, 21 de septiembre de 2008

Usando el Google Web Toolkit (GWT)


El GWT es un framework que desarrolló Google para evitar el complicado trabajo de usar AJAX puro.
Podemos verlo como un traductor, ya que uno como programador generará código en el lenguaje Java y el GWT lo pasará a HTML y Javascript, con esto se oculta complejidad y se realizan páginas de forma más sencilla.
Es un framework relativamente nuevo, pero que con el apoyo de Google seguramente será muy usado.
Yo lo estoy usando por primera vez con el IDE Netbeans y por ahora todo marcha bastante bien, sólo hay que descargar el GWT. Luego en Netbeans existe un Plugin especial, también lo descargamos e instalamos. Después podemos crear un nuevo Proyecto Web y en los pasos para la creación Netbeans nos pedirá los frameworks con los que queremos trabajar, seleccionamos GWT y listo, tenemos nuestra primera aplicación bastante sencilla de Hello GWT!

Aquí hay cierta documentación en español, y aquí unos ejemplos.

jueves, 18 de septiembre de 2008

Sobreviviendo en la luna

38%

Seguramente has pensado en que vas a la Luna y tu nave choca y tienes que llegar llegar a la estación especial por ti mismo, en este caso, ¿qué cosas llevarías? y ¿qué no?

Si tienes una mente taan retorcida como para pensar en cosas así, o simplemente eres muy curioso o no tienes otra cosa mejor que hacer, aquí está un test que se trata de ver cuales serían tus prioridades y compararlas con las de la NASA.

Yo pensé que tendría mejor calificación :(

miércoles, 17 de septiembre de 2008

Todos contra ... ¿México?

Hace unos días sucedió el primer acto terrorista en el México moderno, aquí esta un video por si no lo han visto,



pero lo que más me ha llamado la atención es que critiquen ciertas palabras que dijo el presidente Calderon acerca del suceso:
"En nombre de la República demando en esta hora crítica la unidad".
"En este día que es de fiesta nacional hay sin embargo cobardes escondidos en al multitud de los festejos patrios que han convertido el gozo en tristeza y la alegría de las familias mexicanas en luto"
eso fue lo que dijo el presidente, y ahora leo que en la columna Astillero se dice lo siguiente
... con esa oportuna generación de ansiedad y desasosiego colectivos, empujan a la sociedad desvalida a buscar soluciones desesperadas y a asumir un discurso mediáticamente impuesto que convoca a la unidad nacional y al abatimiento de las naturales y largamente cultivadas diferencias políticas e ideológicas, para entonces así, de manera mágica y sin crítica que pueda ser “patrióticamente” válida, luchar todos los mexicanos por supuestos intereses superiores, sin recordar ni ahondar en las causas de las catástrofes y mucho menos atreverse a señalar a los culpables y exigir correcciones o castigos ...
pero después termina con...

“La Patria exige unidad en los mexicanos. Se puede discrepar pero no deliberadamente dividir y enconar. Se puede opinar distinto en la libertad que nos han heredado nuestros próceres, en el marco de libertad que el propio Estado garantiza, pero no se puede atentar contra el Estado mismo. Por eso, en nombre de la República demando a todos los mexicanos, sin excepción, en esta hora crítica, la unidad que México necesita”.

¡¿entonces?!

Qué triste que se pongan a críticar más al presidente que a las terribles acciones terroristas. Ni modo...

viernes, 12 de septiembre de 2008

Un iPhone3G bien licuado

No entiendo que se puede ganar con licuar un iPhone, pero es muy interesante el video de este señor que le de mucho uso a su poderosa licuadora.



El que sigue por lo menos hace una explosión, je.

miércoles, 10 de septiembre de 2008

Ruby sabe plurales (sólo algunos)

(Ruby) éste genial lenguaje de programación sabe "pluralizar" por ejemplo
sabe que el plural de Person es people
sabe que el plural de Sheep es sheep (no creo que sea una palabra muy usada en la programación o en los sistemas, pero Ruby lo sabe) sin embargo Ruby
no sabe que el plural de foot es feet.
Entonces podemos darle una pequeña ayudadita, hay un archivo inflections.rb que contiene estos pequeños detalles, en general esta comentado (con #) pero podemos hacer que quede así

ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'foot', 'feet'
end


guardamos, luego podemos crear un modelo llamado Foot, hacer más cosas y Ruby generará las vistas Feet y el feet_controller.rb

domingo, 7 de septiembre de 2008

Curiosidades Microsoft (divertido)

Primero el más sencillo, un teclado especial para el SO Windows


Pero no se preocupen, también existe el muy útil teclado...


Y por supuesto, las opciones que hacen que este sistema operativo se comporte como debe.


Jajaja, genial.

sábado, 6 de septiembre de 2008

Ruby, la joya de la Web


Ruby es un "nuevo" lenguaje de programación que viene con todo. Además tiene un framework que lo acompaña llamado Rails, juntos hacen a Ruby on Rails una gran plataforma de desarrollo que tiene un nuevo modelo de programación basado en lo que se conoce como MVC Modelo-Vista-Controlador.

Tiene una comunicación directa y muy sencilla con las bases de datos.
Además de que tiene características de programación funcional como los closures, que están muy de moda.
Parece que Java tiene un serio (muy serio) competidor.

Por último les dejo con una pequeña historia que revela porque Ruby puede ser algo grande en el futuro(no tan lejano).

Había una vez, tres pequeños programadores que debian de realizar un código para la www que diera acceso a la base de datos de la compañía.

  • El primer programador estaba con mucha prisa, asi que escribió el código lo más rápido que pudo.
  • El segundo programador tenía tiempo asi que uso su metodología de ingeniería de software, realizó su análisis, diseño, creó el código, probó el programa y lo depuró.
  • El tercer programador fue meticuloso y uso un framework bastante conocido y con mucho peso en la industria como Enterprise JavaBeans, realizó un código cubriendo cualquier detalle.
Luego llegó el lobo (un cliente que era quién pagaba por el software) para accesar al sitio web.
  • Primero visitó el sitio del tercer programador, el problema fue que nunca podo acceder al sitio ya que tenia una leyenda que decia "sitio en construcción, apenas voy a la mitad del trabajo". El lobo sopló y el sitio cayó.
  • El lobo visitó el segundo sitio, el cual ya estaba terminado, pero ciertos aspectos no cubrían las necesidades deseadas. El proyecto cambió con el tiempo pero la metodología de Ing de software no pudo tolerar el cambio hasta el final cuando todo el trabajo había sido realizado. El programador prometió una versión 2.0 con todos los cambios pero el lobo se desesperó el sitio cayó.
  • Finalmente el lobo llegó al primer sitio, el progrmador usó Ruby on Rails, de hecho realizó el sitio en 2 días, además pudo realizar cambios sin mucho problema. El sitio era fácil de usar, inteligente y sencillo.

Y todos fueron felices...


martes, 2 de septiembre de 2008

Lo que nos depara el futuro

*Vaya forma de acabar con el rito presidencialista y vaya manera de entrar al tercer año de gobierno. Son datos duros: marchas en el DF y entidades del país para protestar por todo (desde la política económica y social, hasta la mitológica privatización de Pemex); una encuesta del Banco de México que evidencia el pesimismo por la situación económica; reclamos por la inseguridad; el relato de un secuestro y el pago del rescate en el momento de la marcha “Iluminemos México”, y el hombro izquierdo lesionado. Con ese lastre, el presidente Calderón comienza otro año…
Vaya que no pinta muy bien el panorama...

*Tomado de Bajo Reserva.

domingo, 31 de agosto de 2008

WALL∙E y los deportes...

El básquetbol



El Baseball



Futbol síííi



Con el hula hula

viernes, 29 de agosto de 2008

WALL∙E conoce a....

Algunas aventuras del pequeño robot.

WALL∙E conoce a una aspiradora...



WALL∙E conoce a un imán...



WALL∙E conoce a un hidrante...

martes, 26 de agosto de 2008

SÍ NO PUEDEN ¡RENUNCIEN!

Vale la pena escucharlo y recordarlo siempre...


sábado, 23 de agosto de 2008

jueves, 21 de agosto de 2008

Misterios de la historia(y de las olimpiadas)

¿Qué tienen en común Michael Phelps, 8 medallas de oro, Hitler, y las olimpiadas de Munich 72?
...
...
...
Escuchemos a este conductor de la televisión venezolana que nos develará esta gran incógnita



sin palabras :O

lunes, 11 de agosto de 2008

Estas viendo y no ves



Resulta que así como dice el titulo, estas viendo pero no lo verás,
Científicos de la Universidad de Berkley en California hicieron un material es que capaz de desviar la luz, y así nuestro ojo no lo puede ver.

Citando de la noticia:

La forma en que los científicos de Berkeley pueden desviar la luz de los objetos es con una capa o cobertura de llamados metamateriales de manufactura artificial en laboratorio que "doblegan" el espectro de luz.

Los metamateriales son elaborados con mezclas de metales y fibras, como el teflón y fibras sintéticas, que desvían microondas, luces y reflexiones.

El director del otro equipo científico dijo que el proyecto está lejos de tener a una persona que pudiera caminar por las calles sin que nadie la viera en su trayecto.

Que divertido, ¿apoco no?

sábado, 9 de agosto de 2008

Albañileria de gran escala en el DF

Pues resulta que estaba yo vagando por el internet (es decir estaba de ocioso) me encontré este video que muestra varios proyectos de grandes construcciones que se tienen para la Ciudad de México, hay unos muy padres, algunos ya están en construcción (como la sede del Senado) y otros son sólo ideas, otros más estan en el limbo, como la Torre del Bicentario porque dicen que sí se hace, que no se hace, que sí, que no, quién sabe... el punto es que hay mucha inversión en construcción en el DF, y eso suena y se ve bien.


viernes, 8 de agosto de 2008

¿Un oscar al Guasón?


Después de ver The Dark Knight lo que uno más tiene a recordar es la gran actuación del Guasón.
Pero ¿es realmente tan buena como para que sea considerado al Oscar?
Según cuentan a la Academia no le agran mucho estos blockbusters del verano, y en general nunca reciben premios ni siquiera nominaciones.
No obstante hay muchos foros, comentarios, y rumores en internet que hablan del posible oscar al desaparecido Actor.
Críticos del periodico NYP, de la revista Rolling Stone, y de otrás prestigiadas revistas y columnas de cine apoyan la idea de la nominación al Oscar.
No se si lo deba ganar, pero creo que una nominación si lo vale.
Es una gran película que tiene como cereza del pastel al mejor Joker que ha existido.

jueves, 7 de agosto de 2008

Una boda en una galaxia muy muy lejana... (o no tanto)


Resulta que una boda con el tema de Star Wars no fue sólo una idea algo fumada. Sino que realmente ha sucedido. Y para muestra unos videos y fotos.


La siguientes son albumes completos de más fotos de una boda de estilo Star Wars.

Creo que lo que más me gusto a mi (a parte de los muñequitos del pastel) es este duelo de espada láser en lugar del tradicional y a veces aburrido vals.




Es curioso y divertido pero no lo haría para mi.
Es muy extremo, digamos que soy más tradicionalista :P

martes, 5 de agosto de 2008

Tips para el SCJP VI

Creando objetos
Thread[] threads = new Thread[5];
Son importar que el código pareciera decir lo contrario. El constructor de Thread no esta siendo invocado. No estamos creando una instancia de Thread, sino un arreglo de objetos. Es decir no existen hasta ahora objetos Thread.

Debido a ciertos atajos de sintaxis es posible crear objetos sin usar la palabra reservada new.

Si tenemos un arreglo de objetos, este arreglo no guarda los objetos, como lo haría un arreglo de primitivas, sino que guarda referencias a estos objetos.

Los arreglos tienen una variable publica llamada length que da el número de elementos caben en el arreglo. No obstante no nos dice si los elementos ya han sido inicializados.

int[] dots = {6,x,8};
La línea anterior realice 4 cosas:
  1. Declara una referencia a un arreglo de ints llamado dots
  2. Crea un arreglo con un tamaño de 3 (tres elementos).
  3. Llena el arreglo con los valores 6, 9 y 8.
  4. Asigna el nuevo arreglo a la referencia dots.

Esta sintaxis funciona de la misma manera para objetos.

Perro perrito = new Perro("Nash");
Perro[] misPerros = {perrito, new Perro("Blacky"), new Perro("Nala")};

Y por supuesto también se puede usar esta sintaxis para arreglos multidimensionales
int[][] scores = {{5,2,4,7}, {9,2}, {3,4}};

Existe también otra forma de crear arreglos e inicializarlos, para después asignarlos a una referencia que ya había sido declarada
int[] testScores;
testScores = new int[] {4,7,2};

Los arreglos de primitivas aceptan cualquier valor que pueda ser promovido implícitamente al tipo declarado. Es decir un arreglos de int puede aceptar cualquier variable menor de 32 bits.
int[] weightList = new int[5];
byte b = 4;
char c = 'c';
short s = 7;
weightList[0] = b; // OK, byte mas pequeño que int
weightlist[1] = c; // OK, char mas pequeño que int
weightList[2] = s; // OK, short mas pequeño que int

Para arreglos de objetos, es posible colocar subclases del tipo declarado dentro del arreglo.
Si el arreglo es declarado de tipo de alguna interfaz, entonces los elementos pueden hacer referencia a una instancia de cualquier clase que implemente esa interfaz.

Bloques de inicialización
Los bloques de inicialización son un lugar donde pueden realizarse operaciones. Estos corren cuando la clase es cargada (bloque de inicialización static) o cuando una instancia es creada (bloque de inicialización de una instancia)
class Ejemplo {
static int x;
int y;
static { x = 7 ; } // static init block
{ y = 8; } // instance init block
}

Los bloques de instancia se ejecutan después de la llamada a super dentro del constructor. Es decir después que todos los super constructores haya sido ejecutados.

Puede haber múltiples bloques de inicialización dentro de una clase. Es importante notar que a diferencia de los métodos o constructores, el orden en el que aparecen es importante. Cuando estos son ejecutados el orden es de arriba hacia abajo.

Utilizando los Wrappers o envoltorios.

  1. Son clases que están correlacionadas con los tipos primitivos
  2. Tienen dos funciones principales
  3. Envolver a los tipos primitivos para que puedan ser manejados como objetos
  4. Proveer métodos para conversión entre ellos
  5. Los métodos más importantes son:
  6. xxxValue() regresa un tipo primitivo (intValue,longValue, etc)
  7. parseXxx() Toma un String y regresa un tipo primitivo (parseInt,parseDouble,etc)
  8. valueOf() Toma un String, regresa un objeto envuelto

Autoboxing
Desde Java 5 existe algo que se llama Autoboxing que permite manejar un tipo Wrapper como si fuera un tipo primitivo por ejemplo:
Integer y = new Integer(567); // Crear objetos
y++; // quita el enovoltorio, lo incremente y pone el envoltorio
System.out.println("y = " + i); // imprimir
Este código pareciera usar el operador de incremento en un objeto. Pero lo que realmente sucede es que el compilador hace el trabajo por ti.

Cuando la JVM ve un método que toma un tipo primitivo pero que no concuerda exactamente entonces busca ampliarlo al siguiente tipo primitivo. Es decir short se puede pasar a int.

La pregunta que surge es, ¿el compilador prefiere ampliar una primitiva o usar el Autoboxing y los envoltorios?. La respuesta es, el compilador prefiere ampliar un tipo primitivo. Es decir si el compilador ve un short lo hara int antes que hacerlo Short.

Lo importante es entender que la ampliación de tipos se basa en herencia. Es decir usa una prueba de la relación “Es Un”. Por lo tanto no es valido decir que Short Es Un Integer.


En resumen:
  1. La ampliación de tipos primitivos usa el más pequeño argumento posible.
  2. Usados individualmente, el autoboxing y los Var-args son compatibles con la sobrecarga
  3. No se puede realizar la ampliación de un tipo envoltorio a otro (Prueba de Es Un va a fallar)
  4. No se puede ampliar y luego realizar el autoboxing (int no se puede convertir en Long)
  5. Pero si se puede realizar el autoboxing y luego ampliar (un int se vuelve vuelve un Integer, mediante Object)
  6. Se puede combinar Var-args con ampliación o autoboxing
  7. Usar == con envoltorios es engañoso. Ya que valores iguales y pequeños darán == verdadero, pero para valores mayores a 128 ya no.

Recolección de basura
  1. La recolección de basura provee un manejo de memoria automatizado
  2. El propósito de la GC es borrar objetos que sea inalcanzables
  3. Solo la JVM decide cuando ejecutar el GC, aunque tu puedes pedirlo.
  4. No puedes conocer con certeza el algoritmo que usa el GC
  5. Los objetos deben de ser considerados elegibles antes de que puedan ser recolectados
  6. Un objeto es elegible cuando ningún hilo vivo puede alcanzarlo
  7. Para alcanzar un objeto, debe haber una referencia viva a ese objeto
  8. Las aplicaciones Java se pueden quedar sin memoria
  9. Existen formas para decir a la JVM que puede eliminar a un objeto si lo desea.
  10. La primera es poner la referencia a ese objeto a null.
  11. También se puede cambiar la referencia de un objeto a otro.
  12. La tercera forma es cuando existen instancias que hacen referencias circulares entre sí pero no hay forma de acceder a alguna de ellas “desde afuera”.
  13. El método finalize por un objeto puede ser ejecutado, pero no debes de confiar en ello. Así que no pongas código en ese método. De hecho se recomienda no sobrescribir el método finaliza nunca.

viernes, 1 de agosto de 2008

Profanadores de tumbas


Este libro de Brad Geagley trata sobre un Sherlock Holmes de hace varios siglos (milenios incluso).

Sucede un asesinato de una sacerdotiza en Tebas y un hombre llamado Semerket, el cual tiene problemas con su ex-esposa y sobre todo con el vino, tiene que resolver este asesinato.
Durante las indagaciones Semerket se da cuenta de que no es sólo un asesinato sino un gran complot en contra de alguién poderoso.

Es un libro con referencias históricas ya que en verdad sucedió una conspiración en esos tiempos y hay papiros que lo prueban. Es un libro de tamaño normal poco menos de 400 páginas pero que es tan simple y sencillo de leer que en unos pocos (muy pocos) días se puede terminar.

Aún cuando no te interese la civilización egipcia o las novelas históricas los recomiendo ampliamente.
Vale la pena.

Tips para el SCJP V

Primero hablemos de como se representan en Java los diferentes tipos primitivos y los objetos. Después tenemos el tema de como trabaja Java el paso de parámetros por referencia, pero no como C o C++ lo cual es muy importante entender.

Representaciones de números y valores

  1. Existen tres formas de representar números enteros en Java, decimal (base 10), octal (base 8 ) y hexadecimal (base 16).
  2. Los números octales solo usan números del 0 al 7. En Java se representan colocando un cero al inicio del número. Ejemplo :070
  3. Los números hexadecimales pueden usar 16 símbolos para ser construidos: 0 1 2 3 4 5 6 7 8 9 a b c d e f .Java acepta las letras en mayúsculas o minúsculas (uno de los pocos lugares donde no hace esta distinción). Su prefijo es 0x. Ejemplo 0xAAF453ab.
  4. Los números de punto flotante se definen como un número, un punto y más números que representan una fracción.
  5. Los valores booleanos sólo puede ser definido como true o false. En Java no es válido usar números para representar valores de true o false.
  6. Un char se representa como un carácter entre (‘) comillas simples.
  7. Una referencia a un objeto es eso –una referencia variable. Es un espacio para guardar bits que representar una forma de llegar al objeto.
  8. El resultado de una expresión que involucra algo de tamaño int o más pequeño será un int. En otras palabras, suma dos bytes y obtienes un int. Multiplica un int y un short y el resultado será un int, divide un short por un byte y el resultado será un int…etc
  9. Si tratamos de asignar la suma de dos bytes a un byte aun cuando el resultado sea pequeño para que pueda ocupar un byte al compilador no le importará. El conoce la regla mencionada de expresiones y que el resultado será un int. Por ello para que funcione sin problemas debemos hacer un cast explícito.
  10. Todos los números de punto flotante son por default doubles (64 bits) no son float.
  11. En Java podemos acortar o recortar una primitiva, y cuando esto sucede se recortan o truncan los bits de mayor orden. En otras palabras, se pierden todos los bits de la izquierda que no quepan.
  12. Los operadores +=, -=, *=, /= realizan un cast implícito y no siguen la regla del int. Es decir podemos sumar dos bytes usando += y guardar el resultado en un byte sin problemas.
  13. Cuando igualamos referencias de primitivas lo que se hace es copiar el valor. Por ello los cambios que hagamos después no afectan al otro valor
int a = 10; // Asignar un valor a a
int b = a;
b = 30;
Aquí a tendrá el valor de 10 y b el valor de 30.

Alcance de las variables.
Existen 4 ambientes distintos
  • 1. Las variables static tienen el alcanza más grande. Son creadas cuando la clase es cargada y sobreviven todo el tiempo que la clase permanezca cargada en la JVM
  • 2. Las variables de instancia son creadas cuando una nueva instancia se crea y son removidas cuando esa instancia muere.
  • 3. Las variables locales viven mientras el método permanezca en la pila.
  • 4. Las variables de bloque, viven solamente cuando ese bloque se esta ejecutando.
Valores por Default de tipos primitivos
Tipo de la variable Valor por default
Referencia a objeto null (no referencia a ningún objeto)
byte, short, int, long 0
float, double 0.0
Boolean false
char '\u0000'

Otros
  1. Los elementos de un arreglo siempre son inicializados con valores por default, sin importar donde sean declarados o instanciados.
  2. Las variables locales, incluyendo las primitivas, siempre deben ser inicializadas antes de usarlas. Java nos les da valores por default, deben ser explícitamente iniciadas con algún valor.
  3. El compilador no puede decir siempre si una variable local ha sido inicializada antes de su uso. Por ejemplo en bloques condicionales (if) un bloque puede que nunca sea accesado pero el compilador no lo sabrá así que habrá que iniciar una variable que se encuentre ahí, aun cuando nunca sea usada.
  4. Las refencias de instancia siempre son iniciadas a null, a menos que explícitamente se diga otra cosa. Pero las referencias locales no tiene valores iniciales, es decir no son null.
Copiar valores o referencias
  1. Con variables primitivas la asignación de una variable a otra significa que el contenido (el patrón de bits) será copiado de una variable a otra. Las referencias de objetos funcionan de la misma manera. El contenido de una referencia es un patrón de bits y si se asigna a una referencia a el valor de la referencia v, el patrón de bits de a es copiado en b. Así que las dos referencias tendrán el mismo patrón, este patrón es el que refiere a un objeto en el heap.
  2. Es necesario comprender que sucede cuando se usa una referencia para modificar un String
  • Una nueva String es creada, dejando el objeto String original intacto. Y
  • La referencia usada para modificar el String (o el construir una nueva referencia) es asignada al nuevo objeto String.
  1. Cuando pasas un objeto a un método debes de recordar que estás pasado una referencia a ese objeto, no estas pasando el objeto en sí. Y aun más importante es saber que estas pasando una copia de la referencia original. Es decir, ambos el que llama y el método llamado tienen idénticas copias de la referencia, y por lo tanto ambos se refieren al mismo objeto (no a una copia) en el heap.
  2. Entonces ¿Podemos decir que java pasa objetos por referencia? NO. Lo que realmente hace Java es que, ya sea una primitiva o un objeto estas pasando una copia de los bits que representan un valor.

miércoles, 30 de julio de 2008

Tips para el SCJP IV

Seguimos con tips para la certificación.
De nuevo hablamos de interfaces. Vemos un poco sobre los casts. Un tema amplio pero no muy dificil de entender, los constructores. Y finalmente vemos la palabra reservada static
.

Casting

  1. Existen dos tipos de cast.
  2. El primero downcasting (hacia abajo), sucede cuando se tiene una referencia más general y se desea una referencia a una subclase. Se debe realizar explícitamente el cast para que funcione y así poder accesar con esta nueva referencia a los miembros de la subclase.
  3. El upcasting (hacia arriba) funciona implícitamente (no se tiene que escribir) ya que cuando se realiza estas restringiendo el número de métodos que puedes invocar.
Interfaces
No te dejes engañar por código que muestre una clase concreta que declara haber implementado una interfaz pero no exista código que lo haga. Antes de decir que el código no es valido cabe mencionar que las superclases de ella pueden haber implementado esas interfaces.

Una clase puede implementar más de una interfaz. Es válido decir
public class Pelota implements Serializable, Runnable, Rebotable
{ ... }

Una interfaz puede extender (heredar) otra interfaz, pero nunca implementarla.
public interface Rebotable extends Movible { } // ok!

Una interfaz si puede extender (heredar) más de una interfaz
public class Programador extends Empleado, Trabajador { } // Illegal!
Aquí sí
public interface Rebotable extends Movible, Esférica { } // ok!


Regresando valores
  1. Puedes regresar null en un método que tenga un objeto como tipo de retorno.
  2. Un arreglo es un tipo legal de tipo de retorno
  3. En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser implícitamente convertida (sin cast) en el tipo de retorno declarado.
  4. En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser explícitamente convertida (usando un cast) en el tipo de retorno declarado.
  5. No debes de regresar ningún valor o variable de un método declarado como void.
  6. En un método con un tipo de retorno objeto, puedes regresar un cualquier objeto que pueda ser implícitamente convertida (sin cast) en el tipo de retorno

Constructores
  1. Los constructores pueden usar cualquier modificador de nivel de acceso, incluyendo private.
  2. El nombre del constructor debe ser el mismo que el nombre de la clase.
  3. Los constructores no tienen un valor o tipo de retorno.
  4. Es valido (pero sin sentido) tener un método con el mismo nombre de la clase, esto no lo hace un constructor. Si tiene un valor de retorno entonces es un método.
  5. Si no escribes un constructor en tu clase, entonces el compilador te hará uno automáticamente.
  6. El constructor generado por default nunca tendrá parámetros
  7. Si quieres un constructor sin argumentos, pero ya creaste otros constructors en tu clase, el compilador NO te proveerá de un constructor automáticamente. Así que tendrás que escribirlo tu mismo.
  8. Cada constructor tiene en su primera línea de código una llamada a un constructor sobrecargado (this()) o una llamada al constructor de la superclase (super()) aunque esta llamada puede ser insertada por el compilador (como primera línea de código)
  9. Una llamada a super() puede ser con o sin argumentos dependiendo del constructor de la superclase.
  10. No puedes hacer una llamada a un método de instancia o acceso a una variable hasta después de que el constructor de la super clase haya sido ejecutado
  11. Solo métodos y variables estáticas puede ser accesadas como parte de la llamada a super() o this, por ejemplo super(Animal.NAME) si NAME esta declarada como static.
  12. Las clases abstractas tienen constructores y son llamadas cuando una instancia de una subclase concretada es creada.
  13. Las interfaces no tienen constructores.
  14. Los constructores no se heredan. No son métodos. Y no pueden ser sobrescritos.
Una ejecución típica de un constructor es:
  1. El constructor llama al constructor de la superclase, que llama a su vez al constructor de su superclase y así sucesivamente hasta llegar al constructor Object.
  2. El constructor Object se ejecuta y regresa al constructor siguiente, hacía abajo de la cadena, hasta el final.
Modificador Static
  1. Las variables y métodos marcados como static pertenecen a la clase, más que a una instancia. De hecho se pueden usar los métodos o variables estáticas sin tener instancias de esa clase
  2. Un método estático no puede acceder a una variable no estática (de instancia). (Por ejemplo desde main() el cual es un método estático.
  3. Los métodos estáticos no pueden ser sobreescritos (overriden).