<?xml version="1.0" encoding="UTF-8"?>
<rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Javi Sanromán</title>
	<atom:link href="http://www.jsanroman.net/index.php/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.jsanroman.net</link>
	<description>programación, java, software libre, ubuntu, tecnología, pensamientos, ...</description>
	<pubDate>Wed, 09 Sep 2009 15:28:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Swiftmailer, gmail y cakephp</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/trXgtWZVd2E/</link>
		<comments>http://www.jsanroman.net/2009/09/09/swiftmailer-gmail-y-cakephp/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 15:28:42 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Php]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[cakephp]]></category>

		<category><![CDATA[swiftmailer]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=510</guid>
		<description><![CDATA[Bastante tiempo sin escribir ya. Desde la última vez: unas cortas y merecidas vacaciones, comienzo de un proyecto muy ilusionante del que espero hablar algún dia (lo contrario sería una mala noticia), mucho trabajo, y por último una gran noticia pero que me trae en vilo últimamente. En fin que todo a su debido tiempo [...]]]></description>
			<content:encoded><![CDATA[<p>Bastante tiempo sin escribir ya. Desde la última vez: unas cortas y merecidas vacaciones, comienzo de un proyecto muy ilusionante del que espero hablar algún dia (lo contrario sería una mala noticia), mucho trabajo, y por último una gran noticia pero que me trae en vilo últimamente. En fin que todo a su debido tiempo e intentando mantener la cabeza bien fría.</p>
<p>En mi macbook no tengo ningun servidor de smtp instalado, ni quiero si no es absolutamente necesario. Por ello que para hacer diferentes pruebas de envio de mail desde local utilizo servidores externos. Tengo una cuenta creada en google para este fin, en este caso concreto utilizo cakephp, y ni el componente que este trae por defecto ni phpmailer pueden conectarse con las cuentas gmail al no soportar <a title="SSL / TLS" href="http://es.wikipedia.org/wiki/SSL">TLS (Trasport Layer Security)</a>, protocolo de autentificación utilizado por gmail.</p>
<p>Buscando otras opciones me encontré con <a title="SwiftMailer" href="http://swiftmailer.org/">SwiftMailer</a>, y aunque sería sencillo desarrollar un componente que haga uso de esta librería ya lo han hecho por nosotros <a title="SwiftMailer componente cakephp" href="http://bakery.cakephp.org/articles/view/swiftmailer-component">http://bakery.cakephp.org/articles/view/swiftmailer-component</a>.</p>
<p>Este componente que nos descargamos para cakephp usa sendmail por defecto, pero si lo que necesitamos (por ejemplo una vez subamos a producción) es simplemente <a href="http://swiftmailer.org/docs/mail-transport-howto">usar la función mail() de php, SwiftMailer nos ofrece un wrapper sobre la misma mediante la clase Swift_MailTransport</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/09/09/swiftmailer-gmail-y-cakephp/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/09/09/swiftmailer-gmail-y-cakephp/</feedburner:origLink></item>
		<item>
		<title>Api gxt rc1: cierre y ocultamiento de ventanas</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/Wqso6v9Beeo/</link>
		<comments>http://www.jsanroman.net/2009/06/29/api-gxt-rc1-cierre-y-ocultamiento-de-ventanas/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 10:42:32 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=486</guid>
		<description><![CDATA[Pasamos a probar la nueva rc1 de gxt2.0.
Sorpresón, las ventanas ya no se cierran, solo se ocultan, y claro esto ya ha provocado debate. Explican que ellos las eliminarán completamente en cuanto se pierda la referencia. Hasta aquí (aunque no acabo de entender el porqué del cambio, bien podrían haber mantenido el close por si [...]]]></description>
			<content:encoded><![CDATA[<p>Pasamos a probar la nueva <a title="http://extjs.com/products/gxt/download.php" href="http://extjs.com/products/gxt/download.php">rc1 de gxt2.0</a>.</p>
<p>Sorpresón, las ventanas ya no se cierran, solo se ocultan, y claro esto ya <a href="http://extjs.com/forum/showthread.php?t=70856">ha provocado debate</a>. Explican que ellos las eliminarán completamente en cuanto se pierda la referencia. Hasta aquí (aunque no acabo de entender el porqué del cambio, bien podrían haber mantenido el close por si la quiero destruir yo mismo! e implementar igualmente el mecanismo de liberación de memoria de los objetos no usados) tampoco voy a reprocharles nada.</p>
<p>Ahora, tengo una ventana, con los 3 típicos botones: minimiza, maximiza, cierra. Necesito de alguna forma distinguir el evento de cierre del de minimizar. Hasta ahora simplemente se implementaban 2 listeners diferentes: windowHide, windowClose. Pero como decimos windowClose desaparece, hemos de buscar otra forma alternativa de diferenciar entre un cierre y un hide, y por defecto el evento generado por botón close de las ventanas no nos da el botón que hemos pulsado, supongo que se les ha escapado.</p>
<p>Finalmente veo 2 opciones:</p>
<p><strong>La primera</strong> y mas sencilla es pasar algún parámetro a la ventana en el momento del ocultamiento/mimización (navegando a los fuentes del sistema <a href="http://en.wikipedia.org/wiki/Multiple_document_interface">MDI</a> que implementa gxt veo que esta es la opción que utilizan), por ejemplo:</p>
<div class="syntax_hilite">
<div id="java-6">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">setData<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"minimize"</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
y ya en el evento hide comprobar si la ventana ha sido mimizada o por el contrario está cerrada.</p>
<div class="syntax_hilite">
<div id="java-7">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> windowHide<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AWindowEvent+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">WindowEvent</span></a> we<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">boolean</span> minimize = getData<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"minimize"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>!minimize<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#123;</span><span style="color: #808080; font-style: italic;">// Si minimize es false es que la hemos cerrado =&gt; </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// hacemos lo que necesitemos, por ejemplo eliminar un boton de la barra de tareas</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>Y la segunda</strong>:<br />
Ya que como deciamos el evento generado por el botón close de la ventana no nos ofrece el botón pulsado, vamos a ocultar los botones por defecto de la ventana y añadir los nuestros.</p>
<p>Primero ocultamos los botones "por defecto":</p>
<div class="syntax_hilite">
<div id="java-8">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">setMinimizable<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">setMaximizable<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">setClosable<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Ahora añadimos nuestros propios botones, y para close nuestro propio evento pasando un botón (creado exclusivamente con este fin) al método hide, ya que hide solo puede recibir Button y no ToolButton:</p>
<div class="syntax_hilite">
<div id="java-9">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">final</span> ToolButton closeBtn = <span style="color: #000000; font-weight: bold;">new</span> ToolButton<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"x-tool-close"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">closeBtn.<span style="color: #006600;">addListener</span><span style="color: #66cc66;">&#40;</span>Events.<span style="color: #006600;">Select</span>, <span style="color: #000000; font-weight: bold;">new</span> Listener&lt;ComponentEvent&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> handleEvent<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AComponentEvent+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">ComponentEvent</span></a> ce<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// Buff, el hide solo recibe un Button no un ToolButton, q coñazo!! =&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// creamos un botón simplemente para pasarlo como argumento </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// y saber que estamos cerrando la ventana</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AButton+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Button</span></a> buttonCloseTmp = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AButton+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Button</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"close-window"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; buttonCloseTmp.<span style="color: #006600;">setId</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"close-window"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; hide<span style="color: #66cc66;">&#40;</span>buttonCloseTmp<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #006600;">getHeader</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addTool</span><span style="color: #66cc66;">&#40;</span>closeBtn<span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Y ahora si, en el evento generado por el ocultamiento de una ventana podemos diferenciar cuando la estamos cerrando o cuando la estamos enviando por ejemplo, a la barra de tareas:</p>
<div class="syntax_hilite">
<div id="java-10">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">@Override</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> windowHide<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AWindowEvent+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">WindowEvent</span></a> we<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>we.<span style="color: #006600;">getButtonClicked</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> != <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>we.<span style="color: #006600;">getButtonClicked</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getId</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"close-window"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// sabemos que hemos pulsado el botón de cierre de la ventana =&gt; </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// hacemos lo que necesitemos, por ejemplo eliminar un boton de la barra de tareas</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>En fin, que no acabo de entender porque eliminan la funcionalidad del close, como decía sería mejor mantenerla e implementar además el mecanismo de liberación de memoria. Se mantendría la compatibilidad y podríamos diferenciar de una forma mas lógica y fiable cuando se produce el cierre, ya que son dos operaciones claramente diferenciadas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/06/29/api-gxt-rc1-cierre-y-ocultamiento-de-ventanas/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/06/29/api-gxt-rc1-cierre-y-ocultamiento-de-ventanas/</feedburner:origLink></item>
		<item>
		<title>Comparativa jquery vs mootools</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/qXxU2Pv4XSU/</link>
		<comments>http://www.jsanroman.net/2009/06/12/comparativa-jquery-vs-mootools/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 12:57:08 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=479</guid>
		<description><![CDATA[Una comparativa entre jquery y mootools http://jqueryvsmootools.com, de uno de los desarrolladores de mootools, seguro que no es del todo objetiva, pero me ha gustado. La idea general:
jquery enfocado a manejo del dom, ellos mismos dicen:
"jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for [...]]]></description>
			<content:encoded><![CDATA[<p>Una comparativa entre jquery y mootools <a title="http://jqueryvsmootools.com/" href="http://jqueryvsmootools.com/">http://jqueryvsmootools.com</a>, de uno de los desarrolladores de mootools, seguro que no es del todo objetiva, pero me ha gustado. La idea general:</p>
<p><a title="http://jquery.com/" href="http://jquery.com/">jquery</a> enfocado a manejo del dom, ellos mismos dicen:</p>
<blockquote><p>"jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript."</p></blockquote>
<p><a title="http://mootools.net" href="http://mootools.net">mootools</a> es mas un framework javascript, con el que sigues escribiendo javascript pero de la forma que consideran adecuada los desarrolladores de mootools, ellos dicen:</p>
<blockquote><p>"MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API."</p></blockquote>
<p>Mootools hace mas divertido trabajar con Javascript. Jquery hace mas divertido trabajar con el DOM.</p>
<p>Ninguno es mejor sino que cada uno tiene un cometido diferente. La popularidad y éxito de jquery radica en que la muchos desarrolladores web utilizan javascript casi exclusivamente para el manejo del doom, y para ello esta librería es la mas sencilla.</p>
<p>Curva de aprendizaje y comunidad: de largo la curva de aprendizaje es mucho menor con jquery y seguramente debido a esto también es la que tiene mayor comunidad de usuarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/06/12/comparativa-jquery-vs-mootools/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/06/12/comparativa-jquery-vs-mootools/</feedburner:origLink></item>
		<item>
		<title>Mas cosas sobre gwt y derivados</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/x8bqpAuDe38/</link>
		<comments>http://www.jsanroman.net/2009/04/30/mas-cosas-sobre-gwt-y-derivados/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 15:45:58 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[utilidades]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=445</guid>
		<description><![CDATA[A ver por donde empiezo, que son muchas las novedades/experiencias acumuladas los últimos días sobre gwt, buenas y no tan buenas:
SmartClient 
1- El rendimiento de smartclient, sobre todo en ie y equipos poco potentes, deja bastante que desear. Especialmente utilizando grids con muchas columnas. Varios fueron los intentos por solucionarlo: precargar imágenes antes de mostrar [...]]]></description>
			<content:encoded><![CDATA[<p>A ver por donde empiezo, que son muchas las novedades/experiencias acumuladas los últimos días sobre gwt, buenas y no tan buenas:</p>
<p><strong>SmartClient</strong><span style="text-decoration: underline;"><strong> </strong></span></p>
<p style="padding-left: 30px;">1- El <strong>rendimiento</strong> de smartclient, sobre todo en ie y equipos poco potentes, deja bastante que desear. Especialmente utilizando grids con muchas columnas. Varios fueron los intentos por solucionarlo: precargar imágenes antes de mostrar componente, activar caché, hacer rollover sobre color de fondo y no sobre imagen, <em>setShowAllRecords(false), </em>personalizar estilo filas<em> setBaseStyle("estilo_filas_grid").</em> En fin, que no soy el único quejica, <a href="http://forums.smartclient.com/showthread.php?t=5193&amp;highlight=grid+ie6">aqui un hilo significativo en los foros</a>, el problema parece que está en la raíz.</p>
<p style="padding-left: 30px;">2- Soporte: 2 caras 1 cruz</p>
<p style="padding-left: 30px;">Dos problemas de maquetación, y dos envíos a los foros de smartclient.</p>
<p style="padding-left: 30px;">Cara, <a href="http://forums.smartclient.com/showthread.php?t=5406">una duda sobre la existencia de un flowlayout</a> perfectamente resuelta por uno de los usuarios.</p>
<p style="padding-left: 30px;">Cruz, <a href="http://forums.smartclient.com/showthread.php?t=5285">un problema al intentar posicionar un DisclosurePanel de gwt dentro de un window de smartclient con posición absoluta</a>, ni una sola respuesta. Finalmente lo solucioné con un SectionStack de smartclient, pero nada de posiciones absolutas.</p>
<p style="padding-left: 30px;">Otra cara, contacto directo vía mail con gente de smartclient, siempre responden <img src='http://www.jsanroman.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p style="padding-left: 30px;">3- Integración gwt-smartclient: Al hilo de estos problemas, comentar que la integración de componentes gwt con smartclient no es buena. Así que si elegimos smartclient tendremos que usar muchos componentes smartclient para evitar problemas de maqueta.</p>
<p style="padding-left: 30px;">De cualquier forma no puede haber queja del soporte.</p>
<p style="padding-left: 30px;">Gracias a smartclient por ofrecer una librería gratuita sobre gwt como esta. Pero queremos mas y sobre todo mejor, estaremos atentos.</p>
<p><strong>gwt-exporter</strong></p>
<p style="padding-left: 30px;"><a href="http://www.javahispano.org/contenidos/es/creando_librerias_javascript_desde_gwt_11/">Desde javahispano</a> me entero de la existencia de <a href="http://code.google.com/p/gwt-exporter/">gwt-exporter</a>. Aun existiendo librerías javascript libres (jquery&amp;otras) tan buenas, prácticas, con gran comunidad, etc, es muy interesante la posibilidad de desarrollar una propia librería bajo gwt para que después terceras personas/equipos la usen desde javascript al estilo jquery&amp;otras.</p>
<p><strong>Google Plugin for Eclipse</strong></p>
<p style="padding-left: 30px;">Desde que hace tiempo probé sin éxito <a href="http://code.google.com/p/cypal-studio/">cypal</a>, no habia buscado alternativas y me valía la simple estructura generada por los scripts de gwt. Ahora google publica <a title="Google Plugin for Eclipse" href="http://code.google.com/intl/es-ES/eclipse/">Google Plugin for Eclipse</a>, tanto para gwt como para App Engine, un nuevo pasito.</p>
<p><strong>Gwt 1.6</strong></p>
<p style="padding-left: 30px;"><a title="Gwt 1.6" href="http://googlewebtoolkit.blogspot.com/2008/12/whats-ahead-for-google-web-toolkit_10.html">Nueva versión de gwt</a>. <a href="http://code.google.com/webtoolkit/doc/1.6/ReleaseNotes_1_6.html">Aqui lo nuevo</a>, a modo de resumen:</p>
<p style="padding-left: 30px;">Nueva estructura de proyecto: Bien! se eliminan los (.launch, .compile, .shell) y se añade fichero de tareas ant.</p>
<p style="padding-left: 30px;">Se sustituyen Listeners por Handlers.</p>
<p style="padding-left: 30px;">Nuevos widgets, <a rel="nofollow" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/datepicker/client/DatePicker.html">DatePicker, </a><a rel="nofollow" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/datepicker/client/DateBox.html">DateBox</a> y <a rel="nofollow" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/ui/LazyPanel.html">LazyPanel</a>, no llegan no ¡queremos mas!.</p>
<p style="padding-left: 30px;">Creación y activación de eventos nativos.</p>
<p style="padding-left: 30px;">Mejoras en el Modo Hosted.</p>
<p style="padding-left: 30px;">
<p><strong>Slider</strong></p>
<p style="padding-left: 30px;">Que gwt todavía no tenga un slider pasa (<a href="http://google-web-toolkit-incubator.googlecode.com/svn/trunk/demo/SliderBar/index.html">está en la incubadora</a>). Pero que ext gwt no tenga slider en su versión stable ya es demasiado, si, lo incluyen en su próxima versión 2.0.</p>
<p style="padding-left: 30px;">Google!, que sepas que echamos de menos nuevos y mejores <a title="Widgets" href="http://code.google.com/intl/es-ES/webtoolkit/doc/1.6/RefWidgetGallery.html">widgets</a>, ya se que no me escucha pero hay que intentarlo.</p>
<p><strong>Ext GWT nativo</strong></p>
<p style="padding-left: 30px;">Me gusta que la implementación de extgwt sea de forma nativa sobre gwt y no se utilicen librerías externas. En general (aun con los problemas que comenté en el post anterior) la integración con gwt está mas conseguida y el rendimiento es mucho mejor que en smartclient, aunque me pese es así.</p>
<p style="padding-left: 30px;">
<p>Sobre el semestre en la uoc, lo mas destacable: TALF2 me mata.</p>
<p>Sobre <a href="http://www.fnac.es/dsp/?servlet=extended.HomeExtendedServlet&amp;prodID=596263">El quinto día</a>, mantengo lo dicho quitando el último capítulo (que pesado).</p>
<p>Me he enganchado desde el principio a <a title="El Ocho" href="http://es.wikipedia.org/wiki/El_Ocho">El Ocho</a>, imprescindible para los jugones del ajedrez <img src='http://www.jsanroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/04/30/mas-cosas-sobre-gwt-y-derivados/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/04/30/mas-cosas-sobre-gwt-y-derivados/</feedburner:origLink></item>
		<item>
		<title>Gwt &gt; smartclient: Por un puñetero punto y coma</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/6P_JsBUUPcI/</link>
		<comments>http://www.jsanroman.net/2009/04/06/gwt-smartclient-por-un-punetero-punto-y-coma/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 13:14:33 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=414</guid>
		<description><![CDATA[
Desde que hace algo mas de 1 año dejé de luchar a fondo con el html+css (ahora priorizamos funcionalidad a diseño) no me había topado con un problema tan tonto, de esos tan tontos que te tocan lo que ya sabeis. Un puñetero punto y coma.
El caso es que hace un par de semanas que [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;" src="./wp-content/uploads/2009/04/gwt-logo.png" alt="" /><br />
Desde que hace algo mas de 1 año dejé de luchar a fondo con el html+css (ahora priorizamos funcionalidad a diseño) no me había topado con un problema tan tonto, de esos tan tontos que te tocan lo que ya sabeis. Un puñetero punto y coma.</p>
<p>El caso es que hace un par de semanas que he decidido retomar mis pinitos de hace 9 meses con gwt, esta vez algo mas en serio y centrandome sobre todo en la construcción de la interfaz.</p>
<p>Todavía no había escrito nada sobre gwt, entre otras cosas porque no tengo tiempo, pero vamos, que dando una vuelta por la <a title="Documentacion GWT" href="http://code.google.com/intl/es-ES/webtoolkit/overview.html">documentación oficial</a> la idea queda clara. Un framework que pretende hacer mas sencilla la generación de la interfaz para aplicaciones web (y sobre todo mas próxima a los programadores que no se llevan bien con el html+css+javascript, cuando menos la mayoría que han programado siempre en escritorio).</p>
<p>La idea básica es programar en java (como para swing) y mediante el compilador gwt generar toda la capa cliente <em>html+css+javascript</em>. Pero bueno dejamos para otro post generalidades sobre gwt, y vamos con mi estúpido problema.</p>
<p>Primero probé gwt sin más, componentes muy muy básicos, pero que funcionan.</p>
<p><img style="float:right;" src="./wp-content/uploads/2009/04/extjs2.png" alt="" />Continuamos con <a title="GXT" href="http://extjs.com/products/gxt/">gxt</a>, componentes muy elaborados, demostración de interfaz MDI, tablas, formularios, etc. Aunque a veces se hace un lio con la generación de estilos, y otras no hace caso a los tamaños que inyectas desde java y debes atacar directamente al css generado (es un peligro). Además desde hace un tiempo la versión comercial es de pago.</p>
<p>Llegamos a <a title="SmartGWT" href="http://code.google.com/p/smartgwt/">smartgwt</a>, componentes muy parecidos a gxt, un wrapper sobre <a href="http://www.smartclient.com">smartclient</a>, esta última de pago, pero parece que la versión gwt es gratuita. La verdad: menudo jaleo de licencias, cada vez entiendo menos. Pruebo esta versión, combinando con controles de gwt nativos para depender lo menos posible de una tercera librería.</p>
<p><img style="float:right;" src="./wp-content/uploads/2009/04/smartgwt_logo.png" alt="" />Por el momento me gusta smartclient (incluso el codigo generado no parece ser tan "cochino" como el de gxt), sigo con las pruebas..., inserto un <em>DisclosurePanel</em> dentro de un <em>Window</em> de smartgwt, problema, aparece con un height que yo no pongo, no se de donde sale (el problema de gwt cuando las cosas no salen a la 1ª). Le pongo un tamaño <strong><em>dpContentSearch.setHeight("40px;")</em></strong>, ni caso. Además no es el height del <em>DisclosurePanel</em> sino el del contenedor, el del layout del <em>Window</em> de smartgwt. Cambio el <em>DisclosurePanel</em> por un <em>HorizontalPanel</em>, nada, lo cambio por un <em>Canvas</em> de smartgwt a ver si el problema va a ser la mezcla de componentes, tampoco.</p>
<p>Se me acaban las ideas, navego por los foros de smartclient, por los fuentes de los diversos componentes buscando algún método que lo solucione, vueltas y mas vueltas... ya por desesperación y tras largo tiempo intentando mas cosas cambio de nuevo el 40 y funciona!, cosa mas rara. Intento buscar la diferencia... el punto y coma del 40, <strong><em>dpContentSearch.setHeight("40px")</em></strong> no, no es lo mismo. Y que conste que el <em>";"</em> no era ninguna tontería, por ejemplo en gxt se permite, incluso se permite insertar un <em>"40px !important;"</em>, por eso este método recibe un string, además de para especificar el tamaño en la unidad que necesites.</p>
<p>Isa se ríe de mi (parece q a las químicas no les pasan estas cosas), me piro a la siesta, es domingo y toca descansar, aunque con este sentimiento de rabia-euforia-emoción-soyunpocotonto es imposible, mejor leo y punto: "<a href="http://www.fnac.es/dsp/?servlet=extended.HomeExtendedServlet&amp;prodID=596263">El quinto día</a> (Franz Schätzing)" ahora que llego al final me he enganchao <img src='http://www.jsanroman.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/04/06/gwt-smartclient-por-un-punetero-punto-y-coma/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/04/06/gwt-smartclient-por-un-punetero-punto-y-coma/</feedburner:origLink></item>
		<item>
		<title>Otra de prototipos en papel</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/okOz4K_zRLs/</link>
		<comments>http://www.jsanroman.net/2009/03/13/otra-de-prototipos-en-papel/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 16:16:34 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[prototipos]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=410</guid>
		<description><![CDATA[¿Que eres de los que todavía no puede pasar de los prototipos a papel y lapiz? ¿Estas cansado de dibujar siempre el mismo marco (ventana, barra direcciones, pestaña) de tu navegador?
He aquí la solución  

Vale que son 29$ y solo trae 45 páginas con navegador y 15 con popups, pero no me digais que [...]]]></description>
			<content:encoded><![CDATA[<p>¿Que eres de los que todavía no puede pasar de los prototipos a papel y lapiz? ¿Estas cansado de dibujar siempre el mismo marco (ventana, barra direcciones, pestaña) de tu navegador?</p>
<p>He aquí la solución <img src='http://www.jsanroman.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p><img class="alignnone" src="http://www.jsanroman.net/wp-content/uploads/2009/03/PARAN_webnotebook.jpg" alt="" width="408" height="319" /></p>
<p>Vale que son 29$ y solo trae 45 páginas con navegador y 15 con popups, pero no me digais que no quedarían curiosos los bocetos.</p>
<p>http://www.merchline.com/paranaiv/productdisplay.8328.p.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/03/13/otra-de-prototipos-en-papel/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/03/13/otra-de-prototipos-en-papel/</feedburner:origLink></item>
		<item>
		<title>Issue 1081 google maps</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/1nCytowa7wY/</link>
		<comments>http://www.jsanroman.net/2009/02/22/issue-1081-google-maps/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 15:11:47 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=400</guid>
		<description><![CDATA[Al final les envie una notificación de lo que me había pasado con la codificación de lineas (en un penoso inglés, tengo q ponerme con el  ): http://code.google.com/p/gmaps-api-issues/issues/detail?id=1081, que está aceptada.
Efectivamente parece que el paso 2 está mal documentado, no se redondea a la baja, en inglés ya solo tienen:
Take the decimal value and [...]]]></description>
			<content:encoded><![CDATA[<p>Al final les envie una notificación de lo que me había pasado con la codificación de lineas (en un penoso inglés, tengo q ponerme con el <img src='http://www.jsanroman.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> ): <a title="Issue 1081 google maps" href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=1081">http://code.google.com/p/gmaps-api-issues/issues/detail?id=1081</a>, que está aceptada.</p>
<p>Efectivamente parece que el paso 2 está mal documentado, no se redondea a la baja, en inglés ya solo tienen:</p>
<blockquote><p>Take the decimal value and multiply it by 1e5, rounding the result</p></blockquote>
<p>en lugar de:</p>
<blockquote><p>Take the decimal value and multiply it by 1e5, rounding down the result</p></blockquote>
<p>También dicen:</p>
<blockquote><p>The visual results should look pretty much the same for the viewer, however.</p></blockquote>
<p>Pero claro un pequeño error sobre otro pequeño error... al final es un gran error. Recordemos que cuando codificamos una polilinea el único punto original codificado es el primero, para los siguientes simplemente se codifica la distancia desde el punto anterior, con lo que cualquier tipo de error se multiplica y al final las diferencias pueden ser enormes.</p>
<p>Debido a esto y que me encontrado con otras pequeñas diferencias entre la herramienta de codificación y mi algoritmo, finalmente he decidido no gastar ni 1seg mas de mi escaso tiempo. Representaré las lineas con los puntos originales sin codificación, y codificaré toda la lógica de carga y presentación de las diferentes líneas en base a posicion del mapa y zoom básicamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/02/22/issue-1081-google-maps/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/02/22/issue-1081-google-maps/</feedburner:origLink></item>
		<item>
		<title>Problema codificando polilíneas (GPolyline) google maps</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/U8g4WKV_1NU/</link>
		<comments>http://www.jsanroman.net/2009/02/19/problema-codificando-polilineas-gpolyline-google-maps/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 17:24:20 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=382</guid>
		<description><![CDATA[Llevo ya un buen tiempo jugando con google maps, es divertido, y si a eso le sumamos RoR, mas divertido todavía :-).
Para dibujar líneas sobre un mapa se utiliza el objeto GPolyline. Para construir esta línea lo que hacemos es unir puntos, representados mediante la clase GPoint, puntos que se construyen con 2 parametros (latitud, [...]]]></description>
			<content:encoded><![CDATA[<p>Llevo ya un buen tiempo jugando con google maps, es divertido, y si a eso le sumamos RoR, mas divertido todavía :-).</p>
<p>Para dibujar líneas sobre un mapa se utiliza el objeto <a href="http://code.google.com/intl/es/apis/maps/documentation/reference.html#GPolyline">GPolyline</a>. Para construir esta línea lo que hacemos es unir puntos, representados mediante la clase <a title="Reference GPoint" href="http://code.google.com/intl/es/apis/maps/documentation/reference.html#GPoint">GPoint</a>, puntos que se construyen con 2 parametros (latitud, longitud). Bastante básico todo.</p>
<p>Imaginemos que tenemos una Polilínea con muchisisimos puntos, llegará un momento en el que nuestro navegador será inoperativo, demasiada carga javascript, demasiado lento. Además, seguro que con un zoom muy lejano no necesitaremos dibujar tantos puntos, mmm interesante, dependiendo del zoom dibujamos unos puntos u otros, a mas detalle mas puntos. Y además, solo necesitamos dibujar los puntos que se representen sobre la zona del mapa que visualizamos, aunque la polilinea recorra todo el planeta, si solo veo Galicia no quiero cargar la parte de la polilinea que pasa por Francia.</p>
<p>Todo esto lo podemos hacer manualmente registrando eventos de zoom y movimiento sobre el mapa, y cargando por llamadas callback ajax las partes de las lineas que necesitemos.</p>
<p>Pero hay otra forma, con la que además disminuimos la carga de javascript de nuestro navegador, que consiste en codificar, <a title="Polyline algorithm google maps" href="http://code.google.com/intl/es/apis/maps/documentation/polylinealgorithm.html">mediante este algoritmo propuesto por google</a>, todos los puntos con los que dibujaremos nuestra polilínea. En esta codificación también incluiremos la definición de sobre que niveles del zoom quiero dibujar cada uno de los puntos.</p>
<p>Hasta aqui todo bien, nos ponemos a traducir el algoritmo (que por cierto podía estar mejor documentado), llegamos al punto 2:</p>
<p style="padding-left: 30px;">2. Multiplica el valor decimal por 1e5, redondeando el resultado a la baja:<strong></strong><br />
Fácil, <em><strong> -179.9832104*10^5=-17998321.04</strong></em>, redondeamos a la baja y nos queda <em><strong>-17998321</strong></em>.<br />
Seguimos todos los pasos y al final nos queda ese punto codificado como:  <strong>`~oia@</strong></p>
<p style="padding-left: 30px;"><strong>Aqui los pasos:</strong><br />
<img src="http://www.jsanroman.net/wp-content/uploads/2009/02/algoritmo_cod_pol.png" alt="" /></p>
<p>Los creo, pero debo asegurarme de que mi algoritmo está perfectamente traducido.</p>
<p>Así que ahora que mi algoritmo funciona con el punto anterior, probemos con otros, estemos seguros de que funciona bien. Tenemos <a title="Utilidad de codificación de lineas" href="http://code.google.com/intl/es/apis/maps/documentation/polylineutility.html">una utilidad del mismisimo google para que codifiques tus puntos</a> de forma manual, codificamos el mismo punto <em><strong>-179.9832104 </strong></em>en la longitud claro, y... uy, volvemos a hacerlo, vaya, resulta que el punto devuelto no es el mismo: <strong>b~oia@</strong></p>
<p style="padding-left: 30px;"><strong>Veis en verde el punto en la longitud, y abajo en verde también ya traducido, no es el mismo que el anterior:</strong><br />
<img src="http://www.jsanroman.net/wp-content/uploads/2009/02/utilidad_cod_pol.png" alt="" /></p>
<p>Le damos una y otra vuelta, probamos una y otra vez, y finalmente encontramos el motivo, parece el rendondeo, resulta que en la explicación del algoritmo nos dicen que debemos <strong>redondear a la baja</strong>, y sin embargo aqui estan <strong>redondeando al alta</strong>, no tiene otra explicación, debe ser eso. Vamos a preguntarles, ya os contaré.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/02/19/problema-codificando-polilineas-gpolyline-google-maps/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/02/19/problema-codificando-polilineas-gpolyline-google-maps/</feedburner:origLink></item>
		<item>
		<title>Volviendo a j2ee, comenzando con Maven (eclipse, tomcat)</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/FjDzwiy_zqg/</link>
		<comments>http://www.jsanroman.net/2009/01/30/volviendo-a-j2ee-comenzando-con-maven-eclipse-tomcat/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 18:09:54 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[utilidades]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[j2ee]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=349</guid>
		<description><![CDATA[Este pequeño descanso en la uoc esta viniendo muy bien, tanto para descansar como para probar cosillas que tenía en el baúl de los recuerdos, ya sabéis, para eso de "sentirse vivo" tecnológicamente hablando.
Después de 2 días iniciándome en RoR, en realidad de rails apenas he visto nada todavía, simplemente he preparado el entorno, familiarizado [...]]]></description>
			<content:encoded><![CDATA[<p>Este pequeño descanso en la uoc esta viniendo muy bien, tanto para descansar como para probar cosillas que tenía en el baúl de los recuerdos, ya sabéis, para eso de "sentirse vivo" tecnológicamente hablando.</p>
<p>Después de 2 días iniciándome en RoR, en realidad de rails apenas he visto nada todavía, simplemente he preparado el entorno, familiarizado con ruby, me peleé un poco con las gemas y mysql, y ejecuté algunos de sus comandos para crear una aplicación rails, modelo, controlador.<br />
<img src="http://www.jsanroman.net/wp-content/uploads/2009/01/maven-logo.gif" alt="Logo maven" style="float:right;"/><br />
Pues eso, que después de estos 2 días y por razones que no vienen a cuento he estado probando <a href="http://maven.apache.org/">maven</a> (desde el curso de j2ee tenía pendiente echarle un vistazo). La experiencia esta siendo muy satisfactoria, lejos de la complejidad de la que muchos compañeros me habían hablado.</p>
<p>Maven al igual que <a href="http://ant.apache.org/">ant</a> es una utilidad para... automatizar muchas de las tareas en el desarrollo de un proyecto (compilar, desplegar, descargar librerías, pasar tests de unidad, empaquetar, etc etc). Si conoceis ant estaréis pensando que no es nada nuevo, en realidad se podría decir que es una evolución de ant, incluso podemos integrar las dos utilidades para ejecutar tareas ant desde maven.</p>
<p>Comentar que un proyecto maven tiene una estructura global mas o menos fija (que se puede variar, pero ni lo he probado ni lo necesito). Cuando creamos un proyecto mediante la linea de comandos <em>mvn archetype:create -DgroupId=net.jsanroman -DartifactId=aprendiendoMaven</em>, o añadiendo el parámetro <em>-DarchetypeArtifactId=maven-archetype-webapp</em> para un proyecto web, se crea una <a href="http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html">estructura como la que podeis encontrar en la documentación</a>.</p>
<p>Maven, además de la maravillosa funcionalidad de descarga automática de jars, bien de un repositorio externo, o de nuestra propia red local (típica situación de un equipo de desarrollo de muchas personas sobre un mismo proyecto), tiene preparadas para nosotros multitud de tareas y plugins, por ejemplo el despliegue de nuestro proyecto en un tomcat mediante el <a href="http://mojo.codehaus.org/tomcat-maven-plugin/">tomcat-maven-plugin</a>, simplemente ejecutando <em>mvn tomcat:deploy</em>, aunque antes tendremos que configurar ciertos parametros en el fichero de configuración de maven <em>pom.xml</em>:</span><br />
dentro de proyect>build:</p>
<div class="syntax_hilite">
<div id="code-13">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;plugin&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;groupId&gt;org.<span style="">codehaus</span>.<span style="">mojo</span>&lt;/groupId&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;artifactId&gt;tomcat-maven-plugin&lt;/artifactId&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;configuration&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &lt;warFile&gt;$<span style="color:#006600; font-weight:bold;">&#123;</span>project.<span style="">build</span>.<span style="">directory</span><span style="color:#006600; font-weight:bold;">&#125;</span>/$<span style="color:#006600; font-weight:bold;">&#123;</span>project.<span style="">build</span>.<span style="">finalName</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">war</span>&lt;/warFile&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &lt;update&gt;true&lt;/update&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &lt;path&gt;/facturablock_plain&lt;/path&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &lt;username&gt;admin&lt;/username&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &lt;password&gt;admin&lt;/password&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;/configuration&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/plugin&gt; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Configuramos por ejemplo en path de la aplicación a desplegar, el usuario y clave de nuestro manager de tomcat, y la localización de nuestro fichero war a desplegar, <a href="http://mojo.codehaus.org/tomcat-maven-plugin/deployment.html#Deploying%20a%20context.xml%20file">aquí mas documentación</a>.</p>
<p>Para que maven sepa que jars debe descargar para nuestro proyecto también lo indicaremos en este mismo fichero pom.xml:</p>
<div class="syntax_hilite">
<div id="code-14">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;dependency&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;groupId&gt;javax.<span style="">servlet</span>&lt;/groupId&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;artifactId&gt;servlet-api&lt;/artifactId&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;version&gt;<span style="color:#800000;color:#800000;">2</span>.<span style="color:#800000;color:#800000;">4</span>&lt;/version&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&lt;scope&gt;compile&lt;/scope&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/dependency&gt; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Le indicamos que se descargue la api de servlets. Tenemos un listado completo de librerias en <a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/">http://mirrors.ibiblio.org/pub/mirrors/maven2/</a>.</p>
<p>Maven se integra con diferentes ide's: netbeans, idea, eclipse. Yo solo he probado con eclipse, para el que hay varios plugins, aunque sin duda para mi el mejor es <a href="http://m2eclipse.sonatype.org/update/">m2eclipse</a>. No cometáis la misma torpeza que yo, que con las ansias de avanzar ni me fijé en el tipo de errores que daba su instalación, y simplemente que depende de otros plugins para poder ser instalado, aquí tenéis la lista <a href="http://docs.codehaus.org/display/M2ECLIPSE/Installation+Requirements">http://docs.codehaus.org/display/M2ECLIPSE/Installation+Requirements</a>.</p>
<p>Aunque todavía me quedan muchas cosas que ver de maven, métricas o integración continua, ya tengo lo básico en funcionamiento, y aquí dejo los 4 comandos básicos, en realidad son "mi recordatorio" que soy muy despistado :$:</p>
<ul>
<li>Creamos nuevo proyecto: <em>mvn archetype:create -DgroupId=net.jsanroman -DartifactId=aprendiendoMaven -DarchetypeArtifactId=maven-archetype-webapp</em></li>
<li>Compilamos proyecto: <em>mvn compile</em></li>
<li>Empaquetamos proyecto: <em>mvn package</em></li>
<li>Copiar jar de proyecto a repositorio local de maven: <em>mvn install</em></li>
<li>Desplegar proyecto web en tomcat: <em>mvn tomcat:deploy</em></li>
<li>Generar sitio web (si si como el de maven): <em>mvn site:site</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/01/30/volviendo-a-j2ee-comenzando-con-maven-eclipse-tomcat/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/01/30/volviendo-a-j2ee-comenzando-con-maven-eclipse-tomcat/</feedburner:origLink></item>
		<item>
		<title>Evitando el dichoso spam</title>
		<link>http://feedproxy.google.com/~r/jsanroman/~3/5Ov_RfK6Ql0/</link>
		<comments>http://www.jsanroman.net/2009/01/23/evitando-el-dichoso-spam/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:12:21 +0000</pubDate>
		<dc:creator>jsanroman</dc:creator>
		
		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[desarrollo web]]></category>

		<guid isPermaLink="false">http://www.jsanroman.net/?p=342</guid>
		<description><![CDATA[Y mira que soy poco partidario de los captchas y de poner trabas a la participación de la gente, pero dada la audiencia de este blog y los mas de 100 comentarios de spam que venía validando diariamente, con la consecuente perdida de tiempo que eso supone, no me ha quedado otra.
Después de probar varios [...]]]></description>
			<content:encoded><![CDATA[<p>Y mira que soy poco partidario de los <a title="Captcha" href="http://es.wikipedia.org/wiki/Captcha">captchas</a> y de poner trabas a la participación de la gente, pero dada la audiencia de este blog y los mas de 100 comentarios de spam que venía validando diariamente, con la consecuente perdida de tiempo que eso supone, no me ha quedado otra.</p>
<p>Después de probar varios plugins antispam me he quedado con <a title="Math commment spam protection" href="http://sw-guide.de/wordpress/plugins/math-comment-spam-protection/">Math comment spam protection</a>, de lo malo, mejor una simple pregunta sobre una suma matemática básica en texto plano (1+1,3+2,etc), que la típica imagen deformada, muchas veces imposible de descifrar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jsanroman.net/2009/01/23/evitando-el-dichoso-spam/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.jsanroman.net/2009/01/23/evitando-el-dichoso-spam/</feedburner:origLink></item>
	</channel>
</rss>
