domingo, 5 de julio de 2009

Viaje a Nueva York (II)

Día 3 (Domingo): Misa Gospel y cambio de planes por la lluvia
   El domingo era el día indicado para ir a Harlem. Cogimos el metro y nos fuimos para allí. Qué contraste!, después de haber visto un Nueva York cultural, un Nueva York con gran ambiente nocturno y con modernos edificios, Harlem parecía otra ciudad (y no sólo porque los únicos blancos éramos los turistas).
   La iglesia elegida fue la Metropolitan Baptist Church de la que mi mujer había oído hablar muy bien en algún foro. Llegamos demasiado pronto porque en la web ponía una hora distinta a la real y tuvimos que esperar bastante rato bajo la lluvia. Dimos una pequeña vuelta y justo coincidió que ese domingo había una fiesta de la bicicleta por todo Manhattan aunque quedó un poco empañada porque estuvo lloviendo (y mucho) durante gran parte del día. La misa nos gustó pero a la vez nos decepcionó porque había muy pocos "locales" y estaba totalmente orientada a los turistas. Tal vez era por la iglesia o tal vez tuvimos mala suerte ese día, el caso es que en poco más de una hora nos fuimos dispuestos a meternos en otra iglesia para poder comparar. Al final tuvimos que desistir de la idea porque estaba lloviendo muchísimo y mi mujer se caló los pies. Lo pasamos un poco mal por la decepción de la misa, además estábamos lejos del metro, calados y no paraba de llover. El día lo teníamos planeado para estar en la misa gran parte de la mañana, comer en Harlem (habíamos oído hablar muy bien del restaurante Sylvia's) y por la tarde ver St. John The Divine, la universidad de Columbia y la zona norte de Central Park.


   Finalmente tuvimos que cambiar los planes un poco desilusionados, nos fuimos a comprar unas Nike para mi mujer y luego estuvimos en los famosos almacenes Macy's (el paraíso de las compras para las mujeres). No olvidar pasarse por la zona del lateral entre las plantas 1 y 2 con el DNI o el pasaporte para que nos den la tarjeta con el 11% de descuento para extranjeros. También tuvimos nuestra primera toma de contacto con el Empire State Building (de lejos), vimos el Madison Square Garden y alrededores y ya por la tarde nos fuimos al hotel a cambiarnos y descansar. El día no había salido como esperábamos y para colmo las nueva zapatillas le hicieron daño a mi mujer y la pobre llegó casi sin poder andar y pensando que al día siguiente no iba a poder recorrer la ciudad.

   Por la noche volvimos a salir a hacer más fotos y ampliar un poco la zona: la 42, Bryant Park, la biblioteca municipal, el Empire desde Bryant Park, el Chrysler,... y después de cenar al hotel a descansar.




Día 4 (Lunes): Distrito Financiero, Estatua de la Libertad y Puente de Brooklyn
   El lunes fue el día que elegimos para visitar la parte baja de Manhattan y su famoso distrito financiero. Como era un día de trabajo había mucha actividad y nos encontramos a bastante gente trajeada yendo a sus lugares de trabajo. Eso sí, todos, incluso las mujeres con falda llevaban sus deportivas puestas.
   Este día sin duda fue la ruta más larga de todas. Vimos el famoso toro de la bolsa, el edificio de la bolsa, Trinity Church, St.Paul's Chapel, la siempre triste Zona Cero, el ayuntamiento, los rascacielos de esta zona,... Además, mientras volvía a llover, visitamos la tienda Century 21st donde hicimos algunas compras (encargos) a buen precio. No nos importó traer encargos (aunque te quita tiempo del viaje), pero ojo, si no está exactamente el modelo pedido, qué hago?, uno similar?. En fin, creo que no volvemos a traer tantas cosas para la gente.





   Luego por la tarde cogimos el ferry a Staten Island y recorrimos el puente de Brooklyn bajo una intensa lluvia. Tuvimos la sensación de que el puente no acababa nunca. Parecía que ya llegábamos al final cuando todavía quedaba un buen tramo entre dos medianas de hormigón. Después para recuperarnos estuvimos descansando y tomando algo hasta que se hizo de noche para poder hacer alguna foto nocturna otra vez desde el puente... Este día acabamos reventandos de lo que andamos, además estuvo lloviendo intermitentemente durante todo el día y en ocasiones con gran intensidad. El puente de Brooklyn no lo disfrutamos tanto por este motivo, después de recorrerlo entero una vez; e ida y vuelta hasta la mitad por la noche para hacer las fotos, sólo queríamos llegar al otro extremo, coger el metro y volver al hotel... Aún así, el distrito financiero nos encantó y las vistas desde el puente fueron impresionantes.



Día 5 (Martes): Tribeca, ChinaTown, Little Italy, SoHo...
   De este día lo más destacable fue ChinaTown. En Tribeca prácticamente no estuvimos porque llovía y no había mucho que ver. Nos fuimos a ChinaTown y en el camino vimos algunas tiendas de ropa, Levi's sobre todo, que tenían muy buenos precios. Yo me compré unos Levi's 514 por poco más de 30€. Luego, andando por Canal St. se nos acercó la primera china para ofrecernos los famosos bolsos de imitación. Fuimos detrás de ella, bajamos las escaleras del metro y entramos por una puerta a un pasillo con dos puertas más donde había muchísimos bolsos y carteras. Regateamos un poco con las chinas y al poco ya teníamos un bolso y una cartera. Lo más curioso es que te lo dan en bolsas negras de basura para que no se vea lo que llevas dentro, pero sin embargo ves a mucha gente por la calle con las bolsas.
   Luego, seguimos a otro chino por otras calles, llegamos a una calle y nos dijo que esperáramos un momento. Yo pensaba que se iba a abrir alguna puerta de algún almacen. Nuestra sorpresa fue cuando se abrió la puerta lateral de una furgoneta, bajó una pareja y subimos nosotros. Ahí estábamos nosotros, agachados dentro de la furgoneta, rodeados de bolsos y carteras y con la única luz de una lámpara portatil porque todos los cristales estaban tapados. De ahí también salimos con otro bolso :-D. También fuimos a las típicas tiendas en las que en la trastienda tenían una puerta falsa que llevaba al almacen. Además de los bolsos, estuvimos viendo ChinaTown con sus tiendas con el género en la calle. Paseamos un poco y vimos las exclusivas tiendas del SoHo (sin comprar esta vez) y nos conectamos a internet en el AppleStore. Después comimos en Little Italy para cambiar un poco el tipo de comida. Nos hicimos un poco de lío al pagar, el camarero nos trajo primero el ticket y luego el recibo de la visa en el que no rellenamos correctamente los espacios para la propina y cuando nos marchamos el camarero puso mala cara... Por la tarde nos fuimos al hotel después de hacer una pequeña parada en el edificio de Friends.
   La verdad es que de todo, mi mujer se queda con la experiencia y lo curioso de las tiendas de ChinaTown, quedó encantada. Otra anécdota de esto es que en el hotel, revisando los bolsos para guardarlos en la maleta, vi que uno de ellos (un Chanel) tenía en un bolsillo interior un sobre con un libro de instrucciones dando las gracias por haber comprado el bolso, los cuidados que había que tener con él e incluso una tarjeta que aseguraba su autenticidad. Le dije a mi mujer que ese no era falso sino robado. Luego, examinando otro Chanel que compró, vi que también tenía el mismo sobre con las instrucciones y la tarjeta de autenticidad, pero me di cuenta de que el número de serie era el mismo para ambos bolsos. Si es que los chinos falsifican hasta el certificado de autenticidad! :-D.



   Por la tarde, a las 19:00 teníamos el Crucero nocturno por la parte baja de Manhattan. Tuvimos mucha suerte porque aunque había llovido gran parte del día, en el crucero no llovió nada y justo cuando salíamos y subíamos hacia el hotel para buscar algo para cenar empezó de nuevo a caer bastante. Respecto al crucero, elegimos el nocturno porque nos atraía la idea de ver la ciudad anocheciendo y luego completamente de noche. Por si no os habíais dado cuenta, nos encantan las fotos nocturnas y durante el crucero hice bastantes, algunas muy chulas. Yo se lo recomendaría a todo el mundo porque en lugar de ir a Liberty Island, con el Ferry gratuito es suficiente y este crucero nocturno es totalmente distinto. No obstante, supongo que la cosa cambiará bastante a partir del 4 de julio de este año cuando se abra al público de nuevo el mirador de la Estatua de la Libertad (recordad los despistados que está cerrado desde los atentados del 11-S).
   Cuando ya habíamos cenado y andábamos por alguna calle cercana al hotel, vimos que en un teatro había gente esperando alrededor de unas vallas. Nos asomamos y al rato vimos salir de un musical a Jane Fonda. Vamos, que este viaje incluyó hasta conocer a famosos!.


martes, 30 de junio de 2009

Viaje a Nueva York (I)

   Este año ha sido mi 5ª aniversario de boda y para celebrarlo hemos decidido irnos a Nueva York (por supuesto sin la peque, que se ha quedado con los abuelos). Es una ciudad que yo tenía muchas ganas de ver desde hacía mucho tiempo y hemos aprovechado. El viaje lo hicimos del 1 al 8 de mayo de 2009 y aquí cuento un poco lo que hicimos cada día y diversas anécdotas que nos ocurrieron. Además también muestro algunas de las más de 3200 fotos (sí, 3200) que hicimos.
   Lo más importante antes de hacer un viaje como este (al menos desde mi punto de vista) es llevarlo todo lo más preparado posible. No creo que estando a 6000 kilómetros de casa sea el momento de pensar a donde vamos ahora, qué es lo más importante para ver y cuales son los horarios de los museos. Aún así, aunque llevábamos rutas (gracias Google Maps!) de todos los días siempre hay que hacer algunas improvisaciones sobre la marcha...

Día 1 (Viernes): Madrid - Newark - Manhattan
   Volamos con Continental Airlines y salimos puntuales a las 13:05 aunque al ir a facturar tuvimos el primer susto porque no encontraba el pasaporte. Sabía que lo tenía en el bolso pero no estaba en ningún sitio. Llamamos a casa y allí no estaba y fui corriendo media terminal 2 hasta el coche. Por suerte estaba caído a los pies del asiento :-D. Las 8 horas del viaje se hicieron un poco pesadas aunque al menos teníamos en el respaldo del asiento delantero una pantalla táctil cada uno con películas, series, juegos, música...

   En el aeropuerto estuvimos más de una hora esperando en la cola de inmigración para entrar al país. Como justo estábamos en las fechas en las que la gripe-A estaba sonando con más fuerza y habían aparecido los primeros casos en Manhattan, vimos a mucha gente con las mascarillas puestas (luego, una vez que pasamos ya no vimos a nadie más con ellas en todo el viaje). Respeto a los trámites para entrar al país, nos pusimos en una cola en la que el agente de aduana parecía simpático y latino. Efectivamente, era ecuatoriano, estuvimos hablando con él en español y no tuvimos ningún problema para entrar. Estábamos un poco asustados porque veíamos que había bastante gente a la que pasaban al "cuarto oscuro".
   Una vez pasados los trámites cogimos un shuttle compartido que fue dejando a la gente en sus destinos. Nosotros mientras esperábamos a que nos llamaran para montar en el shuttle fuimos al baño y mi mujer se llevó la primera sorpresa: la cisterna del baño era automática!. Ya en el shuttle fuimos casi los últimos y tardamos bastante en llegar al hotel. El conductor era el típico negro grandote de las películas que conducía con una mano y con la otra estaba todo el rato mirando el teléfono móvil. Pasamos un poco de miedo porque iba rápido, pitando a todos y cambiando sin parar de un carril a otro. Además, de vez en cuando bebía el típico café en vaso gigante que debería estar frío y malísimo después de unas cuantas horas. Lo bueno del shuttle (al principio habíamos pensado ir en autobús) fue que nos dejó en la puerta del hotel: The Time Hotel. El hotel estaba muy bien situado en la 49, justo al lado de Times Square. Además, cuando hicimos el checkin nos dijeron que por el mismo precio nos daban una habitación con la cama más grande; nos debieron ver cara de recién casados :-). Lo mismo le debió pasar al conductor del shuttle, ya que cuando bajamos nos dijo que disfrutáramos de la luna de miel y le tuve que decir que no era nuestra luna de miel sino nuestro 5º aniversario. Como anécdota diré que en la habitación mi mujer miró el minibar y sacó algunas botellas para mirarlas (algunas eran muy monas) mientras yo hacía alguna foto a la habitación. Al ir a guardar las botellas me di cuenta que ponía que el minibar era automático y que si sacabas algo más de 20 segundos automáticamente se te cargaba en tu cuenta. Así que cuando bajamos nos paramos en recepción para que nos arreglaran la cuenta :-P, qué vergüenza!.
   Dejamos las maletas y nos bajamos a cenar porque aunque todavía no eran las 21:00, para nuestros cuerpos eran 6 horas más y estábamos hambrientos. Cenamos en el McDonalds de Times Square (que por cierto abre 24 horas al día! y es enorme como sus hamburguesas) y nos fuimos a hacer una pequeña ruta que habíamos preparado sin alejarnos mucho. Flipante es lo único que puedo decir de Times Square de noche con tanta gente, todos haciendo fotos. Nos quedamos con la boca abierta y no podíamos dejar de pasear viendo rascacielos, luces de neon, carteles luminosos y haciendo fotos.




Día 2 (Sábado): Museos
   El sábado nos levantamos temprano y después de desayunar en el típico Starbucks (yo tomé un hot chocolate que estaba muy bueno y una magdalena de chocolate impresionante, y bastante más barato que aquí), nos fuimos a ver el USS Intrepid Sea, Air & Space Museum. Es un museo enorme que está en el portaaviones USS Intrepid. Pudimos ver desde aviones, helicópteros y el interior de un concorde, hasta una visita por los camarotes, el puente de mando o la sala de comunicaciones. Aunque no es el típico museo que suele ver todo el mundo a mi me gustó mucho ya que era distinto y era una oportunidad única para estar en un portaaviones. Por cierto, aceptaban el carnet universitario y nos pudimos ahorrar unos cuantos dólares al hacernos pasar por estudiantes :-P.



   Desde ahí nos fuimos al Guggenheim, puesto que aunque no nos llamaba mucho la atención a ninguno de los dos, la entrada estaba incluída en la New York City Pass que compramos. El Guggenheim nos decepcionó muchísimo. De las 7 plantas sólo estaban abiertas 2 y en poco más de 30 minutos dimos una vuelta y vimos lo poco que había. Menos mal que no tuvimos que pagar nada.


   Comimos en un típico sitio americano con pepinillos gigantes y ensalada de col gratis además de la comida gigante. Luego venía el plato fuerte del día, el Metropolitan Museum of Art. De antemano sabíamos que era imposible verlo el profundidad y en detalle puesto que es muy grande, así que empezamos por la zona egipcia y sobre la marcha íbamos decidiendo por donde ir en función de los planos que cogimos. Vimos muchas zonas distintas aunque al final ya estábamos un poco cansados después de llevar todo el día andando. Aún así el museo nos gustó muchísimo y en total la visita duró más de 3 horas. Qué curioso, en vez del ticket te ponen una chapita para poder acceder al museo. Si esto pasara en España seguro que más de uno las vendería a la salida a mitad de precio!.





   Al salir del MET, por si habíamos andado poco, nos fuimos a dar una vuelta por la zona central de Central Park. Como el día era soleado había mucha gente paseando, descansando, jugando al beisbol,... Recorrimos todo el parque desde la zona este a la oeste y salimos justo en Strawberry Fields donde había gente tocando la guitarra y cantando canciones de los Beatles. Vimos el Dakota donde vivió John Lennon, el lago "The lake" y decidimos que ya era sufiente. Cogimos el metro y en menos de 10 minutos ya estábamos en el hotel descansando un poco y descargando las fotos en el portatil justo antes de bajar a cenar. Esta vez fue en una pizzería, que abundan mucho, y en la que había ensaladas y riquísimos postres tanto para llevar como para comer allí.




   Después de cenar, para aprovechar un poco la noche fuimos a la tienda M&Ms de Times Square. Tres plantas en las que vendían cualquier producto imaginable relacionado con los M&Ms: tazones, bolsas, camisetas, zapatillas, muñecos, ropa interior, mochilas, carteras,... y por supuesto los famosos M&Ms (atención a la foto de los tubos llenos de M&Ms) de los que dimos buena cuenta :-P. Una cosa a destacar en Nueva York es que las tiendas son verdaderos museos, están decoradas con mucho estilo y tienen una colocación muy cuidada. Después de esto al hotel a dormir y descansar que este sólo había sido el segundo día.

jueves, 4 de junio de 2009

Configurar la página por defecto de Tomcat y de una aplicación web

   Cuando instalamos tomcat y lo arrancamos sin cambiar la configuración por defecto, la página principal que vemos cuando nos conectamos a http://localhost:8080 es la típica que muestra que el servidor se ha configurado correctamente:
If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!


   Para nuestras pruebas en casa no hay problema en escribir una url como http://localhost:8080/Mufly-0.2.1/MuflyMain.html, que es justamente la url principal de Mufly, pero si queremos darle un aspecto más profesional y amigable para el usuario hay que evitar el tener que teclear todo eso. Para ello debemos configurar dos opciones.

Cambiar la página inicial del tomcat para que cargue un contexto determinado
   La respuesta la tenemos en las FAQ de Tomcat aunque un poco escondida. Ahí nos indican que en $TOMCAT_HOME/etc/web.xml se encuentra una lista con los archivos que cargará el servidor en caso de que existan y el orden en que lo hará.
El primer paso por tanto es renombrar o eliminar los archivos index.html, index.htm e index.jpg. Y posteriormente crear un archivo estático index.html con el contenido que nos indican, en mi caso sería:
<html>
<head>
<meta http-equiv="refresh" content="0;URL=Mufly-0.2.1/">
</head>
<body>
</body>
</html>
   Con esto conseguimos que escribiendo en el navegador la url http://localhost:8080, el servidor Tomcat nos redireccione automáticamente a http://localhost:8080/Mufly-0.2.1/. Pero aún así no es suficiente.

Definir la página por defecto de un contexto
   Cuando se carga un contexto tenemos que indicar explícitamente la página que queremos cargar. En la mayoría de las ocasiones el usuario no la conoce, y tampoco tiene que hacerlo. La solución pasa por configurar en el archivo web.xml del contexto la página por defecto. En mi caso el archivo es $TOMCAT_HOME/webapps/Mufly-0.2.1/WEB-INF/web.xml y simplemente he añadido lo siguiente:
<welcome-file-list>
<welcome-file>MuflyMain.html</welcome-file>
</welcome-file-list>

   En teoría con esto ya está configurado, simplemente reiniciamos el servidor y debería funcionar pero en mi caso no funcionaba. Las redirecciones o no funcionaban bien o no cargaban la página que yo quería. Me acordé de cuando trabajaba con tomcat hace un par de años, que cada vez que subíamos un .war o hacíamos algún cambio similar había que borrar el directorio de trabajo porque sino los archivos no se desplegaban correctamente ni se leían los cambios. Así que dicho y hecho:
ivan@doraemon:~/apache-tomcat-6.0.18/bin$ ./catalina.sh stop
Using CATALINA_BASE: /home/ivan/apache-tomcat-6.0.18
Using CATALINA_HOME: /home/ivan/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /home/ivan/apache-tomcat-6.0.18/temp
Using JRE_HOME: /usr

ivan@doraemon:~/apache-tomcat-6.0.18/bin$ cd ..
ivan@doraemon:~/apache-tomcat-6.0.18$ cd work
ivan@doraemon:~/apache-tomcat-6.0.18/work$ rm -rf *
ivan@doraemon:~/apache-tomcat-6.0.18/work$ cd ..

ivan@doraemon:~/apache-tomcat-6.0.18$ cd bin
ivan@doraemon:~/apache-tomcat-6.0.18/bin$ ./catalina.sh start
Using CATALINA_BASE: /home/ivan/apache-tomcat-6.0.18
Using CATALINA_HOME: /home/ivan/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /home/ivan/apache-tomcat-6.0.18/temp
Using JRE_HOME: /usr
   Y ahora ya sí, simplemente poniendo en la url del navegador http://localhost:8080 llegamos a la página principal de la aplicación.

miércoles, 20 de mayo de 2009

Mufly: Contabilidad doméstica programada en GWT

   Hace unos meses comentaba que había descubierto Google Web Toolkit y que estaba desarrollando una aplicación con GWT. Hoy os presento Mufly. Es una aplicación que estoy desarrollando para llevar los gastos de casa y que ya está sustituyendo desde enero de 2009 a otra que venía usando desde el 2004.
   La principal novedad y en lo que he centrado el desarrollo es en el uso de etiquetas (o tags). Así, en lugar de tener una transacción y asociarla a la categoría Ropa, por ejemplo, la puedo etiquetar con varias etiquetas como Ropa e Iván. También he implementado la funcionalidad de dividir transacciones (split). El concepto es muy simple y la mejor manera de explicarlo es por medio de un ejemplo. Por ejemplo: Vas a unos grandes almacenes y compras comida, ropa y un regalo. Cuando introduces estos datos en Mufly sólo debes añadir una transacción: Compra en grandes almacenes, el precio 120€ y las etiquetas (por ejemplo las 3 siguientes: regalo, comida, ropa). Entonces, hacemos el split de la transacción para detallar la compra. Alguna comida 60€, Ropa (pantalones y camisas) 40€ y Libro de GWT 20€. Es decir, sirve para desglosar un único gasto.

   El proyecto Mufly está alojado en Google Code y está liberado con licencia GPLv3. El idioma principal tanto de la web como de la aplicación es el inglés porque quiero que llegue a más gente. No obstante, en el wiki tengo traducido al español la página principal. También he creado hace unas semanas un blog en el que iré contando las novedades. Los post están escritos primero en inglés y luego en español para que cualquiera pueda preguntar sus dudas, contar sugerencias,...

   Y respecto al desarrollo, liberé la versión 0.2 en diciembre y estoy trabajando en la siguiente versión. En ella me he centrado sobre todo en la internacionalización de la aplicación además de en distintas mejoras internas y organización del código. De esta manera, cuando la libere estará disponible también en español y en francés (gracias Alex por la traducción). Respecto a esto es muy sencillo implementar nuevos idiomas, simplemente hay que traducir un archivo de recursos y al realizar la conversión de Java a Javascript, GWT generará las páginas correspondientes a los idiomas que utilicemos.

   Os animo a que la probéis y me dejéis vuestro feedback tanto aquí como en el blog de proyecto. Sólo necesitáis un MySQL y Tomcat para desplegar la aplicación y seguir las instrucciones de instalación del Wiki del proyecto.

jueves, 2 de abril de 2009

Los comienzos de un friki... a los 21 meses

   Como cuando mejor aprenden los niños es desde bien pequeños, yo ya he empezado a enseñar a Judith para que se parezca a su padre :-D.

viernes, 20 de marzo de 2009

Habemus Teléfono-Pda

   Los habituales del lugar ya conocen el incidente que tuve con la Pda, así que empece a buscar sustituto. Ahora es complicado encontrar solo pdas ya que la mayoría vienen con teléfono integrado. Estuve mirando algunos modelos de HTC y de HP principalmente, porque no quería cambiar a Symbian. Los HTC libres me parecían algo caros y aunque ha sido un regalo por mi cumple y de navidad que me han hecho mis padres, no quería que se gastaran demasiado dinero. Finalmente encontré una oferta de HP bastante más barata que el precio que aparece en la web y con más accesorios y opciones y la elegida ha sido una iPAQ Business Navigator 614c.

   Llevo con esta PocketcPc con teléfono integrado desde hace más de un dos y estoy muy contento. Lleva windows mobile 6.0 (que ya he actualizado a la version 6.1), cámara de 3 Mpx (aunque no muy buena), wifi, bluetooth y gps integrado, aunque este último no sea tan potente como el receptor externo bluetooth que usaba antes y que todavía conservo. No me ha costado nada adaptarme porque ya veníaa de utilizar windows mobile antes, y ahora lo único es que aparte de agenda, también la uso como teléfono.
En cuanto a las aplicaciones, es una pasada por ejemplo usar la version mobile de google maps junto con el street view, el youtube, ver videos en divx por streaming desde otro ordenador...

   En fin, que aunque sé que mi próximo teléfono tendrá Android instalado, de momento espero que este me dure muchos años.

sábado, 28 de febrero de 2009

¿Parón en el blog?

   El otro día nos contaba Vicente Navarro (aka Super Coco) en su blog, que para el tercer año que empieza tiene menos tiempo libre por diversas circunstancias y que escribirá bastante menos. Tal y como puse en los comentarios de su post es algo que ya me está pasando a mi desde hace unos meses. Últimamente tengo menos tiempo libre en el trabajo (de hecho estamos hasta arriba), en casa no me pongo mucho con el ordenador porque por las tardes estoy jugando con la peque, estoy desarrollando un proyecto personal (del que tengo pendiente contar algo) con Google Web Toolkit, colaboro como editor hablando de linux en un blog, estoy haciendo un par de cursos online para ampliar mis conocimientos de java, estoy estudiando algoritmos para tardar menos de un minuto en resolver el cubo de rubik, por las noches siempre vemos alguna serie,... Como veis demasiadas cosas a la vez.

   En fin, que como dice Vicente en su post, primero hay que poner las piedras grandes y el blog, al fin y al cabo es algo que hago por afición y por lo que no recibo ningún beneficio excepto satisfación personal y unos míseros dolares mensuales por adsense (y que cada vez son menos), y que por lo tanto estoy aparcando un poco. Todo esto no quiere decir que vaya a cerrar el blog ni mucho menos, simplemente que escribiré menos. De hecho tengo unos cuantos artículos en mente que espero ir publicando poco a poco...

miércoles, 17 de diciembre de 2008

Google Web Toolkit, o donde Java se convierte en Ajax

   Desde siempre me ha gustado programar, especialmente en Java. Mi principal problema es que siempre me he centrado en el back office y nunca me he preocupado por las interfaces de usuario. Así, si en algún momento se me ocurría hacer alguna aplicación para algo en concreto, al final desistía porque no iba a ser capaz de hacer una interfaz de usuario decente.

   Hace unos meses que he descubierto Google Web Toolkit y me parece increíble. Para el que no lo conozca son unas librerías de Google para programar aplicaciones web 2.0 pero todo desde Java. Tanto el desarrollo como la depuración la hacemos desde Eclipse y cuando queremos desplegar nuestra aplicación lo que se hace automáticamente es convertir ese código Java a Javascript (Ajax). Además, tenemos la ventaja de que se crean automáticamente distintas versiones de la aplicación para los distintos navegadores y no nos tenemos que preocupar de esos pequeños hacks que siempre hay que hacer para que funcione en internet explorer, firefox, opera... Cuando nos conectamos a la web que hemos creado, ésta detecta automáticamente el navegador utilizado y nos sirve la web necesaria.

   La manera que recomiendo para comenzar con GWT es ir a la Developer's Guide y seguir paso a paso el tutorial que Google ha creado. Es todo muy intuitivo y fácil de seguir y se explica cómo crear una aplicación de ejemplo desde cero. Además se empieza con lo más básico y poco a poco se va añadiendo nueva funcionalidad.

   Yo le he cogido el gustillo y estoy desarrollando una aplicación web de la que hablaré en próximos posts.

lunes, 15 de diciembre de 2008

El regalo friki de este año

   Aunque lo pongo con una semana de retraso, este es el regalo friki que me ha hecho mi mujer este año para mi cumpleaños. Un Potato Vader:

   La única pega es que lo voy a tener que compartir porque a Judith también le ha gustado y de vez en cuando me lo pide y se lo pasa genial poniéndole y quitándole la nariz, orejas, lengua,...

martes, 9 de diciembre de 2008

Cuanto hijo de puta suelto...

   NOTA: Perdón por el post (y por el vocabulario) puesto que no viene a cuento con el blog, es totalmente personal y realmente sólo me sirve para descargar y desahogarme, pero en fin...

   Pues nada, que resulta que este fin de semana, para celebrar mi cumpleaños íbamos a ir al teatro. Cometí el error de entrar demasiado en Madrid con el coche en lugar de dejarlo aparcado en las afueras y coger el metro. Después del atasco y demás ya íbamos con la hora un poco pillada y andando entre la gente o parado en algún semaforo me abrieron el bolso y me robaron la PDA y la iPod :-(. Lo que más me jode fue que pasó en menos de 5 minutos y cuando me di cuenta ya era tarde. Algún hijo de puta fue detrás mío y en cuanto vio la oportunidad, zas!, me cazó. La cartera y el móvil se salvaron, pero el daño ya estaba hecho.
   Lo peor de todo es que la PDA no la va a poder utilizar nadie porque está configurada para que haya que desbloquearla cada vez que se encienda y ni siquiera con un hard-reset se puede eliminar esta protección. Además, no lleva clave sino que va por huella dactilar, así que nada, la tirarán y no podrán usarla. Respecto a la iPod, esta sí la podrán usar o revender en ebay o donde sea... Respecto a la información de las tarjetas de memoria de la PDA, lo único crítico es el archivo de claves del KeePass, que aunque es muy complicado de romper, nunca se sabe, así que ya he cambiado todas las claves y listo, no hay mayor problema.
   Mira que siempre tengo cuidado con todo esto, pero ya se sabe que las prisas nunca son buenas compañeras...

viernes, 17 de octubre de 2008

Colaborando en un proyecto de Software Libre

   Así dicho, con el título del post parece que estoy colaborando en el desarrollo del kernel de Linux o algo similar. Nada más lejos de la realidad. A un amigo, Jose, le apetecía cacharrear un poco con las APIs de Google, y aprovechando que trabaja con Java, Spring, Hibernate y MySQL se hizo una pequeña aplicación Java para sincronizar sus contactos de Gmail (y toda su información asociada) a una base de datos local MySQL utilizando dicha tecnología. Además, decidió publicar el código en Google Code, en donde Google proporciona un SVN para subir el código, un Wiki e incluso un gestor de incidencias. El resultado lo podéis ver en la web del proyecto GDataUtils (así es como lo llamó). El proyecto está liberado con la GPLv3.

   Como sabe que a mi me gustan estas cosas y tenía ganas de que me enganchara, me contó en un par de horas cómo funciona Hibernate y Spring y cómo configurarlo para que yo pudiera comenzar la parte de la sincronización de Google Calendar (aprovechando que ya conocía un poco el API de Google Calendar).

   Para el que no lo conozca o haya programado en Java picándose a mano las queries contra la base de datos, utilizar Spring + Hibernate es simplemente magnífico. Todo son objetos y por ejemplo insertar en una tabla es crear un objeto que representa a esa tabla, hacer set() de los campos y salvar ese objeto. Automágicamente nuestro objeto se salva en la base de datos. Las búsquedas también son muy simples y si todo lo haces bien en el código java no verás ni una sola sentencia sql. Es realmente cómodo programar así, y aunque en un principio cuesta acostumbrarse y hay bastante fallos debido a la configuración de Spring y Hibernate, una vez que le coges el truco el desarrollo es muy rápido.

   Respecto al código, la parte de sincronización de los contactos (desde Google a la base de datos Local) la terminó Jose hace tiempo y funciona muy bien. Además se guarda un log con todas las modificaciones que se realizan por si es necesario volver atrás. Respecto a mi parte de la sincronización de los calendarios y eventos, está casi terminada aunque todavía sin log. El problema es que tengo este proyecto parado desde hace algún tiempo puesto que ahora estoy centrado en otro que os contaré en breve.

   Por supuesto la aplicación al estar programada en Java es multiplataforma. De hecho Jose programa desde Windows y yo desde Linux y ninguno de los dos hemos tenido problemas con el código del otro.

   Si alguno se anima a probarlo os doy los pasos que debéis seguir para configurar todo. El entorno de desarrollo, como no podía ser de otra forma es Eclipse, aunque recomiendo instalar EasyEclipse puesto que incluye un montón de plugins y configuraciones que nos harán la vida más fácil.
  • Instalar MySql 5: Desde linux es tan sencillo como hacer $ sudo apt-get install mysql-server-5.0 mysql-client-5.0.
  • Instalar ant: En EasyEclipse ya está incluído.
  • Crear en mysql un esquema que se llame gdata (o como queramos) y que esté vacío.
  • Configurar el repositorio SVN del proyecto y hacer el checkout. En la web del proyecto tenéis información sobre cómo configurar el repositorio. Además, podéis navegar por la estructura de directorios y archivos y ver los últimos cambios que se han hecho.
  • Editar el archivo config/hibernate.properties y cambiar los parámetros de la conexión a mysql.
  • Editar el archivo config/SpringConfiguration.xml y añadir el nombre de usuario (con @gmail.com) y password para poder acceder a la cuenta de Google. Esta información sólo se utiliza para conectarse a Google y obtener los contactos. No se almacena en ningún sitio y por supuesto nosotros no tenemos acceso a ella. De todas formas el código está ahí para que veáis lo que se hace con esa información. Ventajas de publicar el código :-P.
  • Ejecutar la tarea ant createSchema que se encarga de crear las tablas necesarias en la base de datos.
  • Ejecutar la tarea ant distrib: Creará el directorio target en el que se encuentra la aplicación ya compilada y lista para su ejecución.
  • En target/distrib ejecutar la tarea ant SyncFromGData.
  • Y listo, mirar la base de datos y examinar la copia de tus contactos.

  •    Dicho así, la verdad es que parece muy complicado (a mi me lo pareció la primera vez), pero luego, una vez que lo haces ves que es sencillo. Además, la mayoría de las tareas sólo es necesario ejecutarlas una vez. Puedes lanzar sucesivamente la sincronización puesto que comprueba si los datos ya se han descargado para no duplicarlos. Además, también actualiza los cambios que hagamos en los contactos.

       Si queréis ejecutar la sincronización de calendarios y eventos el proceso es similar (muchos pasos no hay que repetirlos) y sólo tendréis que cambiar la última tarea ant por la de GoogleCalendar.

       Aunque todo esto así parezca que no es útil y que no tiene mucho sentido, a mi me ha servido para conocer Spring y Hibernate, me ha abierto un mundo nuevo que desconocía y me he actualizado porque como he dicho alguna vez me quedé en Java 1.4.2 y hacía bastante que no programaba en serio.

       Lo realmente interesante de todo es que está realizado completamente con software libre: Google proporciona el SVN para el código, Spring, Hibernate, MySql, Eclipse... Todo es software libre. Además en mi caso, con Linux, hasta el sistema operativo. Lo único que quedaba era Java y hace ya algún tiempo que Sun lo liberó con licencia GPLv2.

       Si alguien se anima a desarrollar la sincronización de GoogleReader, GoogleNotebook,... lo que sea, que me lo diga y vemos cómo empezar.
    ¿Alguna duda?

    jueves, 9 de octubre de 2008

    El injusto canon de los discos duros y cómo evitarlo

       Como comenté el otro día, he ampliado el raid 1 de mi servidor de backup puesto que se me estaba quedando pequeño. Cuando me puse a buscar discos duros tenía en mente gastarme como mucho 55-60€ por disco duro. Al principio miré en la web de PcBox puesto que me parece que tienen buenos precios y he comprado bastante hardware y nunca he tenido problemas. Mi sorpresa vino al ver el precio del mismo modelo de disco duro:

       Como podéis ver, es exactamente el mismo modelo de disco duro pero con una diferencia entre el maestro y el esclavo de 21,03€. Según se aprobó, el canon para los discos duros es de 12€ + IVA (13,92€) y éste no se aplica a los llamados discos duros maestros (los que vienen de fábrica instalados en el ordenador). Llamé por teléfono a PcBox y pregunté si podía comprar 2 discos duros maestros para pagar menos por ellos y la respuesta del dependiente fue: "Sí, no hay problema, siempre que me compres los dos ordenador completos. Sino, te los tengo que cobrar a precio de disco esclavo". Además, me parece que PcBox quiere hacer más negocio con los discos duros porque en lugar de subirles el precio 13,92€ se lo ha subido 21,03€ y supongo que la diferencia se la quedan ellos.

       Obviamente pagar por algo que cuesta 55€ casi 14€ más (¡¡un 25% del precio!!) para que Ramoncín, Tedy y demás gente de esa calaña sigan viviendo del cuento, no me parecía normal, así que busqué otras alternativas. Hablando con algunos compañeros y buscando un poco se pueden encontrar tiendas en la red donde todavía venden discos duros sin canon. Además, pude hacer la reserva por teléfono y acercarme a recoger el disco en mano pagando sólo el coste del disco. En mi caso cada disco costó 57,5€ y en total me gasté 115€ frente a los 155€ que me habría gastado en PcBox. Así que ya sabéis, si queréis ampliar el hardware buscad un poco puesto que os podéis ahorrar una buena cantidad de euros que no van a la saca de los de siempre...

    jueves, 2 de octubre de 2008

    Ampliando un raid 1 en linux

       Resulta que el raid 1 que monté en mi servidor de backup estaba al 96% de sus escasos 60GB. De hecho, la última vez que lancé el backup se me llenó y tuve que estar borrando archivos y arreglando el estropicio a mano.
    shian:~# df -h
    S.ficheros Tamaño Usado Disp Uso% Montado en
    /dev/md0 56G 50G 2,6G 96% /mnt/raid

       Así, me decidí por un par de discos de 320GB y el pasado fin de semana estuve haciendo el cambio. El proceso es muy sencillo y no tiene ningún truco ni paso especial que haya que realizar. Como ya he puesto varios tutoriales sobre el raid 1, lo único que voy a comentar son los pasos que seguí por si alguien necesita ampliar el suyo pero sin mucho detalle. Para información adicional os remito al artículo original del raid 1 en linux.
  • Conectar los discos y particionarlos.
    shian:~# fdisk -l

    Disk /dev/hdf: 320.0 GB, 320072933376 bytes
    255 heads, 63 sectors/track, 38913 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Disk /dev/hdf doesn't contain a valid partition table

    Disk /dev/hdh: 320.0 GB, 320072933376 bytes
    255 heads, 63 sectors/track, 38913 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Disk /dev/hdh doesn't contain a valid partition table
  • Crear el nuevo dispositivo del raid. Como el raid anterior era /dev/md0, este nuevo será /dev/md1. Armarse de paciencia mientras dura la creación del raid. En mi caso fueron más de 2 horas.
    shian:~# mdadm --create /dev/md1 --verbose --level=1 --raid-devices=2 /dev/hdf1 /dev/hdh1
    mdadm: size set to 312568576K
    mdadm: array /dev/md1 started.

    shian:~# cat /proc/mdstat
    Personalities : [raid1]
    md1 : active raid1 hdh1[1] hdf1[0]
    312568576 blocks [2/2] [UU]
    [>....................] resync = 0.0% (182272/312568576) finish=142.7min speed=36454K/sec
  • Formatear el raid y montarlo en un nuevo directorio. Fijaos en el tamaño disponible para datos. De los 294GB teóricos, sólo 279GB están disponibles, el resto están reservados para los metadatos e información necesaria del raid 1.
    shian:~# mkfs.ext3 /dev/md1

    shian:~# mkdir /mnt/raid_new
    shian:~# mount /dev/md1 /mnt/raid_new/

    shian:~# df -h
    S.ficheros Tamaño Usado Disp Uso% Montado en
    /dev/md0 56G 50G 2,6G 96% /mnt/raid
    /dev/md1 294G 191M 279G 1% /mnt/raid_new
  • Copiar todos los datos del antiguo raid al nuevo. Es necesario asegurarse de que no hay ningún proceso en ejecución que pueda modificar los datos mientras los copiamos. En casa es sencillo, pero en entornos con más usuarios habría que denegar las conexiones entrantes o restringirlas de alguna forma.
    shian:~# cp -a /mnt/raid /mnt/raid_new

    shian:~# df -h
    S.ficheros Tamaño Usado Disp Uso% Montado en
    /dev/md0 56G 50G 2,6G 96% /mnt/raid
    /dev/md1 294G 50G 230G 17% /mnt/raid_new
  • Como paso final, es necesario actualizar los archivos /etc/fstab y /etc/mdadm/mdadm.conf con la información del nuevo raid y eliminar las entradas correspondientes al antiguo.

  •    Una vez hecho lo anterior podemos apagar la máquina, desconectar los discos duros antiguos y arrancar de nuevo. Si todo ha ido bien, el sistema debería arrancar sin mostrar ningún error y en el mismo punto de montaje deberíamos tener disponible el nuevo raid. Ahora ya sólo nos queda empezar a llenar de nuevo el raid y dentro de dos o tres años repetir el tutorial pero esta vez con discos duros de un par de teras... ;-).

    sábado, 13 de septiembre de 2008

    Porqué nunca utilizaré windows vista

       Empezamos por el final y luego hacemos un flashback y cuento la historia completa. No pienso utilizar windows vista nunca. En mi casa no va a haber un ordenador con ese "sistema operativo" (si se le puede llamar así sin menospreciar al resto de sistemas operativos que sí lo son).

       Resulta que el portatil de mi padre dijo basta y me encargó la tarea de buscarle uno nuevo que no fuera muy caro y que no tuviera que actualizar en mucho tiempo. Después de mucho buscar encontré una oferta muy buena (más de 500EUR de ahorro) por un Dell XPS 1530 con unas características muy completas. La única pega, como no, el sistema operativo: Windows Vista. Mi padre me dejó el portatil durante una semana para probarlo y darle caña a ver qué tal se comportaba y en cuanto a hardware la verdad es que me ha encantado. Pero eso sí, en menos de una semana he terminado asqueado de windows vista. A continuación voy a poner mis impresiones sobre el sistema operativo:
  • Velocidad apagado/arranque: Una de las cosas que leí cuando salió Vista al mercado es que la velocidad de arranque y apagado se había mejorado respecto a XP. La verdad es que la primera vez que lo apagué y encendí me dió una sensación muy buena, pero luego todo se esfumó. Por defecto, cuando pulsamos en el icono de apagar, lo que realmente estamos haciendo es hibernando el equipo. Si queremos apagarlo completamente tenemos que seleccionar la opción concreta en el menú de opciones de apagado. Es una buena jugada por parte de Micro$oft: En el botón que va a pulsar el 95% de los usuarios en lugar de poner la opción de apagar el equipo, ponemos la de hibernar, y así parece que apaga y enciendo muy rápido. Usando la opción de hibernar, hasta mi antiguo Pentium 2 apagaba y arrancaba rápido. Así que, señores de Micro$oft, no nos vendan la moto.
  • Actualizaciones de seguridad: Como comenté el año pasado, en el pueblo hay una conexión wifi gratuita. Una de las mañanas en las que estaba en el parque leyendo el correo y los feeds, windows vista se descargó 24 actualizaciones de seguridad. Luego por la tarde, ya en casa, al apagar el equipo me pidió confirmación para instalarlas. Tardó más de 20 minutos en hacerlo. Pero ahí no acaba la cosa. Por la noche, cuando encendí de nuevo el portatil terminó de configurar las actualizaciones y reinició dos veces la máquina. En total fueron casi 10 minutos de reloj con cara de tonto delante del portatil sin poder hacer nada.
  • Service Pack 1: Ya de vuelta a casa, la actualización del Service Pack 1 fue tremenda, prefiero ni contar lo que tardó.
  • Confirmaciones: Otra de las supuestas novedades de windows vista es que gestiona mejor los permisos y la seguridad. Sinceramente creo que se han pasado. Aparecen confirmaciones para ejecutar programas, instalarlos, borrar archivos, desinstalar programas,... Después de un rato de uso ya ni leía los mensajes y siempre aceptaba las acciones. Sé que se puede deshabilitar, pero entonces pierde toda su gracia y no estamos tan "protegidos".
  • Lentitud en el procesado de archivos: Aunque es un problema ya conocido, lo noté especialmente al preparar el portatil para llevarmelo al pueblo y descomprimir un par de zips con multitud de archivos. Fue desesperante.
  • Explorador de archivos: Para mi gusto una gran cagada. La nueva organización es bastante mala, han eliminado el botón para volver a la carpeta anterior, la barra de direcciones no me gusta nada,...
  • Programas que no funcionan: Con Eclipse tuve multitud de problemas para que funcionara y después de buscar en internet tuve que activar una opción para forzar la ejecución como administrador (con el consiguiente cartelito de confirmación). Con algún otro programa no tuve tanta suerte y sencillamente no funcionó.
  • Aero: Ya mostré un video comparativo de Aero y CompizFusion hace unos meses. Sin comentarios.

  •    Sé que se me va a tildar de fanboy de Linux, pero sinceramente, si tengo que aprender a manejar una nueva interfaz, buscar nuevos programas porque los antiguos no funcionan, desaprovechar completamente mi hardware y tener que renovarlo porque el sistema operativo consume muchísimo,... me paso a Linux y aprendo algo que me va a servir en el futuro y me va a dar mayor rendimiento. ¡Anda!, si ya me pasé a Linux hace más de año y medio y vivo tan feliz... :-P.