<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2544828409875322943</atom:id><lastBuildDate>Mon, 07 Oct 2024 04:51:57 +0000</lastBuildDate><category>rubyonrails</category><category>rspec</category><category>ubuntu</category><category>conference</category><category>hacks</category><category>mysql</category><category>politic</category><category>subversion</category><category>tests</category><category>agile</category><category>green</category><category>blogger</category><category>linux</category><category>netbeans</category><category>selenium</category><category>sysadmin</category><category>RubyCampLyon</category><category>SQlite</category><category>ajax</category><category>autotest</category><category>database</category><category>hireme</category><category>ide</category><category>lecool</category><category>mac</category><category>plugin</category><category>postgres</category><category>railsconf</category><category>spain</category><title>21 croissants&#39; Blog</title><description></description><link>http://21croissants.blogspot.com/</link><managingEditor>noreply@blogger.com (Jean-Michel)</managingEditor><generator>Blogger</generator><openSearch:totalResults>114</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-3103296910242481055</guid><pubDate>Mon, 17 Aug 2009 13:28:00 +0000</pubDate><atom:updated>2009-08-17T15:54:22.986+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">green</category><category domain="http://www.blogger.com/atom/ns#">mac</category><title>3G Huawei E220 &amp; simyo.de on mac</title><description>Plug the modem and launch the MobileConnect application which is installed inside the E220.&lt;br /&gt;&lt;br /&gt;Create a new profile for simyo.de:&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;http://img.skitch.com/20090817-trbwuudkf34umdstpdpsdupkbg.jpg&quot; src=&quot;http://img.skitch.com/20090817-trbwuudkf34umdstpdpsdupkbg.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;telephone number of &lt;span style=&quot;font-weight: bold;&quot;&gt;*99#&lt;/span&gt;&lt;br /&gt;Access Point Name: internet.eplus.de&lt;br /&gt;IP-Adresse: dynamic&lt;br /&gt;Primary DNS: 212.23.97.2&lt;br /&gt;Secondary DNS: 212.23.97.3&lt;br /&gt;Account name: simyo&lt;br /&gt;password: simyo&lt;br /&gt;&lt;br /&gt;Click &quot;Connect&quot; and you should be online. After I found these configuration data with google, it works the first time. If you have a problem or a suggestion, leave a comment. Remember this config will only work in Germany with simyo.de&lt;br /&gt;&lt;br /&gt;I am now ready to work with Rails on rails ;-) I will be indeed traveling a lot with the ICE, the German high speed train, which might  not be as fast as the French TGV but it is very comfortable and has electric plugs in all the seats.&lt;br /&gt;&lt;br /&gt;In this carbon junky world, I really hope that &lt;a href=&quot;http://cop15.dk/&quot;&gt;Copenhagen 2009&lt;/a&gt; will enforce some regulations on &lt;a href=&quot;http://www.planestupid.com/&quot;&gt;plane transports&lt;/a&gt;. Instead of stupid competition between EU states railways, EU should also learn from the UK Rails privatization disaster. It would be so nice if the next generation of Europeans could travel on high speed rails transports with a public owned, interconnected, affordable and fast European rails network...</description><link>http://21croissants.blogspot.com/2009/08/3g-huawei-e220-simyode-on-mac.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-966972109163465903</guid><pubDate>Tue, 11 Aug 2009 10:20:00 +0000</pubDate><atom:updated>2009-08-12T11:00:21.730+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">subversion</category><title>Upgrade subclipse in Aptana Studio</title><description>At  work, we just upgraded to subversion 1.6.3 from 1.4.x and it took us a 1-2 days to solve configuration issues. In order to make our life easier during merges, we decided to go for Aptana Studio. Unfortunately, at the time of this writing, this IDE is bundled with Subclipse 1.4.&lt;br /&gt;&lt;br /&gt;Follow these manual steps to upgrade to http://subclipse.tigris.org/update_1.6.x&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;1. Remove Aptana Subversion Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to About Apanta Studio &lt;ul&gt;&lt;li&gt; In your Aptana Studio &lt;ul&gt;&lt;li&gt; On Windows, go to &lt;b&gt;Help&lt;/b&gt; and select &lt;b&gt;About Aptana Studio&lt;/b&gt; &lt;/li&gt;&lt;li&gt; On Mac, go to &lt;b&gt;Aptana Studio&lt;/b&gt; and select &lt;b&gt;About Aptana Studio&lt;/b&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; In you Eclipse &lt;ul&gt;&lt;li&gt; On Windows, go to &lt;b&gt;Help&lt;/b&gt; and select &lt;b&gt;About Eclipse SDK&lt;/b&gt; &lt;/li&gt;&lt;li&gt; On Mac, go to &lt;b&gt;Eclipse&lt;/b&gt; and select &lt;b&gt;About Eclipse SDK&lt;/b&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; Select &quot;Installation Details&quot; &lt;/li&gt;&lt;li&gt; Select the&quot; Installed Software&quot; Tab &lt;/li&gt;&lt;li&gt; Select the plugins you would like to install and click &quot;Uninstall&quot;.&lt;/li&gt;&lt;/ol&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://img.skitch.com/20090811-ms24i9a1tyafp81u9na64gii5t.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 735px; height: 516px;&quot; src=&quot;http://img.skitch.com/20090811-ms24i9a1tyafp81u9na64gii5t.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2. Install subclipse 1.6.x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; From the &lt;b&gt;Help&lt;/b&gt; menu, select &lt;b&gt;Install new Software ...&lt;/b&gt; &lt;/li&gt;&lt;li&gt; Select &lt;b&gt;Available Software&lt;/b&gt;. &lt;/li&gt;&lt;li&gt; Click the &lt;b&gt;Add Site...&lt;/b&gt; button. &lt;/li&gt;&lt;li&gt; In the &lt;b&gt;Location&lt;/b&gt; text box, type http://subclipse.tigris.org/update_1.6.x&lt;/li&gt;&lt;li&gt;Also add mylyn: http://download.eclipse.org/tools/mylyn/update/e3.4&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://img.skitch.com/20090811-ts34mpgtrbh25akc5wi1cpikgi.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 526px; height: 429px;&quot; src=&quot;http://img.skitch.com/20090811-ts34mpgtrbh25akc5wi1cpikgi.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3. Install Aptana RadRails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;http://img.skitch.com/20090811-gswfp5bqm87pkwd76usumrd2et.jpg&quot; src=&quot;http://img.skitch.com/20090811-gswfp5bqm87pkwd76usumrd2et.jpg&quot; /&gt;</description><link>http://21croissants.blogspot.com/2009/08/upgrade-subclipse-in-aptana-studio.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-3436853964086969223</guid><pubDate>Wed, 29 Jul 2009 07:04:00 +0000</pubDate><atom:updated>2009-07-29T09:06:05.519+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mysql</category><title>to_yaml from mysql SELECT tip</title><description>Append \G at the end of a SELECT query .&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;select * from countries limit 5\G;&lt;br /&gt;&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;          id: 4&lt;br /&gt;continent_id: 2&lt;br /&gt;   region_id: 14&lt;br /&gt;   permalink: afghanistan&lt;br /&gt;     name_en: Afghanistan&lt;br /&gt;     name_de: Afghanistan&lt;br /&gt;         lat: 33.9391&lt;br /&gt;         lng: 67.71&lt;br /&gt;   eu_member: 0&lt;br /&gt;      alpha2: NULL&lt;br /&gt;      alpha3: NULL&lt;br /&gt;*************************** 2. row ***************************&lt;br /&gt;          id: 8&lt;br /&gt;continent_id: 3&lt;br /&gt;   region_id: 19&lt;br /&gt;   permalink: albania&lt;br /&gt;     name_en: Albania&lt;br /&gt;     name_de: Albanien&lt;br /&gt;         lat: 41.1533&lt;br /&gt;         lng: 20.1683&lt;br /&gt;   eu_member: 0&lt;br /&gt;      alpha2: NULL&lt;br /&gt;      alpha3: NULL&lt;/blockquote&gt;</description><link>http://21croissants.blogspot.com/2009/07/toyaml-from-mysql-select-tip.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-4875067887859373900</guid><pubDate>Mon, 13 Jul 2009 07:18:00 +0000</pubDate><atom:updated>2009-07-13T16:06:36.444+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>Fixing Bus Error BUG in ruby entreprise edition</title><description>If you  want to use ruby enterprise edition (ree) for your project, it&#39;s very important to install all the dependencies with the ree  gem command, especially if the gems rely on native code such as imagemagick, or ... bluecloth.&lt;br /&gt;&lt;br /&gt;I bumped into the following bug when I tried to run my specs with ree:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ /opt/ruby-enterprise-1.8.6-20090610/bin/ruby spec/models/advocacy_spec.rb&lt;br /&gt;/.gem/ruby/1.8/gems/bluecloth-2.0.0/lib/bluecloth_ext.bundle: &lt;span style=&quot;font-weight: bold;&quot;&gt;[BUG] Bus Error&lt;/span&gt;&lt;br /&gt;ruby 1.8.6 (2008-08-11) [i686-darwin9.7.0]&lt;br /&gt;&lt;br /&gt;Abort trap&lt;/blockquote&gt;&lt;br /&gt;The solution was to install the bluecloth gem again, with reee gem:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;:trunk$ /opt/ruby-enterprise-1.8.6-20090610/bin/gem install bluecloth&lt;br /&gt;WARNING:  Installing to ~/.gem since /opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8 and&lt;br /&gt;     /opt/ruby-enterprise-1.8.6-20090610/bin aren&#39;t both writable.&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt;Successfully installed bluecloth-2.0.4&lt;br /&gt;1 gem installed&lt;br /&gt;Installing ri documentation for bluecloth-2.0.4...&lt;br /&gt;Installing RDoc documentation for bluecloth-2.0.4...&lt;br /&gt;jm-macbook:trunk jeanmichel$ /opt/ruby-enterprise-1.8.6-20090610/bin/ruby spec/models/advocacy_spec.rb&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Finished in 0.349809 seconds&lt;/blockquote&gt;&lt;br /&gt;The recent versions of rubygems use the ~/.gem/ruby/1.8/ folder so it make sense to install gems in your home folder so standard ruby and ree can share them.&lt;br /&gt;&lt;br /&gt;On a sidenote, running the specs with ree worked without any problem. memory consumption was lower but it did not improve the speed.</description><link>http://21croissants.blogspot.com/2009/07/fixing-bus-error-bug-in-ruby-entreprise.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-4517715638163243754</guid><pubDate>Thu, 04 Jun 2009 14:56:00 +0000</pubDate><atom:updated>2009-06-04T17:10:09.287+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><category domain="http://www.blogger.com/atom/ns#">tests</category><title>Before | After</title><description>&lt;h3&gt;Before:&lt;/h3&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;def self.find_expiring_soon(date_time = Time.now)&lt;br /&gt;@@expiring_soon ||= find(:all, :conditions =&gt; [&quot;type_id = 1 AND completed = 0 AND created_at &lt; :date&quot;, { :date =&gt; (4.months + 14.days).ago(date_time) }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_soon_with_donations(date_time = Time.now)&lt;br /&gt;@@expiring_soon_with_donations ||= find(:all, :conditions =&gt; [&quot;type_id = 1 AND completed = 0 AND donated_amount &gt; 0 AND created_at &lt; :date&quot;, { :date =&gt; (4.months + 14.days).ago(date_time) }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_soon_without_donations(date_time = Time.now)&lt;br /&gt;@@expiring_soon_with_donations ||= find(:all, :conditions =&gt; [&quot;type_id = 1 AND completed = 0 AND donated_amount = 0 AND created_at &lt; :date&quot;, { :date =&gt; (4.months + 14.days).ago(date_time) }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_very_soon(date_time = Time.now)&lt;br /&gt;@@expiring_very_soon ||= find(:all, :conditions =&gt; [&quot;type_id = 1 AND completed = 0 AND created_at &lt; :date&quot;, { :date =&gt; (6.months - 3.days).ago(date_time) }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;After:&lt;/h3&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;def self.find_expiring_soon_with_donations&lt;br /&gt;  find(:all,&lt;br /&gt;       :include =&gt; :donations,&lt;br /&gt;       :conditions =&gt; [&lt;br /&gt;         &quot;expires_soon = 0&lt;br /&gt;         #{with_expiring_criterias}&lt;br /&gt;         AND donated_amount &gt; 0&quot;, { :date =&gt; four_months_and_a_half_ago }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_soon_without_donations&lt;br /&gt;  find(:all,&lt;br /&gt;       :conditions =&gt; [&lt;br /&gt;         &quot;expires_soon = 0&lt;br /&gt;          #{with_expiring_criterias}&lt;br /&gt;          AND donated_amount = 0&quot;, { :date =&gt; four_months_and_a_half_ago }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_very_soon&lt;br /&gt;  find(:all,&lt;br /&gt;       :conditions =&gt; [&lt;br /&gt;         &quot;expires_very_soon = 0&lt;br /&gt;          #{with_expiring_criterias}&lt;br /&gt;          &quot;, { :date =&gt; (6.months - 3.days).ago(date_time) }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.find_expiring_now&lt;br /&gt;  find(:all,&lt;br /&gt;       :conditions =&gt; [&lt;br /&gt;         &quot;expired = 0&lt;br /&gt;          #{with_expiring_criterias}&quot;, { :date =&gt; 6.months.ago }])&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.with_expiring_criterias # DRY&lt;br /&gt;  &quot;AND type_id = #{ElementType::MONEY}&lt;br /&gt;   AND completed = 0&lt;br /&gt;   AND activated_at &lt; :date&quot;    end    &lt;br /&gt;&lt;br /&gt;private_class_method :with_expiring_criterias   &lt;br /&gt;&lt;br /&gt;def self.four_months_and_a_half_ago        &lt;br /&gt;  @@FOUR_MONTHS_AND_A_HALF_AGO ||= (6.months - 6.weeks).ago(Time.now)  &lt;br /&gt;end    &lt;br /&gt;&lt;br /&gt;private_class_method :four_months_and_a_half_ago&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Much more lines of code (LOC), does it improve readability and understading?&lt;/li&gt;&lt;li&gt;hardcoded values replaced by objects (ElementType::MONEY), does it make easier to understand the meaning of numbers without knowing the DB model&lt;/li&gt;&lt;li&gt;duplicate SQL DRyed in a private method&lt;/li&gt;&lt;/ul&gt;Which version do you prefer?</description><link>http://21croissants.blogspot.com/2009/06/before-after.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2216142698364322279</guid><pubDate>Thu, 30 Apr 2009 13:06:00 +0000</pubDate><atom:updated>2009-04-30T15:27:21.047+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">sysadmin</category><title>Unix recursive Find and Replace</title><description>&lt;blockquote&gt;find spec ! -regex &quot;.*.svn.*&quot; -type f -exec grep -l &quot;it_should_behave_like&quot; {} \; | xargs sed -i &quot;&quot; &quot;s/it_should_behave_like/#it_should_behave_like/&quot;&lt;/blockquote&gt;&lt;br /&gt;Explanation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;find spec             &lt;span style=&quot;font-style: italic;&quot;&gt;find in ./spec folfer&lt;/span&gt;&lt;/li&gt;&lt;li&gt;! -regex &quot;.*.svn.*&quot;        &lt;span style=&quot;font-style: italic;&quot;&gt;excluding .svn folders&lt;/span&gt;&lt;/li&gt;&lt;li&gt;-type f     &lt;span style=&quot;font-style: italic;&quot;&gt;only files&lt;/span&gt;&lt;/li&gt;&lt;li&gt;-exec grep -l &quot;it_should_behave_like&quot; {} \;    &lt;span style=&quot;font-style: italic;&quot;&gt;extra line to grep only files which contain &quot;it_should_behave_like&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;| xargs sed -i &quot;&quot;      &lt;span style=&quot;font-style: italic;&quot;&gt;pipe to sed editor without creating any backup file (-i)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&quot;s/ENTER OLD STRING OR TEXT TO REPLACE/ENTER REPLACEMENT STRING OR TEXT/&quot;&lt;/li&gt;&lt;/ul&gt;</description><link>http://21croissants.blogspot.com/2009/04/unix-recursive-find-and-replace.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2803511880243241196</guid><pubDate>Wed, 29 Apr 2009 10:13:00 +0000</pubDate><atom:updated>2009-04-29T12:16:18.776+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">subversion</category><title>svn trick: revert a folder when it can not be deleted</title><description>If you ever have this error message when running&lt;br /&gt;svn status&lt;br /&gt;!     C stories&lt;br /&gt;      &gt;   local delete, incoming edit upon update&lt;br /&gt;&lt;br /&gt;=&gt; Clean it with reverting the conflicted folder with:&lt;br /&gt;&lt;blockquote&gt;svn revert stories&lt;/blockquote&gt;</description><link>http://21croissants.blogspot.com/2009/04/svn-trick-revert-folder-when-it-can-not.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-7262012232598616888</guid><pubDate>Wed, 29 Apr 2009 09:37:00 +0000</pubDate><atom:updated>2009-04-29T11:47:22.934+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><category domain="http://www.blogger.com/atom/ns#">sysadmin</category><title>Setting up logrotate with capitate</title><description>How many Rails projects &quot;forget&quot; to set up a log rotation of their production logs and end up filling the hard disk with gigabytes of log ...&lt;br /&gt;&lt;br /&gt;Lots ;-) And mine before I found out about logrotate.&lt;br /&gt;&lt;br /&gt;Fortunately, there is one tool which help you to no to reinvent the wheel and set up a log rotation within minutes: capitate ;-)&lt;br /&gt;&lt;br /&gt;Install it:&lt;br /&gt;&lt;blockquote&gt;sudo gem install capitate &lt;/blockquote&gt;Add the following snippet to your conf/deploy.rb:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# See http://capitate.rubyforge.org&lt;br /&gt;require &#39;capitate&#39; &lt;br /&gt;require &#39;capitate/recipes&#39;&lt;br /&gt;&lt;br /&gt;# Add this line but remove it afterinstalling &#39;cap rails:logrotate:install&#39;&lt;br /&gt;set :use_sudo, true&lt;br /&gt;&lt;/blockquote&gt;Run cap -T to see how many recipes you have now!&lt;br /&gt;&lt;br /&gt;Run &lt;br /&gt;&lt;blockquote&gt;cap logrotated:install_conf&lt;/blockquote&gt;&lt;br /&gt;It should install a new /etc/logrotate.d/rails_yourwebsite.com&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/home/youruser/public_html/yourwebsite.com/shared/log/production.log {&lt;br /&gt;  size 10M&lt;br /&gt;  rotate 7&lt;br /&gt;  daily&lt;br /&gt;  missingok&lt;br /&gt;  notifempty&lt;br /&gt;  copytruncate &lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That&#39;s it!</description><link>http://21croissants.blogspot.com/2009/04/setting-up-logrotate-with-capitate.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-646155872450854655</guid><pubDate>Thu, 26 Mar 2009 17:33:00 +0000</pubDate><atom:updated>2009-03-26T18:42:33.683+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">politic</category><title>Giving and Receiving</title><description>&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Mxxxxx&lt;/span&gt; has left a new comment on your post &quot;xyz&quot;:&lt;br /&gt;&lt;br /&gt;totally useless. If i wanted to read this i would have read the txt file that came with the download.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is the nice comment I just received about a post in my blog.&lt;br /&gt;&lt;br /&gt;Blogging is giving free content to the world, without expecting anything in return ...&lt;br /&gt;If this person was to meet me in person, would (s)he dare telling me the same thing???&lt;br /&gt;&lt;br /&gt;At the end of day, you should never, ever write aggressive text in sms, email, forum, twitter, blog, etc  ... Most of the time, if not always, you end up regretting your acts and only create negative energy.&lt;br /&gt;&lt;br /&gt;We live in a society which is always connected, maybe it&#39;s time to write less emails, send less texts, spend less time on the internet and behave like a nice person in the Real World. Lots of positive energy shalt be the outcome.&lt;br /&gt;&lt;br /&gt;Peace &amp;amp; Love :-)</description><link>http://21croissants.blogspot.com/2009/03/giving-and-receiving.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2759541696314450267</guid><pubDate>Mon, 23 Mar 2009 14:32:00 +0000</pubDate><atom:updated>2009-03-25T16:46:07.181+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">netbeans</category><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>Netbeans usability</title><description>&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;UPDATE:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The netbeans community solved my problem in 24 hours!!! It was a bug due to a problem of deserialization ... Deleting the ~/.netbeans folder solved the problem. Check out &lt;a href=&quot;http://www.netbeans.org/issues/show_bug.cgi?id=161070&quot;&gt;http://www.netbeans.org/issues/show_bug.cgi?id=161070&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;cooking_introduction&gt;&lt;/cooking_introduction&gt;&lt;blockquote&gt;One of thing I enjoy the most in life is cooking. I distrust most of the products processed by the food industry - gm, transfat, the list is too long... - and try to cook with local, raw and organics ingredient (when available at a fair price). The kitchen utensils I use must be of very good quality: the knifes must cut without effort, the pan must not contain carcinogen material, etc... As the whole cooking experience becomes slightly stressful if I have to cook with other utensils, I tend to bring my best knifes with me on holidays ;-)&lt;/blockquote&gt;&lt;br /&gt;To stick with the cooking metaphor, I see the code as the ingredients, the IDE being the kitchen utensils and the working and tested software the resulting meal.&lt;br /&gt;A lot of my productivity and the joy I feel crafting a beautiful software depends on my interaction with an IDE.&lt;br /&gt;&lt;br /&gt;I have been using Netbeans since february 2007, following its long path to become a mature IDE for Ruby on Rails. Most of the time, I have used the latest build, reported some issues and it has been a fun and productive experience.&lt;br /&gt;&lt;br /&gt;However, I am feeling a bit frustrated now, because of some recent changes in the behavior of the Output Window(CTRL+4) . I rely highly on &lt;a href=&quot;http://ph7spot.com/articles/getting_started_with_autotest&quot;&gt;Autospec&lt;/a&gt; to run my unit tests. With Netbeans 6.5, I have the code on one widow and I use an undocked Output window on the right side in order to check out the tests results and open classes in 1 click. This is very handy because Netbeans opens the guilty class in the main window, at the exact location of the guilty line of the backtrace. This makes the whole development cycle &quot;super&quot; productive!&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZdg3eTyXChPA1rUysTeHA_3a7Z5fYzHcneitUfa4agrEiTWNFyTadZtf1RgZLZCMaRxQKQoCeuyk9v2h6eNEpyNQ7mrDkcej7GCxFz92o11FaOLHbZLHM7J39Bm-bu7ocEx6HKhUhJRw/s800/Screenshot.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Since Netbeans latest build 23rd of March 2009 (7.0?), this behavior has changed. It seems that the Output window behaves like any other window. By default, it opens in a normal tab, forcing you to constantly CTRL+TAB to switch between classes and output. If you undock it and you click on a backtrace, it will open it in the same undocked window as the Output!!!&lt;br /&gt;&lt;br /&gt;So unless you move theses windows to the main IDE, there is no way you can compare the tests output and the class itself.  As far as I am concerned, this is a serious usability issue and I&#39;d like to discuss it with other netbeans users and netbeans IDE developers. In the following screenshot, you can see that every time I click on a backtrace, it opens the window in a tab next to the Output window ....&lt;br /&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5voGfef3oZRbM2-cPzu41OwX8Dws06CsdgukayjR5y5T46c2tDNsu4tDet3v5zVjgPT0RTrxoaUslEk4qD0iMv1h6Z-1JI3ioAMXMf5mTyfiuZmAvcO2vTAHR5oShwX7hyjwSFyCeGtM/s800/output.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Please, please rollback the Output Window to its previous behavior!&lt;br /&gt;&lt;br /&gt;A last tip about running autospec. The netbeans Autospec implementation is flawed: output is polluted by zillions of %RSPEC_SUITE_FINISHED% and the constant scroll bar at the bottom is  very distracting. The solution is to run autospec with a simple &quot;Run File&quot; (shit +F6) of the script/autospec. This is much more productive and faster than the RSpec runner built into Netbeans and always works!&lt;br /&gt;&lt;br /&gt;In the future, I&#39;d love to see a feature which would allow us to split the IDE in 3 vertical windows.&lt;br /&gt;If you look at &lt;a href=&quot;http://www.vimeo.com/2987044&quot;&gt;Jon and Sandro on Pair Programming hashrocket video&lt;/a&gt;, you&#39;ll see that they have split their screen in 3: a class, the test class and autotest. Always take inspiration from the best!</description><link>http://21croissants.blogspot.com/2009/03/netbeans-usability.html</link><author>noreply@blogger.com (Jean-Michel)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZdg3eTyXChPA1rUysTeHA_3a7Z5fYzHcneitUfa4agrEiTWNFyTadZtf1RgZLZCMaRxQKQoCeuyk9v2h6eNEpyNQ7mrDkcej7GCxFz92o11FaOLHbZLHM7J39Bm-bu7ocEx6HKhUhJRw/s72-c/Screenshot.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-959900226590925475</guid><pubDate>Tue, 10 Feb 2009 12:22:00 +0000</pubDate><atom:updated>2009-02-12T11:54:42.062+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">green</category><category domain="http://www.blogger.com/atom/ns#">rspec</category><title>The RSpec Book: Never Judge A Book By Its Cover</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://assets2.pragprog.com/images/covers/190x228/betas/achbd.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 190px; height: 228px;&quot; src=&quot;http://assets2.pragprog.com/images/covers/190x228/betas/achbd.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;The RSpec Book is &lt;a href=&quot;http://www.pragprog.com/titles/achbd/the-rspec-book&quot;&gt;out in beta version&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;It&#39;s a long expected book for the BDD Community. The first time I mention this book was at the Paris on Rails 2007 conference. Since then, many changes happened and it seems that API and Practices are mature enough to release a book. As far as I am concerned, the biggest boost was given by Aslak with &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Before adding more love, I&#39;ll write about 2 small caveats. It&#39;s still a bit hard to contribute to the RSpec project as code is a bit complex, I mean compares to bacon or shoulda. The other is the painful upgrading process since version 1.0: no matters what, I always end up spending 2-3 hours to fix my specs or autospec when I update the RSpec gem ...&lt;br /&gt;&lt;br /&gt;Apart from that, RSpec and cucumber are one of the things which make me feeling at home working with Ruby (on Rails). Being able to describe the business rules and features is a big step for the software industry. How many hours lost because of misunderstanding between customers and programmers???&lt;br /&gt;This book is aimed at programmers, my hope is that there will be other books following, targeting the customers (business analyst, project manager, end user). So little by little, we learn how to communicate clearly to each other and build better software ...&lt;br /&gt;&lt;p style=&quot;font-weight: bold;&quot;&gt;Never Judge A Book By Its Cover!&lt;/p&gt;&lt;p&gt;The second part of this post has &lt;span style=&quot;font-weight: bold;&quot;&gt;nothing to do&lt;/span&gt; with technology or the quality of the book. I want to question the choice of an  incandescent bulb to represent a technology as innovative as RSpec.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I have been volunteering for 2 years in an &lt;a href=&quot;http://eco-union.org/&quot;&gt;environmentalist NGO&lt;/a&gt; and one of the things I keep repeating is how bad for the environment are the old   incandescent bulbs. I guess pragmatic programmers editors and RSpec book authors are very busy finishing the book and have other priorities ...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;However, in these times of &quot;&lt;a href=&quot;http://www.guardian.co.uk/world/video/2009/jan/19/obama-green-revolution-environment&quot;&gt;green revolution&lt;/a&gt;&quot;, I hope that many RSpec users feel concerned about environmental issues and ask David and other authors to pick another image cover. It&#39;s a detail, I know but we have to replace all these electricity greedy bulbs even in the book covers!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;RSpec is for alpha geek -  the earlier adopters -  and I don’t identify myself to a technology born in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Incandescent_light_bulb&quot;&gt;XIX century&lt;/a&gt;  !!!&lt;/p&gt;    &lt;p&gt;Why not using a Compact Fluorescent bulb?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://farm4.static.flickr.com/3052/2324613709_ee51050a0a_m.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 150px;&quot; src=&quot;http://farm4.static.flickr.com/3052/2324613709_ee51050a0a_m.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Or even more alpha geek, an &lt;a href=&quot;http://en.wikipedia.org/wiki/LED_lamp&quot;&gt;LED_lamp&lt;/a&gt; ?&lt;/p&gt;            &lt;p&gt;More information on &lt;a href=&quot;http://www.iea.org/Textbase/press/pressdetail.asp?PRESS_REL_ID=182&quot;&gt;http://www.earth-policy.org/Updates/2007/Update66.htm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;UPDATE:&lt;/span&gt; &lt;a href=&quot;http://www.iea.org/Textbase/press/pressdetail.asp?PRESS_REL_ID=182&quot;&gt;International Energy Agency Press release&lt;/a&gt; : &quot;Worldwide, grid-based electric lighting consumes &lt;span style=&quot;font-weight: bold;&quot;&gt;19%&lt;/span&gt; of total global electricity production&quot; ...&quot;It shows that were end-users to install only efficient lamps that will save money over the life cycle of the lighting service. Following these measures would save more than 16 000 Mt of CO2 emissions over the same time frame – equivalent to about 6 years of current global car emissions – and would avoid USD 2 600 billion&quot;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;&lt;a href=&quot;http://www.thedailygreen.com/green-homes/eco-friendly/congress-incandescent-light-bulbs-ban-461217&quot;&gt;http://www.thedailygreen.com/green-homes/eco-friendly/congress-incandescent-light-bulbs-ban-461217&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;I found the LED bulb image at &lt;a href=&quot;http://www.flickr.com/photos/partybooper_rob/2324613709/sizes/l/&quot;&gt;http://www.flickr.com/photos/partybooper_rob/2324613709/sizes/l/&lt;/a&gt; (Collective Commons)</description><link>http://21croissants.blogspot.com/2009/02/rspec-book-never-judge-book-by-its.html</link><author>noreply@blogger.com (Jean-Michel)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3052/2324613709_ee51050a0a_t.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-3274759305627264096</guid><pubDate>Wed, 04 Feb 2009 16:07:00 +0000</pubDate><atom:updated>2009-02-04T17:13:55.706+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>Install rmagick on ruby entreprise edition</title><description>I was trying to install rmagick on an ubuntu 7.04 and&lt;br /&gt;&lt;br /&gt;&quot;ERROR:  Error installing rmagick:&lt;br /&gt;    ERROR: Failed to build gem native extension.&quot;&lt;br /&gt;&lt;br /&gt;I found the solution in&lt;a href=&quot;http://209.85.229.132/search?q=cache:4Fg9BkjIq94J:www.urbanpuddle.com/articles/2008/01/22/compile-imagemagick-for-rmagick-2-0-0-gem+http://www.urbanpuddle.com/articles/2008/01/22/compile-imagemagick-for-rmagick-2-0-0-gemhelpful&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=1&amp;amp;gl=es&amp;amp;client=firefox-a&quot;&gt; google cache&lt;/a&gt;: install the 1.15.12 version !&lt;br /&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;&lt;img src=&quot;img/blank.gif&quot; alt=&quot;Link&quot; class=&quot;gl_link&quot; border=&quot;0&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;sudo /opt/ruby-enterprise-1.8.6-20090113/bin/gem install rmagick -v 1.15.12</description><link>http://21croissants.blogspot.com/2009/02/install-rmagick-on-ruby-entreprise.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-5926737228251291491</guid><pubDate>Fri, 30 Jan 2009 12:46:00 +0000</pubDate><atom:updated>2009-01-30T14:13:18.134+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conference</category><category domain="http://www.blogger.com/atom/ns#">RubyCampLyon</category><title>RubyCamp Lyon 2009</title><description>J&#39;ai appris l&#39;existence de ce barcamp dans le blog de Ruby onRails - comme quoi, la lecture de RSS n&#39;est pas que de la procrastination ;-)&lt;br /&gt;&lt;br /&gt; Dans la série &quot;troublantes coïncidences&quot;, j&#39;avais déjà prévu de passer sur Lyon le WE du samedi 21 février et ce pour des raisons personnelles. Ce barcamp tombe donc bien à point! Etant donné que je suis en train de planifier mon retour en France pour le second semestre 2009 - sans doute dans la région lyonnaise - cela sera une parfaite occasion de rencontrer les rubyistes locaux.&lt;br /&gt;&lt;br /&gt; Je compte faire un remix de mes présentations de &lt;a href=&quot;http://21croissants.blogspot.com/2008/12/paris-on-rails-2008.html&quot;&gt;Paris on Rails 2008&lt;/a&gt; et &lt;a href=&quot;http://21croissants.blogspot.com/2008/10/back-from-citcon-amsterdam-2008.html&quot;&gt;citcon amsterdam 2008&lt;/a&gt;:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;La vengeance du concombre masqué: Tests d&#39;Acceptance utilisateur avec &lt;a href=&quot;http://cukes.info/&quot;&gt;cucumber&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rouge, Vert, Refactor: Initiation au Test Driven Development avec &lt;a href=&quot;http://rspec.info/&quot; target=&quot;_blank&quot;&gt;RSpec&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;  Par rapport à Paris, je compte faire beaucoup plus court, 15 minutes - 10-15 slides - et beaucoup plus simple. Si vous avez des attentes particulières, je vous serai reconnaissant de bien vouloir me contacter ou de laisser un commentaire.&lt;br /&gt;&lt;br /&gt; Plus d&#39;info sur &lt;a href=&quot;http://barcamp.org/RubyCampLyon&quot;&gt;http://barcamp.org/RubyCampLyon&lt;/a&gt;</description><link>http://21croissants.blogspot.com/2009/01/rubycamp-lyon-2009.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-1605531211085463024</guid><pubDate>Tue, 27 Jan 2009 12:01:00 +0000</pubDate><atom:updated>2009-01-27T13:31:08.534+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>n-dash VS m-dash</title><description>The good thing with software engineering is that you learn a new thing every day. Computer programs depend on so many different layers, libraries, hardware that it should be no surprise that things go wrong all the time.&lt;br /&gt;&lt;br /&gt;One of the Agile practice to fight this entropy is &lt;a href=&quot;http://en.wikipedia.org/wiki/Unit_testing&quot;&gt;unit testing&lt;/a&gt; and especially &lt;a href=&quot;http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530&quot;&gt;Test Driven Development&lt;/a&gt; (TDD). Since 2005, I work with TDD, writing the specs (tests) before the code and this is the best design method I have used so far! No more dead code :-)  Moreover, the final code looks really clean and the tests are the best up to date documentation with examples I will ever write.&lt;br /&gt;&lt;br /&gt;I am implementing a Schedule class which encapsulate event times such as in the flavorpill.com. Following TDD and being lazy(!), I  wrote the spec first so I copy pasted directly the &quot;When&quot; text from the &lt;a href=&quot;http://flavorpill.com/newyork/events/2008/11/14/broken-glass&quot;&gt;event page&lt;/a&gt; in flavorpill to my editor:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt; it &quot;should output in a pretty format such as Tuesdays–Sundays (10am–5pm)&quot; do&lt;br /&gt;   @schedule.starts_at = 10.am&lt;br /&gt;   @schedule.ends_at = 5.pm&lt;br /&gt;   @schedule.from_tuesday.to_sunday&lt;br /&gt;   @schedule.pretty_format.should equal(&quot;Tuesdays–Sundays (10am–5pm)&quot;)&lt;br /&gt; end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;=&gt;expected &quot;Tuesdays–Sundays (10am–5pm)&quot;, got &quot;Tuesdays-Sundays (10am-5pm)&quot; (using .equal?)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don&#39;t you see the difference? Me neither, and it took me at least 5 minutes to understand what was going wrong.&lt;br /&gt;&lt;br /&gt;After increasing the size of the font, it&#39;s a bit easier to spot:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;expected &quot;Tuesdays–Sundays (10am–5pm)&quot;, got &quot;Tuesdays-Sundays (10am-5pm)&quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;Olala! A colleague of mine who works as an editor introduced me to the wonderful world of n-dash and m-dash. &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The hyphen is used to hyphenate compound words and between non-continuing numbers, e.g., phone numbers.&lt;/p&gt;  &lt;p&gt;The en dash &lt;span style=&quot;font-size:7;&quot;&gt;- &lt;/span&gt;is used to &quot;connect continuing, or inclusive, numbers -- dates, time, or reference numbers.&quot; [Chicago Manual of Style, sec. 5.115]&lt;/p&gt;  The em dash &lt;span style=&quot;font-size:7;&quot;&gt;– &lt;/span&gt;is used &quot;to denote a sudden break in thought that causes an abrupt change in sentence structure.&quot; [Chicago Manual of Style, sec. 5.106]&lt;/blockquote&gt;&lt;p class=&quot;western&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;Morality: copy-paste is evil!&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;But be honest, who knows about these characters, did you learn it in english classes? As far as I am concerned, there is no key in the keyboard to type the m-dash...&lt;span style=&quot;font-size:7;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://21croissants.blogspot.com/2009/01/n-dash-vs-m-dash.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-1900136798373032075</guid><pubDate>Wed, 03 Dec 2008 12:35:00 +0000</pubDate><atom:updated>2008-12-04T16:06:43.981+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conference</category><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>Paris on Rails 2008</title><description>Paris on Rails 2008 was my 3rd conference this year, after XP Days France and &lt;a href=&quot;http://21croissants.blogspot.com/2008/10/back-from-citcon-amsterdam-2008.html&quot; target=&quot;_blank&quot;&gt;citcon europe in Amsterdam&lt;/a&gt; . I talked about User Acceptance Testing with cucumber at webrat and selenium. Apologize to my non-french speaking readers, I will write the rest of this post in french.&lt;br /&gt;&lt;br /&gt;Je suis de retour de Paris on Rails 2008! Richard et Laurent de nuxos ont vraiment assuré l&#39;organisation de la conf: merci messieurs, ce fut très pro!&lt;br /&gt;Ce que je retiendrais, en vrac:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Russ Olsen&lt;/span&gt;, en direct skype des US s&#39;est levé à 5h du mat pour philosopher sur les langages de programmation. Son speech était comme du miel, c&#39;est définitivement un&quot;story teller&quot;: impressionant!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Philippe Hanrigou&lt;/span&gt; nous a servi sur un plateau une présentation très intéressante sur les &lt;strong&gt;Tests d&#39;acceptance web à forte valeur ajoutée. &lt;/strong&gt;Son utilisation de vidéos et de photos pour illustrer son propos m&#39;a paru une excellente idée. Sur le plan technique, j&#39;ai retenu 2-3 patterns que je vais implémenter ASAP&lt;strong&gt;&lt;br /&gt;   &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;DHH&lt;/span&gt; est cool mais finalement, je ne sais pas si il apporte autre chose qu&#39;un &quot;icing on the cake&quot; à une conférence plutot dense.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Les &lt;span style=&quot;font-weight: bold;&quot;&gt;autres présentations&lt;/span&gt; étaient également enrichissantes, sauf peut-être liquid dont je n&#39;ai pas compris la valeur ajoutée&lt;/li&gt;&lt;li&gt;Par rapport aux autres conf, le temps pour &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;socializer&lt;/span&gt;&quot; était encore 1 fois trop limité. Il nous manque un apéro, un petit déjeuner, un goûter d&#39;1 heure pour que l&#39;on puisse échanger des cartes de visites et débattre. C&#39;était un peu la course pour la pause déjeuner ... Quel contraste avec XP Days ou citcon où j&#39;ai eu le temps de tisser de nombreux liens d&#39;amitié lors de soirées d&#39;anthologie et quelque peu éthyliques!&lt;br /&gt; &lt;/li&gt;&lt;li&gt;une autre suggestion afin de motiver la communauté: faire un &quot;call for participants&quot; avec un site web 2.0 qui permet de voter pour les propositions. La &lt;a href=&quot;http://app.conferenciarails.org/charlas/lista&quot; target=&quot;_blank&quot;&gt;conférence espagnole&lt;/a&gt; est un exemple à suivre.&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;Quant à ma présentation, ce fut quelque peu &lt;span style=&quot;font-weight: bold;&quot;&gt;épique&lt;/span&gt; car je me suis trompé de fichier et j&#39;ai découvert en live une version beta ! J&#39;avoue avoir pas mal bosser pour préparer la conf et voir tous ces slides mal foutues alors que j&#39;avais passé une partie du dimanche à les fignoler m&#39;a filé un coup (aïe!) . L&#39;année prochaine, j&#39;aurais un script pour automatiser le backup sur memory stick et je vais lire les &lt;a href=&quot;http://slides.diigo.com/diigo?src=http%3A%2F%2Fwww.diigo.com%2Fuser%2Fjeanmichelg%2Fbook%2Bpresentation%3Ftab%3D250&amp;amp;title=My+Bookmarks+tagged+book+presentation&quot; target=&quot;_blank&quot;&gt;bouquins américains&lt;/a&gt; que Phillippe m&#39;a conseillé pour les mettre en pratique.&lt;br /&gt;&lt;span style=&quot;display: block;&quot;&gt;&lt;span style=&quot;display: block;&quot; title=&quot;Link&quot;&gt;&lt;img src=&quot;&quot; alt=&quot;Link&quot; border=&quot;0&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pour ceux que ça intéresse, voici la denière version de ma présentation, avec quelque photos censurées ;-)&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width: 425px; text-align: left;&quot; id=&quot;__ss_812963&quot;&gt;&lt;a style=&quot;margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/tests-interfaces-web-avec-rails-presentation?type=powerpoint&quot; title=&quot;Tests Interfaces Web avec Rails&quot;&gt;Tests Interfaces Web avec Rails&lt;/a&gt;&lt;a style=&quot;left: 0px ! important; top: 0px ! important;&quot; title=&quot;Block this object with Adblock Plus&quot; class=&quot;abp-objtab-0276058306357545 visible ontop&quot; href=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=tests-interface-web-on-rails-1228307467611218-9&amp;amp;rel=0&amp;amp;stripped_title=tests-interfaces-web-avec-rails-presentation&quot;&gt;&lt;/a&gt;&lt;object style=&quot;margin: 0px;&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=tests-interface-web-on-rails-1228307467611218-9&amp;amp;rel=0&amp;amp;stripped_title=tests-interfaces-web-avec-rails-presentation&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=tests-interface-web-on-rails-1228307467611218-9&amp;amp;rel=0&amp;amp;stripped_title=tests-interfaces-web-avec-rails-presentation&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;&quot;&gt;View SlideShare &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/tests-interfaces-web-avec-rails-presentation?type=powerpoint&quot; title=&quot;View Tests Interfaces Web avec Rails on SlideShare&quot;&gt;presentation&lt;/a&gt; or &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/upload?type=powerpoint&quot;&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/cucumber&quot;&gt;cucumber&lt;/a&gt; &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/acceptancetesting&quot;&gt;acceptancetesting&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Vos questions sont les bienvenues, sachez que je compte démarrer un projet sur &lt;a href=&quot;http://github.com/garnierjm&quot;&gt;github&lt;/a&gt; avec des exemples de features pour selenium et de specs pour RSpec.&lt;br /&gt;Malheureusement, je n&#39;ai pas pu me rendre à la &lt;a href=&quot;http://www.rubyfrance.org/evenements/rails-party-2008&quot;&gt;Rails Party&lt;/a&gt; organisé par Jean-François Trân et rubyfrance.org. Mais le programme avait l&#39;air prometteur et j&#39;avoue que je suis très fan de ces rencontres informelles. Si l&#39;année prochaine, ils la refont et previennent un peu plus en avance, je me ferai tout mon possible pour être présent!&lt;br /&gt;&lt;br /&gt;Pour conclure ce long post, cette conférence m&#39;a conforté dans ma décision de tenter ma chance de l&#39;autre côté de l&#39;Atlantique afin d&#39;aquérir de nouvelles compétences. Il me reste tellement de choses à apprendre avant de devenir peut-être un jour un &quot;master&quot; en Rails (&lt;a href=&quot;http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X&quot;&gt;From &lt;em&gt;Journeyman to Master&lt;/em&gt;&lt;/a&gt;) !&lt;br /&gt;&lt;br /&gt;Donc, si tout va bien, je devrai être à San Francisco à partir de mars 2009. Si vous avez des contacts ou connaissez une start up on Rails, merci de le faire savoir ...</description><link>http://21croissants.blogspot.com/2008/12/paris-on-rails-2008.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-3141863215756816446</guid><pubDate>Wed, 19 Nov 2008 15:40:00 +0000</pubDate><atom:updated>2008-11-19T16:44:55.093+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu hardy: Fan got crazy because of a bug in NetworkManager</title><description>Found the soluton in the ubuntu forum:&lt;br /&gt;&lt;a href=&quot;http://ubuntuforums.org/showthread.php?p=4559250#post4559250&quot;&gt;http://ubuntuforums.org/showthread.php?p=4559250#post4559250&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Copy-paste from the forum:&lt;br /&gt;&lt;br /&gt;Last update:&lt;br /&gt;If you update hal to last version (0.5.11~rc2-1ubuntu2) you shouldn&#39;t have this issue anymore, and thus you could update network-manager again.&lt;br /&gt;&lt;br /&gt;To check your installed version:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;apt-cache madison hal&lt;br /&gt;&lt;br /&gt;Quote:&lt;br /&gt;hal (0.5.11~rc2-1ubuntu2) hardy; urgency=low&lt;br /&gt;* debian/rules: build using --with-deprecated-keys, since we don&#39;t want to&lt;br /&gt;break packages that were assuming this worked right up through beta.&lt;br /&gt;LP: #204768.&lt;br /&gt;&lt;br /&gt;Old thread follows:&lt;br /&gt;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&lt;br /&gt;&lt;br /&gt;I&#39;ve read some posts here regarding wireless issues since last update.&lt;br /&gt;&lt;br /&gt;I had issues too, and noticed that NetworkManager was eating 100% CPU and avoiding wireless to work.&lt;br /&gt;&lt;br /&gt;So this is what I did:&lt;br /&gt;* Connect to the internet in other machine and download the previous version of network-manager:&lt;br /&gt;https://launchpad.net/ubuntu/hardy/i...0.6.6-0ubuntu1&lt;br /&gt;or directly:http://launchpadlibrarian.net/124982...untu1_i386.deb&lt;br /&gt;&lt;br /&gt;* Downgrade network-manager with:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;sudo dpkg -i network-manager-gnome_0.6.6-0ubuntu1_i386.deb&lt;br /&gt;&lt;br /&gt;It will automaticly stop and restart NetworkAdmin.&lt;br /&gt;After that just configure again your connection.&lt;br /&gt;&lt;br /&gt;EDIT:Bug reports follow (as some users reported):&lt;br /&gt;#204931 - NetworkManager 100% cpu usage on WiFi&lt;br /&gt;https://bugs.launchpad.net/ubuntu/+bug/178530&lt;br /&gt;https://bugs.launchpad.net/ubuntu/+s...er/+bug/204868&lt;br /&gt;&lt;br /&gt;EDIT2: If you want to keep aptitude from installing the broken package:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;sudo aptitude hold network-manager&lt;br /&gt;&lt;br /&gt;When you want to release it again:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;sudo aptitude unhold network-manager&lt;br /&gt;&lt;br /&gt;To check its version after an update:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;apt-cache madison network-manager</description><link>http://21croissants.blogspot.com/2008/11/ubuntu-hardy-fan-got-crazy-because-of.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2313783766868122911</guid><pubDate>Mon, 17 Nov 2008 15:32:00 +0000</pubDate><atom:updated>2008-11-17T19:27:10.942+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>Invalid Google Maps API key </title><description>Today, it took me 1 hour to find the reason why my google map was not showing in &lt;span style=&quot;font-style: italic;&quot;&gt;production&lt;/span&gt; env whereas everything was fine in &lt;span style=&quot;font-style: italic;&quot;&gt;development&lt;/span&gt; env. Needless to say I have a &quot;view&quot; spec +  a selenium acceptance test which pass.&lt;br /&gt;&lt;br /&gt;Google Maps API has only one error message for this kind of problem: &quot;The Google Maps API key used on this web site was registered for a different web site. You can generate a new key for this web site at &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; href=&quot;http://code.google.com/apis/maps/&quot;&gt;http://code.google.com/apis/maps/&lt;/a&gt;. &quot;&lt;br /&gt;&lt;br /&gt;Therefore, I started looking at the wrong place and changed the key set up for the &quot;production&quot; environment in the &lt;span style=&quot;font-style: italic;&quot;&gt;RAILS_ROOT + &#39;/config/gmaps_api_key.yml&lt;/span&gt; many times without any success ...&lt;br /&gt;&lt;br /&gt;Finally, I ended up looking at the source of the page and it appeared that the key parameter was empty!&lt;br /&gt;&lt;pre id=&quot;line30&quot;&gt;  &lt;&lt;span class=&quot;start-tag&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt; src&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;http://maps.google.com/maps?file=api&amp;amp;v=2.x&amp;amp;key=&amp;amp;hl=&quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&gt;&lt;!--&lt;span class=&quot;end-tag&quot;&gt;script&gt;&lt;/pre&gt;Garps!!! To be honest, the google maps developers could add a new spec to their API to verify the provided key is not blank and return a clear error message ....&lt;br /&gt;&lt;br /&gt;The problem was located in the code of the plugin ym4r_gm which loads the key for a given Rails env:&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;   class ApiKey&lt;br /&gt;     #Read the API key config for the current ENV&lt;br /&gt;     unless File.exist?(RAILS_ROOT + &#39;/config/gmaps_api_key.yml&#39;)&lt;br /&gt;       raise GMapsAPIKeyConfigFileNotFoundException.new(&quot;File RAILS_ROOT/config/gmaps_api_key.yml not found&quot;)&lt;br /&gt;     else&lt;br /&gt;       env = ENV[&#39;RAILS_ENV&#39;] || RAILS_ENV&lt;br /&gt;       GMAPS_API_KEY = YAML.load_file(RAILS_ROOT + &#39;/config/gmaps_api_key.yml&#39;)[env]&lt;br /&gt;     end&lt;br /&gt;    &lt;br /&gt;     def self.get(options = {})       &lt;br /&gt;       if options.has_key?(:key)&lt;br /&gt;         options[:key]&lt;br /&gt;       elsif GMAPS_API_KEY.is_a?(Hash)&lt;br /&gt;         #For this environment, multiple hosts are possible.&lt;br /&gt;         #:host must have been passed as option&lt;br /&gt;         if options.has_key?(:host)&lt;br /&gt;           GMAPS_API_KEY[options[:host]]&lt;br /&gt;         else&lt;br /&gt;           raise AmbiguousGMapsAPIKeyException.new(GMAPS_API_KEY.keys.join(&quot;,&quot;))&lt;br /&gt;         end&lt;br /&gt;       else&lt;br /&gt;         #Only one possible key: take it and ignore the :host option if it is there&lt;br /&gt;         GMAPS_API_KEY&lt;br /&gt;       end&lt;br /&gt;     end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I am deploying my application with the &quot;stage&quot; environment ... As I did a copy-paste from a project which does not have such an environment and completely forgot to add a key value for &quot;stage&quot; I ended up with an empty key ...&lt;br /&gt;&lt;br /&gt;The plugin author did not write any unit tests for &lt;span style=&quot;font-family: monospace;&quot;&gt;the &lt;/span&gt;ApiKey class and probably does not wok in a BDD style ... As a matter of fact, I had to refactor his code to be abble to write a spec.&lt;br /&gt;&lt;br /&gt;To solve the problem, I wrote a spec and added a:&lt;br /&gt;raise GMapsAPIKeyNotFoundException if GMAPS_API_KEY.blank?&lt;br /&gt;&lt;br /&gt;I also added a spec to check that my Google maps API key is valid in production mode so I can make sure everything will be fine without having to test manually the application.&lt;br /&gt;&lt;br /&gt;Do you also write some specs (tests) to verify some configuration in production mode? I also am thinking about dependencies which can be a total mess sometimes in ruby. For that, I am using geminstaller.&lt;br /&gt;</description><link>http://21croissants.blogspot.com/2008/11/invalid-google-maps-api-key.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-4727260898895108759</guid><pubDate>Mon, 10 Nov 2008 10:13:00 +0000</pubDate><atom:updated>2009-01-19T15:28:03.473+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><category domain="http://www.blogger.com/atom/ns#">tests</category><title>dont_repeat_youself ruby gem</title><description>&lt;a href=&quot;http://blog.mattwynne.net/&quot;&gt;Matt wynne&lt;/a&gt; sent me a link from &lt;a href=&quot;http://www.rubyinside.com/3-tools-for-drying-your-ruby-code-1305.html&quot;&gt;rubyinside about three tools to for DRYing Your Ruby Code&lt;/a&gt;. It also seems that the number of tools available for ruby to &lt;a href=&quot;http://silkandspinach.net/2008/09/23/reek-a-code-smells-detector-for-ruby/&quot;&gt;analyze the code quality and detect code smells&lt;/a&gt; is improving, that&#39;s a very good new!&lt;br /&gt;&lt;br /&gt;It seems a good timing to officially announce my first gem: &lt;a href=&quot;http://github.com/garnierjm/dont_repeat_youself/wikis&quot;&gt;dont_repeat_youself&lt;/a&gt;&lt;br /&gt;My idea was to take Simon Harris &#39; &lt;a href=&quot;http://www.redhillconsulting.com.au/products/simian/&quot;&gt;Simian&lt;/a&gt; and to add a few features:&lt;br /&gt;&lt;a href=&quot;http://www.redhillconsulting.com.au/products/simian/&quot;&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;generate reports (HTML, Textmate, Netbeans) of duplicate lines in your code:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7lNa5dqoRdtrRGDMZZh2zJGDgnvmT1mRvIJpO0kyK3PoCKgQ8uF7CboygFUO7NFzXS2sb8VDOziqSiS_XVhs1RBmV6w8GTJ8A90wNL2G5NHUL-8qmUz4odqe0OzDDCqxhJcv45wpkhc/s1600-h/dry_report.png&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7lNa5dqoRdtrRGDMZZh2zJGDgnvmT1mRvIJpO0kyK3PoCKgQ8uF7CboygFUO7NFzXS2sb8VDOziqSiS_XVhs1RBmV6w8GTJ8A90wNL2G5NHUL-8qmUz4odqe0OzDDCqxhJcv45wpkhc/s400/dry_report.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5194268735740940386&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;integrates nicely with&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://macromates.com/&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 55px; height: 57px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4V9VV7d-jP4htCzHYsmxDvNPsfpq8H9w-MsnKqwkeqLrFzsA5iDoFED0Xx9V4C935toHoFoL-NmfqOdnnOwNc7OqOwVg8FVhTch1YE3ac3MgXxIsJDve4xG-M5b_ZUsxpmkqqjLdA80Y/s400/textmate-logo.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5194265355601678402&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;and&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://ruby.netbeans.org/&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihyphenhypheneDGFhG8oiOLGoAPl-P9fLCt934Hxfby8Y9iVRX2Nyr1OKUI-wKUo4X0eMw322c3jpXTehdz2jKohNFW_03D4HPwU1m1ycCSGnJDe1ZYLj-zyYDVzR7SLxKPfOc5Vej0t0KzaP74fQQ/s400/NetBeansLogo-159_60px.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5194266279019647058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;and it opens the guilty class directly in your favourite IDE. This should save a bit of time!&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://ruby.netbeans.org/&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;integrates with unit testing frameworks:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;# RSpec&lt;br /&gt;it { rails_application.&lt;br /&gt;with_threshold_of_duplicate_lines(4).&lt;br /&gt;should be_DRY }&lt;br /&gt;&lt;br /&gt;# Test::Unit&lt;br /&gt;assert_DRY(ruby_code_in_rails_plugin(&quot;dont_repeat_yourself&quot;))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Combine it with autotest &amp;amp; Continuous Integration and your tests / builds will fail if the code contains too many duplicate lines.&lt;br /&gt;&lt;br /&gt;To start playing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Read the &lt;a href=&quot;http://github.com/garnierjm/dont_repeat_youself/wikis&quot;&gt;github wiki&lt;/a&gt;&lt;/li&gt;&lt;li&gt;View the &lt;a href=&quot;http://www.21croissants.com/files/dry_screencast.html&quot;&gt;1 min &quot;amateur screencast of the Netbeans integration&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Your FeedBACK is more than welcome! Post a comment in this blog or &lt;a href=&quot;http://www.21croissants.com/contact&quot;&gt;contact me&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to contribute, please use the git repository:&lt;br /&gt;&lt;a href=&quot;http://github.com/garnierjm/dont_repeat_youself/&quot;&gt;&lt;span style=&quot;font-family:monospace;&quot;&gt;http://github.com/garnierjm/dry-report/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cool DRY logo by &lt;a href=&quot;http://codesmack.com/&quot;&gt;CodeSmack&lt;/a&gt; (Please send me the t-shirt guys!)&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc2ChxDVxx1WgTifLypzSJxLjg8n7OyBCi-dIrv5JLzWyB2z0oWzhMRov30jciyv-V1mc4_zeltvfO8D7Tr3jd-Aspjt1z5zT9hp6T_iMOa18Zx0kqgxEvI4-eS9t2pJ_YeotjfFHSoes/s1600-h/logo_dry.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc2ChxDVxx1WgTifLypzSJxLjg8n7OyBCi-dIrv5JLzWyB2z0oWzhMRov30jciyv-V1mc4_zeltvfO8D7Tr3jd-Aspjt1z5zT9hp6T_iMOa18Zx0kqgxEvI4-eS9t2pJ_YeotjfFHSoes/s400/logo_dry.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5186465248048644850&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Based on Simian (Similarity Analyser) by Simon Harris from RedHill Consulting, see http://www.redhillconsulting.com.au/products/simian/&lt;br /&gt;Copyright (c) 2003-08 RedHill Consulting Pty. Ltd.  All rights reserved.</description><link>http://21croissants.blogspot.com/2008/11/dry-report-ruby-gem.html</link><author>noreply@blogger.com (Jean-Michel)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7lNa5dqoRdtrRGDMZZh2zJGDgnvmT1mRvIJpO0kyK3PoCKgQ8uF7CboygFUO7NFzXS2sb8VDOziqSiS_XVhs1RBmV6w8GTJ8A90wNL2G5NHUL-8qmUz4odqe0OzDDCqxhJcv45wpkhc/s72-c/dry_report.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-3895811292722069733</guid><pubDate>Thu, 06 Nov 2008 10:29:00 +0000</pubDate><atom:updated>2008-11-06T12:24:41.349+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">netbeans</category><title>Trick for Netbeans 6.5 latest build and Autospec</title><description>On one hand, &lt;a href=&quot;http://ph7spot.com/articles/getting_started_with_autotest&quot;&gt;Autotest&lt;/a&gt; is a definitely great idea. Since I am using it with RSpec, I have saved a lot of times  with it because it runs my tests automatically .&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;&lt;img src=&quot;img/blank.gif&quot; alt=&quot;Link&quot; class=&quot;gl_link&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;On the other hand, the &lt;a href=&quot;http://www.netbeans.org/features/ruby/index.html&quot;&gt;Netbeans ruby IDE&lt;/a&gt;  is getting better and better:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;the auto-completion definitely rocks,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;it&#39;s quite quick to open files and to Go to types (CTRL +O)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;the Refactoring &quot;Rename&quot; is very handy (although cover you back with tests to make sure!)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;Debugging rocks even if it&#39;s broken in 6.5 (see &lt;a href=&quot;http://www.netbeans.org/issues/show_bug.cgi?id=152509&quot;&gt;bug report&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt; is the test framework I use since 2007. I did embrace the whole BDD, &quot;describe MyClass, it &quot;should behave like ....&quot; jargon because it feels so much natural than &quot;assert_equals&quot; ...&lt;br /&gt;&lt;br /&gt;These 3 tools combined together should make me the most productive Agile Rails programmer but unfortunately if you live on the edge:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://bits.netbeans.org/download/trunk/nightly/latest/&quot;&gt;Netbeans&lt;/a&gt;-trunk-nightly-200811060201-ruby-linux.sh&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt; 1.1.11&lt;/li&gt;&lt;li&gt;ZenTest 3.11.0&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The right menu &quot;Autotest&quot; won&#39;t work ... It&#39;s probably the &lt;a href=&quot;http://21croissants.blogspot.com/2008/07/hack-to-make-autotest-work-in-netbeans.html&quot;&gt;4th or 5th&lt;/a&gt; time it happens to me so I am used to it ;-) Even if I find it ironic that such tools written by TDD people should work a bit better.&lt;br /&gt;&lt;br /&gt;Fortunately, the solution is simple:&lt;br /&gt;&lt;pre&gt;1. Update to the latest rspec-rails gem&lt;br /&gt;[sudo] gem install rspec-rails&lt;br /&gt;ruby script/generate rspec&lt;br /&gt;&lt;/pre&gt;It will generate a script/autospec file. Just open it, and run it with SHIT + F6 as a normal Ruby program. One caveat, why you press the &quot;stop&quot; button, it won&#39;t kill the autotest spawned by this script. You&#39;ll have to kill it manually ...&lt;br /&gt;&lt;br /&gt;As a screencast is better than 1000 blog posts, I have made one to explain the netbeans software engineers and you what&#39;s the problem and how to solve it, just &lt;a href=&quot;http://www.21croissants.com/files/netbeans_autospec.html&quot;&gt;click here to watch it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The only thing missing from Netbeans is official &quot;git support&quot; but I guess it should not take long as there is already an open source version &lt;a href=&quot;http://nbgit.org/&quot; target=&quot;_blank&quot; onclick=&quot;javascript:pageTracker._trackPageview (&#39;/outbound/nbgit.org&#39;);&quot;&gt;http://nbgit.org&lt;/a&gt;</description><link>http://21croissants.blogspot.com/2008/11/trick-for-netbeans-65-latest-build-and.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2690680008387384302</guid><pubDate>Tue, 28 Oct 2008 08:49:00 +0000</pubDate><atom:updated>2008-10-28T10:41:19.276+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">politic</category><category domain="http://www.blogger.com/atom/ns#">tests</category><title>SNCF: 225 software engineers who don&#39;t write tests!</title><description>The biggest French e-commerce web site is &lt;a href=&quot;http://voyages-sncf.com&quot;&gt;http://voyages-sncf.com&lt;/a&gt;, they sell train tickets for the &lt;em&gt;National  Railway&lt;/em&gt; of France providing high speed train travel to Europe. It&#39;s supposed to be a public company and provide an affordable, reliable and sustainable transport public service.&lt;br /&gt;&lt;br /&gt;In reality, the European Commission and a lot of people who fight for their private interest are trying to privatize it with marketing madness such as IDTGV: a train without driver (!!!) as they &quot;attach&quot; it behind another TGV train. This allow them to contract private staff and pay them less and with less social protection than scnf employees.&lt;br /&gt;&lt;br /&gt;The same people also created an over complex pricing system that no one but computers can understand (does it remind you some financial crisis?). This complexity was denounces by a &lt;a href=&quot;http://www.europe1.fr/Info/Actualite-Economie-et-Societe/Entreprises/La-SNCF-va-travailler-a-plus-de-clarte-pour-ses-tarifs/%28gid%29/172557&quot;&gt;report written by a deputy in October 2008&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Despite a team of 225 people, I am kind of astonished by the poor quality of their latest site: http://www.tgv-europe.com/&lt;br /&gt;&lt;br /&gt;This is the kind of email you receive when you order a ticket through http://www.tgv-europe.com/:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Delivered-To: anonymous@anonymous.com&lt;br /&gt;Received: by 10.86.4.12 with SMTP id 12cs66877fgd;&lt;br /&gt;       Thu, 23 Oct 2008 12:23:23 -0700 (PDT)&lt;br /&gt;Received: by 10.210.54.19 with SMTP id c19mr1159156eba.116.1224789802208;&lt;br /&gt;       Thu, 23 Oct 2008 12:23:22 -0700 (PDT)&lt;br /&gt;Return-Path: &lt;reply@tgv-europe.es&gt;&lt;br /&gt;Received: from voyages.sncf.fr (libellule.voyages-sncf.com [195.101.72.30])&lt;br /&gt;       by mx.google.com with ESMTP id j8si7755870gvb.1.2008.10.23.12.23.21;&lt;br /&gt;       Thu, 23 Oct 2008 12:23:22 -0700 (PDT)&lt;br /&gt;Received-SPF: neutral (google.com: 195.101.72.30 is neither permitted nor denied by best guess record for domain of reply@tgv-europe.es) client-ip=195.101.72.30;&lt;br /&gt;Authentication-Results: mx.google.com; spf=neutral (google.com: 195.101.72.30 is neither permitted nor denied by best guess record for domain of reply@tgv-europe.es) smtp.mail=reply@tgv-europe.es&lt;br /&gt;Date: Thu, 23 Oct 2008 21:23:21 +0200 (MEST)&lt;br /&gt;Message-ID: &lt;e66d574ae6198caf0000011d2b2938d50b37983418b35b88bc2d7633b54781c8@www.tgv-europe.com&gt;&lt;br /&gt;Reply-To: reply@tgv-europe.es&lt;/pre&gt;&lt;table class=&quot;BwDhwd&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;zyVlgb XZlFIc&quot;&gt;&lt;table class=&quot;BwDhwd&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;UszGxc&quot;&gt;&lt;td class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;from&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Unknow sender&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;reply-to&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;img class=&quot;QrVm3d&quot; id=&quot;upi&quot; name=&quot;upi&quot; jid=&quot;reply@tgv-europe.es&quot; src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;reply@tgv-europe.es&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;to&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;img class=&quot;OvtWcf QrVm3d&quot; id=&quot;upi&quot; name=&quot;upi&quot; jid=&quot;jeanmichel.garnier@gmail.com&quot; src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;myname@anoymous.com&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;cc&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;img class=&quot;QrVm3d&quot; id=&quot;upi&quot; name=&quot;upi&quot; jid=&quot;confirmation@raileurope.com&quot; src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;confirmation@raileurope.com&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;date&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;img src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;Thu, Oct 23, 2008 at 7:44 PM&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;UdFq5e&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;subject&lt;/span&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;sA2K5&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;JDpiNd&quot;&gt;&lt;img src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;Confirmación de su pedido&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;&lt;span class=&quot;HcCDpe&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td class=&quot;i8p5Ld&quot;&gt;&lt;div class=&quot;XZlFIc UszGxc&quot;&gt;&lt;span class=&quot;D05ws&quot; idlink=&quot;&quot;&gt;hide details&lt;/span&gt; &lt;span id=&quot;:2&quot; class=&quot;rziBod&quot; title=&quot;Thu, Oct 23, 2008 at 7:44 PM&quot; alt=&quot;Thu, Oct 23, 2008 at 7:44 PM&quot;&gt;Oct 23 (5 days ago)&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;i8p5Ld cY8xve&quot;&gt;&lt;div class=&quot;JbJ6Ye&quot;&gt;&lt;table class=&quot;gQ8wIf&quot; id=&quot;:4&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;cTzXV LtBCcf t9K9Me&quot; idlink=&quot;&quot;&gt;&lt;img class=&quot;DC6qBf&quot; src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; /&gt;&lt;/td&gt;&lt;td class=&quot;cTzXV t9K9Me&quot; idlink=&quot;&quot;&gt;&lt;div class=&quot;SvrlRe&quot;&gt;Reply&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;t9K9Me&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class=&quot;tKFvYb tP6gIf t9K9Me&quot;&gt;&lt;img class=&quot;S1nudd&quot; src=&quot;http://mail.google.com/mail/images/cleardot.gif&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;utdU2e&quot;&gt;&lt;div class=&quot;XwckWe ckChnd&quot;&gt;&lt;b&gt;Images are not displayed.&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;G8gNXb HNy1cb&quot; idlink=&quot;&quot;&gt;Display images below&lt;/span&gt; - &lt;span class=&quot;dNDeCd HNy1cb&quot; idlink=&quot;&quot;&gt;Always display images from &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;table width=&quot;600&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;&quot; title=&quot;TGV Europe.com&quot; alt=&quot;Logo TGV Europe&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;&quot; alt=&quot;arrondi&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;&quot; style=&quot;width: 15px; height: 1px;&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;601&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;&quot; style=&quot;width: 10px; height: 1px;&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;585&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;585&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;bottom&quot; width=&quot;422&quot;&gt;Confirmación de su pedido&lt;/td&gt;&lt;td height=&quot;26&quot; valign=&quot;top&quot; width=&quot;163&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;425&quot;&gt;&lt;img src=&quot;&quot; height=&quot;25&quot; width=&quot;1&quot; /&gt;&lt;span&gt;Bienvenido Señor    XXXX&lt;/span&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height=&quot;15&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Usted ha realizado una reserva en nuestro sitio el             23/10/2008 a las  20h44 A continuación le recordamos los detalles :&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;15&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;425&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; width=&quot;50&quot;&gt;&lt;img src=&quot;&quot; height=&quot;19&quot; width=&quot;19&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;375&quot;&gt;Le recordamos que su equipaje debe llevar etiquetas con su nombre, apellidos y dirección.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;15&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(255, 0, 0);&quot;&gt;Para garantizar las salidas TAV en las mejores condiciones, se pide en adelante al conjunto de los viajeros TAV acceder al tren como muy tarde 2 minutos antes de la hora de salida indicada en los billetes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;30&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;10&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; height=&quot;26&quot; valign=&quot;middle&quot; width=&quot;50&quot;&gt;&lt;img src=&quot;&quot; height=&quot;21&quot; width=&quot;30&quot; /&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; width=&quot;23&quot;&gt;&lt;img src=&quot;&quot; height=&quot;23&quot; width=&quot;19&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;211&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;  MONTPELLIER&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;&quot; /&gt;&lt;/td&gt;&lt;td&gt;LYON&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;15&quot;&gt;1&lt;/td&gt;&lt;td width=&quot;14&quot;&gt;&lt;img src=&quot;&quot; height=&quot;20&quot; width=&quot;14&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td style=&quot;font-size: 15px;&quot; align=&quot;right&quot; width=&quot;109&quot;&gt;44.00€ &lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;10&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;5&quot; height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td rowspan=&quot;5&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;70&quot;&gt;Salida:&lt;/td&gt;&lt;td width=&quot;180&quot;&gt;&lt;span&gt;MONTPELLIER&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;35&quot;&gt;&lt;span&gt;13h56&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;35&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;35&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;104&quot;&gt;16/12/2008&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Llegada:&lt;/td&gt;&lt;td&gt;&lt;span&gt;LYON PART DIEU&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;15h50&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;35&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td colspan=&quot;4&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;img src=&quot;&quot; /&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt; 06866&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt; - Plaza(s) sentada(s) garantizada(s)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;5&quot; height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;6&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;5&quot; height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td rowspan=&quot;5&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;70&quot;&gt;Salida:&lt;/td&gt;&lt;td width=&quot;180&quot;&gt;&lt;span&gt;LYON PART DIEU&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;35&quot;&gt;&lt;span&gt;11h37&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;35&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;35&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;104&quot;&gt;28/12/2008&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Llegada:&lt;/td&gt;&lt;td&gt;&lt;span&gt;MONTPELLIER&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;13h26&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;35&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td colspan=&quot;4&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;img src=&quot;&quot; /&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt; 05113&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt; - Plaza(s) sentada(s) garantizada(s)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;5&quot; height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;6&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;20&quot; width=&quot;154&quot;&gt;Referencia -  Nombre asociado :&lt;/td&gt;&lt;td align=&quot;center&quot; width=&quot;270&quot;&gt;XYZSHIT - XXXX&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;50&quot;&gt;&lt;img src=&quot;&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;5&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td height=&quot;30&quot; width=&quot;389&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;El modo de retirada para este billete es:&lt;/span&gt;  &lt;span&gt;&lt;img src=&quot;&quot; title=&quot;LIVRAISON&quot; alt=&quot;IAD_WEB&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;EL BILLETE IMPRESO&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;424&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;26&quot;&gt;&lt;a href=&quot;http://www.tgv-europe.es/dynamic/consult.order?_CMD=searchAfterSaleOrder&amp;amp;ownerName=Garnier&amp;amp;pnrRef=QBJPQB&amp;amp;cmdOnBack=displayAfterSaleSearchForm&amp;amp;_LANG=ES&amp;amp;_AGENCY=VSCE_ES&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td width=&quot;394&quot;&gt; &lt;a href=&quot;http://www.tgv-europe.es/dynamic/consult.order?_CMD=searchAfterSaleOrder&amp;amp;ownerName=Garnier&amp;amp;pnrRef=QBJPQB&amp;amp;cmdOnBack=displayAfterSaleSearchForm&amp;amp;_LANG=ES&amp;amp;_AGENCY=VSCE_ES&quot; target=&quot;_blank&quot;&gt;Imprima sus billetes ahora&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;2&quot; /&gt;&lt;img src=&quot;&quot; /&gt;&lt;/td&gt;&lt;td width=&quot;394&quot;&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Usted puede imprimir posteriormente desde la página de inicio :&lt;li&gt;Introduzca luego &lt;span&gt;GARNIER - QBJPQB&lt;/span&gt;to be translated&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;294&quot;&gt;&lt;li&gt;Haga clic en el enlace &quot; Imprimir su billete &quot;&lt;/li&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;100&quot;&gt;&lt;a href=&quot;http://www.tgv-europe.com/info_resa/popup/itgv/es/bi_ulterieurement.htm&quot; target=&quot;_blank&quot;&gt;Para más información, &lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;img src=&quot;&quot; height=&quot;15&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Para más información práctica sobre el billete impreso, consulte &lt;a href=&quot;http://www.tgv-europe.com/info_resa/popup/thalys-gl/es/conditions_utilisation_apresvente.htm&quot; target=&quot;_blank&quot;&gt;las condiciones de uso&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para cualquier preguntas sobre el billete impreso, escriba a :&lt;a href=&quot;http://www.idtgv.com/dynamic/_ContactForm.do?type=setupClaim&quot; target=&quot;_blank&quot;&gt;Contacto&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;5&quot;&gt;&lt;img src=&quot;&quot; height=&quot;5&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;td height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot; height=&quot;20&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;     &lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;425&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;right&quot; height=&quot;26&quot; width=&quot;315&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;TOTAL&lt;/span&gt; &lt;span&gt;pagado&lt;/span&gt; &lt;/td&gt;&lt;td style=&quot;font-size: 15px;&quot; align=&quot;right&quot; width=&quot;109&quot;&gt;44.00€ &lt;/td&gt;&lt;td height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot; height=&quot;1&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot; height=&quot;15&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;Le agradecemos la confianza que ha depositado en nosotros y le deseamos un buen viaje.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¡Visite nuestro sitio cuando lo desee!&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td width=&quot;10&quot;&gt;&lt;img src=&quot;&quot; height=&quot;1&quot; width=&quot;10&quot; /&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;150&quot;&gt;                                                                   &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Bugs:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The email sender does not appear in gmail: it says &quot;Unknown sender&quot;, they pro&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The link &quot;&lt;a href=&quot;http://www.idtgv.com/dynamic/_ContactForm.do?type=setupClaim&quot; target=&quot;_blank&quot;&gt;Contacto&lt;/a&gt;&quot; (Contact) redirects to an 404 page in the http://www.idtgv.com/. This sound like a copy-paste from their previous work which probably was a copy-paste from &lt;a href=&quot;http://voyages-sncf.com/&quot;&gt;http://voyages-sncf.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The most annoying bug is not in the email but in the booking system when you buy a Return ticket. After you have selected a time for the first trip, it won&#39;t let you navigate through the different times for the return ... You can&#39;t press &quot;back&quot; and changing the time  won&#39;t work: it keeps displaying the times for the first trip!!!! At the end, it will take you 30 minutes to buy a ticket ...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;If someone of the SNCF reads me, please simplify your system!!!! That will save a lot of time and headaches for citizens, sncf employees who sell the tickets and finally for the software engineers who don&#39;t write tests!&lt;br /&gt;&lt;br /&gt;At the end of the day, the European decision to push for privatization of  the railways and open it to competitions in 2011 is purely dogmatic. The invisible hand of &quot;free market&quot; will eventually lead  to the melt down of the system .  Even Margaret Thatcher thought privatizing British Rail was off limits ... To be coherent, the European Commission should subsidize more the road and air transport.&lt;br /&gt;&lt;br /&gt;As a an evangelist of automatic unit testing and user acceptance testing, I&#39;d love to to a bit of consulting for them in order to reduce the frustration for millions of citizens, including me.&lt;br /&gt;&lt;br /&gt;As an ecologist, I will swallow my frustration and take the train for traveling in Europe as I did when I went from Barcelona to Amsterdam to attend the Citcon Europe conference.</description><link>http://21croissants.blogspot.com/2008/10/sncf-225-software-engineers-who-dont.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-4052245290225928939</guid><pubDate>Thu, 23 Oct 2008 09:30:00 +0000</pubDate><atom:updated>2008-10-23T11:39:04.445+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu 8.04 xorg.conf for Samsung SyncMaster 2243LNX</title><description>It took me 20 minutes so I thought I shared my configuration:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# xorg.conf (xorg X Window System server configuration file)&lt;br /&gt;#&lt;br /&gt;# This file was generated by dexconf, the Debian X Configuration tool, using&lt;br /&gt;# values from the debconf database.&lt;br /&gt;#&lt;br /&gt;# Edit this file with caution, and see the xorg.conf manual page.&lt;br /&gt;# (Type &quot;man xorg.conf&quot; at the shell prompt.)&lt;br /&gt;#&lt;br /&gt;# This file is automatically updated on xserver-xorg package upgrades *only*&lt;br /&gt;# if it has not been modified since the last upgrade of the xserver-xorg&lt;br /&gt;# package.&lt;br /&gt;#&lt;br /&gt;# If you have edited this file but would like it to be automatically updated&lt;br /&gt;# again, run the following command:&lt;br /&gt;#   sudo dpkg-reconfigure -phigh xserver-xorg&lt;br /&gt;&lt;br /&gt;Section &quot;Files&quot;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;InputDevice&quot;&lt;br /&gt;    Identifier    &quot;Generic Keyboard&quot;&lt;br /&gt;    Driver        &quot;kbd&quot;&lt;br /&gt;    Option        &quot;CoreKeyboard&quot;&lt;br /&gt;    Option        &quot;XkbRules&quot;    &quot;xorg&quot;&lt;br /&gt;    Option        &quot;XkbModel&quot;    &quot;pc104&quot;&lt;br /&gt;    Option        &quot;XkbLayout&quot;    &quot;us&quot;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;InputDevice&quot;&lt;br /&gt;    Identifier    &quot;Configured Mouse&quot;&lt;br /&gt;    Driver        &quot;mouse&quot;&lt;br /&gt;    Option        &quot;CorePointer&quot;&lt;br /&gt;    Option        &quot;Device&quot;        &quot;/dev/input/mice&quot;&lt;br /&gt;    Option        &quot;Protocol&quot;        &quot;ImPS/2&quot;&lt;br /&gt;    Option        &quot;ZAxisMapping&quot;        &quot;4 5&quot;&lt;br /&gt;    Option        &quot;Emulate3Buttons&quot;    &quot;true&quot;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;InputDevice&quot;&lt;br /&gt;    Identifier    &quot;Synaptics Touchpad&quot;&lt;br /&gt;    Driver        &quot;synaptics&quot;&lt;br /&gt;    Option        &quot;SendCoreEvents&quot;    &quot;true&quot;&lt;br /&gt;    Option        &quot;Device&quot;        &quot;/dev/psaux&quot;&lt;br /&gt;    Option        &quot;Protocol&quot;        &quot;auto-dev&quot;&lt;br /&gt;    Option        &quot;HorizEdgeScroll&quot;    &quot;0&quot;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;Device&quot;&lt;br /&gt;    Identifier    &quot;Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller&quot;&lt;br /&gt;    Driver        &quot;intel&quot;&lt;br /&gt;    BusID        &quot;PCI:0:2:0&quot;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;Monitor&quot;&lt;br /&gt;    Option &quot;DPMS&quot;&lt;br /&gt;    Identifier &quot;Samsung2243LNX&quot;&lt;br /&gt;    VendorName &quot;Samsung&quot;&lt;br /&gt;    ModelName &quot;SyncMaster 2243LNX&quot;&lt;br /&gt;    HorizSync 31.4 - 80.0&lt;br /&gt;    VertRefresh 56.000 - 75.000&lt;br /&gt;    Modeline &quot;1680x1050&quot; 146.25 1680 1784 1960 2240 1050 1053 1059 1089&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;Screen&quot;&lt;br /&gt;    Identifier    &quot;Default Screen&quot;&lt;br /&gt;    Device        &quot;Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller&quot;&lt;br /&gt;    Monitor        &quot;Samsung2243LNX&quot;&lt;br /&gt;    DefaultDepth    24&lt;br /&gt;    SubSection &quot;Display&quot;&lt;br /&gt;        Depth 24&lt;br /&gt;        Modes &quot;1680x1050&quot; &quot;1600x1200&quot; &quot;1440x1440&quot; &quot;1280x1024&quot; &quot;1152x864&quot; &quot;1024x768&quot; &quot;832x624&quot; &quot;800x600&quot; &quot;720x400&quot; &quot;640x480&quot;&lt;br /&gt;                Virtual         2960 1050&lt;br /&gt;    EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section &quot;ServerLayout&quot;&lt;br /&gt;    Identifier    &quot;Default Layout&quot;&lt;br /&gt;    Screen        &quot;Default Screen&quot;&lt;br /&gt;    InputDevice    &quot;Generic Keyboard&quot;&lt;br /&gt;    InputDevice    &quot;Configured Mouse&quot;&lt;br /&gt;&lt;br /&gt;    InputDevice    &quot;Synaptics Touchpad&quot;&lt;br /&gt;EndSection&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;For more details, please check out another post I wrote about setting up a &lt;a href=&quot;http://21croissants.blogspot.com/2008/01/dual-screen-on-ubuntu-gutsy-with.html&quot;&gt;Dual screen on Ubuntu Gutsy with Toshiba laptop Intel 945&lt;/a&gt;</description><link>http://21croissants.blogspot.com/2008/10/ubuntu-804-xorgconf-for-samsung.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-8697129003087058530</guid><pubDate>Mon, 20 Oct 2008 11:37:00 +0000</pubDate><atom:updated>2008-10-20T13:43:59.106+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">selenium</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Selenium on ubuntu hardy 8.04</title><description>The upgrade to ubuntu hardy went very smooth but unfortunately, a few softwares were broken and among them selenium remote control, which was unable to launch firefox.&lt;br /&gt;&lt;br /&gt;Here is a list of commands inspired from a &lt;a href=&quot;http://agentzh.blogspot.com/2007/07/setting-up-selenium-on-ubuntu-feisty.html&quot;&gt;chinese blog&lt;/a&gt; I used to fix it by running firefox 2:&lt;br /&gt;&lt;br /&gt;Re-install firefox 2:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;apt-get install firefox-2&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;Selenum server  firefox-bin, so let&#39;s visible in our PATH:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;sudo ln -s /usr/lib/firefox/firefox-2-bin /usr/local/bin/firefox-bin&lt;/code&gt;&lt;/pre&gt; sudo ln -s /usr/lib/firefox/firefox-bin /usr/bin/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also, firefox-bin needs some shared library, and we need to tell the system where those libraries are by adding the following line to /etc/ld.so.conf&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;   /usr/lib/firefox&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then running the following command to update the .conf setting:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;    $ sudo ldconfig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If we don&#39;t update ld&#39;s configuration, we will probably get the following error while running firefox-bin:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;    /usr/lib/firefox/firefox-bin: error while loading shared libraries: libmozjs.so: cannot open shared object file: No such file or directory&lt;/span&gt;</description><link>http://21croissants.blogspot.com/2008/10/selenium-on-ubuntu-hardy-804.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-9000543592230616032</guid><pubDate>Mon, 20 Oct 2008 10:38:00 +0000</pubDate><atom:updated>2008-10-20T12:40:59.297+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rubyonrails</category><title>libMagick.so.9: cannot open shared object file: No such file or directory</title><description>&lt;blockquote&gt;/usr/lib/ruby/gems/1.8/gems/rmagick-1.15.10/lib/RMagick.so: libMagick.so.9: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/rmagick-1.15.10/lib/RMagick.so (LoadError)&lt;/blockquote&gt;&lt;br /&gt;This problem happenned after I updated Ubuntu to 8.0.4 and Ruby to ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux].&lt;br /&gt;&lt;br /&gt;Very simple solution: update to the latest version of rmagick!&lt;br /&gt;&lt;blockquote&gt;sudo gem update rmagick&lt;/blockquote&gt;</description><link>http://21croissants.blogspot.com/2008/10/libmagickso9-cannot-open-shared-object.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-6670700933497154423</guid><pubDate>Mon, 06 Oct 2008 12:54:00 +0000</pubDate><atom:updated>2008-10-06T16:34:57.353+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">conference</category><title>citcon Barcelona 2009?</title><description>On Saturday 4th of October 2008, the participants of the &lt;a href=&quot;http://citconf.com/amsterdam2008/&quot;&gt;Continuous Integration and Testing Amsterdam 2008 conference&lt;/a&gt; voted at a large majority for Barcelona to hold the conference next year.&lt;br /&gt;&lt;br /&gt;I think this is going to be a challenge for the following reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Language.&lt;/span&gt; Spanish people have a poor command of English - as bad as French people - which might limit the communication and especially the affluence. Nearly half of the people in Amsterdam came from the NL! Despite my 2 years in London, I found it hard to follow native english speakers at citcon 2008...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Agile Community&lt;/span&gt;. Does it exist in Barcelona? I don&#39;t think it does. There was no one from Spain at citcon 2008. When I worked for a spanish company, developers did not value or practice testing and Continuous Integration (especially the architects ;-) I would not expect any support neither sponsoring from spanish companies. For example, onlu 20 job offers out of 2812 contain the keyword &quot;junit&quot; in the main&lt;a href=&quot;http://www.infojobs.net&quot;&gt; spanish job site&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Venue&lt;/span&gt;. Barcelona holds hundreds of conferences every year so it might be an hard time to find a free venue such as in IBM Amsterdam.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Barcelona hype&lt;/span&gt;. Barcelona has been very good in the last 15 years to promote an image of &quot;cool&quot; city worldwide. It spends 74 000 000 € each year to promote its image and it has done well so far as the city is always packed with tourists and lots of people would love to live there (and earn a &lt;a href=&quot;http://www.cafebabel.com/eng/article/2564/the-1-000-euros-a-month-club.html&quot;&gt;decent&lt;/a&gt; salary). Life is more expensive in Barcelona than most of medium size french cities and it&#39;s hard to find good and cheap accomodation if you don&#39;t book in advance.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;As far as I am concerned, I&#39;d suggest Berlin. It is is also a cool city, much cheaper than Barcelona and with lots of agile geeks ;-)&lt;br /&gt;&lt;br /&gt;Spanish people, please prove me I am wrong and &lt;a href=&quot;http://citconf.com/contact.php&quot;&gt;contact the organizers&lt;/a&gt; to help!</description><link>http://21croissants.blogspot.com/2008/10/citcon-barcelona-2009.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2544828409875322943.post-2289020561642798921</guid><pubDate>Mon, 06 Oct 2008 10:52:00 +0000</pubDate><atom:updated>2008-10-06T14:51:18.092+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">conference</category><title>Back from citcon amsterdam 2008</title><description>I am back from the  citcon amsterdam 2008 conference and I have to say one word:&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);font-size:180%;&quot; &gt;WOW!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I really liked the &lt;a href=&quot;http://citconf.com/amsterdam2008/&quot;&gt;citcon conference&lt;/a&gt;, the people and the organization:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it&#39;s a free conference, it&#39;s on Friday evening and Saturday so the people who show up are really passionate about the subject: Testing and Continuous Integration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;They got so many sponsors and the venue was great, thanks IBM. However, 2 t-shirts might be a bit too much, I am looking forward to seeing a sustainable approach to goodies left by the sponsors ;-)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There so much time (+ beers &amp;amp; tapas) to socialize so you could talk to almost everybody. All the conferences should be like citcon! web 2.0 social networks are a waste of time, you meet the real people face to face !&lt;/li&gt;&lt;li&gt;The planning was decided on site with a lot of people proposing some sessions, everybody voting and everybody changing the time slots. This collective intelligence appeared a bit chaotic but the end result is astonishing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Special cheers to PJ and &lt;a href=&quot;http://blog.jeffreyfredrick.com/&quot;&gt;Jeff&lt;/a&gt; who moderate the conference.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It&#39;s a shame they were too many tracks on parallel and you had to make some choices. I am going to add my notes to the &lt;a href=&quot;http://citconf.com/wiki/index.php?title=CITCONEurope2008Sessions&quot;&gt;wiki&lt;/a&gt; of the conference.&lt;br /&gt;&lt;br /&gt;I have particpated to 2 sessions:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width: 425px; text-align: left;&quot; id=&quot;__ss_638661&quot;&gt;&lt;a style=&quot;margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/fast-web-acceptance-testing-with-seleniumgrid-presentation?type=powerpoint&quot; title=&quot;Fast web acceptance testing with selenium-grid&quot;&gt;Fast web acceptance testing with selenium-grid&lt;/a&gt;&lt;a style=&quot;left: 0px ! important; top: 0px ! important;&quot; title=&quot;Block this object with Adblock Plus&quot; class=&quot;abp-objtab-013866525503764304 visible ontop&quot; href=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=fast-web-acceptance-testing-with-seleniumgrid-1223292103894172-9&amp;amp;stripped_title=fast-web-acceptance-testing-with-seleniumgrid-presentation&quot;&gt;&lt;/a&gt;&lt;object style=&quot;margin: 0px;&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=fast-web-acceptance-testing-with-seleniumgrid-1223292103894172-9&amp;amp;stripped_title=fast-web-acceptance-testing-with-seleniumgrid-presentation&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=fast-web-acceptance-testing-with-seleniumgrid-1223292103894172-9&amp;amp;stripped_title=fast-web-acceptance-testing-with-seleniumgrid-presentation&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;&quot;&gt;View SlideShare &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/fast-web-acceptance-testing-with-seleniumgrid-presentation?type=powerpoint&quot; title=&quot;View Fast web acceptance testing with selenium-grid on SlideShare&quot;&gt;presentation&lt;/a&gt; or &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/upload?type=powerpoint&quot;&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/citcon&quot;&gt;citcon&lt;/a&gt; &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/2008&quot;&gt;2008&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;width: 425px; text-align: left;&quot; id=&quot;__ss_638644&quot;&gt;&lt;a style=&quot;margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/user-acceptance-testing-driven-by-humans-telling-stories-with-rspec-presentation?type=powerpoint&quot; title=&quot;User Acceptance Testing Driven by Humans telling Stories (with RSpec)&quot;&gt;User Acceptance Testing Driven by Humans telling Stories (with RSpec)&lt;/a&gt;&lt;a style=&quot;left: 0px ! important; top: 0px ! important;&quot; title=&quot;Block this object with Adblock Plus&quot; class=&quot;abp-objtab-013866525503764304 visible ontop&quot; href=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=user-acceptance-testing-driven-by-humans-with-rspec-1223291184765470-8&amp;amp;stripped_title=user-acceptance-testing-driven-by-humans-telling-stories-with-rspec-presentation&quot;&gt;&lt;/a&gt;&lt;object style=&quot;margin: 0px;&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=user-acceptance-testing-driven-by-humans-with-rspec-1223291184765470-8&amp;amp;stripped_title=user-acceptance-testing-driven-by-humans-telling-stories-with-rspec-presentation&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=user-acceptance-testing-driven-by-humans-with-rspec-1223291184765470-8&amp;amp;stripped_title=user-acceptance-testing-driven-by-humans-telling-stories-with-rspec-presentation&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;&quot;&gt;View SlideShare &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/garnierjm/user-acceptance-testing-driven-by-humans-telling-stories-with-rspec-presentation?type=powerpoint&quot; title=&quot;View User Acceptance Testing Driven by Humans telling Stories (with RSpec) on SlideShare&quot;&gt;presentation&lt;/a&gt; or &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://www.slideshare.net/upload?type=powerpoint&quot;&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/citcon&quot;&gt;citcon&lt;/a&gt; &lt;a style=&quot;text-decoration: underline;&quot; href=&quot;http://slideshare.net/tag/2008&quot;&gt;2008&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Later today, I will post another article into my blog to express what I think about organizing the conference in Barcelona !</description><link>http://21croissants.blogspot.com/2008/10/back-from-citcon-amsterdam-2008.html</link><author>noreply@blogger.com (Jean-Michel)</author><thr:total>0</thr:total></item></channel></rss>