En el blog de Linking Paths han ido escribiendo mucho sobre tog, y desde la semana pasada es pública la versión 0.2(licencia MIT).
¿Pero qué es tog?
Es una plataforma open source extensible para crear redes o aplicaciones sociales bajo Ruby on Rails. Da la base social casi sin esfuerzo y se puede añadir funcionalidad mediante la arquitectura de plugins, usando los existentes o creándolos nosotros mismos, e incluso personalizar los plugins para nuestras necesidades puntuales. Quien pueda pensar en un clon de Ning, anda desencaminado, esto es una plataforma para desarrollar y no un servicio(aunque sí se podría crear un clon con tog
)
Para dar a conocer la plataforma, se ha organizado un evento de introducción el día 9 de octubre en Madrid, para el que obviamente ya me he registrado
, el evento es gratuito pero las plazas son limitadas. Si te interesa ver la evolución de tog, no dejes de seguir su blog, que es donde se publicarán las novedades que vayan surgiendo.
Como opinión personal, después de un tiempo utilizando la plataforma dentro de Linking Paths, estoy convencido en que es una buena elección para posibles proyectos sociales que me surjan. Además, tengo pensado usarlo en un proyecto personal, si lo empiezo algún día(que visto lo visto no será en breve
).
Posted by Dani on Monday, September 29th, 2008
Ayer fué un día realmente largo e intenso, ya que fuí al Google Developer Day 2008 en el Parque de Atracciones de Madrid con Alberto Gimeno y Juan Luis Belmonte. Al llegar se podía ver que iba a haber muchos asistentes, luego dijeron que entorno a 400 desarrolladores, entre los que encontré a algún viejo conocido y muchas caras que me resultaron familiares y no supe ubicar.
Nada más llegar y acreditarnos, nos esperaba un almuerzo para cargar pilas y luego pasamos al auditorio, dónde nos dió la bienvenida Chris DiBona con su móvil Android en la mano
, tras la que se dividió a la gente en las diferentes charlas y talleres programados. Yo me fuí de charlas mientras que Juan Luis y Alberto se fueron al turno de mañana del taller de App Engine, donde al parecer terminaron presentando debug_mode=on(fuera del concurso de los talleres).
En el auditorio comenzó Mano Marks con una charla de introducción a App Engine, no dijo nada especialmente nuevo sobre App Engine, pero que resultó igualmente interesante y para mi se complementaba bastante bien con el taller práctico.
Seguidamente Mike Jennings nos dió una charla sobre Android, que fué igual de amena, aunque profundizando algo más, que la que dió ya en la Campus Party. Mostró algunos comandos y el plugin para Eclipse, alguna demo de las cosas que se pueden hacer…
Después cambié de sala para ver a Sumit Chandel hablando sobre GWT, donde introdujo a los asistentes a éste framework Java para desarrollar aplicaciones ricas ajax y estuvo enseñando pantallazos con código para hacerse una idea de cómo se trabaja.
Al fin nos volvimos a reunir para parar a comer, era un buffet libre al que llegamos en el momento que más cola había, de la que la parte buena fue que sobró comida y la mala, incomprensiblemente, ¡¡no había café!!.
Después de comer queríamos asistir a la charla de orientación de start-ups, pero al llegar ya había gente saliendo de la sala por estar más que llena(en esa misma sala para la charla de GWT también acabó mucha gente de pie). Entonces acabamos viendo parte de una charla donde unos desarrolladores nos contaron su experiencia con gadgets sociales(usando opensocial).
Por la tarde quería ir al taller de App Engine, al que terminaron animándose de nuevo Alberto y Juan Luis. Empecé siguiendo el taller, pero acabé pendiente de otras cosas por culpa del interés de los ingenieros de google (que no habían visto la presentación de la mañana) en ver las funcionalidades de debug_mode=on, los problemas que estaban teniendo con la cuota de CPU… que por cierto pareció que les gustó bastante(además de ver que había artículos en español de App Engine).
Después llegó ya la sesión de cierre donde se respondieron algunas preguntas, se entregaron los premios de los talleres y Chris DiBona siguió jugando con su móvil Android.
Al final tuvimos una fiesta con barra libre, picoteo, máquinas recreativas, dj y la lanzadera del parque de atracciones hasta las 22:00.
En fin, el evento fué una demostración de que a google le importan los desarrolladores, o al menos que tengamos el concepto de empresa molona
, y sigamos usando o usemos más sus productos para desarrolladores.
Hay más información en el blog para programadores de google, también un par de álbumes en picasa y fotos en flickr del evento.
Posted by Dani on Friday, September 26th, 2008
debug_mode=ON es una red social para los profesionales del mundo del desarrollo en la que están trabajando Alberto Gimeno, Ignacio Andreu y Juan Luis Belmonte; y que ya han puesto como beta pública.
Por el momento podemos añadir contactos, participar en grupos, crear grupos de nuestro interés, participar en los foros de los grupos y escribir artículos(con los que podemos ganar dinero introduciendo nuestro código de google adsense). Para hacerse una idea de qué tipo de grupos se pueden crear, ahora nos podemos encontrar grupos de desarrollo web, SEO, usabilidad, java, ruby on rails, php, metodologías ágiles, java-colombia, freelance, open solaris… está abierto a todo lo que esté relacionado con el desarrollo de software, hay un artículo con más información de qué es debug_mode=on.
La red social está siendo desarrollada con Python y Google AppEngine, pero parece que el servicio de google todavía no está muy afinado y han tenido problemas con la cantidad carga que están recibiendo estos días: han aparecido en javaHispano, en varios blogs, está en cola de varios agregadores de noticias(en alguno ya en portada) y para terminar en la portada de barrapunto. Evidentemente esta situación es una mala imagen para AppEngine, y visto lo ocurrido, por el momento descartaría desarrollar proyectos que no fueran de juguete hasta que no saquen el servicio de pago, con lo que el servicio y soporte se suponen que serán mejores.
Sobre el proyecto, pienso que era necesario un desarrollo de este tipo, ya que muchos de los portales en español de siempre, excepto algunos foros, parece que están congelados y que no tienen demasiada participación de los usuarios. En este sentido, a mi me parece un soplo de aire fresco, y como he podido ver el ritmo que llevan en el desarrollo desde las primeras semanas(haciendo un poco de beta-tester
) estoy seguro que no tardarán en añadir nuevas funcionalidades.
Esperemos que se vaya creando comunidad alrededor de estos grupos, sea una red social útil y de las de paso diario obligado; yo ya he empezado a participar
Posted by Dani on Wednesday, September 24th, 2008
Es bastante habitual en el desarrollo web que, teniendo un sistema de pestañas, se requiera marcar la que corresponde a la actual. Esto habitualmente se realiza con listas y CSS, luego comprobando programáticamente qué se está ejecutando y aplicar el estilo al elemento correspondiente.
<ul>
<li class="act"> <a href="...">News</a></li>
<li><a href="...">Forum</a></li>
...
...
</ul>
Tanto con Grails como con cualquier framework podemos acceder a la petición en la vista, comprobar los parámetros para ver qué elemento de la lista es el actual, y en cada elemento de la lista comprobar si se la acción está relacionada con dicho elemento para asignarle el class. En fin, nuestra vista quedaría algo así:
<ul>
<li ${(params.controller=='news' &&(!params.action || params.action=='index'))?'class="act"':''}><g.link controller="news">News</g.link></li>
<li ${(params.controller=='forum' && params.action=='last')?'class="act"':''}><g.link controller="forum" action="last">Forum</g.link></li>
...
...
</ul>
Pero gracias al sistema de taglibs de grails, lo podemos hacer de forma mucho más limpia y más DRY.
Creamos un taglib, por ejemplo TabsTagLib:
grails create-tag-lib tabs
Ya se nos habrá creado en nuestrapp/grails-app/taglib/TabsTagLib.groovy, donde deberemos añadir una closure que actuará como nuestro tag para esto, el código quedará algo así:
class TabsTagLib {
def actualTabWithLink={ attrs, body ->
def selectedClass=(attrs.controller==controllerName && (attrs.action?attrs.action==actionName:true))?'class="act"':''
out << '<li '+selectedClass+'>'+ g.link(attrs){body()}+'</li>'
}
}
Y nuestra visa pasaría a quedar así:
<ul>
<actualTabWithLink controller="news"> News </actualTabWithLink>
<actualTabWithLink controller="forum" action="last"> Forum </actualTabWithLink>
...
...
</ul>
La explicación rápida del taglib(para más información la documentación de taglibs de Grails):
(attrs, body ->) attrs son atributos del tag(controller, action…) y body el cuerpo dentro del tag(en nuestro caso News o Forum).
Comparamos controllerName y actionName con los atributos pasados al taglib, attrs.controller siempre y el attrs.action éste último sólo si tiene valor. Si el resultado es que es el actual asignamos a selectedClass class=”act”, si no es así una cadena vacía.
Como desde un taglib podemos acceder a otros taglibs, llamamos al taglib g.link de forma parecida a la vista, en este caso le pasamos todos los atributos y el cuerpo que vengan de la llamada a actualTabWithLink g.link(attrs){body()}, que nos devolverá la cadena del link.
Por último, sólo debemos concatenar la cadena del link a los tags li con el class=”act” en el controller/action actual y hacemos el append a la variable implícita out, que no es otra cosa que el Writer de salida.
En fin, que esta es una forma simple de aprovechar los taglibs de Grails para tener un código mucho más legible en las vistas y más DRY. Veáse también que de ésta forma no debemos preocuparnos de los cambios de mapping de URLs ni de si un acción es la de por defecto en un controller, que entonces no es necesario especificarla en la URL para que se ejecute. También hay que tener en cuenta que para éste caso sólo controlamos los controllers y actions, nos encontraremos en casos dónde podríamos necesitar controlar algún otro parámetro.
Posted by Dani on Monday, September 22nd, 2008
Descubro gracias al blog de Ferrán Rodenas, un recopilación del Top 100 de blogs sobre desarrollo de software.
Para confeccionar el ranking se han tenido en cuenta varias estadísticas: el page rank de Google, la autoridad en Technorati, el ranking de Alexa, los hits en google y los comentarios de los últimos 10 posts de cada blog.
Algunos, al menos para mi, eran de esperar que estuvieran entre los primeros(Joel Spolsky, Jeff Atwood, Martin Fowler, Paul Graham…). A unos pocos del top 100 los sigo en mi lector de feeds, en algunos otros blogs acabo pasando de vez en cuando y otros muchos del ranking no los conocía, habrá que pasearse por el listado a ver cuáles son del gusto de cada uno
.
Posted by Dani on Thursday, September 18th, 2008
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
), 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.
Posted by Dani on Tuesday, September 16th, 2008
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?
Posted by Dani on Wednesday, September 10th, 2008
Categorías: General, Diseño
Ahora a pensar cómo hago(algún año de estos
) mi web corporativa
Posted by Dani on Tuesday, September 9th, 2008
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.
Posted by Dani on Monday, September 1st, 2008