miércoles, diciembre 12, 2007

Posicionamiento con CSS - I

El posicionamiento con CSS es un tema que, a mi consideración, todo diseñador web debe conocer, y hasta cierto punto, dominar. En lo personal, este campo es un mundo, y cada vez que me toca diseñar un sitio, la consulta de tutoriales y la investigación, el uso de la famosa técnica universal del ensayo y error, nunca falta. En síntesis y al grano, mediante esta técnica se alcanza máximo control sobre el lugar que cada elemento de una página Web ocupará dentro de la propia página, así como el manejo de capas, entre otras cosas.

Se podría decir que mediante el empleo de esta técnica, se trabaja sobre el nombrado desarrollo en capas, en este caso en particular, se llega a separar la presentación del contenido, con lo cual se logran las siguientes ventajas:

  • posicionamiento Web, al hacer que el código de tus páginas Web sea más limpio y claro a los ojos de los robots de búsqueda
  • aumento en la densidad de las palabras clave dentro de los contenidos
  • disminución en el peso de las páginas Web
  • mejora en las operaciones de mantenimiento del sitio completo
  • visibilidad cross-browsing, al lograr que nuestro sitio se vea igual en todos los navegadores, claro está, esto involucra trabajo adicional, al menos hasta que todos los navegadores se pongan de acuerdo en interpretar de igual forma los estándares

La W3C en las especificaciones publicadas al respecto (ver fuentes consultadas) explica cómo estas especificaciones soportan posicionamiento de contenido (el tema en discusión), descarga de fuentes, diseño de tablas, internacionalización, numeración y contadores automáticos, y algunas propiedades relacionadas con la interfase del usuario.

Los DIVs

Muy de la mano con el posicionamiento con CSS está la utilización de los DIVs. Un DIV es básicamente un contenedor, en el que podemos meter cualquier clase de contenido, con la gran ventaja de que los podemos manipular a nuestro antojo con CSS, colocarlo en cualquier parte de la página, de cualquier tamaño, de cualquier color, con bordes o sin ellos, con imágenes de fondo o sin ellas.

Para lograr que el posicionamiento no se vuelva complicado, hay que tener en cuenta que la organización en el código HTML es muy importante, tener bien estructurados los elementos nos facilitará el trabajo con CSS, con esto algunos expertos hacen mención a la utilización de código semántico.

Esto significa que debemos trabajar en el código HTML para que este se encuentre bien organizado jerárquicamente.



Fuentes consultadas:

+ http://www.ignside.net/man/css/posicionamiento.php
+ Especificación CSS2
+ Tutorial de posicionamiento
+ Ventajas de CSS al posicionamiento Web

domingo, agosto 19, 2007

getElementsByName, una más a la lista

En algún momento tenía que suceder, un extracto de 10 elementos se iba a quedar corto para la pequeña biblioteca de funciones javascript. Aquí les va la siguiente función, en realidad, claro está, dependiendo de dónde se le desee aplicar y cómo, les puede resultar de bastante utilidad.


getElementsByName

Esta función regresa una colección (array) de todos los elementos que tengan un atributo name igual a la cadena que recibe como parámetro. Esta se ha de utilizar tal y como se haría con getElementsByClass, a diferencia que esta recibe solo un parámetro: el nombre de los objetos a buscar.

Ojo!... no funciona en browsers que no sean Mozilla, para variar (punto para Firefox)... He aquí el código a utilizar en IE para implementar esta funcionalidad:

function getElementsByName_iefix(tag, name) {
var elem = document.getElementsByTagName(tag);
var arr = new Array();
for(i = 0,iarr = 0; i < elem.length; i++) {
att = elem[i].getAttribute("name");
if(att == name) {
arr[iarr] = elem[i];
iarr++;
}
}
return arr;
}
Como parte de la investigación para dar con el código (proporcionado por el Supervisor de Desarollo de nuestra unidad de trabajo) di con este sitio muy útil en donde se hace una comparación entre los principales navegadores de la actualidad acerca de la compatibilidad de las funciones descritas en el W3C DOM, realizado por Peter-Paul Koch.




Fuentes consultadas:

+ http://www.quirksmode.org/dom/w3c_core.html
+ http://www.quirksmode.org/dom/tests/named.html

jueves, agosto 16, 2007

Cómo utilizar getElementsByClass()

Al principio me pareció una función muy útil, pero no fue hasta el momento en que decidí utilizarla que me di cuenta que sería productivo mostrar cómo y no simplemente nombrarla como una función de gran utilidad.

Esta función no pertenece precisamente al grupo de funciones predefinidas de Javascript, razón por la cual, al googlear esta función nos aparecerán muchas versiones de ésta, ya que muchos desarrolladores han encontrado en ella una gran utilidad, y al no encontrarse dentro del grupo de funciones prestablecidas, todos escriben su propia versión.


En esta ocasión, les presento la versión de Dustin Diaz:



function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
node = document;
if ( tag == null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^\\s)'+searchClass+'(\\s$)');
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}

Ahora bien, cómo utilizarla?


El primer parámetro, el nombre de la clase, debe proporcionarse como cadena. Los otros parámetros son opcionales, pero se han de proporcionar para limitar la búsqueda en el D.O.M.

He aquí un ejemplo de más o menos cómo implementar el código:

var myEls = getElementsByClass('myClass');
for ( i=0;i<myEls.length;i++ ) {
// do stuff here with myEls[i]
}




Fuentes consultadas:

+ http://www.dustindiaz.com/...
+ http://www.snook.ca/.../your_favourite_1/

lunes, julio 16, 2007

Compendio 10 funciones de JavaScript

En busca de cómo mejorar la funcionalidad del lado de cliente de una de nuestras aplicaciones, me encontré con una serie de sitios que daban a conocer un listado de 10 funciones javascript, las más usadas, algunos de esos sitios coincidían en la mayoría de las funciones, otros, mostraban diferentes.

Por mi parte, os muestro las 10 funciones javascript que considero de mayor uso genérico, y que por una u otra razón, necesitamos tener a mano como referencia, ya que son las que solemos utilizar más a menudo.


Función 1. getElementById()

var elemento = document.getElementById(id);

Este método pertenece al objeto document. Con él obtendremos el objeto que hace referencia al elemento con un id en concreto.


Función 2. getElementsByTagName()

var array_elementos= elemento.getElementsByTagName(tag);

Sirve para obtener un array con todos los elementos con un tag concreto que están contenidos dentro de un elemento. Por ejemplo: deseamos cambiar el color del texto de todos los elementos con tag “A” contenidos dentro del elemento con id “links”:


<a href=”/”>Home</a>
<div id=”links”>
<a href=”http://google.com”>Google</a>
<a href=”http://ubuntu.com”>Ubuntu</a>
<a href=”http://debian.org”>Debian</a>
</div>

<script type=”text/javascript”>

// Obtenemos el elemento con id “links”
var el = document.getElementById(“links”);

// Ahora obtenemos todos los elementos con tag A que hay
// dentro del elemento 'el'
var as = el.getElementsByTagName(“A”);

// Y finalmente recorremos el array de elementos para
// cambiarles el color a cada uno
for (var i=0; i<as.length; i++) {
as[i].style.color = '#000'; // negro
}

</script>

Función 3. join()

var string = array.join(string);

El método join() pertenece al objeto Array (todos los arrays en JavaScript son un objeto Array), y nos servirá para unir todos los elementos de un array para forma una cadena de texto. Es el equivalente en PHP a implode().


Función 4. split()

Al igual que join(), split() también es un método del objeto Array, aunque sirve exactamente para lo contrario: dividir una cadena de texto en un array.

Truco: Usados ambos métodos conjuntamente podremos crear una función para sustituir un texto por otro en una cadena dada:


Función 5. focus()

elemento.focus();

Con este método conseguiremos pasar el foco a un elemento de un formulario.


Función 6. setTimeout() / setInterval()

var temporizador = setTimeout(funcion, milisegundos);
var intervalo = setInterval(funcion, milisegundos);

Ambos métodos (objeto window) nos sirven para ejecutar código javascript cada x milisegundos, bien para que se ejecute una sóla vez (setTimeout) o bien para que se ejecute ilimitadamente (setInterval). Ambos se pueden cancelar mediante clearTimeout(temporizador) y clearInterval(intervalo).


Función 7. addLoadEvent()

Se trata de una versión exclusivamente para el objeto window en el evento onload, de forma que podremos asignar una serie de funcionalidades a nuestro evento onload y ver el resultado al finalizar la carga de nuestra web. Tambien es posible usar addEvent() para realizar lo mismo. Creada por Simon Willison.


Funicón 8. getElementsByClass()

Una gran función que mediante un nombre de clase (CSS), podremos encontrar los elementos que la compongan, devolviendo un arreglo de objetos para trabajar con ellos de forma más cómoda. Originalmente no fue creada por nadie en particular aunque con el tiempo los desarrolladores han ido añadiendo mejoras para depurar la función. Más acerca de esta función.


Función 9. getCookie(), setCookie(), deleteCookie()

La implementación de estas funcionalidades en PHP es más fácil.


Función 10. alert() / confirm() / prompt()

alert(mensaje);
var resultado = confirm(mensaje);
var resultado = prompt(mensaje, valor);

Con estos métodos (objeto window) mostraremos ventanas modales al usuario. Con alert() simplemente, como hemos visto en otros puntos, mostraremos un mensaje. Con confirm() haremos exactamente lo mismo, pero además obligará al usuario a seleccionar entre dos opciones, una positiva y otra negativa, que se devolverá como parámetro (boolean). Y con prompt() pediremos al usuario que introduzca un texto en una ventana modal.

confirm() es muy útil para confirmar clics en enlaces comprometidos, que hagan operaciones críticas como eliminación de datos.



Fuentes consultadas:

+ http://.../diez-funciones-imprescindibles-en-javascript/
+ http://.../top-ten-javascript
+ http://.../las-10-mejores-funciones-de-javascript/
+ http://www.desarrolloweb.com/articulos/705.php

sábado, junio 02, 2007

Escribiendo Código Legible

Actualmente nos encontramos trabajando en una aplicación, de esas que uno llamaría "grandes" y "de alto impacto". Como es usual, debemos entregarla en tiempo record, y dado la naturaleza de los requerimientos solicitados, tiempos de entrega y demás variables involucradas en la gestión de este proyecto, el equipo de desarrollo se encuentra, en su totalidad, trabajando tanto a nivel de codificación, programación, análisis, diseño, control de calidad... en esta aplicación.

Es entonces en este tipo de proyectos, en donde no es uno, ni dos, sino varios programadores los que se encuentran codificando diversos módulos en la misma aplicación y que en un momento estarán interactuando, que uno se da cuenta de la necesidad de escribir Código Legible, ya que por la naturaleza del desarrollo, no es el autor del código el único que va a leer sus creaciones, sino que en alguna instancia, otro programador se va a ver en la necesidad de leer su lírica (por decirlo de alguna forma)... y de verdad, hay veces, la mayoría, que en lo personal cuando veo el código de otro compañero, me pregunto "qué m.... es esto???"... no les pasa a veces?

Comentar el código no es algo que debe dejarse para luego, para después de que la aplicación se entregue, y mucho menos... no hacerlo, es algo que se debe realizar sobre el camino. Claro está, comentar código es una de las tantas técnicas disponibles para escribir código legible.

"Como desarrollador, el tiempo es tu recurso más valioso ... un minuto dedicado a escribir comentarios puede ahorrarte una hora de angustia" - Jeff Vogel

En esta ocasión presento un resumen de un artículo que me encontré hace un par de días, y no precisamente es uno de esos artículos escritos hace meses o años, es uno realmente nuevo: "Six ways to write more comprehensible code" (Seis formas de escribir código más legible) escrito por Jeff Vogel, Presidente de Spiderweb Software. En éste, el autor dicta seis consejos para escribir código legible basado en sus más de 10 años de experiencia como desarrollador de juegos de computadoras.

Parece mentira pero cuando lean los consejos que presenta este artículo, dirán: "esos eran los consejos?... pero si eso ya lo sabía!"... y es verdad... todos sabemos que esto se debe hacer... el detalle es que no lo hacemos. Semejantes reglas o mejores prácticas son estrictamente seguidas por grandes empresas como Infosys Technologies Ltd., los desarrolladores y programadores que trabajan en compañías como estas deben seguir estrictamente ciertos lineamientos al momento de escribir códigos, ya que son fuertemente evaluados cuando sus desarrollos llegan a Control de Calidad.

A continuación un extracto de los consejos presentados en el artículo en cuestión:

  1. Escibe comentarios inteligentes:
    El Tiempo es tu recurso más valioso. El tiempo perdido jamás podrá recuperarse. Los comentarios deben ser claros como el agua, de otra forma se estará desperdiciando tiempo futuro. No deben ser tan largos que te duerman, ni tan corto que no logren explicar o describir una idea concisa. Tampoco es que se va a comentar lo obvio.

  2. Utiliza constantes. Pero no MUCHO:
    Tanto el uso de constantes como el lugar donde éstas se definen es de gran ayuda al momento de hablar de mantenimiento. Muchos programadores saben, hasta cierto punto, hacer este tipo de cosas. Pero ello requiere disciplina para hacerlo adecuadamente. Y no solo ello, sino también el nombrar adecuadamente estas constantes influye directamente en el objetivo, lo cual nos conduce hacia el siguiente consejo.

  3. No uses confusos nombres de variables:
    El objetivo general es simple: escribe código de tal forma que, si alguien lo lee y no tiene idea de qué es lo que hace, pueda entenderlo y saber lo que hace tan rápido como sea posible.
    La estrategia para lograr esto es dar buenos nombres descriptivos a tus variables, procedimientos y similares.

  4. Haz revisión de errores:
    Al momento de crear tu procedimiento/función, debes siempre pensar: "Supongamos que a alguien se le ocurre la brillante idea de meter todos estos incoherentes e insensatos valores. Cómo se defenderá mi código y evitará que se congele el sistema o incluso la máquina?" A partir de esta suposición que entonces tengas que escribir tu código y validarlo contra esta carga de extraños valores.

  5. "La optimización prematura es la raíz de todo el mal" - Donald Knuth:
    La raíz de la frase expuesta, pueden encontrarla rápidamente y en su versión original en inglés en Wikipedia.
    A menos que desees hacer sufrir a la gente, tu principal meta, al escribir código, deber ser claridad. El escribir código simple es bastante rápido, bastante rápido el entenderlo al regresar a él, y bastante rápido de corregir.
    La optimización es el enemigo de la claridad. A pesar de ello, a veces, se debe optimizar.
    Escribe algo limpio, claro y que funcione. Tienes todo el tiempo del mundo para optimizar posteriormente. El detalle está en no hacerlo sino hasta estar seguro de que lo que intentas hacer, se esté haciendo de la forma correcta.

  6. No juegues de Sabelotodo:
    La moraleja aquí es que si el código que estás escribiendo requiere conocimiento detallado de reglas intrincadas de precedencia o te conduce a echar un ojo a algún capítulo de uno de esos libros para saber lo que estás haciendo, estás siendo un sabelotodo.
    "Si tu código requiere conocer la diferencia entre i++ y ++i ... tu código es demasiado complicado", Jeff Vogel.
Una vez más, estos son consejos, leves tips para mejorar la legibilidad de tus códigos y hacerle la vida un poco menos complicada a tus compañeros de trabajo, lo importante aquí es tomarlos en cuenta.
Fuentes consultadas:

+ Six ways to write more comprenhensible code
+ Notación Húngara

martes, enero 23, 2007

.NET vs Java

.NET vs Java Technology. Image by the Bangkok UniversityRetomando el curso acerca de artículos técnicos, empecemos el año haciendo esta vez referencia a una polémica batalla, de la cual en lo personal no había notado su existencia, shame on me, en la cual MS (.NET) y Sun (Java) están involucrados.


Desde ya hace tiempo había tenido interés en aprender a desarrollar en Java, por lo que se escucha de lo robusto y seguro de este lenguaje de programación, y su aplicación en el área de desarrollo para dispositivos móviles, tales como celulares, PDAs, y similares. De hecho, cuento con un diplomado en esta tecnología, del cual en realidad no me siento muy orgulloso puesto que el tema en realidad no lo domino tal y como suena, ya que no lo he puesto en práctica, dado que a mis manos no han llegado trabajos para desarrollar sobre esta tecnología, además, el trabajo no me deja mucho tiempo tampoco como para ponerme a desarrollar por mi mismo, y si así nos vamos, por excusas no hay problema.


No obstante, ahora mismo estoy aprendiendo .NET, y para los que no conocen muy bien acerca del tema, me estoy refiriendo especifícamente a C#, el cual es la punta de flecha de la tecnologia .NET (desde el punto de vista de los lenguajes de programacion que soporta), la cual en sí es un compendio de tecnologías desarrolladas por MS soportando varios de sus lenguajes de programación así como los de otras compañías.


E-mail survey of 966 Computerworld subscribersAhora bien, basado en esta introducción, puedo decir que al momento, cuento con conocimientos básicos de Java y de .NET, basado en esto, y en los comentarios que he escuchado de algunos compañeros de estudio, surge esta pregunta, que luego de investigación, veo que es una batalla que existe en la actualidad, y ya desde hace años: .NET o Java?


Más que tratar las diferencias de ambas tecnologías (información que encontré en la sección .NET vs Java del artículo Introducción a la plataforma .NET y Mono escrito por Patxi Echarte, el cual me pareció bastante completo), deseo exponer mi punto de vista.


MS, hoy en día, está en cada esquina, se puede encontrar casi en cualquier lado del mundo tecnológico: consolas de video juegos, computadoras, softwares, lenguajes de programación... lo que la mayoría, sino todos discute es la forma como MS "monopoliza" el mercado. En esta ocasión, estamos hablando de POO (Programación Orientada a Objetos).


Al realizar una búsqueda en la web por POO, una de las primeras coincidencias que vamos a encontrar se relaciona con Java. MS no se podía quedar atrás, y hasta cierto punto, su solución (C# / .NET) parece tener ciertas ventajas sobre Java. Solo por encima, algunas de las ventajas que .NET ofrece sobre Java son:

  • interoperabilidad de múltiples lenguajes

  • fácil intercomunicación entre aplicaciones (mediante la implementación de SOAP. La teoría dice que la capa de Web Services es uno de los puntos fuertes de .NET)

  • fácil entrega: los assemblies generados son archivos auto-identificables a diferencia de los paquetes generados por Java


Hace semanas, unos compañeros discutían entre cuál herramienta es mejor, si Flash de Macromedia o Swish, de repente, podemos estar ante una discusión algo relativamente semejante.


No obstante, algo cierto podría decir, MS, por la razón que sea, está presente en cada máquina; de igual forma, por la razón que sea, sus herramientas y tecnologías son las más esparcidas entre un grupo de desarrolladores. De la misma forma, por alguna razón, las herramientas (los IDEs) que desarrollan para desarrolladores, son relativamente más amigables que otras soluciones disponibles. Por esta razón quizás entonces hay que darle un voto a MS, y en este caso en particular, a .NET.


Hasta donde pude investigar, MS se ha dado cuenta que estaba quedando fuera del mercado porque todo lo que desarrollaba podía correr únicamente sobre plataformas MS, y poco a poco, ha estado haciendo alianzas robustas para que sus aplicaciones y las aplicaciones que se desarrollan sobre esta plataforma, pueda correr sobre las plataformas competidoras; un ejemplo de ello, el proyecto MONO.


Qué opinan al respecto: .NET o Java?


lunes, enero 22, 2007

Cumpleaños en Bangalore

En esta ocasión deseo compartir con ustedes cómo fue la celebración de mi cumpleaños por este lado del mundo.

Antes que todo, quiero agradecerle a mis amigos y familiares por las felicitaciones, y a mis nuevos amigos aquí en Mysore, por el trip de fin de semana que hicimos a Bangalore, el cual le dio un toque particular a la celebración.

Todo inició el día de mi cumpleanos, Viernes, cuando a las finales nos pusimos de acuerdo los 9 que estábamos saliendo, para salir definitivamente a Bangalore, trip que se estaba desvaneciendo porque al parecer no había hoteles disponibles en dicha ciudad. No obstante, nuestro espíritu aventurero fue más fuerte que las adversidades que en el momento se estaban presentando.

Salimos entonces en la noche, y viajamos en tren hasta Bangalore... durante el viaje, la pasamos bien en el tren, haciendo desorden (muy característico de los panameños), y hasta conocimos a unas israelies que estaban viajando hacia otra ciudad (Chenai), les llamó la atención el desorden que teníamos, y hasta me cantaron el cumpleaños en israeli (pregúntenme si entendía algo, o si en realidad estaba seguro que eso era lo que me estaban cantando, jajaja), jeje... una de ellas muy bonita por cierto. Mis amigos me regalaron un clásico dulce de cumpleaños (brought to you thanks to Coffee Day, como era de esperar), el cual comimos en el tren, y claro está, el cual compartí con los nuevos contactos israelies, jeje... quienes compartieron con nosotros algunos lugares a los que podíamos pasarla bien en Bangalore... ya que despues de todo... nuestra aventura se basaba en salir, y pasarla bien, no teníamos paradas planeadas, ni lugares fijos donde quedarnos... y cada minuto que pasó... la pasamos súper... mejor que si lo hubiéramos planeado... y a pesar de que fueron nada más 2 días... para nosotros pareció como una semana... a lo mejor lo disfrutamos tanto por los niveles de estrés y presión que vivimos en el Centro de Entrenamiento donde estamos, en el cual estamos aprendiendo bastantes cosas técnicas muy productivas en el área de sistemas y programación.

El principal lugar donde estuvimos en la ciudad, se llama M.G. Road, y a su vez nos pudimos percatar que es un lugar bien turístico, por la cantidad de tiendas que hay, y las personas que circulan en dicha zona... puros europeos, jeje...

Pudimos disfrutar de las delicias de un KFC, un Subway... y ya... jajaja... no es mucha la variedad de la cual podemos disfrutar... y claro está... de un Coffee Day, franquicia que está dispersa en toda India... puedes encontrar un Coffee Day cada 3 kms en lugares bastante transitados... buen café, buenos panes y dulces... un buen lugar para pasarla bien... y tal y como dice su slogan: "A lot can happen over a coffee".

miércoles, enero 03, 2007

Bienvenido 2007, New Delhi

Another non-technical post for my family and friends...

Luego de unas semanas pesadas, estudiando hasta las 0300... llegó la navidad, y el fin de año... lo bueno de esto, es que ambas fechas cayeron en fin de semana, por ende, tuvimos un día más libre... la navidad aquí la pasamos en un restorant tipo resort cerca del Centro de Entrenamiento, aquí en Mysore, y parte fue patrocinada por la compañía... pero el año nuevo, acerca de éste es que en esta ocasión les voy a contar cómo terminó el 2006 para algunos de nosotros.

Un grupo de 16 personas salimos en un tour hacia el Taj Mahal.

imgp2447Nuestro viaje inició el viernes 29, saliendo a eso de las 1500 del Centro de Entrenamiento, hacia Bangalore... fue un viaje de unas 4 hrs por tierra ... 2 taxis tipo camioneta, 8 personas más el conductor en cada uno. Llegamos al aeropuerto de vuelos internos en Bangalore a eso de las 1900, para salir hacia New Delhi (la capital de India) una hora después de haber llegado. Viajamos en la aerolínea más grande de India, Kingfisher, marca que resulta ser también la cerveza nacional del país. El vuelo duró unas 2hrs y media, aproximadamente, y desde aquí empezó nuestro fin de año... a otro nivel.

Un bus de la agencia de viajes nos recogió, y para colmo de males, en primera instancia, como que no sabía dónde quedaba el hotel adonde íbamos, y por poco y nos deja en un convento... pero luego de un par de vueltas, llegamos a nuestro destino, el Florence Hotel. El ambiente cuando llegamos fue algo tenebroso, pero ya en el día cambió bastante. El hotel en sí, muy bueno.

El sábado fue un día de turismo interno en New Delhi... el guía, nos llevó a visitar, la Casa Presidencial, algunos ministerios cuyos edificios fueron construídos por los británicos, cuando India estaba gobernado por ellos. El Luego fuimos al Indian Gate, monumento histórico parecido al Arco del Triunfo en París, construido para conmemorar la muerte de soldados indios en la I Guerra Mundial y la Guerra Afgana. Fuimos tambien al Qutab Minar, el cual es una torre construida por etapas en diversas épocas, es un monumento relacionado con la religión musulmana. Visitamos un Templo Bahai, esta religión, hasta donde pude leer, invita a todos, sin distingo de credo o religion, a adorar al Creador del Universo y a expresar el amor entre Dios y el hombre. Existen 8 templos alrededor del mundo, y uno, queda en Panamá, cosa que no sabía, jeje...

En la noche visitamos la región comercial más famosa de New Delhi, llamado Connaught Place, donde vimos muchos lugares... sobre todo las compañeras hicieron y deshicieron en el lugar, con las compras... desde ya, se vivía en la zona el ambiente de fin de año... fuegos artificiales, música en la plaza... gente por todos lados... encontramos un TGI Fridays, McDonald's, KFC... y muchos restaurantes, donde nuestros estómagos se deleitaron... la noche terminó en una discoteca llamada Blues... donde pusimos a mover el esqueleto.

Taj MahalEl domingo inició temprano... viajamos hasta Agra, donde se encuentra el Taj Mahal. El viaje duró unas 6 hrs... en tierra... nos llevó un bus, que iba como a 60kph... el recorrido era de nada más 200kms. Al llegar a la ciudad... pasamos toda la tarde en este hermoso monumento que cuenta una historia de amor, la cual para no hacerles largo el cuento, los refiero a esta dirección donde pueden leer la historia.

Salimos rápido a eso de las1600, luego de comer en un buen restorant de la localidad... para llegar a tiempo para celebrar el fin de año en New Delhi. A penas llegamos al hotel, la idea era salir de inmediato... una vez más... nos extendimos, porque las compañeras se estaban asicalando. Viajamos en 4 rishus (taxis motos muy autóctonos del país), 4 por rishu... no pudimos llegar hasta el mismo Connaught Place, ya que las calles estaban cerradas por la festividad... el frío ya se sentía, podía estar a unos 7 grados C... y la neblina hacía que el ambiente pareciera una escena de la clásica película de Jack El Destripador en London... no obstante, caminamos nuestro kilómetro para llegar a la plaza... y la muchedumbre era impresionante... como nuestros bolsillos estaban algo ya averiados por el viaje, terminamos en un restorant, muy bueno, United Coffee House, al cual luego fueron llegando los otros compañeros que habían salido en las otras rishus... muy emotivo el momento... luego de un rato en el restorant, salimos a caminar, muy fría la noche y con bastante neblina... tomamos nuestras rishus... y de regreso al hotel.

IT 205 Cancelado !!!Al dia siguiente, nuestro vuelo estaba planeado para salir a eso de las 1700... así que, nos pudimos levantar un poco tarde, y salir de compras al Connaught Place. Ya en el aeropuerto, el ambiente se podía sentir pesado... cada cierto rato, anuncios de vuelos retrasados por neblina se escuchaban... medias horas pasaban, y el anuncio de vuelos retrasados era lo que se escuchaba... hasta que despues de un par de horas... TODOS LOS VUELOS FUERON CANCELADOS por el estado del tiempo, el aeropuerto fue cerrado, y la multitud ya se ponía histérica... gracias a Dios la aerolínea nos puso en un excelente hotel: Le MeridienLe Meridien (para los curiosos pueden encontrar más información acerca del hotel en este enlace). A pesar de que para nosotros era como estar en el hotel más yeye de New Delhi, luego nos dijeron que no era así... pero para nosotros sí lo fue. Pasamos la noche en este hotel, nosotros 16, y la gran mayoría de los pasajeros de las aerolíneas que estaban "saliendo" ese día y cuyos vuelos fueron cancelados. Cenamos bien chévere, fiestamos en la discoteca del hotel, al día siguiente desayunamos (bacon, uno de los ingredientes que más disfrutamos...)... y la pasamos... outstanding...

En el aeropuerto...Al día siguiente (martes)... regresamos al aeropuerto, y el estado del clima no mejoraba mucho que digamos... aún en las noticias se veían anuncios de vuelos que estaban retrasados y siendo cancelados por el estado del clima (mucha neblina)... pero gracias a Dios, conforme transcurría la mañana, la neblina desaparecía... estuvimos esperando unas 4 a 5 hrs hasta que nuestro vuelo salió.

En resumidas cuentas... un excelente fin de año, que puedo resumir en las siguientes palabras: amistad, convivencia, unidad, vividos por todos los que disfrutamos de esta experiencia... Taj Mahal, New Year Eve on New Delhi, hoteles de lujo, un excelente trip. Para vistas durante este grandioso fin de semana, pueden visitar mi album de fotos.

Ahora... de vuelta a los estudios...