<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arragonán &#187; Programación</title>
	<atom:link href="http://www.danilat.com/weblog/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danilat.com/weblog</link>
	<description>Daniel Latorre - Desarrollador y algunas cosas más</description>
	<lastBuildDate>Thu, 26 Jan 2012 00:22:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Taller Spring I/O 2012: Modulariza tus aplicaciones Grails</title>
		<link>http://www.danilat.com/weblog/2012/01/25/taller-spring-io-2012-modulariza-tus-aplicaciones-grails/</link>
		<comments>http://www.danilat.com/weblog/2012/01/25/taller-spring-io-2012-modulariza-tus-aplicaciones-grails/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 00:48:22 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1901</guid>
		<description><![CDATA[Este año volveré a estar por el Spring I/O (16 y 17 de Febrero 2012 en Madrid), en esta ocasión dirigiendo el taller Modulariza tus aplicaciones Grails : Gracias a los plugins de grails liberados a la comunidad, podemos aprovechar el esfuerzo hecho por otros desarrolladores y reutilizar el trabajo que han hecho. El sistema [...]]]></description>
			<content:encoded><![CDATA[<p>Este año volveré a estar por el <a href="http://www.springio.net/">Spring I/O</a> (16 y 17 de Febrero 2012 en Madrid), en esta ocasión dirigiendo el taller <strong>Modulariza tus aplicaciones Grails </strong>: </p>
<blockquote><p>Gracias a los plugins de grails liberados a la comunidad, podemos aprovechar el esfuerzo hecho por otros desarrolladores y reutilizar el trabajo que han hecho. El sistema de plugins de grails da múltiples puntos de extensión para la plataforma: permite añadir comandos nuevos a la CLI, servicios, clases de dominio, extender dinámicamente algunos comportamientos&#8230; En el taller sacaremos partido del sistema de plugins de grails para reutilizar trabajo entre distintas de nuestras aplicaciones, veremos algunos ejemplos y desarrollaremos un plugin a modo de ejemplo.</p></blockquote>
<div style="text-align:center"><img src="http://springio.net/images/speaker_badge_springio_2012.png" alt="" /></div>
<p>Básicamente, mostraremos de forma práctica como reutilizar código en nuestros proyectos del día a día, más allá de liberar plugins que sólo tengan sentido ser liberados para el resto de la comunidad.</p>
<p>Este año volverán a ser 2 días de charlas y talleres, un eventazo a <a href="http://www.springio.net/register">un precio de risa</a>. Como podéis ver <a href="http://www.springio.net/agenda">en la agenda</a>, hay buena cantidad y calidad de ponentes, incluida alguna <strong>rockstar</strong> internacional entre ellos.</p>
<p>Cualquiera que trabaje o le interesen tecnologías alrededor de los ecosistemas <em>Spring</em>, <em>Grails</em> o <em>Groovy</em> debería asistir a este evento; o también a quienes les interesan cosas relacionadas con <em>Mongodb</em>, <em>Scala</em>, <em>ElasticSearch</em>, <em>RabbitMQ</em> o incluso temas de <em>cloud computing</em>.</p>
<p>Pero seguro que lo mejor está por los pasillos, durante los cafés y las comidas&#8230; o, por descontado, en la <strong>fiestaca</strong> del jueves <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><strong>Nos vemos en el Spring I/O!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2012/01/25/taller-spring-io-2012-modulariza-tus-aplicaciones-grails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Elecciones al Congreso en Arredol</title>
		<link>http://www.danilat.com/weblog/2011/11/23/elecciones-al-congreso-en-arredol/</link>
		<comments>http://www.danilat.com/weblog/2011/11/23/elecciones-al-congreso-en-arredol/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 18:05:29 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1844</guid>
		<description><![CDATA[Como publiqué en twitter el mismo domingo del 20-N (el día de las elecciones, vamos ), colaboré con Arredol, un pequeño diario online publicado en aragonés, desarrollando las gráficas de los resultados electorales a las elecciones del congreso español. Fue un desarrollo exprés, ya que tenía otros compromisos que no podía dejar de lado. Fueron [...]]]></description>
			<content:encoded><![CDATA[<p> Como <a href="https://twitter.com/#!/dani_latorre/status/138354700322996224">publiqué en twitter el mismo domingo</a> del 20-N (el día de las elecciones, vamos <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), colaboré con <a href="http://www.arredol.com/">Arredol</a>, un pequeño diario online publicado en aragonés, desarrollando las gráficas de los <a href="http://www.arredol.com/eleccions-espanyolas-2011/">resultados electorales a las elecciones del congreso español</a>.</p>
<p>Fue un desarrollo exprés, ya que tenía otros compromisos que no podía dejar de lado. Fueron unas 6 o 7 horas de trabajo a tope ese mismo fin de semana, pero me apetecía colaborar por fin con algún medio, aunque fuera tan pequeñito como lo es arredol <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Herramientas utilizadas:</p>
<ul>
<li>El <a href="http://politica.elpais.com/politica/2011/11/13/actualidad/1321193831_901025.html">API que puso a disposición El País</a>. Que básicamente hizo el trabajo que según los que defendemos el OpenData debería ser responsabilidad del Ministerio del Interior, poner a disposición de cualquier persona o entidad esos datos de forma estructurada para poder procesarlos.
</li>
<li>
El <a href="http://code.google.com/intl/es-ES/apis/chart/">API de Google Charts</a> para las representaciones gráficas. No pude adaptar los colores por partido por las limitaciones que tiene, o al menos no logré dar con la solución.
</li>
<li>En el lado del servidor <a href="http://php.net/manual/en/function.simplexml-load-file.php">PHP y simplexml</a> para procesar la información de El País. Básicamente por que el hosting de arredol sólo soporta php, no por otra cosa en especial.</li>
</ul>
<p><a href="http://www.flickr.com/photos/dlato/6390268891/" title="Elecciones en arredol.com por Dani Latorre, en Flickr"><img src="http://farm7.staticflickr.com/6043/6390268891_b3b02e95e4.jpg" width="456" height="429" alt="Elecciones en arredol.com"></a></p>
<p>Como podréis comprender, por haber sido un pequeño desarrollo hecho a toda prisa, el código en general es muy mejorable; pero el resultado cara al usuario creo que no está del todo mal. </p>
<p>Seguramente fuera una solución muy alejada de las herramientas de visualización de algunos grandes medios de comunicación, con una posibilidad de interacción mucho mayor. Pero en Aragón quizás fuera de lo mejor, cosa que casi me entristece. </p>
<p>No vi que tuviera mucho que envidiar a lo que vi que hicieron por ejemplo en la web de <a href="http://www.heraldo.es/">Heraldo</a>, y no digamos de <a href="http://elperiodicodearagon.com/">El Periódico de Aragón</a> donde no vi nada especial para la ocasión&#8230; Supongo que no dedicarían muchos esfuerzos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/11/23/elecciones-al-congreso-en-arredol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimiza tus webs Grails. Greach 2011</title>
		<link>http://www.danilat.com/weblog/2011/11/21/optimiza-tus-webs-grails-greach-2011/</link>
		<comments>http://www.danilat.com/weblog/2011/11/21/optimiza-tus-webs-grails-greach-2011/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 11:48:03 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1838</guid>
		<description><![CDATA[Dejo aquí la presentación que hice en Greach 2011 sobre optimización de webs con Grails. Optimiza tus webs Grails. Greach 2011 View more presentations from Dani Latorre Y también el video]]></description>
			<content:encoded><![CDATA[<p>Dejo aquí la presentación que hice en <a href="http://greach.es/">Greach 2011</a> sobre <em>optimización de webs con Grails</em>.</p>
<div style="width:425px" id="__ss_10050974"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/danilat/optimiza-tus-webs-grails-greach-2011-10050974" title="Optimiza tus webs Grails. Greach 2011" target="_blank">Optimiza tus webs Grails. Greach 2011</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10050974" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/danilat" target="_blank">Dani Latorre</a> </div>
</p></div>
<p>Y también el video</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/AFX0hWaXhdQ" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/11/21/optimiza-tus-webs-grails-greach-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hablando de Grails en la Libre Software World Conference</title>
		<link>http://www.danilat.com/weblog/2011/11/05/hablando-de-grails-en-la-libre-software-world-conference/</link>
		<comments>http://www.danilat.com/weblog/2011/11/05/hablando-de-grails-en-la-libre-software-world-conference/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 00:19:11 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1812</guid>
		<description><![CDATA[Desde CachiruloValley estamos colaborando en un track de la Libre Software World Conference, bajo el nombre de Cachirulo Tech Talks, que se celebra los días 9 y 10 de noviembre en Zaragoza (con un aforo de 600 personas, y completo!). Este Miércoles, 9 de noviembre a las 16:00 yo estaré hablando de Grails: Aumenta tu [...]]]></description>
			<content:encoded><![CDATA[<p>Desde <a href="http://cachirulovalley.com/">CachiruloValley</a> estamos colaborando en un track de la <a href="http://www.libresoftwareworldconference.com/">Libre Software World Conference</a>, bajo el nombre de <a href="http://cachirulovalley.com/2011/cachirulo-tech-talks/">Cachirulo Tech Talks</a>, que se celebra los días 9 y 10 de noviembre en Zaragoza (con un aforo de <a href="https://twitter.com/#!/milladigital/status/132490012355866624">600 personas, y completo</a>!).</p>
<p>Este Miércoles, 9 de noviembre a las 16:00 yo estaré hablando de <a href="http://www.libresoftwareworldconference.com/programa/ponentes/grails-aumenta-tu-productividad-en-tus-aplicaciones-web-java.html"><strong>Grails: Aumenta tu productividad en tus aplicaciones web Java</strong></a>, lo que vendrá siendo una charla donde me gustaría introducir un poco el mundillo de groovy y grails, y donde procuraré mostrar todo el código posible para que los asistentes se puedan llevar una idea aproximada de lo que les puede aportar.</p>
<p>La verdad que es impresionante la <a href="http://www.libresoftwareworldconference.com/programa/horario.html">variedad de sesiones que se han organizado</a>, yo espero asistir a bastantes, veremos a las que el trabajo me permite.</p>
<p>Nos vemos por <a href="http://www.libresoftwareworldconference.com/localizacion.html">el Seminario</a> <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/11/05/hablando-de-grails-en-la-libre-software-world-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m speaking at Greach</title>
		<link>http://www.danilat.com/weblog/2011/10/17/im-speaking-at-greach/</link>
		<comments>http://www.danilat.com/weblog/2011/10/17/im-speaking-at-greach/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 18:19:29 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1775</guid>
		<description><![CDATA[El día 4 de Noviembre, se celebra en Madrid (Universidad San Pablo CEU) la conferencia española de Groovy: Greach. Pues resulta que andaré por ahí para hablar de optimización de webs Grails, sobre buenas prácticas de desarrollo web y como llevarlas a cabo en proyectos Grails. Cuando desarrollamos una web podemos seguir algunas buenas prácticas [...]]]></description>
			<content:encoded><![CDATA[<p>El día 4 de Noviembre, se celebra en Madrid (Universidad San Pablo CEU) la conferencia española de Groovy: <a href="http://greach.es/">Greach</a>.</p>
<p><iframe src="http://www.youtube.com/embed/rTSBkqxXE0Q" frameborder="0" width="560" height="315"></iframe></p>
<p>Pues resulta que andaré por ahí <a href="http://greach.es/ponentes/dani-latorre">para hablar de optimización de webs Grails</a>, sobre buenas prácticas de desarrollo web y como llevarlas a cabo en proyectos Grails.</p>
<blockquote><p>Cuando desarrollamos una web podemos seguir algunas buenas prácticas para que estas resulten más rápidas, lo que que repercute en una mejora en la experiencia de usuario, escalabilidad o incluso en el posicionamiento en buscadores.</p>
<p>En esta charla se tratarán esas buenas prácticas, como podemos llevarlas a cabo con Grails y el uso de algunos plugins que nos facilitan el trabajo.</p></blockquote>
<div style="text-align: center;"><a title="I'm speaking at Greach por Dani Latorre, en Flickr" href="http://www.flickr.com/photos/dlato/6169542311/"><img src="http://farm7.static.flickr.com/6166/6169542311_47de94df57_o.png" alt="I'm speaking at Greach" width="186" height="112" /></a></div>
<p><a href="http://greach.es/agenda">Esta pedazo de agenda</a> es principalmente gracias a <a href="http://albertovilches.com/">Alberto Vilches</a>, que es el que se lo ha estado y está currando.</p>
<p>* La idea del video viene por los &#8220;<a href="http://www.youtube.com/results?search_query=hola+conferencia+rails&amp;aq=f">hola conferencia rails</a>&#8221; <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/10/17/im-speaking-at-greach/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introducción a Grails (1.0.3)</title>
		<link>http://www.danilat.com/weblog/2011/09/16/introduccion-a-grails-1-0-3/</link>
		<comments>http://www.danilat.com/weblog/2011/09/16/introduccion-a-grails-1-0-3/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 23:44:30 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1758</guid>
		<description><![CDATA[Artículo publicado hace un par de años en debug_mode=on y recuperado a mi blog depués del último tuit de la cuenta oficial y de Belmonte. Aunque no sea (ni de muy lejos) el mejor contenido que me haya trabajado, me hace duelo pensar en perderlo, por eso lo reproduzco aquí: Introducción: Grails es un framework [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://es.debugmodeon.com/articulo/introduccion-a-grails">Artículo publicado hace un par de años en debug_mode=on</a> y recuperado a mi blog depués del último <a href="https://twitter.com/#!/debugmodeon/status/114379295144681472">tuit de la cuenta oficial</a> y <a href="https://twitter.com/#!/jlbelmonte/status/114378880445452288">de Belmonte</a>. Aunque no sea (ni de muy lejos) el mejor contenido que me haya trabajado, me hace duelo pensar en perderlo, por eso lo reproduzco aquí:<br />
</em></p>
<blockquote><p><strong>Introducción:</strong></p>
<p><a href="http://grails.org/" target="_blank">Grails</a> es un framework web open source para la plataforma Java, que sigue los principios Don&#8217;t Repeat Your Self(No te repitas) y Convention over Configuration(Convención sobre configuración). Grails se inspiró de incio en Ruby on Rails, llegándose a llamar de inicio Groovy on Rails con el que además de estos principios comparten otras similitudes como: scaffolding, layouts, taglibs(en rails helpers), sistema de plugins&#8230;</p>
<p>Grails es algo más que un framework MVC, también nos ofrece capa de persistencia, capa de servicio, contenedor de servlets y gestor de bases de datos. Se sustenta sobre varios frameworks y librerías Java muy conocidas y probadas como son Spring Framework, Hibernate, Sitemesh, Log4j, Jetty, Hsqldb&#8230; y del lenguaje de programación Groovy.</p>
<p><strong>Instalación:</strong></p>
<p>Para instalar Grails debemos descargarnos la última versión(en éste momento 1.0.3) en <a href="http://www.grails.org/Download" target="_blank">http://www.grails.org/Download</a>y extraer el contenido del archivo comprimido.<br />
Crear la variable de entorno GRAILS<em>HOME apuntando hacia el directorio que hemos extraído y añadir el GRAIL</em>HOME/bin en la variable de entorno PATH.<br />
Tras esto ejecutamos en una consola el comando grails help y con el que nos debería salir el listado de comandos de grails.</p>
<p>¡Ya podemos crear nuestra primera aplicación!</p>
<p><strong>La aplicación:</strong></p>
<p>Veremos una aplicación de ejemplo que se compondrá tan sólo de una clase de dominio para una gestión de un catálogo de productos.</p>
<p>Creamos la aplicación con:</p>
<pre>grails create-app catalog</pre>
<p>Una vez ejecutado entramos al directorio de nuestra aplicación:</p>
<pre>cd catalog</pre>
<p>Aquí podemos ver la estructura de directorios que se ha generado:</p>
<ul>
<li>grails-app: Artefactos de Grails(controllers, vistas, clases de dominio, taglibs, configuraciones&#8230;)</li>
<li>lib: Librerías para nuestro proyecto (que no traiga Grails de serie, claro)</li>
<li>plugins: Plugins instalados</li>
<li>scripts: Scripts Gant</li>
<li>src: Clases java o groovy que no sean artefactos de Grails</li>
<li>test: Tests de nuestra aplicación</li>
<li>web-app: css, imágenes, ficheros html estáticos&#8230;</li>
</ul>
<p>Tras ésto creamos la clase de dominio:</p>
<pre>grails create-domain-class product</pre>
<p>Vemos que en grails-app/domain se ha creado Product.groovy(además en los tests ProductTest.groovy), que abriremos y añadiremos los atributos a la clase(por ejemplo: name, description y provider)</p>
<pre>class Product{
String name
String description
String provider
int quantity
}</pre>
<p>Y con ésto hemos terminado de definirlo, al ser un POGO no son necesarios getters y setters, ya que Groovy es quien se encargará de generarlos en tiempo de ejecución.<br />
Tras esto utilizaremos el scaffolding, que nos creará un controller con las acciones básicas y susrespectivas vistas:</p>
<pre>grails generate-all product</pre>
<p>Veremos que en grails-app/controllers tendremos un ProductController.groovy y en grails-app/views/product los .gsp que son las respectivas vistas de las acciones de ProductController.</p>
<p>Tras ésto, podemos arrancar el servidor embebido que trae Grails y una vez arrancado podemos ver el resultado en<a href="http://localhost:8080/catalog/:" target="_blank">http://localhost:8080/catalog/:</a></p>
<pre>grails run-app</pre>
<p>Con esto tenemos generado el esqueleto de nuestra aplicación sin crear un war, sin ir a crear tablas en la base de datos, sin configurar nada&#8230;</p>
<p>Con esto no hemos hecho más que empezar, como ejercicio es recomendable mirar el código que se ha generado en el controller y en las vistas, modificar algo, tratar de añadir alguna acción nueva como podría ser una acción para sumar 1 a la cantidad de un producto. Y cómo no, no dejar de seguir <a href="http://grails.org/doc/1.0.x/" target="_blank">la guía de referencia</a></p></blockquote>
<p>Ojalá aparezca alguien con capacidad y motivación suficiente para reflotar y mantener <a href="http://es.debugmodeon.com/">debugmodeon</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/09/16/introduccion-a-grails-1-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generar JSON con Groovy 1.8</title>
		<link>http://www.danilat.com/weblog/2011/09/13/generar-json-con-groovy-1-8/</link>
		<comments>http://www.danilat.com/weblog/2011/09/13/generar-json-con-groovy-1-8/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 00:58:06 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1735</guid>
		<description><![CDATA[Una de las muchas novedades que vinieron con Groovy 1.8 fue el soporte nativo para generar y leer JSON. Llevo un par de días estando trabajando con este soporte JSON para reunir datos importados de distintas fuentes, y luego poder mantener los datos resultantes en un formato estructurado. Principalmente porque no todos son necesarios a [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las muchas <a href="http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes">novedades que vinieron con Groovy 1.8</a> fue el <a href="http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#Groovy1.8releasenotes-NativeJSONsupport">soporte nativo para generar y leer JSON</a>. </p>
<p>Llevo un par de días estando trabajando con este soporte JSON para reunir datos importados de distintas fuentes, y luego poder mantener los datos resultantes en un formato estructurado. Principalmente porque no todos son necesarios a día de hoy, pero a futuras se puede echar mano de ellos.</p>
<p>Después de hacer todo lo necesario unificar todos los datos en un <a href="http://groovy.codehaus.org/JN1035-Maps">map</a> en memoria, para persistir el JSON, he hecho uso de <a href="http://groovy.codehaus.org/gapi/groovy/json/JsonBuilder.html">JsonBuilder</a>.</p>
<p>Sería algo así:<br />
<code><br />
def builder = new groovy.json.JsonBuilder()<br />
builder.data(){<br />
&nbsp;&nbsp;for (item in items){<br />
&nbsp;&nbsp;&nbsp;&nbsp;"${item['name']}"() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zone(item['zone'])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position(item['position'])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}</code></p>
<p>Esto lo que generaría es algo de una estructura como:<br />
<code><br />
{"data":<br />
&nbsp;&nbsp;{"name1": { "zone" : "zone1", "position": "position1", ... }}<br />
&nbsp;&nbsp;{"name2": { "zone" : "zone2", "position": "position2", ... }}<br />
&nbsp;&nbsp;...<br />
&nbsp;&nbsp;...<br />
}</code></p>
<p>Después tan sólo debía escribirlo en un fichero:</p>
<p><code>new File("path/to/file.json").write(builder.toString())</code></p>
<p>Y listo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/09/13/generar-json-con-groovy-1-8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Repintar mapas con el API de Google Maps V3</title>
		<link>http://www.danilat.com/weblog/2011/07/05/repintar-mapas-con-el-api-de-google-maps-v3/</link>
		<comments>http://www.danilat.com/weblog/2011/07/05/repintar-mapas-con-el-api-de-google-maps-v3/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 02:31:14 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1708</guid>
		<description><![CDATA[Como (supongo) casi todo programador web que ha hecho desarrollos para internet, he tocado en múltiples ocasiones partes del API de google maps. Hace unos pocos días nos encontramos uno de esos problemas curiososos. Resulta que teníamos varios mapas en una misma página, dentro de la que habían mapas en capas ocultas usando css. La [...]]]></description>
			<content:encoded><![CDATA[<p>Como (supongo) casi todo programador web que ha hecho desarrollos para internet, he tocado en múltiples ocasiones partes del API de google maps.</p>
<p>Hace unos pocos días nos encontramos uno de esos problemas <em>curiososos</em>. Resulta que teníamos varios mapas en una misma página, dentro de la que habían mapas en capas ocultas usando css. La curiosidad en cuestión es que al hacer visibles esas capas no se pintaban correctamente los mapas.</p>
<p>Buscando un poco que podría estar pasando, resulta que cuando creas el mapa google maps coge los estilos que hay en ese momento, y al pasar de oculto a visible el API no es consciente que ha cambiado la visibilidad del elemento que lo contiene y donde se pinta. </p>
<p>Esto en la V2 del API se solucionaba usando <a href="http://code.google.com/apis/maps/documentation/javascript/v2/reference.html#GMap2.checkResize">checkResize</a>, pero resulta que para V3 no está disponible ese método para notificar al mapa que se redimensione. </p>
<p>La necesidad de un <em>checkResize</em> está reportado <a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=1448">como bug de la versión 3</a>. Pero por suerte en los mismos comentarios aparecen algunas soluciones que me han venido como anillo al dedo para ir trasteando y terminar implementando una solución un poco más a mi gusto, añadiendo a la clase de <strong>google.maps.Map</strong> un comportamiento equivalente:</p>
<p><code><br />
google.maps.Map.prototype.checkResize = function() {<br />
&nbsp;&nbsp;  var center = this.getCenter();<br />
&nbsp;&nbsp;  google.maps.event.trigger(this, 'resize')<br />
&nbsp;&nbsp;  this.setCenter(center);<br />
}<br />
</code></p>
<p>Y así ya puedo utilizar el <em>checkResize</em> en los mapas del mismo modo que en la versión 2.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/07/05/repintar-mapas-con-el-api-de-google-maps-v3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Se busca aprendiz&#8230;</title>
		<link>http://www.danilat.com/weblog/2011/06/29/se-busca-aprendiz/</link>
		<comments>http://www.danilat.com/weblog/2011/06/29/se-busca-aprendiz/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 22:59:49 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1693</guid>
		<description><![CDATA[Como supongo que algunos sabréis, ando trabajando con UniversalPlaces desde hace unos meses. Pues resulta que ahora andamos buscando a una persona para ser el/la primer/a programador/a en plantilla, para trabajar en el mismo centro de Zaragoza. La oferta con todos los detalles está en jobsket: Aprendiz de programador web. Aprendiz según la RAE: aprendiz, [...]]]></description>
			<content:encoded><![CDATA[<p>Como supongo que algunos sabréis, ando trabajando con <a href="http://universalplaces.com/">UniversalPlaces</a> desde hace unos meses. Pues resulta que ahora andamos buscando a una persona para ser el/la primer/a programador/a en plantilla, para trabajar en el mismo centro de Zaragoza.</p>
<p>La oferta con todos los detalles está en jobsket: <strong><a href="http://www.jobsket.es/trabajo/ahorro-vacaciones/aprendiz_de_programador_web">Aprendiz de programador web</a></strong>.</p>
<p>Aprendiz <a href="http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&#038;LEMA=aprendiz">según la RAE</a>:</p>
<blockquote><p><strong>aprendiz, za.</strong><br />
<em>1. m. y f.</em> Persona que aprende algún arte u oficio.<br />
<em>2. m. y f.</em> Persona que, a efectos laborales, se halla en el primer grado de una profesión manual, antes de pasar a oficial.</p></blockquote>
<p>Otros más refinados le llamarían programador junior, pero creo que en muchos otros oficios le llaman acertadamente <strong>aprendiz</strong>. Otra opción era buscar directamente un <a href="http://es.wikipedia.org/wiki/Jedi#Padawan">padawan</a>, pero los del lado oscuro somos disimulados <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://www.flickr.com/photos/pasukaru76/5473934075/" title="[176/365] Padawan por pasukaru76 (limited internet), en Flickr"><img src="http://farm6.static.flickr.com/5099/5473934075_3754c607a7.jpg" width="500" height="333" alt="[176/365] Padawan"></a></p>
<p>PD: Sí, dentro de trabajar en equipo entra irse de cañas de vez en cuando con el resto del equipo XD</p>
<p>* Foto de <a href="http://www.flickr.com/photos/pasukaru76/">pasukaru76</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/06/29/se-busca-aprendiz/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>elDisparate.de, participando en AbreDatos 2011</title>
		<link>http://www.danilat.com/weblog/2011/05/25/eldisparate-de-participando-en-abredatos-2011/</link>
		<comments>http://www.danilat.com/weblog/2011/05/25/eldisparate-de-participando-en-abredatos-2011/#comments</comments>
		<pubDate>Wed, 25 May 2011 17:17:22 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=1637</guid>
		<description><![CDATA[Por fin he sacado un rato para escribir sobre nuestra participación en el Desafío AbreDatos 2011 con elDisparate. El equipo y la idea: Hice equipo con Mamen Pradel (diseño), Toño García (ilustración y animación) y Agustín Raluy (márketing); vamos, que arriesgamos en cuanto a la formación del equipo, descargando importancia a la parte de programación [...]]]></description>
			<content:encoded><![CDATA[<p>Por fin he sacado un rato para escribir sobre nuestra participación en el <a href="http://www.abredatos.es/">Desafío AbreDatos 2011</a> con <a href="http://www.eldisparate.de/">elDisparate</a>.</p>
<p><strong>El equipo y la idea:</strong></p>
<p>Hice equipo con <a href="http://www.biotive.com/pensieve/">Mamen Pradel</a> (diseño), <a href="http://www.shakingbox.com/">Toño García</a> (ilustración y animación) y <a href="http://twitter.com/pordeciralgo">Agustín Raluy</a> (márketing); vamos, que arriesgamos en cuanto a la formación del equipo, descargando importancia a la parte de programación y dándosela a la de diseño/presentación. Y no, no hubo muchas discusiones en cuanto al código XD.</p>
<p>Como <strong>altoaragonés</strong>, tenía ganas de participar con un equipo desde la provincia de Huesca, que hay que intentar descentralizar un poco el <em>foco</em> que tiene Zaragoza en cuanto a temas tecnológicos y repartirlo por el resto de Aragón. Por eso nos fuimos a nuestros respectivos pueblos (<em>&#8220;secuestrando&#8221;</em> a Mamen de tierras mañas <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), y montamos el cuartel general el fin de semana en las oficinas de <a href="http://www.integralstand.com/">Integral Stand</a> en Barbastro.</p>
<p>El origen de la idea es un poco de rebote, un día &#8220;tuiteé&#8221; un post (en aragonés) de <a href="http://twitter.com/purnas">@purnas</a>: <a href="http://www.purnas.com/2011/04/16/gaddafi-bombardeya-con-armas-zaragozanas-a-historia-dinstalaza/">Gaddafi bombardeya con armas zaragozanas (A historia d’Instalaza)</a>, y <a href="http://twitter.com/dcabo">@dcabo</a> me remitió al <a href="http://foros.abredatos.es/topic/exportaciones-de-armas-desde-espana">foro de AbreDatos por si me interesaba el tema</a> de la exportación de armas. </p>
<p>Tras el <a href="http://cachirulovalley.com/2011/beerstorming-abredatos-2011-quedada-para-compartir-ideas-y-crear-equipos/">beersotrimng pre-abredatos de cachirulovalley</a> dejamos cerrada la temática y casi el equipo con Mamen y Agustín. Hubo otro programador oscense que estuvo a punto de formar parte el equipo, pero que finalmente no podía participar ese fin de semana. Por lo que surgió la idea de convencer a Toño y darle un enfoque completamente de visualización de información.</p>
<p>En cuanto a lo que íbamos a implementar, fueron Mamen y Toño quienes estuvieron conceptualizándolo. Yo sabía que iba a tener que pellear con <a href="http://aduanas.camaras.org/">la web de aduanas</a>, y sólo me iba a tener que preocupar como sacar la información.</p>
<div style="text-align:center"><a href="http://www.eldisparate.de/"><img src="http://www.eldisparate.de/img/logo.png" alt="elDisparate" /></a></div>
<p><strong>El desarrollo:</strong></p>
<p>Tenía bastante claro que iba a desarrollar la web con Grails, aunque el front iba a ser muy sencillo y podría haber utilizado frameworks más minimalistas, fui a asegurar con el framework web que mejor conozco y más productivo puedo ser.</p>
<p>Tengo que confesar que iba muy confiado con la extracción de datos, había unos ficheros con formato <em>&#8220;tipo CSV&#8221;</em> que podía <em>scrapear</em> desde la web para descargarlos, y así poder procesar y cargar esos datos a la web en Grails.</p>
<p>Para el scarpping pretendía utilizar python y <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>, una librería que ya conozco del año pasado y que facilita mucho trabajar en extraer información de HTML. </p>
<p>Pero la web de aduanas tenía una <em>curiosidad</em>, al hacer la primera petición a la web, esta te devolvía un documento HTML con sólo un código javascript para redirigir a la home. Supongo que ahí deben escribir alguna cookie en el navegador con alguna finalidad que mi cerebro no ha sabido suponer, y entonces ya permite navegar libremente.</p>
<p>Estuve probando con herramientas tipo <a href="http://wwwsearch.sourceforge.net/mechanize/">mechanize para python</a> y <a href="http://mechanize.rubyforge.org/mechanize/">ruby</a>. Pero con la presión del tiempo, al ver que no conseguía que me funcionaran y me cansé de ver como pasaban las horas inútilmente.</p>
<p>Finalmente tomamos la decisión de descargar los datos a mano (limitándonos sólo a exportaciones de 2009 y sin poder entrar a detallar el tipo de armas). Ya traía aprendido del año pasado que es mejor acotar el alcance en caso de problemas.</p>
<p>En cuanto la aplicación Grails, me centré exclusivamente en terminar, olvidad ver soluciones sofisticadas y elegantes en mi código:</p>
<ul>
<li>La base de datos es la <a href="https://github.com/danilat/eldisparate/blob/master/grails-app/conf/DataSource.groovy">HSQLDB embebida de Grails</a>, pero cargada en memoria para que resulte más rápido.</li>
<li>Cada vez que se arranca la aplicación <a href="https://github.com/danilat/eldisparate/blob/master/grails-app/conf/BootStrap.groovy">se cargan todos los datos</a>, que realmente están persistidos <a href="https://github.com/danilat/eldisparate/tree/master/web-app/data">en ficheros de texto</a>.</li>
<li>No hay tests y el código en general tiene bastante margen de mejora.</li>
</ul>
<p><strong>El despliegue:</strong></p>
<p>Tenía ganas de probar <a href="http://www.cloudfoundry.com/">cloudfoundry</a> por fin, que hacía unas semanas que me habían dado acceso a la beta. Cuál fue nuestra sorpresa cuando ya desplegamos la primera versión, que no había manera de apuntar el dominio a cloudfoundry, que aún lo no soporta (Y hasta que no lo soporte no me planteo utilizarlo).</p>
<p>Entonces pensé en <a href="http://aws.amazon.com/elasticbeanstalk/">Amazon Beanstalk</a> y en <a href="http://www.cloudbees.com/">CloudBees</a> como <a href="http://en.wikipedia.org/wiki/Platform_as_a_service">PaaS</a> alternativas para webs en Java, ya que evidentemente no había mucho tiempo de preparar una máquina desde 0. Y tras algunas <em>gestiones</em> en paralelo para ver donde desplegábamos, terminé desplegando en CloudBees y el dominio pasó a apuntar allí.</p>
<p>Os dejo unas fotos para que veais lo mucho que sufrimos y lo mal que lo pasamos <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="text-align:center"><object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=es-us&#038;page_show_url=%2Fphotos%2Feldisparate%2Fsets%2F72157626668765912%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Feldisparate%2Fsets%2F72157626668765912%2F&#038;set_id=72157626668765912&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=es-us&#038;page_show_url=%2Fphotos%2Feldisparate%2Fsets%2F72157626668765912%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Feldisparate%2Fsets%2F72157626668765912%2F&#038;set_id=72157626668765912&#038;jump_to=" width="400" height="300"></embed></object></div>
<p>Comimos genial, haciendo parrilladas en Monzón y Barbastro, no faltaron la cerveza, las risas y tampoco las tensiones de última hora <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Por cierto, que resulta que hemos entrado entre los 8 finalistas del AbreDatos. Quien quiera puede valorarnos a nosotros y al resto de participantes en <a href="http://live.abredatos.es/vote">la web de votaciones de AbreDatos</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2011/05/25/eldisparate-de-participando-en-abredatos-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

