<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>aimee daniells &#187; i use tags, not categories</title>
	<atom:link href="http://edendevelopment.co.uk/blogs/aimee/category/i-use-tags-not-categories/feed/" rel="self" type="application/rss+xml" />
	<link>http://edendevelopment.co.uk/blogs/aimee</link>
	<description>apprentice to Enrique Comba Riepenhausen</description>
	<lastBuildDate>Wed, 25 Aug 2010 16:20:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rails alphabetical pagination</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/08/25/rails-alphabetical-pagination/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/08/25/rails-alphabetical-pagination/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 16:10:10 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=118</guid>
		<description><![CDATA[A common problem we often run into at eden is paginating a list of things alphabetically. I thought it was possible with will_paginate but apparently not, so yesterday we created our own simple solution, and today we rolled it into a plugin.
Here&#8217;s a little tutorial of how to use it.
So i have a nice simple [...]]]></description>
			<content:encoded><![CDATA[<p>A common problem we often run into at eden is paginating a list of things alphabetically. I thought it was possible with <a href="http://github.com/mislav/will_paginate">will_paginate</a> but apparently not, so yesterday we created our own simple solution, and today we rolled it into a plugin.</p>
<p>Here&#8217;s a little tutorial of how to use it.</p>
<p>So i have a nice simple view of Gowalla pins ordered by name. Please forgive the scaffolding! ;)</p>
<p><a href="http://www.flickr.com/photos/sermoa/4926297071/" title="Gowalla pins by sermoa, on Flickr"><img src="http://farm5.static.flickr.com/4121/4926297071_c65f2a76b5.jpg" width="500" height="356" alt="Gowalla pins" style="border: 1px solid silver" /></a></p>
<p>This page is quite long. Of course, we could use standard pagination to make it 10 per page or something, but it wouldn&#8217;t be very helpful if you were looking for a pin with a particular name. You&#8217;d have to click through the pages to find it. Wouldn&#8217;t it be neat to list a page for each letter?</p>
<p>Enter <a href="http://github.com/edendevelopment/paginate_alphabetically">paginate_alphabetically</a>!</p>
<p>Simply install it as a plugin:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails plugin <span style="color: #c20cb9; font-weight: bold;">install</span> http:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>edendevelopment<span style="color: #000000; font-weight: bold;">/</span>paginate_alphabetically.git</pre></div></div>

<p>Enable pagination in the model:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Pin <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  paginate_alphabetically <span style="color:#ff3333; font-weight:bold;">:by</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:name</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Make the controller fetch the right pins:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> PinsController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
  <span style="color:#9966CC; font-weight:bold;">def</span> index
    <span style="color:#0066ff; font-weight:bold;">@pins</span> = Pin.<span style="color:#9900CC;">alphabetical_group</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:letter</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Add pagination links in the view:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;ul class='pagination'&gt;
  &lt;strong&gt;Jump to:&lt;/strong&gt;
  &lt;%- Pin.pagination_letters.each do |letter| -%&gt;
    &lt;li&gt;&lt;%= link_to(letter, pins_path(:letter =&gt; letter)) %&gt;&lt;/li&gt;
  &lt;%- end -%&gt;
&lt;/ul&gt;</pre></div></div>

<p>Perhaps a touch of CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">ul<span style="color: #6666ff;">.pagination</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">list-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> lightgray<span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1em</span> <span style="color: #933;">0.5em</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #6666ff;">.pagination</span> strong <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #6666ff;">.pagination</span> li <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1.1em</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #6666ff;">.pagination</span> li<span style="color: #3333ff;">:before </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">content</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'| '</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>And here it is:</p>
<p><a href="http://www.flickr.com/photos/sermoa/4926946868/" title="Gowalla pins beginning with E by sermoa, on Flickr"><img src="http://farm5.static.flickr.com/4077/4926946868_0910fcc97d.jpg" width="500" height="302" alt="Gowalla pins beginning with E" style="border: 1px solid silver" /></a></p>
<p>The cool thing is you can add this to any of your models, and paginate by any attribute you wish.</p>
<p>Tested with Rails 2.3.5 and Rails 3 release candidate.</p>
<p>Get it from github: <a href="http://github.com/edendevelopment/paginate_alphabetically">http://github.com/edendevelopment/paginate_alphabetically</a><br />
or RubyGems: <a href="http://rubygems.org/gems/paginate_alphabetically">http://rubygems.org/gems/paginate_alphabetically</a></p>
<p>Thanks to <a href="http://www.tcrayford.net/">Tom</a>, <a href="http://ecomba.org/">Enrique</a> and <a href="http://tooky.github.com/">tooky</a> for their help making this.</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/08/25/rails-alphabetical-pagination/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What&#8217;s a pomodoro?</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/08/20/whats-a-pomodoro/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/08/20/whats-a-pomodoro/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 15:44:44 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[pomodoro]]></category>
		<category><![CDATA[time management]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=111</guid>
		<description><![CDATA[At eden, we often use the Pomodoro Technique&#8482; to manage our time effectively. What exactly is a pomodoro? You could find out on the Dizionario di Italiano but i&#8217;ll give you a clue: it&#8217;s a tomato.

A tomato?! How does a tomato help us manage time and increase our productivity? Well when we talk about pomodoros, [...]]]></description>
			<content:encoded><![CDATA[<p>At eden, we often use the Pomodoro Technique&trade; to manage our time effectively. What exactly is a pomodoro? You could <a href="http://dizionari.corriere.it/dizionario_italiano/P/pomodoro.shtml">find out on the <em>Dizionario di Italiano</em></a> but i&#8217;ll give you a clue: it&#8217;s a tomato.</p>
<p><a href="http://twitpic.com/2ghpnr" title="Share photos on twitter with Twitpic"><img src="http://twitpic.com/show/thumb/2ghpnr.jpg" width="150" height="150" alt="Share photos on twitter with Twitpic"></a></p>
<p>A tomato?! How does a tomato help us manage time and increase our productivity? Well when we talk about pomodoros, we&#8217;re actually talking about a 25-minute block of time followed by a 5-minute break to reflect and assess how we&#8217;re doing and what we will do in the next 25 minutes. After four of these we take a longer break. If we&#8217;re really serious about the technique, we aim to do 12 pomodoros in a day.</p>
<p>This is <a href="http://www.pomodorotechnique.com/">the Pomodoro Technique</a> created by Francesco Cirillo in 1992. It is called Pomodoro because Francesco used one of those kitchen timers shaped like a tomato.</p>
<p>These are the five simple steps of the Pomodoro Technique: </p>
<ol>
<li>Choose a task to be accomplished</li>
<li>Set the Pomodoro to 25 minutes (the Pomodoro is the timer)</li>
<li>Work on the task until the Pomodoro rings, then put a check on your sheet of paper</li>
<li>Take a short break (5 minutes is OK)</li>
<li>Every 4 Pomodoros take a longer break</li>
</ol>
<p>We don&#8217;t actually use a kitchen timer (though i think it would be cool to have some!) but we use software tools instead. We use <a href="http://www.apple.com/downloads/macosx/development_tools/pomodoro.html">Apple&#8217;s Pomodoro timer</a> which has Growl integration and keeps track of tasks and interruptions. When pairing remotely we use <a href="http://tomatoi.st/">http://tomatoi.st/</a> which enables both people to see the time as it counts down.</p>
<p>At eden, pomodoro time is highly respected in terms of not interrupting unless it is really urgent. It&#8217;s very easy to say, <em>&#8220;We&#8217;re on a pomodoro&#8221;</em> and people know that you&#8217;ll talk to them in your next break.</p>
<p>We find that the Pomodoro Technique increases our focus, keeps us on track with what we&#8217;re doing, and keeps us in control of our time, rather than time controlling us. For ideas and resources, visit <a href="http://pomodorotechnique.com/">PomodoroTechnique.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/08/20/whats-a-pomodoro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Cucumber to test concurrency issues</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/08/12/using-cucumber-to-test-concurrency-issues/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/08/12/using-cucumber-to-test-concurrency-issues/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 14:34:20 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=101</guid>
		<description><![CDATA[Recently i encountered a concurrency problem of the type where there is a queue of things to do, and users press a button to be automatically assigned the next item in the queue. The bug report was that two users could get assigned the same item.
My pair programmer and i tried to reproduce the problem [...]]]></description>
			<content:encoded><![CDATA[<p>Recently i encountered a concurrency problem of the type where there is a queue of things to do, and users press a button to be automatically assigned the next item in the queue. The bug report was that two users could get assigned the same item.</p>
<p>My pair programmer and i tried to reproduce the problem using two computers, but we couldn&#8217;t. We were only running one Rails instance, but we know that in the production environment there are multiple load-balanced servers pointing to one database, so we had an inkling that we&#8217;d be able to produce it using multi-threading.</p>
<p>To give it a test, we wrote a Rake task which we ran in two terminal windows to mimic the simultaneous access. The Rake task looked something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'..'</span>, <span style="color:#996600;">'..'</span>, <span style="color:#996600;">'config'</span>, <span style="color:#996600;">'environment.rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
namespace <span style="color:#ff3333; font-weight:bold;">:test</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  task <span style="color:#ff3333; font-weight:bold;">:take_next_for</span>, <span style="color:#ff3333; font-weight:bold;">:login</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>t, args<span style="color:#006600; font-weight:bold;">|</span>
    user = User.<span style="color:#9900CC;">find_by_login</span><span style="color:#006600; font-weight:bold;">&#40;</span>args<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:login</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    user.<span style="color:#9900CC;">take_next_item</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> user.<span style="color:#9900CC;">item</span>.<span style="color:#9900CC;">inspect</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This is easily called by running:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake <span style="color: #7a0874; font-weight: bold;">test</span>:take_next_for<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">'ann'</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>We ran it for two users simultaneously and inspected the output. Sure enough they were being assigned the same item.</p>
<p>Since there is only one database, we knew that we could fix it with a carefully placed transaction and lock on the database. But we wanted to add a Cucumber feature so that we could be sure it was working, and to give us confidence that the bug would not come back again in the future.</p>

<div class="wp_syntax"><div class="code"><pre class="cucumber" style="font-family:monospace;">  Scenario: Two users take next item simultaneously
    Given a user with login &quot;ann&quot;
    And a user with login &quot;bob&quot;
    And an available item called &quot;Item 1&quot;
    And an available item called &quot;Item 2&quot;
    When two users attempt to take the next item at the same time
    Then they should each have taken different items</pre></div></div>

<p>Notice we can&#8217;t actually say who gets which item &#8211; it&#8217;s a race condition. We can only check that both of them have an item and that they are not the same item. We could alternatively check that both of the items have successfully been taken.</p>
<p>Testing this concurrency issue in Cucumber turned out to be somewhat tricky. We tried using simple Ruby threads in Cucumber, but it wasn&#8217;t properly simultaneously. I guess the single Cucumber environment still only does one thing at a time. So it was back to the Rake task.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">When</span> <span style="color:#006600; font-weight:bold;">/</span>^two users attempt to take the <span style="color:#9966CC; font-weight:bold;">next</span> item at the same time$<span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  t1 = <span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">`RAILS_ENV=cucumber rake test:take_next_for['ann']`</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  t2 = <span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">`RAILS_ENV=cucumber rake test:take_next_for['bob']`</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  t1.<span style="color:#9900CC;">join</span>
  t2.<span style="color:#9900CC;">join</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>We &#8216;join&#8217; the two threads to make sure they&#8217;ve both finished before carrying on.</p>
<p>It&#8217;s slow because it loads up a whole new Rails environment for each of the Rake tasks, but that is exactly what we want to do, to mimic the concurrency of the production system.</p>
<p>The next problem we encountered was that Cucumber scenarios are run inside a transaction which means that a Rake task running outside of it cannot see the users and items we just created. So we had to tag the scenario as <code>@no-txn</code> so that they would be available externally and <code>@clean-up-afterwards</code> so that we could remove them from the database.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">After <span style="color:#996600;">&quot;@clean-up-afterwards&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  User.<span style="color:#9900CC;">destroy_all</span>
  Item.<span style="color:#9900CC;">destroy_all</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>With this in place the Cucumber scenario failed as we hoped it would! Then it was simply a matter of creating a transaction from the moment we find the next item (with a database lock) until we have successfully assigned the item. This is a simplified version of what we ended up with:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_one <span style="color:#ff3333; font-weight:bold;">:item</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> take_next_item
    transaction <span style="color:#9966CC; font-weight:bold;">do</span>
      item = Item.<span style="color:#9900CC;">available</span>.<span style="color:#9900CC;">by_priority</span>.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first</span>, <span style="color:#ff3333; font-weight:bold;">:lock</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">item</span> = item
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>The Cucumber scenario passed and the problem was solved. In the live system, if two users now try to take an item at the same time, one of them has to wait a moment until the database has finished assigning to the first user so that it can assign a different item to the second user.</p>
<p>How would you have tested a concurrency issue like this? Are there better ways of imitating a multi-server production environment than the solution we came up with?</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/08/12/using-cucumber-to-test-concurrency-issues/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Learn to Type &#8211; Day 4</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/07/15/learn-to-type-day-4/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/07/15/learn-to-type-day-4/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 19:15:09 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[learn to type week]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=96</guid>
		<description><![CDATA[I had a day off work today, so i&#8217;ve only just come to do my 5-minute test just now. 88wpm, hands covered, not so good as yesterday, but i am really tired at the end of a lovely exciting day.
I think i&#8217;ll go do a few powertyping exercises, followed by a few rounds of typeracer. [...]]]></description>
			<content:encoded><![CDATA[<p>I had a day off work today, so i&#8217;ve only just come to do my 5-minute test just now. 88wpm, hands covered, not so good as yesterday, but i am really tired at the end of a lovely exciting day.</p>
<p>I think i&#8217;ll go do a few powertyping exercises, followed by a few rounds of typeracer. In the meantime, enjoy this video that Enrique made: it&#8217;s me and Tom playing typeracer yesterday lunchtime!</p>
<p><a href="http://vimeo.com/13332121">Type Racers</a> from <a href="http://vimeo.com/ecomba">Enrique Comba Riepenhausen</a></p>
<p>I scored 102 words per minute, at 100% accuracy!!</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/07/15/learn-to-type-day-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn to Type &#8211; Day 3</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/07/14/learn-to-type-day-3/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/07/14/learn-to-type-day-3/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 09:31:51 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[learn to type week]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=92</guid>
		<description><![CDATA[Wow, my 5-minute baseline test this morning was much better than the previous two days: 91 words per minute, hands covered. I got to the end of the story of the Foolish Frogs, and had to start again at the beginning!
Corey has encouraged us to set a goal for the end of the week. I [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, my 5-minute baseline test this morning was much better than the previous two days: 91 words per minute, hands covered. I got to the end of the story of the Foolish Frogs, and had to start again at the beginning!</p>
<p><a href="http://programmingtour.blogspot.com/2010/07/learn-to-type-week-day-3.html">Corey has encouraged us to set a goal for the end of the week.</a> I will make it my goal to get to 100wpm on the 5-minute test. I feel that this should easily be possible by going at the speed that i am currently doing, but removing all the mistakes. This morning i managed the first minute without a single mistake, but the mistakes started to creep in after that. On my typeracer games i have noticed that a mistake costs a significant amount of time. It&#8217;s more effective to go a bit slower and think more, rather than rush ahead and make a mistake.</p>
<p>In my practice time I am continuing to learn to touch type numbers and symbols. I&#8217;ve found it very satisfying, just a single run through a lesson on <a href="http://www.powertyping.com/">PowerTyping.com</a> is enough to set it into my head where a few more symbol characters are. The real test comes when i&#8217;m programming: can i find the parentheses when i need them? Curly braces? Where is that hash key? Do i need the shift key or the alt key, and can i find it without looking?</p>
<p>I didn&#8217;t do many rounds of typeracer yesterday, so i want to do a few more today. My fastest yet has been 109wpm but i&#8217;d like to push that up to 120wpm. Two words a second, consistently &#8230; that would be so awesome!</p>
<p>There have been some interesting conversations just lately about whether or not you have to touch type to be an effective programmer. Of course, you don&#8217;t, and i think we would be unwise to apply the sort of value judgements that imply any sort of eliteness or inferiority between those who touch type and those who don&#8217;t. The key word here is <em>effectiveness</em>. I recognise that many people are able to program very effectively without touch typing.</p>
<p>However, i believe there is always opportunity to get better at what we do. The questions to ask yourself are whether you feel you could be <em>more effective</em> at typing, and do you want to learn? With the tools we currently have, i believe the keyboard is the best interface between our brain and the computer, so it makes sense to use it to the best of our ability.</p>
<p>Oh my gosh, Frances has just made the most amazing double espresso EVER!! &lt;3</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/07/14/learn-to-type-day-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn to Type &#8211; Day 2</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/07/13/learn-to-type-day-2/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/07/13/learn-to-type-day-2/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 08:39:07 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[learn to type week]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=90</guid>
		<description><![CDATA[Ahh, yesterday was good. I did some exercises on powertyping.com particularly the numbers and symbols, which is what i&#8217;m especially trying to practise this week.
I was delighted last night when i managed to complete one round of typeracer at 99 words per minute with 100% accuracy! That is something for me to be very proud [...]]]></description>
			<content:encoded><![CDATA[<p>Ahh, yesterday was good. I did some exercises on <a href="http://www.powertyping.com/">powertyping.com</a> particularly the numbers and symbols, which is what i&#8217;m especially trying to practise this week.</p>
<p>I was delighted last night when i managed to complete one round of <a href="http://play.typeracer.com/">typeracer</a> at 99 words per minute with 100% accuracy! That is something for me to be very proud of! Now if i can just get to that accuracy and speed consistently, i will be very happy!</p>
<p>This morning i&#8217;ve done my hands-covered 5-minute test at <a href="http://www.freetypinggame.net/">FreeTypingGame.net</a> and scored 76 words per minute, slightly slower than yesterday&#8217;s 78. I made more mistakes, particularly with quotation marks and exclamation marks.</p>
<p>Other resources we have discovered:<br />
<a href="http://www.typingweb.com/">TypingWeb.com</a> &#8211; typing lessons that save your progress. (only Qwerty)<br />
<a href="http://homepage.mac.com/typetrainer4mac/Menu1.html">aTypeTrainer4Mac</a> &#8211; a Mac program to download and use offline.</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/07/13/learn-to-type-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn to Type Correctly Week</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/07/12/learn-to-type-correctly-week/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/07/12/learn-to-type-correctly-week/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 08:49:52 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[learn to type week]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=84</guid>
		<description><![CDATA[The week has begun! Developers all around the world are making a conscientious effort to learn to type faster, more accurately, more effectively.
This is thanks to Corey Haines proposing a Learn To Type Week! Today we have been given our first instructions for Day 1: do a 1-minute, 3-minute or 5-minute exercise from FreeTypingGame.net with [...]]]></description>
			<content:encoded><![CDATA[<p>The week has begun! Developers all around the world are making a conscientious effort to learn to type faster, more accurately, more effectively.</p>
<p>This is thanks to Corey Haines proposing a <a href="http://programmingtour.blogspot.com/2010/07/learn-to-type-week.html">Learn To Type Week!</a> Today we have been given our <a href="http://programmingtour.blogspot.com/2010/07/learn-to-type-week-day-1.html">first instructions for Day 1</a>: do a 1-minute, 3-minute or 5-minute exercise from <a href="http://www.freetypinggame.net/free-typing-test.asp">FreeTypingGame.net</a> with your hands covered over so you can&#8217;t peek.</p>
<p>I did the 5-minute test, writing the story of the Elves and the Shoemaker. I made a few mistakes, but i felt quite a smooth rhythm. I got 78 words per minute. That&#8217;s not too bad; it&#8217;s a nice baseline, something to build upon. In some of my <a href="http://play.typeracer.com/">typeracer</a> games i&#8217;ve sometimes been getting to 100+ words per minute, so i&#8217;d love to be able to get there comfortably and consistently.</p>
<p>One thing i&#8217;m really trying to focus on this week is the number keys and symbols. I can touch type letters (on Dvorak keyboard layout) but when it comes to symbols i always have to look. I also need to learn once and for all to use both shift keys and not always to go to the shift key on the left.</p>
<p>Have a good week everybody! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/07/12/learn-to-type-correctly-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>760th day at Eden</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/07/09/760th-day-at-eden/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/07/09/760th-day-at-eden/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 18:25:48 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[learn to type week]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=81</guid>
		<description><![CDATA[We have a new intern at Eden. Tom Crayford studies Software Engineering at Sheffield University and is doing a 2&#189; month internship with us, with the possibility of becoming an apprentice at the end of it.
In the style of Tom&#8217;s two recent blog posts, First day at Eden and Second day at Eden i thought [...]]]></description>
			<content:encoded><![CDATA[<p>We have a new intern at Eden. <a href="http://www.tcrayford.net/">Tom Crayford</a> studies Software Engineering at Sheffield University and is doing a 2&frac12; month internship with us, with the possibility of becoming an apprentice at the end of it.</p>
<p>In the style of Tom&#8217;s two recent blog posts, <a href="http://www.tcrayford.net/2010/07/08/First-Day.html">First day at Eden</a> and <a href="http://www.tcrayford.net/2010/07/09/Second-Day.html">Second day at Eden</a> i thought i might also write about my day, since it was a particularly satisfying one. It just so happens to be two years and a month (760 days) since i joined Eden!</p>
<p>Straight after this morning&#8217;s stand-up meeting, I had a quick debrief of a meeting we had with a potential new client yesterday evening. Then i helped Todd to write an email. We draft our emails on Google Wave these days, which is often fun. Four of us were editing the email at once, which means we quickly get to something we&#8217;re all happy with before sending it.</p>
<p>I went out for a walk with Frances to pay in some cheques and buy some Friday Treats for everyone!</p>
<p>At lunch time some of us had several rounds of <a href="http://play.typeracer.com/">TypeRacer</a> in preparation for <a href="http://programmingtour.blogspot.com/2010/07/learn-to-type-week.html">Learn To Type Correctly Week</a> next week! I think it&#8217;s incredible how so many people have got enthusiastic about learning to type well after Corey Haines announced it. If you don&#8217;t believe me, check the twitter hashtag, <a href="http://search.twitter.com/search?q=%23learn2typewk">#learn2typewk</a>!</p>
<p>Something quite unusual happened after lunch. We had a message from Richard Knoll at <a href="http://www.merciacyclingclub.org/">Mercia Cycling Club</a> in trouble and needing help because the site was not responding. Richard had found us on Google after searching for Ruby on Rails. I agreed to look at it with Tom for an hour and see if we could figure out what was wrong. We determined that rubygems and Radiant had been upgraded on the server and we needed to tweak a few configuration files. With help from Chris and Spencer, the site was back within the hour! Chris then helped me to raise an invoice for an hour&#8217;s work.</p>
<p>It&#8217;s interesting that we can do anything from a fast restore of an unresponsive website, to projects that take several months from start to finish, requiring two or three pairs of developers working at a time.</p>
<p>Tom and i continued to pair together for the rest of the afternoon. We were able to add value to a project to help a charity in Cambodia. I always learn something whenever i pair with someone. Tom is no exception and i very much enjoyed pairing together today. We all have things we can teach each other.</p>
<p>Tonight i think i might learn a bit from the <a href="http://github.com/edgecase/ruby_koans">Ruby Kōans</a>, possibly study a bit of <a href="http://mitpress.mit.edu/sicp/">SICP</a>, and definitely see who gets evicted from Big Brother!</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/07/09/760th-day-at-eden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile app development and the DRY principle</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/06/07/mobile-app-development-and-the-dry-principle/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/06/07/mobile-app-development-and-the-dry-principle/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 08:38:00 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=77</guid>
		<description><![CDATA[I want to ask: what do people think of applications that generate code for Android, iPhone and Blackberry applications? The sort of &#8220;write it once, run it everywhere&#8221; dream. I&#8217;m talking about things like Titanium, PhoneGap and Rhodes.
I&#8217;m particularly interested in hearing from people who have developed for at least one mobile platform. See, when [...]]]></description>
			<content:encoded><![CDATA[<p>I want to ask: what do people think of applications that generate code for Android, iPhone and Blackberry applications? The sort of &#8220;write it once, run it everywhere&#8221; dream. I&#8217;m talking about things like <a href="http://www.appcelerator.com/">Titanium</a>, <a href="http://www.phonegap.com/">PhoneGap</a> and <a href="http://rhomobile.com/products/rhodes/">Rhodes</a>.</p>
<p>I&#8217;m particularly interested in hearing from people who have developed for at least one mobile platform. See, when i first came across PhoneGap i was extremely excited! I thought it was an extremely good idea: it conformed to the DRY &#8211; Don&#8217;t Repeat Yourself &#8211; principle, and meant you only had to learn one framework and suddenly you could build applications that could run on multiple devices.</p>
<p>Since then, i have had a little dip into Android development using Java, and i&#8217;ve spent a week intensively teaching myself iPhone development using Objective-C. I&#8217;m no longer at all convinced that these DRY frameworks are such a good idea.</p>
<p>I&#8217;m an Android user and i don&#8217;t really have much experience with iPhones, so learning iPhone development means also learning the standard ways in which people expect iPhone applications to behave. And i realise that they are quite different from the ways in which Android applications are expected to behave.</p>
<p>For example: application settings. The standard behaviour in Android applications is to press the Menu button and choose a Settings option. In iPhone applications you generally press a little icon which causes the view to flip over to another view containing Settings.</p>
<p>Another example: application feedback. An iPhone application often pops up an alert with an OK button, but Android applications pop up a little message towards the bottom of the screen which fades away after a second or two and does not prevent you from doing anything else whilst it&#8217;s there. Alternatively, a background task may put a message into the notifications bar at the top of the Android screen.</p>
<p>Android users are used to the &#8216;long press&#8217; to get further options. I don&#8217;t think that concept even exists for iPhone. Button sizes and styles are different. Android has tab bars at the top, iPhone puts them at the bottom. Android uses the physical &#8216;Back&#8217; button but iPhone needs a button in a task bar on the application screen. I could probably go on if i spent more time thinking about it.</p>
<p>The point is, Android and iPhone have different user bases with different expectations. How do you cater for both in one development environment without reducing both to something kinda clunky and not very satisfactory for either? I imagine the interface differences between Windows Mobile, Palm, Symbian and Blackberry are even more pronounced than those between Android and iPhone.</p>
<p>I should look into Rhodes, PhoneGap and Titanium and see how they deal with these very different paradigms. But right now i&#8217;m very interested in hearing from people with more experience. At the moment, if i wanted to write something for iPhone and Android i&#8217;m thinking i would probably go WET &#8211; Write Everything Twice. What&#8217;s your take on it?</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/06/07/mobile-app-development-and-the-dry-principle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Looking forward to Scottish Ruby Conference</title>
		<link>http://edendevelopment.co.uk/blogs/aimee/2010/03/24/looking-forward-to-scottish-ruby-conference/</link>
		<comments>http://edendevelopment.co.uk/blogs/aimee/2010/03/24/looking-forward-to-scottish-ruby-conference/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 18:49:42 +0000</pubDate>
		<dc:creator>aimee</dc:creator>
				<category><![CDATA[i use tags, not categories]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxmint]]></category>

		<guid isPermaLink="false">http://edendevelopment.co.uk/blogs/aimee/?p=72</guid>
		<description><![CDATA[
I&#8217;m now getting rather excited about Scottish Ruby Conference! Not least because i&#8217;ve never been to Scotland before! I&#8217;ll be travelling up with Chris, James, Steve (tooky), Tris and Enrique. We&#8217;ve hired a car and we&#8217;ll take it in turns to drive. I&#8217;m looking forward to beautiful views on the way and plenty of geeky [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://scottishrubyconference.com/"><img src="http://scottishrubyconference.com/images/badges/src-240-attending.jpg" alt="I'm attending Scottish Ruby Conference" width="240" height="160" border="0" /></a></p>
<p>I&#8217;m now getting rather excited about <a href="http://scottishrubyconference.com/">Scottish Ruby Conference</a>! Not least because i&#8217;ve never been to Scotland before! I&#8217;ll be travelling up with <a href="http://chrismdp.github.com/">Chris</a>, <a href="http://ohthatjames.github.com/">James</a>, <a href="http://tooky.github.com/">Steve (tooky)</a>, Tris and <a href="http://blog.nexwerk.com/">Enrique</a>. We&#8217;ve hired a car and we&#8217;ll take it in turns to drive. I&#8217;m looking forward to beautiful views on the way and plenty of geeky chat no doubt! ;)</p>
<p>At SRC i will very likely talk to anyone who will listen about the delights of <a href="http://linuxmint.com/">Linux Mint</a> on my MacBook. I dual-booted it recently and i love using Mint for my everyday operating system. Sure, Mac OSX is nice, but i just feel right at home with Linux. Being a crafter is all about the tools you use, isn&#8217;t it? :) I&#8217;m planning a blog post soon explaining how to install it and configure it for a MacBook, complete with pictures.</p>
]]></content:encoded>
			<wfw:commentRss>http://edendevelopment.co.uk/blogs/aimee/2010/03/24/looking-forward-to-scottish-ruby-conference/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
