<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>tobin harris</title>
  <id>http://www.tobinharris.com/</id>
  <updated>2009-07-04T07:00:00+00:00</updated>
  <author>
    <name>Tobin Harris</name>
  </author>
  <link rel="self" href="http://www.tobinharris.com/blog/atom.xml" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry><title type="text">Links for 2009-07-03 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/8ra_N0EBO8c/tobinharris" /><updated>2009-07-04T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-07-03</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/couchdb/Installing_on_OSX"&gt;Installing on OSX - Couchdb Wiki&lt;/a&gt;&lt;br/&gt;
Getting CouchDB up and running on OSX. Document DB goodness here I come...&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-07-03</feedburner:origLink></entry><entry>
    <title>HTTP Status Code 408 - I'm a Tea Pot :)</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/acl3maDerHE/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-07-02T04:41:25-07:00</id>
    <published>2009-07-02T04:41:25-07:00</published>
    <updated>2009-07-02T04:41:25-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I was trawling through &lt;a href='http://en.wikipedia.org/wiki/List_of_HTTP_status_codes'&gt;HTTP status codes&lt;/a&gt; today on WikiPedia and found the &lt;strong&gt;418 - I&amp;#8217;m a Tea Pot&lt;/strong&gt; status code. How amusing :)&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I was trawling through &lt;a href='http://en.wikipedia.org/wiki/List_of_HTTP_status_codes'&gt;HTTP status codes&lt;/a&gt; today on WikiPedia and found the &lt;strong&gt;418 - I&amp;#8217;m a Tea Pot&lt;/strong&gt; status code. How amusing :)&lt;/p&gt;

&lt;p&gt;Apparently it&amp;#8217;s part of the &lt;a href='http://en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol'&gt;HyperText Coffee Pot Protocol&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although this protocol is an April Fools joke, I actually think it could be useful as the standard response to send to Internet Explorer 6 ;)&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/7/2/http-status-code-408-im-a-tea-pot-/</feedburner:origLink></entry>
  <entry><title type="text">Links for 2009-06-30 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/N2oZAM7z5LY/tobinharris" /><updated>2009-07-01T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-30</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.surveymonkey.com/MyAccount_Join.aspx?utm_source=account_navbar"&gt;SurveyMonkey - Sign up&lt;/a&gt;&lt;br/&gt;
Online survey&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-30</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-29 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/magr2ziW20E/tobinharris" /><updated>2009-06-30T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-29</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/shaml-architecture/"&gt;shaml-architecture -    Google Code&lt;/a&gt;&lt;br/&gt;
ASP.NET MVC/NHibernate app out-of-the-box generator  running on Mono and .NET. Mmmmmm&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ayende.com/Blog/archive/2007/11/17/A-vision-of-enterprise-platform-Security-Infrastructure.aspx"&gt;A vision of enterprise platform: Security Infrastructure&lt;/a&gt;&lt;br/&gt;
ayende on security&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.udidahan.com/2009/06/29/dont-create-aggregate-roots/"&gt;Don&amp;rsquo;t Create Aggregate Roots&lt;/a&gt;&lt;br/&gt;
Udi talks about DDD and validation and Domain Events.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-29</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-26 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/qk7azYLWumI/tobinharris" /><updated>2009-06-27T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-26</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hogbaysoftware.com/"&gt;Hog Bay Software &amp;mdash; Surprisingly adept software for Mac OS X&lt;/a&gt;&lt;br/&gt;
Simple task management app ala GTD.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-26</feedburner:origLink></entry><entry>
    <title>OSX MonoDevelop MVC?</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/ZGv5ZCXooSo/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-06-25T15:40:48-07:00</id>
    <published>2009-06-25T15:40:48-07:00</published>
    <updated>2009-06-25T15:40:48-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;a href='http://www.lostechies.com/blogs/scottcreynolds/archive/2009/06/24/how-i-set-up-my-mac.aspx'&gt;Scott C Reynolds blogged&lt;/a&gt; about how he&amp;#8217;s been playing with MonoDevelop on OSX. I thought I&amp;#8217;d download it, and was pleased to see this&amp;#8230;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href='http://www.lostechies.com/blogs/scottcreynolds/archive/2009/06/24/how-i-set-up-my-mac.aspx'&gt;Scott C Reynolds blogged&lt;/a&gt; about how he&amp;#8217;s been playing with MonoDevelop on OSX. I thought I&amp;#8217;d download it, and was pleased to see this&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;img src='http://img.skitch.com/20090625-ckrpdem29kh4egue5seid26ukm.png' alt='MonoDevelop MVC?' /&gt; &lt;a href='http://img.skitch.com/20090625-qae1mx8b3jth6mcnxantfjsxqj.png'&gt;Bigger Piccy&amp;#8230;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve not actually clicked beyond this point yet, but it&amp;#8217;s exciting to see that MVC is &lt;em&gt;actually hinted at&lt;/em&gt; in MonoDevelop. Can&amp;#8217;t wait to see what the support is like&amp;#8230;&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/6/25/osx-monodevelop-mvc/</feedburner:origLink></entry>
  <entry><title type="text">Links for 2009-06-24 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/uVpbU_yicnU/tobinharris" /><updated>2009-06-25T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-24</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/redis/"&gt;redis -    Google Code&lt;/a&gt;&lt;br/&gt;
Hash based DB looks very cool and easy to use.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://3.bp.blogspot.com/_Ccpw4GT7Y0c/R4-6z35uHkI/AAAAAAAAB34/oyr0ukqpYEE/s1600-h/2008-01-17_222514.gif"&gt;2008-01-17_222514.gif (image)&lt;/a&gt;&lt;br/&gt;
The BAD USABILITY calendar. Funny, and a valuable resource :)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://xval.codeplex.com/"&gt;xVal - Home&lt;/a&gt;&lt;br/&gt;
NHibernate + jQuery aware validation engine. Mmmm... very interesting...&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/"&gt;xVal - a validation framework for ASP.NET MVC &amp;laquo;    Steve Sanderson&amp;rsquo;s blog&lt;/a&gt;&lt;br/&gt;
xVal validation with MVC and jQuery and standard server side validation.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-24</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-20 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/nke_4AJioQs/tobinharris" /><updated>2009-06-21T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-20</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.adobe.com/products/flashpaper/productinfo/overview/"&gt;Macromedia - FlashPaper 2 : At a Glance&lt;/a&gt;&lt;br/&gt;
Flash  Paper for exporting documents into flash.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-20</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-18 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blog_of_tobin/~3/StXnF6T2p7c/tobinharris" /><updated>2009-06-19T00:00:00-07:00</updated><id>http://del.icio.us/tobinharris#2009-06-18</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.gembapantarei.com/2009/06/the_amazing_adventures_of_kanban.html"&gt;Lean Manufacturing Blog, Kaizen Articles and Advice | Gemba Panta Rei&lt;/a&gt;&lt;br/&gt;
Kanban Background and Agile Projects&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.css3.info/preview/rounded-border/"&gt;Border-radius: create rounded corners with CSS! - CSS3 . Info&lt;/a&gt;&lt;br/&gt;
Amazing CSS3 stuff. Make things look cool with ZERO effort :) yUML.me is getting some of this action&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/tobinharris#2009-06-18</feedburner:origLink></entry><entry>
    <title>New App for Writing Documents Online</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/sF4p4kah8hI/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-06-11T18:03:05-07:00</id>
    <published>2009-06-11T18:03:05-07:00</published>
    <updated>2009-06-11T18:03:05-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I&amp;#8217;m a big fan of &lt;a href='http://www.basecamphq.com/'&gt;BaseCamp&lt;/a&gt; &amp;#8211; an online project management tool. BaseCamp also gives you &lt;a href='http://www.writeboard.com/'&gt;WriteBoards&lt;/a&gt;, which are roughly analogous to shared, online MS Word Documents.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I&amp;#8217;m a big fan of &lt;a href='http://www.basecamphq.com/'&gt;BaseCamp&lt;/a&gt; &amp;#8211; an online project management tool. BaseCamp also gives you &lt;a href='http://www.writeboard.com/'&gt;WriteBoards&lt;/a&gt;, which are roughly analogous to shared, online MS Word Documents.&lt;/p&gt;

&lt;p&gt;WriteBoards are cool, but they fall short in a few areas. Firstly, they&amp;#8217;re not pretty enough; I don&amp;#8217;t feel that I&amp;#8217;d really want to show a customer a WriteBoard document. Also, they only support TextTile, and I quite like Markdown and MultiMarkdown. Finally, WriteBoards don&amp;#8217;t have a good public API, so getting at the content and re-purposing it is a PITA.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been having fun creating various online tools this year, such as &lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt;. yUML went live after only four days of development work, but seemed to hit a positive note with many users.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://img.skitch.com/20090612-meuxnjbiyg8grwhtnfy8f9ai59.png' alt='myDocs, by Tobin Harris' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://img.skitch.com/20090612-ebe9aihfatbg674h375xigpiey.png'&gt;Enlarge Image&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The image above shows another online tool that I&amp;#8217;ve thrown together: working name is myDocs. This was another four-day project, who&amp;#8217;s goals were to help me publish &lt;em&gt;Word-Lookalike&lt;/em&gt; documents online.&lt;/p&gt;

&lt;p&gt;myDocs has the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author onlnie using &lt;a href='http://hobix.com/textile/'&gt;TextTile&lt;/a&gt; or&lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Pretty to look at&lt;/li&gt;

&lt;li&gt;Pretty to print out&lt;/li&gt;

&lt;li&gt;Keeps version history&lt;/li&gt;

&lt;li&gt;Compare versions showing added and removed content&lt;/li&gt;

&lt;li&gt;Add sticky note comments to documents&lt;/li&gt;

&lt;li&gt;Review documents and comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My company, &lt;a href='http://engineroomapps.com'&gt;Engine Room&lt;/a&gt; are benefitting from it internally, but we have yet to think of how it might be used by anyone else.&lt;/p&gt;

&lt;p&gt;This tool doesn&amp;#8217;t have a public home page yet, but there is a &lt;a href='http://docs.socena.com/document/test/readme'&gt;demo page&lt;/a&gt; available.&lt;/p&gt;

&lt;p&gt;If you like what you see, post up your thoughts and I&amp;#8217;ll think about how to release it to a wider audience!&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/6/11/new-app-for-writing-documents-online/</feedburner:origLink></entry>
  <entry>
    <title>NHibernate: Calling Update Unnecessarily</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/bJnYCsDvbHA/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-06-11T13:13:04-07:00</id>
    <published>2009-06-11T13:13:04-07:00</published>
    <updated>2009-06-11T13:13:04-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I often see code that looks a bit like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;public ActionResult UpdatePost(int id, FormCollection form)&lt;/code&gt;&lt;/pre&gt;</summary>
    <content type="html">&lt;p&gt;I often see code that looks a bit like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;public ActionResult UpdatePost(int id, FormCollection form)
{	
    // we won&amp;#39;t worry about where _nhibernateSession 
    // comes from for this example.

	var post = _nhibernateSession.Load&amp;lt;Post&amp;gt;(id);
	post.Title = form[&amp;quot;PostTitle&amp;quot;];
	post.Body = form[&amp;quot;PostBody&amp;quot;];
	_nhibernateSession.Update(post); 
	_nhibernateSession.Transaction.Commit();
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Can you see what&amp;#8217;s wrong here? The call to &lt;code class='prettyprint'&gt; _nhibernateSession.Update(post)&lt;/code&gt; is useless.&lt;/p&gt;

&lt;p&gt;Why? Because the NHibernate session already knows that the object is being changed. NHibernate &lt;em&gt;tracks&lt;/em&gt; objects so it can know if any changes need writing to the database.&lt;/p&gt;

&lt;p&gt;A call to &lt;code class='prettyprint'&gt;Update&lt;/code&gt; is used to tell NHibernate to &lt;em&gt;start&lt;/em&gt; tracking an object that it is not being tracked already (aka &lt;em&gt;detached&lt;/em&gt; object). In the example above, the Post is loaded from the NHibernate session, and is &lt;em&gt;already&lt;/em&gt; being tracked. Calling &lt;code class='prettyprint'&gt;Update&lt;/code&gt; on an object that is already being tracked is silly.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s easy to think that &lt;code class='prettyprint'&gt;Update&lt;/code&gt; signals NHibernate to save changes to the database - to instantly flush them. This is not the case. &lt;code class='prettyprint'&gt;Update&lt;/code&gt; simply indicates an object &lt;em&gt;has&lt;/em&gt; changes to be saved, not &lt;em&gt;when&lt;/em&gt; they are saved. Don&amp;#8217;t use &lt;code class='prettyprint'&gt;Update&lt;/code&gt; in an attempt to trigger an instant flush, that&amp;#8217;s what &lt;code class='prettyprint'&gt;Flush&lt;/code&gt; and &lt;code class='prettyprint'&gt;Commit&lt;/code&gt; are for.&lt;/p&gt;

&lt;p&gt;Your code will look cleaner without &lt;code class='prettyprint'&gt;Update&lt;/code&gt;s all over the place. Consider this: our latest NHibernate driven MVC app makes &lt;em&gt;zero&lt;/em&gt; calls to &lt;code class='prettyprint'&gt;Update&lt;/code&gt;. We don&amp;#8217;t need Update because we don&amp;#8217;t have a scenario where we detach and attach objects to the NH session. All functionality can be achieved though &lt;code class='prettyprint'&gt;Save&lt;/code&gt;, &lt;code class='prettyprint'&gt;Commit&lt;/code&gt; and &lt;code class='prettyprint'&gt;Rollback&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The previous example should really just exclude the redundant &lt;code class='prettyprint'&gt;Update&lt;/code&gt; as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;public ActionResult UpdatePost(int id, FormCollection form)
{	
	var post = _nhibernateSession.Load&amp;lt;Post&amp;gt;(id);
	post.Title = form[&amp;quot;PostTitle&amp;quot;];
	post.Body = form[&amp;quot;PostBody&amp;quot;];	
	_nhibernateSession.Transaction.Commit();
} &lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='when_update_is_required'&gt;When Update Is Required&lt;/h2&gt;

&lt;p&gt;So when is an &lt;code class='prettyprint'&gt;Update&lt;/code&gt; required? Here&amp;#8217;s a valid use of Update:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;public ActionResult UpdatePost(int id, FormCollection form)
{	
	var post = HttpContext.Session[id] as Post;
	post.Title = form[&amp;quot;PostTitle&amp;quot;];
	post.Body = form[&amp;quot;PostBody&amp;quot;];
	_nhibernateSession.Update(post);	
	_nhibernateSession.Transaction.Commit();	
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here, the &lt;code class='prettyprint'&gt;Post&lt;/code&gt; is pulled out of the Http session &amp;#8211; it is not being tracked yet. Then, it&amp;#8217;s properties are changed, and &lt;code class='prettyprint'&gt;Update&lt;/code&gt; is called. The object is re-associated with the session, and NHibernate will assume that it needs saving even though it observed no changes after re-association. In other words, &lt;code class='prettyprint'&gt;Update&lt;/code&gt; implies a save is required (&lt;code class='prettyprint'&gt;Lock&lt;/code&gt; can be used to associate an object with the session without making NHibernate assume a save is required).&lt;/p&gt;

&lt;p&gt;The call to &lt;code class='prettyprint'&gt;Update&lt;/code&gt; is valid when a detached object is being re-associated with a session, and you want the session to assume the object has changed.&lt;/p&gt;

&lt;p&gt;This variation will also work:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;public ActionResult UpdatePost(int id, FormCollection form)
{	
	var post = HttpContext.Session[id] as Post;
	_nhibernateSession.Update(post); // &amp;lt;-- 
	post.Title = form[&amp;quot;PostTitle&amp;quot;];
	post.Body = form[&amp;quot;PostBody&amp;quot;];	
	_nhibernateSession.Transaction.Commit();	
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The end result is the same, but because &lt;code class='prettyprint'&gt;Update&lt;/code&gt; is called &lt;em&gt;before&lt;/em&gt; the changes are applied to the object, NHibernate will waste CPU cycles tracking the changes made after the call to &lt;code class='prettyprint'&gt;Update&lt;/code&gt; before finally flushing them to the database. It&amp;#8217;s not &lt;em&gt;bad&lt;/em&gt;, just a tad wasteful.&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/6/11/nhibernate-calling-update-unnecessarily/</feedburner:origLink></entry>
  <entry>
    <title>PDF Output With yUML, And Other Things...</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/qnR9XYQAni0/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-06-04T03:05:06-07:00</id>
    <published>2009-06-04T03:05:06-07:00</published>
    <updated>2009-06-04T03:05:06-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;a href='yUML'&gt;http://yuml.me&lt;/a&gt; is less than a month old, and traffic has settled around 1000 visits a day. Users out there have generated well over 31,000 UML diagrams so far, wow!&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href='yUML'&gt;http://yuml.me&lt;/a&gt; is less than a month old, and traffic has settled around 1000 visits a day. Users out there have generated well over 31,000 UML diagrams so far, wow!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve continued to collect and fix bugs, and add new capabilities.&lt;/p&gt;

&lt;h2 id='pdfs'&gt;PDFs&lt;/h2&gt;

&lt;p&gt;You can now output your diagrams in PDF form. PDF&amp;#8217;s support full zoom on diagrams which looks really pretty, &lt;a href='http://yuml.me/diagram/scruffy/class/[note:%20You%20can%20stick%20notes%20on%20diagrams%20too!%7Bbg:cornsilk%7D],[Customer]%3C%3E1-orders%200..*%3E[Order],%20[Order]++*-*%3E[LineItem],%20[Order]-1%3E[DeliveryMethod],%20[Order]*-*%3E[Product],%20[Category]%3C-%3E[Product],%20[DeliveryMethod]%5E[National],%20[DeliveryMethod]%5E[International].pdf'&gt;try this example&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Creating a PDF is as simple as adding .pdf to the end of your link, for example:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;a href=&amp;quot;http://yuml.me/diagram/scruffy/class/[Customer]-&amp;gt;[Order].pdf&amp;quot;&amp;gt;My Diagram&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;a href='http://yuml.me/diagram/scruffy/class/[Customer]-&gt;[Order].pdf'&gt;My Diagram&lt;/a&gt;
&lt;p&gt;The diagrams looks like this:&lt;/p&gt;
&lt;img src='http://yuml.me/diagram/scruffy/class/[Customer]-%3E[Order]' /&gt;
&lt;h2 id='jpeg_output'&gt;JPEG Output&lt;/h2&gt;

&lt;p&gt;yUML generates .png images by default. These don&amp;#8217;t play well in some contexts, due to how some programs png handle transparency. Eduardo Mauro, the creator of &lt;a href='http://www.connectedtext.com/'&gt;ConnectedText&lt;/a&gt; pointed this out, as one of his customers was using copy/pasting yUML diagrams with FireFox.&lt;/p&gt;

&lt;p&gt;Getting a .jpg file from yUML is as simple as adding &lt;em&gt;.jpg&lt;/em&gt; onto the end of your link. Example:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;img src=&amp;quot;http://yuml.me/diagram/scruffy/class/[Customer]+1-&amp;gt;*[Order], [Order]++1-items &amp;gt;*[LineItem], [Order]-0..1&amp;gt;[PaymentMethod].jpg&amp;quot; /&amp;gt;  &lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy/class/[Customer]+1-%3E*[Order],%20[Order]++1-items%20%3E*[LineItem],%20[Order]-0..1%3E[PaymentMethod].jpg' /&gt;
&lt;h2 id='a_bit_more_scruffy'&gt;A Bit More Scruffy&lt;/h2&gt;

&lt;p&gt;The scruffy diagrams in yUML now are a bit more scruffy! This is simply down to a slighly more effective hand-writing font.&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;img src=&amp;quot;http://yuml.me/diagram/scruffy/class/[Customer]+1-&amp;gt;*[Order], [Order]++1-items &amp;gt;*[LineItem], [Order]-0..1&amp;gt;[PaymentMethod]&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy/class/[Customer]+1-%3E*[Order],%20[Order]++1-items%20%3E*[LineItem],%20[Order]-0..1%3E[PaymentMethod]' /&gt;
&lt;p&gt;If you don&amp;#8217;t like scruffy, just remove the /scruffy bit from the URL.&lt;/p&gt;

&lt;h2 id='bug_fixes'&gt;Bug Fixes&lt;/h2&gt;

&lt;p&gt;My next plans for yUML are to wipe out some of the annoying bugs in the DSL. I&amp;#8217;m also looking at parsing the DSL using a real PEG parser, which will allow for some a more funky and flexible DSL. I won&amp;#8217;t be breaking backward compatibility though, so all existing images will still work.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/6/4/pdf-output-with-yuml-and-other-things/</feedburner:origLink></entry>
  <entry>
    <title>yUML Direction Control and Scaling</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/c5yuwFld1DU/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-23T03:17:03-07:00</id>
    <published>2009-05-23T03:17:03-07:00</published>
    <updated>2009-05-23T03:17:03-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I really need to give &lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; it&amp;#8217;s own blog or news page or something :)&lt;/p&gt;

&lt;p&gt;Until then, a few things that are new with yUML.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I really need to give &lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; it&amp;#8217;s own blog or news page or something :)&lt;/p&gt;

&lt;p&gt;Until then, a few things that are new with yUML.&lt;/p&gt;

&lt;h2 id='class_diagram_direction_control'&gt;Class Diagram Direction Control&lt;/h2&gt;

&lt;p&gt;By default, class diagrams switch from horizontal layout to vertical if there are 4 or more classes in the diagram. If you don&amp;#8217;t want this behavior, you can override it by tweaking the URL adding a &lt;em&gt;dir:lr&lt;/em&gt; or &lt;em&gt;dir:td&lt;/em&gt;, where &lt;em&gt;td&lt;/em&gt; is Top Down and &lt;em&gt;lr&lt;/em&gt; is Left Right. Example of use:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;http://yuml.me/diagram/scruffy;dir:lr/class/[Customer]+1-&amp;gt;*[Order], [Order]++1-items &amp;gt;*[LineItem], [Order]-0..1&amp;gt;[PaymentMethod], [PaymentMethod]^[Card], [PaymentMethod]^[Cash], [PaymentMethod]^[Cheque].&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy;dir:lr/class/[Customer]+1-%3E*[Order],%20[Order]++1-items%20%3E*[LineItem],%20[Order]-0..1%3E[PaymentMethod],%20[PaymentMethod]^[Card],%20[PaymentMethod]^[Cash],%20[PaymentMethod]^[Cheque].%22%20alt=%22yUML%20Direction%20Control' /&gt;
&lt;h2 id='diagram_scaling'&gt;Diagram Scaling&lt;/h2&gt;

&lt;p&gt;Sometimes you want a bigger or smaller diagram. yUML lets you do this if you add a &lt;em&gt;scale:120&lt;/em&gt; to the image URL (120 being the % size you want to scale). Here&amp;#8217;s an example&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;http://yuml.me/diagram/scruffy;scale:200/class/[Customer]+1-&amp;gt;*[Order]&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy;scale:200/class/[Customer]+1-%3E*[Order]' alt='yUML Scaling' /&gt;
&lt;p&gt;Another example is this:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;http://yuml.me/diagram/scruffy;dir:lr;scale:75/class/[Customer]+1-&amp;gt;*[Order], [Order]++1-items &amp;gt;*[LineItem], [Order]-0..1&amp;gt;[PaymentMethod], [PaymentMethod]^[Card], [PaymentMethod]^[Cash], [PaymentMethod]^[Cheque].&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy;dir:lr;scale:75/class/[Customer]+1-%3E*[Order],%20[Order]++1-items%20%3E*[LineItem],%20[Order]-0..1%3E[PaymentMethod],%20[PaymentMethod]^[Card],%20[PaymentMethod]^[Cash],%20[PaymentMethod]^[Cheque].' alt='yUML Direction Control' /&gt;
&lt;h2 id='combining'&gt;Combining&lt;/h2&gt;

&lt;p&gt;You can combine these effects to make some interesting diagrams, here&amp;#8217;s how you might bolt together an org chart.&lt;/p&gt;

&lt;p&gt;http://yuml.me/diagram/plain;scale:200;dir:td/class/&lt;span&gt;My Company{bg:green}&lt;/span&gt;-&amp;gt;&lt;span&gt;Research{bg:yellow}&lt;/span&gt;, &lt;span&gt;My Company&lt;/span&gt;-&amp;gt;&lt;span&gt;Marketing{bg:lightblue}&lt;/span&gt;, &lt;span&gt;My Company&lt;/span&gt;-&amp;gt;&lt;span&gt;Sales{bg:orange}&lt;/span&gt;, &lt;span&gt;Sales&lt;/span&gt;-&lt;span&gt;note:Outsourced to Blah inc&lt;/span&gt;&lt;/p&gt;
&lt;img src='http://yuml.me/diagram/plain;scale:200;dir:td/class/[My%20Company{bg:green}]-%3E[Research{bg:yellow}],%20[My%20Company]-%3E[Marketing{bg:lightblue}],%20[My%20Company]-%3E[Sales{bg:orange}],%20[Sales]-[note:Outsourced%20to%20Blah%20inc]' /&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/23/yuml-direction-control-and-scaling/</feedburner:origLink></entry>
  <entry>
    <title>Awesome Pencil and Paper iPhone Prototyping</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/aiPj4I_m-CU/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-21T04:20:42-07:00</id>
    <published>2009-05-21T04:20:42-07:00</published>
    <updated>2009-05-21T04:20:42-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;There&amp;#8217;s something beautifully creative about sketches. I&amp;#8217;ve blogged about it before:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='yuml-scruffy-hand-drawn-look-/'&gt;Elite Game Artwork Scans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
    <content type="html">&lt;p&gt;There&amp;#8217;s something beautifully creative about sketches. I&amp;#8217;ve blogged about it before:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='yuml-scruffy-hand-drawn-look-/'&gt;Elite Game Artwork Scans&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='past/2008/9/15/get-that-sketchy-look-in-your-wireframes/'&gt;Software for Sketchy Wireframes&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='/why-is-paper-so-cool/'&gt;Why is paper so cool?&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='yuml-scruffy-hand-drawn-look-/'&gt;yUML and the Scruffy hand drawn look&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add to the collection, I just stumbled upon this post about someone creating &lt;a href='http://thenextweb.com/2009/05/21/designing-iphone-software-pencil-wooden-forms-ink-brush/'&gt;iPhone GUI prototypes using cardboard and paper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://img.skitch.com/20090521-enpd3n9nq3i2jenjc3294b5g26.jpg' alt='iPhone GUI Sketch Mockups' /&gt;&lt;/p&gt;

&lt;p&gt;Beautiful.&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/21/awesome-pencil-and-paper-iphone-prototyping/</feedburner:origLink></entry>
  <entry>
    <title>Notes on "Meeting the Challenge of Simplicity"</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/jnvEP10pAAg/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-15T15:26:28-07:00</id>
    <published>2009-05-15T15:26:28-07:00</published>
    <updated>2009-05-15T15:26:28-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I recently watched &lt;a href='http://www.infoq.com/presentations/giles-colborne-simplicity'&gt;a video on InfoQ of Giles Colborne give a talk on simplicity and user experience&lt;/a&gt;. Whilst I watched it, I took notes. Putting these study notes on my blog might be useful to someone&amp;#8230;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I recently watched &lt;a href='http://www.infoq.com/presentations/giles-colborne-simplicity'&gt;a video on InfoQ of Giles Colborne give a talk on simplicity and user experience&lt;/a&gt;. Whilst I watched it, I took notes. Putting these study notes on my blog might be useful to someone&amp;#8230;&lt;/p&gt;

&lt;h2 id='introduction'&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Mentions the book &amp;#8220;What Do People Do All Day&amp;#8221;. Well recommended.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ZX81 took away his childhood desire to be an astronaught!&lt;/li&gt;

&lt;li&gt;He looks at how people use technology in houses, workplaces, streets and stores.&lt;/li&gt;

&lt;li&gt;Runs &lt;a href='http://www.cxpartners.co.uk'&gt;cxpartners.co.uk&lt;/a&gt; and &lt;a href='http://cxpartners.com'&gt;cxpartners.com&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Clients include Noka and the BBC.&lt;/li&gt;

&lt;li&gt;They focus on turning peoples understanding into great user interfaces for phones, desktop, web etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='how_user_experiences_are_changing'&gt;How User Experiences are Changing&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;User experiences are getting smaller.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;In the old days, everyone wanted a &amp;#8220;portal&amp;#8221;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Yahoo! were leaders back then.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Until Google came along.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Google is simpler, with a smaller, more targeted user experience.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;weather.com is one of his favourite web sites (sarcastic!)&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;He says there are 113 links to tell us what the weather is going to be like.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Compares to a desktop widget with no links.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;People are crying out for less.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Small, compact, simple user experiences are becoming popular.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;One reason is that people dont&amp;#8217; have time.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;They need to do &lt;strong&gt;more things in less time&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;They don&amp;#8217;t have time to &amp;#8220;play&amp;#8221; with software.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;No-one reads the manual. Noone.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The software needs to be it&amp;#8217;s own documentation.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Mobile computing platforms are hugely popular and used.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;A task needs to be completed quickly on mobile device.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;It&amp;#8217;s the platform &lt;em&gt;everybody&lt;/em&gt; uses.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Most of the planet are using portable devices.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;This makes people want less.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;A computer is a consumer device, not a specialist device.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;That&amp;#8217;s why people love simple interfaces.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='what_is_simplicity'&gt;What is Simplicity?&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Isn&amp;#8217;t simplicity just a new word for Usability?&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;No. It&amp;#8217;s slightly different.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;ISO 9241-11 definition of usability is a &amp;#8220;combination of efficiency, effectiveness and satisfaction&amp;#8221;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Traditional systems (work based sofware) are highly efficient and effective, but satisfaction isn&amp;#8217;t a real factor.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Call center usability has more focus on efficiency than effectiveness and satisfaction.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Shaving 2 seconds of a call saves 100,000s of $$$ a year.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Web sites target effectiveness and satisfaction.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Efficiency isn&amp;#8217;t such a factor.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Simplicity implies larger satisfaction.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Simplicity is not about removing features.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;MS Word has a lot of features.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Microsoft Write was crap, removing all the features didn&amp;#8217;t help it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking at what it is NOT&amp;#8230;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding instructions is not simplicity. Telling people what to do doesn&amp;#8217;t make it simpler.&lt;/li&gt;

&lt;li&gt;Making something into steps - Wizards. This sounds like simplicity, but it isn&amp;#8217;t really.&lt;/li&gt;

&lt;li&gt;The experience of using a Wizard doesn&amp;#8217;t feel simple. It feels forced and contrived.&lt;/li&gt;

&lt;li&gt;You&amp;#8217;ve no idea where the computer is taking you, so anxiety is increased.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quote: &amp;#8220;The achievement of maximum effect with minimum means&amp;#8221; - Dr Koichi Kawana&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does that mean?&lt;/li&gt;

&lt;li&gt;Imagine driving, and traffic lights turn green as you appraoch them. The experience is very simple. * If they turn red as you approach, the experience is complicated and frustrating.&lt;/li&gt;

&lt;li&gt;Simplicity is referring to the experience that we give users, not the artifacts.&lt;/li&gt;

&lt;li&gt;Simplicity is difficult to pin down. You can&amp;#8217;t see it. It&amp;#8217;s elusive.&lt;/li&gt;

&lt;li&gt;User Experience occurs at many levels, and software is only one.&lt;/li&gt;

&lt;li&gt;Program model-mental model, visual output, input mechanisms, physical dimensions and handling etc.&lt;/li&gt;

&lt;li&gt;Devices exist in a context/eco system. iPod example - when it first took off it seems remarkable.&lt;/li&gt;

&lt;li&gt;Part of it&amp;#8217;s eco system was iTunes. Anyone could get their music on to their iPhone using iTunes.&lt;/li&gt;

&lt;li&gt;This context was very important.&lt;/li&gt;

&lt;li&gt;&amp;#8220;The achievement of maximum effect with minimum means&amp;#8221; is about what the &lt;em&gt;user&lt;/em&gt; is doing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='building_in_simplicity'&gt;Building in Simplicity&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How can we build-in simplicity?&lt;/li&gt;

&lt;li&gt;Another good book - &amp;#8220;The Laws Of Simplicity&amp;#8221;.&lt;/li&gt;

&lt;li&gt;Process for simplicity is a bunch of guidelines that you try and follow in a more or less specific order.&lt;/li&gt;

&lt;li&gt;Example, when working for online bank, he saw a date control that contributed to a frustrating user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rule: You have to begin with the context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select a month, select a year was for chosing a bank statement. There are lots of ways this can fail in context (no statements for given date.)&lt;/li&gt;

&lt;li&gt;Understanding context is understanding the effect a user is trying to produce.&lt;/li&gt;

&lt;li&gt;Ask, What does the user know? use that information to deliver a better experience.&lt;/li&gt;

&lt;li&gt;Simple interfaces require smarter software.&lt;/li&gt;

&lt;li&gt;Put the intelligence back into the software.&lt;/li&gt;

&lt;li&gt;Things go wrong when work is pushed on to end users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rule: Just Simple Enough. Don&amp;#8217;t over simplify.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3 step process. Shrink, Hide, Embody.&lt;/li&gt;

&lt;li&gt;Drop down menu in UI is an example. Pushing functionality out of the way. Leave room for what people want to do.&lt;/li&gt;

&lt;li&gt;Remove the irrelevant, emphasise what matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A travel planner is a very complex problem. It&amp;#8217;s very unstructured. Different people have very different goals. People plan to different levels of details. A wedding trip is very different to a full holiday, for example. Time, place and money all there. Deciding between options.&lt;/p&gt;

&lt;p&gt;Laying all that out in a meaningful way was very difficult. Then they realised that all the complexity was inside the users head. Users were just creating lists. The resultant travel planner was just a list of stuff! They could just drag stuff onto a list, sort and group it. A very simple solution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A complex task can sometimes demand a very simple solution. You can let &lt;em&gt;people&lt;/em&gt; have the knowledge, not the software.&lt;/li&gt;

&lt;li&gt;Orgainising information can make it much more accessible.&lt;/li&gt;

&lt;li&gt;Tidying a UI can sometimes simplify it, because of the users perception.&lt;/li&gt;

&lt;li&gt;Waiting takes away the sense of simplicity. Don&amp;#8217;t make people wait.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Book: &amp;#8220;The Humane Interface&amp;#8221; by Jeff Raskin&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jeff found a way of making a computer appear to start instantly by showing a picture of the screen before the loading was happening (I think Apple do this).&lt;/li&gt;

&lt;li&gt;Taking away waiting time gives the sense of simplicity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing&amp;#8230;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We are not like the people who use our software.&lt;/li&gt;

&lt;li&gt;Testing requires real people. Some end users.&lt;/li&gt;

&lt;li&gt;If you can&amp;#8217;t do that, then you can count clicks.&lt;/li&gt;

&lt;li&gt;Another method is Goms KLM. Keybaord presses, mouse repositioning, moving hand from keyboard to mouse, system reponse time, user thinking time.&lt;/li&gt;

&lt;li&gt;Adding up all this gives a measure of efficiency.&lt;/li&gt;

&lt;li&gt;Over and above standard click tracking, it includes more subjective experience into account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#8220;People will do anyting to avoid thinking.&amp;#8221; That includes pretending the sofwtare is broken.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the users process and context&lt;/li&gt;

&lt;li&gt;Shrink hide embody&lt;/li&gt;

&lt;li&gt;Organize the UI&lt;/li&gt;

&lt;li&gt;Eliminate waiting&lt;/li&gt;

&lt;li&gt;Testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='warning_signs'&gt;Warning Signs&lt;/h2&gt;

&lt;p&gt;Warning bells should ring when people say stuff like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;#8220;We&amp;#8217;ll put in a linear step by step process&amp;#8221;. Controlling the user is a bad thing.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;We&amp;#8217;ll let the user decide, let them customize&amp;#8230;&amp;#8221;. That&amp;#8217;s not making a decision, don&amp;#8217;t make users configure sotware.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;What if the user wanted to&amp;#8230;&amp;#8221;. What if&amp;#8217;s during design meetings are when user interaces and features expand out of control. You need to go away and find out before building.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;Instructions&amp;#8221; System should correspond to mental model. Instruction indicate a problem.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;Long lists&amp;#8221; People lose themsleves in long lists! People lose focus when reading long lists. Simplicity gives way to hypnotism.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;Home Pages&amp;#8221;. The desktop is the worst part of the WIMP OS. It&amp;#8217;s the place where noone wants to be. Noone comes to the computer to use their desktop. It&amp;#8217;s a place wheres stuff accrues. What would happen if you didn&amp;#8217;t have a desktop. Home pages are the same. Software should start in a place that most people want to be.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8220;Error messages&amp;#8221;. Something has gone wrong. The computer invites people to get into a fight with the software.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Simplicity is a type of usability. It&amp;#8217;s not all of usabiltiy. It&amp;#8217;s important as we try and cram technology into more areas of our lives.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;You need to put in effort. You need to understand the solution up front.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;You have to exercise constraint. Don&amp;#8217;t be lured by complexity.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Smarter programming, not always more programming.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='minimalism'&gt;Minimalism&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Minimalism is very pleasing.&lt;/li&gt;

&lt;li&gt;&amp;#8220;Perfection is achieved not when there is nothing more to add but where there is nothing more to take away.&amp;#8221;&lt;/li&gt;

&lt;li&gt;Avoid modes. Somthings are inherently modal (photoshop).&lt;/li&gt;
&lt;/ul&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/15/notes-on-meeting-the-challenge-of-simplicity/</feedburner:origLink></entry>
  <entry>
    <title>yUML Diagrams Look Cool On GitHub</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/7qQHG4ljSmk/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-07T09:12:36-07:00</id>
    <published>2009-05-07T09:12:36-07:00</published>
    <updated>2009-05-07T09:12:36-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;a href='http://gist.github.com/108176'&gt;View Diagrams on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I messed about with putting yUML diagrams on a GitHub &lt;em&gt;gist&lt;/em&gt;, I think &lt;a href='http://gist.github.com/108176'&gt;they work well&lt;/a&gt; with the GitHub style.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href='http://gist.github.com/108176'&gt;View Diagrams on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I messed about with putting yUML diagrams on a GitHub &lt;em&gt;gist&lt;/em&gt;, I think &lt;a href='http://gist.github.com/108176'&gt;they work well&lt;/a&gt; with the GitHub style.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve also put them in a README.markdown file, which gets displayed by default on the repository home page, if it exists. And you can also embed them in the the Wiki.&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/7/yuml-diagrams-look-cool-on-github/</feedburner:origLink></entry>
  <entry>
    <title>yUML Scruffy Hand Drawn Look </title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/kZpaOU-eGHM/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-07T09:06:24-07:00</id>
    <published>2009-05-07T09:06:24-07:00</published>
    <updated>2009-05-07T09:06:24-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;I thought it would be fun to have a scruffy hand drawn look for yUML diagrams, which I&amp;#8217;m &lt;a href='http://www.tobinharris.com/past/2008/9/15/why-is-paper-so-cool/'&gt;really&lt;/a&gt; fond of.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I thought it would be fun to have a scruffy hand drawn look for yUML diagrams, which I&amp;#8217;m &lt;a href='http://www.tobinharris.com/past/2008/9/15/why-is-paper-so-cool/'&gt;really&lt;/a&gt; fond of.&lt;/p&gt;

&lt;p&gt;To get the scruffy look you&amp;#8217;d just add &lt;code class='prettyprint'&gt;/scruffy/&lt;/code&gt; in the URL. Example:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;img src=&amp;quot;http://yuml.me/diagram/scruffy/class/[Form{bg:orange}]+-*&amp;gt;[Control], [Form]++-0..1&amp;gt;[Border], [Form]-1&amp;gt;[Handle]&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/scruffy/class/[Form{bg:orange}]+-*%3E[Control],%20[Form]++-0..1%3E[Border],%20[Form]-1%3E[Handle]' /&gt;
&lt;p&gt;The benefit of this style is that it reminds people that diagrams are just for rough communication purposes, not a prescription of what WILL be built.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve blogged about this a few times last year&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.tobinharris.com/past/2008/9/15/why-is-paper-so-cool/'&gt;Why is paper so cool?&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.tobinharris.com/past/2008/9/15/get-that-sketchy-look-in-your-wireframes/'&gt;Get that sketchy look in your wireframes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In case you&amp;#8217;re interested, the neat version looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;img src=&amp;quot;http://yuml.me/diagram/class/[Form{bg:orange}]+-*&amp;gt;[Control], [Form]++-0..1&amp;gt;[Border], [Form]-1&amp;gt;[Handle]&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img src='http://yuml.me/diagram/class/[Form{bg:orange}]+-*%3E[Control],%20[Form]++-0..1%3E[Border],%20[Form]-1%3E[Handle]' /&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/7/yuml-scruffy-hand-drawn-look-/</feedburner:origLink></entry>
  <entry>
    <title>A Touch Of Polish for yUML </title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/5gyxVfYlmyg/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-04T03:55:21-07:00</id>
    <published>2009-05-04T03:55:21-07:00</published>
    <updated>2009-05-04T03:55:21-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;Thought it might be nice to add a touch of polish to &lt;a href='http://yUML.me'&gt;yUML&lt;/a&gt;. We&amp;#8217;ve now got:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Soft Shadows&lt;/li&gt;
&lt;/ul&gt;</summary>
    <content type="html">&lt;p&gt;Thought it might be nice to add a touch of polish to &lt;a href='http://yUML.me'&gt;yUML&lt;/a&gt;. We&amp;#8217;ve now got:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Soft Shadows&lt;/li&gt;

&lt;li&gt;Ability to embed colour in diagrams in the DSL: &lt;code class='prettyprint'&gt;[Customer{bg:orange}]&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Smaller label text&lt;/li&gt;

&lt;li&gt;Long labels wrap onto multiple lines&lt;/li&gt;
&lt;/ul&gt;
&lt;img src='http://yuml.me/diagram/class/[DataSet{bg:green}]%3C%3E0..1%20DataSet-Tables%20*%3E[Long Named Data Table{bg:lightblue}],%20[Long Named Data Table]++-Rows%20*%3E[DataRow{bg:red}],%20[DataRow]++-Columns%20*%3E[DataColumn{bg:orange}]' /&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/4/a-touch-of-polish-for-yuml-/</feedburner:origLink></entry>
  <entry>
    <title>yUML and jQuery for Large Diagrams</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/5qM63oKRPPI/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-05-02T04:55:12-07:00</id>
    <published>2009-05-02T04:55:12-07:00</published>
    <updated>2009-05-02T04:55:12-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; is for creating &lt;em&gt;back of napkin&lt;/em&gt; style UML drawings, in a fast and hassle-free way. I much prefer small UML diagrams backed up with text, and yUML reflects this mind-set. If you &lt;em&gt;do&lt;/em&gt; want to create larger diagrams, then this post might help you.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; is for creating &lt;em&gt;back of napkin&lt;/em&gt; style UML drawings, in a fast and hassle-free way. I much prefer small UML diagrams backed up with text, and yUML reflects this mind-set. If you &lt;em&gt;do&lt;/em&gt; want to create larger diagrams, then this post might help you.&lt;/p&gt;

&lt;p&gt;Inspired by &lt;a href='http://blog.eelcovisser.net/index.php?/archives/99-A-Textual-DSL-for-creating-Visual-Diagrams.html'&gt;Eelco Vissers blog post&lt;/a&gt;, I thought of fairly neat way to make it easier to construct larger diagrams.&lt;/p&gt;

&lt;p&gt;First, create a DIV, and write your yUML DSL text in it.&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;div class=&amp;quot;diagram&amp;quot; style=&amp;quot;&amp;quot;&amp;gt;
	[Account]++-1&amp;gt;[Company],
	[Company]++-1&amp;gt;[Settings],
	[Company]+-*&amp;gt;[Completion],
	[Completion]-1&amp;gt;[Candidate],
	[Completion]^[WebBasedCompletion],
	[Completion]^[PaperBasedCompletion],
	[Completion]-1&amp;gt;[Questionnaire],
	[Questionnaire]-&amp;gt;[ScoreSet],
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The benefit of having the DSL text in a div as opposed to an img tag is that it&amp;#8217;s is quite easy to read and edit. Next, use this little jQuery script to take the DIV contents and construct a regular yUML image tag. My jQuery skillz are a bit naff, I&amp;#8217;m sure someone could improve on this :)&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;
	$(&amp;#39;document&amp;#39;).ready(function(){
		text = $(&amp;#39;.diagram&amp;#39;).html().substring(1,$(&amp;#39;.diagram&amp;#39;).html().length-1).replace(&amp;#39;\t&amp;#39;,&amp;#39;&amp;#39;).replace(&amp;#39;\n&amp;#39;,&amp;#39;&amp;#39;);
		$(&amp;#39;.diagram&amp;#39;).html(&amp;#39;&amp;#39;); //clear DSL
		$(&amp;#39;.diagram&amp;#39;).append(&amp;#39;&amp;lt;img src=&amp;quot;http://yuml.me/diagram/class/&amp;#39; + text + &amp;#39;&amp;quot;/&amp;gt;&amp;#39;);		
	});
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The script builds the image tag using the text in the div, and appends the tag to the DOM. The example in this post generates this image:&lt;/p&gt;
&lt;img src='http://yuml.me/diagram/class/[Account]++-1%3E[Company],[Company]++-1%3E[Settings],[Company]+-*%3E[Completion],[Completion]-1%3E[Candidate],[Completion]^[WebBasedCompletion],[Completion]^[PaperBasedCompletion],[Completion]-1%3E[Questionnaire],[Questionnaire]-%3E[ScoreSet],' alt='Large UML diagram' /&gt;
&lt;p&gt;I appreciate that It&amp;#8217;s not as convenient as embedding the DSL straight in an image tag. Personally, I&amp;#8217;ll probably stick to creating small diagrams that way. For those that want to build larger UML diagrams, this approach might do the trick?&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/5/2/yuml-and-jquery-for-large-diagrams/</feedburner:origLink></entry>
  <entry>
    <title>yUML - For NOT Sketching UML Diagrams Online!  </title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/dFRtzYZqSh4/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-04-30T14:25:37-07:00</id>
    <published>2009-04-30T14:25:37-07:00</published>
    <updated>2009-04-30T14:25:37-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; is a tool that lets you create UML diagrams using only &amp;#60;img&amp;#62; tags. Here&amp;#8217;s an example:&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href='http://yuml.me'&gt;yUML&lt;/a&gt; is a tool that lets you create UML diagrams using only &amp;#60;img&amp;#62; tags. Here&amp;#8217;s an example:&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;&amp;lt;!-- This is the Image Tag you&amp;#39;d put in your blog post --&amp;gt;
&amp;lt;img src=&amp;quot;http://yuml.me/diagram/class/[Customer]&amp;lt;&amp;gt;-*&amp;gt;[Order]&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And this outputs the following image.&lt;/p&gt;
&lt;img src='http://yuml.me/diagram/class/[Customer]%3C%3E-*%3E[Order]' /&gt;
&lt;p&gt;The useful thing about this is that, if you learn the DSL used to for the &lt;code class='prettyprint'&gt;img&lt;/code&gt; tags, you can create diagrams straight from your blogging tool. This makes it useful for bloggers or analysts who want to embed diagrams in their documents.&lt;/p&gt;

&lt;p&gt;To get a feel for what&amp;#8217;s possible, see the &lt;a href='http://yuml.me/diagram/class/samples'&gt;class diagram samples&lt;/a&gt; and the &lt;a href='http://yuml.me/diagram/usecase/samples'&gt;use case diagram samples&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;yUML also has a simple &lt;a href='http://yuml.me/diagram/class/draw'&gt;online editor&lt;/a&gt; for those who want to generate a diagram online, and then drag it into Word or LiveWriter, or a folder on their disk.&lt;/p&gt;

&lt;p&gt;This product is only in Beta, and I&amp;#8217;m hoping it can blossom into something truly useful and valuable. I need to start thinking about how to fund the hosting, and how to speed up the image generation for starters!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d be really interested in hearing opinions and feedback from anyone that uses it. Even if it&amp;#8217;s just &amp;#8220;This SUCKS&amp;#8221; :)&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/4/30/yuml-for-not-sketching-uml-diagrams-online-/</feedburner:origLink></entry>
  <entry>
    <title>.NET Config for Multiple Developers</title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/ooMBy6cU7hs/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-04-30T10:19:33-07:00</id>
    <published>2009-04-30T10:19:33-07:00</published>
    <updated>2009-04-30T10:19:33-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;Here&amp;#8217;s a simple solution I just thought up for when you have multiple developers working on a project, and you want each to have their own connection string in Web.config (under source control).&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Here&amp;#8217;s a simple solution I just thought up for when you have multiple developers working on a project, and you want each to have their own connection string in Web.config (under source control).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve seen some pretty complex approaches to this, but what about this one&amp;#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;//Global.asax.cs

protected void Application_Start()
{	
    //other stuff here...

    UoW.Configure(
        WebConfigurationManager
           .ConnectionStrings[Environment.MachineName].ConnectionString);
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then, in web config, you&amp;#8217;d have something like this.&lt;/p&gt;

&lt;pre&gt;&lt;code class='prettyprint'&gt;//Web.config

&amp;lt;connectionStrings&amp;gt;		
    &amp;lt;add name=&amp;quot;TOBIN-AB69C7A1F&amp;quot; connectionString=&amp;quot;server=.\SQLEXPRESS2008;database=MdlDevelopment;Trusted_Connection=true&amp;quot;/&amp;gt;
    &amp;lt;add name=&amp;quot;LIVESERVER-101&amp;quot; connectionString=&amp;quot;data source=192.168.1.87;Integrated Security=SSPI;Trusted_Connection=true&amp;quot;/&amp;gt;
    &amp;lt;!-- add yours here --&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In short, each developer adds a new connection string to the Web.Config. The name is his machine name. Simple huh!&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/4/30/net-config-for-multiple-developers/</feedburner:origLink></entry>
  <entry>
    <title>Rake and .NET: The Story Continues </title>
    <link href="http://feedproxy.google.com/~r/blog_of_tobin/~3/8qrhUTbie2s/" rel="alternate" />
    <id>tag:www.tobinharris.com,2009-04-09T07:19:09-07:00</id>
    <published>2009-04-09T07:19:09-07:00</published>
    <updated>2009-04-09T07:19:09-07:00</updated>
    <author>
      <name>Tobin Harris</name>
    </author>
    <summary type="html">&lt;p&gt;It seems more and more folks are using Rake to automate .NET development tasks. This is great news, and I hope we&amp;#8217;ll soon see a community effort to make Rake even more valuable for the .NET developer.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;It seems more and more folks are using Rake to automate .NET development tasks. This is great news, and I hope we&amp;#8217;ll soon see a community effort to make Rake even more valuable for the .NET developer.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://blog.neverrunwithscissors.com'&gt;Peter Mounce&lt;/a&gt; pointed me at his &lt;a href='http://github.com/petemounce/rake-dotnet'&gt;project&lt;/a&gt;, containing Rake tasks designed for .NET projects. Amongst other things, there are tasks to run NCover, XUnit and FXCop. It&amp;#8217;s certainly &lt;a href='http://github.com/petemounce/rake-dotnet'&gt;worth a look&lt;/a&gt;, and I&amp;#8217;d be interested in helping develop it further.&lt;/p&gt;

&lt;p&gt;Peter has also &lt;a href='http://blog.neverrunwithscissors.com/tag/rake/'&gt;blogged&lt;/a&gt; about using Rake with .NET, and I regularly see a RakeFile.rb in &lt;a href='http://jagregory.com/'&gt;James &amp;#8220;Fluent NHibernate&amp;#8221; Gregory&amp;#8217;s&lt;/a&gt; .NET projects.&lt;/p&gt;

&lt;p&gt;Los Techies blogger, Derick Bailey, recently &lt;a href='http://www.lostechies.com/blogs/derickbailey/archive/2009/04/08/how-a-net-developer-learned-ruby-and-rake-to-build-net-apps-in-windows.aspx'&gt;wrote about Rake and .NET&lt;/a&gt;. His post gives a nice overview, including pretty screen shots of how it works.&lt;/p&gt;

&lt;p&gt;Finally, I&amp;#8217;ve &lt;a href='/past/tags/rake'&gt;blogged about Rake with .NET&lt;/a&gt; a few times too.&lt;/p&gt;

&lt;p&gt;Happy Raking.&lt;/p&gt;</content>
  <feedburner:origLink>http://www.tobinharris.com/past/2009/4/9/rake-and-net-the-story-continues-/</feedburner:origLink></entry>
</feed>
