<?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>Platformability &#187; Software Engineering</title>
	<atom:link href="http://blog.caplin.com/tag/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caplin.com</link>
	<description>Single Dealer Platforms, Industry Expertise</description>
	<lastBuildDate>Fri, 03 Feb 2012 15:38:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dart: did Google miss the bull&#8217;s-eye?</title>
		<link>http://blog.caplin.com/2011/10/17/dart-did-google-miss-the-bulls-eye/</link>
		<comments>http://blog.caplin.com/2011/10/17/dart-did-google-miss-the-bulls-eye/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 08:52:12 +0000</pubDate>
		<dc:creator>Amir Hajizamani</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Dart]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[Programming Language]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=7265</guid>
		<description><![CDATA[The vocal portions of the Web that care about such things seem to have already made up their minds about Dart, the new web programming language from Google. My opinion of it has been flipping between intrigue and tedium. Maybe you don&#8217;t even know what I&#8217;m talking about so here&#8217;s...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvZGFydC1sb2dvLnBuZw=="><img class="alignright size-full wp-image-7267" src="http://blog.caplin.com/wp-content/uploads/dart-logo.png" alt="Dart Programming Language Logo" width="268" height="116" /></a></p>
<p>The vocal portions of the Web that care about such things seem to have already made up their minds about Dart, the new web programming language from Google. My opinion of it has been flipping between intrigue and tedium.</p>
<p>Maybe you don&#8217;t even know what I&#8217;m talking about so here&#8217;s the gist of it: last week at the <a  0="title="GOTO" 1="-" 2="Aarhus" 3="2011"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2dvdG9jb24uY29tL2Fhcmh1cy0yMDExLw==" 4="target="_blank"">GOTO conference</a> Google unveiled, to moderate hype, their new programming language called <a  0="title="Official" 1="Dart" 2="Programming" 3="Language" 4="website"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcv" 5="target="_blank"">Dart</a>. The official aim of Dart is to help developers with writing &#8220;structured web applications&#8221; &#8211; which sounds like a euphemism for &#8220;[eventually] replace JavaScript&#8221; &#8212; to some at least. I&#8217;m going to explore that loaded sentence (or go to <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=I3RsZHI=">tl;dr</a>).</p>
<h2>Origins of Dart at Google</h2>
<p>Google and the Web are inseparable. To many, the Web would pretty much cease to be useful without Google Search and Gmail. Google pioneered, or at least popularised, the foundations of modern web application development, namely <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>. When Google Maps was released it was a breath of fresh air in its product niche and an astounding achievement in programming and UX. The thing to note here is the J in AJAX, which stands for JavaScript. Having wedded itself to the Web, Google has had to wrestle with this piece of technology since the beginning of its forays into anything more complicated that a search box and a list of results.</p>
<p>I doubt a Google spokesperson has ever come out to say it, but it&#8217;s clear that Google staff are no fans of JavaScript. Six years ago, they got sick of figuring out the look and feel of things and started work on <a  0="title="Google" 1="Web" 2="Toolkit"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS93ZWJ0b29sa2l0Lw==" 3="target="_blank"">GWT</a>. A few years later they got fed up of the performance of JavaScript runtimes and wrote the source-to-source <a  0="title="Closure" 1="Compiler"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlLw==" 2="target="_blank"">Closure Compiler/Optimiser</a> for JavaScript and started work on their own <a  0="title="Google's" 1="V8" 2="JavaScript" 3="Engine"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4Lw==" 4="target="_blank"">V8 JavaScript Engine</a> which powers Google Chrome (and notably also NodeJS). All in all, a business expense of at least <a  0="title="Summary" 1="of" 2="Google's" 3="JavaScript-related" 4="projects'" 5="codebases."" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly93d3cub2hsb2gubmV0L3AvY29tcGFyZT9wcm9qZWN0XzA9R29vZ2xlK1dlYitUb29sa2l0JmFtcDtwcm9qZWN0XzE9Q2xvc3VyZStDb21waWxlciZhbXA7cHJvamVjdF8yPUdvb2dsZStWOCtKYXZhU2NyaXB0K0VuZ2luZQ==" 6="target="_blank"">tens of millions of dollars</a>, not to mention the headaches and opportunity cost. Of course, Google has to go all this effort because of the scale of their JavaScript codebase, which makes any criticism from small- to medium-sized development teams utterly moot when they say &#8220;we&#8217;ve never had a problem with normal JavaScript&#8221; &#8212; yes, of course you haven&#8217;t, because you&#8217;re not juggling a web application product line which includes Gmail and Google Docs.</p>
<p><a  0="title="Mark" 1="Miller's" 2="leaked" 3="email" 4="about" 5="the" 6="Future" 7="of" 8="JavaScript"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3Bhc3RlYmluLmNvbS9OVU1UVHJLag==" 9="target="_blank"">This leaked email</a> from Googler and ECMAScript committee member Mark Miller emerged last year. It provides an insight into Google&#8217;s view of JavaScript as a bottleneck in their efforts to build products that compete with native applications. It&#8217;s a long read but the gist of is that Google can either wait for JavaScript to evolve slowly, and/or take action and write its own better JavaScript, codenamed &#8220;Dash&#8221; in the email. The main goals of the new language are listed as performance, developer usability (including familiarity) and improved tooling (a.k.a. clearer code structuring and packaging), which no-one will deny are lacking in JavaScript.</p>
<p>So they did just that. Sort of.</p>
<h3>Dear Google, Public Relations != Developer Relations</h3>
<p><span style="font-weight: normal;">&lt;rant&gt;</span></p>
<p><span style="font-weight: normal;">Google suffers from <a  0="title="Not-Invented-Here"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OSUhfc3luZHJvbWU=" 1="target="_blank"">NIH Syndrome</a>: it does not take from the outside world, preferring to build its tools from scratch, and anything it produces it does so mainly for consumption by the thousands of people it employs (this manifests itself in things like their <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDExLzEwLzEzL2l0cy1hbGwtYWJvdXQtcGxhdGZvcm1zLw==">approach to Platform development</a>, too). Don&#8217;t let the odd open-sourced project fool you. </span></p>
<p><span style="font-weight: normal;">In the case of Dart (<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2dvbGFuZy5vcmcv" 0="target="_blank"">not the first Google-made langauge</a>) they may have hyped up its announcement, but they clearly have no intention of letting programmers &#8212; the only people who care &#8212; actually experiment with the new language yet. When you go to <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RhcnQv" 0="target="_blank"">Dart&#8217;s code repository</a>, there is little effort made to make it simple for you build and use anything. Maybe Dart is just not ready for too much public airing, but that means they should have left its unveiling until it was. Google is not providing a pre-built compiler or VM binary for Dart, and <a  0="title="Build," 1="stage" 2="0"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RhcnQvd2lraS9HZXR0aW5nVGhlU291cmNl" 3="target="_blank"">their</a> <a  0="title="Build," 1="stage" 2="1"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RhcnQvd2lraS9QcmVwYXJpbmdZb3VyTWFjaGluZQ==" 3="target="_blank"">build</a> <a  0="title="Build," 1="stage" 2="2"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RhcnQvd2lraS9CdWlsZGluZw==" 3="target="_blank"">instructions</a> are just about tedious enough that I&#8217;d rather not waste my time. If <code>git clone</code> and <code>make install</code> are good enough for many a large project, why am I being instructed to install and use a Google-specific tool to merely fetch code?! No thanks.</span></p>
<p>&lt;/rant&gt;</p>
<h2>What&#8217;s Dart Like?</h2>
<p>Apart from <a  0="title="Overview" 1="of" 2="Dart"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90ZWNobmljYWwtb3ZlcnZpZXcvaW5kZXguaHRtbA==" 3="target="_blank"">syntax and code samples</a> that run in the browser, there isn&#8217;t much to go on. I quite like <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5yZWFkd3JpdGV3ZWIuY29tL2hhY2svMjAxMS8xMC9kYXJ0LWlzLXRvLWphdmFzY3JpcHQtYXMtYy1pcy5waHA=" 0="target="_blank"">this article</a> that says Dart is to JavaScript what C# is to C++: basically cleaning up some of the mess. Here&#8217;s a summary of what I think are the main features to give you a feel.</p>
<h3>Key Language Features</h3>
<h4>Purely class-based</h4>
<p>The class and interface concepts from Java are brought into Dart, almost exactly, with multiple inheritance being achieved through implementing several interfaces. The &#8220;purity&#8221; here refers to the idea of everything-has-a-class (or everything-is-an-object), which is lacking in both Java and JavaScript, and can only be a good thing. This applies to functions, of course, which makes closures possible in the same way as JavaScript. Compared to JavaScript&#8217;s <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcm90b3R5cGUtYmFzZWQ=" 0="target="_blank"">prototype-based</a> model of OOP this class-based approach makes writing Dart code less crufty, more familiar to the average programmer, and will make tooling and dealing with hierarchy of the code simpler or at least easier to adapt from existing tools.</p>
<p>I suspect this model improves the run-time performance of Dart code compared to JavaScript, too, since JavaScript&#8217;s prototypal inheritance and functions-as-objects idiom are expensive (objects are cloned or recreated instead of referenced or re-used), at least without a good JIT compiler (but don&#8217;t hold me to that).</p>
<h4>Optional typing</h4>
<p>This is one of the more baffling features for me. You could write Dart code without any consideration for variable types, but you could also annotate your variables with types, like String or any class you&#8217;ve defined. The baffling nature of this is that the annotation is just that, an annotation: it makes no difference to how your code works, other than the compiler giving you a warning if you&#8217;ve misused the variable (e.g. tried to assign a number to a String variable). The code will still compile and run.</p>
<p>The justification for this feature is that it provides &#8220;documentation&#8221; and aids debugging and static build tools during development. I&#8217;m not convinced by this half-feature. Perhaps the makers didn&#8217;t want to put off web developers with scary strong typing or the goal of making Dart compilable to JavaScript was an obstacle. The <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvb3B0aW9uYWwtdHlwZXMvI3VzaW5nLXR5cGVz" 0="target="_blank"">official advice</a> is &#8220;use types where they make sense&#8221;. To me, that advice doesn&#8217;t make sense.</p>
<h4>Structure and isolation</h4>
<p>One of the big practical difference between JavaScript and Dart is that when embedded in HTML, each script tag containing Dart code is isolated and can not access other scripts directly, i.e. there is no per-page global namespace. Also, Dart code isn&#8217;t simply run when it is encountered but a main() function needs to be included as the entry point into each piece of code. In theory, the designers intend each portion of code, or <em>isolate</em>, to be able to run in its own thread, but such multi-threading support is non-existent in browsers.</p>
<p>This is where the &#8220;structured&#8221; nature of Dart is most obvious and I personally like it compared to JavaScript, but those used to the way JavaScript behaves will resist it.</p>
<p>In the language specification, there is some detail about the concurrency model of Dart, which involves these isolates behaving like <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BY3Rvcl9tb2RlbA==" 0="target="_blank"">actors</a> which perform local computation and then communicate via message-passing. I didn&#8217;t spend much time trying to understand these, but <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2dzLnBlcmwub3JnL3VzZXJzL3JhZmFlbF9nYXJjaWEtc3VhcmV6LzIwMTEvMTAvd2h5LWRhcnQtaXMtbm90LXRoZS1sYW5ndWFnZS1vZi10aGUtZnV0dXJlLmh0bWw=" 0="target="_blank"">this (rather negative) write-up</a> has an explanation.</p>
<h2><span>Why you won&#8217;t use Dart</span></h2>
<p>Firstly, there is obviously no practical implementation for developing or deploying Dart code, so don&#8217;t waste your time on it yet. Even the Google Chrome team aren&#8217;t 100% on whether and when they will implement a Dart runtime, let alone other browser vendors.</p>
<p>Secondly, although all concepts used in Dart should be familiar, it is still a paradigm shift for web developers and you can get by just fine with JavaScript. This extends to the way Dart handles DOM events which is something many developers take some time to completely absorb even in JavaScript with all the online documentation available, let alone with Dart&#8217;s event model.</p>
<p>Thirdly, if you really don&#8217;t want to write in JavaScript, and you don&#8217;t have Google&#8217;s NIH Syndrome, you already have access to many well-established <a  0="title="altJS"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2FsdGpzLm9yZy8=" 1="target="_blank"">alternatives</a>. I have written a non-trivial amount of code in <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2phc2hrZW5hcy5naXRodWIuY29tL2NvZmZlZS1zY3JpcHQv" 0="target="_blank"">CoffeeScript</a>, which is a pleasure to use, and look forward to playing more with <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cHM6Ly9naXRodWIuY29tL2Nsb2p1cmUvY2xvanVyZXNjcmlwdA==" 0="target="_blank"">ClojureScript</a>, which is elegant but still immature. Of course, JavaScript isn&#8217;t just &#8220;assembly language for the Web&#8221; which can be ignored and you still need to fully understand its intricacies before trying to work around it.</p>
<h2 id="tldr">tl;dr</h2>
<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3Byb2dyYW1tZXJzLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTQwOTQvZ29vZ2xlLWRhcnQtdnMtY29mZmVlc2NyaXB0LXdoaWNoLW9uZS1zaG91bGQtb25lLWxlYXJuLzExNDA5OSMxMTQwOTk=" 0="target="_blank"">This chap on StackOverflow</a> got it right, in my opinion: <em>Learn JavaScript, use CoffeeScript, check out Dart.</em></p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=7265" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2011/10/17/dart-did-google-miss-the-bulls-eye/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>High Frequency Trading How To</title>
		<link>http://blog.caplin.com/2011/02/08/high-frequency-trading-how-to/</link>
		<comments>http://blog.caplin.com/2011/02/08/high-frequency-trading-how-to/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 11:02:55 +0000</pubDate>
		<dc:creator>Martin Tyler</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Trading Technology]]></category>
		<category><![CDATA[high frequency trading]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=5374</guid>
		<description><![CDATA[I stumbled across an interesting new blog about High Frequency Trading recently. WK&#8217;s High Frequency Trading How To covers some of the technical aspects of software and systems that handle high frequency trading from someone that has worked in the area. Hopefully the blog will continue with regular posts and...]]></description>
			<content:encoded><![CDATA[<p>I stumbled across an interesting new blog about High Frequency Trading recently.</p>
<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hvd3RvaGZ0LmJsb2dzcG90LmNvbS8=">WK&#8217;s High Frequency Trading How To</a> covers some of the technical aspects of software and systems that handle high frequency trading from someone that has worked in the area. Hopefully the blog will continue with regular posts and get more in depth as it goes on &#8211; it looks good so far.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=5374" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2011/02/08/high-frequency-trading-how-to/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Sprites and the Jigosaurus</title>
		<link>http://blog.caplin.com/2011/01/28/css-sprites-and-the-jigosaurus/</link>
		<comments>http://blog.caplin.com/2011/01/28/css-sprites-and-the-jigosaurus/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 12:56:33 +0000</pubDate>
		<dc:creator>Andy Trevorah</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Caplin Graduate Scheme]]></category>
		<category><![CDATA[CSS Sprites]]></category>
		<category><![CDATA[Dev Tips]]></category>
		<category><![CDATA[Jigosaurus]]></category>
		<category><![CDATA[jigsaw]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=4086</guid>
		<description><![CDATA[As mentioned before, Jigosaurus is a multiplayer jigsaw puzzle that is played through a web browser. When Aleksei, Yasser and I joined as part of the Caplin Graduate Scheme, we were given the task of getting it running and improving it, and today we’ll be looking at the client facing...]]></description>
			<content:encoded><![CDATA[<div id="attachment_4256" class="wp-caption alignright" style="width: 310px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvSGFkcm9uX0ppZ3Nhdy5wbmc="><img class="size-medium wp-image-4256" title="Hadron_Jigsaw" src="http://blog.caplin.com/wp-content/uploads/Hadron_Jigsaw-300x258.png" alt="" width="300" height="258" /></a><p class="wp-caption-text">120 individual PNGs for one jigsaw</p></div>
<p>As mentioned <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzExLzAxL3Jlc3VycmVjdGluZy10aGUtamlnb3NhdXJ1cy8=">before</a>, Jigosaurus is a multiplayer jigsaw puzzle that is played through a web browser. When Aleksei, Yasser and I joined as part of the Caplin Graduate Scheme, we were given the task of getting it running and improving it, and today we’ll be looking at the client facing end.</p>
<p>Following the route of the jigsaw from server to client, we quickly found a limitation. Each jigsaw that we wanted to be played had to be generated from an image with another tool before it was ready to host on the server side. This meant cutting the full image into around 200 individual pieces and saving them as PNG files ready to transfer over the internet. Then with many <code>&lt;img&gt;</code> tags placed in the right position, the clients browser could give Jigosaurus piece elements their correct look.<br />
<span id="more-4086"></span></p>
<h1>Variety is the spice of life</h1>
<div id="attachment_4248" class="wp-caption alignright" style="width: 310px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvcmVzb3VyY2VzX2JlZm9yZS5wbmc="><img class="size-medium wp-image-4248" title="resources_before" src="http://blog.caplin.com/wp-content/uploads/resources_before-300x229.png" alt="" width="300" height="229" /></a><p class="wp-caption-text">Clogging up the network with hundreds of requests</p></div>
<p>This &#8220;chop up once, serve many times&#8221; method may be good in a situation where everyone plays the same kind of jigsaw, but as soon as someone wants to try the same puzzle that has more or fewer pieces not only would we have to run the same image through the chopping tool again, but we would waste space on additional PNG files that represent pieces of the same image.</p>
<p>Even if we were ok having no variety in our puzzles (boo, hiss), we still have the problem of actually sending multiple images over the network. These piece images will rarely be sent over the network in complete parallel and so have to queue behind each other. Combined with the overhead of sending each file, this means more time waiting and less time puzzle solving.</p>
<h1>CSS is more than a pretty face</h1>
<div id="attachment_4252" class="wp-caption alignright" style="width: 190px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvZ21haWxfc3ByaXRlcy5wbmc="><img class="size-full wp-image-4252" title="gmail_sprites" src="http://blog.caplin.com/wp-content/uploads/gmail_sprites.png" alt="" width="180" height="140" /></a><p class="wp-caption-text">Sprites for the Gmail Inbox page are held in one image file</p></div>
<p>The problem seems to be a server side limitation of pre-processing things for an individual, so we could try doing things with a bit of extra code on the client side. We could use Javascript as a work horse to cut up each user&#8217;s jigsaw, but this would be slow and there is a cleaner way.</p>
<p>Browsers are optimised to handle styling through CSS well, so we can take advantage of this and get the browser to cut up our jigsaw natively. This technique is known as <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Nzcy10cmlja3MuY29tL2Nzcy1zcHJpdGVzLw==">CSS Sprites</a>.</p>
<p>This technique is normally used for pages that contain multiple images that are usually used all at once. Icons, logos and other pretty pieces of image could be served up individually like our jigsaw pieces, but are instead mashed together and sent all in one go. Each relevant element references this large mashed together image, but by using the background offset CSS property, the element only shows a window of this one large image. This means only dealing with the resource overhead of one file and taking advantage of a browsers optimisations for CSS styling.</p>
<p>This technique is perfect for Jigosaurus, so we ditch the <code>&lt;img&gt;</code> tags for each jigsaw element and just add an individual background-image style that references a small window of the full image that would normally have to be cut up.</p>
<div id="attachment_4247" class="wp-caption aligncenter" style="width: 582px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvdGltZV9iZWZvcmUucG5n"><img class="size-full wp-image-4247" title="time_before" src="http://blog.caplin.com/wp-content/uploads/time_before.png" alt="" width="572" height="87" /></a><p class="wp-caption-text">Before: 72ms page load - the majority being images</p></div>
<div id="attachment_4250" class="wp-caption aligncenter" style="width: 599px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvdGltZV9hZnRlci5wbmc="><img class="size-full wp-image-4250" title="time_after" src="http://blog.caplin.com/wp-content/uploads/time_after.png" alt="" width="589" height="89" /></a><p class="wp-caption-text">After: 8ms page load - a dramatic improvement</p></div>
<p>Not only do we see a dramatic drop in loading times, but we also pave the way for jigsaws of different shapes and even jigsaws that aren’t just static images…</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=4086" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2011/01/28/css-sprites-and-the-jigosaurus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What does software look like?</title>
		<link>http://blog.caplin.com/2010/10/20/what-does-software-look-like/</link>
		<comments>http://blog.caplin.com/2010/10/20/what-does-software-look-like/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 15:28:04 +0000</pubDate>
		<dc:creator>Jonathan Paul</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=3985</guid>
		<description><![CDATA[As software engineers we work with substance which can neither be seen, smelt, touched, heard nor tasted. One might argue that we &#8220;see&#8221; the code, but in reality, our source code is no more than the instructions that we give for something to be built; we see the blueprints, but...]]></description>
			<content:encoded><![CDATA[<p>As software engineers we work with substance which can neither be seen, smelt, touched, heard nor tasted. One might argue that we &#8220;see&#8221; the code, but in reality, our source code is no more than the instructions that we give for something to be built; we see the blueprints, but not the house.</p>
<p>A Google Tech Talk by James Whitaker on <a  0="title="The" 1="Future" 2="of" 3="Testing"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVB1Z181VGwyVXhR" 4="target="_blank"">The Future of Testing</a> brought up the topic of adding visualisations to software, saying that we need code to become visual for us to be able us it effectively and some people here at Caplin were somewhat unimpressed with his assertion.</p>
<p>Now there are definitely some people who agree with Whitaker. Hollywood understands that people love visuals. When the elite hacker is breaking into the CIA mainframe, a fantastical scene unfolds before your eyes, perhaps with lasers and gigantic &#8220;Access Denied&#8221; messages. It&#8217;s a great plot device, the layman can understand the tension of what the black hat is doing and the computer programmers can make fun about how ridiculous it all is.</p>
<div id="attachment_4015" class="wp-caption aligncenter" style="width: 276px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzEwLzIwL3doYXQtZG9lcy1zb2Z0d2FyZS1sb29rLWxpa2Uv" 0="target="_self""><img class="size-medium wp-image-4015" src="http://blog.caplin.com/wp-content/uploads/jplinux-266x300.jpg" alt="A 3D file browser" width="266" height="300" /></a><p class="wp-caption-text">A real, though somewhat impractical, 3D file browser used in Jurassic Park. (Courtesy http://www.siliconbunny.com/fsn-the-irix-3d-file-system-tool-from-jurassic-park/)</p></div>
<p><span id="more-3985"></span></p>
<p>While I agree that most movies prefer the fiction part of science-fiction, I don&#8217;t believe this means that they don&#8217;t have the right idea. Humans, software engineers included, are visual creatures. We prefer graphs, not tables. We like green/red lights, not reading test logs. We draw class diagrams, not print out class definitions.</p>
<p>Yet when it comes to try and push a visual interface onto our code more directly, there appears to be an immediate reaction that &#8220;it would never work in real life&#8221;.</p>
<p>But why is this so ridiculous? After all, if a console application can have a GUI interface, why can&#8217;t our source code have a visual augmentations? Architects started to manipulate their designs through renderings as soon as the technology became available and yet we still insist on writing things at the most basic levels.</p>
<div id="attachment_4021" class="wp-caption aligncenter" style="width: 302px"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvVU1MX0NsYXNzLWRpYWdyYW0uZ2lm"><img class="size-medium wp-image-4021 " src="http://blog.caplin.com/wp-content/uploads/UML_Class-diagram-292x300.gif" alt="UML Class Digram" width="292" height="300" /></a><p class="wp-caption-text">We often use class diagrams for planning, yet these are seldom visualised in IDEs. (Courtesy http://www.conceptdraw.com)</p></div>
<p>Is it so ridiculous to have a 3D rendering of how our classes interact with each other? Perhaps a line diagram showing how data flows through our application? How about a color coded background to indicate the complexity of certain methods and classes? What about a heat map showing which classes and methods have had the most bug fixes?</p>
<p>As code grows ever more complex it is going to become more and more important for our code to become as visual as our daily lives. While we will never be able to get away from writing our code in files, it is ridiculous that in 2010, after all the advancements in our technology and profession, we are writing our code in much the same way that we did in the 1980&#8242;s.</p>
<div style="width: 1px; height: 1px; overflow: hidden;">http://www.siliconbunny.com/wp-content/uploads/2008/12/3060c037-069f-4715-a01e-c30e53e505a2.jpg</div>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=3985" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/10/20/what-does-software-look-like/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>If you can&#8217;t think of a good name, use a bad one</title>
		<link>http://blog.caplin.com/2010/09/09/if-you-cant-think-of-a-good-name-use-a-bad-one/</link>
		<comments>http://blog.caplin.com/2010/09/09/if-you-cant-think-of-a-good-name-use-a-bad-one/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 09:09:02 +0000</pubDate>
		<dc:creator>Ian Alderson</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Dev Tips]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=3660</guid>
		<description><![CDATA[I&#8217;ve just read a great tweet from @KentBeck that provides an interesting solution for something that I have always struggled with. if you don&#8217;t have a good name for it, give it a bad name. a really, really bad name so you&#8217;ll fix it later. Good naming is hard Sometimes...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just read a <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3R3aXR0ZXIuY29tL0tlbnRCZWNrL3N0YXR1c2VzLzIzOTU3ODgwMDY4">great tweet</a> from <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3R3aXR0ZXIuY29tL0tlbnRCZWNr">@KentBeck</a> that provides an interesting solution for something that I have always struggled with.</p>
<blockquote><p>if you don&#8217;t have a good name for it, give it a bad name. a really, really bad name so you&#8217;ll fix it later.</p></blockquote>
<p><strong>Good naming is hard</strong></p>
<p>Sometimes when writing a class, or occasionally even a method, I struggle to find a good name for it. After a while I give up trying to find a good name for it and chose something that is just about &#8220;OK&#8221;, a working title if you like. Unfortunately this tends to create poor generic names, such as &#8220;ConnectionManager&#8221;, that vaguely make sense, but can obfuscate the true purpose of the class. I&#8217;ve lost count of the number of times that I&#8217;ve heard developers say something like, &#8220;Oh, so that&#8217;s what that class does!&#8221;</p>
<p>The problem with these &#8220;OK&#8221; names is that they tend to have a strong inertia to change. Typically I have the intention of going back and renaming it, however the longer I leave it the less likely this is. If the name is adequate, but not great, then why go through the effort of renaming it? Sure, some IDEs, such as Eclipse, do a superb job at refactoring, however a lot of the code we write here at Caplin is in JavaScript and the tool support for this isn&#8217;t as good. Regardless of this, even where there is good tool support, there are time pressures, backward compatibility and other considerations that lead to &#8220;OK&#8221; names sticking.</p>
<p><span id="more-3660"></span></p>
<p><strong>Overcoming renaming inertia</strong></p>
<p>This brings me back to <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZW50X0JlY2s=">Kent Beck</a>&#8216;s excellent suggestion. If you provide something with a really bad name the inertia to change it will be non-existent. You will have to change it before it becomes part of your public API or other developers have to use it.</p>
<p>The great thing with this is that it allows you to write your class and see what it responsibilities are before you provide its proper name. This should lead to meaningful names that define exactly what a class does, ensuring no one is surprised when they try to use it.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=3660" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/09/09/if-you-cant-think-of-a-good-name-use-a-bad-one/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What&#8217;s in a Persona?</title>
		<link>http://blog.caplin.com/2010/08/11/whats-in-a-persona/</link>
		<comments>http://blog.caplin.com/2010/08/11/whats-in-a-persona/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 09:10:48 +0000</pubDate>
		<dc:creator>Sarah</dc:creator>
				<category><![CDATA[UX]]></category>
		<category><![CDATA[sdlc]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1626</guid>
		<description><![CDATA[Personas are a tool we use at Caplin to help us REALLY understand who our users are and engage everyone in the company in building something compelling that will delight our users. No I am not talking about a sexy, gimmicky UI which when first stumbled upon people go &#8220;Wow&#8221;....]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzA4LzExL3doYXRzLWluLWEtcGVyc29uYS8="><img class="size-full wp-image-3342 aligncenter" src="http://blog.caplin.com/wp-content/uploads/personas.jpg" alt="" width="620" height="254" /></a></p>
<p>Personas are a tool we use at Caplin to help us REALLY understand who our users are and engage everyone in the company in building something compelling that will delight our users. No I am not talking about a sexy, gimmicky UI which when first stumbled upon people go &#8220;Wow&#8221;. I am referring to a product that seamlessly fits into the user&#8217;s life, compliments their day-to-day tasks and basically engages them to a level that they no longer can live without it.</p>
<p><strong>So what is a persona?</strong></p>
<p><strong><span id="more-1626"></span></strong>A persona represents a group of users that hold the same goals &#8211; an archetype. These goals are not &#8220;I like to use this feature&#8221; BUT &#8220;what&#8217;s the end goal in an individual&#8217;s or company&#8217;s day/week. It&#8217;s only when we look outside the boundaries forged over time that we begin to really understand their needs. If you are passionate about doing this you will deliver products that delight.</p>
<p>The persona also includes people that are driven by the same motives, driving like-minded behavior with common frustrations.  Just think how powerful this is when developing a product. There will be no self-referential in a meeting room arguing, &#8221; No, I think it should do this because that&#8217;s what I would like to do&#8221;, or &#8220;how cool would it be if we added this feature&#8221;.</p>
<p>EVERYTHING is referred back to the persona &#8211; does it help them achieve their goal? No? Then out. Yes, then how?  Design meetings become focused on making the persona&#8217;s life easier,  aligned to removing the pain points in their process. No swirling gimmicky feature just because the technology can do it, it has to add value to the persona.</p>
<p>At Caplin, we have found it has removed the ambiguity around the term &#8220;user&#8221; and has also been a great educational tool on who our users are. We are now seeing many developers refer to the persona by name in discussions and has really helped us &#8220;walk in the shoes&#8221; of our users and show real empathy during the development process.</p>
<p>The real power also comes when you use Personas with <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzAzLzA0L25hcnJhdGl2ZS1qb3VybmV5LW1hcHMv" 0="target="_self"">Narrative Journey Maps</a>.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1626" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/08/11/whats-in-a-persona/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The beauty of small tests</title>
		<link>http://blog.caplin.com/2010/04/15/the-beauty-of-small-tests/</link>
		<comments>http://blog.caplin.com/2010/04/15/the-beauty-of-small-tests/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 11:53:35 +0000</pubDate>
		<dc:creator>Andrew Darnell</dc:creator>
				<category><![CDATA[QA]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Ajax Testing]]></category>
		<category><![CDATA[Dev Tips]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1342</guid>
		<description><![CDATA[When tests are small, a test failure means just one thing – somewhere in these ten lines of code which are being tested, there is an error.  Ok, sometimes this can mean that there is an error in the test script, or a there is a failure, or change of...]]></description>
			<content:encoded><![CDATA[<p>When tests are small, a test failure means just one thing – somewhere in these ten lines of code which are being tested, there is an error.  Ok, sometimes this can mean that there is an error in the test script, or a there is a failure, or change of expectation, but fundamentally, it pin-points the cause of the failure to a <strong>small</strong> target, which usually means that debugging becomes <strong>trivial</strong>.</p>
<p>When an end to end acceptance test fails, the failure could be due to any one of a large number of source lines or expectations changes across a large body of code.  Debugging may be quick, but often isn&#8217;t.</p>
<p><span id="more-1342"></span></p>
<p>Small tests run faster too! While a typical small test may take 10 milliseconds to run, a large acceptance test may take twenty minutes.</p>
<p>Just a small back of the envelope calculation tells us that if a developer checks in twice a day and saves an hour each time because potential issues had been found before check-in with fast small tests, and the faster feedback, or has reduced their time spent debugging &#8211; that is two hours a day per developer that could be put to better use.</p>
<blockquote><p>2 hours a day * thirty developers * two working weeks = <strong>600 additional hours</strong> per two week iteration available.</p></blockquote>
<p>This is equivalent to adding seven and a half developers to the team!</p>
<p><strong>What value do you get from tests of different sizes?</strong></p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1342" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/04/15/the-beauty-of-small-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile – Tests = Fragile</title>
		<link>http://blog.caplin.com/2010/04/09/agile-%e2%80%93-tests-fragile/</link>
		<comments>http://blog.caplin.com/2010/04/09/agile-%e2%80%93-tests-fragile/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 14:55:46 +0000</pubDate>
		<dc:creator>Andrew Darnell</dc:creator>
				<category><![CDATA[QA]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Dev Tips]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1341</guid>
		<description><![CDATA[The nature of agile projects, with lots of small releases mean that there are a lot of test runs to execute if you want to have any confidence in the code and the product. Ignoring this testing just generates projects which will fail – not may fail &#8211; will fail,...]]></description>
			<content:encoded><![CDATA[<p>The nature of agile projects, with lots of small releases mean that there are a lot of test runs to execute if you want to have any confidence in the code and the product.</p>
<p>Ignoring this testing just generates projects which will fail – not may fail &#8211; will fail, <strong>categorically will fail!</strong></p>
<p>There are two sets of tests that are critical here&#8230;</p>
<p><strong>Good unit test coverage and a TDD approach to development</strong> ensure that the rest of the organisation is supplied with product that works as developers expect it to.</p>
<p><strong>Component tests and functional acceptance test</strong>s ensure that the product does what the product owner expects it to.</p>
<ul>
<li>Practically, the only way to do solid testing on new features is to have a stable product.</li>
<li>Practically, the only way to assure a stable product is to either have solid regression testing on each release or to not make any changes.</li>
<li>Practically, the only way to make sure that adequate regression testing is done is to automate the regression tests (unit, component, functional).</li>
</ul>
<p>Without these tests in place, iterating quickly places an impossible to meet burden of verification demand on the testers and product owners, which just gives you a <strong>fragile</strong> process not an <strong>agile</strong> one.</p>
<p><strong> Is your process Agile or Fragile?</strong></p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1341" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/04/09/agile-%e2%80%93-tests-fragile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

