Master Diver

Esta tarde me he pasado por el club de buceo y ya tenían las titulaciones del último curso que hice, el de Estrés y Rescate más Oxigenación y Primeros Auxilios del mes pasado, con el que ¡ya soy Master Diver! :-D

Master Diver (que no Dive Master, el orden de los factores aquí si que altera el producto) es el nivel más alto en buceo deportivo antes de decantarse por seguir con buceo técnico (profundidades > 40m, bibotella, mezclas de gases más allá del Nitrox como Trimix) o por la enseñanza y liderazgo (DiveCon, Instructor, etc.) Para llegar a este nivel hace falta cinco especialidades: Stress & Rescue, Buceo profundo, Navegación, React Right (Oxigenación y Primeros Auxilios) y una quinta de libre elección; y haber hecho más de 60 inmersiones (llevo setenta y pico).

Y para celebrarlo y si nada ni nadie lo impide, mañana toca nocturna con un amiguete que aún no ha probado a bucear de noche. :-) Seguramente nos iremos allá a las 17:30, para meternos en el agua sobre las 18 a media luz y que se nos haga de noche poco a poco bajo el agua. La cosa promete.

csshX

[spanish]Hace un tiempo escribí un artículo sobre el Cluster SSH.

Ahora que tengo un Mac también en el trabajo y vuelvo a trabajar con clusters me he puesto a buscar equivalentes para MacOS X, y mira tu por dónde un tío se ha currado el csshX, una re-implementación de la misma idea, esta vez en perl en lugar de TCL/TK y con el Terminal.app del OS X.

Funciona de maravilla.[/spanish]

[english]Some time ago I wrote an article about Cluster SSH.

Now that I’m using a Mac at work too and am working with clusters again, I’ve googled for a MacOS X-based program similar to cssh. And of course, there’s a guy who has done it! csshX is a different implementation of the same idea, this time written on perl instead of TCL/TK and using OS X’s Terminal.app.

Works like a charm.[/english]

Productividad + Android

Hace tiempo que no escribo nada sobre el tema de la productividad personal, ZTD y demás que empecé a intentar aplicar hace unos meses.

Bueno, han pasado muchas cosas, empezando por dejar el curro de Madrid (principal motivo por el que empecé a interesarme por estos temas), mudanza a Alicante, obras … todo esto no quiere decir que lo haya dejado, si no que creo que a la fuerza he llegado a un equilibrio minimizando el esfuerzo pero consiguiendo resultados. No estoy aplicando ZTD, simplemente a base de leer y ver cosas aquí y allá me estoy organizando un poco mejor. Aunque no descarto cuando acabe de estabilizarme en Alicante retomar el ZTD al 100%.

Después de probar algún gestor de tareas GTD/ZTD para Android y que no me convenciera (por la falta de sincronización con el ordenador de casa) al final mi método actual es bastante Google-céntrico: GMail + Calendar + Docs. Si, si, Google va camino de convertirse en el Big Brother orwelliano… en fin… el caso es que me funciona, sobre todo por el nuevo participante en el juego, mi HTC Magic con Android.

Mi método actual consiste en:

  • Correo: Gmail. El gran cambio ha sido organizar el inbox. Mínimamente. Yo era de tenerlo todo ahí a saco, sin borrar nunca nada y casi sin carpetas. Ahora aparte de las carpetas para las 3-4 listas de correo a las que estoy suscrito, tengo una carpeta para archivar temas viejos y cerrados. Y la uso, de forma que en el Inbox sólo me quedan las cosas que no he acabado de cerrar. Simple. En el Mac uso el Mail que indexa de maravilla los correos con lo que aunque tenga una única carpeta de archivo, si tengo que buscar algún correo viejo lo encuentro sin problemas, y en el Android uso la aplicación de GMail. Sin complicaciones. Y por supuesto, Inbox (cuentas) independientes para temas personales y de trabajo.
  • Tareas: Google Calendar. Aparte del Inbox que me ayuda a recordar temas sin cerrar, uso mucho Google Calendar para apuntar citas, reuniones, cosas que tengo que hacer tan chorras como ir a comprar algo que se que se me va a olvidar, etc. En Mac uso iCal y en Android la aplicación nativa de Google Calendar. Calendarios independientes para personal y trabajo, aunque vea los dos mezclados (con diferentes colores) para tener un «contexto» de lo que se me viene encima el día/semana siguiente.
  • Notas: Google Docs. Para la lista de la compra y detalles de ese estilo que la descripción de Calendar se quede corta o no sea apropiada, creo un pequeño documento en Google Docs y desde Android accedo con el GDocs Notepad, que se encarga de sincronizar estas notas entre el móvil y Google.
  • Documentos: Dropbox. Hacía tiempo que lo quería probar y llevo usándolo hará tres o cuatro semanas. Lo tengo configurado en el ordenador del trabajo y en el de casa, dos carpetas «personal» y «trabajo» cada una con sus «Documents» y demás, y en $HOME/Documents de cada sitio enlazada la que toque. Sencillo y funcional, y lo tengo todo sincronizado en todo momento. Y desde el Android, aunque no hay aplicación nativa, pero se puede acceder bastante bien a todo con la web para móviles.

Como veis sencillo y fácil, y mucho Google salvo por el Dropbox. Muy importante el hecho de con el Android tenerlo todo a mano, en cualquier momento y en cualquier sitio. Por ahora me sirve y el hecho de que sea tan sencillo me ayuda a seguirlo a rajatabla y no dejarlo, que me conozco. ;-) Y lo importante es que me funciona.

nginx, memcached y HTTP 304

[spanish]Estoy trabajando en la arquitectura de servidores para una nueva versión de un portal web. Va a estar basada en servidores Amazon-EC2, con un front end con nginx y varios tomcat de back end. Los servidores nginx harán de proxy-caché para ciertas páginas dinámicas (resultados de búsquedas, consultas a los web-services internos) y también tendrá una caché de páginas estáticas gestionada por nosotros en código con memcached.

Al empezar a integrar memcached en esta estructura vi que ya no se enviaban respuestas HTTP 304, todo lo que se servía del memcached eran HTTP 200. Después de usar el comodín de Google parece que es el resultado esperado, ya que memcached no almacena la fecha de modificación de las páginas para poder servir la cabecera HTTP «last-modified», con lo que los clientes tampoco envían la «if-modified-since» y no hay 304. Así que le he metido mano al código, el parche está aquí.

Estoy bastante sorprendido de lo sencillo que ha sido y lo simple que es el parche, ya que no he tenido que desarrollar la lógica para ver si la página en memcache es más reciente que la que tiene el cliente en su caché y devolver 304 ó 200. Una vez que desde nginx-memcached devuelvo la cabecera «last-modified», parece que nginx se encarga el sólo de comparar cabeceras y devolver 304 ó 200 según corresponda. ¡Y funciona!

He estado probando esto esta mañana en el trabajo y parece que todo funciona como toca. Mañana haré más pruebas y modificaré el parche si hace falta. Mientras tanto si alguien se anima a probarlo y le funciona (o no), soy todo oídos. :-)[/spanish]

[english]I’m working on the server architecture for a new web portal. It’s going to be Amazon-EC2based and will have a nginx front end to several tomcat back end servers. The nginx servers will proxy-cache some dynamic pages (search results, internal web-services queries) and will also have a static page cache based on memcached.

While starting to roll memcached into the solution I noticed that I stoped receiving HTTP 304 responses, everything served off memcached where 200. After digging a little bit on Google I found out it was the expected behavior as memcached doesn’t store the timestamp (last-modified) of the files. So I’ve given it a try and developed a quick patch. You can find it here.

I’m quite puzzled at the simplicity of the patch, as I didn’t need to code the logic to check if the cached page is more recent than the client’s one and return 302 or 200. After successfully returning the last-modified header from memcached, nginx seems to do the rest of the job somewhere on its own!

I have tested the patch today at work and everything seems to work OK. Will do more extensive testings tomorrow and update the path if needed. In the meantime, if someone gives it a try and works for them (or doesn’t), I’m waiting for your feedback.[/english]