<?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>Tue, 07 Sep 2010 10:23:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Saraos para programadores</title>
		<link>http://www.danilat.com/weblog/2010/09/07/saraos-para-programadores/</link>
		<comments>http://www.danilat.com/weblog/2010/09/07/saraos-para-programadores/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 00:32:13 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=962</guid>
		<description><![CDATA[Para darle un poco de vidilla al blog, que con tanto lío lo tengo un poco olvidado, algunos eventos que pueden ser interesantes para desarrolladores y a los que si puedo intentaré asistir: El 23 de Septiembre, Google DevFest 2010 en Madrid, la agenda no tiene mala pinta, aunque evidentemente la temática es exclusivamente sobre [...]]]></description>
			<content:encoded><![CDATA[<p>Para darle un poco de vidilla al blog, que con tanto lío lo tengo un poco olvidado, algunos eventos que pueden ser interesantes para desarrolladores y a los que si puedo intentaré asistir:</p>
<p>El 23 de Septiembre, <a href="https://sites.google.com/site/devfestmadrid/"><strong>Google DevFest 2010</strong> en Madrid</a>, la <a href="https://sites.google.com/site/devfestmadrid/agenda">agenda</a> no tiene mala pinta, aunque evidentemente la temática es exclusivamente sobre productos y frameworks de google.</p>
<p>Los días 4 y 5 de Noviembre, la <a href="http://conferenciarails.org/"><strong>Conferencia Rails 2010</strong></a> también en Madrid. Todavía están con el <a href="http://conferenciarails.org/conference/2010/09/01/call_for_papers.html">call for papers</a> y hace bastante que no trabajo con Rails &#8220;de verdad&#8221;, pero como el último año no pude ir y que lo están intentando internacionalizar, me pica mucho la curiosidad ver como queda <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En Barcelona los días 12 y 13 de Noviembre, <a href="http://www.aos2010.agile-spain.com/"><strong>Agile Open Spain 2010</strong></a>. Un <a href="http://www.agile-spain.com/que-es-como-hacer-open-space">open space</a> organizado por la comunidad Agile-Spain&#8230; no tenía claro cuál era el formato ideal de propuesta para un open space, pero <a href="http://twitter.com/jjballano">@jjballano</a> me lo ha <a href="http://twitter.com/jjballano/status/23146706401">resuelto</a> <a href="http://twitter.com/jjballano/status/23146853281">rápido</a>. Es un formato de evento diferente de los que he ido hasta ahora, veremos que tal.</p>
<p><strong>Actualización:</strong></p>
<p><a href="http://www.berriart.com/">artberri</a> avisa que el 29 y 30 de Octubre es la <a href="http://phpconference.es/">PHPConference</a> en Barcelona, también están con el call for papers.</p>
<p><a href="http://kinisoftware.lacoctelera.net/">Kinisoftware </a> también avisa que el 2 de Octubre hay un <a href="http://www.coderetreat.com/how-it-works.html">coderetreat</a> en Madrid.</p>
<p>¿Más eventos interesantes para desarrolladores?</p>
<p>PD: Un día de estos espero publicar alguna cosilla con más fundamento <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/2010/09/07/saraos-para-programadores/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Jobsket.com, Grails en un proyecto real</title>
		<link>http://www.danilat.com/weblog/2010/07/25/jobsket-com-grails-en-un-proyecto-real/</link>
		<comments>http://www.danilat.com/weblog/2010/07/25/jobsket-com-grails-en-un-proyecto-real/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 21:09:10 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Jobsket]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=945</guid>
		<description><![CDATA[Dejo por aquí mi presentación del sábado. Jobsket.com, Grails en un proyecto real View more presentations from Jobsket. A ver si en estos días saco algo de tiempo y escribo sobre que tal estuvo la Lan Party]]></description>
			<content:encoded><![CDATA[<p>Dejo por aquí mi <a href="http://www.danilat.com/weblog/2010/07/19/nos-vemos-en-la-tenerife-lan-party-2010/">presentación del sábado</a>.</p>
<div style="width:425px" id="__ss_4828850"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/jobsket/jobsketcom-grails-en-un-proyecto-real" title="Jobsket.com, Grails en un proyecto real">Jobsket.com, Grails en un proyecto real</a></strong><object id="__sse4828850" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tenerife-lan-party-100724100902-phpapp01&#038;stripped_title=jobsketcom-grails-en-un-proyecto-real" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4828850" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tenerife-lan-party-100724100902-phpapp01&#038;stripped_title=jobsketcom-grails-en-un-proyecto-real" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/jobsket">Jobsket</a>.</div>
</div>
<p>A ver si en estos días saco algo de tiempo y escribo sobre que tal estuvo la Lan Party</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/07/25/jobsket-com-grails-en-un-proyecto-real/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nos vemos en la Tenerife Lan Party 2010</title>
		<link>http://www.danilat.com/weblog/2010/07/19/nos-vemos-en-la-tenerife-lan-party-2010/</link>
		<comments>http://www.danilat.com/weblog/2010/07/19/nos-vemos-en-la-tenerife-lan-party-2010/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 20:54:02 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Jobsket]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=919</guid>
		<description><![CDATA[El sábado 24 a las 12:00 de la mañana, daré una charla en la Tenerife Lan Party 2010: Jobsket.com, Grails en un proyecto real. La charla será una explicación de qué es Grails y cómo lo usamos en Jobsket, una startup pequeñita con unos recursos muuuucho menores que otras empresas, y como nos ayuda a [...]]]></description>
			<content:encoded><![CDATA[<p>El sábado 24 a las 12:00 de la mañana, daré una charla en la <a href="http://www.tenerife-lanparty.com/2k10/">Tenerife Lan Party 2010</a>: <strong>Jobsket.com, Grails en un proyecto real</strong>. </p>
<p>La charla será una explicación de qué es Grails y cómo lo usamos en Jobsket, una startup pequeñita con unos recursos muuuucho menores que otras empresas, y como nos ayuda a ser una de las compañías más innovadoras tecnológicamente en el sector de empleo en internet.</p>
<p><img src="http://farm5.static.flickr.com/4134/4797874754_08d587bc4d.jpg" width="450" height="99" alt="TLP 2k10" /></p>
<p>También hay otras actividades muy interesantes para desarrolladores en el <a href="http://www.tenerife-lanparty.com/2k10/tlp-innova/horarios.html">programa</a>. Aunque yo voy a destacar las relacionadas con la gente de <a href="http://agile-canarias.blogspot.com/2010/07/tlpi.html">Agile-Canarias</a>, el viernes por la mañana a las 10:00 <a href="http://developerscookbook.blogspot.com/">Yeray Darias</a> y Fran Reyes impartirán un taller de Integración continua, y seguidamente a las 12:00 <a href="http://www.carlosble.com/">Carlos Blé</a> organiza un Code Retreat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/07/19/nos-vemos-en-la-tenerife-lan-party-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>grails.sh, trabaja fácilmente con distintas versiones de Grails</title>
		<link>http://www.danilat.com/weblog/2010/07/15/grails-sh-trabaja-facilmente-con-distintas-versiones-de-grails/</link>
		<comments>http://www.danilat.com/weblog/2010/07/15/grails-sh-trabaja-facilmente-con-distintas-versiones-de-grails/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 02:10:39 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=910</guid>
		<description><![CDATA[Leyendo la lista de correo de grails, me encuentro un pequeño script, que al menos a mi me parece muy útil para los que a veces andamos cambiando entre varias versiones de grails: grails.sh. En el directorio de un proyecto ejecuta la versión del mismo proyecto. Desde otros directorios se ejecutará la versión de grails [...]]]></description>
			<content:encoded><![CDATA[<p>Leyendo <a href="http://grails.1312388.n4.nabble.com/Script-for-auto-switching-Grails-versions-td2288269.html#a2288269">la lista de correo de grails</a>, me encuentro un pequeño script, que al menos a mi me parece muy útil para los que a veces andamos cambiando entre varias versiones de grails: <a href="http://github.com/deluan/grails.sh">grails.sh</a>.</p>
<ul>
<li>En el directorio de un proyecto ejecuta la versión del mismo proyecto.</li>
<li>Desde otros directorios se ejecutará la versión de grails que tengamos por defecto en GRAILS_HOME.</li>
<li>Y para utilizar una versión concreta, simplemente se lo debemos pasar como parámetro.</li>
</ul>
<p>Sencillo y cumple su función. Al parecer funciona perfectamente en Mac, Linux y Windows con cygwin. Y para los despistados como yo, recordad darle permisos de ejecución al script <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/2010/07/15/grails-sh-trabaja-facilmente-con-distintas-versiones-de-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando Cucumber con Grails</title>
		<link>http://www.danilat.com/weblog/2010/07/12/usando-cucumber-con-grails/</link>
		<comments>http://www.danilat.com/weblog/2010/07/12/usando-cucumber-con-grails/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 17:11:09 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=884</guid>
		<description><![CDATA[Desde que trabajé hace algo más de un año con los cracks de Linking Paths y Rails que no tocaba Cucumber, hasta este fin de semana, que he estado haciendo algunas pruebas con el plugin grails-cucumber. Cucumber es una herramienta para hacer tests de aceptación(a la Behaviour Driven Development) escrita en Ruby que ayuda a [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que trabajé hace algo más de un año con los cracks de <a href="http://www.linkingpaths.com/">Linking Paths</a> y Rails que no tocaba <a href="http://cukes.info/">Cucumber</a>,  hasta este fin de semana, que he estado haciendo algunas pruebas con el <a href="http://github.com/danklynn/grails-cucumber">plugin grails-cucumber</a>. Cucumber es una herramienta para hacer tests de aceptación(a la Behaviour Driven Development) escrita en Ruby que ayuda a bajar la barrera que separa a la gente <em>de negocio</em> o <em>de testing</em>(hay una leyenda urbana que dice que existen XD) con los programadores, utilizando un DSL de por medio.</p>
<p>Por un lado gracias a la JVM y JRuby podíamos aprovecharnos de esta interesante herramienta utilizando Ruby, y por otro, hace cosa de un año y algo que se han ido añadiendo soporte a otros lenguajes de la JVM con el proyecto <a href="http://wiki.github.com/aslakhellesoy/cuke4duke/">cuke4duke</a>. A día de hoy, también podemos escribir los tests con Java, Groovy, Scala, Clojure, Javascript y Ioke; cada uno que elija el lenguaje que más le guste <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Y siguiendo con la recapitulación, a principios de primavera surgió el plugin para grails y desde entonces que tenía pendiente probarlo, pero por falta de tiempo unas veces o simplemente no acordarme otras, lo había ido retrasando <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>En fin, pues después de encontrarme varios problemas para instalar y hacer funcionar el plugin, preferí hacer un fork para modificar el código bajo mis necesidades y luego hacer un pull request en github para que se <a href="http://github.com/danklynn/grails-cucumber/compare/ada4f46ac8...f25d00e337">pudieran aprovechar los cambios</a>. Arreglé un problemilla con el script Gant de ejecución de cucumber con mi versión de grails(1.2.2), aproveché a actualizar las depenencias con jruby y cuke4duke a las últimas versiones y eliminé la dependencia con picocontainer. </p>
<p>Tras estos pasos me puse a escribir una <a href="http://wiki.github.com/aslakhellesoy/cucumber/feature-introduction">feature</a> como esta:</p>
<p><code><br />
Feature: Search job offers<br />
&nbsp;&nbsp;Scenario: Search job offers in zaragoza, we should have results<br />
&nbsp;&nbsp;&nbsp;&nbsp;Given I'm at jobsket.es<br />
&nbsp;&nbsp;&nbsp;&nbsp;And I write zaragoza into the seachbox<br />
&nbsp;&nbsp;&nbsp;&nbsp;When I submit the form<br />
&nbsp;&nbsp;&nbsp;&nbsp;Then the result should contains Promotora<br />
&nbsp;&nbsp;&nbsp;&nbsp;And the result should contains zaragoza</code></p>
<p>Supongo que a los que conozcáis otras herramientas de BDD os resultará familiar o imaginaréis por donde van los tiros del significado de este DSL(pre-condiciones, proceso, post-condiciones). Pero como supongo que a algunos les resultará útil, ahí va una mini-explicación con mis palabras <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong>Feature</strong>: Es la funcionalidad que vamos a testear, en este caso la búsqueda de ofertas de empleo en jobsket.<br />
<strong>Scenario</strong>: El escenario vendría a ser una <em>historia de usario</em> de la funcionalidad, esto quiere decir que cada scenario sería probar una funcionalidad en un contexto distinto.<br />
<strong>Given</strong>: El estado inicial del escenario, se pueden concatenar varios con And&#8217;s.<br />
<strong>When</strong>: El <em>proceso</em> que queremos probar, también se pueden concatenar varios usando And&#8217;s&#8230; pero de inicio no tiene sentido, deberíamos probar sólo una cosa en cada escenario.<br />
<strong>Then</strong>: Las comprobaciones para saber si el escenario se está ejecutando correctamente o no.</p>
<p>Bueno, una vez escritos los pasos de la feature, nos queda escribir los <a href="http://wiki.github.com/aslakhellesoy/cucumber/step-definitions">steps</a> para que se ejecute el test del escenario. Como en nuestro caso queremos aplicar el test de aceptación a una interfaz web, utilizaremos el archi-conocido <a href="http://seleniumhq.org/">Selenium</a>. El código en Groovy quedaría algo parecido a esto:</p>
<p><code><br />
import org.openqa.selenium.By<br />
import org.openqa.selenium.WebDriver<br />
import org.openqa.selenium.WebElement<br />
import org.openqa.selenium.htmlunit.HtmlUnitDriver<br />
import static groovy.util.GroovyTestCase.*<br />
this.metaClass.mixin(cuke4duke.GroovyDsl)<br />
</code><code><br />
WebDriver driver<br />
WebElement element<br />
Before() {<br />
&nbsp;driver = new HtmlUnitDriver()<br />
}<br />
Given(~"I'm at jobsket.es") {<br />
&nbsp;driver.get("http://www.jobsket.es/home")<br />
}<br />
Given(~"I write (\\w+) into the seachbox") {keywords -><br />
&nbsp;element = driver.findElement(By.id("keywords"))<br />
&nbsp;element.sendKeys(keywords)<br />
}<br />
When(~"I submit the form"){<br />
&nbsp;element.submit()<br />
}<br />
Then(~"the result should contains (\\w+)") { someContent -><br />
&nbsp;assertFalse(-1 == driver.getPageSource().indexOf(someContent))<br />
}</code></p>
<p>Si os fijáis, lo único raro es <em>this.metaClass.mixin(cuke4duke.GroovyDsl)</em>, que hace la &#8220;magia&#8221; para que funcione el DSL. Los <em>Given, When y Then</em> se ejecutarán cuando coincida una cadena de las features, internamente funcina mediante expresiones regulares. El <em>Before()</em> se ejecuta antes de cada escenario, y para ser re-utilizable entre features distintas debería estar en el directorio support. El resto del código no deja de ser de selenium/webdriver normal y corriente, además de usar GroovyTest(basado en JUnit) para comprobar que se cumplen las post-condiciones.</p>
<p>Hasta aquí no hay diferencias con utilizar cuke4duke con Groovy sin Grails. Lo que aporta el plugin de grails es que ayuda a olvidarse de instalar jruby y la gema de cuke4duke, lo integra como herramienta de línea de comandos(ejecutando <strong>grails cucumber</strong>) y entonces tampoco es necesario configurar nada nuevo en el servidor de integracion contínua para ejecutar estos tests.</p>
<p>En mi opinión, todavía está lejos de la integración de Cucumber con Rails, al menos por lo que yo recuerdo. Con Rails tras cada escenario se devuelve la base de datos al mismo estado inicial, es posibl combinar comprobaciones a nivel de interfaz y a la vez acceder a los métodos de los modelos para preparar o comprobar el escenario&#8230; vamos, que ayuda a que puedan ser tests menos frágiles, que es lo negativo que se suele ver en los test de aceptación(también llamados funcionales o de sistema). </p>
<p>De todas formas, sigue siendo un plugin muy interesante por poder conocer en un lenguaje cercano al natural si un escenario está en un estado <em>aceptable</em> o no, y si hay gente no técnica de por medio puede ser una herramienta perfecta para acercar <em>mundos</em>.</p>
<p>Ala! Fin del tocho! XD</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/07/12/usando-cucumber-con-grails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Conocer el próximo valor de un id AUTO_INCREMENT</title>
		<link>http://www.danilat.com/weblog/2010/06/25/conocer-el-proximo-valor-de-un-id-auto_increment/</link>
		<comments>http://www.danilat.com/weblog/2010/06/25/conocer-el-proximo-valor-de-un-id-auto_increment/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 23:03:25 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=863</guid>
		<description><![CDATA[Estoy con un pequeño trabajillo entre manos, una migración de una base de datos, y necesitaba conocer el próximo valor de un identificador AUTO_INCREMENT de MySQL. Por si a alguien le sirve(o tengo que echar mano en el futuro ), es tan sencillo como hacer una consulta a la tabla tables de information_schema. select AUTO_INCREMENT [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy con un pequeño trabajillo entre manos, una migración de una base de datos, y necesitaba conocer el próximo valor de un identificador <strong>AUTO_INCREMENT</strong> de MySQL. Por si a alguien le sirve(o tengo que echar mano en el futuro <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), es tan sencillo como hacer una consulta a la tabla  <em>tables</em> de <em>information_schema</em>.</p>
<p><code>select AUTO_INCREMENT from information_schema.TABLES where TABLE_SCHEMA='soy_la_db' and TABLE_NAME='y_yo_la_tabla';</code></p>
<p><strong>Actualización 26/07/2010:</strong><br />
Gracias a un <a href="http://www.danilat.com/weblog/2010/06/25/conocer-el-proximo-valor-de-un-id-auto_increment/comment-page-1/#comment-9986">comentario de Venkman</a>, me entero que es posible conocerlo del siguiente modo:</p>
<p><code>SHOW TABLE STATUS LIKE ‘mitabla’</code></p>
<p>Si alguien sabe si hay grandes diferencias y lo quiere compartir, será bienvenido <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/06/25/conocer-el-proximo-valor-de-un-id-auto_increment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Convocado el II encuentro Agile Aragón</title>
		<link>http://www.danilat.com/weblog/2010/06/13/convocado-el-ii-encuentro-agile-aragon/</link>
		<comments>http://www.danilat.com/weblog/2010/06/13/convocado-el-ii-encuentro-agile-aragon/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 21:12:17 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=840</guid>
		<description><![CDATA[Hace un par de semanas, Teresa Oliver avisaba en la lista de correo de Agile Spain que ya estaba preparado el II encuentro Agile Aragón. Este jueves 17 de Junio en el edificio del ITA en Zaragoza, por problemas logísticos se cambia el día al Lunes 21 de Junio a las 18:30. En esta ocasión [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un par de semanas, <a href="http://es.linkedin.com/in/teresaoliver">Teresa Oliver</a> avisaba en la lista de correo de Agile Spain que <a href="http://groups.google.com/group/agile-spain/browse_thread/thread/5dbbc6d3f90e64fc/ca97fba129e2b6a3#ca97fba129e2b6a3">ya estaba preparado el II encuentro Agile Aragón</a>. Este <del datetime="2010-06-14T13:16:41+00:00">jueves 17 de Junio</del> en el edificio del <a href="http://www.ita.es/ita/?ID=159">ITA en Zaragoza</a>, por <strong>problemas logísticos se cambia el día al Lunes 21 de Junio a las 18:30</strong>.</p>
<p>En esta ocasión será un evento <em>formal</em>, donde gente de <a href="http://frogtek.org/">Frogtek</a>, en mi humilde opinión, una de las startups tecnológicas con mejor pinta en Aragón; nos explicará cómo trabajan y el ecosistema de  herramientas que utilizan. </p>
<p>Hay un video que ronda desde hace unas semanas por youtube y en algunas listas de correo a las que estoy suscrito, en donde se puede intuir de que hablaran este jueves <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/6csD1P1fIUk&#038;hl=es_ES&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/6csD1P1fIUk&#038;hl=es_ES&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/06/13/convocado-el-ii-encuentro-agile-aragon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL con Javascript: Web SQL Database</title>
		<link>http://www.danilat.com/weblog/2010/05/18/sql-con-javascript-web-sql-database/</link>
		<comments>http://www.danilat.com/weblog/2010/05/18/sql-con-javascript-web-sql-database/#comments</comments>
		<pubDate>Tue, 18 May 2010 00:20:56 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=803</guid>
		<description><![CDATA[Como supongo que muchos ya sabréis, una especificación de HTML5 es Web SQL Database para persirtir datos en una base de datos relacional embebidos en el navegador web(la otra alternativa es Web Storage, para persistir datos como clave valor). Esto puede tener muchas aplicaciones, en mi caso lo he utilizado para implementar el sistema de [...]]]></description>
			<content:encoded><![CDATA[<p>Como supongo que muchos ya sabréis, una especificación de HTML5 es <a href="http://dev.w3.org/html5/webdatabase/">Web SQL Database</a> para persirtir datos en una base de datos relacional embebidos en el navegador web(la otra alternativa es <a href="http://dev.w3.org/html5/webstorage/">Web Storage</a>, para persistir datos como clave valor). Esto puede tener muchas aplicaciones, en mi caso lo he utilizado para implementar el sistema de favoritos de <a href="http://www.dndzgz.com/">DNDzgz</a>.</p>
<p>Cuando pretendamos sacar partido de las nuevas características de HTML5 debemos tener en cuenta que cada navegador puede soportar sólo algunas especificaciones, no es un todo o nada, por lo que lo primero que deberemos hacer es comprobar que soporta la especificación que queremos usar, por ejemplo:</p>
<p><code> function supports_local_database() {<br />
  return !!window.openDatabase;<br />
}</code></p>
<p>Si existe openDatabase, crearemos la conexión a la base de datos:</p>
<p><code><br />
db = openDatabase('dndzgz', '1.0',  'DNDzgz', 65536);</code></p>
<p>Una vez abierta la conexión, podremos ejecutar cualquier tipo de query SQL(compatible con <a href="http://www.sqlite.org/">SQLite</a>), dentro de una transacción. Por ejemplo crear una tabla:</p>
<p><code>db.transaction(<br />
function(transaction) {<br />
transaction.executeSql(<br />
'CREATE TABLE IF NOT EXISTS favorites ' +<br />
' (id INTEGER NOT NULL, ' +<br />
' service VARCHAR(255) NOT NULL, ' +<br />
' date DATE NOT NULL,' +<br />
' name VARCHAR(255) NOT NULL, ' +<br />
' latitude REAL NOT NULL, ' +<br />
' longitude REAL NOT NULL, ' +<br />
' PRIMARY KEY (id,service));'<br />
);<br />
}<br />
);</code></p>
<p>Insertar datos:</p>
<p><code>db.transaction(<br />
function(transaction) {<br />
transaction.executeSql(<br />
'INSERT INTO favorites (id, service, date, name, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?);',<br />
[id, service, new Date(), name, latitude, longitude],<br />
callBack,<br />
errorCallBack<br />
);<br />
}<br />
);</code></p>
<p>Eliminar datos:</p>
<p><code>db.transaction(<br />
function(transaction) {<br />
transaction.executeSql('DELETE FROM favorites WHERE id=? AND service=?;',<br />
[id,service], null, errorCallBack);<br />
}<br />
);</code></p>
<p>Y por supuesto mostrarlos:</p>
<p><code>db.readTransaction(<br />
function(transaction) {<br />
transaction.executeSql(<br />
'Select * from favorites;', [],<br />
function(transaction, result){<br />
for (var i=0; i < result.rows.length; i++) {<br />
var row = result.rows.item(i);<br />
alert(row.name);<br />
alert(row.service);<br />
}<br />
},<br />
errorCallBack<br />
);<br />
}<br />
);</code></p>
<p>Como podéis ver, a <strong>executeSql</strong> se le pasa primero la query, seguidamente un array con los valores de los argumentos de la query, y finalmente una función de callback y otra de callback para el caso de que existan errores. Y existen dos tipos de transacciones: <strong>transaction</strong> y <strong>readTransaction</strong>, la primera es de lectura-escritura, mientras que la segunda es de sólo lectura.</p>
<p>En fin, supongo que a otros también os pasará lo mismo, resulta bastante raro estar tirando queries SQL desde javascript. Pero puede resultar útil para muchos casos, empezando por descargar de responsabilidades y carga al lado servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/05/18/sql-con-javascript-web-sql-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Las entrañas de DNDzgz</title>
		<link>http://www.danilat.com/weblog/2010/04/29/las-entranas-de-dndzgz/</link>
		<comments>http://www.danilat.com/weblog/2010/04/29/las-entranas-de-dndzgz/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:20:26 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=779</guid>
		<description><![CDATA[Lo prometido es deuda, tenía pendiente escribir un poco acerca de la parte técnica del fin de semana del desafío AbreDatos y de DNDzgz. A grosso modo las tecnologías utilizadas fueron Google App Engine(GAE) y Python del lado servidor; del lado cliente fueron Javascript con jQuery, la versión 3 del API de Google Maps, algunas [...]]]></description>
			<content:encoded><![CDATA[<p>Lo <a href="http://www.danilat.com/weblog/2010/04/20/nuestra-aportacion-en-el-desafio-abredatos-2010-dndzgz-com/">prometido es deuda</a>, tenía pendiente escribir un poco acerca de la parte técnica del fin de semana del <a href="http://www.abredatos.es/">desafío AbreDatos</a> y de <a href="http://www.dndzgz.com/">DNDzgz</a>. A <em>grosso modo</em> las tecnologías utilizadas fueron <a href="http://code.google.com/intl/es-ES/appengine/">Google App Engine</a>(GAE) y <a href="http://www.python.org/">Python</a> del lado servidor; del lado cliente fueron Javascript con <a href="http://jquery.com/">jQuery</a>, la versión <a href="http://code.google.com/intl/es-ES/apis/maps/documentation/v3/">3 del API de Google Maps</a>, algunas de las novedades de <a href="http://dev.w3.org/html5/spec/Overview.html">HTML5</a>, unas gotas de <a href="http://www.w3.org/TR/css3-roadmap/">CSS3</a> y <a href="http://jqtouch.com/">jQTouch</a> para ayudarnos para que tuviera pinta de aplicación nativa iPhone. Usamos <a href="http://git-scm.com/">Git</a> como repositorio de código, el repositorio está concretamente <a href="http://github.com/danilat/closin">en github</a>; para los documentos, diseños, fotos, etc. utilizamos <a href="https://www.dropbox.com/">dropbox</a>(antes del fin de semana yo no tenía ni cuenta <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<div align="center"><a href="http://www.dndzgz.com/" title="Logo DNDzgz"><img src="http://farm4.static.flickr.com/3120/4561892814_761c6fd258_o.jpg" width="292" height="113" alt="Logo DNDzgz" /></a></div>
<p>La elección de GAE fue casi instantánea cuando empezamos a hablar con <a href="http://gimenete.wordpress.com/"><strong>gimenete</strong></a> acerca de presentarnos al AbreDatos, las razones: hosting gratis y capacidad de escalar mucho sin tener que gastarnos ni un euro, despreocuparnos de la parte de sistemas, ningún problema con las limitaciones por correr sobre la plataforma de Google. </p>
<p>Que usáramos Python, aún siendo más <em>javeros</em> que otra cosa, fue por que ninguno de los 2 teníamos experiencia con GAE en Java(okok, yo había hecho <a href="http://www.danilat.com/weblog/2010/03/02/el-zaragoza-twitter-y-gaelykgroovy-appengine/">un pequeño experimento</a>, pero muy poca cosa para llegar a ninguna conclusión). Por eso preferimos aprovechar su experiencia desarrollando la primera versión de <a href="http://es.debugmodeon.com/">debug_mode=ON</a> con Python+GAE; mientras que varias semanas antes yo me ojeé un par de manuales de inicio rápido, retomé el ebook <a href="http://mundogeek.net/tutorial-python/">Python para todos</a> que tenía a medio leer(hace muuuucho <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) y un par de días antes, me hice en poco rato <a href="http://code.google.com/intl/es-ES/appengine/docs/python/gettingstarted/">el proyecto de ejemplo de GAE</a>. Para extraer los datos utilizamos tanto <a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a> como expresiones regulares para hacer scraping de HTML o Javascript de <a href="http://www.tuzsa.es/">Tuzsa</a> y <a href="http://www.bizizaragoza.com/">Bizi</a>, y simplejson para cargar los datos JSON de <a href="http://datos.zaragoza.es/">datos.zaragoza.es</a>.</p>
<p>Que utilizáramos jQuery como framework Javascript, fue una elección posterior a jQTouch(que está basado en jQuery) pero de todas formas, seguramente lo hubiéramos elegido. Google Maps es la elección &#8220;por defecto&#8221; para todo el que quiere hacer algo con mapas <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Gimenete es quien estuvo peleando con esto, teníamos problemas con la fluidez en la navegación de los mapas, que al final consiguió mejorar&#8230; Eso sí, fuera del navegador Safari del iPhone no conseguimos que los mapas funcionaran correctamente, ni en terminales con distintas versiones de Android y ni si quiera en el Safari de Mac(tenemos que ver que pasa exactamente, tras algunas pruebas, el sospechoso principal es jQTouch).</p>
<p>Gracias a que iPhone(y las últimas versiones de Android) soportan parte de HTML5, se ponían a nuestra disposición algunas de esas novedades que molan tanto (Flash, tiemblaaa!! <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ): </p>
<ul>
<li>La posibilidad de geolocalizar al usuario por medio del GPS del terminal (<a href="http://diveintohtml5.org/detect.html#live-geolocation">no es exactamente HTML5</a>, pero parece que la mayoría lo ponemos en el mismo saco) muy fácilmente utilizando <strong>navigator.geolocation</strong>. </li>
<li>Para implementar los favoritos/acceso rápido estuvimos usando <a href="http://dev.w3.org/html5/webdatabase/">Web SQL Database</a>, lo que supone guardar los datos en una base de datos embebida al navegador web(actualmente parece que en todos es SQLite, o al menos parece ser la <em><a href="http://dev.w3.org/html5/webdatabase/#web-sql">implementación de referencia</a></em>), que finalmente se quedó fuera por falta de 3/4 horas :S.</li>
</ul>
<p>En fin, que debemos molar, porque nuestro proyecto es una pequeña colección de buzzwords: Cloud Computing vía Google App Engine, HTML5, iPhone&#8230; XD</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/04/29/las-entranas-de-dndzgz/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>I encuentro Agile Spain en Aragón</title>
		<link>http://www.danilat.com/weblog/2010/03/31/i-encuentro-agile-spain-en-aragon/</link>
		<comments>http://www.danilat.com/weblog/2010/03/31/i-encuentro-agile-spain-en-aragon/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:22:57 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/?p=729</guid>
		<description><![CDATA[El lunes me quedé sorprendido por la respuesta ante el primer encuentro Agile Spain en Aragón, que había convocado Teresa Oliver, alrededor de 20 personas terminamos asistiendo a esta primera toma de contacto. Gente que nos dedicamos a crear nuestros propios productos de software, que da servicios de desarrollo de software, de administraciones públicas&#8230; y [...]]]></description>
			<content:encoded><![CDATA[<p>El lunes me quedé sorprendido por la respuesta ante el primer encuentro <a href="http://www.agile-spain.com/">Agile Spain</a> en Aragón, que había convocado <a href="http://es.linkedin.com/in/teresaoliver">Teresa Oliver</a>, alrededor de 20 personas terminamos asistiendo a esta primera toma de contacto. Gente que nos dedicamos a crear nuestros propios productos de software, que da servicios de desarrollo de software, de administraciones públicas&#8230; y de diferentes roles dentro de cada organización.</p>
<p>Personalmente fuí a tomar el pulso de la situación del <em>agilismo</em> en mi tierra y a aprender lo que pudiera, y aunque me quedé con la sensación que por estos lares andamos bastante verdes, creo que hay potencial para que esto vaya mejorando. Tampoco tuve oportunidad de <em>absorver conocimiento</em> <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> , por ser la primera reunión y estar bastante gente terminamos discutiendo en <em>corrillos</em>, aunque yo tuve conversaciones que me hicieron pensar y estrujarme la cabeza XD.</p>
<p>En fin, esperaremos al siguiente encuentro, a ver si la respuesta de la gente es al menos igual, tratamos ya un tema concreto para ver que se puede aprender de experiencias ajenas, y porqué no&#8230; hasta intentar aportar algo <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ya que estamos, por si alguien anda despistado con esto de las <a href="http://es.wikipedia.org/wiki/Desarrollo_%C3%A1gil_de_software">metodologías ágiles</a>, dejo aquí el <a href="http://agilemanifesto.org/">manifiesto ágil</a>, que además siempre queda bien ponerlo <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> :</p>
<blockquote><p>Estamos poniendo al descubierto mejores métodos para desarrollar software, haciéndolo y ayudando a otros a que lo hagan. Con este trabajo hemos llegado a valorar:</p>
<ul>
<li><strong>Individuos e interacciones</strong> sobre procesos y herramientas</li>
<li><strong>Software que funciona</strong> sobre documentación exhaustiva</li>
<li><strong>Colaboración con el cliente</strong> sobre negociación de contratos</li>
<li><strong>Responder ante el cambio</strong> sobre seguimiento de un plan</li>
</ul>
<p>Aunque los elementos a la derecha tienen valor, nosotros valoramos por encima de ellos los que están a la izquierda.</p></blockquote>
<p>Y pos supuesto un placer ver a gente conocida interesada por el tema, conocer caras nuevas del mundillo, y coincidir por fin con <a href="http://jorgerubira.blogspot.com/">Jorge Rubira</a>, que ya era hora!! <img src='http://www.danilat.com/weblog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2010/03/31/i-encuentro-agile-spain-en-aragon/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
