<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6147766267614522224</id><updated>2012-02-16T08:50:25.226-08:00</updated><category term='NHibernate'/><category term='poo'/><category term='music'/><category term='DDD'/><category term='TDD'/><category term='cake'/><category term='dormroom philosophizing'/><category term='talent'/><category term='skill'/><title type='text'>Agile Runt</title><subtitle type='html'>I have so much to learn</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-694656808041427555</id><published>2007-03-01T11:20:00.000-08:00</published><updated>2007-03-01T11:29:58.311-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><title type='text'>DDD Examples</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;I like DDD.  I think the idea that you can express business rules in software in the same terms you use to speak to your customers about their business is wonderful.  It seems like a really natural place to go with object oriented design.  Eric Evans and Jimmy Nilsson have helped a lot with their books on the subjects.  But it can be really confusing for a newbie, especially one like me who wants to see concrete examples of how others have answered questions about how to express these business rules in the best way.  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;There was a discussion recently on the Domain Driven Design YahooGroup mailing list between Joe Reddy and Frans Bouma that I think encapsultes the issue:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; The developers at my office and I read Evans' DDD book and everyone liked the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; concepts. However we often disagree on implementation. Even within the same&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; office we have different pressures, different environments and different&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; priorities. These things rarely if ever change our thoughts on the DDD&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; concepts; however they always change our thoughts on implementation.what the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; code looks like.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; So when people ask for code to show them how DDD is implemented I am also wary&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; of supplying this to them.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; For example, my current team is developing in C# and we have no third party&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; O/R mapping tool like I hear often discussed. Any code example with an&gt; implementation of N/Hibernate means little to me.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; With that being said, we are all geeks and sometimes reading code can help&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&gt; lead us to some "Ah ha!" moments.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;I think some fundamental problems are often ignored and people runinto them sooner or later. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Take for example Microsoft's example database called Northwind. In theentity model, there is obviously a problem, when you want to create aggregate roots and repositories: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Order references Customer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Order references Employee&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;OrderDetail references Order&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;OrderDetail references Product&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Product references Supplier&lt;br /&gt;etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Which aggregate roots and which repositories are the best for this situation? before people step in and say: this or that, be aware that there's no real parent/child situation here, except perhaps 'orderdetails' inside order, however orderdetails refers to product, which means the product thus also becomes part of the order aggregate, UNLESS you want to refer to orderdetails from TWO different aggregates (order and product), which can be cumbersome. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;If you take a step back and think about this for a while you IMHO will come to the conclusion that the introduction of aggregates and repositories brought this problem onto the table, i.o.w.: it's a side effect of using these abstractions. However, without a proper set of rules-of-thumb, what should theaverage DDD user do to solve these problems? I think THAT's what the people who are asking for examples are after: to see how in real-life situations these things are solved, so they can apply the same solution to their own situation as well.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-694656808041427555?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/694656808041427555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=694656808041427555&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/694656808041427555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/694656808041427555'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/03/ddd-examples.html' title='DDD Examples'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-2030660581601198074</id><published>2007-02-27T08:58:00.000-08:00</published><updated>2007-03-01T11:15:22.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>NHibernate reference app</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;Billy McCafferty has created a really nice &lt;a href="http://www.codeproject.com/aspnet/NHibernateBestPractices.asp"&gt;NHibernate sample app on CodeProject &lt;/a&gt;using good ol’ Northwind. If you’re interested in NHibernate, you ought to take a look at it. Billy watches user comments on the article, and gives good help with questions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;His project shows a really nice example of using NHibernate.Generics, and creates a many-to-many bidirectional relationship between Customer and Order. I was interested in extending his domain just to play around a bit, so I decided to create an OrderDetail class. Specifically, I wanted to create a one-to-many one-way relationship from Order to OrderDetail – in other words, I just want the Order to keep track of its own OrderDetails, and I don’t think I really care about being able to see the Order from an OrderDetail. In order to get that working, I had to do the following:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;1) Change the OrderDetails table definition in Northwind to include an integer field called OrderDetailID, and make that field the primary key. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;2) Create an OrderDetail class like so:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;using System;&lt;br /&gt;using NHibernate.Generics;&lt;br /&gt;&lt;br /&gt;namespace NHibernateSample.Core.Domain&lt;br /&gt;{&lt;br /&gt;public class OrderDetail : DomainObject&lt;long&gt;&lt;br /&gt;{&lt;br /&gt;public OrderDetail()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int ProductId&lt;br /&gt;{&lt;br /&gt;get { return productId; }&lt;br /&gt;set { productId = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public decimal UnitPrice&lt;br /&gt;{&lt;br /&gt;get { return unitPrice; }&lt;br /&gt;set { unitPrice = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int Quantity&lt;br /&gt;{&lt;br /&gt;get { return quantity; }&lt;br /&gt;set { quantity = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public float Discount&lt;br /&gt;{&lt;br /&gt;get { return discount; }&lt;br /&gt;set { discount = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private int productId;&lt;br /&gt;private decimal unitPrice;&lt;br /&gt;private int quantity;&lt;br /&gt;private float discount;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;3) Add an OrderDetails collection to the Order class:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public IList&amp;lt;OrderDetail&amp;gt; OrderDetails&lt;br /&gt;{&lt;br /&gt;get { return _orderDetails; }&lt;br /&gt;}&lt;br /&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private EntityList&amp;lt;OrderDetail&amp;gt; _orderDetails = new EntityList&amp;lt;OrderDetail&amp;gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;4) And then map everything:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;---- order.hbm.xml ---- &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;bag name="OrderDetails" lazy="true" table="OrderDetails" inverse="false"&lt;br /&gt;access="NHibernate.Generics.GenericAccessor, NHibernate.Generics" &amp;gt;&lt;br /&gt;&amp;lt;key column="OrderID" /&amp;gt;&lt;br /&gt;&amp;lt;one-to-many class="NHibernateSample.Core.Domain.OrderDetail, NHibernateSample.Core" /&amp;gt;&lt;br /&gt;&amp;lt;/bag&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;---- orderdetail.hbm.xml ----&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"&amp;gt;&lt;br /&gt;&amp;lt;class name="NHibernateSample.Core.Domain.OrderDetail, NHibernateSample.Core" table="OrderDetails"&amp;gt;&lt;br /&gt;&amp;lt;id name="ID" column="OrderDetailsID" unsaved-value="0"&amp;gt;&lt;br /&gt;&amp;lt;generator class="identity" /&amp;gt;&lt;br /&gt;&amp;lt;/id&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="ProductId" column="ProductID" /&amp;gt;&lt;br /&gt;&amp;lt;property name="UnitPrice" column="UnitPrice" /&amp;gt;&lt;br /&gt;&amp;lt;property name="Quantity" column="Quantity" /&amp;gt;&lt;br /&gt;&amp;lt;property name="Discount" column="Discount" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;One thing that threw me initially was the WireUpEntities() method he calls in the Customer and Order classes. Here's the one he has in the Customer class:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private void WireUpEntities() {&lt;br /&gt;// Implement parent/child relationship add/remove scaffolding between Customer and Orders&lt;br /&gt;_orders = new EntityList&amp;lt;Order&amp;gt;(&lt;br /&gt;delegate(Order order) { order.OrderedBy = this; },&lt;br /&gt;delegate(Order order) { order.OrderedBy = null; }&lt;br /&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Since I’ve never used NHibernate generics, I apparently decided it would be a good idea to put my brain out to pasture for a little while, and not to actually dig in and understand what’s going on here before trying to use it for my OrderDetails collection. I tried some goofy similar stuff in the OrderDetails class, but it turns out that this code is for enforcing the bi-directional relationship – not needed at all for one-way relationships, I can just relax and let NHibernate do the work for me. The only difference is that I have to do this in my Order class:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private EntityList&amp;lt;OrderDetail&amp;gt; _orderDetails = new EntityList&amp;lt;OrderDetail&amp;gt;(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;instead of this:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private EntityList&amp;lt;OrderDetail&amp;gt; _orderDetails;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;In the bi-directional relationship between Customer and Order, WireUpEntities() instantiates the EntityList, but since you don’t need WireUpEntities() for one-way relationships you have to instantiate the EntityList yourself. NHibernate will only work with an existing list...it won't initialize _orderDetails to a new EntityList itself. So if you don't call "new" in a wire-up method, then it needs to be done when declaring the member.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-2030660581601198074?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/2030660581601198074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=2030660581601198074&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/2030660581601198074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/2030660581601198074'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/02/nhibernate-reference-app.html' title='NHibernate reference app'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-8728566347229323541</id><published>2007-02-22T08:44:00.000-08:00</published><updated>2007-02-22T08:53:43.709-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Reference App for lots of cool stuff</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;I want to create a .NET reference app to be made available on &lt;/span&gt;&lt;a href="http://www.codeproject.com"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;CodeProject&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; (or some other such site) which will demonstrate the following:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Test Driven Development - full set of unit, integration, and acceptance tests&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Domain Driven Design - entities, value objects, services, aggregates, repositories, the works&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ORM using &lt;/span&gt;&lt;a href="http://www.nhibernate.org"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;NHibernate&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; - I want to explore issues that arise using DDD repositories with an EntityDataGateway to control the NHibernate session.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;MVP (maybe MonoRail)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Continuous Integration - set of build scripts to build, test, and report on coverage.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Does a publicly available reference project that covers all these areas currently exist?&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-8728566347229323541?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/8728566347229323541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=8728566347229323541&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/8728566347229323541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/8728566347229323541'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/02/reference-app-for-lots-of-cool-stuff.html' title='Reference App for lots of cool stuff'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-3212314682255813916</id><published>2007-02-20T08:41:00.000-08:00</published><updated>2007-02-20T09:15:53.053-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Random Rules Monday, Except That It's Actually Tuesday</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;Like many of the developers I've worked with over the years, I listen to music while I work. &lt;/span&gt;&lt;a href="http://www.avclub.com"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;The Onion AV Club&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; has a semi-regular feature called Random Rules where they get a celebrity to hit shuffle on their iPod, and then reveal all the embarrasing details that come up in the first ten selections. Here's mine for today:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Just Another Night&lt;/strong&gt;, Ian Hunter&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Road&lt;/strong&gt;, Nick Drake&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;A Star Is Bored&lt;/strong&gt;, Paul Westerberg&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Mandolin Wind&lt;/strong&gt;, Rod Stewart&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Beat on the Brat&lt;/strong&gt;, The Ramones&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Wild Wild Lover&lt;/strong&gt;, Flat Duo Jets&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Walkin' to My Baby&lt;/strong&gt;, Fabulous Thunderbirds&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;To Here Knows When&lt;/strong&gt;, My Bloody Valentine&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Stiff Competition&lt;/strong&gt;, Cheap Trick&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Vaseline&lt;/strong&gt;, Elastica&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Glad all the ABBA stuff didn't come up.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-3212314682255813916?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/3212314682255813916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=3212314682255813916&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/3212314682255813916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/3212314682255813916'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/02/random-rules-monday.html' title='Random Rules Monday, Except That It&apos;s Actually Tuesday'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-8767788479058634682</id><published>2007-02-19T16:30:00.000-08:00</published><updated>2007-02-20T08:38:21.986-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dormroom philosophizing'/><category scheme='http://www.blogger.com/atom/ns#' term='cake'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>A test-driven chocolate cake?</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;Are there disciplines other than software development that implement something like Test Driven Development? And how effective would this approach be in other disciplines?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Can I know &lt;strong&gt;before&lt;/strong&gt; my cake batter is ever mixed up what my cake is going to taste like?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Can I know &lt;strong&gt;before&lt;/strong&gt; my dress design hits the runway that Milan will be absolutely beside itself?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;And it would be really nice next season when hemlines rise or fall to be able to change the hem without worrying about whether or not you were going to pop another seam and ruin the whole dress. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Can I know &lt;strong&gt;before&lt;/strong&gt; I cut my ear off and send it to a woman in an act of rage and desparation, and eventually take my own life in a lonely wheat field, that my paintings will one day be considered among the best ever created?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;etc.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;It would be really nice to know ahead of time that things are going to turn out ok, or at least like you planned them. We can achieve a measure of that in software development with discipline. And using a solid infrastructure of tests, we can have the confidence to make changes to our applications as the business demands it. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;But how do other disciplines do it? We've been making things since the dawn of history. How have we historically tackled the problem of quality assurance? &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-8767788479058634682?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/8767788479058634682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=8767788479058634682&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/8767788479058634682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/8767788479058634682'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/02/test-driven-chocolate-cake.html' title='A test-driven chocolate cake?'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6147766267614522224.post-958073968498313969</id><published>2007-02-18T21:11:00.000-08:00</published><updated>2007-02-19T15:45:06.436-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='skill'/><category scheme='http://www.blogger.com/atom/ns#' term='talent'/><title type='text'>Jeff Atwood is filled with poo</title><content type='html'>&lt;a href="http://www.codinghorror.com/blog/archives/000543.html"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Jeff Atwood&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; sez programmers are born, that you can't become a great programmer if you aren't born one. He asserts that, "&lt;em&gt;A mediocre developer can program his or her heart out for four years, but that won't magically transform them into a good developer&lt;/em&gt;." &lt;/span&gt;&lt;span style="font-family:arial;"&gt;To Mr. Atwood, I offer this humble rebuttal (quoting Col. Potter): Monkey muffins! I'm not being fair to Jeff, after all a text without a context is a pretext. But it's my blog and I'll cry if I want to. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;No one comes into this world knowing how to do anything except cry, poop, eat, and sleep. However, our Creator graciously endows some with talents for various things: there are those who are naturally bent towards music, others who can see an object and render an image of it on the page, still others who can work their way through the abstract logical problems we encounter in programming, etc, etc. Talent is raw material, useless without honing it into skill. Redmond wasn't built in a day: show me one application that has shipped in the history of computing that was entirely produced by a newbie approaching a keyboard (or a breadboard for that matter) for the first time.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Peter Norvig has a great little article about the determination it takes to build skill in any discipline:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://norvig.com/21-days.html"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;http://norvig.com/21-days.html&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Good stuff.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6147766267614522224-958073968498313969?l=agilerunt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilerunt.blogspot.com/feeds/958073968498313969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6147766267614522224&amp;postID=958073968498313969&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/958073968498313969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6147766267614522224/posts/default/958073968498313969'/><link rel='alternate' type='text/html' href='http://agilerunt.blogspot.com/2007/02/jeff-atwood-is-full-of-poo.html' title='Jeff Atwood is filled with poo'/><author><name>Agile Runt</name><uri>http://www.blogger.com/profile/12109257044486058015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
