Cursos del CTA 2008-2009

Hoy mismo, me ha llegado un email avisándome que ya está disponible el calendario de cursos del Centro de Tecnologías Avanzadas de Zaragoza.

En el calendario del programa TIC hay cursos de administración de Linux y Windows Server, networking(estoy hablando de redes :P), seguridad, gestión de proyectos...

Pero cómo era de esperar los primeros que estoy mirando son los de programación :), y parece que se repiten bastantes del año pasado. De los que he estado viendo, me interesan:

El de Java ME y el de Spring+Hibernate+Struts2, el primero salirme un poco del sólo web y el segundo más que nada por ver Struts2. Otro que me parece medio interesante es el de Java EE para ver algo de JMS, EJB3 e incluso de Struts2 que además incluye gratuito el examen de certificación SCJP(¿no sería mejor un curso de preparación para esto?); pero me parece un poco coñazo ver Servlets y JSPs.

Habrá que ver si puedo sacar tiempo durante 2 o 3 semanas para asistir a alguno de estos curso o me vuelvo a quedar sin hacer ninguno, ya que parece que los autónomos también podemos inscribirnos :)

También hay algunos cursos más de Java, además de PHP+MySQL(también incluye examen de certificación a PHP5) y de .Net; o incluso de CICS y SAP(si lo que quieres es ganar más dinero programando...).

Aún siendo cursos de programación que, además de ser gratuitos, no sacan mala pinta; para mi falta algún curso sobre algún framework algo más novedosos/ágil en cuanto a desarrollo web tipo Ruby on Rails, Grails, Zend Framework, Django, Symfony... aunque en el tiempo que sigo los cursos que salen del CTA, no suelen destacar por ser early adopters y sí por ser bastante enterprisey.

Por cierto, que en el boletín de Septiembre, ya salen los cursos disponibles para octubre en los que ya se puede hacer la pre-inscripción.

Los eventos que vienen

Parece que tras el verano se van acumulando eventos en España más o menos interesantes para los que vivimos de esto del desarrollo web, aquí van los eventos que conozco y que estoy pensando en asistir antes de final de año:

Google Developer Day (25 de sepiembre en Madrid) a éste ya tengo asegurada la asistencia, gracias a las invitaciones por ir a charlar del Summer of Code en la Campus Party.

Fundamentos Web (27 y 28 de octubre en Gijón) del que siempre me han hablado bien, además que estando en modo turista me encantó la ciudad, pero no me termina de convencer el programa junto al precio del evento.

Conferencia Rails (13 y 14 de noviembre en Madrid) para el que tengo los días marcados en el calendario y espero no tener problema para ir.

Congreso de Webmasters (21, 22 y 23 de noviembre en Madrid) que en principio no me termina de convencer, quizás por parecer estar más orientado al lado de negocio que al lado técnico y siendo que la semana anterior es la conferencia rails, es muy probable que se caiga de mi agenda.

Otro evento al que asistiré sí o sí ;), aunque sin fecha todavía planeado para el 9 de Octubre en Madrid, es a la presentación de la plataforma para la creación de redes sociales tog.

¿Alguien conoce más eventos interesantes para desarrolladores?

Geolocalizar una IP con GeoLite City

GeoLite City es la versión gratuita de Geo City, sirve para conocer la localización aproximada de una IP. Como se puede imaginar, tiene muchas aplicaciones, por ejemplo a partir de los visitantes online en una web tener un mapa o una estadística por países o... Hay que destacar también otra funcionalidad interesante, que es poder consultar la información de un dominio igual que una IP.

Para utilizar este producto, que como es de imaginar tiene menos detalle de datos respecto a la versión de pago, podemos descargarnos los csv y cargarlo en nuestra base de datos, o utilizar un fichero .dat binario con un API open source disponible para varios lenguajes de programación(en mi caso el API Java).

Un ejemplo básico con el API de java, para conocer dónde están los servidores de danilat.com ;):

try {
LookupService cl = new LookupService("mypath/GeoLiteCity.dat", LookupService.GEOIP_MEMORY_CACHE );
//Se podría hacer cl.getLocation de una IP de la misma forma
Location location = cl.getLocation("danilat.com");
System.out.println("País: " + location.countryName +
"\n latitud: " + location.latitude +
"\n longitud: " + location.longitude));
cl.close();
}
catch (IOException e) {
e.printStackTrace();
}

Y ahora un poco de crítica, los atributos de la clase Location están como public(en algunas otras también y en otras usan set/get...), también hay dos clases que sólo tienen métodos estáticos con nombre en minúscula, supongo que para diferenciarlas como clases de utilidades... ¿no sería mejor llamarla por ejemplo TimeZoneUtils que timeZone, y así no salirse de la convención de que los nombres de las clases comiencen con mayúscula?

En conclusión, un producto con funcionalidades interesantes, pero con una implementación del API (de Java) que deberían retocar.

Grails Include Plugin 0.3, acabando el GSoC

Hace días que no escribo sobre mi proyecto del Google Summer of Code, y eso que ya había puesto disponibles un par de releases del Include Plugin de Grails. Sólo lo he ido anunciando en la lista de correo de Grails para ir recibiendo feedback y mejorarlo.

En este momento, que estamos ya en fase de evaluación y en teoría lo que hagamos los participantes del GSoC ya no vale, es una versión casi definitiva, ya que al menos la forma de usarlo en principio ya no va a cambiar.

En las versiones 0.1 y 0.2 se utilizaban dos tags, por cierto que al taglib hubo que añadirle un namespace(inc) por distribuirlo como un plugin, inc:includeUrl y inc:includeController que en esta versión están como deprecated y no se recomienda su uso.

Ahora únicamente es necesario el tag inc:include, que de inicio era mi idea pero chocaba con otro include fantasma que hay en Grails, por estar en el mismo namespace, y al añadirle el nuevo namespace simplemente se me olvidó :P.

En la lista me propusieron que hiciera esa modificación, lo que significaba sacar la versión 0.3. Mientras que al anunciar en la lista la última versión, ya que me han críticado el código para que mejore el rendimiento y haberme dado gran parte de la solución, tocará sacar al menos una nueva versión con esas mejoras. Las grandezas del open source, si alguien más se anima, las críticas son bienvenidas ;).

Hablando ya de la instalación y su uso, es sencillísimo:

Como está en el repositorio oficial de plugins, para instalarlo sólo debemos ejecutar:

grails install-plugin include.

Para hacer includes de otras acciones podemos llamar a una accion de un controlador con unos parámetros, por ejemplo insertar las últimas 5 noticias en una vista:

<inc:include controller="news" action="last" params="[number:5]"/>

Que también podríamos hacer usando la url que devuelve esa acción, con una mayor probabilidad de un cambio en el mapeo de la url:

<inc:include url="/news/last?number=5"/>

Otra de las cosas que pienso es interesante es el poder insertar contenido estático dentro del directorio web-app, de por ejemplo un html, a los que anteriormente no había una forma directa de acceder:

<inc:include url="/test.html"/>

En definitiva, es un plugin que facilita parte del trabajo en webs tipo portal, evita la necesidad de crear taglibs para simplemente mostrar datos o de repetir código en los controllers. En fin, espero aprobar la evaluación y así llevarme la camiseta!! ;)