<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Dovadi - Home</title>
  <id>tag:dovadi.com,2010:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  <link href="http://dovadi.com/feed/rss.xml" rel="self" type="application/atom+xml"/>
  <link href="http://dovadi.com/" rel="alternate" type="text/html"/>
  <updated>2010-05-25T13:15:20Z</updated>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2010-05-25:115</id>
    <published>2010-05-25T13:06:00Z</published>
    <updated>2010-05-25T13:15:20Z</updated>
    <category term="rubycoop"/>
    <link href="http://dovadi.com/2010/5/25/proposal-for-a-formal-commercial-co-operative" rel="alternate" type="text/html"/>
    <title>Proposal for a formal (commercial) co-operative</title>
<content type="html">
            &lt;p&gt;So you're an independent Ruby developer with all the &lt;em&gt;benefits&lt;/em&gt; you can think of. &lt;/p&gt;

&lt;p&gt;With a lot of &lt;strong&gt;freedom&lt;/strong&gt;. You work from home, you choose your own assignments, no adjustment to a corporate culture, no managers to deal with etc. &lt;/p&gt;

&lt;p&gt;But what about the &lt;strong&gt;downsides&lt;/strong&gt;? No feedback on your work (from which you can learn), not a lot of interaction with other programmers, not easy to consult a colleague on technical or other matters and sometimes the workload is too much or too little.&lt;/p&gt;

&lt;p&gt;So that leads me to the question: is there a form of working together without losing the valued benefits of an independent developer.  Somehow it must be possible to work together on a commercial basis as individual developers more or less the same way we contribute to an Open Source project.&lt;/p&gt;

&lt;p&gt;Living in a community (on an island) where we have a lot of benefit of existing co-operatives (for &lt;a href=&quot;https://teso.nl/index.php?option=com_content&amp;amp;amp;view=article&amp;amp;amp;id=102&amp;amp;amp;Itemid=69&amp;amp;amp;lang=en&quot;&gt;transport by ferry&lt;/a&gt; and the &lt;a href=&quot;http://texelenergie.nl/&quot;&gt;delivery of energy&lt;/a&gt;), I of course thought of a formal co-operative as an organization form for working as an collective.&lt;/p&gt;

&lt;h2&gt;Benefits:&lt;/h2&gt;

&lt;blockquote&gt;
    &lt;ul&gt;
    &lt;li&gt;Acquisition as a collective.&lt;/li&gt;
    &lt;li&gt;More flexible in workload. No more running or standing still. A more even distribution of the workload.&lt;/li&gt;
    &lt;li&gt;Higher occupation on average.&lt;/li&gt;
    &lt;li&gt;Share knowledge and practical experience.&lt;/li&gt;
    &lt;li&gt;Learn by working together on the same project.&lt;/li&gt;
    &lt;li&gt;More change to do what you do best (specialties).&lt;/li&gt;
    &lt;li&gt;More change to make some money as a part time ruby developer.&lt;/li&gt;
    &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The co-op will also offer the customer more continuity. A customer will value the lower dependence on a single developer or a small company.&lt;/p&gt;

&lt;h2&gt;Release early, release often:&lt;/h2&gt;

&lt;p&gt;With this proposal I like to research the possibility of working together in a formal co-operative. Of course I don't have all the answers (yet), but I'm hoping that we can together answer a lot of them.&lt;/p&gt;

&lt;p&gt;Let me know what &lt;strong&gt;you&lt;/strong&gt; think. I made a first draft of a proposal on Github with the following subjects:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;ul&gt;
    &lt;li&gt;Definitions&lt;/li&gt;
    &lt;li&gt;Objectives&lt;/li&gt;
    &lt;li&gt;Rights&lt;/li&gt;
    &lt;li&gt;Responsibilities&lt;/li&gt;
    &lt;li&gt;Obligations&lt;/li&gt;
    &lt;li&gt;Financials&lt;/li&gt;
    &lt;li&gt;Board&lt;/li&gt;
    &lt;li&gt;Workflow&lt;/li&gt;
    &lt;li&gt;Examples&lt;/li&gt;
    &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I like to invite you to &lt;strong&gt;join this discussion&lt;/strong&gt; and &lt;strong&gt;make your contribution&lt;/strong&gt; by &lt;a href=&quot;http://github.com/dovadi/rubycoop&quot;&gt;forking&lt;/a&gt; and submitting your patches!&lt;/p&gt;

&lt;h2&gt;See also:&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://rubycoop.org&quot;&gt;Rubycoop.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/dovadi/rubycoop&quot;&gt;Github&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://twitter.com/rubycoop_org&quot;&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.google.nl/group/ruby-co-op&quot;&gt;Google group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://rubycoop.talkerapp.com/r/4f39e9&quot;&gt;Talker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dovadi.lighthouseapp.com/projects/53142-ruby-co-op/overview&quot;&gt;Lighthouse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>dovadi</name>
    </author>
    <id>tag:dovadi.com,2010-05-22:114</id>
    <published>2010-05-22T12:05:00Z</published>
    <updated>2010-05-22T12:08:08Z</updated>
    <category term="CoWorking"/>
    <category term="coworking"/>
    <category term="office"/>
    <category term="pair-programming"/>
    <link href="http://dovadi.com/2010/5/22/cowork-location-on-texel" rel="alternate" type="text/html"/>
    <title>CoWork location on Texel</title>
<content type="html">
            &lt;p&gt;Combine your work with &lt;a href=&quot;http://www.texel.net/nl/over-texel/natuur/&quot;&gt;nature&lt;/a&gt; on &lt;a href=&quot;http://www.texel.net/nl/over-texel/&quot;&gt;Texel&lt;/a&gt;. Balance your work and personal life! This is the change to do your regular work and to combine it with a holiday feeling.&lt;/p&gt;


	&lt;p&gt;Go out for a few days or a week with your partner/husband/wife (and/or your kids). During the day you can use a work spot with Internet access and enjoy the beauty of the Island.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://maps.google.nl/maps?f=q&amp;amp;#38;source=s_q&amp;amp;#38;gl=nl&amp;amp;#38;hl=nl&amp;amp;#38;g=Texel&amp;amp;#38;q=achterom+4,+den+burg&amp;amp;#38;ie=UTF8&amp;amp;#38;hq=&amp;amp;#38;hnear=Achterom+4,+1791+Den+Burg,+Texel,+Noord-Holland&amp;amp;#38;ll=53.046889,4.793816&amp;amp;#38;spn=0.095353,0.264187&amp;amp;#38;t=h&amp;amp;#38;z=13&quot;&gt;&lt;img src=&quot;http://dovadi.com/assets/2010/5/22/achterom_4_google_maps.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2010/5/22/desk_orange_wall.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2010/5/22/desk_da_vinci.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2010/5/22/office_den_burg.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;In return it would be nice to do a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pair_programming&quot;&gt;pair programming&lt;/a&gt; session (if you do &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; and/or &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt;). Contact me via frank-at-dovadi.com or 06-49416406 if you&#8217;re interested.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2009-08-21:111</id>
    <published>2009-08-21T14:04:00Z</published>
    <updated>2009-09-08T10:45:43Z</updated>
    <category term="gem"/>
    <category term="rails"/>
    <link href="http://dovadi.com/2009/8/21/gem-released-has_attributes_from" rel="alternate" type="text/html"/>
    <title>Gem released: has_attributes_from</title>
<content type="html">
            &lt;p&gt;My first little gem &lt;a href=&quot;http://github.com/dovadi/has_attributes_from/tree/master&quot;&gt;has_attributes_from&lt;/a&gt; for merging attributes from one ActiveRecord Class to another individual &lt;span class=&quot;caps&quot;&gt;STI&lt;/span&gt; subclass.&lt;/p&gt;


	&lt;p&gt;So why, do we want to do that, you might ask? Well, I was working on a rails project where clients take care of the administration (planning and billing) for child daycare centres. In this project I have all kinds of people objects, like a child, a contactperson, a father, mother, caretaker etc. etc. So, the ideal casus for a Single Table Inheritance implementation. So I implemented a &#8216;classic&#8217; Person Class as follows:&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
  create_table :people, :force =&amp;gt; true do |t|
    t.string   :firstname
    t.string   :lastname
    t.string   :initials
    t.string   :type
    t.string   :social_security_number
    t.string   :gender
    t.datetime :date_of_birth
  end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;However, I like to add certain extra attributes  to a Child, like for example its nickname and information about its allergies. So I introduce another class which I call ChildDetail. Of course I can add these attributes to the people table as well, but in this project I had several more fields to add and some other attributes for a father., which would lead to a lot of columns for only two subclasses (of the five in total).&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
create_table :child_details, :force =&amp;gt; true do |t|
    t.string   :nickname
    t.string   :vaccination
    t.string   :allergy
    t.integer  :child_id #belongs_to relationship with Child
end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Ok, now I can access the extra attributes&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
class Person &amp;lt; ActiveRecord::Base
end
class Child &amp;lt; Person
  has_one :child_detail
end
class ChildDetail &amp;lt; ActiveRecord::Base
  belongs_to :child
end

child = Child.first
=&amp;gt;#&amp;lt;Child id: 2, firstname: &quot;William&quot;, lastname: &quot;Oxener&quot;, type: &quot;Child&quot;, social_security_number: &quot;123456789&quot;, gender: &quot;m&quot;, date_of_birth: &quot;2005-12-02 00:00:00&quot;&amp;gt;
puts child.child_detail.nickname
=&amp;gt;&quot;Bill&quot; 
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This is not really the way I want it, I like to ask directly for the nickname of a child without going through a child_detail. So to solve this &#8216;problem&#8217; I wrote the has_attributes_from gem. Add the following line to your environment.rb file&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
config.gem 'dovadi-has_attributes_from', :lib =&amp;gt; 'has_attributes_from', :version =&amp;gt; '&amp;gt;=0.1.1', :source =&amp;gt; 'http://gems.github.com'
&lt;/code&gt;&lt;/pre&gt;

Install and unpack this gem to your vendor directory or install as a plugin
&lt;pre&gt;
./script/plugin install git://github.com/dovadi/has_attributes_from.git
&lt;/pre&gt;

	&lt;p&gt;Now we can do the following:&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
class Person &amp;lt; ActiveRecord::Base
end
class Child &amp;lt; Person
  has_attributes_from :child_detail
  validates_presence_of :nickname
end
class ChildDetail &amp;lt; ActiveRecord::Base
end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;With &lt;a href=&quot;http://github.com/dovadi/has_attributes_from/tree/master&quot;&gt;has_attributes_from&lt;/a&gt; the attributes from ChidDetail are merged with Child. A child object acts as one single object and I can even do validation on nickname directly (or the other attributes from ChildDetail).&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
child = Child.first
=&amp;gt;#&amp;lt;Child id: 2, firstname: &quot;William&quot;, lastname: &quot;Oxener&quot;, type: &quot;Child&quot;, social_security_number: &quot;123456789&quot;, gender: &quot;m&quot;, date_of_birth: &quot;2005-12-02 00:00:00&quot;&amp;gt;
puts child.nickname
=&amp;gt;&quot;Bill&quot; 
child.update_attributes(:nickname=&amp;gt;nil)
=&amp;gt;false
child.errors.full_messages
=&amp;gt; [&quot;Nickname must be present&quot;]
child.nickname=&quot;Daam&quot; 
=&amp;gt;&quot;Daam&quot; 
child.save
=&amp;gt;true
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I think this is much nicer, besides it was fun to make and a good exercise to put some Ruby meta programming into practice.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2009-06-29:110</id>
    <published>2009-06-29T09:15:00Z</published>
    <updated>2009-06-29T09:16:54Z</updated>
    <category term="didacto"/>
    <category term="fablab"/>
    <link href="http://dovadi.com/2009/6/29/short-update-studio-didacto" rel="alternate" type="text/html"/>
    <title>Short update: Studio Didacto</title>
<content type="html">
            &lt;p&gt;A short update on my preparations for the so called &lt;strong&gt;Off The Beaten Track Fablab&lt;/strong&gt;. Although I need more time to work the details out, the idea is to go back to an older (!) and proven concept of me, which I called &lt;strong&gt;Studio Didacto&lt;/strong&gt; and started when I was employed by Atos Origin.&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2009/6/29/studio_didacto_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;The core of Studio Didacto is to create (a) space and time for learning and experimenting with new technologies, but in the context of an assignment or a challenge from a real customer. With my former employer &lt;strong&gt;Studio Didcato&lt;/strong&gt; was especially meant for people in between two assignments. Now the idea is to use the same concept for interns or trainees with the starting point (or constraint) of &lt;strong&gt;sustainable&lt;/strong&gt; software development with &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;So I&#8217;m planning to introduce a new service called (again) &lt;strong&gt;Studio Didacto&lt;/strong&gt; which is meant for customers to help in prototyping, the first iterations of a software project and/or a transition to &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt;. 
At the same time &lt;strong&gt;Studio Didacto&lt;/strong&gt; will &lt;strong&gt;also&lt;/strong&gt; partly sponsor one likewise project but in the context of a Fablab. Such a project will be staffed by interns (and/or other volunteers), but will have a broader scope then only software development and (given the local (and of course global) challenges) will need to contribute to a more &lt;strong&gt;sustainable&lt;/strong&gt; live style. Finally a project in this &lt;strong&gt;Studio Didacto&lt;/strong&gt;/&lt;strong&gt;Off The Beaten Track Fablab&lt;/strong&gt; will always be Open Source (off course)!&lt;/p&gt;


	&lt;p&gt;I think it will not be easy to get this off the ground, but I feel it has a lot of potential and for me most of my beliefs, ideals and qualities come together in a beautiful way &#8230;....&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2009-06-10:109</id>
    <published>2009-06-10T19:40:00Z</published>
    <updated>2009-06-10T19:40:53Z</updated>
    <category term="fablab"/>
    <category term="texel"/>
    <link href="http://dovadi.com/2009/6/10/clear-economic-value" rel="alternate" type="text/html"/>
    <title>Clear economic value....</title>
<content type="html">
            &lt;p&gt;For those who are interested in my efforts to establish a &lt;a href=&quot;http://fablabtexel.nl&quot;&gt;FabLab&lt;/a&gt; on the island &lt;a href=&quot;http://maps.google.nl/maps?f=q&amp;amp;#38;source=s_q&amp;amp;#38;hl=nl&amp;amp;#38;geocode=&amp;amp;#38;q=texel&amp;amp;#38;sll=52.964757,4.776843&amp;amp;#38;sspn=0.007108,0.019033&amp;amp;#38;ie=UTF8&amp;amp;#38;ll=53.077056,4.831893&amp;amp;#38;spn=0.226872,0.609055&amp;amp;#38;t=h&amp;amp;#38;z=11&quot;&gt;Texel&lt;/a&gt; I like to point to another &lt;a href=&quot;http://fablabtexel.nl/2009/6/10/economische-waarde&quot;&gt;Dutch post on the FabLab blog&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2009/6/10/logo_texel.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;Stay tuned, because I started preparations for an &lt;strong&gt;Off The Beaten Track FabLab&lt;/strong&gt;!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2009-06-08:108</id>
    <published>2009-06-08T18:21:00Z</published>
    <updated>2009-06-08T18:22:21Z</updated>
    <link href="http://dovadi.com/2009/6/8/some-observations" rel="alternate" type="text/html"/>
    <title>Almost a year, some observations.</title>
<content type="html">
            &lt;p&gt;Some observations and reflections:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;No Dutch &lt;a href=&quot;http://2009.rubyenrails.nl/&quot;&gt;Ruby and Rails conference&lt;/a&gt; this year. Maybe we need something different like a &lt;a href=&quot;http://railscamp08.org/&quot;&gt;RailsCamp&lt;/a&gt;.&lt;/li&gt;
		&lt;li&gt;The last four projects I took on were all existing legacy Rails applications with big technical problems.&lt;/li&gt;
		&lt;li&gt;A lot of innovation last year with &lt;a href=&quot;http://www.modrails.com/&quot;&gt;Passenger&lt;/a&gt; and within &lt;a href=&quot;http://github.com/rails&quot;&gt;Rails&lt;/a&gt; itself,  but &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; and &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber&lt;/a&gt; really increased &#8216;happiness&#8217; in my work.&lt;/li&gt;
		&lt;li&gt;Losing clients is hard, even if the main issue is &#8216;just&#8217; money, but you have to draw a line at some point.&lt;/li&gt;
		&lt;li&gt;Winning clients is not easy, some of the proposed contracts and &lt;a href=&quot;http://en.wikipedia.org/wiki/Non-disclosure_agreement&quot;&gt;&lt;span class=&quot;caps&quot;&gt;NDA&lt;/span&gt;&#8217;s&lt;/a&gt; I&#8217;ve seen were plain silly, but again you have to draw a line &#8230;.&lt;/li&gt;
		&lt;li&gt;I think I must be twice as old as the average age of Ruby On Rails developers.&lt;/li&gt;
		&lt;li&gt;I&#8217;m considering using &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;CouchDB&lt;/a&gt; for my last project.&lt;/li&gt;
		&lt;li&gt;My work in the &lt;a href=&quot;http://www.fablab.nl/&quot;&gt;FabLab&lt;/a&gt; communtiy has been minimal last year, but that will change!&lt;/li&gt;
	&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-06-15:105</id>
    <published>2008-06-15T19:08:00Z</published>
    <updated>2008-06-27T19:01:37Z</updated>
    <category term="obie"/>
    <category term="rubyenrails2008"/>
    <link href="http://dovadi.com/2008/6/15/obie-fernandez-the-worst-code-you-have-ever-seen" rel="alternate" type="text/html"/>
    <title>Obie Fernandez: The Worst Rails Code You've Ever Seen!</title>
<content type="html">
            &lt;div&gt;
&lt;img src=&quot;http://dovadi.com/assets/2008/6/15/by_worst_i_dont_mean_stupid_slice.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt;

	&lt;p&gt;Last Tuesday (10th of June) &lt;a href=&quot;http://obiefernandez.com/&quot;&gt;Obie Fernandez&lt;/a&gt; gave a presentation on the &lt;a href=&quot;http://2008.rubyenrails.nl/&quot;&gt;RubyenRails conference&lt;/a&gt; in Amsterdam about &lt;a href=&quot;http://obiefernandez.com/presentations/obiefernandez-worstrailscode-railsconf2008_slides.pdf&quot;&gt;The Worst Rails Code 
You&#8217;ve Ever Seen&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;To be honest he had some really bad examples, he showed us for example an user controller of 1131 lines (of pure &lt;span class=&quot;caps&quot;&gt;FAIL&lt;/span&gt;)!!&lt;/p&gt;


	&lt;p&gt;But a lot of examples were more in the line of not knowing there is a better alternative in Ruby or a better alternative provided by the Rails framework.&lt;/p&gt;


	&lt;p&gt;Obie came with an example like this:&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
class Util
  def hash_values_as_array(hash)
    values=[]
    for key, value in hash
      values &amp;lt;&amp;lt; value
    end
    return values
  end
end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;em&gt;(Of course, you can do the same with hash.values.)&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;I don&#8217;t think this is bad at all and I even think it happened to almost all of us. Most people working with Ruby On Rails were attracted by the power (and the beauty) of the Rails framework and had never worked with Ruby before (and most of the times had no or little experience with web development like myself). For a newbie it takes time to get used to and to find your way and understand the ins and outs of the language and the framework. And sometimes it is more simple or quicker to come up with your own little method like the example above. In fact, it&#8217;s a great way (or maybe the way) to learn a new language like Ruby.&lt;/p&gt;


	&lt;p&gt;The main point of Obie was that you need to learn the fundamentals, read some books and pair with senior people. All true, but it takes time and it&#8217;s more difficult for someone starting this year with Rails instead of let&#8217;s say 2005.&lt;/p&gt;


	&lt;p&gt;Rails is becoming a &#8216;big&#8217; framework and if you know it really well (and keep up with all the new developments) it can make you really productive. But the learning curve is becoming steeper and steeper &#8230;....&lt;/p&gt;


	&lt;p&gt;If I look at available Rails jobs, everybody seems to look for a &lt;a href=&quot;http://jobs.rubynow.com/jobs/show/2256&quot;&gt;rails ninja&lt;/a&gt;, &lt;a href=&quot;http://jobs.rubynow.com:80/jobs/show/2118&quot;&gt;rock star&lt;/a&gt;, &lt;a href=&quot;http://railswork.com/jobs/224-kick-ass-ruby-programmer-for-start-up&quot;&gt;kick ass developer&lt;/a&gt;, &lt;a href=&quot;http://rubynow.com/jobs/show/2187&quot;&gt;killer rails developer&lt;/a&gt;, &lt;a href=&quot;http://blog.soocial.com/2008/4/10/crazy-rails-hacker&quot;&gt;crazy rails hacker&lt;/a&gt; or even an &lt;a href=&quot;http://blog.soocial.com/2008/4/10/inspiring-ruby-god&quot;&gt;inspiring Ruby god&lt;/a&gt;. I think they are difficult to find.&lt;/p&gt;


	&lt;p&gt;If you want my advise, find a place where they see your learning potential and don&#8217;t mind that you make mistakes like the ones Obie is talking about. It is all about learning by doing (and making mistakes along the way).&lt;/p&gt;


	&lt;p&gt;One more thing, Obie wrote &lt;a href=&quot;http://www.amazon.com/gp/product/0321445619?ie=UTF8&amp;amp;#38;tag=obiefernandez-20&amp;amp;#38;link_code=as3&amp;amp;#38;camp=211189&amp;amp;#38;creative=373489&amp;amp;#38;creativeASIN=0321445619&quot;&gt;The Rails Way&lt;/a&gt;, which is &lt;span class=&quot;caps&quot;&gt;IMHO&lt;/span&gt; the best Rails book at this moment. At the end of his presentation Obie announced he is going to write a Rails Antipatterns book. I think this is not the right approach, please write a &lt;strong&gt;Rails patterns&lt;/strong&gt; book, that is much more positive!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-06-01:96</id>
    <published>2008-06-01T18:59:00Z</published>
    <updated>2008-06-01T19:02:15Z</updated>
    <category term="workshop"/>
    <link href="http://dovadi.com/2008/6/1/workshop-ruby-on-rails" rel="alternate" type="text/html"/>
    <title>Workshop Ruby on Rails and Maglev</title>
<content type="html">
            &lt;p&gt;I was asked to give an introductory workshop in &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; for an insurance company. An intranet application was build in Ruby on Rails for this company and now they want to have the knowledge to maintain the application themselves. So I organized a workshop in two sessions to touch on the basics of Ruby and Rails. And I have to say, it is not easy &#8230;. especially when this application has &lt;a href=&quot;http://wiki.rubyonrails.org/rails/pages/UnderstandingPolymorphicAssociations&quot;&gt;polymorphic&lt;/a&gt; and &lt;a href=&quot;http://wiki.rubyonrails.org/rails/pages/Beginner+Howto+on+has_many+:through&quot;&gt;has_many :through&lt;/a&gt; associations&#8230; :-)&lt;/p&gt;


	&lt;p&gt;I myself started with Ruby on Rails in October 2005 (I had no experience with Ruby at all) and I remember it was straight forward, although it toke me a while to understand (for example) some of the magic of ActiveRecord (made possible by Ruby). But now 2,5 years later we have Rails 2.1 (since &lt;a href=&quot;http://weblog.rubyonrails.com/2008/6/1/rails-2-1-time-zones-dirty-caching-gem-dependencies-caching-etc&quot;&gt;yesterday&lt;/a&gt;!) and it has a lot of new concepts and extra features and therefore I think it is a lot harder to get started. My preparation for this workshop made me realise that now it will take more time to really get acquainted with the full potential of Rails.&lt;/p&gt;


	&lt;p&gt;And to be honest, working every day with Rails, it still is a challenge to keep up-to-date with the new features in Rails (which seems to be added almost &#8216;every&#8217; day) and all the new developments and innovation in the Ruby and Rails community. The day before yesterday I had never heard of &lt;a href=&quot;http://ruby.gemstone.com/&quot;&gt;Maglev&lt;/a&gt; or &lt;a href=&quot;http://code.google.com/p/mongrel-esi/&quot;&gt;Mongrel-esi&lt;/a&gt;.....&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-05-09:77</id>
    <published>2008-05-09T15:05:00Z</published>
    <updated>2008-05-09T15:07:17Z</updated>
    <category term="nginx"/>
    <link href="http://dovadi.com/2008/5/9/global-include-for-nginx-with-a-wildcard" rel="alternate" type="text/html"/>
    <title>Global include for Nginx with a wildcard.</title>
<content type="html">
            &lt;p&gt;We use &lt;a href=&quot;http://wiki.codemongers.com/Main&quot;&gt;Nginx&lt;/a&gt; as our webserver and loadbalancer with several different rails applications and we&#8217;re very satisfied with it. I thought let&#8217;s share the way we set up de nginx config file, because so far I haven&#8217;t read it elsewere.&lt;/p&gt;


	&lt;p&gt;In the global config file of nginx we use includes with wildcards, for example:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
    include /u/apps/*/current/config/nginx.conf;
    include /u/apps/*/config/nginx.conf;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;So now we only have to take care of the individual settings of an rails application for configuring its virtual domain(s), rewrite rules and etcetera in its own &#8216;local&#8217; nginx.conf file in the rails/config directory (which is of course under version control).&lt;/p&gt;


	&lt;p&gt;When you want to start a new application after deployment, first test the configuration settings of nginx as follows:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  cd /usr/local/nginx
  sudo ./sbin/nginx -t
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;If everything is ok, you get something like this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
2008/05/09 17:06:10 [info] 19177#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/05/09 17:06:10 [info] 19177#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Restart Nginx (all the local config files will be included as well), start your application and you&#8217;re done.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  sudo /etc/init.d/nginx restart
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Very practical!&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;(Credits to my collegue Matthijs Kadijk.)&lt;/em&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-04-11:73</id>
    <published>2008-04-11T08:07:00Z</published>
    <updated>2008-04-27T19:35:00Z</updated>
    <category term="app"/>
    <category term="engine"/>
    <category term="google"/>
    <link href="http://dovadi.com/2008/4/11/please-add-ruby" rel="alternate" type="text/html"/>
    <title>Please add ruby ....</title>
<content type="html">
            &lt;p&gt;Google recently did a beta launch announcement for their application hosting service called &lt;a href=&quot;http://code.google.com/appengine/docs/whatisgoogleappengine.html&quot;&gt;App Engine&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Currently it only supports &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt;. So following &lt;a href=&quot;http://drnicwilliams.com/&quot;&gt;Dr Nic&#8217;s&lt;/a&gt; advise, I starred &#8220;Add &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; support&#8221; because its fun!&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2008/4/11/add_ruby_support.png&quot; width=&quot;480&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;So go ahead and do the same at &lt;a href=&quot;http://code.google.com/p/googleappengine/issues/list&quot;&gt;code.google.com&lt;/a&gt; !&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-03-20:72</id>
    <published>2008-03-20T13:14:00Z</published>
    <updated>2008-03-20T13:14:58Z</updated>
    <category term="fablab"/>
    <link href="http://dovadi.com/2008/3/20/great-day" rel="alternate" type="text/html"/>
    <title>A great day....</title>
<content type="html">
            &lt;p&gt;Yesterday, we had a great day on our Entrepreneurs conference here on the island of &lt;a href=&quot;http://maps.google.nl/maps?f=q&amp;amp;#38;hl=nl&amp;amp;#38;geocode=&amp;amp;#38;q=texel&amp;amp;#38;ie=UTF8&amp;amp;#38;ll=53.085364,4.781113&amp;amp;#38;spn=0.218581,0.628967&amp;amp;#38;t=h&amp;amp;#38;z=11&quot;&gt;Texel&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2008/3/20/fablab_texel_beurs_19_maart.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;We gave a keynote presentation about the concept &lt;a href=&quot;http://en.wikipedia.org/wiki/Fab_lab&quot;&gt;Fablab&lt;/a&gt;, which went very well.&lt;/p&gt;


	&lt;p&gt;It was nice to have a lot of new contacts with the local community and it gave us new ideas for the next steps in establishing a FabLab on Texel.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-03-14:71</id>
    <published>2008-03-14T13:11:00Z</published>
    <updated>2008-03-14T14:33:44Z</updated>
    <category term="fablab"/>
    <category term="sketchup"/>
    <link href="http://dovadi.com/2008/3/14/google-sketchup-api-with-ruby" rel="alternate" type="text/html"/>
    <title>Google Sketchup with ruby API.</title>
<content type="html">
            &lt;p&gt;Because of our involvement in the Fablab community, we&#8217;re very interested in extending the functionality of &lt;a href=&quot;http://www.sketchup.com/&quot;&gt;Google Sketchup&lt;/a&gt; with the &lt;a href=&quot;http://code.google.com/apis/sketchup/&quot;&gt;Ruby &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/a&gt;. We like to use Sketchup for basic 2.5D snapfit design, for example like &lt;a href=&quot;http://ddf.mit.edu/projects/CABIN/index.html&quot;&gt;this&lt;/a&gt; or &lt;a href=&quot;http://weburbanist.com/2008/01/13/more-creative-furniture-for-cramped-urban-living-20-pieces-of-ingenious-flat-pack-urban-furniture&quot;&gt;this&lt;/a&gt;. For the moment it is a research project to determine the possibilities of the Ruby &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Here&#8217;s an introduction video of SketchUp developer Mark Limber talking about some of the possible ways to extend the software with the Ruby &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;.&lt;/p&gt;


&amp;lt;center&gt;
&amp;lt;object height=&quot;355&quot; width=&quot;425&quot;&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src=&quot;http://www.youtube.com/v/QGvwLQQxuZs&amp;amp;#38;hl=en&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;
&amp;lt;/center&gt;

	&lt;p&gt;An intern for this project is very much welcome&#8230;....&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-03-03:70</id>
    <published>2008-03-03T12:13:00Z</published>
    <updated>2008-04-27T12:40:10Z</updated>
    <category term="bemba"/>
    <category term="rails"/>
    <category term="twitter"/>
    <link href="http://dovadi.com/2008/3/3/the-ampersand-in-twitter4r" rel="alternate" type="text/html"/>
    <title>The ampersand in Twitter4R</title>
<content type="html">
            &lt;p&gt;For &lt;a href=&quot;http://www.bemba.com&quot;&gt;Bemba.com&lt;/a&gt; &lt;a href=&quot;http://bembamedia.com/about-us/&quot;&gt;we&lt;/a&gt; use the &lt;a href=&quot;http://twitter4r.rubyforge.org/&quot;&gt;Twitter4R&lt;/a&gt; gem, which works like a charm.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.bemba.com&quot; class=&quot;img&quot;&gt;&lt;img class=&quot;portfolio&quot; src=&quot;http://dovadi.com/assets/2008/3/3/bemba_home.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;sharing web pages with friends in one click on several social networks at once!&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Except we had some problems when we used the &lt;a href=&quot;http://twitter.com/ampersands&quot;&gt;&#38;&lt;/a&gt; character in our messages.  It turned out that &lt;span class=&quot;caps&quot;&gt;URI&lt;/span&gt;.encode was used for encoding and the text message was chopped off at the &#38; character.
&lt;br /&gt;&lt;br /&gt;
The solution was to use &lt;span class=&quot;caps&quot;&gt;CGI&lt;/span&gt;::escape for encoding in &lt;em&gt;../twitter/lib/twitter/ext/&lt;/em&gt;
&lt;em&gt;stdlib.rb&lt;/em&gt;:&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
class Hash
  # Returns string formatted for HTTP URL encoded name-value pairs.
   def to_http_str
    result = ''
    return result if self.empty?
    self.each do |key, val|
      result &amp;lt;&amp;lt; &quot;#{key}=#{CGI::escape(val.to_s)}&#38;&quot; 
    end
    result.chop 
end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Now it is just a matter of submitting a patch for the gem, but although the specifications are all nicely written with &lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt;, we&#8217;re not able to run the specs.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
no such file to load -- ./../spec_helper (LoadError)
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;What are we doing wrong here&#8230;.where is the spec helper?&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-02-28:67</id>
    <published>2008-02-28T12:58:00Z</published>
    <updated>2008-03-03T11:23:17Z</updated>
    <category term="fablab"/>
    <link href="http://dovadi.com/2008/2/28/kluster" rel="alternate" type="text/html"/>
    <title>Kluster: a new product in 72 hours!</title>
<content type="html">
            &lt;p&gt;Crowdsourcing firm &lt;a href=&quot;http://kluster.com&quot;&gt;Kluster&lt;/a&gt; officially launched yesterday at the &lt;a href=&quot;http://www.ted.com/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TED&lt;/span&gt;&lt;/a&gt; conference with a big &lt;a href=&quot;http://kluster.com/home/ted&quot;&gt;challenge&lt;/a&gt;: &#8220;&lt;em&gt;over the next 72 hours we will harness the collective power of &lt;span class=&quot;caps&quot;&gt;TED&lt;/span&gt; attendees, and our online community to develop a totally new, tangible product.&lt;/em&gt;&#8220;&lt;/p&gt;


&lt;br /&gt;
	&lt;p&gt;&lt;img src=&quot;http://dovadi.com/assets/2008/2/28/kluster_72_hours_400.png&quot; alt=&quot;&quot; /&gt;
&lt;br /&gt;&lt;/p&gt;


	&lt;p&gt;The idea behind Kluster is that a group of passionate people working together can come up with better solutions for any decision-making problem than a single person. Whether that is planning an event, designing a new logo, or creating a new product, Kluster believes their system can work.&lt;/p&gt;


	&lt;p&gt;I find it an interesting concept. Especially because Kluster also introduces it&#8217;s own currency: the watt. I think a sort of Local Exchange Trade system (&lt;a href=&quot;http://en.wikipedia.org/wiki/Local_Exchange_Trading_Systems&quot;&gt;&lt;span class=&quot;caps&quot;&gt;LETS&lt;/span&gt;&lt;/a&gt;) as a catalyst for cooperation and innovation is promising. Is this principle a way forward for the International Fablab community?&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dovadi.com/">
    <author>
      <name>Frank Oxener</name>
    </author>
    <id>tag:dovadi.com,2008-02-28:66</id>
    <published>2008-02-28T12:43:00Z</published>
    <updated>2008-03-14T13:16:07Z</updated>
    <category term="fablab"/>
    <category term="rails"/>
    <link href="http://dovadi.com/2008/2/28/update-of-our-website" rel="alternate" type="text/html"/>
    <title>Update of our website.</title>
<content type="html">
            &lt;p&gt;It was about time to do an update of our website.&lt;/p&gt;


	&lt;p&gt;First, we migrated from &lt;a href=&quot;http://www.typosphere.org/&quot;&gt;Typo&lt;/a&gt; to the more ligther-weight and stable &lt;a href=&quot;http://www.mephistoblog.com/&quot;&gt;Mephisto&lt;/a&gt;. The migration was also the moment to use a more timeless theme (&lt;a href=&quot;http://quotedprintable.com/pages/scribbish&quot;&gt;Scribbish&lt;/a&gt;) and, from now on, to post in English.&lt;/p&gt;


	&lt;p&gt;It also reflects a slight change in our business focus. We&#8217;re still very much dedicated to our &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; and &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; work, but our active involvement in the &lt;a href=&quot;http://www.fablab.nl&quot;&gt;Fablab&lt;/a&gt; community has lead to a repositioning of our services.&lt;/p&gt;


	&lt;p&gt;With the expertise of Ruby, Rails and agile software development and our knowledge of digital and personal fabrication, we think that we&#8217;re better suited for multidisciplinary projects on the edge of open source connected soft- and hardware.&lt;/p&gt;


	&lt;p&gt;We closely follow the trends and developments in that sector and we of course share this on our blog.&lt;/p&gt;


	&lt;p&gt;So stay tuned &#8230;... !!&lt;/p&gt;
          </content>  </entry>
</feed>
