<?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>No sólo software &#187; Desarrollo de software</title>
	<atom:link href="http://nosolosoftware.com/tag/desarrollo-de-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://nosolosoftware.com</link>
	<description></description>
	<lastBuildDate>Mon, 20 Feb 2012 20:41:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>On delivering software</title>
		<link>http://nosolosoftware.com/on-delivering-software/</link>
		<comments>http://nosolosoftware.com/on-delivering-software/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 20:10:41 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2416</guid>
		<description><![CDATA[More than ten years ago, some visionaries got together in the mountains of Utah to relax, ski and discuss on the challenges of their profession. That was the very moment when the Agile movement cristallized. They wrote a manifest and 12 principles. The first gem goes like: Our highest priority is to satisfy the customer through early [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">More than ten years ago, <a href="http://martinfowler.com/articles/agileStory.html">some visionaries got together in the mountains of Utah to relax, ski and discuss on the challenges of their profession</a>. That was the very moment when the <em>Agile movement</em> cristallized. They wrote a <a href="http://agilemanifesto.org/">manifest</a> and <a href="http://agilemanifesto.org/principles.html">12 principles</a>. The first gem goes like:</p>
<blockquote><p><em>Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.</em></p></blockquote>
<p style="text-align: justify;">And only now we all are understanding what they mean. Even them.</p>
<ul>
<li>In <a href="http://www.youtube.com/watch?v=KIkUWG5ACFY">Software G Forces: the effects of acceleration</a>, Kent Beck discusses the technological and business challenges of making your releases shorter. And <a href="http://www.threeriversinstitute.org/blog/?p=566">why that matters</a> (see also <a href="http://www.leanessays.com/2011/07/how-cadence-determines-process.html">a good summary of Beck ideas by Mary Poppendieck</a>).</li>
</ul>
<p><object width="560" height="315" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/KIkUWG5ACFY?version=3&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed width="560" height="315" type="application/x-shockwave-flash" src="http://www.youtube.com/v/KIkUWG5ACFY?version=3&amp;hl=en_US" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<ul>
<li>On the other hand, Jeff Humble and David Farley have published a (<a href="http://drdobbs.com/joltawards/231500080">jolt-award wining</a>) book called <a href="http://continuousdelivery.com/">Continuous delivery</a>, which goes (technological) deeper on the value proposal done by Beck. I highly recommend this <a href="http://www.infoq.com/presentations/Continuous-Delivery">talk by Jeff at DevOps Hamburg</a> and <a href="http://www.informit.com/articles/article.aspx?p=1641923">the introductory article</a>.</li>
</ul>
<p style="text-align: center;"><a href="http://www.infoq.com/presentations/Continuous-Delivery"><img class="aligncenter  wp-image-2418" title="Continuous delivery" src="http://nosolosoftware.com/files/2012/02/continuous_delivery.jpg" alt="" width="448" height="226" /></a></p>
<p style="text-align: justify;">Seems that it takes 10 years for the new ideas to mature and emerge in other shapes and wrappings. Nice to see that we, (&#8220;<em>software deliverers&#8221;)</em> as a profesion, are continuously improving.</p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/on-delivering-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coders at work: netscape y javascript</title>
		<link>http://nosolosoftware.com/coders-at-work-netscape-y-javascript/</link>
		<comments>http://nosolosoftware.com/coders-at-work-netscape-y-javascript/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 17:48:02 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Crítica cultural]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Entrevistas]]></category>
		<category><![CDATA[Español]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2170</guid>
		<description><![CDATA[Estoy leyendo a ratos Coders at work, un libro de entrevistas a programadores inspirado en lo que hizo The Paris Review con su serie Writers at work, por la que pasaron Hemingway, Capote, Borges, &#8230; He empezado por aquellas que más me sugerían, por ejemplo, la de Jamie Zawinski, uno de los líderes detrás de la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Estoy leyendo a ratos <a href="http://www.codersatwork.com/">Coders at work</a>, un libro de entrevistas a programadores inspirado en lo que hizo <a href="http://www.theparisreview.org/">The Paris Review</a> con su serie <a href="http://en.wikipedia.org/wiki/The_Paris_Review#Interview_series">Writers at work</a>, por la que pasaron Hemingway, Capote, Borges, &#8230;</p>
<p style="text-align: justify;">He empezado por aquellas que más me sugerían, por ejemplo, la de <a href="http://www.jwz.org/">Jamie Zawinski</a>, uno de los líderes detrás de la liberación del código de Netscape y cofundador de la fundación Mozilla; seguida por la de <a href="http://brendaneich.com/">Brendan Eich</a>, también cofundador de Mozilla y creador de javascript. Me ha gustado descubrir no sólo su trayectoria personal, si no el ambiente que se respiraba en Netscape en aquella época. Totalmente imprescindible como complemento el documental <a href="http://clickmovement.org/coderush">Code Rush</a>:</p>
<p><iframe src="http://www.youtube.com/embed/u404SLJj7ig" frameborder="0" width="420" height="315"></iframe></p>
<p style="text-align: justify;">Al acabar la de Eich, he empezado con la de <a href="http://www.crockford.com/">Douglas Crockford</a>, creador de JSON y uno de los principales <em>gurús</em> del lenguaje. Mundialmene conocido por <em><a href="http://shop.oreilly.com/product/9780596517748.do">Javascript: the good parts</a></em> y sus <a href="http://javascript.crockford.com/">talleres de introducción a Javascript</a>. El libro y la serie completa son una deliciosa joya para todos los que aspiren a saber algo del lenguaje. De entre todos los videos, por contexto, recomendaría ahora el primero, que versa sobre <a href="http://www.yuiblog.com/blog/2010/02/03/video-crockonjs-1/">la historia del javascript</a> (según sus propia interpretación):</p>
<div><object width="576" height="324" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashVars" value="vid=17880750&amp;" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://d.yimg.com/m/up/ypp/default/player.swf" /><param name="flashvars" value="vid=17880750&amp;" /><embed width="576" height="324" type="application/x-shockwave-flash" src="http://d.yimg.com/m/up/ypp/default/player.swf" flashVars="vid=17880750&amp;" allowfullscreen="true" wmode="transparent" flashvars="vid=17880750&amp;" /></object></div>
<p style="text-align: justify;">Estoy disfrutando enormemente del libro. No sólo me sirve para conocer más ciertos aspectos de nuestra reciente historia (la de la informática y sus empresas) si no también para de algún modo entrar en el proceso creativo de grandes programadores, cómo se enfrentan ellos a la tarea de programar. Conocer, de cara a <a href="http://nosolosoftware.com/automattic-cree/">mejorar el mío propio</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/coders-at-work-netscape-y-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It takes time</title>
		<link>http://nosolosoftware.com/it-takes-time/</link>
		<comments>http://nosolosoftware.com/it-takes-time/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 21:37:41 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[quote]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2149</guid>
		<description><![CDATA[If you’re try­ing to make a suc­cess­ful tech prod­uct, 90% of the bat­tle is that it works at all. Havoc Pennington, on creating a successful product&#8230; and companies I would add.]]></description>
			<content:encoded><![CDATA[<p>If you’re try­ing to make a suc­cess­ful tech prod­uct, 90% of the bat­tle is that it works at all.</p>
<p><cite><a href="http://ometer.com/about.html">Havoc Pennington</a>, on <a href="http://blog.ometer.com/2011/10/24/it-has-to-work/">creating a successful product</a>&#8230; and companies I would add.</cite></p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/it-takes-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave and the mythical man-month</title>
		<link>http://nosolosoftware.com/google-wave-and-the-mythical-man-month/</link>
		<comments>http://nosolosoftware.com/google-wave-and-the-mythical-man-month/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 16:04:16 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[quote]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2132</guid>
		<description><![CDATA[«And this is the essential broader point&#8211;as a programmer you must have a series of wins, every single day. It is the Deus Ex Machina of hacker success. It is what makes you eager for the next feature, and the next after that. And a large team is poison to small wins. The nature of [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">«And this is the essential broader point&#8211;as a programmer you must have a series of wins, every single day. It is the Deus Ex Machina of hacker success. It is what makes you eager for the next feature, and the next after that. And a large team is poison to small wins. The nature of large teams is such that even when you do have wins, they come after long, tiresome and disproportionately many hurdles. And this takes all the wind out of them. Often when I shipped a feature it felt more like relief than euphoria.»</p>
<p><cite>Dhanji R. Prasanna (one of the engineers behind Google Wave), on <a href="http://rethrick.com/#mmm">how even the smartests fail to stick to the essential</a>. Jointly with <a href="http://rethrick.com/#waving-goodbye">this other post</a>, they both draw a good story for any startup to hear.</cite></p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/google-wave-and-the-mythical-man-month/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4 big ideas in sw development according to PragProg</title>
		<link>http://nosolosoftware.com/4-big-ideas-in-sw-development-according-to-pragpro/</link>
		<comments>http://nosolosoftware.com/4-big-ideas-in-sw-development-according-to-pragpro/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 20:30:11 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[status]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2105</guid>
		<description><![CDATA[I found interesting this serie of posts titled &#8220;4 big ideas in software development&#8221; according to Tim Ottinger and Jeff Langr. The serie was published monthly in Pragmatic programmers magazine: Code coupling, or Reducing dependency in your code. Cohesive software design, or Cohesion makes code easier to understand, debug, and test. Abstraction, or How to tell a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">I found interesting this serie of posts titled &#8220;<em>4 big ideas in software development</em>&#8221; according to Tim Ottinger and Jeff Langr. The serie was published monthly in <a href="http://pragprog.com/magazines/"><em>Pragmatic programmers</em> magazine</a>:</p>
<ul>
<li><a href="http://pragprog.com/magazines/2011-01/code-coupling">Code coupling</a>, or <em>Reducing dependency in your code</em>.</li>
<li><a href="http://pragprog.com/magazines/2010-12/cohesive-software-design">Cohesive software design</a>, or <em>Cohesion makes code easier to understand, debug, and test</em>.</li>
<li><a href="http://pragprog.com/magazines/2011-02/abstraction">Abstraction</a>, or <em>How to tell a cat from a dog</em>.</li>
<li><a href="http://pragprog.com/magazines/2011-03/software-volatility">Software volatility</a>, or <em>Do most changes to your code base occur in just a few files?</em></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/4-big-ideas-in-sw-development-according-to-pragpro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How gvSIG MapControl works: flow of control</title>
		<link>http://nosolosoftware.com/how-gvsig-mapcontrol-works-flow-of-control/</link>
		<comments>http://nosolosoftware.com/how-gvsig-mapcontrol-works-flow-of-control/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 19:26:04 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[gvSIG]]></category>
		<category><![CDATA[Sistemas de Información Geográfica]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2027</guid>
		<description><![CDATA[Within gvSIG design, MapControl is one of the core components. Its main responsibility is to allow users to interact with a map of layers (zoom in/out, edit geometries, &#8230;). That goal is achieved through two concrete tasks: Route the user actions to the proper tool which will execute it. Manage the drawing of the layers. This [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Within gvSIG design, MapControl is one of the core components. Its main responsibility is to <strong>allow users to interact with a map of layers </strong>(zoom in/out, edit geometries, &#8230;). That goal is achieved through two concrete tasks:</p>
<ul>
<li>Route the user actions to the proper tool which will execute it.</li>
<li>Manage the drawing of the layers.</li>
</ul>
<p>This post covers the first of above tasks in an introductory way.</p>
<h3>Flow of control</h3>
<p>MapControl is a java component, which uses the idea of <a href="http://c2.com/cgi/wiki?ChainOfResponsibilityPattern">Chain of Responsibility</a> to delegate work on others. Let&#8217;s see how it works in this case with a good old graphic:</p>
<h2 style="text-align: center;"><span style="color: #ff0000;"><a href="http://nosolosoftware.com/files/2011/09/20110928_003-1.jpg"><img class="aligncenter size-large wp-image-2059" title="mapcontrol -flow of control" src="http://nosolosoftware.com/files/2011/09/20110928_003-1-1024x769.jpg" alt="" width="632" height="474" /></a><br />
</span></h2>
<ol>
<li><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MapControl</span> listen <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MouseEvents</span> through the <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MapToolListener</span>. In response to an event, the <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MapToolListener</span> will call the active tool (let&#8217;s say this class is named <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">Behaviour</span>).</li>
<li>The active <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">Behaviour</span> processes the info from the mouse, put together the contextual information needed (let&#8217;s call that an <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">Event</span>) and calls the next step in the chain (let&#8217;s call it the <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">ToolListener)</span>.</li>
<li>Finally, the <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">ToolListener</span> will execute the actions needed to carry on the task an user have asked for.</li>
</ol>
<div>Some notes before digging into code:</div>
<div>
<ul>
<li><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MapControl</span> can have only 1 tool (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">Behaviour</span>) active at any time. It holds the current selection in a private variable: <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">Behaviour currentMapTool</span></li>
<li><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MapControl</span> wraps <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MouseEvents</span> in 4 basic canonical events (see <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">com.iver.cit.gvsig.fmap.tools.Events</span> within libFMap project): <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MeasureEvent</span>, <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">PointEvent</span>, <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MoveEvent</span> and <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">RectangleEvent</span>. Any other event will inherit from and extend one of these canonical forms.</li>
</ul>
<h3>A concrete example: how a move event is processed</h3>
<p>1 &#8211; <strong>MapToolListener</strong>: listen the mouse event and proxy it to the current selected behaviour (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">currentMapTool</span> variable).</p>
<pre>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> mouseReleased<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amouseevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">MouseEvent</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>currentMapTool <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; currentMapTool.<span style="color: #006633;">mouseReleased</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>BehaviorException t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; throwException<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</pre>
<p>2 &#8211; <strong>Behaviour</strong> (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MoveBehaviour</span> in this case): takes the event, put together the context (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">MoveEvent</span>) and redirects the petition to the proper ToolListener (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">listener</span> variable).</p>
<pre>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> mouseReleased<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amouseevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">MouseEvent</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> BehaviorException <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getButton</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amouseevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">MouseEvent</span></a>.<span style="color: #006633;">BUTTON1</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> m_FirstPoint<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MoveEvent event <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MoveEvent<span style="color: #009900;">&#40;</span>m_FirstPoint, e.<span style="color: #006633;">getPoint</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listener.<span style="color: #006633;">move</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; m_FirstPoint <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</pre>
<p>3 &#8211; <strong>ToolListener</strong>: carry on the task. In this case, the listener (a <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">PanListener</span>) make the viewport to update the extent with the new contents.</p>
<pre>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span>MoveEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; ViewPort vp <span style="color: #339933;">=</span> mapControl.<span style="color: #006633;">getMapContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getViewPort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Apoint2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Point2D</span></a> from <span style="color: #339933;">=</span> vp.<span style="color: #006633;">toMapPoint</span><span style="color: #009900;">&#40;</span>event.<span style="color: #006633;">getFrom</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Apoint2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Point2D</span></a> to <span style="color: #339933;">=</span> vp.<span style="color: #006633;">toMapPoint</span><span style="color: #009900;">&#40;</span>event.<span style="color: #006633;">getTo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//build the new extent</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arectangle2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Rectangle2D</span></a>.<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adouble+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Double</span></a> r <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arectangle2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Rectangle2D</span></a>.<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adouble+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Double</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arectangle2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Rectangle2D</span></a> extent <span style="color: #339933;">=</span> vp.<span style="color: #006633;">getExtent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; r.<span style="color: #006633;">x</span> <span style="color: #339933;">=</span> extent.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>to.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> from.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; r.<span style="color: #006633;">y</span> <span style="color: #339933;">=</span> extent.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>to.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> from.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; r.<span style="color: #006633;">width</span> <span style="color: #339933;">=</span> extent.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; r.<span style="color: #006633;">height</span> <span style="color: #339933;">=</span> extent.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//update the ViewPort</span><br />
&nbsp; &nbsp; vp.<span style="color: #006633;">setExtent</span><span style="color: #009900;">&#40;</span>r<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</pre>
<h3>Coda</h3>
</div>
<p style="text-align: justify;">Some useful resources about MapControl in gvSIG wiki:</p>
<ul>
<li style="text-align: justify;"><a href="http://www.gvsig.org/web/docdev/reference/fmap/dirmapcontrol/mapcontrol/">MapControl</a> (spanish)</li>
<li style="text-align: justify;"><a href="http://www.gvsig.org/web/docdev/docs/v1_0/fmap/dirmapcontrol/behavior/">Behaviour</a> (spanish)</li>
<li style="text-align: justify;"><a href="http://www.gvsig.org/web/docdev/docs/v1_0/fmap/dirmapcontrol/toollistener/">ToolListeners</a> (spanish)</li>
<li style="text-align: justify;"><a href="http://www.gvsig.org/web/docdev/docs/v1_0/fmap/dirmapcontrol/toollistenersevents">Events related to toollisteners</a> (spanish)</li>
</ul>
<div>Links to code:</div>
<ul>
<li><a href="https://devel.gvsig.org/svn/gvsig-desktop/tags/v1_11_0_Build_1303/libraries/libFMap/src/com/iver/cit/gvsig/fmap/MapControl.java">Mapcontrol</a></li>
<li>Canonical events of MapControl:</li>
<ul>
<li><a href="https://devel.gvsig.org/svn/gvsig-desktop/tags/v1_11_0_Build_1303/libraries/libFMap/src/com/iver/cit/gvsig/fmap/tools/Events/MeasureEvent.java">MeasureEvent</a></li>
<li><a href="https://devel.gvsig.org/svn/gvsig-desktop/tags/v1_11_0_Build_1303/libraries/libFMap/src/com/iver/cit/gvsig/fmap/tools/Events/MoveEvent.java">MoveEvent</a></li>
<li><a href="https://devel.gvsig.org/svn/gvsig-desktop/tags/v1_11_0_Build_1303/libraries/libFMap/src/com/iver/cit/gvsig/fmap/tools/Events/PointEvent.java">PointEvent</a></li>
<li><a href="https://devel.gvsig.org/svn/gvsig-desktop/tags/v1_11_0_Build_1303/libraries/libFMap/src/com/iver/cit/gvsig/fmap/tools/Events/RectangleEvent.java">RectangleEvent</a></li>
</ul>
</ul>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/how-gvsig-mapcontrol-works-flow-of-control/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wiki update</title>
		<link>http://nosolosoftware.com/wiki-update/</link>
		<comments>http://nosolosoftware.com/wiki-update/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 21:13:52 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[status]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=1978</guid>
		<description><![CDATA[Done some reorganization on wiki contents and wrote a bit on refactoring and code smells. I&#8217;m proud on the pace and themes the wiki is evolving: I have grown quite a bit of software development topics, which is a reflection on my readings and focus last years. Although could evolve later, the topics on software [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Done some reorganization on wiki contents and wrote a bit on <a href="http://wiki.nosolosoftware.com/p/Refactoring">refactoring</a> and <a href="http://wiki.nosolosoftware.com/p/Code_smell">code smells</a>. I&#8217;m proud on the pace and themes the wiki is evolving: I have grown quite a bit of <a href="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:Software_development">software development topics</a>, which is a reflection on my readings and focus last years. Although could evolve later, the topics on software development are organized in 3 subcategories:</p>
<ul style="text-align: justify;">
<li><a title="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:Sw_development_history" href="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:Sw_development_history" rel="nofollow">History of software development</a>: <em>remember to build your products on top of giant&#8217;s shoulders</em>.</li>
<li><a title="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:A_programmer_toolbox" href="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:A_programmer_toolbox" rel="nofollow">A programmer toolbox</a>: <em>common knowledge a developer should know. Items focus on programming and code</em>.</li>
<li><a title="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:Project_management" href="http://wiki.nosolosoftware.com/p/Categor%C3%ADa:Project_management" rel="nofollow">Project management</a>: <em>issues to take into account when managing a software development project: from concept to cash. Mainly not related to code</em>.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/wiki-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Los costes de no trabajar upstream</title>
		<link>http://nosolosoftware.com/los-costes-de-no-trabajar-upstream/</link>
		<comments>http://nosolosoftware.com/los-costes-de-no-trabajar-upstream/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 16:45:08 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=1917</guid>
		<description><![CDATA[Imagina el siguiente caso: deseas usar una aplicación que es software libre para construir tu propia solución ad-hoc sobre ella. Y lo harás muchas veces para diferentes clientes/productos. ¿Cómo enfocarlo? ¿Construyes tu solución con tus mejoras para ti modificando lo necesario o integras tus mejoras en la versión upstream, en el proyecto original? Si ése [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Imagina el siguiente caso: deseas usar una aplicación que es software libre para construir tu propia solución <em>ad-hoc</em> sobre ella. Y lo harás muchas veces para diferentes clientes/productos. ¿Cómo enfocarlo? ¿Construyes tu solución con tus mejoras para ti modificando lo necesario o integras tus mejoras en la versión <em>upstream</em>, en el proyecto original?</p>
<p style="text-align: justify;">Si ése es tu caso, te recomiendo que leas estos 2 artículos. El primero se centra en los aspectos económicos y sociales, el segundo en los técnicos y sociales:</p>
<ul style="text-align: justify;">
<li><a href="http://blogs.gnome.org/bolsh/2011/09/01/the-cost-of-going-it-alone/">The cost of going it alone</a>, de Dave Neary. Un buen repaso histórico con casos como el de  Softway con GCC (cambios relacionados con Windows NT), Nokia con GNOME (cambios relacionados con Maemo) o Google e IBM con el kernel (el primero por cambios en Android, el segundo por cambios relacionados con drivers para manejar discos virtuales).</li>
<li><a href="http://gnomejournal.org/article/72/working-with-upstream-an-interview-with-laszlo-peter">Working with upstream: an interview with Laszlo Peter</a>, by Stormy Peters. Laszlo Peter era <em>release engineer</em> en Sun, es decir, quien se tenía que preocupar de que en cada nueva release de Solaris todo fuese bien.</li>
</ul>
<div style="text-align: justify;">Luego de leerlos, tendrás una visión más clara de si te compensa o no trabajar con <em>upstream</em>. Si lo que deseas es <strong>construir una aplicación vertical con una buena integración (y menos costes de mantenimiento) para sucesivas versiones del software base</strong>, la respuesta será <em>sí</em>.</div>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/los-costes-de-no-trabajar-upstream/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How gvsig manages the snappers</title>
		<link>http://nosolosoftware.com/how-gvsig-manages-the-snappers/</link>
		<comments>http://nosolosoftware.com/how-gvsig-manages-the-snappers/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 02:26:23 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[gvSIG]]></category>
		<category><![CDATA[Sistemas de Información Geográfica]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=1844</guid>
		<description><![CDATA[Last week I paired together with Francisco Puga to review the status of opencadtools. As Fran is doing a great work in preparing the integration of opencadtools as default CAD tools in gvSIG, I wanted to know first hand how it was going. iCarto and Cartolab were kind enough to sponsor this pairing session. One of [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Last week I paired together with <a href="http://conocimientoabierto.es/">Francisco Puga</a> to review the status of <a href="http://forge.osor.eu/plugins/wiki/index.php?id=194&amp;type=g">opencadtools</a>. As Fran is doing a great work in preparing the integration of <a href="http://www.gvsig.org/web/working-groups/organizacion/docs/meetings/meeting-20110606/minutes#opencadtools">opencadtools as default CAD tools in gvSIG</a>, I wanted to know first hand how it was going. <a href="http://www.icarto.es">iCarto</a> and <a href="http://www.cartolab.es">Cartolab</a> were kind enough to sponsor this pairing session. One of the results, apart from working with Fran -which is always motivating and enjoyable, <em>per se</em>-, was a deeper understanding on how snappers work in gvSIG, which is something I had asked myself sometimes. And, as one of the improvements of opencadtools is a <a href="http://www.youtube.com/watch?v=_cKvfMyeN0k">followgeometry snapper</a>, it seems a good goal to review that part of the project. Find below the summary:</p>
<p><a href="http://forge.osor.eu/plugins/scmsvn/viewcvs.php/trunk/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/CADToolAdapter.java?root=gvsig-desktop&amp;rev=35161&amp;view=markup">CADToolAdapter class</a> in extCAD extension maintains a list of snappers and layers to snap to from the editing layer. When the mouse is moved, the snappers are recalculated following this algorithm (note that the code below is the core of the method, some other parts/casts and boilerplate code is missing):</p>
<pre>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a> snappers <span style="color: #339933;">=</span> SnapConfigPage.<span style="color: #006633;">getActivesSnappers</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
ILayerEdited layerInEdition <span style="color: #339933;">=</span><br />
&nbsp; &nbsp; CADExtension.<span style="color: #006633;">getEditionManager</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getActiveLayerEdited</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a> layersToSnap <span style="color: #339933;">=</span> layerInEdition.<span style="color: #006633;">getLayersToSnap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>FLyrVect layer <span style="color: #339933;">:</span> layersToSnap<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Getting the set of geometries within the envelope</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// The envelope is calculated based on the tolerance the user wants</span><br />
&nbsp; &nbsp; SpatialCache cache <span style="color: #339933;">=</span> layer.<span style="color: #006633;">getSpatialCache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">List</span></a> geometries <span style="color: #339933;">=</span> cache.<span style="color: #006633;">query</span><span style="color: #009900;">&#40;</span>envelope<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Updating the nearest point</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Feature geomToSnap <span style="color: #339933;">:</span> geometries<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>snappers.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Apoint2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Point2D</span></a> pointToSnap <span style="color: #339933;">=</span> snappers<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">getSnapPoint</span><span style="color: #009900;">&#40;</span>queryPoint,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; geomToSnap,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tolerance,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastPointEntered<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">double</span> distance <span style="color: #339933;">=</span> pointToSnap.<span style="color: #006633;">distance</span><span style="color: #009900;">&#40;</span>queryPoint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>minimunDistance <span style="color: #339933;">&gt;</span> distance<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; minimunDistance <span style="color: #339933;">=</span> distance<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</pre>
<p style="text-align: justify;">This algorithm is executed every time the user move the mouse and is very quick if you have few layers to snap to. But, as the number of layer to check increases, the editing process becomes very slow. Besides, as a comment of software design, after reviewing this part of code, I like the way the snappers fit in gvsig cad tools. If you want to add a new snapper, just need to implement ISnapperVectorial interface and make getSnapToPoint method to return the nearest point to the position of the mouse. So, designing your own snappers is very easy!</p>
<p>By the way, if you feel like replying<strong> how other GIS applications (QGIS, uDig, &#8230;) manage the snappers</strong>, I&#8217;d be more than happy to hear and learn that!</p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/how-gvsig-manages-the-snappers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>On the sucess and failure of building software applications</title>
		<link>http://nosolosoftware.com/success-and-failure-of-building-software/</link>
		<comments>http://nosolosoftware.com/success-and-failure-of-building-software/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 18:38:22 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[status]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=1839</guid>
		<description><![CDATA[Two stories on developing software applications. In both cases the client is the public administration, but the way every one was managed and build was quite different: Lean from the trenches, de Henrik Kniberg. Tell the history of how the PUST was built: PUST is an acronym of &#8220;Polisens mobila Utrednings Stöd&#8221;, a national-wide application [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Two stories on developing software applications. In both cases the client is the public administration, but the way every one was managed and build was quite different:</div>
<ul>
<li style="text-align: justify;"><a href="http://www.crisp.se/henrik.kniberg/Lean-from-the-trenches.pdf">Lean from the trenches</a>, de Henrik Kniberg. Tell the history of how the PUST was built: PUST is an acronym of &#8220;Polisens mobila Utrednings Stöd&#8221;, a national-wide application for Swedish policemen.</li>
<li style="text-align: justify;"><a href="http://spectrum.ieee.org/computing/software/who-killed-the-virtual-case-file">Who killed the virtual case file</a>, a very instructive showcase on the famous failure of VCF, an application to manage cases developed by the FBI.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/success-and-failure-of-building-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

