<?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/"
	>

<channel>
	<title>thinking in geek &#187; development</title>
	<atom:link href="http://joshrobb.com/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://joshrobb.com/blog</link>
	<description>tagline's are so web2.0</description>
	<lastBuildDate>Fri, 11 Mar 2011 07:17:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>SVN 1.5</title>
		<link>http://joshrobb.com/blog/2008/06/25/svn-15/</link>
		<comments>http://joshrobb.com/blog/2008/06/25/svn-15/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 12:45:42 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=55</guid>
		<description><![CDATA[Well &#8211; (finally) Subversion 1.5 is out!Â  For the first time svn has built in support for repeated merges without spuriousÂ conflicts or manually managing the list of previously merged revisions. This is _fantastic_ news. The basis of the merge tracking feature in 1.5 was svnmerge.py which means that many svn users will already have a [...]]]></description>
			<content:encoded><![CDATA[<p>Well &#8211; (finally) <a href="http://subversion.tigris.org/svn_1.5_releasenotes.html">Subversion 1.5</a> is out!Â </p>
<p>For the first time svn has built in support for repeated merges without spuriousÂ conflicts or manually managing the list of previously merged revisions.</p>
<p>This is <em>_fantastic_</em> news. The basis of the merge tracking feature in 1.5 was svnmerge.py which means that many svn users will already have a reasonable idea how it works. (List of merged revisions are stored in svn properties on a branch).Â </p>
<p>I&#8217;ve been watching the development of svn 1.5 for the last 18 months (give or take) crying everyday that I have to manually manage merging work as I oggle the feature list.Â </p>
<p><a href="http://tortoisesvn.net/node/331">TortoiseSVN</a>Â has aÂ significantlyÂ enhanced release as well. I&#8217;m particularlyÂ excited about this because it supports caching the change log which will make a huge difference for me given that my svn server it 2 continents and 300ms away.</p>
<p>It also looks like there may be some progress on cleaning up the working copy implementation.<sup><a href="http://joshrobb.com/blog/2008/06/25/svn-15/#footnote_0_55" id="identifier_0_55" class="footnote-link footnote-identifier-link" title="http://subversion.tigris.org/roadmap.html">1</a></sup>. Which would involve fixing the whole every folder with .svn folders problem (a la git or svk).Â </p>
<ol class="footnotes"><li id="footnote_0_55" class="footnote"><a href="http://subversion.tigris.org/roadmap.html">http://subversion.tigris.org/roadmap.html</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/06/25/svn-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eric Evans on over-design and intrinsic complexity</title>
		<link>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/</link>
		<comments>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 17:13:18 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/</guid>
		<description><![CDATA[Just watched a great presentation by Eric Evans (of Domain Driven Design fame) called: Strategic Domain-Driven Design &#8211; Effective Modelling for Larger Projects. I highly recommend it. Here&#8217;s a couple of great quotes (It&#8217;s worth noting that he&#8217;s talking about large projects): Not everything is going to be well designed. You may have a part [...]]]></description>
			<content:encoded><![CDATA[<p>Just watched a great presentation by <a href="http://domainlanguage.com/about/ericevans.html">Eric Evans</a> (of <a href="http://domaindrivendesign.org/books/index.html#DDD">Domain Driven Design</a> fame) called: <a href="http://www.parleys.com/display/PARLEYS/Strategic%20Domain-Driven%20Design%20-%20Effective%20Modeling%20for%20Larger%20Projects?showComments=true">Strategic Domain-Driven Design &#8211; Effective Modelling for Larger Projects</a>. I highly recommend it.</p>
<p>Here&#8217;s a couple of great quotes (It&#8217;s worth noting that he&#8217;s talking about large projects):</p>
<blockquote><p>Not everything is going to be well designed.</p></blockquote>
<blockquote><p>You may have a part [of a system] which is not complex &#8211; or is just straight forward data collection. You&#8217;ve got a lot of screens , a lot of fields. You&#8217;ve got to put it into the data base and do a simple report on it.</p>
<p>Don&#8217;t spent a lot of effort modelling these things. Just find some simple technology that&#8217;s good at that stuff.</p></blockquote>
<blockquote><p><font color="#003330">The idea that the entire system is going to be based on an object oriented model is I think is a highly questionable assumption. </font></p></blockquote>
<p>It&#8217;s a really interesting perspective &#8211; and a great antidote to some of the discussion at the moment which almost treats DDD as a silver bullet.</p>
<p>Anyone who&#8217;s feeling guilty because they don&#8217;t have their solutions structured into Core, Model, Services, Presentation, UI layers &#8211; or even worse is using a SqlDataSource control in their app &#8211; should watch it. It&#8217;s an excellent dose of pragmatism.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Naming things</title>
		<link>http://joshrobb.com/blog/2007/10/10/naming-things/</link>
		<comments>http://joshrobb.com/blog/2007/10/10/naming-things/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 15:16:38 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/10/10/naming-things/</guid>
		<description><![CDATA[[Ed: I've been on holiday and both ends of it have been sandwiched with more work than my team can handle - they got 4 websites live last week alone! I'm slowly clawing my workload back down - yesterday I built a functional equivalent of the Wufoo form builder. Anyway - back to your scheduled [...]]]></description>
			<content:encoded><![CDATA[<p>[Ed: I've been on holiday and both ends of it have been sandwiched with more work than my team can handle - they got 4 websites live last week alone! I'm slowly clawing my workload back down - yesterday I built a functional equivalent of the Wufoo form builder. Anyway - back to your scheduled program]</p>
<p>One massive advantage of my current job is that I work two desk&#8217;s down from a team of copy writers. Over the last couple of years I&#8217;ve come to realise what an asset this is. There&#8217;s a famous quote along the lines that there are only two unsolved problems in computer science. Cache invalidation and naming things.</p>
<p>Often when I&#8217;m working on a feature I get stuck with what to call a class, interface, feature, UI element etc. Previously when this happened I&#8217;d talk it through with another dev/project manager/product owner. Sometimes this helps and they&#8217;re able to provide just the word your looking for. Other times it doesn&#8217;t.</p>
<p>About a year ago &#8211; I realised that the copy writers whole job is finding words to fit concepts that other people describe.</p>
<p>Now I just walk 10 steps and describe the type of word (phrase/whatever) I&#8217;m looking for and they start giving me alternatives. I pick one I&#8217;m happy with and I&#8217;m on my way.</p>
<p>e.g. Yesterday &#8211; I needed to describe an attribute of a Question in this form builder thing (the wufoo like beast mentioned above). The properties of this type of question are that there is a correct answer/s. If you don&#8217;t answer the question correctly &#8211; then &#8220;something&#8221; happens. I was flailing around trying to find a succinct way of describing this in my model (IsFailableQuestion, PassFail etc.. ) after an unsuccessful conversation with another developer and the product manager &#8211; I asked one of the copywriters and they said: ummm&#8230; killer question?Perfect!</p>
<p>(If this seems like a strange naming choice then it&#8217;s because of the specifics of the domain that this makes sense &#8211; no &#8211; no one ever dies).</p>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/10/10/naming-things/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ERP, Financials and Large Databases</title>
		<link>http://joshrobb.com/blog/2007/08/23/erp-financials-and-large-databases/</link>
		<comments>http://joshrobb.com/blog/2007/08/23/erp-financials-and-large-databases/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 14:29:21 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/08/23/erp-financials-and-large-databases/</guid>
		<description><![CDATA[It seems like Workday is getting quite a bit of press about their vision for flexible, hosted (ala the Adam Bosworth funded Salesforce.com) ERP software. Looks like Xero might have a fight on it&#8217;s hands with SAP and Oracle both trying to enter the hosted mid size business market. Whats interesting to me about all [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like <a href="http://www.workday.com/">Workday </a>is getting quite a bit of press about their vision for flexible, hosted (ala the <a href="http://en.wikipedia.org/wiki/Adam_Bosworth">Adam Bosworth</a> funded <a href="http://www.salesforce.com/">Salesforce.com</a>) ERP software. Looks like <a href="http://www.xero.com">Xero</a> might have a fight on it&#8217;s hands with SAP and Oracle both trying to enter the hosted mid size business market.</p>
<p>Whats interesting to me about all this is the description of Workdays application architecture:</p>
<blockquote><p>Workday runs on an in-memory database [...] it uses a relational database (mySQL) only for persistence [...]. This persistent database has exactly three tables, one for data, one for metadata, and one for instructions. Yes, that&#8217;s right. All data&#8211;the employees, the positions, the organizational structure, and even the layout of a screen&#8211;is stored in the same table. &#8211; From: <a href="http://blogs.zdnet.com/SAAS/?p=368">Workday: Forget ERP, start over</a></p></blockquote>
<p>I wonder how this compares to <a href="http://www.drury.net.nz/2006/11/22/research-development/">Xero&#8217;s architecture</a>.  Knowing Craig Walker &#8211; I&#8217;d be surprised to here there wasn&#8217;t at least some meta-modelling in Xero.<br />
It seems like the traditional relational/OLTP approach of having strictly defined, highly normalised schemas which you hydrate/dehydrate into runtime objects is losing currency. Pat Helland &#8211; Jim Gray&#8217;s protege &#8211; is back at Microsoft and preaching heresy about traditional views around OLTP. Here&#8217;s some of his recent stuff that&#8217;s got me thinking:</p>
<ul>
<li><a href="http://www-db.cs.wisc.edu/cidr/cidr2007/papers/cidr07p15.pdf">Life Beyond Distributed Transactions: an Apostate&#8217;s Opinion</a></li>
<li><a href="http://blogs.msdn.com/pathelland/archive/2007/06/14/accountants-don-t-use-erasers.aspx">Accountants Don&#8217;t Use Erasers</a></li>
<li><a href="http://blogs.msdn.com/pathelland/archive/2007/07/23/normalization-is-for-sissies.aspx">Normalization Is for Sissies</a></li>
</ul>
<p>It seems like the more I think about this &#8211; the more this seems like the future. Here&#8217;s some other stuff I&#8217;ve read recently along similar lines:</p>
<ul>
<li><a href="http://www.cs.brown.edu/%7Eugur/fits_all.pdf">One Size Fits All: An Idea whose Time has Come and Gone</a></li>
<li><a href="http://bitworking.org/news/158/ETech-07-Summary-Part-2-MegaData">Joe Gregorio&#8217;s Mega data post</a></li>
<li><a href="http://markmaunder.com/2007/scaling-from-0-to-40-hits-per-second-in-3-days/">Scaling from 0 to 40 hits per second in 3 days</a></li>
</ul>
<p>More Info at:</p>
<ul>
<li><a href="http://www.roughtype.com/archives/2007/08/the_end_of_erp.php">The end of ERP?</a></li>
<li><a href="http://blogs.zdnet.com/BTL/?p=5983">Workday unveils  Financials and Work Tags</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/08/23/erp-financials-and-large-databases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Intelligence in Business Apps</title>
		<link>http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/</link>
		<comments>http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 12:28:57 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[web architecture]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/</guid>
		<description><![CDATA[I&#8217;ve been mulling over Ron Kohavi&#8217;s paper Integrating E-Commerce and Data Mining: Architecture and Challenge. In the space of applications that I work on &#8211; Business Intelligence and Analytics are becoming more and more important. It&#8217;s not just important that the system allows you to do whatever. (The classic post Blog entries for example). I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been mulling over Ron Kohavi&#8217;s paper <a href="http://robotics.stanford.edu/%7Eronnyk/icdmIntegratingEcom.pdf" rel="nofollow">Integrating E-Commerce and Data Mining: Architecture and Challenge</a>. In the space of applications that I work on &#8211; Business Intelligence and Analytics are becoming more and more important. It&#8217;s not just important that the system allows you to do whatever. (The classic post Blog entries for example). I need to be able to provide information about how users are interacting with the application.</p>
<ul>
<li>Who&#8217;s using what features?</li>
<li>Where are the users coming from?</li>
<li>How long does it take subset X of users to perform action Y?</li>
</ul>
<p>Some of these are closely related to traditional web analytics, but many of them cannot be answered without application level event logging. Ron&#8217;s papers describe how Blue Martini did this within their e-commerce framework and what a huge advantage this gave them when doing BI. One of the insights of the paper above is that having a meta-model for your application is <em>really</em> important for later analysis. You need to know:</p>
<ul>
<li>When you changed the default answer for question X on the registration form?</li>
<li>When did you add question Y to the checkout process?</li>
</ul>
<p>If you keep a metamodel and use that for updating your live DB<sup><a href="http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/#footnote_0_34" id="identifier_0_34" class="footnote-link footnote-identifier-link" title="(Blue Martini used a highly optimised/denormalised datastore for it&amp;#8217;s e-commerce front end because of the performance requirements. ">1</a></sup>) then you can capture these changes as you change the data store. Ron&#8217;s team went further and built a data warehouse<sup><a href="http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/#footnote_1_34" id="identifier_1_34" class="footnote-link footnote-identifier-link" title="(Including slowly changing &amp;#8211; aka type 2 &amp;#8211; and hierarchical dimensions">2</a></sup>) and ETL process automatically from the meta model &#8211; that was automatically updated as the live DB evolved.</p>
<p>I&#8217;ve been using some of these ideas independently for a long time (e.g. Event logging is a good idea) &#8211; but it&#8217;s the combination of of a meta model &#8211; including change history &#8211; and event logging that really provides the power here.</p>
<p>Short version. How I&#8217;m thinking about building business apps is changing. As I think about the business requirements, data model etc.. I&#8217;m now considering how we are going to capture/store/analyse the meta model and the business event stream. This seems like a significant evolution in my thinking.</p>
<ol class="footnotes"><li id="footnote_0_34" class="footnote">(Blue Martini used a highly optimised/denormalised datastore for it&#8217;s e-commerce front end because of the performance requirements. </li><li id="footnote_1_34" class="footnote">(Including slowly changing &#8211; aka type 2 &#8211; and hierarchical dimensions</li></ol>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/08/23/business-intelligence-in-business-apps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git</title>
		<link>http://joshrobb.com/blog/2007/08/01/git/</link>
		<comments>http://joshrobb.com/blog/2007/08/01/git/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 17:34:40 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/08/01/git/</guid>
		<description><![CDATA[I managed to find some time to watch this today: Tech Talk: Linus Torvalds on git Git is a distributed SCM system &#8211; Linus wrote it in two weeks. It seems like it&#8217;s getting some traction among some of the Rails crowd. Mozilla seriously considered adopting it for Mozilla 2 work but the lack of [...]]]></description>
			<content:encoded><![CDATA[<p>I managed to find some time to watch this today: <a href="http://www.youtube.com/watch?v=4XpnKHJAok8">Tech Talk: Linus Torvalds on git</a></p>
<p><a href="http://git.or.cz/">Git</a> is a distributed SCM system &#8211; Linus wrote it in two weeks. It seems like it&#8217;s getting some traction among some of the Rails crowd. Mozilla seriously considered adopting it for Mozilla 2 work but the lack of a finished win32 client was a show stopper (although progress seems to have been made there).</p>
<p>There&#8217;s nothing like Tortoise for it (yet) &#8211; but it&#8217;s still pretty new &#8211; it&#8217;s been used by the kernel developers for the last two years &#8211; but it seems like it&#8217;s only in the last few months that it&#8217;s got easy enough for newbies to pickup.</p>
<p>Distributed SCM&#8217;s really take some brain twisting to get your head around &#8211; and Git in particular breaks with most conventions that people used to traditional centralised, file based systems are used to. Linus says that he thinks the only reason he&#8217;s been able to build git was because he didn&#8217;t have brain rot caused by exposure to traditional scm tools. <img src='http://joshrobb.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/08/01/git/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

