<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUUGR3ozfip7ImA9WhdVEUU.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968</id><updated>2011-09-16T17:33:46.486+02:00</updated><category term="Lean" /><category term="Vista" /><category term="Visual Studio" /><category term="Twitter" /><category term="Project management" /><category term="Performance" /><category term="Architecture" /><category term="Light-Weight Agile Maturity" /><category term="VMware Fusion" /><category term="XP" /><category term="ScanDevConf 2010" /><category term="Agile Oresund" /><category term="Selenium" /><category term="AppEngine" /><category term="Build" /><category term="TreeSurgeon" /><category term="Agila Sverige" /><category term="Test" /><category term="OS X" /><category term="Micro Book Review" /><category term="Scala" /><category term="Community" /><category term="Softhouse" /><category term="TDD" /><category term="Other" /><category term="Git" /><category term="Operations" /><category term="Cucumber" /><category term="Apps" /><category term="DSL" /><category term="BDD" /><category term="ScanDevConf 2011" /><category term="Anchoring" /><category term="Prioritization" /><category term="Conference" /><category term="MigratorDotNet" /><category term="Marketing" /><category term="Agile Testing Days" /><category term="Spring" /><category term="Toyota" /><category term="Video" /><category term="Cloud" /><category term="SCM" /><category term="Code Kata" /><category term="Evernote" /><category term="CSS" /><category term="Javascript" /><category term="Rails" /><category term="Biz" /><category term="UX" /><category term="ALT.NET" /><category term="MSMQ" /><category term="Java" /><category term="Fun" /><category term="ALT.NET Oresund" /><category term="Requirements" /><category term="Open Source" /><category term="About me" /><category term="AWS" /><category term="Firefox" /><category term="DevCon10" /><category term="WCF" /><category term="Agile" /><category term="Ruby" /><category term="Maturity model" /><category term="Mono Project" /><category term="Scrum" /><category term="Rails 3" /><category term="design" /><category term="IronRuby" /><category term="Blog" /><category term=".NET" /><title>S'true</title><subtitle type="html">Insights and outlooks on software development</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.thomaslundstrom.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/thomaslundstrom" /><feedburner:info uri="thomaslundstrom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUUGR3oycSp7ImA9WhdVEUU.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-7839661203278606145</id><published>2011-09-16T17:33:00.001+02:00</published><updated>2011-09-16T17:33:46.499+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-16T17:33:46.499+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><title>On Flickr and JSON vs JSONP</title><content type="html">&lt;p&gt;
I've been playing somewhat with the Flickr API lately since I've been preparing a workshop in introductory jQuery, and the Flickr API is a great example in doing GETs for JSON content. However, the Flickr API returns JSONP instead of JSON by default. A typical response:
&lt;/p&gt;
&lt;pre name="code" class="javascript"&gt;
jsonFlickrApi({
  "photos": {
    "page": 1,
    "pages": 1033,
    "perpage": 100,
    "total": "103268",
    "photo": [{...}]
  }
})
&lt;/pre&gt;
&lt;p&gt;In order not to confuse my students, I wanted to start using pure JSON, i.e. letting the response be&lt;/p&gt;
&lt;pre name="code" class="javascript"&gt;
{
  "photos": {
    "page": 1,
    "pages": 1033,
    "perpage": 100,
    "total": "103268",
    "photo": [{...}]
  }
}
&lt;/pre&gt;
&lt;p&gt;I couldn't find this in the Flickr API docs, which are rather good, but later I found out that you can append &amp;nojsoncallback=1 to the request URL to accomplish the latter response.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-7839661203278606145?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/qzWGbE9FvOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/7839661203278606145/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=7839661203278606145" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7839661203278606145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7839661203278606145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/qzWGbE9FvOQ/on-flickr-and-json-vs-jsonp.html" title="On Flickr and JSON vs JSONP" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/09/on-flickr-and-json-vs-jsonp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBQX08cCp7ImA9WhdXGUU.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-5138126533076453856</id><published>2011-09-02T18:13:00.000+02:00</published><updated>2011-09-02T18:14:10.378+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-02T18:14:10.378+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><title>On design vs. style</title><content type="html">&lt;p&gt;So, recently I was listening to the &lt;a href="http://thisdeveloperslife.com/post/2-0-4-taste"&gt;Style&lt;/a&gt; episode of &lt;a href="http://thisdeveloperslife.com/"&gt;This Developer's Life&lt;/a&gt;, talking about the importance of design. In the beginning, the interviewer talks to a designer working at Microsoft, and it hit me that they, without mentioning it, are talking about the single reason why Apple has fared so well in the marketplace.&lt;/p&gt;
&lt;blockquote&gt;
Design is not just what it looks like and feels like. Design is how it works.&lt;br /&gt;
- Steve Jobs&lt;/blockquote&gt;
&lt;p&gt;Compare the quote from Steve Jobs above to the Microsoft designer talking about colors in the code surface.&lt;/p&gt;
&lt;p&gt;Design isn't visuals, it's the entire user experience. If you're only doing a fair job thinking about how the user will actually use your feature, there's no way the user is going to think your product is good even though you put a lot of thought into the color scheme.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-5138126533076453856?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/W_PM50L6-iI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/5138126533076453856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=5138126533076453856" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/5138126533076453856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/5138126533076453856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/W_PM50L6-iI/on-design-vs-style.html" title="On design vs. style" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/09/on-design-vs-style.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQBQ3c4cCp7ImA9WhZVF0g.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-3116346695678624417</id><published>2011-05-12T09:40:00.001+02:00</published><updated>2011-05-30T13:52:32.938+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T13:52:32.938+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Code Kata" /><category scheme="http://www.blogger.com/atom/ns#" term="Softhouse" /><category scheme="http://www.blogger.com/atom/ns#" term="XP" /><category scheme="http://www.blogger.com/atom/ns#" term="Community" /><title>On a Code Kata in Malmö</title><content type="html">&lt;p&gt;Me and &lt;a href="http://twitter.com/jhkarlsson"&gt;Joakim Karlsson&lt;/a&gt; are arranging a Code Kata in Malmö. The purpose is to be in "training" mode in order to build knowledge, instead of trying out stuff on a real project. This way we can experiment and reflect on our modelling and designing skills more thoroughly than when we are in a real production code setting.&lt;/p&gt;&lt;p&gt;If you're interested, go to &lt;a href="http://www.meetup.com/Lean-Tribe/events/18091821/"&gt;our meetup event page&lt;/a&gt; (in Swedish) and sign up!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-3116346695678624417?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/05UwI0iTGHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/3116346695678624417/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=3116346695678624417" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3116346695678624417?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3116346695678624417?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/05UwI0iTGHw/on-code-kata-in-malmo.html" title="On a Code Kata in Malmö" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/05/on-code-kata-in-malmo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHRHYzeCp7ImA9WhZWEU8.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-6585530652373408439</id><published>2011-05-11T16:33:00.002+02:00</published><updated>2011-05-11T16:37:15.880+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-11T16:37:15.880+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="Spring" /><title>On Spring MVC running on AppEngine</title><content type="html">&lt;p&gt;
I've just published a (modified) version of the Google AppEngine Java tutorial which runs using Spring and Spring MVC. Since it was rather tedious to get everything running as it should, I thought it could be spread to the world.
&lt;/p&gt;&lt;p&gt;Go check it out at &lt;a href="https://github.com/thomaslundstrom/springmvc-gae-guestbook"&gt;github&lt;/a&gt;! Pull requests are welcome.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-6585530652373408439?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/CpyIWj7ZUPo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/6585530652373408439/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=6585530652373408439" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6585530652373408439?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6585530652373408439?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/CpyIWj7ZUPo/on-spring-mvc-running-on-appengine.html" title="On Spring MVC running on AppEngine" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/05/on-spring-mvc-running-on-appengine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFQXo_fCp7ImA9WhZSGU4.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-3473429921553023306</id><published>2011-04-04T17:08:00.003+02:00</published><updated>2011-04-04T17:16:50.444+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T17:16:50.444+02:00</app:edited><title>On my Scandinavian Developer Conference presentation</title><content type="html">&lt;p&gt;This is the presentation I held on April 4, 2011 at the Scandinavian Developer Conference 2011 in Gothenburg.&lt;/p&gt;
&lt;p&gt;
&lt;div style="width:425px" id="__ss_7510545"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/thomaslundstrom/railsify-your-web-development" title="Railsify your web development"&gt;Railsify your web development&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/7510545" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/thomaslundstrom"&gt;Thomas Lundström&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-3473429921553023306?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/vzvWG-0snAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/3473429921553023306/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=3473429921553023306" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3473429921553023306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3473429921553023306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/vzvWG-0snAY/on-my-scandinavian-developer-conference.html" title="On my Scandinavian Developer Conference presentation" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/04/on-my-scandinavian-developer-conference.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBQn88fSp7ImA9WhZSFU0.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-2837810106994109319</id><published>2011-03-30T19:45:00.003+02:00</published><updated>2011-03-30T19:52:33.175+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T19:52:33.175+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ScanDevConf 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>On ScanDevConf 2011</title><content type="html">&lt;p&gt;I haven't remembered to note this on this blog (but I hope you've seen it on &lt;a href="http://twitter.com/thomaslundstrom"&gt;my Twitter feed&lt;/a&gt;), but I'll do a session on &lt;a href="http://www.scandevconf.se"&gt;Scandinavian Developer Conference&lt;/a&gt;, which takes place in Gothenburg April 4-5. My session is called "Railsify your web development". In that session I'll try to explain how to become (almost) as effective in your legacy web app development as when you're doing &lt;a href="http://rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; development, by using some of the practices Rails developers use.&lt;/p&gt;&lt;p&gt;I'll make sure I post the presentation from that conference here.
&lt;/p&gt;&lt;p&gt;If you read this blog, don't hesitate to come talk to me!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-2837810106994109319?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/Xcr5QBXUCdE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/2837810106994109319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=2837810106994109319" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/2837810106994109319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/2837810106994109319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/Xcr5QBXUCdE/on-scandevconf-2011.html" title="On ScanDevConf 2011" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/03/on-scandevconf-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGQH0_fSp7ImA9Wx9WFk8.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-1796537778689607073</id><published>2011-01-21T15:59:00.007+01:00</published><updated>2011-01-21T16:18:41.345+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-21T16:18:41.345+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails 3" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>On upgrading Rails from 2.3.5 to Rails 3 (via 2.3.8)</title><content type="html">&lt;p&gt;I run a rather small and basic, but functional, web site for me and some friends on Rails. The site has been running on Rails 2.3.5 for a rather lengthy period, but a couple of weeks ago I decided to enter the new era of Rails 3. This is what I had to do in order to get things working.&lt;/p&gt;
&lt;p&gt;While still remaining on Rails 2.3.5, I changed the project to use &lt;a href="http://gembundler.com/"&gt;Bundler&lt;/a&gt; and made sure all of my tests ran well, and added a few extra ones.&lt;/p&gt;
&lt;p&gt;I then upgraded to Rails 2.3.8. The upgrade was rather smooth, I didn't get any incompatibilities there, so I made sure everything worked, and then jumped on to the real upgrade, to Rails 3.&lt;/p&gt;
&lt;p&gt;In Rails 3, I had trouble with the &lt;a href="https://github.com/mislav/will_paginate"&gt;will_paginate&lt;/a&gt; gem (solved by upgrading the gem to version 3.0.pre2). I also had problems with &lt;a href="https://github.com/binarylogic/authlogic"&gt;Authlogic&lt;/a&gt; saying: "undefined method `to_key' for #&lt;usersession:&gt;". I solved this by using the form_for helper change mentioned &lt;a href="http://techoctave.com/c7/posts/37-authlogic-and-rails-3-0-solution"&gt;here&lt;/a&gt;.&lt;/usersession:&gt;&lt;/p&gt;
&lt;p&gt;Since there are quite a few changes between Rails 2.3 and Rails 3, e.g. the new application.rb, I got help from the plugin rails-upgrade (&lt;a href="http://omgbloglol.com/post/364624593/rails-upgrade-is-now-an-official-plugin"&gt;instructions&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In controllers, old root redirects didn't work, i.e.&lt;/p&gt;&lt;pre name="code" class="ruby"&gt;redirect_to root_url&lt;/pre&gt;
&lt;p&gt;To solve this, I had to define a named route in routes.rb like so:&lt;/p&gt;
&lt;pre name="code" class="ruby"&gt;match '/' =&gt; 'posts#index', :as =&gt; :root&lt;/pre&gt;
&lt;p&gt;Then I can use redirect_to like so:&lt;/p&gt;
&lt;pre name="code" class="ruby"&gt;redirect_to :root&lt;/pre&gt;
&lt;p&gt;Rails 3 has removed the markdown view helper method, so I had to use the &lt;a href="https://github.com/dtrasbo/formatize"&gt;formatize&lt;/a&gt; gem to get this working.&lt;/p&gt;
&lt;p&gt;From Rails 3 onwards, all of the stuff output in the views are html escaped. Make sure that you stop escaping the user-generated things, and, more importantly, un-escaping the outputs in the views that should contain regular HTML.&lt;/p&gt;
&lt;p&gt;Happy upgrade!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-1796537778689607073?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/bnZCcuR2W7Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/1796537778689607073/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=1796537778689607073" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1796537778689607073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1796537778689607073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/bnZCcuR2W7Y/on-upgrading-rails-from-235-to-rails-3.html" title="On upgrading Rails from 2.3.5 to Rails 3 (via 2.3.8)" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2011/01/on-upgrading-rails-from-235-to-rails-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INSH88eyp7ImA9Wx5WEUg.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-8794802364966492577</id><published>2010-09-22T14:41:00.003+02:00</published><updated>2010-09-22T14:46:39.173+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-22T14:46:39.173+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DevCon10" /><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="Requirements" /><title>On my presentation for TelecomCity DevCon</title><content type="html">&lt;p&gt;This is (a preliminary) version of the presentation on September 23, 2010 at the TelecomCity DevCon 2010 in Karlskrona.&lt;/p&gt;
&lt;p&gt;&lt;div style="width:425px" id="__ss_5257852"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/thomaslundstrom/bdd-for-web-applications-at-telecomcity-devcon-2010" title="Bdd for Web Applications at TelecomCity DevCon 2010"&gt;Bdd for Web Applications at TelecomCity DevCon 2010&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5257852" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bddforwebapplications-100922074006-phpapp01&amp;stripped_title=bdd-for-web-applications-at-telecomcity-devcon-2010&amp;userName=thomaslundstrom" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5257852" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bddforwebapplications-100922074006-phpapp01&amp;stripped_title=bdd-for-web-applications-at-telecomcity-devcon-2010&amp;userName=thomaslundstrom" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/thomaslundstrom"&gt;Thomas Lundström&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-8794802364966492577?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/b_nBpLdFWxE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/8794802364966492577/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=8794802364966492577" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8794802364966492577?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8794802364966492577?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/b_nBpLdFWxE/on-my-presentation-for-telecomcity.html" title="On my presentation for TelecomCity DevCon" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/09/on-my-presentation-for-telecomcity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04CRXo8cSp7ImA9Wx5SFkQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-2082280309090052732</id><published>2010-08-13T11:25:00.005+02:00</published><updated>2010-08-13T11:32:44.479+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T11:32:44.479+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DevCon10" /><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><title>On DevCon10</title><content type="html">&lt;p&gt;In September, I'll speak at &lt;a href="http://www.telecomcity.org/hem/devcon10.aspx"&gt;TelecomCity DevCon 2010&lt;/a&gt; in Karlskrona, Sweden. My topic is near and dear to me, BDD for Web Applications. I'll show how you'd go about to build a Java web app with the support from BDD, more specifically Cucumber with Java steps. For more information, go &lt;a href="http://www.telecomcity.org/hem/devcon10/forelasare.aspx"&gt;here&lt;/a&gt; and scroll down to my presentation.&lt;/p&gt;&lt;p&gt;I hope I'll see you there!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-2082280309090052732?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/wb9qTsoFpKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/2082280309090052732/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=2082280309090052732" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/2082280309090052732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/2082280309090052732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/wb9qTsoFpKo/on-devcon10.html" title="On DevCon10" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/08/on-devcon10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08AQ3c-eSp7ImA9WxFRE0Q.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-6208750337710167294</id><published>2010-04-27T19:56:00.003+02:00</published><updated>2010-04-27T20:10:42.951+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-27T20:10:42.951+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OS X" /><title>On Opening Applications from the Terminal in OS X</title><content type="html">&lt;p&gt;Let's say you have used the Terminal in OS X to navigate to the directory containing a file you want to open with the default program, e.g. the .xcodeproj bundle. How do you open that file?&lt;/p&gt;&lt;p&gt;It's as simple as 'Open MyApp.xcodeproj'.&lt;/p&gt;&lt;p&gt;The same goes for when you want to open an app. 'Open MyApp.app'.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-6208750337710167294?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/CqcKFSD3iLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/6208750337710167294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=6208750337710167294" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6208750337710167294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6208750337710167294?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/CqcKFSD3iLs/on-opening-applications-from-terminal.html" title="On Opening Applications from the Terminal in OS X" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/04/on-opening-applications-from-terminal.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNQHw5eCp7ImA9WxFSFUQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-7213227916077579536</id><published>2010-04-18T15:03:00.005+02:00</published><updated>2010-04-18T15:13:11.220+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-18T15:13:11.220+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OS X" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><title>On RVM</title><content type="html">&lt;p&gt;Do you happen to run Ruby on your Mac? If so, take 5 minutes and set up &lt;a href="http://rvm.beginrescueend.com/"&gt;RVM&lt;/a&gt;, the super simple Ruby Version Manager.&lt;/p&gt;&lt;p&gt;By using RVM, you can install different rubies by using 'rvm install jruby-1.4.0' and switch between them by using 'rvm use jruby-1.4.0'.&lt;/p&gt;&lt;p&gt;Info on how to install &lt;a href="http://rvm.beginrescueend.com/rvm/install/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-7213227916077579536?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/-SXA00JcYuU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/7213227916077579536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=7213227916077579536" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7213227916077579536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7213227916077579536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/-SXA00JcYuU/on-rvm.html" title="On RVM" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/04/on-rvm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYARXs9eCp7ImA9WxBaFkQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-1467895760196915493</id><published>2010-03-27T13:48:00.001+01:00</published><updated>2010-03-27T13:49:04.560+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-27T13:49:04.560+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Project management" /><category scheme="http://www.blogger.com/atom/ns#" term="Requirements" /><title>On Process Workarounds</title><content type="html">&lt;p&gt;In product development in fairly large organizations, there are often rather strict development processes, which sometimes have to be worked around. All such Process Workarounds are evidence of a process that doesn’t fit the organization.&lt;/p&gt;  &lt;p&gt;Let me give an example. How many times have you heard this conversation?&lt;/p&gt;  &lt;p&gt;Project manager   &lt;br /&gt;- May 5th is our feature complete deadline, after that we won't change or create any new features.&lt;/p&gt;  &lt;p&gt;Developers   &lt;br /&gt;- All right, then we'll do nothing than fixing bugs prep the release after that&lt;/p&gt;  &lt;p&gt;Project manager   &lt;br /&gt;- Oh, but we still have a couple of changes to the functionality after that&lt;/p&gt;  &lt;p&gt;Developers   &lt;br /&gt;- But didn't you just say we mustn't develop on features?&lt;/p&gt;  &lt;p&gt;Project manager   &lt;br /&gt;- Oh yeah, let's file that as a bug!&lt;/p&gt;  &lt;p&gt;Developers   &lt;br /&gt;- ...&lt;/p&gt;  &lt;p&gt;The reason for the feature complete deadline is a common one in waterfall organizations; there is a lot of fear in the organization about (the previously promised) deadlines and thus the project manager has to promise to his/her steering committee that there won't be any changes to the current feature set. This self-imposed limit to the feature set is then worked around by filing changes as bugs.&lt;/p&gt;  &lt;p&gt;In this situation I can fully understand the need to have deadlines; it’s very demanding to come to the lean development process where there is flow between the producer and the consumer of a module. However, it’s the workaround that bothers me. Either the change is performed, or it isn’t.&lt;/p&gt;  &lt;p&gt;To the developers in this situation, my only advice is to learn to say No. When a process workaround is performed, it’s done by people, and people are the ones who can stop it.&lt;/p&gt;  &lt;p&gt;To any project manager in this situation, my advice is to reflect on the why's of filing this as a bug, and the consequences. If you really need the changed feature, you definitely need to be able to sell the change to the steering committee. If you can't do this, the feature should probably not be implemented. Additionally, by filing the feature as a bug, you poison the defect rate measurements.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fe9d3a42-dd26-4ac0-9b4e-5f8b430a3b94" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas+Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Agile" rel="tag"&gt;Agile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Project+management" rel="tag"&gt;Project management&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Requirements" rel="tag"&gt;Requirements&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-1467895760196915493?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/93lNU8qcl20" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/1467895760196915493/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=1467895760196915493" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1467895760196915493?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1467895760196915493?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/93lNU8qcl20/on-process-workarounds.html" title="On Process Workarounds" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/03/on-process-workarounds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAASHg4fCp7ImA9WxBaFkQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-4069841475840427791</id><published>2010-03-27T13:25:00.001+01:00</published><updated>2010-03-27T13:25:49.634+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-27T13:25:49.634+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber" /><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="ScanDevConf 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="Requirements" /><title>On BDD for web applications at ScanDevConf 2010</title><content type="html">&lt;p&gt;The second of two posts on my Scandinavian Developer Conference presentations. (See the first &lt;a href="http://blog.thomaslundstrom.com/2010/03/on-ruby-for-c-ers-at-scandevconf-2010.html"&gt;here&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;Like the first one, this too is designed to be viewed together with some live demonstrations (in this case, &lt;a href="http://cukes.info/"&gt;cucumber&lt;/a&gt; + &lt;a href="http://wiki.github.com/brynary/webrat/"&gt;webrat&lt;/a&gt; executing the requirements against a &lt;a href="http://wicket.apache.org/"&gt;Wicket&lt;/a&gt; Java web app).&lt;/p&gt;  &lt;div style="width: 425px" id="__ss_3570634"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Bdd For Web Applications from Scandinavian Developer Conference 2010" href="http://www.slideshare.net/thomaslundstrom/bdd-for-web-applications-from-scandinavian-developer-conference-2010"&gt;Bdd For Web Applications from Scandinavian Developer Conference 2010&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bddforwebapplicationsscandevconf2010-100327063628-phpapp01&amp;amp;stripped_title=bdd-for-web-applications-from-scandinavian-developer-conference-2010" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bddforwebapplicationsscandevconf2010-100327063628-phpapp01&amp;amp;stripped_title=bdd-for-web-applications-from-scandinavian-developer-conference-2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/thomaslundstrom"&gt;thomaslundstrom&lt;/a&gt;.&lt;/div&gt; &lt;/div&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f7dfe42c-949c-436d-ac48-1ea398284cd0" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas+Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BDD" rel="tag"&gt;BDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Conference" rel="tag"&gt;Conference&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Requirements" rel="tag"&gt;Requirements&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ScanDevConf+2010" rel="tag"&gt;ScanDevConf 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cucumber" rel="tag"&gt;Cucumber&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-4069841475840427791?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/L9nIguOAsrQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/4069841475840427791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=4069841475840427791" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/4069841475840427791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/4069841475840427791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/L9nIguOAsrQ/on-bdd-for-web-applications-at.html" title="On BDD for web applications at ScanDevConf 2010" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/03/on-bdd-for-web-applications-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAMQH0zfCp7ImA9WxBaFkQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-6504273900553592174</id><published>2010-03-27T12:53:00.001+01:00</published><updated>2010-03-27T12:53:01.384+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-27T12:53:01.384+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ScanDevConf 2010" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="DSL" /><category scheme="http://www.blogger.com/atom/ns#" term="IronRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="ALT.NET" /><title>On Ruby for C#-ers at ScanDevConf 2010</title><content type="html">&lt;p&gt;As I’ve said on &lt;a href="http://twitter.com/thomaslundstrom"&gt;Twitter&lt;/a&gt;, I’ve done two presentations on the Scandinavian Developer Conference in Gothenburg. As promised (although a tad bit late), this is the first of the presentations; my presentation on Ruby for C#-ers.&lt;/p&gt;  &lt;p&gt;The presentation is designed to view together with some demos; those aren’t posted here.&lt;/p&gt;  &lt;div style="width: 425px" id="__ss_3570665"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Ruby for C#-ers (ScanDevConf 2010)" href="http://www.slideshare.net/thomaslundstrom/ruby-for-cers-scandevconf-2010"&gt;Ruby for C#-ers (ScanDevConf 2010)&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rubyforc-erssdc2010-100327064309-phpapp02&amp;amp;stripped_title=ruby-for-cers-scandevconf-2010" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rubyforc-erssdc2010-100327064309-phpapp02&amp;amp;stripped_title=ruby-for-cers-scandevconf-2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/thomaslundstrom"&gt;Thomas Lundström&lt;/a&gt;.&lt;/div&gt;    &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fa8ce3b0-9ea1-490d-8a02-bd9c3836e0e4" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas+Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ScanDevConf+2010" rel="tag"&gt;ScanDevConf 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sdc2010" rel="tag"&gt;sdc2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IronRuby" rel="tag"&gt;IronRuby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ALT.NET" rel="tag"&gt;ALT.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Conference" rel="tag"&gt;Conference&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DSL" rel="tag"&gt;DSL&lt;/a&gt;&lt;/div&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-6504273900553592174?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/b1ze5jHvXac" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/6504273900553592174/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=6504273900553592174" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6504273900553592174?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/6504273900553592174?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/b1ze5jHvXac/on-ruby-for-c-ers-at-scandevconf-2010.html" title="On Ruby for C#-ers at ScanDevConf 2010" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/03/on-ruby-for-c-ers-at-scandevconf-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IGQX04eip7ImA9WxBVEUo.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-1683592424991365227</id><published>2010-02-14T20:25:00.001+01:00</published><updated>2010-02-14T20:25:20.332+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-14T20:25:20.332+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Project management" /><category scheme="http://www.blogger.com/atom/ns#" term="Toyota" /><category scheme="http://www.blogger.com/atom/ns#" term="Biz" /><title>On Operational Excellence</title><content type="html">&lt;p&gt;A quote from &lt;a href="http://www.ineak.com/2009/01/the-toyota-way-using-operational-excellence-as-a-strategic-weapon/"&gt;The Toyota Way - Using Operational Excellence as a Strategic Weapon&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;We place the highest value on actual implementation and taking action. There are many things one doesn’t understand and therefore, we ask them why don’t you just go ahead and take action; try to do something? You realize how little you know and you face your own failures and you simply can correct those failures and redo it again and at the second trial you realize another mistake or another thing you didn’t like so you can redo it once again. So by constant improvement, or, should I say, the improvement based upon action, one can rise to the higher level of practice and knowledge.&lt;/p&gt;    &lt;p&gt;—Fujio Cho, President, Toyota Motor Corporation, 2002&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If we compare this to the XP/Agile way of building software, this is more or less the same. Instead of doing &lt;a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front"&gt;BDUF&lt;/a&gt;, we develop a small slice through the system (Alastair Cockburn calls this pattern “&lt;a href="http://alistair.cockburn.us/Walking+skeleton"&gt;Walking Skeleton&lt;/a&gt;”; the Pragmatic Programmers call it “&lt;a href="http://www.pragprog.com/the-pragmatic-programmer/extracts/tips"&gt;Tracer Bullets&lt;/a&gt;”). Then we inspect the way the current implementation works, learn and adapt.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7b376f51-f785-42d4-828e-56aadf2519be" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas+Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Toyota" rel="tag"&gt;Toyota&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TPS" rel="tag"&gt;TPS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XP" rel="tag"&gt;XP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Agile" rel="tag"&gt;Agile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BDUF" rel="tag"&gt;BDUF&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-1683592424991365227?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/Y27ozXZKoew" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/1683592424991365227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=1683592424991365227" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1683592424991365227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/1683592424991365227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/Y27ozXZKoew/on-operational-excellence.html" title="On Operational Excellence" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2010/02/on-operational-excellence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEAQ38-eip7ImA9WxBTGUU.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-8226700658771633385</id><published>2009-12-16T18:30:00.001+01:00</published><updated>2009-12-16T18:30:42.152+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T18:30:42.152+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Community" /><category scheme="http://www.blogger.com/atom/ns#" term="Biz" /><title>On opening up data</title><content type="html">&lt;p&gt;&lt;a href="http://open.bekk.no/2009/12/13/hva-skjer-nar-man-gir-bort-flydata-gratis/"&gt;This&lt;/a&gt; (in Norwegian) is a very intriguing article about &lt;a href="http://www.avinor.no/"&gt;Avinor&lt;/a&gt;, the company that owns and runs Norway’s 46 public airports, and their releasing of flight data to third parties. The data is openly exposed in xml format for anyone to use.&lt;/p&gt;  &lt;p&gt;The article describes three implications of opening the data:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Better data quality through the eyes of many reviewers (i.e. the public)&lt;/li&gt;    &lt;li&gt;Collective innovation - services are created using the public data&lt;/li&gt;    &lt;li&gt;The opinion of Avinor in the public eye is increased&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I like this process a lot. The more public data, the more innovation and services for us in the public.&lt;/p&gt;  &lt;p&gt;Has &lt;a href="http://www.lfv.se"&gt;Luftfartsverket&lt;/a&gt; (the Swedish equivalent) released their flight data? If not, go ahead and take the plunge!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c00f3e59-ac65-4386-9ac2-39b79574fb64" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas+Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Biz" rel="tag"&gt;Biz&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Community" rel="tag"&gt;Community&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-8226700658771633385?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/2IvuZR4AMts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/8226700658771633385/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=8226700658771633385" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8226700658771633385?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8226700658771633385?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/2IvuZR4AMts/on-opening-up-data.html" title="On opening up data" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/12/on-opening-up-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8DRHkycSp7ImA9WxNbFUs.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-512297424105197391</id><published>2009-11-18T18:21:00.001+01:00</published><updated>2009-11-18T18:21:15.799+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-18T18:21:15.799+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><title>On the Twitter retweet feature</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_9Os8Bt-P6JQ/SwQtCCQdgMI/AAAAAAAAAI8/oXy6ELu6lq8/s1600-h/3736077839_562764afcd%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="3736077839_562764afcd" align="right" src="http://lh5.ggpht.com/_9Os8Bt-P6JQ/SwQtCh4uhHI/AAAAAAAAAJA/jafTgS24L0s/3736077839_562764afcd_thumb%5B1%5D.jpg?imgmax=800" width="217" height="244" /&gt;&lt;/a&gt; So you might have heard about Twitter &lt;a href="http://blog.twitter.com/2009/08/project-retweet-phase-one.html"&gt;implementing&lt;/a&gt; a &lt;a href="http://blog.twitter.com/2009/11/retweet-limited-rollout.html"&gt;retweet&lt;/a&gt; feature in its API. The reason is that today there are a number of different ways to retweet, and Twitter wants to clean up the UI and usage. I think it's a bad decision. Twitter is changing the structure of its entities in order to support the new feature.&lt;/p&gt;  &lt;p&gt;In my mind, the thing that makes a Unix system work so well for the power user is that there are a large amount of different programs that can be combined using only a standard text format between each other. I'd like Twitter to work the same. If everyone agreed upon how a retweet would look, then the different clients could collapse the UI so that no one got a Retweet-storm, wherein one tweet is retweeted by twenty of your friends. That's the Unix way to solving the problem.&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://www.flickr.com/photos/jacquedavis/3736077839/"&gt;Image credits&lt;/a&gt;)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e06fb705-6250-482a-a767-ba9adfdcb3a1" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-512297424105197391?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/mR4qBazjyUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/512297424105197391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=512297424105197391" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/512297424105197391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/512297424105197391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/mR4qBazjyUk/on-twitter-retweet-feature.html" title="On the Twitter retweet feature" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_9Os8Bt-P6JQ/SwQtCh4uhHI/AAAAAAAAAJA/jafTgS24L0s/s72-c/3736077839_562764afcd_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/11/on-twitter-retweet-feature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGQXgyfCp7ImA9WxNbEUQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-875190586240921990</id><published>2009-11-14T11:08:00.001+01:00</published><updated>2009-11-14T11:20:20.694+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-14T11:20:20.694+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="MigratorDotNet" /><category scheme="http://www.blogger.com/atom/ns#" term="ALT.NET" /><title>On migrations</title><content type="html">&lt;p&gt;&lt;a href="http://codebetter.com/blogs/aaron.jensen/"&gt;Aaron Jensen&lt;/a&gt; recently asked &lt;a href="http://codebetter.com/blogs/aaron.jensen/archive/2009/10/24/machine-migrations-changes.aspx"&gt;what migrations tools people use&lt;/a&gt; for .NET development. In my current project, I use &lt;a href="http://code.google.com/p/migratordotnet/"&gt;MigratorDotNet&lt;/a&gt;, which works quite well for us. The standard types of migrations, like add table, add column, add fk, are there, but if you need to do something more advanced, there's always a possibility to execute the SQL raw against the database.&lt;/p&gt;  &lt;p&gt;What tool do &lt;em&gt;you&lt;/em&gt; use to handle the database during development?&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f3ff4bdf-2b7d-4290-8fef-14aa1a1b1eca" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ALT.NET" rel="tag"&gt;ALT.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Migrations" rel="tag"&gt;Migrations&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MigratorDotNet" rel="tag"&gt;MigratorDotNet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-875190586240921990?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/lVt_gcNA6zw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/875190586240921990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=875190586240921990" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/875190586240921990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/875190586240921990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/lVt_gcNA6zw/on-migrations.html" title="On migrations" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/11/on-migrations.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4BSH45eyp7ImA9WxNVFEQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-5205312799135989686</id><published>2009-10-25T20:29:00.001+01:00</published><updated>2009-10-25T20:29:19.023+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-25T20:29:19.023+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>On Visual Studio 2010</title><content type="html">&lt;p&gt;It seems as if the next version of VS will include more of the refactoring and navigation support that I find so useful about the Eclipse environment. I only hope that there'll be a working compile-as-you-code feature like Eclipse has, instead of the red squiggly one in VS 2008 that doesn't do a real compile.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:81e94a9e-87d7-444f-bfbe-79a066b98099" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual%20Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-5205312799135989686?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/XQUW5ApX2aM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/5205312799135989686/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=5205312799135989686" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/5205312799135989686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/5205312799135989686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/XQUW5ApX2aM/on-visual-studio-2010.html" title="On Visual Studio 2010" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/10/on-visual-studio-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGR30-fyp7ImA9WxNVFEQ.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-7852649198529477738</id><published>2009-10-25T19:58:00.001+01:00</published><updated>2009-10-25T19:58:46.357+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-25T19:58:46.357+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Project management" /><category scheme="http://www.blogger.com/atom/ns#" term="Anchoring" /><title>On anchoring</title><content type="html">&lt;p&gt;&lt;a href="http://www.ratracetrap.com/the-rat-race-trap/irrational-decisions-anchoring-and-arbitrary-coherence.html"&gt;This article&lt;/a&gt; describes the decision pattern of anchoring, where your decision is made by taking into account previous decisions. One example of this in our software development domain is if someone has made an estimation, subsequent estimations will be made with the first estimation as an anchor. Highly readable!&lt;/p&gt;  &lt;p&gt;When we know of this pattern, how do we do to minimize the effect of this? One example is point estimations and velocity calculations used in the agile community. Since we don't speak of real hours this is a tool to make sure that no-one anchors an estimation in real hours, which will ripple through in all re-estimations of the story in question.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:32e6245f-373a-478a-b13a-ebe2a6bfe217" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Agile" rel="tag"&gt;Agile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Project%20management" rel="tag"&gt;Project management&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Anchoring" rel="tag"&gt;Anchoring&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-7852649198529477738?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/1ytVq24MwUs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/7852649198529477738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=7852649198529477738" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7852649198529477738?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/7852649198529477738?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/1ytVq24MwUs/on-anchoring.html" title="On anchoring" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/10/on-anchoring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AAQnw4eSp7ImA9WxNWFUk.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-9115103223656493804</id><published>2009-10-14T21:49:00.001+02:00</published><updated>2009-10-14T21:49:03.231+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-14T21:49:03.231+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile Testing Days" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><title>On my thoughts after the Agile Testing Days conference</title><content type="html">&lt;p&gt;I'm just home from the Agile Testing Days conference. My general feeling of the conference is that I spent 3 days of constant learning, time well spent.&lt;/p&gt;  &lt;p&gt;Of the sessions I attended, the keynote from Elizabeth Hendrickson was the number one. She managed to squeeze in a lot of good content in her talk as well as lots of laughs. I totally agree with her thoughts of the seven key principles in agile testing, but I think that the principles actually are wider than that.&lt;/p&gt;  &lt;p&gt;A good quote that Elizabeth used in the talk:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff" face="Lucida Sans Unicode"&gt;If you want to move fast, you have to be very disciplined. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font style="background-color: #ffffff" face="Lucida Sans Unicode"&gt;- Mary Poppendieck&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The tutorial by Mary Poppendieck about lean software was also very good. I've come across most the things she talks about, but the tutorial is a good summary of the lean software topic. If you have a chance of attending this tutorial, &lt;em&gt;go&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;The value stream mapping excercise was great. This should be done on everything you do, not only the software project you work on.&lt;/p&gt;  &lt;p&gt;I can also note that my BDD topic can't be that wrong. At least the Elizabeth Hendrickson and Gojko Adzic talks talked about the team sitting together and defining your requirements, which is one of the points I have in my talk. Another point I always nag about is the fact that you can't run an iterative process without using good engineering practices, e.g. ATDD/BDD, TDD and CI, or you'll end up with unmaintanable code in the end.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ddd40f48-4225-4f03-8524-92d170bbb0e1" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Agile%20Testing%20Days" rel="tag"&gt;Agile Testing Days&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Conference" rel="tag"&gt;Conference&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-9115103223656493804?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/j95A5FBop7w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/9115103223656493804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=9115103223656493804" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/9115103223656493804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/9115103223656493804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/j95A5FBop7w/on-my-thoughts-after-agile-testing-days.html" title="On my thoughts after the Agile Testing Days conference" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/10/on-my-thoughts-after-agile-testing-days.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUAQnsyfyp7ImA9WxNWFEk.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-4594667989054404277</id><published>2009-10-13T16:30:00.001+02:00</published><updated>2009-10-13T16:30:43.597+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-13T16:30:43.597+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber" /><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Requirements" /><title>Presentation at Agile Testing Days</title><content type="html">&lt;p&gt;This is the presentation that I did at the Agile Testing Days conference a couple of hours ago.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="text-align: left; width: 425px" id="__ss_2208489"&gt;&lt;a style="margin: 12px 0px 3px; display: block; font: 14px helvetica,arial,sans-serif; text-decoration: underline" title="BDD approaches for web development at Agile Testing Days 2009" href="http://www.slideshare.net/thomaslundstrom/bdd-approaches-for-web-development-at-agile-testing-days-2009"&gt;BDD approaches for web development at Agile Testing Days 2009&lt;/a&gt;&lt;embed height="355" type="application/x-shockwave-flash" width="425" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agiletestingdays-091013091946-phpapp01&amp;amp;stripped_title=bdd-approaches-for-web-development-at-agile-testing-days-2009" allowfullscreen="true" allowscriptaccess="always" /&gt;    &lt;div style="font-family: tahoma,arial; height: 26px; font-size: 11px; padding-top: 2px"&gt;View more &lt;a style="text-decoration: underline" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline" href="http://www.slideshare.net/thomaslundstrom"&gt;thomaslundstrom&lt;/a&gt;.&lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:655f3525-dcb2-4834-bc2b-f8d6ed4d89da" style="display:inline; margin:0px; padding:0px 0px 0px 0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BDD" rel="tag"&gt;BDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TDD" rel="tag"&gt;TDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cucumber" rel="tag"&gt;Cucumber&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Agile%20Testing%20Days" rel="tag"&gt;Agile Testing Days&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-4594667989054404277?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/sVzafrTFigk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/4594667989054404277/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=4594667989054404277" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/4594667989054404277?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/4594667989054404277?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/sVzafrTFigk/presentation-at-agile-testing-days.html" title="Presentation at Agile Testing Days" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/10/presentation-at-agile-testing-days.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4ERXs7fCp7ImA9WxNTE0k.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-8786939595158229692</id><published>2009-08-09T14:03:00.001+02:00</published><updated>2009-08-15T15:28:24.504+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-15T15:28:24.504+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cucumber" /><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Test" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="IronRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="ALT.NET" /><title>On running Cucumber under IronRuby 0.9</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;Updated: changed the path to include IronRuby-0.9.0\bin, removed the need to create our own icucumber.bat script&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Previously, I've made some trial shots of &lt;a href="http://blog.thomaslundstrom.com/2009/03/on-getting-started-with-using-cucumber.html"&gt;running Cucumber under IronRuby&lt;/a&gt; to interact with .NET applications, and made a session in an Oresund ALT.NET Open Space around it. The feeling at that time was that IronRuby unfortunately was way too immature to be used effectively in a production environment. During the spring and summer, however, it seems as if the IronRuby team has been working hard on both performance and functionality, giving us a &lt;a href="http://www.ironruby.net/Download"&gt;0.9 release&lt;/a&gt; &lt;a href="http://blog.jimmy.schementi.com/2009/08/ironruby-09-released.html"&gt;a week ago&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The previous post on IronRuby + Cucumber included some steps of hackish nature, so I thought I should do a new write-up. Follow the steps below, and I hope you'll get everything working as it should.&lt;/p&gt;  &lt;h2&gt;Installing IronRuby&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Download the IronRuby zip file. &lt;/li&gt;    &lt;li&gt;Unpack in c:\ironruby-0.9.0 &lt;/li&gt;    &lt;li&gt;Make sure that c:\ironruby-0.9.0\bin is in the path &lt;/li&gt;    &lt;li&gt;Test the path by starting a cmd prompt and run 'ir'. The output should say &amp;quot;IronRuby 0.9.0.0 ...&amp;quot;. Exit by the command 'exit'. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Installing Cucumber&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Install required gems: 'igem install --bindir c:\ironruby-0.9.0\bin cucumber rspec'.     &lt;br /&gt;The --bindir argument tells igem to place a cucumber.bat script in the specified folder, so we don't need to create our own batch script&lt;/li&gt;    &lt;li&gt;Test if cucumber.bat runs as it should by running 'cucumber'. If everything works, you'll get an output saying, &amp;quot;0 scenarios&amp;quot;, which means that cucumber can't find any feature to run. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Run Cucumber under IronRuby&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;cd to the cucumber examples directory (for me in my cucumber version, it's C:\ironruby-0.9.0\lib\IronRuby\gems\1.8\gems\cucumber-0.3.94\examples\i18n\en) &lt;/li&gt;    &lt;li&gt;run 'cucumber features --no-color'.      &lt;br /&gt;If you get output saying something like &amp;quot;4 scenarios (4 passed)&amp;quot;, you are on your way!.       &lt;br /&gt;The --no-color switch is to suppress coloring in the output. Apparently, IronRuby + cucumber + the console don't play well with each other, and you'll get garbled output, like e.g. &amp;quot;4 scenarios (&amp;#8592;[32m4 passed&amp;#8592;[0m)&amp;quot;. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Test Cucumber against C# code&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;cd to the C# example directory (..\..\cs if you previously resided in the i18n\en directory). &lt;/li&gt;    &lt;li&gt;Run compile.bat (if you get complaints on &amp;quot;'csc' is not recognized as an internal or external command, operable program or batch file.&amp;quot;, start the visual studio command prompt) &lt;/li&gt;    &lt;li&gt;run 'icucumber features --no-color'. The output should say &amp;quot;3 scenarios (3 passed)&amp;quot; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Summing up&lt;/h2&gt;  &lt;p&gt;From here on, it's a bit of work to get Cucumber integrated in your CI build and get everything else working, but this is the first small steps to actually get a working integration between cucumber and .NET code. Previously, the IronRuby process was waaaay to slow to be usable, but now the startup time actually isn't that bad.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:57871b43-3d57-4247-b396-ab2a0ebb8387" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ALT.NET" rel="tag"&gt;ALT.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BDD" rel="tag"&gt;BDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cucumber" rel="tag"&gt;Cucumber&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IronRuby" rel="tag"&gt;IronRuby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Test" rel="tag"&gt;Test&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-8786939595158229692?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/TVtzxtk7BNE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/8786939595158229692/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=8786939595158229692" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8786939595158229692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/8786939595158229692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/TVtzxtk7BNE/on-running-cucumber-under-ironruby-09.html" title="On running Cucumber under IronRuby 0.9" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/08/on-running-cucumber-under-ironruby-09.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNQH84eyp7ImA9WxJUGE4.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-3401242879375508534</id><published>2009-07-17T15:28:00.001+02:00</published><updated>2009-07-17T15:28:11.133+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-17T15:28:11.133+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scala" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="DSL" /><title>On syntactic sugar</title><content type="html">&lt;p&gt;Previously, I've &lt;a href="http://blog.thomaslundstrom.com/2008/11/fluent-interfaces-by-lambdas-in-c.html"&gt;complained on the rocket operator in C#&lt;/a&gt; and the way it makes it hard for us to create nice, readable anonymous methods when doing the DSL dance in .NET/C#. Scala has about the same syntax, see &lt;a href="http://www.scala-lang.org/node/133"&gt;this link&lt;/a&gt;. However, there seems to be a shorthand to &lt;a href="http://this-statement-is-false.blogspot.com/2009/07/safe-navigaion-in-scala-take-2.html"&gt;declaring anonymous functions&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;For those new to Scala, the expressions in parentheses are anonymous functions because they use &amp;quot;_&amp;quot; as identifiers. (_.bud) expands to (x =&amp;gt; x.bud), where Scala chooses an x that is unique in the scope of the expression.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The same type of syntax could be allowed in C#; (x =&amp;gt; x.IsValid) could be shortened to (_.IsValid). Unfortunately, I haven't heard that anything like this is in the pipe for C# 4.0.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:82352992-94db-48bc-8afa-84c35615d714" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Thomas%20Lundstr%c3%b6m" rel="tag"&gt;Thomas Lundstr&amp;#246;m&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DSL" rel="tag"&gt;DSL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Scala" rel="tag"&gt;Scala&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-3401242879375508534?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/RxkM75vlU48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/3401242879375508534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=3401242879375508534" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3401242879375508534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/3401242879375508534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/RxkM75vlU48/on-syntactic-sugar.html" title="On syntactic sugar" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/07/on-syntactic-sugar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDQXo7eCp7ImA9WxJVFEo.&quot;"><id>tag:blogger.com,1999:blog-5821888993463612968.post-277349984367621077</id><published>2009-07-01T21:57:00.001+02:00</published><updated>2009-07-01T21:57:50.400+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T21:57:50.400+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blog" /><title>On a new domain</title><content type="html">&lt;p&gt;I finally got off my ass and registered my own domain. So update your bookmarks to &lt;a href="http://blog.thomaslundstrom.com"&gt;http://blog.thomaslundstrom.com&lt;/a&gt;. The feeds are still at &lt;a title="http://feeds2.feedburner.com/thomaslundstrom" href="http://feeds2.feedburner.com/thomaslundstrom"&gt;http://feeds2.feedburner.com/thomaslundstrom&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5821888993463612968-277349984367621077?l=blog.thomaslundstrom.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomaslundstrom/~4/9iztr7efwoo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.thomaslundstrom.com/feeds/277349984367621077/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5821888993463612968&amp;postID=277349984367621077" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/277349984367621077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5821888993463612968/posts/default/277349984367621077?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/thomaslundstrom/~3/9iztr7efwoo/on-new-domain.html" title="On a new domain" /><author><name>Thomas L</name><uri>http://www.blogger.com/profile/01658215829967656886</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.thomaslundstrom.com/2009/07/on-new-domain.html</feedburner:origLink></entry></feed>

