<?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>Sat, 28 Apr 2012 09:07:40 +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>Software never lies</title>
		<link>http://nosolosoftware.com/software-never-lies/</link>
		<comments>http://nosolosoftware.com/software-never-lies/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 20:14:26 +0000</pubDate>
		<dc:creator>Andrés</dc:creator>
				<category><![CDATA[quote]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://nosolosoftware.com/?p=2520</guid>
		<description><![CDATA[«When you run a business, if your software has a bug, your customers don&#8217;t care if it is your fault or Linus&#8217; or some random Rails developer&#8217;s. They care that your software is bugged. Everyone&#8217;s software becomes my software because all of their bugs are my bugs. When something goes wrong, you need to seek [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">«When you run a business, if your software has a bug, your customers don&#8217;t care if it is your fault or Linus&#8217; or some random Rails developer&#8217;s. They care that your software is bugged. Everyone&#8217;s software becomes my software because all of their bugs are my bugs. When something goes wrong, you need to seek out what is broken, and you need to fix it.»</p>
<p><cite><strong>Why you should read the source if your shop sells custom apps on top of a framework</strong>. HN <a href="http://news.ycombinator.com/item?id=3769446">original post</a>. Related: <a href="http://blogs.gnome.org/bolsh/2011/09/01/the-cost-of-going-it-alone/">The costs of going it alone</a> &amp; <a href="http://gnomejournal.org/article/72/working-with-upstream-an-interview-with-laszlo-peter">Working with upstream: an interview with Lazslo Peter</a>.</cite></p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/software-never-lies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming on principle</title>
		<link>http://nosolosoftware.com/programming-on-principle/</link>
		<comments>http://nosolosoftware.com/programming-on-principle/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 16:10:22 +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=2447</guid>
		<description><![CDATA[If you only watch a keynote this year, make it this one: Bret Victor &#8211; Inventing on Principle. The serendipity again: I found this video few days after I finished reading Implementation patterns, by Kent Beck. Both two are connected, in the sense that Bret Victor talks about the importance of values and principles in our life and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>If you only watch a keynote this year, make it this one: <a href="http://vimeo.com/36579366">Bret Victor &#8211; Inventing on Principle</a>.</p></blockquote>
<p><object width="600" height="400" 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://vimeo.com/moogaloop.swf?clip_id=36579366&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=1&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed width="600" height="400" type="application/x-shockwave-flash" src="http://vimeo.com/moogaloop.swf?clip_id=36579366&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=1&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" allowfullscreen="true" allowscriptaccess="always" /></object></p>
<p style="text-align: justify;">The serendipity again: I found this video few days after I finished reading <a href="http://www.infoq.com/articles/implementations-patterns-br">Implementation patterns</a>, by <a href="http://www.threeriversinstitute.org/">Kent Beck</a>. Both two are connected, in the sense that <a href="http://worrydream.com/">Bret Victor</a> talks about the importance of values and principles in our life and work -with amazing demo examples implementing his particular principle! Beck does the same at the level of programming.</p>]]></content:encoded>
			<wfw:commentRss>http://nosolosoftware.com/programming-on-principle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</channel>
</rss>

