<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>blog.GOEran.no</title>
    <link>http://blog.goeran.no/</link>
    <description>Techy, geeky, cool stuff (programming and new technology;)</description>
    <language>en-us</language>
    <copyright>Gøran Hansen</copyright>
    <lastBuildDate>Tue, 21 Jul 2009 19:29:17 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7067.0</generator>
    <managingEditor>goeran.hansen@gmail.com</managingEditor>
    <webMaster>goeran.hansen@gmail.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Goeran" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=5aaf56ce-cbe5-4df1-99e2-55f606d65a8d</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=5aaf56ce-cbe5-4df1-99e2-55f606d65a8d</wfw:commentRss>
      <slash:comments>4</slash:comments>
      
      <title>Reinstalling Windows Home Server system disk!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/IDQ4QmhF0Y8/PermaLink,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</link>
      <pubDate>Tue, 21 Jul 2009 19:29:17 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
About a year ago I assembled a WHS (Windows Home Server) from old computer parts I&#xD;
had lying around – finally I could put them to use. I added the following hard drives:&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
200 GB SATA (for the system)&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
200 GB SATA (data)&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
200 GB SATA (data)&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
400 GB SATA (data)&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
320 GB USB (data)&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
I can’t remember why I decided to use the smallest disk for the system, but it was&#xD;
a mistake. There are some good reasons to choose a larger disk:&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Size of the system disk limits the file size when transferring files to the server.&#xD;
WHS splits the system disk into two partitions: C:\ (20 GB) and D:\ (remainder of&#xD;
the disk is used for data). When you transfers files to a WHS the files will land&#xD;
on the D:\ drive before Drive Extender moves them to secondary disks in the storage&#xD;
pool. So if you have 40GB disk for system, you’ll have 20GB available for data. This&#xD;
limits you to only transfer files less than 20GB, which is small in the year of 2009&#xD;
when HD videos are common. I discovered this limitation while trying to move a 120&#xD;
GB virtual hard drive file to the WHS for backup – not fun at all&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
When your amount of data grows, you need to swap out the disks in the storage pool.&#xD;
When I have replaced the 200 and 400 GB disks with brand new +1 TB disks, I’m still&#xD;
left with a 200GB system disk when I could had a 1 TB system disk – argh!&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
So instead of making the same mistake as I did, install the system on a large disk!&#xD;
I can recommend a +1 TB disk. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Using a small disk for the system was a bad design decision by me. This forced me&#xD;
to replace the system disk with a 1 TB disk. I started on this “little” project this&#xD;
weekend, and ended up spending lots of hours on it. As usual, before jumping into&#xD;
conclusions, I did some research, and luckily enough I found a good post on the WHS &lt;a href="http://social.microsoft.com/Forums/en-US/whsfaq/thread/cdb387f1-9baa-4ae3-a74b-ff351dc1c0bf"&gt;forums&lt;/a&gt; over&#xD;
at Microsoft’s.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://blog.goeran.no/content/binary/WindowsLiveWriter/ReinstallingWindowsHomeServersystemdisk_12CCB/IMG_1344_2.jpg"&gt;&#xD;
            &lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="IMG_1344" border="0" alt="IMG_1344" src="http://blog.goeran.no/content/binary/WindowsLiveWriter/ReinstallingWindowsHomeServersystemdisk_12CCB/IMG_1344_thumb.jpg" width="504" height="336"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt; &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The cool thing about WHS is that it’s designed to take care of your data. It’s by&#xD;
design enabled to handle a crash on the system disk. If your system disk crashes,&#xD;
you can just replace the disk with a new one and reinstall the system. During the&#xD;
installation process, it will discover your other disks from the storage pool, and&#xD;
based on them it will be able to recover all your data. You’ll have to use the “Server&#xD;
Reinstallation” option while installing WHS.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The process&#xD;
&lt;/h3&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Buy a new disk – I bought a 1 TB disk&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Shutdown the system&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Replace the old drive with the new one&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Boot up the system from the WHS DVD&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Choose the “Server Reinstallation” option&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
The Drive Extender rebuilds your data from the storage pool&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Create user accounts, install add ins etc.&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
Read the forum &lt;a href="http://social.microsoft.com/Forums/en-US/whsfaq/thread/cdb387f1-9baa-4ae3-a74b-ff351dc1c0bf"&gt;post&lt;/a&gt; in&#xD;
detail, and notice the caveats; when doing this you lose the backup database, installed&#xD;
add ins etc. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
While doing research I also checked if people had experience with replacing the system&#xD;
disk using imaging tools like Norton Ghost and Acronis True Image. There seemed to&#xD;
be &lt;a href="http://social.microsoft.com/Forums/en-US/whssoftware/thread/8cf0ca84-93dc-4672-9ae6-e813a9a71a60"&gt;mixed&#xD;
results&lt;/a&gt; out there, and it’s &lt;a href="http://social.microsoft.com/Forums/en-US/whssoftware/thread/8cf0ca84-93dc-4672-9ae6-e813a9a71a60"&gt;not&#xD;
supported&lt;/a&gt; by WHS. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
And before you go assembling your own WHS I recommend that you go read the &lt;a href="http://mswhs.com/documentation/"&gt;white&#xD;
papers&lt;/a&gt;!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Here are some other WHS resources:&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://www.wegotserved.com/"&gt;http://www.wegotserved.com/&lt;/a&gt;&#xD;
          &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://blogs.technet.com/homeserver/"&gt;http://blogs.technet.com/homeserver/&lt;/a&gt;&#xD;
          &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://www.microsoft.com/windows/products/winfamily/windowshomeserver/default.mspx"&gt;Windows&#xD;
Home Server Product website&lt;/a&gt;&#xD;
          &lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
Happy hacking!&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=5aaf56ce-cbe5-4df1-99e2-55f606d65a8d"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IDQ4QmhF0Y8:ZFDh_Sd3EsM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IDQ4QmhF0Y8:ZFDh_Sd3EsM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=IDQ4QmhF0Y8:ZFDh_Sd3EsM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IDQ4QmhF0Y8:ZFDh_Sd3EsM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IDQ4QmhF0Y8:ZFDh_Sd3EsM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IDQ4QmhF0Y8:ZFDh_Sd3EsM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/IDQ4QmhF0Y8" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</comments>
      <category>smart home</category>
      <category>WHS</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,5aaf56ce-cbe5-4df1-99e2-55f606d65a8d.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=46f29e55-5369-4dbc-8f60-2bd65e1c5fa4</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=46f29e55-5369-4dbc-8f60-2bd65e1c5fa4</wfw:commentRss>
      <slash:comments>4</slash:comments>
      
      <title>A Software Craftsman&amp;rsquo;s 200$ Bookshelf Upgrade!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/Dbtxn13Vjrc/PermaLink,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</link>
      <pubDate>Thu, 28 May 2009 10:50:18 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
About three weeks ago, I asked my readers and some people in the Norwegian developer&#xD;
community about &lt;a href="http://blog.goeran.no/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx"&gt;what&#xD;
books they have in their bookshelf&lt;/a&gt;. The response was good, and I ended up with&#xD;
many good book recommendations.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Today I placed a new order on Amazon, and spent 200$ to upgrade my bookshelf. If you&#xD;
read further, you’ll see which books I ordered.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;&#xD;
            &lt;a href="http://www.amazon.com/gp/product/0201733862" target="_blank"&gt;Software&#xD;
Craftsmanship: The New Imperative&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/strong&gt;&#xD;
          &lt;i&gt;Pete McBreen&lt;/i&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“This book is the foundation of the Craftsmanship movement that seem to get momentum&#xD;
these days (and that is a good thing). “Software craftsmanship” sounds nice and has&#xD;
a positive ring to it, so it does not seem to be hard to endorse. But for Pete McBreen&#xD;
software craftsmanship is more than just taking your job serious. It’s a way to organize&#xD;
teams, a way to run projects, a way to run the whole industry, a way to organize learning,&#xD;
and a new way to look at developers. I really like many of his ideas, and I hope people&#xD;
like the Craftsmanship movement not just because it sounds nice, but because they&#xD;
know what this book is about. Read it and see what you think of “Software engineering”&#xD;
when you’re done.” – &lt;a href="http://tore.vestues.no/recommended-books/" target="_blank"&gt;Tore&#xD;
Vestues&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;&#xD;
            &lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243507682&amp;amp;sr=1-1" target="_blank"&gt;Working&#xD;
Effectively with Legacy Code&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/strong&gt;&#xD;
          &lt;i&gt;Michael C. Feathers&lt;/i&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“Don’t be scared away just because the title has the word “legacy” in it. This book&#xD;
is not about VB6 or Fortran. Not at all! It’s probably the best book I’ve read about&#xD;
writing automated tests. It is about how to work with code that is not tested (which&#xD;
is Feathers definition of legacy code). And it is about testing in general. If you&#xD;
want to write tests for code that is not previously tested (or written in a way that&#xD;
makes it testable), this book is for you.” – &lt;a href="http://tore.vestues.no/recommended-books/" target="_blank"&gt;Tore&#xD;
Vestues&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;&#xD;
            &lt;a href="http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243507704&amp;amp;sr=1-1" target="_blank"&gt;Test&#xD;
Driven Development: By Example&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/strong&gt;&#xD;
          &lt;i&gt;Kent Beck &#xD;
&lt;br&gt;&lt;/i&gt;Kent Beck is the man behind design patterns and TDD. Do I need to say more? If&#xD;
you don’t know his work, have a look at his &lt;a href="http://blip.tv/file/1163850" target="_blank"&gt;presentation&#xD;
from RailsConf 08&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;&#xD;
            &lt;a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243507725&amp;amp;sr=1-1" target="_blank"&gt;Extreme&#xD;
Programming Explained: Embrace Change&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/strong&gt;&#xD;
          &lt;i&gt;Kenth Beck&lt;/i&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“Extreme programming is beautiful. Not only because it uses the well known practices&#xD;
of TDD, CI, Pair programming and so on. Xp is beautiful because it understands that&#xD;
practices do not stand on its own. You need a mindset. The mindset is expressed through&#xD;
the Xp Values, and throughout the entire book. Xp is close to a philosophy. Read the&#xD;
book and I’m sure you will see software development in a slightly different way.”&#xD;
– &lt;a href="http://tore.vestues.no/recommended-books/" target="_blank"&gt;Tore Vestues&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;&#xD;
            &lt;a href="http://www.amazon.com/gp/product/0201699699/" target="_blank"&gt;Agile&#xD;
Software Development&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/strong&gt;&#xD;
          &lt;i&gt;Alistair Cockburn&lt;/i&gt;&#xD;
          &lt;br&gt;&#xD;
Twitter sphere is amazing. I got this recommendation from my online friend &lt;a href="http://twitter.com/liammclennan" target="_blank"&gt;Liam&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Here is a review from Amazon:&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“Every fifteen years or so, a great book pops up that describes what projects are&#xD;
really like. There was Brooks, then DeMarco and Lister, and now there’s Cockburn.&#xD;
&lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
Why is there such a gap between these great books? Possibly because the message they&#xD;
contain isn’t the easy-to-digest dictate: “run your project this way and everything&#xD;
will be fine.” Instead these books all focus on the fundamentals of projects: people&#xD;
and the way they work together. These books treat people as people, and not replaceable&#xD;
parts in a process. The books accept people’s foibles and inconsistencies, and work&#xD;
out how to work with them, rather than how to try to stamp them out. The books ask:&#xD;
how can we help these funky people work better together to produce great software?&#xD;
&lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
Agile Software Development has some great answers, which makes it a significant book.&#xD;
It deals with the issue that programming is essentially communicating. It looks at&#xD;
the success factors of individuals, and how to help align the project with these.&#xD;
It discusses practical ways to reduce the latency of communication (do you know how&#xD;
much each extra minute taken finding things out costs on a 12 person project? How&#xD;
do you line your walls with information radiators?) The book mines the metaphor of&#xD;
development as a cooperative team game, and looks at development organizations as&#xD;
a community, where good citizenship pays.” – &lt;a href="http://www.amazon.com/Agile-Software-Development/product-reviews/0201699699/ref=dp_top_cm_cr_acr_txt?ie=UTF8&amp;amp;showViewpoints=1" target="_blank"&gt;Dave&#xD;
Thomas&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
I want to thank all of you how responded to my post, and my twittering. If you wondering;&#xD;
the total cost of the books was 160$, and 40$ in shipment L&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=46f29e55-5369-4dbc-8f60-2bd65e1c5fa4"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=Dbtxn13Vjrc:9mMX7iEK1Ck:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=Dbtxn13Vjrc:9mMX7iEK1Ck:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=Dbtxn13Vjrc:9mMX7iEK1Ck:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=Dbtxn13Vjrc:9mMX7iEK1Ck:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=Dbtxn13Vjrc:9mMX7iEK1Ck:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=Dbtxn13Vjrc:9mMX7iEK1Ck:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/Dbtxn13Vjrc" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</comments>
      <category>books</category>
      <category>craftsmanship</category>
      <category>programming</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,46f29e55-5369-4dbc-8f60-2bd65e1c5fa4.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=b2dd0c08-6394-46cd-8bc9-83181a94efda</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=b2dd0c08-6394-46cd-8bc9-83181a94efda</wfw:commentRss>
      
      <title>Capgemini Norway&amp;rsquo;s technology blog is online!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/338BNsIr7Y8/PermaLink,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</link>
      <pubDate>Wed, 13 May 2009 13:53:49 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
My employer, Capgemini, just released a &lt;a href="http://www.no.capgemini.com/teknologiblogg/" target="_blank"&gt;Norwegian&#xD;
technology blog&lt;/a&gt;. We have been working on this project for a while and have finally&#xD;
released it! Puh!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.no.capgemini.com/teknologiblogg/2009/05/teknisk_gjeld.php" target="_blank"&gt;My&#xD;
first post&lt;/a&gt; on this blog was about &lt;a href="http://www.youtube.com/watch?v=pqeJFYwnkjE" target="_blank"&gt;technical&#xD;
debt&lt;/a&gt;. I was so inspired by Ward Cunningham’s metaphor that I just had to write&#xD;
about it. Anyway, the content of the blog is in Norwegian. If you are a non-Norwegian&#xD;
reader, it’s probably not in your area of interest.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Feel free to visit &lt;a href="http://www.no.capgemini.com/teknologiblogg/" target="_blank"&gt;our&#xD;
blog&lt;/a&gt; and &lt;a href="http://twitter.com/capgemininorge" target="_blank"&gt;follow us&#xD;
on twitter&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=b2dd0c08-6394-46cd-8bc9-83181a94efda"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=338BNsIr7Y8:ru8rm3vA_SY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=338BNsIr7Y8:ru8rm3vA_SY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=338BNsIr7Y8:ru8rm3vA_SY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=338BNsIr7Y8:ru8rm3vA_SY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=338BNsIr7Y8:ru8rm3vA_SY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=338BNsIr7Y8:ru8rm3vA_SY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/338BNsIr7Y8" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</comments>
      <category>capgemini</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,b2dd0c08-6394-46cd-8bc9-83181a94efda.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=6295c902-e3c8-4e36-9683-4002ac5e9021</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=6295c902-e3c8-4e36-9683-4002ac5e9021</wfw:commentRss>
      
      <title>UncleBob&amp;rsquo;s keynote from RailsConf2009 &amp;ndash; the most inspiring talk I&amp;rsquo;ve ever heard!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/CAFt68kvS4A/PermaLink,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</link>
      <pubDate>Tue, 12 May 2009 20:29:38 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
If you are a software developer and consider yourself as a professional, you should&#xD;
watch this presentation. Robert C. Martin aka UncleBob has been a programmer for 40&#xD;
years, written tons of &lt;a href="http://www.objectmentor.com/resources/omi_reports_index.html" target="_blank"&gt;articles&lt;/a&gt; and&#xD;
some really good &lt;a href="http://blog.goeran.no/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx"&gt;books&lt;/a&gt;.&#xD;
He has worked very hard to promote professionalism and craftsmanship to software developers.&#xD;
In this keynote you’ll see him talk about that. Watch and learn!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;center&gt;&#xD;
          &lt;script type="text/javascript" src="http://blip.tv/scripts/pokkariPlayer.js?ver=2008010901"&gt;&#xD;
          &lt;/script&gt;&#xD;
          &lt;script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&amp;amp;posts_id=2099970&amp;amp;source=3&amp;amp;autoplay=true&amp;amp;file_type=flv&amp;amp;player_width=504&amp;amp;player_height=360"&gt;&#xD;
          &lt;/script&gt;&#xD;
          &lt;div id="blip_movie_content_2099970"&gt;&#xD;
            &lt;a onclick="play_blip_movie_2099970(); return false;" href="http://blip.tv/file/get/RailsConf-RailsConf09RobertMartinWhatKilledSmalltalkCouldKillRuby751.flv" rel="enclosure"&gt;&#xD;
              &lt;img title="Click to play" height="360" alt="Video thumbnail. Click to play" src="http://blip.tv/file/get/RailsConf-RailsConf09RobertMartinWhatKilledSmalltalkCouldKillRuby751.flv.jpg" width="504" border="0"&gt;&lt;/img&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;a onclick="play_blip_movie_2099970(); return false;" href="http://blip.tv/file/get/RailsConf-RailsConf09RobertMartinWhatKilledSmalltalkCouldKillRuby751.flv" rel="enclosure"&gt;Click&#xD;
to play&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;a href="http://railsconf.blip.tv/file/2089545/" target="_blank"&gt;Click to goto source&lt;/a&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/center&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Thanks to &lt;a href="http://blog.objectmentor.com/" target="_blank"&gt;UncleBob&lt;/a&gt; for&#xD;
giving us such a great presentation. And thanks to &lt;a href="http://iridescence.no/" target="_blank"&gt;Fredrik&lt;/a&gt; for&#xD;
pointing out this video for me.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=6295c902-e3c8-4e36-9683-4002ac5e9021"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=CAFt68kvS4A:P6QN_CvC3Xg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=CAFt68kvS4A:P6QN_CvC3Xg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=CAFt68kvS4A:P6QN_CvC3Xg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=CAFt68kvS4A:P6QN_CvC3Xg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=CAFt68kvS4A:P6QN_CvC3Xg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=CAFt68kvS4A:P6QN_CvC3Xg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/CAFt68kvS4A" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</comments>
      <category>agile</category>
      <category>webcast</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,6295c902-e3c8-4e36-9683-4002ac5e9021.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=b0df5924-fb90-4506-b2e7-1e15a5e981c6</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=b0df5924-fb90-4506-b2e7-1e15a5e981c6</wfw:commentRss>
      <slash:comments>12</slash:comments>
      
      <title>A Software Craftsman&amp;rsquo;s Bookshelf</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/s_lXvJjy61k/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</link>
      <pubDate>Tue, 05 May 2009 18:58:33 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Every now and then I get the question about what books I recommend on the topic of&#xD;
programming and software development. As I try to practice the DRY (&lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank"&gt;Don‘t&#xD;
repeat yourself&lt;/a&gt;) principle while writing code, I‘ll also intend to do it in real&#xD;
life. And by answering this question in form of a blog post, I‘ll be able to redirect&#xD;
future questioners here. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://blog.goeran.no/content/binary/WindowsLiveWriter/Asoftwarecraftsmansbookshelf_11F87/IMG_5895.jpg"&gt;&#xD;
            &lt;img title="IMG_5895" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="410" alt="IMG_5895" src="http://blog.goeran.no/content/binary/WindowsLiveWriter/Asoftwarecraftsmansbookshelf_11F87/IMG_5895_thumb.jpg" width="504" border="0"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt; &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
I’ve assembled a list of books that I’ve read or that’s in my books-to-read queue.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The list&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The list is sorted by my favorite books.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548177&amp;amp;sr=8-1" target="_blank"&gt;Clean&#xD;
Code&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;i&gt;Robert C. Martin, also known as Uncle Bob &#xD;
&lt;br&gt;&lt;/i&gt;I finished reading this book a week ago and I have only one thing to say, it’s&#xD;
a masterpiece. If you are a professional programmer, you should read this book. I&#xD;
learned many, many neat tricks reading this book. Uncle Bob have 40 years of experience&#xD;
as a programmer, and he worked very hard not to become a business wonk, and this made&#xD;
him sharp like a knife. Read this book, it will give you a clear perspective on how&#xD;
to write quality code. Expect to read lots of code samples, and work hard to grasp&#xD;
the content. I’m going to convince every programmer I work with to read this book!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548199&amp;amp;sr=1-1" target="_blank"&gt;The&#xD;
Pragmatic Programmer&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;i&gt;Andy Hunt and Dave Thomas&lt;/i&gt;&#xD;
          &lt;br&gt;&#xD;
Hunt and Thomas are great storytellers and you’ll be blown away with their wisdom&#xD;
– it seems like they have been programmers forever! I like this book because it‘s&#xD;
hands-on and lots of the advice you get by reading it, you can put into practice in&#xD;
your daily job. The book tells you everything you need to know in order to become&#xD;
a good programmer. &#xD;
&lt;br&gt;&lt;br&gt;&#xD;
They also push hard that programming is not only science, but a craft, and you need&#xD;
to practice it a lot in order to become a master - hence the slogan “From journeyman&#xD;
to master”. The book will provide you with tons of practical tips and the first one&#xD;
is “Care about your craft”. If I ever get responsible for a team of developers - hey,&#xD;
who the heck would put me in charge? :p, I’ll give this book to every one of them&#xD;
and then send them home and ask them not to come back before they have completed the&#xD;
book! &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548227&amp;amp;sr=1-1" target="_blank"&gt;Design&#xD;
Patterns: Elements of Reusable Obect-Oriented Software&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;i&gt;Eric Gamma, Richard Helm. Raplh Johnson, John M. Vlissides AKA. The Gang of Four&lt;/i&gt;&#xD;
          &lt;br&gt;&#xD;
The first book ever to write about design patterns, it was released back in 1994 and&#xD;
it documented 23 patterns. I have to admit that I had to read this book several times&#xD;
to grasp most of the ideas, but it was worthwhile. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This book is not for beginners, but for developers with experience from OO (Object&#xD;
Oriented) languages and design. You probably find people argue that this book is not&#xD;
applicable today because the patterns were discovered in the time of C++, which don‘t&#xD;
contain modern language features like Generics and Events like we have in C# today.&#xD;
I disagree with these people because the core underlying principles are just plain&#xD;
old Object Orientation, but I can understand the argument. The samples in this book&#xD;
might not be as relevant for C# as they are for C++, and if you apply some of these&#xD;
patterns in a modern language, you obviously need to think about the features you&#xD;
have available in the language, and use them. There is a reason that we have the event&#xD;
language feature in C# today – so it’s easier to implement the observer pattern! If&#xD;
you learn and understand the observer, you‘ll also learn that loosely coupled code&#xD;
is harder to read and debug. The book is a good reference and contains the most general&#xD;
patterns you need to know about, but remember that even though you use a language&#xD;
with built-in language feature for some of these patterns, you should know about the&#xD;
pros and cons in order to make good design decisions! This is a good educational book.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548296&amp;amp;sr=1-1" target="_blank"&gt;Domain-Driven&#xD;
Design: Tackling Complexity in the Heart of Software&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;i&gt;Eric Evans &#xD;
&lt;br&gt;&lt;/i&gt;I think this one is about to become one of the most important books out there&#xD;
on the topic of OO design and modeling. It‘s been a while since Evans published this&#xD;
book, but it seems to get more and more attention nowadays, and more and more people&#xD;
I talk to practice DDD (Domain Driven Design). I think the most important thing Evans&#xD;
teaches us is what he calls the ubiquitous language. The books also teach good modeling&#xD;
practices, and documents lots of useful patterns. This book made me revisit Object&#xD;
Orientation. You should read it, if you are experienced with OO design and programming.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548399&amp;amp;sr=1-1" target="_blank"&gt;Head&#xD;
First: Design Patterns&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;i&gt;Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra &#xD;
&lt;br&gt;&lt;/i&gt;This is the design patterns ABC-book. The authors have a great talent in communicating&#xD;
complex ideas in a way that‘s easy for the readers to understand. The book contains&#xD;
some of the same patterns as the GoF-book and the code samples are mostly in Java&#xD;
as well. Highly recommended for beginners on the topic of design patterns! &#xD;
&lt;br&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Windows-Presentation-Foundation-Unleashed-WPF/dp/0672328917/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548422&amp;amp;sr=1-1" target="_blank"&gt;Windows&#xD;
Presentation Foundation Unleashed&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;em&gt;Adam Nathan&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
The only book I‘ve read about Windows Presentation Foundation, and It gives a solid&#xD;
introduction to the technology. I admit that I haven’t read the book from chapter&#xD;
to chapter, but use it frequently as a reference when I need to learn new neat features&#xD;
about WPF. The code samples in the book even have color highlighting! This book should&#xD;
be in every WPF/Silverlight developer’s bookshelf.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Best-Software-Writing-Selected-Introduced/dp/1590595009/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548570&amp;amp;sr=1-1" target="_blank"&gt;The&#xD;
best Software Writing&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;em&gt;Joel Spolsky&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
Mr. Spolsky has assembled a very entertaining book of essays on the topic of software&#xD;
engineering. The essays I remember are Paul Graham’s “Great Hackers” and Eric Lippert’s&#xD;
“How many Microsoft Employees Does It Take to Change a Lightbulb?”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548603&amp;amp;sr=1-1" target="_blank"&gt;Agile&#xD;
Software Development, Principles, Patterns, and Practices&lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;em&gt;Robert C. Martin&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
I’m hooked on Uncle Bob, he is the Master Chief of programmers, and an awesome writer.&#xD;
This is a book I’ll read very soon.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548660&amp;amp;sr=1-1" target="_blank"&gt;Patterns&#xD;
of Enterprise Application Architecture&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;em&gt;Martin Fowler&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
This book is yet another book that’s on my books-to-read queue. Fowler is a notorious&#xD;
craftsman in the art of software engineering, and I’m looking forward to take a snapshot&#xD;
of his brain!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548660&amp;amp;sr=1-1" target="_blank"&gt;Code&#xD;
Complete: A Practical Handbook of Software Construction&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;em&gt;Steve McConnel&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
Have not had the chance to read this book yet, but I will sometimes soon. The word&#xD;
on the street says that this book is even better than Pragmatic Programmer – now we&#xD;
have to see about that!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;&#xD;
            &lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241548740&amp;amp;sr=1-2" target="_blank"&gt;Applying&#xD;
Domain-Driven Design and Patterns: With Examples in C# and .NET&lt;/a&gt;&#xD;
          &lt;/b&gt;&#xD;
          &lt;br&gt;&#xD;
          &lt;em&gt;Jimmy Nilsson&lt;/em&gt;&#xD;
          &lt;br&gt;&#xD;
I haven’t had the opportunity to read this book yet, but people that have read it&#xD;
says it’s a more hands-on and practical book than Events book. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
 &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This is my list, for now, but I’m continuously seeking more knowledge in order to&#xD;
become a master in the craftsmanship of software development. While assembling the&#xD;
list I just realized that I don’t have a book about Test Driven Development – I should&#xD;
do something about that.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It would be interesting to hear what you and other fellow developers are reading,&#xD;
and what you have in your bookshelf – so therefore I‘ll start yet another meme and&#xD;
I invite you and the following people to answer:&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://jonas.follesoe.no" target="_blank"&gt;Jonas Follesø&lt;/a&gt; – Silverlight&#xD;
guru, vivid speaker, long time partner in crime and friend! &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://tore.vestues.no/recommended-books/" target="_blank"&gt;Tore Vestues&lt;/a&gt; –&#xD;
wise guy and friend. I think of him as one of the most skilled craftsmen I personally&#xD;
know (It seems like Tore already had a book list, I’ve updated the link) &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://andersnoras.com/" target="_blank"&gt;Anders Norås&lt;/a&gt; – Admirable and&#xD;
skilled software craftsman &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://www.ingebrigtsen.info/" target="_blank"&gt;Einar Ingebrigtsen&lt;/a&gt; – The&#xD;
Norwegian Scott Hanselman! &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://blog.fohjin.com/" target="_blank"&gt;Mark Nijhof&lt;/a&gt; – Seriously skilled&#xD;
software craftsman and a community hero &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://ox.no/" target="_blank"&gt;Håvard Stranden&lt;/a&gt; – Fellow member of NNUG&#xD;
in Trondheim, active blogger and speaker &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://borge3000.no/" target="_blank"&gt;Børge Hansen&lt;/a&gt; – Active blogger and&#xD;
architect working for Microsoft Norway &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://sondreb.com/blog/" target="_blank"&gt;Sondre Bjellås&lt;/a&gt; – Friend, thinker,&#xD;
mr. Robotics and the Norwegian Geek of the Year 2008 &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://iridescence.no/" target="_blank"&gt;Fredik Kalseth&lt;/a&gt; – Highly active&#xD;
blogger about .NET, design patterns, testing etc. and a skilled software craftsman &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://larswilhelmsen.com/2009/05/12/the-book-shelf-of-a-connected-systems-mvp/" target="_blank"&gt;Lars&#xD;
Wilhelmsen&lt;/a&gt; – Highly active in the Microsoft community and the new master chief&#xD;
of the Norwegian .NET User Group. Lars has now responded to this post. Click the link&#xD;
to watch his bookshelf  &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://www.joaroyen.com/" target="_blank"&gt;Joar Øyen&lt;/a&gt; – Friend, MVP and&#xD;
master chief of NNUG Trondheim &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://blog.fossmo.net/" target="_blank"&gt;Pål Fossmo&lt;/a&gt; – Friend, MVP, good&#xD;
speaker and a skilled software craftsman. Pål has &lt;a href="http://blog.fossmo.net/post/A-Software-Craftsmane28099s-bookshelf.aspx" target="_blank"&gt;responded&#xD;
to this post&lt;/a&gt; &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://www.kjetilk.com/" target="_blank"&gt;Kjetil Klaussen&lt;/a&gt; – Friend, good&#xD;
speaker and a skilled software craftsman &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://brodwall.com/johannes/blog/" target="_blank"&gt;Johannes Brodwall&lt;/a&gt; –&#xD;
Norwegian agile guru! &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=b0df5924-fb90-4506-b2e7-1e15a5e981c6"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=s_lXvJjy61k:uGtP43XjA1o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=s_lXvJjy61k:uGtP43XjA1o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=s_lXvJjy61k:uGtP43XjA1o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=s_lXvJjy61k:uGtP43XjA1o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=s_lXvJjy61k:uGtP43XjA1o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=s_lXvJjy61k:uGtP43XjA1o:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/s_lXvJjy61k" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</comments>
      <category>books</category>
      <category>craftsmanship</category>
      <category>programming</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,b0df5924-fb90-4506-b2e7-1e15a5e981c6.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=6d9cc985-68d6-4fff-a55f-3e4d1f280a19</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=6d9cc985-68d6-4fff-a55f-3e4d1f280a19</wfw:commentRss>
      
      <title>Speaking at agile seminar tomorrow!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/N_wFI7PnavY/PermaLink,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</link>
      <pubDate>Sun, 03 May 2009 14:56:55 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Tomorrow I’m going to give a talk at &lt;a href="http://dataforeningen.no/-mwRbUWj.ips" target="_blank"&gt;Smidig&#xD;
utvikling Trondheim 2009&lt;/a&gt;, which is a seminar about agile. I’m really looking forward&#xD;
to this seminar because of good content and good speakers. There are some big names&#xD;
keynote speakers as well. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
I’m not going to spoil too much of my talk, but I can say I’m going to talk about&#xD;
how teams developing software can be able to work in parallel if they apply loose&#xD;
coupling. &#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=6d9cc985-68d6-4fff-a55f-3e4d1f280a19"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=N_wFI7PnavY:MR5FvXMgO0Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=N_wFI7PnavY:MR5FvXMgO0Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=N_wFI7PnavY:MR5FvXMgO0Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=N_wFI7PnavY:MR5FvXMgO0Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=N_wFI7PnavY:MR5FvXMgO0Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=N_wFI7PnavY:MR5FvXMgO0Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/N_wFI7PnavY" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</comments>
      <category>agile</category>
      <category>Presentation</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,6d9cc985-68d6-4fff-a55f-3e4d1f280a19.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=fe01bed3-c526-4b76-bb91-f82f4792aece</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=fe01bed3-c526-4b76-bb91-f82f4792aece</wfw:commentRss>
      <slash:comments>13</slash:comments>
      
      <title>The best way to learn new API&amp;rsquo;s; TDD!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/fCvsOAi5dP8/PermaLink,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</link>
      <pubDate>Sat, 02 May 2009 13:23:16 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
In this post I will tell you a story about how I used TDD (Test Driven Development)&#xD;
to learn new a new API, and how I successfully managed to accomplish my task before&#xD;
expected, and delivered 100% working code (no defects), even though I did something&#xD;
I’ve never done before – interested? I thought so ;) &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In the project I’m currently working on, I was given the task to implement a web service&#xD;
that integrated with a directory service using the LDAP protocol. This was something&#xD;
I’ve never done so far in my career, so I thought it as a fun challenge. The task&#xD;
was simple; I had to implement CR&lt;s&gt;U&lt;/s&gt;D (create, read and delete) behaviors to&#xD;
manipulate entries in the directory. My main concern and the obvious show stopper&#xD;
were to figure out how to integrate with the directory service using the LDAP protocol.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
As always, before I jump into conclusions, I sat down and started to think about how&#xD;
to solve this task. I had a gut feeling that told me I’ve read about this somewhere,&#xD;
about what’s the best way to learn new API’s. And after while it suddenly came to&#xD;
my mind! – It’s called &lt;i&gt;learning tests&lt;/i&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“Jim Newkirk reported on a project in which Learning Tests were routinely written.&#xD;
When new releases of the package arrived, first the tests were run (and fixed, if&#xD;
necessary.) If the tests didn’t run, there was no sense running the application because&#xD;
it certainly wouldn’t run. Once the tests ran, the application ran every time.” –&#xD;
Kent Beck, Test-Driven development by example&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Since I can’t reveal more about my work, I’m going to use another example in this&#xD;
story. I decided it would be fun to learn how to integrate with Twitter using their&#xD;
API’s and C#. Since integrating with Twitter is completely new for me, the situation&#xD;
will be analogues to the one I had solving the LDAP integration task for the customer.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Again, before jumping into conclusion, I started out doing some research, and ended&#xD;
up on Twitter’s &lt;a href="http://apiwiki.twitter.com/" target="_blank"&gt;APIWiki&lt;/a&gt;.&#xD;
The WIKI contained lots of good information and after a few minutes I learned that&#xD;
their API’s is built upon the HTTP protocol and that its REST based. In the WIKI they&#xD;
had listed up 3&lt;sup&gt;rd&lt;/sup&gt; party libraries for several different platforms, and&#xD;
I found a few for .NET, and decided to use an Open Source library called Twitterizer.&#xD;
My rationale for using a library was if the library is good, it would be easier for&#xD;
me to produce working code, and I’ll probably do it faster than using the built-in&#xD;
HTTP libraries in the .NET framework.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If you going to create a Twitter client or another type of application that integrates&#xD;
with Twitter, you probably have to figure out how to;&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Authenticate and logon to Twitter &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Update status &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Get status from friends &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Get list of followers &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;h3&gt;Learn to use the library&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
If you are used to TDD, you start out writing tests before any production code. You&#xD;
are probably also familiar with Uncle Bob’s &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd" target="_blank"&gt;Three&#xD;
Laws of TDD&lt;/a&gt;;&#xD;
&lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
You are not allowed to write any production code unless it is to make a failing unit&#xD;
test pass. &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
You are not allowed to write any more of a unit test than is sufficient to fail; and&#xD;
compilation failures are failures. &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
You are not allowed to write any more production code than is sufficient to pass the&#xD;
one failing unit test. &#xD;
&lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
When writing code, I like to work like this, so I started out writing failing tests&#xD;
to document what I had to learn in order to integrate with Twitter. The first, and&#xD;
the obvious test, was to figure out how to authenticate with Twitter. I also added&#xD;
three more failing tests; update status, get friends status and get followers. Here&#xD;
is what I ended up with;&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;&#xD;
          &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Authenticate()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Get_status_from_friends()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Get_followers()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Update_status()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
I know, I broke Uncle Bob’s law 2 by writing four tests before any production code,&#xD;
but I’m pragmatic, my goal was to solve my task, not follow the laws like a slave.&#xD;
The positive outcome from breaking law was that I now had decomposed the Twitter integration&#xD;
task, into four more fine granulated tasks. I considered this my to-do list. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The next obvious step was to learn the Twitterizer API, which I did by using the Object&#xD;
Browser in Visual Studio. After fiddling around for a while, I was ready to start&#xD;
solving the first task; how to authenticate a user in order to logon to Twitter. I&#xD;
tested this by login to Twitter, and call the API for receiving status from friends.&#xD;
If the test received status from friends, I could assume the login was successful.&#xD;
After this test passed, the rest was a walk in the park, and here is what I ended&#xD;
up with;&#xD;
&lt;/p&gt;&#xD;
        &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;&#xD;
          &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Authenticate()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; Scenario.New(&lt;span style="color: #006080"&gt;"Logon&#xD;
Twitter"&lt;/span&gt;, scenario =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; Twitter&#xD;
twitterClient = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; scenario.Given(&lt;span style="color: #006080"&gt;"user&#xD;
is not logged on"&lt;/span&gt;);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; scenario.When(&lt;span style="color: #006080"&gt;"the&#xD;
user logs on"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; twitterClient&#xD;
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Twitter(username, password));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; scenario.Then(&lt;span style="color: #006080"&gt;"it&#xD;
should be possible to call API"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; twitterClient.Status.FriendsTimeline());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; }).Execute();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Get_status_from_friends()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt; Scenario.New(&lt;span style="color: #006080"&gt;"Get&#xD;
status from friends"&lt;/span&gt;, scenario =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum24" style="color: #606060"&gt; 24:&lt;/span&gt; TwitterStatusCollection&#xD;
friendsStatus = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum25" style="color: #606060"&gt; 25:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum26" style="color: #606060"&gt; 26:&lt;/span&gt; scenario.Given(&lt;span style="color: #006080"&gt;"the&#xD;
user is logged on"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum27" style="color: #606060"&gt; 27:&lt;/span&gt; twitter&#xD;
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Twitter(username, password));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum28" style="color: #606060"&gt; 28:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum29" style="color: #606060"&gt; 29:&lt;/span&gt; scenario.When(&lt;span style="color: #006080"&gt;"friends&#xD;
status is requested"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum30" style="color: #606060"&gt; 30:&lt;/span&gt; friendsStatus&#xD;
= twitter.Status.FriendsTimeline());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum31" style="color: #606060"&gt; 31:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum32" style="color: #606060"&gt; 32:&lt;/span&gt; scenario.Then(&lt;span style="color: #006080"&gt;"friends&#xD;
status should be received"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum33" style="color: #606060"&gt; 33:&lt;/span&gt; friendsStatus.Count.ShouldNotEqual(0));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum34" style="color: #606060"&gt; 34:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum35" style="color: #606060"&gt; 35:&lt;/span&gt; }).Execute();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum36" style="color: #606060"&gt; 36:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum37" style="color: #606060"&gt; 37:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum38" style="color: #606060"&gt; 38:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum39" style="color: #606060"&gt; 39:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Get_followers()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum40" style="color: #606060"&gt; 40:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum41" style="color: #606060"&gt; 41:&lt;/span&gt; Scenario.New(&lt;span style="color: #006080"&gt;"Get&#xD;
users' followers"&lt;/span&gt;, scenario =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum42" style="color: #606060"&gt; 42:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum43" style="color: #606060"&gt; 43:&lt;/span&gt; TwitterUserCollection&#xD;
followers = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum44" style="color: #606060"&gt; 44:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum45" style="color: #606060"&gt; 45:&lt;/span&gt; scenario.Given(&lt;span style="color: #006080"&gt;"the&#xD;
user is logged on"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum46" style="color: #606060"&gt; 46:&lt;/span&gt; twitter&#xD;
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Twitter(username, password));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum47" style="color: #606060"&gt; 47:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum48" style="color: #606060"&gt; 48:&lt;/span&gt; scenario.When(&lt;span style="color: #006080"&gt;"followers&#xD;
is requested"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum49" style="color: #606060"&gt; 49:&lt;/span&gt; followers&#xD;
= twitter.User.Followers());&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum50" style="color: #606060"&gt; 50:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum51" style="color: #606060"&gt; 51:&lt;/span&gt; scenario.Then(&lt;span style="color: #006080"&gt;"followers&#xD;
information should be received"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum52" style="color: #606060"&gt; 52:&lt;/span&gt; followers.Count.ShouldNotEqual(0));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum53" style="color: #606060"&gt; 53:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum54" style="color: #606060"&gt; 54:&lt;/span&gt; }).Execute();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum55" style="color: #606060"&gt; 55:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum56" style="color: #606060"&gt; 56:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum57" style="color: #606060"&gt; 57:&lt;/span&gt; [Test]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum58" style="color: #606060"&gt; 58:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Update_status()&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum59" style="color: #606060"&gt; 59:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum60" style="color: #606060"&gt; 60:&lt;/span&gt; Scenario.New(&lt;span style="color: #006080"&gt;"Update&#xD;
user status"&lt;/span&gt;, scenario =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum61" style="color: #606060"&gt; 61:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum62" style="color: #606060"&gt; 62:&lt;/span&gt; scenario.Given(&lt;span style="color: #006080"&gt;"the&#xD;
user is logged on"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum63" style="color: #606060"&gt; 63:&lt;/span&gt; twitter&#xD;
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Twitter(username, password));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum64" style="color: #606060"&gt; 64:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum65" style="color: #606060"&gt; 65:&lt;/span&gt; scenario.When(&lt;span style="color: #006080"&gt;"status&#xD;
is updated"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum66" style="color: #606060"&gt; 66:&lt;/span&gt; twitter.Status.Update(&lt;span style="color: #006080"&gt;"hello&#xD;
world..."&lt;/span&gt;));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum67" style="color: #606060"&gt; 67:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum68" style="color: #606060"&gt; 68:&lt;/span&gt; scenario.Then(&lt;span style="color: #006080"&gt;"status&#xD;
should be updated"&lt;/span&gt;, () =&amp;gt;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum69" style="color: #606060"&gt; 69:&lt;/span&gt; twitter.Status.Show(username).Status.Text.ShouldEqual(&lt;span style="color: #006080"&gt;"hello&#xD;
world..."&lt;/span&gt;));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum70" style="color: #606060"&gt; 70:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum71" style="color: #606060"&gt; 71:&lt;/span&gt; }).Execute();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&#xD;
              &lt;span id="lnum72" style="color: #606060"&gt; 72:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
Notice that I’ve used a C# DSL (Domain Specific Language) for describing the tests&#xD;
as scenarios. These scenario driven tests is a well known test pattern called AAA&#xD;
(Arrange, Act, and Assert). I’ve developed the C# DSL and &lt;a href="http://code.google.com/p/tinybdd/" target="_blank"&gt;open&#xD;
sourced it&lt;/a&gt; – feel free to use it. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;The workflow&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The workflow is simple. Start out by writing failing tests to document what you need&#xD;
do in order to solve your task. When I started, I had one task, integrate with Twitter,&#xD;
after writing the tests I had decomposed it into four minor tasks. This is a famous&#xD;
problem solving technique called &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Problem_solving#Some_problem-solving_techniques" target="_blank"&gt;Divide&#xD;
and Conquer&lt;/a&gt;. &lt;/i&gt;You break down a large, complex problem into smaller, solvable&#xD;
problems. When this is done, you start working on the tests and get them to pass,&#xD;
one by one.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Conclusion&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Using TDD to learn new API’s is something everyone should do. If you think about it,&#xD;
it’s exactly what you are doing when you are writing production code and using 3&lt;sup&gt;rd&lt;/sup&gt; party&#xD;
libraries today. You write some code, you compile it, and then run it. If it doesn’t&#xD;
work, you spend some time debugging. And you do this incrementally until you’ve solved&#xD;
the task. If you do it the TDD way, you save yourself from lots of debugging time&#xD;
and you end up documenting how to use the 3&lt;sup&gt;rd&lt;/sup&gt; party library. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
There are some other advantages as well. When you hand over the code over to other&#xD;
developers, they can use your learning tests to figure out the same thing you had&#xD;
to figure out, but they can do it by reading your code. Besides that, you also document&#xD;
how a 3&lt;sup&gt;rd&lt;/sup&gt; party library is supposed to work. If they change their API’s&#xD;
or introduce a bug in the next release, your tests will fail, and you can trap this.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Uncle Bob have some good arguments as well;&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“If you want to know how to call a certain API, there is a test that does it. If you&#xD;
want to know how to create a certain object, there is a test that does it. Anything&#xD;
you want to know about the existing system, there is a test that demonstrates it.&#xD;
The tests are like little design documents, little coding examples, that describe&#xD;
how the system works and how to use it.” – &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd" target="_blank"&gt;Uncle&#xD;
Bob&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
“Have you ever integrated a third party library into your project? You got a big manual&#xD;
full of nice documentation. At the end there was a thin appendix of examples. Which&#xD;
of the two did you read? The examples of course! That's what the unit tests are! They&#xD;
are the most useful part of the documentation. They are the living examples of how&#xD;
to use the code. They are design documents that are hideously detailed, utterly unambiguous,&#xD;
so formal that they execute, and they cannot get out of sync with the production code.”&#xD;
– &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd" target="_blank"&gt;Uncle&#xD;
Bob&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
So the next time you have to learn a new API, do it by exercising TDD. &#xD;
&lt;/p&gt;&#xD;
        &lt;div class="wlWriterEditableSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:ce970b0a-879b-4cf6-82a4-2d211484652e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&#xD;
          &lt;p&gt;&#xD;
Download the &lt;a href="http://blog.goeran.no/content/binary/WindowsLiveWriter/Thebestwaytolearnnewapis_142F4/LearningTestsDemo.zip" target="_blank"&gt;source&#xD;
code&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=fe01bed3-c526-4b76-bb91-f82f4792aece"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=fCvsOAi5dP8:z4utAPldtpU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=fCvsOAi5dP8:z4utAPldtpU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=fCvsOAi5dP8:z4utAPldtpU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=fCvsOAi5dP8:z4utAPldtpU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=fCvsOAi5dP8:z4utAPldtpU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=fCvsOAi5dP8:z4utAPldtpU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/fCvsOAi5dP8" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</comments>
      <category>TDD</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,fe01bed3-c526-4b76-bb91-f82f4792aece.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=6f2cde27-ee41-4b3c-821b-1234c68ef7e2</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=6f2cde27-ee41-4b3c-821b-1234c68ef7e2</wfw:commentRss>
      <slash:comments>10</slash:comments>
      
      <title>Everything is amazing, and nobody is happy&amp;hellip;</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/IvxgxhoHOh8/PermaLink,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</link>
      <pubDate>Mon, 23 Mar 2009 21:31:26 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
A colleague of mine showed me this YouTube video a week ago, and I thought was so&#xD;
much fun that I had to share it with you. Please take 4 minutes to watch the video&#xD;
- it’s worth it. You’ll see the comedian Louis C.K. talks about how ungrateful we&#xD;
are, even though we live in this amazing world with all this fancy technology that&#xD;
makes our lives easier to live. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;object width="425" height="344"&gt;&#xD;
            &lt;param name="movie" value="http://www.youtube.com/v/jETv3NURwLc&amp;amp;hl=sv&amp;amp;fs=1"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&#xD;
            &lt;embed src="http://www.youtube.com/v/jETv3NURwLc&amp;amp;hl=sv&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&#xD;
            &lt;/embed&gt;&#xD;
          &lt;/object&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Louis made some darn good points, and he made me think about how many unhappy fellow&#xD;
engineers I’ve spoken to lately – many. This made me thing about how it would be to&#xD;
work in the early days in the IT-industry, where the tools were much more primitive.&#xD;
In this age of the industry we are capable to create it-systems to automate most of&#xD;
our daily routines, but back then the computers were mostly used in the field of science.&#xD;
Nowadays even grandma can pay her bills using a web browser without leaving her home&#xD;
to visit the bank. This enables her to spend more time doing whatever she think is&#xD;
important, like watching her grandkids. This made me think about a quote I read in&#xD;
The Pragmatic Programmer.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
“Civilization advances by extending the number of important operations we can perform&#xD;
without thinking.” - Alfred North Whitehead &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So let’s do something fun; let’s have a look at how it was like to be a programmer&#xD;
50+ years ago, and try to imagine how much work it would take to get the computers&#xD;
to “work” for us back then compared to nowadays .&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Programming today and 50+ years ago &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Today there are many high level general purpose programming languages. Programming&#xD;
nowadays is more like having a conversation with the computer, and we can express&#xD;
ourselves in a language similar to English. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If you use a statically typed language like C# or Java, you need to compile the code,&#xD;
which will output assembler code (machine code) that can execute on a computer. C#&#xD;
and Java are a special case, because the assembler code runs inside a virtual machine,&#xD;
which means that the assembler code is more high level than regular X86 assembler&#xD;
code. Anyway, this abstracts us away from the nitty gritty details of machine languages,&#xD;
which is hard to program, understand, read and maintain.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So let’s do something fun, let’s implement the Fibbonaci algorithm in C# and in X86&#xD;
assembler code (machine level code).&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
C# &#xD;
&lt;br&gt;&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[]&#xD;
args)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; Console.WriteLine(&lt;span style="color: #006080"&gt;"23rd&#xD;
fibonacci number: {0}"&lt;/span&gt;, Fibonacci(23));&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; Console.ReadKey();&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Fibonacci(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; n)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; {&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (n&#xD;
== 0 || n == 1)&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; n;&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt;&#xD;
              &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Fibonacci(n&#xD;
- 1) + Fibonacci(n - 2);&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
Assembler&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&#xD;
          &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; .model&#xD;
tiny&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; .code&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; org&#xD;
100h&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; rt:&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; mov&#xD;
ax,cs&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; mov&#xD;
ds,ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; mov&#xD;
es,ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; cld&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; push&#xD;
23&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; call&#xD;
fib&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; call&#xD;
print_eax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt; ret&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; push&#xD;
bp&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; mov&#xD;
bp,sp&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; mov&#xD;
di,offset fib_array+2&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; mov&#xD;
cx,[bp+4]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum17"&gt; 17:&lt;/span&gt; loop:&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum18"&gt; 18:&lt;/span&gt; mov&#xD;
ax,[di-1]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum19"&gt; 19:&lt;/span&gt; add&#xD;
ax,[di-2]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum20"&gt; 20:&lt;/span&gt; inc&#xD;
di&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum21"&gt; 21:&lt;/span&gt; mov&#xD;
[di],ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum22"&gt; 22:&lt;/span&gt; loop&#xD;
fib_loop&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum23"&gt; 23:&lt;/span&gt; mov&#xD;
bx,[bp+4]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum24"&gt; 24:&lt;/span&gt; mov&#xD;
ax,word ptr [bx+fib_array]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum25"&gt; 25:&lt;/span&gt; mov&#xD;
[bp+4],ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum26"&gt; 26:&lt;/span&gt; pop&#xD;
bp&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum27"&gt; 27:&lt;/span&gt; ret&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum28"&gt; 28:&lt;/span&gt; t_eax:&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum29"&gt; 29:&lt;/span&gt; mov&#xD;
bp,sp&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum30"&gt; 30:&lt;/span&gt; mov&#xD;
di,offset outbyte&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum31"&gt; 31:&lt;/span&gt; mov&#xD;
ax,[bp+2]&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum32"&gt; 32:&lt;/span&gt; mov&#xD;
bx,10&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum33"&gt; 33:&lt;/span&gt; xor&#xD;
cx,cx&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum34"&gt; 34:&lt;/span&gt; p:&#xD;
xor dx,dx&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum35"&gt; 35:&lt;/span&gt; div&#xD;
bx&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum36"&gt; 36:&lt;/span&gt; add&#xD;
dl,48&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum37"&gt; 37:&lt;/span&gt; push&#xD;
dx&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum38"&gt; 38:&lt;/span&gt; inc&#xD;
cx&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum39"&gt; 39:&lt;/span&gt; test&#xD;
ax,ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum40"&gt; 40:&lt;/span&gt; jnz&#xD;
divlp&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum41"&gt; 41:&lt;/span&gt; e:&#xD;
pop ax&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum42"&gt; 42:&lt;/span&gt; stosb&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum43"&gt; 43:&lt;/span&gt; loop&#xD;
store&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum44"&gt; 44:&lt;/span&gt; mov&#xD;
byte ptr [di],'$'&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum45"&gt; 45:&lt;/span&gt; mov&#xD;
dx, offset outtxt&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum46"&gt; 46:&lt;/span&gt; mov&#xD;
ah,9&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum47"&gt; 47:&lt;/span&gt; int&#xD;
21h&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum48"&gt; 48:&lt;/span&gt; ret&#xD;
2&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum49"&gt; 49:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum50"&gt; 50:&lt;/span&gt; xt&#xD;
db "23rd Fibonacci number is "&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum51"&gt; 51:&lt;/span&gt; xt_l&#xD;
= $-outtxt+1&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum52"&gt; 52:&lt;/span&gt; yte&#xD;
db "00000000"&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum53"&gt; 53:&lt;/span&gt; array&#xD;
db 1,1&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum54"&gt; 54:&lt;/span&gt;  &lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
            &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&#xD;
              &lt;span style="color: #606060" id="lnum55"&gt; 55:&lt;/span&gt; end&#xD;
_start&lt;/pre&gt;&#xD;
            &lt;!--CRLF--&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
Pasted from: &lt;a title="http://cubbi.com/fibonacci/asm.html" href="http://cubbi.com/fibonacci/asm.html"&gt;http://cubbi.com/fibonacci/asm.html&lt;/a&gt;.&#xD;
Ps: I’m not sure if this code even works.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
And yes, I realize that the x86 instruction set is younger than 50 years, but I thought&#xD;
it would be a good example, and it’s still assembler code, which is low level enough!&#xD;
When the C# get’s executed it’s probably going to end up looking something like the&#xD;
assembler code above, and that’s the main trick of compilers - they translate high&#xD;
level languages into low level machine code and instruction sets. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This it’s a nothing more than amazing! In the modern language I used the concepts&#xD;
of recursion, functions, strong typing, classes etc. Now compare it with the Assembler&#xD;
code, which I by the way almost seems like a foreign language to me. This modern language&#xD;
really enabled me to do more with less.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So if you think that the modern languages today are crappy, or they should have been&#xD;
different in any way, you should try to think about what if we had to implement business&#xD;
applications in assembler? Compilers are one of the most technical challenging problems&#xD;
we face in our career as programmers. I think we owe the creators of modern languages&#xD;
a really big thank you!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
And if you are in a situation where you maintain crappy legacy code implemented in&#xD;
C#, VB 6, JavaScript etc. Imagine if that code was implemented in assembler - it would&#xD;
be much worse that you can even imagine, and it probably would end up being your worst&#xD;
nightmare. The only one you can blame for bad code in modern languages is yourself&#xD;
and your fellow engineers. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It’s not only the languages that have evolved, but also the frameworks. Today we have&#xD;
tons of commercial and open source frameworks, which also is a key enabler when developing&#xD;
high quality software. The frameworks I can come up with at the top of my head are;.NET,&#xD;
Java, Apache, Hibernate, Ant, CruiseControl.net, Silverlight, Mono, Moonlight, Struts,&#xD;
Ruby on Rails, SPRING etc. And let’s not forget the tooling; Visual Studio .NET, Eclipse,&#xD;
IntelliJ, TextMate, TextMate, SharpDevelop etc. And the funny part is that since we&#xD;
are getting better and better tools, the development speed of these languages, frameworks&#xD;
and tools seems to go even faster. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Nobody is happy?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
So even though you are not happy with what you are doing in your daily job as a programmer,&#xD;
imagine how it would be if you had to maintain assembler code, how it would be to&#xD;
write ORM mapping by hand or if you had to use Notepad as you development environment&#xD;
– now it doesn’t seems so awful, does it? &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
But don’t fool yourself to think that’s something wrong with the languages, frameworks&#xD;
and the tools; a fool with a tool is still a fool! Even though it’s possible to do&#xD;
amazing things, programming is still something that takes hard work and lots of practice&#xD;
if you want to become a master. If you are serious about becoming a programmer, you&#xD;
should know that you have to face at least &lt;a href="http://radar.oreilly.com/2008/12/hard-work-and-practice-in-programming.html" target="_blank"&gt;10&#xD;
years of practice&lt;/a&gt; to really master it. Programming is really, really hard - period.&#xD;
When it becomes your profession, it’s not only about creating cool stuff, it’s about&#xD;
creating cool stuff with high quality, and it’s the last part that’s hard. I’ve been&#xD;
programming professionally for 8 years, and I still feel like a young journeyman when&#xD;
I read books by Robert C. Martin, Eric Evans, Andy Hunt, Dave Thomas, Craig Larman,&#xD;
Martin Fowler etc. I realize I have still a long way to go before I can call myself&#xD;
a master. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So even though we can do all these amazing things, you still need to learn how to&#xD;
master the craftsmanship of software development, and if you are serious about it,&#xD;
expect to practice for a long time. You can expect much from this industry, but it&#xD;
will also expect much from you! So if you want to become a happy developer, you need&#xD;
to become a decent software craftsman, and expect plenty of work to achieve that!&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=6f2cde27-ee41-4b3c-821b-1234c68ef7e2"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IvxgxhoHOh8:D-Tshb6gv5E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IvxgxhoHOh8:D-Tshb6gv5E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=IvxgxhoHOh8:D-Tshb6gv5E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IvxgxhoHOh8:D-Tshb6gv5E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IvxgxhoHOh8:D-Tshb6gv5E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=IvxgxhoHOh8:D-Tshb6gv5E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/IvxgxhoHOh8" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</comments>
      <category>programming</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,6f2cde27-ee41-4b3c-821b-1234c68ef7e2.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=0813c450-52b8-441a-9251-dcb0a56e1545</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=0813c450-52b8-441a-9251-dcb0a56e1545</wfw:commentRss>
      <slash:comments>5</slash:comments>
      
      <title>MSDN Live mars 2009</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/HaKNBoRfh_U/PermaLink,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</link>
      <pubDate>Wed, 11 Mar 2009 13:23:48 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Som du kanskje vet, pågår det for tiden en runde av MSDN Live, et arrangert&#xD;
i regi av Microsoft Norge. De har allerede besøkt byene Stavanger og Bergen,&#xD;
og kommer til Trondheim i morgen, før de avslutter i Oslo.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
For første gang i &lt;strike&gt;historien&lt;/strike&gt; nyere historie så tar de betalt&#xD;
for dette arrangementet, og prisen er 1500 kr. Microsoft har begrunnet dette med at&#xD;
de også er blitt et offer for finanskrisen, og må stramme inn budsjettene&#xD;
som alle andre. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Man kan jo argumentere med hvorfor i all verden vi skal finansiere Microsofts egen&#xD;
salgsturne? Det er jo et arrangement som tross alt genererer flere salg av deres egne&#xD;
produkter. Jeg velger å ikke ta stilling til denne diskusjonen, men heller fokusere&#xD;
på det faglige. Microsoft har skapt en knakende bra faglige arena gjennom MSDN&#xD;
Live. Arrangement er gjennomført med dyktige foredragsholdere og alltid relevant&#xD;
faglig innhold!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Børge Hansen som jobber i Microsoft forklarer på hans &lt;a href="http://borge3000.no/2009/02/18/n-koster-msdn-live-penger-hvorfor-det/" target="_blank"&gt;blogg&lt;/a&gt; hvorfor&#xD;
arrangementet koster penger.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Hvorfor delta?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
I vår bransje foregår utviklingen veldig raskt, og hvis vi skal henge med&#xD;
på dette så må vi holde oss oppdatert på hva som skjer på&#xD;
teknologifronten. Selv om vi er midt opp i en finanskrise og budsjettene strammes&#xD;
inn, må vi fortsatt jobbe med kompetanseheving. I dag hørte jeg et morsomt&#xD;
ordtak av en kollega av meg, som setter denne problemstilling på spissen; ”Hvis&#xD;
du synes kompetanse er for dyrt… forsøk uvitenhet”. På sikt&#xD;
vil dårlig kompetanse koste veldig dyrt, det kan sammenlignes med og ”pisse”&#xD;
i buksa når man fryser; først det blir varmt i noen sekunder, før det&#xD;
blir ulevelig kaldt. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Selv om du må jobbe litt ekstra med å få tillatelse fra din arbeidsgiver&#xD;
til å stille på dette arrangementet pga. kostnad, så mener jeg det&#xD;
er verdt det, for din egen del, og for din arbeidsgiver. Dette er en langsiktig investering! &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Så har vi jo også det demokratiske aspektet; hvis den totale oppslutningen&#xD;
blir for dårlig for dette arrangementet, så vil vi som teknologer miste&#xD;
en fin arena – noe vi ikke ønsker!&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Hvordan har tilbakemeldingene vært så langt?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Jeg har lest på &lt;a href="http://blog.kjempekjekt.com/2009/03/10/geekbeer-geeksquad-og-msdnlive/" target="_blank"&gt;bloggen&lt;/a&gt; til&#xD;
Torbjørn Marø, er en systemutvikler fra Bergen og en aktiv blogger, han&#xD;
har følgende å si om MSDN Live arrangementet;&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
”Dagen inneholdt en rekke, gode sesjoner, og selv om MSDN Live kostet penger&#xD;
denne gangen var det relativt bra oppmøte.”&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Du kan lese mer om Torbjørns opplevelse på hans &lt;a href="http://blog.kjempekjekt.com/2009/03/10/geekbeer-geeksquad-og-msdnlive/" target="_blank"&gt;blogg&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Hva bør Microsoft gjøre neste gang?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Jeg har selv ingen problem med å betale 1500 kr for dette arrangementet. På&#xD;
papiret ser dette arrangementet akkurat ut som de tidligere rundene av MSDN Live,&#xD;
og når dere plutselig begynner å ta betalt, så hadde det vært&#xD;
en idé og gjort noe nytt. Jeg har følgende forslag til dere på dette&#xD;
området;&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Inviter et stort navn til å holde keynote, for eksempel; Scott Guthrie, Scott&#xD;
Hanselman, Phil Hack, Jeremy Miller, Robert C. Martin etc &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Dere kunne ha kjørt et ekspert track ved siden av det vanlige, med foredrag av&#xD;
faglig høyt nivå, som er rettet mot ekspertene i de forskjellige byene &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
På denne måten hadde dere gjort noe som er helt nytt, og dermed ville det&#xD;
vært enklere å forsvare gebyret på 1500 kr.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=0813c450-52b8-441a-9251-dcb0a56e1545"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=HaKNBoRfh_U:XEHUaiyI4QU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=HaKNBoRfh_U:XEHUaiyI4QU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=HaKNBoRfh_U:XEHUaiyI4QU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=HaKNBoRfh_U:XEHUaiyI4QU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=HaKNBoRfh_U:XEHUaiyI4QU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=HaKNBoRfh_U:XEHUaiyI4QU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/HaKNBoRfh_U" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</comments>
      <category>MSDN Live</category>
      <category>Norwegian</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,0813c450-52b8-441a-9251-dcb0a56e1545.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=df1a444d-654b-4188-85a9-13643b59a0a6</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=df1a444d-654b-4188-85a9-13643b59a0a6</wfw:commentRss>
      <slash:comments>4</slash:comments>
      
      <title>Visual Studio 2008 running on a machine with a SSD disk installed!</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/DRDufg2QHks/PermaLink,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</link>
      <pubDate>Tue, 03 Mar 2009 10:20:28 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
As you can see, the performance is very good. And by the way, Windows is running inside&#xD;
a virtual machine (VMWare Fusion).&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;object width="480" height="295"&gt;&#xD;
            &lt;param name="movie" value="http://www.youtube.com/v/SzW2RaiuN60&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&#xD;
            &lt;embed src="http://www.youtube.com/v/SzW2RaiuN60&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&#xD;
            &lt;/embed&gt;&#xD;
          &lt;/object&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
And no, Visual Studio is not pre-loaded into memory. The startup was initialized right&#xD;
after the machine was booted.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=df1a444d-654b-4188-85a9-13643b59a0a6"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=DRDufg2QHks:QW20UIeHae0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=DRDufg2QHks:QW20UIeHae0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=DRDufg2QHks:QW20UIeHae0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=DRDufg2QHks:QW20UIeHae0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=DRDufg2QHks:QW20UIeHae0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=DRDufg2QHks:QW20UIeHae0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/DRDufg2QHks" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</comments>
      <category>hardware</category>
      <category>Visual Studio</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,df1a444d-654b-4188-85a9-13643b59a0a6.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.goeran.no/Trackback.aspx?guid=226cf1a8-d3ed-4842-a0df-1ed560a7c3b4</trackback:ping>
      <pingback:server>http://blog.goeran.no/pingback.aspx</pingback:server>
      <pingback:target>http://blog.goeran.no/PermaLink,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</pingback:target>
      <dc:creator>Gøran Hansen</dc:creator>
      <wfw:comment>http://blog.goeran.no/CommentView,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.goeran.no/SyndicationService.asmx/GetEntryCommentsRss?guid=226cf1a8-d3ed-4842-a0df-1ed560a7c3b4</wfw:commentRss>
      
      <title>NNUG Presentation: OOP Back to Basic</title>
      <guid isPermaLink="false">http://blog.goeran.no/PermaLink,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</guid>
      <link>http://feedproxy.google.com/~r/Goeran/~3/U74eMw4HppI/PermaLink,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</link>
      <pubDate>Tue, 03 Mar 2009 10:00:57 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Here are my slides from my talk at NNUG Trondheim 26 February.&#xD;
&lt;/p&gt;&#xD;
        &lt;p align="center"&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;div id="__ss_1093918" style="width: 425px; text-align: left"&gt;&#xD;
          &lt;a title="OOP - Back to Basic" style="display: block; margin: 12px 0px 3px; font: 14px helvetica,arial,sans-serif; text-decoration: underline" href="http://www.slideshare.net/goeran/oop-back-to-basic?type=powerpoint"&gt;OOP&#xD;
- Back to Basic&lt;/a&gt;&#xD;
          &lt;object style="margin:0px" width="425" height="355"&gt;&#xD;
            &lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=oopbacktobasic-090303032158-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=oop-back-to-basic"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&#xD;
            &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&#xD;
            &lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=oopbacktobasic-090303032158-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=oop-back-to-basic" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&#xD;
            &lt;/embed&gt;&#xD;
          &lt;/object&gt;&#xD;
          &lt;div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px"&gt;View&#xD;
more &lt;a style="text-decoration: underline" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline" href="http://www.slideshare.net/goeran"&gt;goeran&lt;/a&gt;.&#xD;
&lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The development of the technology inside the IT business happens really, really fast,&#xD;
and many of these technologies have one thing in common; OO (Object Orientation).&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Since OO seems to play an important role in our business, I think it’s important for&#xD;
us as developers to achieve a deeper understanding of the concept. It’s more to it&#xD;
than polymorphism, encapsulation and inheritance.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If you manage to master the OO concept, you’ll be able to “reuse” your knowledge across&#xD;
various new technologies like Silverlight, WPF (Windows Presentation Foundation),&#xD;
.NET, Java, Ruby on Rails and the list goes on. It doesn’t matter if you are coding&#xD;
C++, Ruby, C#, VB, or Java, all of them apply the same concept; OO. Yes, they have&#xD;
their differences, but that’s another story.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Not only will a deeper insight to OO help you learn technologies faster, it will help&#xD;
you to write better code. In my presentation I also talk about 3 of the 5 SOLID principles; &lt;a href="http://www.objectmentor.com/resources/articles/srp.pdf" target="_blank"&gt;SRP&lt;/a&gt; (Single&#xD;
Responsibility Principle, &lt;a href="http://www.objectmentor.com/resources/articles/dip.pdf" target="_blank"&gt;DIP&lt;/a&gt; (Dependency&#xD;
Inversion Principle) and &lt;a href="http://www.objectmentor.com/resources/articles/ocp.pdf" target="_blank"&gt;OCP&lt;/a&gt; (Open-Closed&#xD;
Principle). If you don’t know them, please learn them!!&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You’ll find plenty of information about good design principles &lt;a href="http://www.objectmentor.com/resources/publishedArticles.html" target="_blank"&gt;here&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.goeran.no/aggbug.ashx?id=226cf1a8-d3ed-4842-a0df-1ed560a7c3b4"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=U74eMw4HppI:9CoxxpM3FDU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=U74eMw4HppI:9CoxxpM3FDU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?i=U74eMw4HppI:9CoxxpM3FDU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=U74eMw4HppI:9CoxxpM3FDU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=U74eMw4HppI:9CoxxpM3FDU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Goeran?a=U74eMw4HppI:9CoxxpM3FDU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Goeran?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Goeran/~4/U74eMw4HppI" height="1" width="1"/&gt;</description>
      <comments>http://blog.goeran.no/CommentView,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</comments>
      <category>NNUG</category>
      <category>Presentation</category>
    <feedburner:origLink>http://blog.goeran.no/PermaLink,guid,226cf1a8-d3ed-4842-a0df-1ed560a7c3b4.aspx</feedburner:origLink></item>
  </channel>
</rss>
