<?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>Negonation Blog &#187; Programming</title>
	<atom:link href="http://blog.negonation.com/en/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.negonation.com/en</link>
	<description>Justice is ripe for disruption</description>
	<lastBuildDate>Wed, 04 May 2011 18:43:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Event Management in Rails: Observers</title>
		<link>http://blog.negonation.com/en/event-management-in-rails-observers/</link>
		<comments>http://blog.negonation.com/en/event-management-in-rails-observers/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 22:13:08 +0000</pubDate>
		<dc:creator>Ernesto Jiménez</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/event-management-in-rails-observers/</guid>
		<description><![CDATA[All Rails developers use ActiveRecord callbacks. The use of these callbacks helps our models: validation, data manipulation, relational operations, automatic sending of emails&#8230; When you start developing with Rails, all these operations I mentioned are normally done in the controller. However, as we begin to lighten our controllers we fatten up our models with more [...]]]></description>
			<content:encoded><![CDATA[<p>All Rails developers use <a target="_blank" href="http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html">ActiveRecord <em>callbacks</em></a>. The use of these callbacks helps our models: validation, data manipulation, relational operations, automatic sending of emails&#8230;</p>
<p>When you start developing with Rails, all these operations I mentioned are normally done in the controller. However, as we begin to lighten our controllers we <a target="_blank" href="http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model">fatten up our models</a> with more and more callbacks. This is a good thing but at times we end up with a load of callbacks in the model that have nothing to do with the model.</p>
<p>To extract all this disparate code which has nothing directly to do with the model, Rails gives us <a target="_blank" href="http://api.rubyonrails.org/classes/ActiveRecord/Observer.html">observers</a>.</p>
<h4 id="los_observers_por_dentro">Inside Observers</h4>
<p>In this post, we&#8217;ll see how Rails observers work. For this it&#8217;s necessary to know how they are used so, if you&#8217;ve never used them, you should take a look at the <a target="_blank" href="http://api.rubyonrails.org/classes/ActiveRecord/Observer.html">documentation</a> <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h5 id="el_mdulo_observable_en_ruby">The Ruby Observable module</h5>
<p>Ruby implements some common design patterns in its standard library. One such module is <em>Observable</em>.</p>
<p>The <em>Observable</em> module implements the <a target="_blank" href="http://en.wikipedia.org/wiki/Observer_pattern">Observer pattern</a>, also known as <em>Publish-Subscribe</em>. In this pattern, an object (the <em>publisher</em> or source) informs a group of interested objects (the <em>subscribers</em>) when it&#8217;s state changes. To accomplish this, we are given a series of methods to register subscribers and to notify them of state changes.</p>
<p>Let&#8217;s see an example of the use of the Observable module:</p>
<pre class="ruby"><span class="ident">require</span> <span class="punct">'</span><span class="string">observer</span><span class="punct">'</span>

<span class="keyword">class </span><span class="class">SystemMonitor</span>
  <span class="ident">include</span> <span class="constant">Observable</span>

  <span class="keyword">def </span><span class="method">run</span>
    <span class="ident">last_free_space</span> <span class="punct">=</span> <span class="constant">nil</span>
    <span class="ident">loop</span> <span class="keyword">do</span>
      <span class="ident">free_space</span> <span class="punct">=</span> <span class="constant">Disk</span><span class="punct">.</span><span class="ident">free_space</span>
      <span class="ident">puts</span> <span class="punct">&quot;</span><span class="string">Free disk space: <span class="expr">#{free_space}</span>MB</span><span class="punct">&quot;</span>
      <span class="keyword">if</span> <span class="ident">free_space</span> <span class="punct">!=</span> <span class="ident">last_free_space</span>
        <span class="ident">changed</span>
        <span class="ident">notify_observers</span><span class="punct">(</span><span class="ident">free_space</span><span class="punct">)</span>
        <span class="ident">last_free_space</span> <span class="punct">=</span> <span class="ident">free_space</span>
      <span class="keyword">end</span>
      <span class="ident">sleep</span><span class="punct">(</span><span class="number">60</span><span class="punct">)</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="keyword">class </span><span class="class">DiskMainteinance</span>
  <span class="keyword">def </span><span class="method">initialize</span><span class="punct">(</span><span class="ident">limit</span><span class="punct">)</span>
    <span class="attribute">@limit</span> <span class="punct">=</span> <span class="ident">limit</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">update</span><span class="punct">(</span><span class="ident">free_space</span><span class="punct">)</span>
    <span class="keyword">if</span> <span class="ident">free_space</span> <span class="punct">&lt;</span> <span class="attribute">@limit</span>
      <span class="ident">puts</span> <span class="punct">&quot;</span><span class="string">-- Cleaning temp files. <span class="expr">#{free_space}</span>MB free</span><span class="punct">&quot;</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="keyword">class </span><span class="class">AlertLowSpace</span>
  <span class="keyword">def </span><span class="method">initialize</span><span class="punct">(</span><span class="ident">limit</span><span class="punct">,</span> <span class="ident">email</span><span class="punct">)</span>
    <span class="attribute">@limit</span> <span class="punct">=</span> <span class="ident">limit</span>
    <span class="attribute">@email</span> <span class="punct">=</span> <span class="ident">email</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">update</span><span class="punct">(</span><span class="ident">free_space</span><span class="punct">)</span>
    <span class="keyword">if</span> <span class="ident">free_space</span> <span class="punct">&lt;</span> <span class="attribute">@limit</span>
      <span class="ident">puts</span> <span class="punct">&quot;</span><span class="string">-- Notifying to <span class="expr">#{@email}</span>. <span class="expr">#{free_space}</span>MB free</span><span class="punct">&quot;</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="ident">monitor</span> <span class="punct">=</span> <span class="constant">SystemMonitor</span><span class="punct">.</span><span class="ident">new</span>
<span class="ident">monitor</span><span class="punct">.</span><span class="ident">add_observer</span><span class="punct">(</span><span class="constant">DiskMainteinance</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="number">700</span><span class="punct">))</span>
<span class="ident">monitor</span><span class="punct">.</span><span class="ident">add_observer</span><span class="punct">(</span><span class="constant">AlertLowSpace</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="number">700</span><span class="punct">,</span> <span class="punct">'</span><span class="string">peter@example.com</span><span class="punct">'))</span>
<span class="ident">monitor</span><span class="punct">.</span><span class="ident">add_observer</span><span class="punct">(</span><span class="constant">AlertLowSpace</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="number">600</span><span class="punct">,</span> <span class="punct">'</span><span class="string">john@example.com</span><span class="punct">'))</span>
<span class="ident">monitor</span><span class="punct">.</span><span class="ident">run</span></pre>
<p>I think the example is pretty easy to follow, but it&#8217;s best if I clarify some details <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The Observable module defines a series of methods that you can look up in the <a target="_blank" href="http://ruby-doc.org/core/classes/Observable.html">module documentation</a>. In our example we use three of these:</p>
<ul>
<li><strong>changed</strong><em>(state=true)</em>: the state of the object has changed.</li>
<li><strong>notify_observers</strong><em>(*args)</em>: <strong>i</strong> <strong>f the state is true</strong>, invoke the update method of each subscriber with the same arguments.</li>
<li><strong>add_observer</strong><em>(observer)</em>: register a new subscriber.</li>
</ul>
<p>Lets see an execution example of the previous script:</p>
<pre class="ruby"><span class="comment">Free disk space: 1011MB</span>
<span class="comment">Free disk space: 821MB</span>
<span class="comment">Free disk space: 880MB</span>
<span class="comment">Free disk space: 625MB</span>
<span class="comment">-- Cleaning temp files. 625MB free</span>
<span class="comment">-- Notifying to peter@example.com. 625MB free</span>
<span class="comment">Free disk space: 730MB</span>
<span class="comment">Free disk space: 570MB</span>
<span class="comment">-- Cleaning temp files. 570MB free</span>
<span class="comment">-- Notifying to peter@example.com. 570MB free</span>
<span class="comment">-- Notifying to john@example.com. 570MB free</span>
<span class="comment">Free disk space: 716MB</span>
<span class="comment">Free disk space: 841MB</span>
<span class="comment">Free disk space: 1016MB</span></pre>
<h5 id="activerecord_publicador_y_suscriptor">ActiveRecord: Publisher and Subscriber</h5>
<p>ActiveRecord has two classes involved in event management:</p>
<ul>
<li>ActiveRecord::Base: includes the Observable module and notifies the subscribers of al events to which callbacks can be associated</li>
<li>ActiveRecord::Observer: the base class for all observers and defines the update method</li>
</ul>
<p>When a model (i.e. a subclass of ActiveRecord::Base) changes its state it invokes, in addition to the callbacks in the class itself, the method notify_observers with the following arguments:</p>
<ul>
<li>The name of the event: before_validation, after_save, after_destroy&#8230;</li>
<li>The ActiveRecord object</li>
</ul>
<ul></ul>
<p>As we&#8217;ve seen, upon invoking notify_observers in the model, update is invoked on all the observers subscribed to the model. In the rails observers, the update method will invoke &#8211; if it is defined &#8211; the method of the class that has the name of the event notified and will pass as argument the object that has changed its state.</p>
<pre class="ruby"><span class="comment"><em># Send observed_method(object) if the method exists.</em></span><em>
<span class="keyword">def </span><span class="method">update</span><span class="punct">(</span><span class="ident">observed_method</span><span class="punct">,</span> <span class="ident">object</span><span class="punct">)</span> <span class="comment">#:nodoc:</span>
<span class="ident">  send</span><span class="punct">(</span><span class="ident">observed_method</span><span class="punct">,</span> <span class="ident">object</span><span class="punct">)</span> <span class="keyword">if</span> <span class="ident">respond_to?</span><span class="punct">(</span><span class="ident">observed_method</span><span class="punct">)</span>
<span class="keyword">end</span></em></pre>
<h5 id="inicializacin_de_observers_en_rails">Initialisation of observers in Rails</h5>
<p>Now we&#8217;ve seen how ActiveRecord::Base notifies observers of events. Nevertheless, we&#8217;ve not seen how observers subscribe (as I&#8217;m sure you know, via a call to the method add_observer in the module Observable).</p>
<p>When the rails observers call add_observer the constructor of ActiveRecord::Observer is run:</p>
<pre class="ruby"><span class="comment"><em># Start observing the declared classes and their subclasses.</em></span><em>
<span class="keyword">def </span><span class="method">initialize</span>
<span class="constant">  Set</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">observed_classes</span> <span class="punct">+</span> <span class="ident">observed_subclasses</span><span class="punct">).</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">klass</span><span class="punct">|</span> <span class="ident">add_observer!</span> <span class="ident">klass</span> <span class="punct">}</span>
<span class="keyword">end</span></em></pre>
<p>However, as the <a target="_blank" href="http://api.rubyonrails.org/classes/ActiveRecord/Observer.html">documentation</a> states, to use observers, we don&#8217;t instantiate objects but instead we configure them in the environment.rb file (config.activerecord.observers_). This is to delegate to Rails the responsibility for initialising the observers.</p>
<p>We&#8217;re not going to look at when they&#8217;re initialised, but instead how.</p>
<p>The ActiveRecord::Observer class follows the <a target="_blank" href="http://en.wikipedia.org/wiki/Singleton_pattern">Singleton design pattern</a>. This pattern guarantees that there will be at the most one instance of a class. To achieve this, the visibility of the constructor is changed to private and a method is defined which returns the single instance of the class.</p>
<p>This pattern is also included in the standard Ruby library in the <a target="_blank" href="http://ruby-doc.org/core/classes/Singleton.html">Singleton module</a>. This module changes the visibility of the constructor and defines the instance method.</p>
<p>Therefore, Rails uses the instance method to subscribe the observers to the corresponding models.</p>
<h5 id="sabiendo_esto8230">Knowing this&#8230;</h5>
<p>Knowing these details about the implementation of the Publish-Subscribe pattern in ActiveRecord and their initialisation in Rails, we have the technical knowledge to develop our own observers.<br />
We found it necessary to develop our own observers in order to have a single class that subscribes to various models but attending to different events depending on the model.</p>
<p>In the next post, we&#8217;ll make the most of what we&#8217;ve explained here to look in detail at our observers.</p>
<p>Happy Hacking! <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/event-management-in-rails-observers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ernesto Jimenez wins the February 2008 Rails Hackfest</title>
		<link>http://blog.negonation.com/en/ernesto-jimenez-wins-the-february-2008-rails-hackfest/</link>
		<comments>http://blog.negonation.com/en/ernesto-jimenez-wins-the-february-2008-rails-hackfest/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 12:57:55 +0000</pubDate>
		<dc:creator>David Blanco</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/ernesto-jimenez-wins-the-february-2008-rails-hackfest/</guid>
		<description><![CDATA[Ernesto Jimenez, Tractis lead software engineer has just won the February 2008 Rails Hackfest. In addition, Juanjo Bazán, negonator and frequent collaborator, reached an excellent 5th place. Rails Hackfest is a monthly event that recognises developers that contribute to improve the core Ruby on Rails code, a framework that we use in the development of [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.lacoctelera.com/ernesto-jimenez">Ernesto Jimenez</a>, Tractis lead software engineer has just won the <a target="_blank" href="http://www.workingwithrails.com/hackfest/22-monthly-february-2-8">February 2008 Rails Hackfest</a>. In addition, Juanjo Bazán, <a href="http://blog.negonation.com/es/quiero-colaborar/">negonator and frequent collaborator</a>, reached an excellent 5th place.<br />
<a target="_blank" href="http://www.workingwithrails.com/hackfest">Rails Hackfest</a> is a monthly event that recognises developers that contribute to improve the core <a target="_blank" href="http://www.rubyonrails.org/">Ruby on Rails</a> code, a framework that we use in the development of Tractis. The value of the contributions is calculated using a <a target="_blank" href="http://www.workingwithrails.com/hackfest/scoring">points system</a> and the highest in the table receive <a target="_blank" href="http://www.workingwithrails.com/hackfest/22-monthly-february-2-8/prizes">prizes</a>. In this case, Ernesto won free entry to this years <a target="_blank" href="http://en.oreilly.com/rails2008/public/content/home">RailsConf</a> in Portland, Oregon.<br />
<a target="_blank" href="http://www.workingwithrails.com/hackfest/22-monthly-february-2-8"><img id="image291" alt="rails-hackfest-february-2008.gif" src="http://blog.negonation.com/es/wp-content/uploads/2008/03/rails-hackfest-february-2008.gif" /></a></p>
<p>Rails Hackfest is a worldwide competition and this recognition is a (further) demonstration that in Spain and Europe in general, we have talent of the highest order.</p>
<p>Our most sincere congratulations to Ernesto and Juanjo. It&#8217;s an honour working with you both.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/ernesto-jimenez-wins-the-february-2008-rails-hackfest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical decisions in Tractis</title>
		<link>http://blog.negonation.com/en/technical-decisions-in-tractis/</link>
		<comments>http://blog.negonation.com/en/technical-decisions-in-tractis/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 23:25:13 +0000</pubDate>
		<dc:creator>Ernesto Jiménez</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tractis]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/technical-decisions-in-tractis/</guid>
		<description><![CDATA[Choice of Framework: Rails and Java A while ago, we described our decision to use Ruby on Rails to develop Tractis and stated that we were happy to have chosen rails instead of Java. We also mentioned that, given the deficiencies of Ruby, we opted to employ Java Web Services for the digital signature back [...]]]></description>
			<content:encoded><![CDATA[<h2 id="la_eleccin_del_framework_rails_y_java">Choice of Framework: Rails and Java</h2>
<p>A while ago, we described <a href="http://blog.negonation.com/en/tractis-and-ruby-on-rails/">our decision</a> to use Ruby on Rails to develop Tractis and stated that we were happy to have chosen rails instead of Java. We also mentioned that, given the deficiencies of Ruby, we opted to employ Java Web Services for the digital signature back end.<br />
Back then we were very happy with our choice of rails and we still are. The framework has given us a lot of agility and it&#8217;s fun to work with. Anyone who follows the blog has seen that we even participate whenever possible at Rails events to show our satisfaction.</p>
<p>So, <em>what of the development we&#8217;ve done in Java?</em></p>
<p>Re-reading that post, it sounds like we&#8217;re developing in Java because there was no other choice &#8211; that if we&#8217;d had the necessary Ruby libraries we wouldn&#8217;t have any Java code and we&#8217;d be even happier. With the appearance of JRuby there are those who ask us if we&#8217;d not rather run the application in JRuby on Rails and therefore have access to the Java libraries that we need, eliminating our need for web services.</p>
<p>Without doubt, that decision was not just about frameworks but was also an application design choice.</p>
<h2 id="la_eleccin_de_diseo_arquitectura_de_servicios_web">The design choice: web services architecture</h2>
<p>As we said, when we selected the framework, we also chose the architecture. We decided that we wanted to develop various specific applications other than one that encompassed everything, in the pure UNIX style.</p>
<p>The truth is that, looking back, we&#8217;re very happy to have opted for a Rails front end but we&#8217;re also very happy to have chosen a web services architecture. So, just like when we discussed the advantages of choosing Rails, now we want to share with you the advantages of using web services.</p>
<h3 id="otra_buzzword">Another buzzword</h3>
<p>This type of architecture is fashionable and even has it&#8217;s own buzzword: SOA (Service-Oriented Architecture). So you can now have your <em>SOA</em> application, done in <em>Rails</em> with a lot of <em>AJAX</em>.</p>
<p>If, on the contrary, you are like us and you are <strong>not motivated by buzzwords</strong>, read on <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3 id="calidad">Quality</h3>
<p>As we said earlier, the idea to design smaller and more specific applications that make up a larger application follows the UNIX philosophy.</p>
<p>If we stop and think about it, this is the philosophy that makes UNIX so powerful and one of the reasons why we like it so much. You have a load of specific programs: ls, grep, sed, awk&#8230; these programs do specific things but they do them very well.</p>
<p>Working with specific applications that have to resolve a concrete problem, we can concentrate much better on the problem at hand. You might think that to achieve task isolation it would be enough to develop libraries instead of applications &#8211; and you would be right. Having said that, developing distinct applications connected by web services allows us to have a totally language, framework and deployment-agnostic architecture. If, in the future, there are better tools in C++ or .NET for the validation of signatures, we can migrate just this application without impacting the rest of the system. <strong>Developing specific applications we can employ the best tools in each case</strong>.</p>
<p>In addition to the improved implementation quality, we have also discovered improvements at execution time &#8211; on one hand for scalability reasons which we&#8217;ll discuss in the next section, and on the other the flexibility to redeploy or deactivate a specific service without having to shut down the rest of the services.</p>
<h3 id="escalabilidad">Scalability</h3>
<p>When we talk about scalability, we refer to scalability of technical resources as well as human resources. On the technical side, it&#8217;s very simple. At the start, you can have all the services on the same machine and if one becomes a bottleneck, you just move it to a dedicated machine. Additionally, if the service is share-nothing, you can deploy it on as many machines as you need to give a high level of service. This will be clear to anyone who works with Rails <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>On the human side, a service-based architecture allows us more room to scale our development, meaning we can move from managing a single larger team to assigning a smaller team per service. This way, as we grow and require more developers, it won&#8217;t be necessary to have a bigger and bigger team but rather a group of small, agile teams that are in charge of one or more services.</p>
<h2 id="en_futuros_posts">In future posts</h2>
<p>In future posts we hope to talk in more detail about the our architecture, the services that compose it and what they are used for.<br />
Bye for now!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/technical-decisions-in-tractis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conferencia Rails Hispana &#8211; Spanish Rails Conference &#8211; 2007</title>
		<link>http://blog.negonation.com/en/conferencia-rails-hispana-spanish-rails-conference-2007/</link>
		<comments>http://blog.negonation.com/en/conferencia-rails-hispana-spanish-rails-conference-2007/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 20:58:24 +0000</pubDate>
		<dc:creator>Juanjo Bazán</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/conferencia-rails-hispana-spanish-rails-conference-2007/</guid>
		<description><![CDATA[The Spanish rails conference 2007 will take place in Madrid this week &#8211; on the 22nd and 23rd. Last year it was a big success and this year promises to be more of the same: two days of interesting-looking presentations that will allow us to meet and share a few beers with meet many of [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.conferenciarails.org/"><img hspace="3" align="right" alt="crails07.jpg" src="http://blog.negonation.com/es/wp-content/uploads/2007/11/crails07.jpg" /></a>The <a target="_blank" href="http://www.conferenciarails.org">Spanish rails conference 2007</a> will take place in Madrid this week &#8211; on the 22nd and 23rd. <a href="http://blog.negonation.com/en/the-first-rails-conference-hispana-sets-a-high-standard/">Last year</a> it was a big success and this year promises to be more of the same: two days of interesting-looking presentations that will allow us to meet and share a few beers with meet many of our negonators. As per last year, Tractis will be represented in some of the talks:</p>
<ul>
<li><a href="http://www.lacoctelera.com/ernesto-jimenez">Ernesto Jiménez</a>, who couldn&#8217;t attend last year because he was in Finland (although he still won the speed programming contest at the conference) will present the Tractis platform in his talk &#8220;Case study: A technical spotlight on Tractis&#8221; in which he will give an overview of some of the specific design details of Tractis.</li>
</ul>
<p>Ernesto will appear again, joining the list of negonators that will give presentations that are not directly related to Tractis:</p>
<ul>
<li><a href="http://www.lacoctelera.com/verbosemode">David Calavera</a> will talk about the tools that ruby makes available to interact with the atomPub protocol, how to test it&#8217;s implementation and an example of the use of the 11870 API.</li>
<li>Juan Lupión will present Slingshot, the open source alternative for integrating web applications with the desktop using Ruby On Rails.</li>
<li>Juanjo Bazán will encourage the attendees to contribute improvements to the Rails repository and will explain the necessary steps to add code to the project.</li>
<li>Ernesto Jiménez will revise the common web security vulnerabilities and will comment on the tools available in Rails to avoid these types of vulnerabilities.</li>
</ul>
<p><a target="_blank" href="http://ponencias.conferenciarails.org">All the sessions</a> look good and the difficulty will be choosing which to attend. For all of you who cannot go to the talks, they will be recorded on video and made publicly available including, of course, the keynote presentantion by <a target="_blank" href="http://obiefernandez.com/">Obie Fernández</a> which will close the conference.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/conferencia-rails-hispana-spanish-rails-conference-2007/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Launch of ACME: Demo site for the Tractis API</title>
		<link>http://blog.negonation.com/en/launch-of-acme-demo-site-for-the-tractis-api/</link>
		<comments>http://blog.negonation.com/en/launch-of-acme-demo-site-for-the-tractis-api/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 23:48:10 +0000</pubDate>
		<dc:creator>Ernesto Jiménez</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tractis]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/launch-of-acme-demo-site-for-the-tractis-api/</guid>
		<description><![CDATA[Last week we gave you a preview of the API we&#8217;re working on and talked about some of the services that it will offer: User authentication via Digital Certificates. Automated sending of personalised contracts. Now we want to talk about some of the things we have ready. However much documentation we write, the best way [...]]]></description>
			<content:encoded><![CDATA[<p>Last week we gave you a <a href="http://blog.negonation.com/en/a-preview-of-the-tractis-api/">preview of the API</a> we&#8217;re working on and talked about some of the services that it will offer:</p>
<ul>
<li>User authentication via Digital Certificates.</li>
<li>Automated sending of personalised contracts.</li>
</ul>
<p>Now we want to talk about some of the things we have ready. However much documentation we write, the best way to understand the capabilities of the API is to see it in action so we&#8217;ve decided to create a fictitious company &#8211; &#8220;ACME&#8221; &#8211; whose web site (<a href="http://acme.tractis.com">http://acme.tractis.com</a>) will demonstrate everything you can do with the Tractis API.</p>
<p><a href="http://acme.tractis.com"><img alt="acme1.png" id="image239" src="http://blog.negonation.com/es/wp-content/uploads/2007/11/acme1.png" /></a></p>
<h3>ACME: Demo of sending personalised contracts to clients</h3>
<p><a href="http://acme.tractis.com/">The first example we&#8217;ve put on the ACME web site</a> demonstrates the &#8220;Contract Management System&#8221;. The Tractis API allows you to use this system to automate the creating and sending of totally personalized contracts to your clients. As you&#8217;ll see in the demo, with the API you can:</p>
<ul>
<li>Personalize the subject and body of the email that the customer will receive</li>
<li>Personalize the instructions that appear at the top of the contract. This is useful for explaining the steps to follow to the customer (&#8220;review the contract and, if you agree with it, press the &#8216;Sign&#8217; button at the end of it&#8221;, ask for additional information, record delivery periods, etc.</li>
<li>Select the template that will serve as the basis for the contract. You can choose from the example templates or log in and use the templates in your <a href="https://www.tractis.com/templates/my_templates">private library</a>.</li>
<li>Fill in the <a href="http://blog.negonation.com/en/new-functionality-in-tractis-import-and-export-of-templates-and-contracts/">variables in the template</a> that you&#8217;re going to use. Logically this option is only available if the template used includes variables. In this demo, all the contracts sent share the same variables (e.g. Buyer Name = &#8220;John Smith&#8221;). Of course, with the API, you can personalize the variables in each contract.</li>
</ul>
<h3>Details for &#8220;sellers&#8221;</h3>
<p>Your clients are yours:</p>
<ol>
<li>They don&#8217;t have to register with Tractis to sign a contract.</li>
<li>They will receive a personalized e-mail with the message sender, subject and body that you decide.</li>
<li>They will agree to contracts personalized with <a href="https://www.tractis.com/settings/appearance">your corporate image</a> (logo, colors, instructions).</li>
</ol>
<h3>Details for &#8220;techies&#8221;</h3>
<p>We&#8217;re still expanding the API documentation but we can tell you a few things:</p>
<ul>
<li>Access: initially the API will be accessible via <a target="_blank" href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a>. In the future, we&#8217;ll also allow <a target="_blank" href="http://en.wikipedia.org/wiki/SOAP">SOAP</a> access.</li>
<li>Format: The data format is XML. In the <a href="http://acme.tractis.com/">current demo</a>, you can see a preview of the XML requests sent to Tractis. Shortly, you&#8217;ll be able to see the trace of API requests.</li>
</ul>
<h3>Work on the API continues&#8230;what do you need?</h3>
<p>In Tractis we firmly believe that the business potential of the internet goes beyond promotion and communication. Now you can negotiate and sign contracts 100% online and with the necessary legal guarantees. The technology and <a href="https://www.tractis.com/contracts/490915454">legislation</a> are available right now.</p>
<p>If you believe that your company could take advantage of these types of services, don&#8217;t hesitate &#8211; <a href="mailto:info@tractis.com">get in contact with us</a>. We&#8217;ll be thrilled to hear your ideas for using the Internet and digital signatures to speed up and increase your business.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/launch-of-acme-demo-site-for-the-tractis-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A preview of the Tractis API</title>
		<link>http://blog.negonation.com/en/a-preview-of-the-tractis-api/</link>
		<comments>http://blog.negonation.com/en/a-preview-of-the-tractis-api/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 20:15:19 +0000</pubDate>
		<dc:creator>David García</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tractis]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/a-preview-of-the-tractis-api/</guid>
		<description><![CDATA[We&#8217;re working to launch the Tractis API in the middle of November. The API will allow you to connect directly with our back-end and use digital certificates to authenticate your users, store documents, digitally sign contracts and lots more besides. The back-end Tractis services are organized into three groups according to purpose: identity services, document [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re working to launch the Tractis API in the middle of November. The API will allow you to connect directly with our back-end and use digital certificates to authenticate your users, store documents, digitally sign contracts and lots more besides.</p>
<p>The back-end Tractis services are organized into three groups according to purpose: identity services, document management services and digital signature services.</p>
<p><a href="http://blog.negonation.com/es/wp-content/uploads/2007/10/tractis-backend-big.png"><img alt="tractis-backend-small.png" id="image235" src="http://blog.negonation.com/es/wp-content/uploads/2007/10/tractis-backend-small.png" /></a></p>
<h3>Externally accessible services</h3>
<h4>1. Identity services:</h4>
<ul>
<li><u>Identity Federation Server</u>: Allows single sign-on to Tractis services. A typical use-case is where a customer of a Tractis organization uses multiple services but only has to identify themselves once (to the user organization).</li>
<li><u>Identity and Attribute Authority</u>: Allows the management, certification and verification of attributes of individuals and organizations</li>
<ul>
<li>Management: Allows definition of access control on different attributes, according to their nature.</li>
<li>Certification: Allows connections to 3rd party attribute repositories and the presentation of challenges of the holders of an identity (example: authentication using personal certificates issued by a trusted authority).</li>
<li>Verification: Allows the lookup of information stated by the user (phone number, address etc.).</li>
</ul>
</ul>
<h4>2. Document management services:</h4>
<ul>
<li><u>Contract Management System</u>: Allows complete contract lifecycle management.</li>
<li><u>Long-term Archive</u>: Allows long-term storage of documents, guaranteeing their future reproducibility, integrity and authenticity.</li>
</ul>
<h4>3. Digital signature services:</h4>
<ul>
<li><u>Semantic Validation Authority</u>: Verifies the validity of electronically signed documents from a legal and technical point of view. Supports advanced digital signatures based on the AdES format.</li>
</ul>
<p>The &#8220;Evidence Manager&#8221; acts above all these services. It stores and preserves evidence for future investigative processes. The evidence manager allows us to show evidence to 3rd parties with regarding the operations performed by the different services.</p>
<h3>Internal-only services</h3>
<p>As you can see from the diagram, all these services use a series of internal components to guarantees (integrity, durability etc.) all operations performed by the platform.</p>
<ul>
<li><u>Time Stamping Authority:</u> Applies time stamps to electronic documents, permitting demonstration of document content at a given moment in time.</li>
<li><u>Trusted Time Sources</u>: Providers of Date/Time information synchronized through multiple channels (i.e. internet, phone&#8230;) with official sources of time such as the Real Observatorio de la Armada (Spanish Royal Navy Observatory) &#8211; official time in Spain.</li>
<li><u>Attribute Repository</u>: Allows storage of user attributes and roles (responsibility, membership of professional organizations&#8230;) and makes them available them to the applications that request for them.</li>
</ul>
<p>Finally, Tractis integrates with Certification Authorities around the world.</p>
<h3>Why use this functionality?</h3>
<p>We are going to open up the functionality progressively. Initially, we&#8217;ll open parts of the &#8220;Identity and Attribute Authority&#8221; and the &#8220;Contract Management System&#8221;, which will allow:</p>
<ol>
<li>Authenticating users via digital certificates (Spanish electronic ID card &#8211; <a target="_blank" href="http://www.dnielectronico.es/oficina_prensa/noticia_destacada/noticia_new.html">DNIe</a> &#8211; included), free of charge, from your website.</li>
<li>Automating the bulk sending of personalized contracts to your customers, asking for their digital signature.</li>
</ol>
<p>All these services will be offered remotely by Tractis. You don&#8217;t need to develop, install, configure or maintain an infrastructure valued in millions of euros that is within reach of only the biggest banks. You only need <a href="http://www.tractis.com/signup">a Tractis account</a> and to integrate with the API.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/a-preview-of-the-tractis-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codemart, Beluga Linguistics and Negonation join together to promote FIT</title>
		<link>http://blog.negonation.com/en/codemart-beluga-linguistics-and-negonation-join-together-to-promote-fit/</link>
		<comments>http://blog.negonation.com/en/codemart-beluga-linguistics-and-negonation-join-together-to-promote-fit/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 09:32:07 +0000</pubDate>
		<dc:creator>Juanse Pérez</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/codemart-beluga-linguistics-and-negonation-join-together-to-promote-fit/</guid>
		<description><![CDATA[I&#8217;m happy to anounce that Codemart (a nearshoring company specialising in Java and Ruby on Rails), Beluga Linguistics (a company that provides translation services to clients such as Xing and Last.fm) and Negonation have joined together to promote FIT, an open source project charged with the development of internationalization software for humans. Past Anyone involved [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to anounce that <a href="http://blog.negonation.com/es/">Codemart </a>(a <em>nearshoring </em>company specialising in Java and Ruby on Rails), <a target="_blank" href="http://www.belugalinguistics.com">Beluga Linguistics</a> (a company that provides translation services to clients such as <a target="_blank" href="http://www.xing.com">Xing</a> and <a target="_blank" href="http://www.last.fm">Last.fm</a>) and Negonation have joined together to promote FIT, an open source project charged with the development of <strong><a target="_blank" href="http://en.wikipedia.org/wiki/Internationalization_and_localization">internationalization</a> software for humans</strong>.</p>
<h3>Past</h3>
<p>Anyone involved in the launch of web applications of an international vocation (i.e. should be available in various languages) will agree that the <a target="_blank" href="http://anakin.ncst.ernet.in/~aparna/consolidated/x3799.html">available options</a> are depressing. The tools are rough, unusable and designed without a thought for the end user (the translator). The current solutions:</p>
<ul>
<li>All require translators to request help from programmers to edit files, upload them to the server or to manage the combination of the individual translations into the final version.</li>
<li>Many are desktop applications that don&#8217;t allow online collaboration.</li>
<li>Many don&#8217;t integrate with version control systems and those that do require advanced knowledge (conflicts, merges, updates).</li>
<li>None is capable of responding to basic questions such as: &#8216;which text strings have been recently translated?&#8217; or &#8216;which text strings do we need to translate for the next version?&#8217;.</li>
<li>The management of processes such as assignment, verification and establishment of translation objectives is terrible.</li>
</ul>
<p>The translator is a bottleneck for the release process and can only work properly when the translation process is performed after development. Slow. Disappointing.</p>
<p>As a result of the <a target="_blank" href="http://www.conferenciarails.org/">first Spanish Rails conference</a> we announced the launch of a new initiative: &#8220;Found In Translation (FIT). FIT is an open source project that aims to develope an internationalization software for web applications that overcomes the limitations of current tools. The objective of FIT is to create a tool that makes translators and programmers happy: usable and that transparently supports the existing standard translation file formats.</p>
<p>In our case, managing the translations of Tractis in an efficient manner is critical to our day to day operations. But we&#8217;re not alone:  <a href="http://www.habitamos.com/">habitamos</a>, <a href="http://www.casabuscador.com/">casabuscador</a>, <a href="http://www.qype.com/">qype</a>, <a href="http://www.xing.com/">xing</a>, <a href="http://www.last.fm">last.fm</a>, <a href="http://www.vlex.com/">vlex</a>, <a href="http://www.mobuzztv.com">mobuzztv</a>&#8230; Many companies, mainly European, have the same problem. Additionally, in Spain and other countries, it&#8217;s important to support all the official languages, and not just when you develop for the public sector.</p>
<p>The majority solve &#8220;their&#8221; problem with proprietary, internal systems and the &#8220;state of the art&#8221; doesn&#8217;t advance. Without becoming &#8220;Infrastructure Software&#8221;, &#8220;translation&#8221; remains clearly an horizontal function &#8211; common to all projects but never at the center of the activity. It&#8217;s an ideal candidate for open software. It doesn&#8217;t make sense for each web application project to develop their own solution. We should join together and combine our efforts to design a solution that benefits everyone. In this spirit, we created a <a target="_blank" href="http://groups.google.com/group/fit_project">mailing list</a> in December and Negonation appointed me to the project.</p>
<h3>Present</h3>
<p><a title="Subscr?bete al proyecto FIT" href="http://groups.google.com/group/fit_project/subscribe"><img align="right" alt="Subscr?bete al proyecto FIT" src="http://blog.negonation.com/es/wp-content/uploads/2007/02/logo_fit.png" /></a>Since then, there have been a few advances that I&#8217;d like to share with you:</p>
<ul>
<li>Codemart, Beluga Linguistics and Negonation have reached an agreement to promote FIT.</li>
<li>We have an official FIT logo, courtesy of <a href="http://cafeina.ladybenko.net/index.php">Belén Albeza</a>.</li>
<li>The mailing list now has 26 subscribers &#8211; programmers, designers and linguistics profesionals from around the world.</li>
<li>We have assigned <a href="http://www.rubenlozano.com/">Rubén Lozano</a>, web designer and Negonator to take charge of the design and usability of FIT.</li>
<li>We have developed some initial code which I hope will serve as the basis for the future FIT (watch <a href="http://www.youtube.com/watch?v=hptiSlXBXRs">screencast</a>).</li>
<li>The code has been released under the <a target="_blank" href="http://www.ruby-lang.org/en/LICENSE.txt">Ruby license</a> &#8211; the license used by the Ruby programming language &#8211; which is <a target="_blank" href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">compatible with the GPL</a></li>
<li>The project has been accepted in <a target="_blank" href="http://rubyforge.org/scm/?group_id=2955">RubyForge</a>. If you want to access the code and collaborate in its development, follow these <a target="_blank" href="http://rubyforge.org/scm/?group_id=2955">instructions</a>, <a target="_blank" href="http://rubyforge.org/account/register.php">register with RubyForge</a> and send me an email at <a href="mailto:juanse.perez@negonation.com">juanse.perez@negonation.com</a> requesting access.</li>
</ul>
<h3>Future</h3>
<p>We&#8217;re preparing the documentation to present FIT at the <a target="_blank" href="http://code.google.com/soc/">Google Summer of Code 2007</a>. If Google approve our application and you are a student, you might want to sign up and <a target="_blank" href="http://code.google.com/support/bin/answer.py?answer=60322&#038;topic=10731">win $4,500</a>. Soon, we will launch a blog to speak about the project progress and we&#8217;re discussing some <em>&#8220;killer&#8221;</em> features such as contextual translation (the translator logs on to the application in &#8220;translation mode&#8221; and can translate text strings shown in the application by just clicking on them).</p>
<p>We hope that many other translation, programming and web service companies unite and collaborate in the development and publication of this initiative. Lets build a highly usable tool that recognises the objections of everyone and makes it easier to <a target="_blank" href="http://groups.google.com/group/fit_project/subscribe">bring web applications to people around the world</a>.</p>
<p><strong>Update 8th April 2007</strong>: Have a look at the <a href="http://fit.dit.upm.es/demo">FIT Demo</a> and the <a href="http://fit.dit.upm.es/cgi-bin/trac.cgi">FIT Trac</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/codemart-beluga-linguistics-and-negonation-join-together-to-promote-fit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shu Ha Ri</title>
		<link>http://blog.negonation.com/en/shu-ha-ri/</link>
		<comments>http://blog.negonation.com/en/shu-ha-ri/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 08:51:50 +0000</pubDate>
		<dc:creator>Luismi Cavallé</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tractis]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/shu-ha-ri/</guid>
		<description><![CDATA[Today we start a new series of posts in which the Negonation developers will talk of their experiences with Tractis. Their mailing list has been converted into a hive of activity with links, methodologies, focused discussions &#8211; valuable ideas that are worth sharing. The focus of the posts is practical but the intention is not [...]]]></description>
			<content:encoded><![CDATA[<div class="comment-body David Blanco">
<blockquote><p>Today we start a new series of posts in which the Negonation developers will talk of their experiences with Tractis. Their mailing list has been converted into a hive of activity with <a href="http://del.icio.us/tag/para:tractis">links</a>, methodologies, focused discussions &#8211; valuable ideas that are worth sharing.</p>
<p>The focus of the posts is practical but the intention is not to comment on lines of code, but reflections on our constant search for efficiency in a decentralised and delocalised environment. We want to talk about what we truly believe will make a software development project succeed or fail and about what the majority of companies don&#8217;t focus their attention: agility, motivation, self-improving, barriers to communication, clarity in the objectives, application of generic methodologies to teams of unique individuals, programming decisions that impact on the strategy and the business.</p>
<p>And with the difficult task of starting off, we have Luismi Cavallé, one of the latest and keenest Negonators to sign up. Proof of this is the special mention that he received in the <a href="http://blog.negonation.com/en/and-the-glider-goes-to/">latest Glider prizes</a>, despite being on the team a short time. We&#8217;ll leave you with him. If you like what you see, take a look at his blog &#8220;<a href="http://blog.lmcavalle.com">Putting it together</a>&#8221; (<a href="http://blog.lmcavalle.com/feed/">RSS</a>), full of &#8220;delicious&#8221; posts about the art of programming.</p></blockquote>
</div>
<p><a href="http://en.wikipedia.org/wiki/ShuHaRi">Shu Ha Ri</a> is a Japanese term that describes the three stages of apprenticeship of a martial art.Shu means to maintain, protect, obey. In this first stage, the student rigidly follows the teachings of the master. The aim is to reproduce precisely the technique without worrying about the underlying theory. It is important not to mix styles or variants of the art at this point. This is the stage in which you establish the foundations for the rest of the apprenticeship.</p>
<p>Those of us who have practised a martial art will remember this first phase where the objective is, on the basis of repetition, correction and perseverance, to be able to perform the movements and techniques correctly.</p>
<p>Ha means separate, liberate, break. Once the technique has been memorized, the student may begin to question &#8220;why?&#8221;. In this phase, the student begins to understand the theoretical principles of the technique and starts to learn variants of the art from other masters. All this is integrated into the student&#8217;s knowledge and practice of the martial art.</p>
<p>Ri means to go further on, to transcend. In this stage, the student no longer is one since he doesn&#8217;t learn except for his own technique. The art becomes personal and he explores new focuses and variations on the techniques adapted to the circumstances.</p>
<p><a href="http://alistair.cockburn.us/">Alistair Cockburn</a> (signatory of the <a href="http://agilemanifesto.org/">Agile Manifesto</a> and creator of the <a href="http://www.c2.com/cgi/wiki?CrystalClearMethodology">Crystal Clear methodology</a>), in his book <a href="http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751"><em>Agile Software Development</em></a>, introduces the concept of Shu Ha Ri to explain the learning of software development techniques and methodologies. For Cockburn, the agile methodologies with a name (Extreme Programming, Scrum, Crystal Clear) give a starting point, at level Shu as well as level Ha, so that each development team can reach their own Ri. Understanding that the best methodology is not to follow a methodology and that a successful development process is one that <a href="http://www.c2.com/cgi/wiki?NoProcess">is not established</a>.</p>
<p>At Tractis we understand this well. This is why we <a href="http://www.c2.com/cgi/wiki?WhatIsRefactoring">refactor</a> continually &#8211; not just the code but also the methodology, the process, the manner in which we organise ourselves.</p>
<p>In many aspects, we&#8217;re probably at level Shu. <a href="http://blog.negonation.com/en/reflections-about-the-development-after-the-launch-of-tractis-beta/">We&#8217;ve chosen to be agile</a> and <a href="http://blog.negonation.com/en/tractis-and-ruby-on-rails/">chosen Rails</a> as means of reaching our ambitious objectives. Therefore we are trying to learn, apply and memorize the agile techniques (TDD, Refactoring, Continuous Integration etc.) and the <a href="http://www.therailsway.com/">&#8220;Rails way&#8221;</a>, following our &#8216;masters&#8217;.</p>
<p>This is going to require dedication and sweat, without doubt, but we need to do things very well at this stage because the challenges that confront us are going to take us in new directions. We&#8217;re constructing software in the post-agile, post-web2.0 era and we&#8217;ll only succeed if we have solid foundations.</p>
<p>And this is what we&#8217;re trying to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/shu-ha-ri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The first Spanish Rails Conference sets a high standard</title>
		<link>http://blog.negonation.com/en/the-first-rails-conference-hispana-sets-a-high-standard/</link>
		<comments>http://blog.negonation.com/en/the-first-rails-conference-hispana-sets-a-high-standard/#comments</comments>
		<pubDate>Sat, 09 Dec 2006 13:35:25 +0000</pubDate>
		<dc:creator>David Blanco</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/the-first-rails-conference-hispana-sets-a-high-standard/</guid>
		<description><![CDATA[Last weekend we attended the first Spanish Rails Conference (called Conferencia Rails Hispana 2006) in Madrid. It was absolutely full, with high quality presentations and, most importantly, a very good atmosphere. The conference was the perfect excuse for us all to meet up: David Calavera, Vidal Carro, Luismi Cavallé. Various collaborators that we&#8217;d never seen [...]]]></description>
			<content:encoded><![CDATA[<p>Last weekend we attended the first Spanish Rails Conference (called Conferencia Rails Hispana 2006) in Madrid. <a target="_blank" href="http://www.flickr.com/photos/albertofortes/309333778/">It was</a> <a target="_blank" href="http://www.flickr.com/photos/albertofortes/309335858/">absolutely</a> <a target="_blank" href="http://www.flickr.com/photos/jsierles/305836041/">full</a>, with high quality presentations and, most importantly, a very good atmosphere.</p>
<p><a target="_blank" href="http://www.flickr.com/photos/agustinjv/306031248/"><img id="image161" alt="Choosing which conferences to attend...." title="Decidiendo a que conferencias asistir. A todas no se puede...." src="http://blog.negonation.com/es/wp-content/uploads/2006/12/conferencia-rails-2006.jpg" /></a></p>
<p>The conference was the perfect excuse for us all to meet up: <a target="_blank" href="http://www.lacoctelera.com/verbosemode">David Calavera</a>, Vidal Carro, <a target="_blank" href="http://blog.lmcavalle.com/">Luismi Cavallé</a>. Various collaborators that we&#8217;d never seen in person. On Saturday night (25th) we went out for tapas in La Latina together with <a target="_blank" href="http://norellana.orelworks.com/">some habitual reader of this blog</a> <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . It was great to be together and put a face to many people that we only knew from e-mail, chats and phone/skype conversations. Various negonators participated as speakers and you can download their presentations here:</p>
<ul>
<li><a target="_blank" href="http://www.sobrerailes.com/articles/2006/11/27/be-json-my-friend#trackbacks">Juan Lupión</a>, <a target="_blank" href="http://blog.negonation.com/es/wp-content/uploads/2006/12/computacion-distribuida-sobre-ruby-on-rails-j-lupion-y-jj-merelo-conferencia-rails-hispana-2006.pdf">Distributed Computing in Ruby on Rails</a></li>
<li>Juanse Pérez Herrero, <a target="_blank" href="http://blog.negonation.com/es/wp-content/uploads/2006/12/internacionalizacion-rails-y-gettext-juanse-perez-conferencia-rais-hispana-2006.pdf">Internationalization, Rails y Gettext</a></li>
<li>Juanjo Bazán, <a target="_blank" href="http://blog.negonation.com/es/wp-content/uploads/2006/12/rails-para-programadores-java-j-bazan-conferencia-rails-hispana-2006.pdf">Rails for Java Programmers</a></li>
<li>Manolo Santos, <a target="_blank" href="http://blog.negonation.com/es/wp-content/uploads/2006/12/desarrollo-de-la-plataforma-de-negociacion-online-tractis-manuel-santos-conferencia-rails-hispana-2006.pdf">Design of the Tractis online negotiation platform</a></li>
</ul>
<p>Ernesto Jímenez, veteran negonator, couldn&#8217;t attend because he&#8217;s studying the final year of his degree in Helsinki. But that didn&#8217;t stop him. Not content with winning the <a href="http://blog.negonation.com/en/negonation-update-19-august-2006/">speed programming contest at the campus party</a> this year, he also signed up for the speed programming contest at the conference&#8230;.and won again. The result: <a target="_blank" href="http://conferenciarails.justcodeit.net/account/login">Battleships in RoR</a> (<a target="_blank" href="http://www.justcodeit.net/conferenciarails/">coded under the GPL license</a>), 48 hours without sleep and the prize of a beautiful 80Gb iPod <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Negonation apart, the presentations on <a target="_blank" href="http://www.flickr.com/photos/maguisso/307554356/">XML support in Rails</a> (by Javier Rámirez of <a target="_blank" href="http://www.aspgems.com/">ASPgems</a>), <a target="_blank" href="http://www.furilo.com/archivos/presentacion-de-lacocteleracom-y-the-shaker-en-la-conferencia-rails-hispana-2006/">Systems Administration in La Coctelera and The Shaker</a> (by <a target="_blank" href="http://www.lacoctelera.com/nando">Fernando García Samblas</a> and <a target="_blank" href="http://www.furilo.com/">Alvaro Ortíz</a> of <a target="_blank" href="http://www.lacoctelera.com/">La Coctelera</a>) and <a target="_blank" href="http://21croissants.blogspot.com/2006/11/talk-railsconf-madrid-25112006-i-will.html">Testing in Ruby on Rails</a> by Jean-Michel Garnier were very very good. We&#8217;ve talked for some time about Tests on the mailing lists and the presentation by Jean-Michel (the lower photo) in the end convinced us of the need to incorporate them into our development.</p>
<p><a target="_blank" href="http://www.flickr.com/photos/svet/306543159/"><img id="image163" alt="Jean-Michel Garnier durante su ponencia sobre Testing" title="Jean-Michel Garnier durante su ponencia sobre Testing" src="http://blog.negonation.com/es/wp-content/uploads/2006/12/testing.png" /></a></p>
<p>Unreserved congratulations to those who worked to make this event a reality. We should do it again.</p>
<h3>One more thing&#8230;: Launch of Project FIT</h3>
<p>We&#8217;ve saved the best &#8217;till last. As announced by Juanse Pérez at the end of the internationalisation presentation, <strong>we want to start a new project that overcomes the problems currently faced when translating web applications</strong>. The translators complain that they need to learn unusable and different applications for each client. The designers want to eliminate the complex management of the translated files and automate the process as much as possible. David Heinemeier Hansson, creator of Rails, <a target="_blank" href="http://www.flickr.com/photos/xuanxu/307644030/">afirmed during the videoconference</a> on the Saturday that &#8216;Internationalisation&#8217; means different things for different people and, therefore he sees the solution as a plugin and not a core part of Rails.  This is the right moment. We invite you to participate in a new project: <strong>FIT or &#8220;Found in Translation&#8221;</strong>, an open source tool that makes life easy for the designers of international applications and enables translation companies, vendors/integrators of software and start-ups/clients to standardize. We now have a mailing list (<a target="_blank" href="http://groups-beta.google.com/group/fit_project">fit_project@googlegroups.com</a>). <strong><a target="_blank" href="http://groups-beta.google.com/group/fit_project/subscribe?hl=en">Do we need anything else?</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/the-first-rails-conference-hispana-sets-a-high-standard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The final program of the Spanish Rails Conference 2006 is finally available</title>
		<link>http://blog.negonation.com/en/the-final-program-of-the-spanish-rails-conference-2006-is-finally-available/</link>
		<comments>http://blog.negonation.com/en/the-final-program-of-the-spanish-rails-conference-2006-is-finally-available/#comments</comments>
		<pubDate>Sun, 05 Nov 2006 14:52:36 +0000</pubDate>
		<dc:creator>David Blanco</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.negonation.com/en/the-final-program-of-the-spanish-rails-conference-2006-is-finally-available/</guid>
		<description><![CDATA[The first Spanish Rails Conference will be held in Madrid on 24 and 25 of November. The final program (24th &#038; 25th) was announced today. The conference&#8217;s star will obviously be &#8220;Ruby on Rails&#8221;: the sum of the &#8220;Ruby&#8221; language and the &#8220;Rails&#8221; web development framework. A combination that is literally revolutionizing the programming world. [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" rel="”tag”" href="http://www.conferenciarails.org/conferenciarails2006"><img align="right" title="Conferencia Rails Hispana 2006" id="image150" alt="Conferencia Rails Hispana 2006" src="http://blog.negonation.com/es/wp-content/uploads/2006/11/badge_source_rails_03.gif" /></a>The <a target="_blank" href="http://www.conferenciarails.org">first Spanish Rails Conference</a> will be held in Madrid on 24 and 25 of November. The <strong><a target="_blank" href="http://conferenciarails.org/2006/11/5/programa-de-la-conferencia">final program</a> (<a target="_blank" href="http://programa.conferenciarails.org/viernes-24-de-noviembre.php">24th</a> &#038; <a target="_blank" href="http://programa.conferenciarails.org/sabado-25-de-noviembre.php">25th</a>)</strong> was announced today. The conference&#8217;s star will obviously be &#8220;Ruby on Rails&#8221;: the sum of the &#8220;<a target="_blank" href="http://www.ruby-lang.org/">Ruby</a>&#8221; language and the &#8220;<a target="_blank" href="http://www.rubyonrails.org/">Rails</a>&#8221; web development framework. A combination that is literally revolutionizing the programming world. The conference is a unique opportunity to share experiences, meet some of the best Spanish-speaking web developers and learn about real experiences using Rails.<br />
At Negonation, <a target="_blank" href="http://www.minid.net/2006/07/04/%C2%BFte-interesa-conocer-y-aprender-ruby-on-rails/#comment-50407">we use Rails to develop Tractis</a>. Several <em>negonators</em> will participate as speakers on subjects related or not related to Tractis but always with Rails as the leitmotiv:</p>
<ul>
<li><strong>Juanse Pérez</strong> (tractis-translation) will explain about the available tools and the state of the internationalization art in Rails. I highly recommend this if you are developing a web site in Rails that has to be available in various languages. Installation and configuration of Ruby-gettext, i18n, Pootle and several subjects to consider.</li>
<li><strong>Juanjo Bazán</strong> (tractis-setting) will help Java programmers who are interested in, or starting with, Rails. A crash course on the main differences in classes, methods, namespaces, etc. and the &#8220;Ruby way&#8221; on programming.</li>
<li><strong><a target="_blank" href="http://www.sobrerailes.com/">Juan Lupión</a></strong> (tractis-people) will present a <a target="_blank" href="http://atalaya.blogalia.com/historias/43101">project together with JJ Merelo</a>: a distributed processing architecture (ala seti@home) using a Rails application as the server. To prove the concept, they will describe how to implement and resolve a genetic algorithm.</li>
<li><strong>Manuel Santos</strong> (tractis-core) will talk about his experience in the development of <a target="_blank" href="http://www.tractis.com">Tractis</a>. Architecture, components, platforms (SVN, Trac), deployment (Capistrano) and development decisions in the real world and with a distributed programmers&#8217; group.<strong> </strong></li>
</ul>
<p><strong>All the speeches, round tables and activities look good</strong>. There will be several contests and an install party where you will be helped to configure your equipment for working with Rails. <a target="_blank" href="http://www.loudthinking.com">David Heinemeier Hansson</a>, creator of Ruby on Rails, is expected to participate by videoconference. Tickets cost €60 (€30 for students and €0 for active Negonation collaborators <img src='http://blog.negonation.com/en/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) and they include food, coffee and a commemorating T-shirt, as well as discounts for <a target="_blank" href="http://www.conferenciarails.org/2006/11/1/ventajas-de-asistir-a-la-conferencia">book purchases</a> and <a target="_blank" href="http://www.conferenciarails.org/2006/10/22/dreamhost">hosting</a>. The Rails introductory presentations are free. It&#8217;s an event <a target="_blank" href="http://www.conferenciarails.org/2006/10/25/la-filosof-a-de-la-conferencia-rails">by and for the community</a>. Nobody obtains a profit. For those who can&#8217;t attend and for Spanish-speakers from the other side of the pond, all the event&#8217;s conferences are in the evening and will be streamed.</p>
<p><a target="_blank" href="http://registro.conferenciarails.org/">Don&#8217;t miss it</a>. In the meantime, <a title="Ruby on Rails CheatSheets just added!" href="http://blog.negonation.com/es/getting-started-with-ruby-on-rails/">to take the edge off your appetite&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.negonation.com/en/the-final-program-of-the-spanish-rails-conference-2006-is-finally-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

