<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Self Modifying. &#187; software design</title>
	<atom:link href="http://blog.selfmodifying.com/category/software-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.selfmodifying.com</link>
	<description>The weblog of Ryan Garver.  A coffee nut.  An agile freak.</description>
	<lastBuildDate>Mon, 30 Aug 2010 03:40:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.selfmodifying.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/dd4961a826989b7a52e1ae8fbe14143a?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Self Modifying. &#187; software design</title>
		<link>http://blog.selfmodifying.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.selfmodifying.com/osd.xml" title="Self Modifying." />
	<atom:link rel='hub' href='http://blog.selfmodifying.com/?pushpress=hub'/>
		<item>
		<title>A new kind of socially-biased search engine: Blekko</title>
		<link>http://blog.selfmodifying.com/2010/08/26/a-new-kind-of-socially-biased-search-engine-blekko/</link>
		<comments>http://blog.selfmodifying.com/2010/08/26/a-new-kind-of-socially-biased-search-engine-blekko/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:07:10 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[web technology]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[blekko]]></category>
		<category><![CDATA[query languages]]></category>

		<guid isPermaLink="false">http://blog.selfmodifying.com/?p=134</guid>
		<description><![CDATA[A new kind of socially-biased search engine: Blekko. This idea of a simple query language that actually is geared towards normal people is interesting.  SQL was supposed to be that way back when, but no one today would ever claim that a search engine that exposed SQL to users would be better for the masses. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=134&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=tlESXiyyA5M&amp;feature=youtube_gdata_player" target="_blank">A new kind of socially-biased search engine: Blekko</a>.</p>
<p>This idea of a simple query language that actually is geared towards normal people is interesting.  SQL was supposed to be that way back when, but no one today would ever claim that a search engine that exposed SQL to users would be better for the masses.  But a simpler version could have some really awesome broad impact in other areas.  As people become more comfortable using semi-structured queries we can use them in our own web apps without extensive education or making them &#8220;advanced features&#8221;.  I don&#8217;t know if <a href="http://www.blekko.com" target="_blank">Blekko</a> can succeed, but if they can I think the web will benefit in some interesting ways.</p>
<br />Filed under: <a href='http://blog.selfmodifying.com/category/software/'>software</a>, <a href='http://blog.selfmodifying.com/category/software-design/'>software design</a>, <a href='http://blog.selfmodifying.com/category/web-technology/'>web technology</a> Tagged: <a href='http://blog.selfmodifying.com/tag/blekko/'>blekko</a>, <a href='http://blog.selfmodifying.com/tag/query-languages/'>query languages</a>, <a href='http://blog.selfmodifying.com/tag/tools/'>tools</a>, <a href='http://blog.selfmodifying.com/tag/web-applications/'>web applications</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=134&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2010/08/26/a-new-kind-of-socially-biased-search-engine-blekko/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Wave: why we didn&#8217;t use it</title>
		<link>http://blog.selfmodifying.com/2010/08/07/google-wave-why-we-didnt-use-it/</link>
		<comments>http://blog.selfmodifying.com/2010/08/07/google-wave-why-we-didnt-use-it/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 18:19:56 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[failure]]></category>

		<guid isPermaLink="false">http://blog.selfmodifying.com/?p=116</guid>
		<description><![CDATA[Google Wave: why we didn&#8217;t use it. I really am disappointed that Google Wave has failed.  I think the Ars article does a good job of summarizing why it didn&#8217;t really take off despite the best press you could ask for not to mention Google backing it. I&#8217;m still hopeful that the underlaying protocol can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=116&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://arstechnica.com/software/news/2010/08/google-wave-why-we-didnt-use-it.ars?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss">Google Wave: why we didn&#8217;t use it</a>.</p>
<p>I really am disappointed that Google Wave has failed.  I think the Ars article does a good job of summarizing why it didn&#8217;t really take off despite the best press you could ask for not to mention <strong>Google</strong> backing it.</p>
<p>I&#8217;m still hopeful that the underlaying protocol can still be salvaged in some alternate clients.  It really would be interesting to see it reanimated in a different form by someone else.  Even if it were just added as a new account type in Mail.app or iChat and literally only provided feature parity with that tool initially, that might be a more logical progression to introducing what should be a more powerful and flexible communication protocol.  This will also give users a better understood starting point and we can more gradually figure out what people what to be able to do and how they want to do it along the way.  The fully baked solution the Google&#8217;s implementation provided really didn&#8217;t enjoy much user feedback to influence its development until way too late in the process.</p>
<br />Filed under: <a href='http://blog.selfmodifying.com/category/software/'>software</a>, <a href='http://blog.selfmodifying.com/category/software-design/'>software design</a>, <a href='http://blog.selfmodifying.com/category/user-interface/'>user interface</a> Tagged: <a href='http://blog.selfmodifying.com/tag/failure/'>failure</a>, <a href='http://blog.selfmodifying.com/tag/google-wave/'>google wave</a>, <a href='http://blog.selfmodifying.com/tag/product-development/'>product development</a>, <a href='http://blog.selfmodifying.com/tag/web-applications/'>web applications</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=116&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2010/08/07/google-wave-why-we-didnt-use-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>JustinFrench.com: Pagination Alternatives</title>
		<link>http://blog.selfmodifying.com/2010/08/02/justinfrench-com-pagination-alternatives/</link>
		<comments>http://blog.selfmodifying.com/2010/08/02/justinfrench-com-pagination-alternatives/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 21:13:21 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[software design]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[interaction design]]></category>
		<category><![CDATA[pagination]]></category>

		<guid isPermaLink="false">http://blog.selfmodifying.com/?p=95</guid>
		<description><![CDATA[JustinFrench.com: Pagination Alternatives. Great description of some of the deficiencies of pagination as well as a number things to think about when presenting large quantities of data to users. Filed under: software design, user interface Tagged: interaction design, pagination, user interface, web applications<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=95&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://justinfrench.com/notebook/pagination-alternatives">JustinFrench.com: Pagination Alternatives</a>.</p>
<p>Great description of some of the deficiencies of pagination as well as a number things to think about when presenting large quantities of data to users.</p>
<br />Filed under: <a href='http://blog.selfmodifying.com/category/software-design/'>software design</a>, <a href='http://blog.selfmodifying.com/category/user-interface/'>user interface</a> Tagged: <a href='http://blog.selfmodifying.com/tag/interaction-design/'>interaction design</a>, <a href='http://blog.selfmodifying.com/tag/pagination/'>pagination</a>, <a href='http://blog.selfmodifying.com/tag/user-interface/'>user interface</a>, <a href='http://blog.selfmodifying.com/tag/web-applications/'>web applications</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/95/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=95&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2010/08/02/justinfrench-com-pagination-alternatives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>User Stories and Mind Mapping</title>
		<link>http://blog.selfmodifying.com/2010/02/02/user-stories-and-mind-mapping/</link>
		<comments>http://blog.selfmodifying.com/2010/02/02/user-stories-and-mind-mapping/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 01:38:33 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[agility]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[agile process]]></category>
		<category><![CDATA[mind maps]]></category>
		<category><![CDATA[requirement collection]]></category>
		<category><![CDATA[user story]]></category>

		<guid isPermaLink="false">http://blog.selfmodifying.com/?p=83</guid>
		<description><![CDATA[I read an article recently by Robert Dempsey about how he has recently discovered mind mapping as a way to manage user stories.  His technique was interesting and it gave me the excuse I needed to take another shot at mind mapping. I&#8217;ve tried mind mapping in the past and it never really stuck for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=83&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I read an <a href="http://blog.adsdevshop.com/2010/01/29/use-mindmapping-to-craft-user-stories/" target="_blank">article</a> recently by Robert Dempsey about how he has recently discovered mind mapping as a way to manage user stories.  His technique was interesting and it gave me the excuse I needed to take another shot at mind mapping.</p>
<p>I&#8217;ve tried mind mapping in the past and it never really stuck for me.  It was a little too free form.  I needed some structure for my ideas, that&#8217;s why I was looking for something in the first place.  Robert&#8217;s post briefly describes the structure that he has used for forming user stories.  The method made the idea click a little bit better.  Basically he starts with the project in the center and then the ring out is the different actors.  Hanging off the actors are the actions that they should be doing.</p>
<p>I downloaded the 30 day trial of <a href="http://www.mindjet.com/products/mindmanager-8-mac/overview" target="_blank">MindJet MindManager</a> and tried Robert&#8217;s technique out on my current project.  It was a lot easier to get started that it had been on previous attempts with mind mapping, but I kept feeling like something was missing.  Here&#8217;s what finally clicked for me: <strong>what the user does is less important than why they want to do it</strong>.</p>
<p>In the classic user story we have an actor, an action, and a business value that the story provides (As an &lt;actor&gt; I want to &lt;action&gt; so I can &lt;business value&gt;).  I slightly modified Robert&#8217;s approach and added a level for business value &#8212; the &#8220;so I can&#8221; clause of a user story.  Now I have the project in the center, next the actors, and then I start listing out the business value that each actor wants to get from the app that we are building.  Under each of these leaves I can then start describing actions that would provide the actor with the business value.</p>
<p>This really make things click.  My ideas started to come together and I feel like the result is clear user stories that are customer business value focused.  I need to thank Robert again for convincing me to dig in to mind maps again.  I think this will be a big help in focusing my ideas in to something communicable and implementable.</p>
<br />Filed under: <a href='http://blog.selfmodifying.com/category/agility/'>agility</a>, <a href='http://blog.selfmodifying.com/category/mind-map/'>mind map</a>, <a href='http://blog.selfmodifying.com/category/software-design/'>software design</a> Tagged: <a href='http://blog.selfmodifying.com/tag/agile-process/'>agile process</a>, <a href='http://blog.selfmodifying.com/tag/mind-maps/'>mind maps</a>, <a href='http://blog.selfmodifying.com/tag/requirement-collection/'>requirement collection</a>, <a href='http://blog.selfmodifying.com/tag/user-story/'>user story</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=83&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2010/02/02/user-stories-and-mind-mapping/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>SPDY looks&#8230; possible</title>
		<link>http://blog.selfmodifying.com/2009/11/19/spdy-looks-possible/</link>
		<comments>http://blog.selfmodifying.com/2009/11/19/spdy-looks-possible/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 02:42:56 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[spdy]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://blog.selfmodifying.com/?p=72</guid>
		<description><![CDATA[Google recently announced their SPDY protocol that they&#8217;ve been working on to address a number of inherent non-performant aspects of the HTTP protocol that most of the web depends on.  In the last few years the web has shifted much more towards real-time applications.  Web application development is starting to think about interaction experiences much [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=72&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Google recently announced their <a href="http://dev.chromium.org/spdy">SPDY protocol</a> that they&#8217;ve been working on to address a number of inherent non-performant aspects of the HTTP protocol that most of the web depends on.  In the last few years the web has shifted much more towards real-time applications.  Web application development is starting to think about interaction experiences much closer to desktop apps.  It&#8217;s not out of bounds to consider the response times of certain queries on a website in terms of keystrokes (~200ms).  Moving the request/transmission protocols to catchup with this change makes sense.</p>
<p>One thing that I am happy about with SPDY is that is appears to be built with deployment clearly in mind.  This isn&#8217;t the first attempt to improve web speeds, it&#8217;s not even the best, but it does appear to be the simplest to deploy in to the wild and see rapid adoption.  If Apache and Firefox gained support for SDPY out of the box, and it was show that using the protocol would improve server throughput, it would be enough to shift most websites over.  That&#8217;s only two players.  That&#8217;s pretty promising.</p>
<br />Posted in programming, software design Tagged: deployment, http, latency, spdy, web applications <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=72&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2009/11/19/spdy-looks-possible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>Should I use an instance variable?</title>
		<link>http://blog.selfmodifying.com/2008/11/17/should_i_use_an_instance_variable/</link>
		<comments>http://blog.selfmodifying.com/2008/11/17/should_i_use_an_instance_variable/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 20:07:04 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://selfmodifying.wordpress.com/?p=31</guid>
		<description><![CDATA[No. If you are in a position to ask this question I humbly recommend you default to: &#8220;No, I do not need this as an instance variable right now.&#8221; There is a tendency to plan for every potentiality when doing software development and this is a prime example of such a situation. Resist the temptation. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=31&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No.</p>
<p>If you are in a position to ask this question I humbly recommend you default to: &#8220;No, I do not need this as an instance variable right now.&#8221;  There is a tendency to plan for every potentiality when doing software development and this is a prime example of such a situation.  Resist the temptation.</p>
<p>Instance variables represent state associated with an object in memory.  When you declare an instance variable you are saying to all future developers: &#8220;This piece of state needs to last for the life time of this object because it will be used elsewhere.&#8221;  Think very hard about that.  We are saying loudly here that this variable is coupled to other fragments of code.  Which code?  Dunno, do a global search <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>This is called tight coupling.  I will go so far to say that coupling is the source of all evil and complexity that we deal with as programmers.  With every step that we, as programmers, take in building a system should be with an eye to reduce or at least not increase the coupling in the system that we are working on.  The fewer instance variables that we have in a Rails controller the smaller the potential coupling between the view and other method calls that have access to those instance variables.  Each method, each action in a controller, should be as self contained as possible.  The less leakage of state out of a function the better.  Generally your view doesn&#8217;t need to see that temp variable of the calculations that you made to set a model attribute keep it local, drop the &#8220;@&#8221;.  Worst case scenario you go back and refactor your code to include that &#8220;@&#8221;.</p>
<br />Posted in programming, software design Tagged: programming, ruby, ruby on rails <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=31&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2008/11/17/should_i_use_an_instance_variable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
		<item>
		<title>Data Driven vs Logic Driven</title>
		<link>http://blog.selfmodifying.com/2008/10/25/data_driven_vs_logic_driven/</link>
		<comments>http://blog.selfmodifying.com/2008/10/25/data_driven_vs_logic_driven/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 19:00:27 +0000</pubDate>
		<dc:creator>Ryan Garver</dc:creator>
				<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://selfmodifying.wordpress.com/?p=16</guid>
		<description><![CDATA[My recent work has had me diagnosing some fairly common issues that one sees from developers moving from a language like PHP to Ruby on Rails.  The PHP philosophy (as I remember it) is to not restrict how you work and to seamlessly weave your code and your views together.  For very small websites this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=16&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My recent work has had me diagnosing some fairly common issues that one sees from developers moving from a language like PHP to Ruby on Rails.  The PHP philosophy (as I remember it) is to not restrict how you work and to seamlessly weave your code and your views together.  For very small websites this is fine.  I&#8217;ve even been told that this works really well for situations where most of the work is happening elsewhere (think Actionscript and Flash), which forces a kind of modularization.  Regardless we end up with lots of code and the persistence/database ends up being where we put things to remember them.  I&#8217;ve started calling this logic-driven design.  I&#8217;m not sure if I&#8217;m stealing someone else&#8217;s term, but it communicates the essence of the idea.</p>
<p><strong>Logic-driven Design</strong><br />
To me LDD has a few key markers that make it stand out:</p>
<p>1. The persistence engine is used to store data and little bearing on the logic of the larger system.<br />
1. There is no abstraction layer in which to place business logic.<br />
1. The business logic emerges out of the flow of logic, rather than from some modular abstraction.</p>
<p>Most PHP programs that I have looked at fall in to this category.  Only as the project size grows past a certain complexity does one see PHP projects with more explicit abstractions around the persistence layer.  The reason this is done is because at a certain size in a project a programmer can no longer track all lines of logic in their head and continue to develop the application efficiently.</p>
<p><strong>Data-driven Design</strong><br />
This addition of an abstraction layer around the persistence engine that is used for managing business logic is what has been called <a href="http://en.wikipedia.org/wiki/Data-driven_design" target="_blank">data-driven design</a>.  This is obviously not a new idea.  In fact one of the points of pride for me in using Ruby on Rails is it&#8217;s particular grace in working in this manner.</p>
<p>Data-driven design aims to drive the logic and output of the application directly from the persistence engine; the data source.  The convenient side-effect of this design approach is the adjustment of most of the business rules and how the application behaves is matter of changing records in a database.</p>
<p><strong>PHP to Ruby on Rails</strong><br />
Ruby on Rails employs an <acronym title="Model View Conteroller">MVC</acronym> architecture.  This architecture is designed to support data-driven design by providing a powerful abstraction layer for the persistence engine (the model).  Rails has a particular sweet spot for social web applications for this reason.  The framework excels in user generated content, as this is a form of data-driven design.</p>
<p>Developers moving from PHP to Rails often miss this shift in thinking when they make the jump.  The result is code that is primarily located either in the controller or the view layers, since this is analogous to PHP&#8217;s logic-driven model.  The end result is very heavy controllers with big functions that do a bunch of logic on database records, and then render it out to the user.  In this paradigm the Rails models are only used to retrieve the record and nothing else.</p>
<p>When Rails moved from solely MVC to a resource-based approach a few members of the community had some negative feedback.  Some people feel like the resource concept makes development in Rails more complicated.  What I&#8217;ve seen in practice however leads me to believe that the real difficulty with the resource based approach is that it forces you to make the jump from logic-driven to data-driven.  PHP style development becomes contradictory in a resource based rails application.  Instead you have to think about the &#8220;resource&#8221;, the entity that will affect and be affected, and build your application around that.</p>
<br />Posted in software design  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selfmodifying.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selfmodifying.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selfmodifying.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.selfmodifying.com&amp;blog=7311382&amp;post=16&amp;subd=selfmodifying&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.selfmodifying.com/2008/10/25/data_driven_vs_logic_driven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d928b55d9910cba3360cda7f214cf6e3?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">Ryan</media:title>
		</media:content>
	</item>
	</channel>
</rss>