<?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>Andrew Ferrier &#187; softwareengineering</title>
	<atom:link href="http://www.andrewferrier.com/blog/tag/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andrewferrier.com/blog</link>
	<description>Economics; Travel; Film; and Technology.</description>
	<lastBuildDate>Fri, 30 Jul 2010 14:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>More Flexible Firefly Smart Playlists with Perl, sqlite3 and m3u</title>
		<link>http://www.andrewferrier.com/blog/2008/01/05/more-flexible-firefly-smart-playlists-with-perl-sqlite3-and-m3u/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=more-flexible-firefly-smart-playlists-with-perl-sqlite3-and-m3u</link>
		<comments>http://www.andrewferrier.com/blog/2008/01/05/more-flexible-firefly-smart-playlists-with-perl-sqlite3-and-m3u/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 15:30:35 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.andrewferrier.com/blog/2008/01/05/more-flexible-firefly-smart-playlists-with-perl-sqlite3-and-m3u/</guid>
		<description><![CDATA[I use Firefly (previously called mt-daapd) as a media server for my Roku Soundbridge. It has a feature called &#8216;Smart Playlists&#8217; that dynamically create playlists based on certain criteria, but they aren&#8217;t that powerful &#8211; they don&#8217;t support sorting or other more advanced query features. Fortunately, underlying Firefly is a sqlite database, which can be [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://www.fireflymediaserver.org/">Firefly</a> (previously called mt-daapd) as a media server for my <a href="http://www.rokulabs.com/products_soundbridge.php">Roku Soundbridge</a>. It has a feature called &#8216;Smart Playlists&#8217; that dynamically create playlists based on certain criteria, but they aren&#8217;t that powerful &#8211; they don&#8217;t support sorting or other more advanced query features.</p>
<p>Fortunately, underlying Firefly is a <a href="http://www.sqlite.org/">sqlite</a> database, which can be queried using standard SQL syntax. This enables a technique of creating static playlists that are automatically re-generated periodically instead.</p>
<p>The prerequisites for the following technique are:</p>
<ul>
<li><a href="http://www.perl.org/">Perl</a>, with the <a href="http://perldoc.perl.org/File/Spec.html">File::Spec</a> module (to convert from absolute paths to relative ones, which is what Firefly expects).</li>
<li>The sqlite3 command-line interface.</li>
</ul>
<p>The three commands that follow will create a standard <code>.m3u</code> playlist with the top 100 most-played songs from Firefly&#8217;s database, and another playlist with all the non-Podcasts added in the last month, ordered by the time they were added. Neither of these are possible using Firefly&#8217;s query language.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">sqlite3 <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>cache<span style="color: #000000; font-weight: bold;">/</span>mt-daapd<span style="color: #000000; font-weight: bold;">/</span>songs3.db <span style="color: #ff0000;">'select path from songs order by play_count desc limit 100'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-nle</span> <span style="color: #ff0000;">'require File::Spec; $_ = File::Spec-&gt;abs2rel($_, &quot;$PLAYLIST_DIR&quot;); print;'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PLAYLIST_DIR</span>/Most-played songs.m3u&quot;</span>
&nbsp;
<span style="color: #007800;">MONTHAGO</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'use Date::Calc::Object qw(:all); $date = Date::Calc&gt;now(); $date += [0,-1,0,0,0,0]; print $date-&gt;mktime();'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
sqlite3 var<span style="color: #000000; font-weight: bold;">/</span>cache<span style="color: #000000; font-weight: bold;">/</span>mt-daapd<span style="color: #000000; font-weight: bold;">/</span>songs3.db <span style="color: #ff0000;">&quot;select path from songs where genre!='Podcast' and time_added &amp;gt; <span style="color: #007800;">$MONTHAGO</span> order by time_added desc&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-nle</span> <span style="color: #ff0000;">'require File::Spec; $_ = File::Spec-&gt;abs2rel($_, &quot;$PLAYLIST_DIR&quot;); print;'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PLAYLIST_DIR</span>/Music added in last month by most recent.m3u&quot;</span></pre></div></div>

<p>(obviously, if you use these, you&#8217;ll need to alter paths to suit, make sure the correct Perl modules are installed, remove line breaks to make it easier to read, etc.)</p>
<p>Firefly will read these <code>.m3u</code>s if configured correctly during its next rescan, and use them as it would any other playlists. You can force a rescan with the following <a href="http://www.gnu.org/software/wget/">wget </a>command:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">--delete-after</span> <span style="color: #660033;">-q</span> <span style="color: #660033;">--http-user</span> noone <span style="color: #660033;">--http-password</span> yourpasswd <span style="color: #ff0000;">&quot;http://localhost:3689/config-update.html?action=rescan&quot;</span></pre></div></div>

<p>Although not fully dynamic (they are not generated on request from the Soundbridge), if these commands are called from cron or similar, the playlist can be kept up-to-date &#8216;enough&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2008/01/05/more-flexible-firefly-smart-playlists-with-perl-sqlite3-and-m3u/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Source Code Crazy</title>
		<link>http://www.andrewferrier.com/blog/2006/12/12/source-code-crazy/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=source-code-crazy</link>
		<comments>http://www.andrewferrier.com/blog/2006/12/12/source-code-crazy/#comments</comments>
		<pubDate>Tue, 12 Dec 2006 21:38:33 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/12/12/source-code-crazy/</guid>
		<description><![CDATA[I&#8217;ve thought for a while that build, source-code management, and bug tracking software (which I&#8217;m collectively calling meta-software) could, and should, be so much simpler. I&#8217;ve written previously about my contention that bugs and features are the same thing, but the problem is wider. Software has a tendency to acquire features over time, and software [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve thought for a while that build, source-code management, and bug tracking software (which I&#8217;m collectively calling meta-software) could, and should, be so much simpler. I&#8217;ve written previously about my contention that <a href="http://www.new-destiny.co.uk/andrew/blog/2006/07/24/software-change-management-should-change/">bugs and features are the same thing</a>, but the problem is wider. Software has a tendency to acquire features over time, and software that&#8217;s used to make other software is no exception. Here are some assorted thoughts about how to improve the situation:</p>
<ul>
<li>Always use integrated source-code libraries and bug tracking. This is something that <a href="http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)">CMVC</a> and other systems do excellently, and up till recently was fairly poorly served by the open-source software community, although projects such as <a href="http://trac.edgewall.org/">Trac</a> are doing a good job of closing this gap. The ability to see what changes are associated with what bug is invaluable. Anything else is a recipe for mistakes.</li>
<li>Get rid of all the excuses. There are only two valid reasons for permanently closing a bug: (i) it&#8217;s fixed; (ii) the developer disagrees that the change will improve the software for the user. Anything else isn&#8217;t OK. A corollary of my rule about bugs and features being the same thing is that bugs can&#8217;t be returned just because they are feature requests. All bugs that aren&#8217;t targeted for a release currently being worked on are still open bugs (just with a different target field). All bugs we don&#8217;t want to fix because they don&#8217;t seem sensible to fix right now (which could be marked as such) are still open bugs. All bugs in an external dependency are still bugs (the whole system doesn&#8217;t work). All bugs that can&#8217;t be recreated were seen once (assuming you trust your testers) and are still bugs. A good bug tracker is a database, and will let you see any subset of these any time you want, so no-one needs to get blamed unfairly.</li>
<li>Make sure each bug only has a few panic fields. &#8216;Severity&#8217;, &#8216;Importance&#8217;, &#8216;Priority&#8217;, &#8216;Ease of Recreation&#8217;, &#8216;Impact on Customer&#8217;, &#8216;Impact on Developer&#8217;, &#8216;Impact on Tester&#8217; are all ambiguous. Pick a maximum of two, preferably just one, and make sure everyone knows exactly what they mean. After all, only one field really matters &#8211; how much does this affect the user of our software? Everything else should be secondary.</li>
<li><a href="http://www.joelonsoftware.com/items/2006/11/21.html">What Joel says about explaining off-buttons to uncles</a> applies equally to the design of procedures around software development &#8211; everyone will think their exception to the process is vital until you&#8217;re drowning  in exceptions. This relates more to conventions surrounding software development rather than meta-software itself, but it&#8217;s still relevant. Keep it simple &#8211; regular builds on a schedule everyone knows; keep everything in one place; reduce the number of parties required to make a decision about any change to the bare minimum. <a href="http://www.scottberkun.com/">Scott Berkun</a> has a lot to say about this in his excellent book <a href="http://www.scottberkun.com/books/artofpm/">The Art of Project Management</a>.</li>
</ul>
<p>Fundamentally, though, maybe none of the above will help. Meta-software is perhaps destined to suffer from <a href="http://en.wikipedia.org/wiki/Creeping_featurism">featuritis</a> more than other software precisely because usability is not so important for its userbase (in my experience, most developers don&#8217;t like bad interfaces, but can also cope with them). Only time will tell if developers will be set free.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/12/12/source-code-crazy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sexual Synchronicity Economics</title>
		<link>http://www.andrewferrier.com/blog/2006/11/24/sexual-synchronicity-economics/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sexual-synchronicity-economics</link>
		<comments>http://www.andrewferrier.com/blog/2006/11/24/sexual-synchronicity-economics/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 10:30:10 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[economics]]></category>
		<category><![CDATA[humans]]></category>
		<category><![CDATA[ideasandinnovation]]></category>
		<category><![CDATA[sex]]></category>
		<category><![CDATA[society]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/11/24/sexual-synchronicity-economics/</guid>
		<description><![CDATA[I&#8217;ve written about synchronicity vs. asynchronicity before, but I wanted to revisit the subject because it seems to be so key to modern services; as more and more communication mechanisms evolve out of available technology and entrepreneurs&#8217; imagination, understanding customer&#8217;s usage patterns will be important when developing businesses around them. An excellent article by Gregor [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written about synchronicity vs. asynchronicity <a href="http://www.new-destiny.co.uk/andrew/blog/2006/07/20/is-text-messaging-synchronous/">before</a>, but I wanted to revisit the subject because it seems to be so key to modern services; as more and more communication mechanisms evolve out of available technology and entrepreneurs&#8217; imagination, understanding customer&#8217;s usage patterns will be important when developing businesses around them. An excellent article by Gregor Hohpe, <a href="http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html">Starbucks Does Not Use Two-Phase Commit</a> (included in <a href="http://www.joelonsoftware.com/AboutMe.html">Joel Spolsky</a>&#8216;s <a href="http://www.joelonsoftware.com/articles/BestSoftwareWriting.html">Best Software Writing Vol. 1</a>), is an examination of why understanding computer science concepts such as <a href="http://en.wikipedia.org/wiki/Two-phase_commit">2PC</a> (and, I would argue, <a href="http://en.wikipedia.org/wiki/Synchronous">synchronicity</a>) is important when engaging in <a href="http://en.wikipedia.org/wiki/Business_Process_Reengineering">business process engineering</a>. There&#8217;s a large overlap between business and software engineering here, and this is why IBM sells products like <a href="http://www.ibm.com/software/integration/wps/">WebSphere Process Server</a> together with business consultants to help customers implement them. There are a number of other essays in Spolsky&#8217;s excellent book which also discuss related subjects.</p>
<p>Clay Shirky, in his essay <a href="http://www.shirky.com/writings/group_enemy.html">A Group is Its Own Worst Enemy</a> (also included in the same volume; the online copy is edited slightly differently from the printed one), notes how online (synchronous) discussions frequently descend into talk about sex &#8211; and that sexual banter is much more common in synchronous communication than asynchronous (how often have you flirted with someone over the phone compared to email? &#8211; please, no anecdotes in the comments section). I&#8217;m not a psychologist, but I assume that this has something to do with it being hard to retain the thrill of adult banter over the course of a (potentially lengthy) asynchronous discussion. The same arguments probably apply in a less dramatic fashion to non-sexual communication.</p>
<p>There&#8217;s a related observation to be made about the perceived economics of people&#8217;s time. In general, most folks implicitly value synchronous time as higher than asynchronous &#8211; if I ask advice of a mentor over a half-hour coffee, I feel more indebted to him than if he spends half an hour hour answering my email. I suspect the reasons are a combination of my having accurate information (I know exactly how long he spent drinking the coffee), the start-up and tear-down time (he actually took 5 minutes to get to the coffee shop), and knowing that I have his undivided attention (he wasn&#8217;t multi-tasking). Nevertheless, we still continue to rate synchronous time more highly than its opportunity costs compared to asynchronous time.</p>
<p>To relate the two assertions, wouldn&#8217;t you rather spend half an hour in person with your spouse / significant other / other politically correct phrase than an hour writing and exchanging emails with them? Synchronous communication has a strange attraction than its poor cousin doesn&#8217;t &#8211; despite all of asynchronicity&#8217;s time-shifting advantages. This is going to be a big challenge for a multi-time-zone world.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/11/24/sexual-synchronicity-economics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam and OCR</title>
		<link>http://www.andrewferrier.com/blog/2006/11/10/spam-and-ocr/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=spam-and-ocr</link>
		<comments>http://www.andrewferrier.com/blog/2006/11/10/spam-and-ocr/#comments</comments>
		<pubDate>Fri, 10 Nov 2006 14:12:59 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[economics]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/11/10/spam-and-ocr/</guid>
		<description><![CDATA[It&#8217;s strange how the same techniques can be used to attack both sides of a problem. For some time now, some of the more sophisticated web spammers have been using OCR techniques to circumvent CAPTCHAs on websites in order to hijack free email accounts, submit comment spam on blogs, and similar forms of mischievousness. As [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s strange how the same techniques can be used to attack both sides of a problem. For some time now, some of the more sophisticated web spammers have been using <a href="http://en.wikipedia.org/wiki/OCR">OCR</a> techniques to circumvent <a href="http://en.wikipedia.org/wiki/Captcha">CAPTCHA</a>s on websites in order to hijack free email accounts, submit comment spam on blogs, and similar forms of mischievousness.</p>
<p>As the more capable e-mail spammers seem to be figuring out that anti-spam technologies are getting pretty good at filtering out the crap they send, normally using rule-based detection, <a href="http://en.wikipedia.org/wiki/Bayesian_filtering">Bayesian learning</a>, or a combination of the two, a lot of spam now being sent out is image-based &#8211; and anti-spammers are now using OCR to fight back against this new tide.</p>
<p><a href="http://www.new-destiny.co.uk/andrew/blog/2006/10/30/meta-blog/">As I&#8217;ve mentioned before</a>, I have a huge spam problem on my personal e-mail account (~4,000/week) &#8211; due to a combination of bad luck and some foolish naivety at a few points &#8211; and so I have a fairly highly-tuned <a href="http://spamassassin.apache.org/">SpamAssassin</a> installation running at home, with plenty of custom rules and plugins. I&#8217;ve seen a rising amount of image spam on it, so I decided to give <a href="http://wiki.apache.org/spamassassin/FuzzyOcrPlugin">FuzzyOcr</a>, a plugin for SpamAssassin, a try. So far, the results are pretty impressive. FuzzyOcr uses the open-source <a href="http://jocr.sourceforge.net/">gocr</a> program as the engine, and ties it to with SpamAssassin and some logic. The OCR is fairly CPU-intensive, so unlike most SpamAssassin plugins, it only kicks in if the message is otherwise going to be below a certain scoring threshold. So far it has roughly halved the volume of spam that slips through into my inbox (previously ~40-50/day), which is a welcome improvement.</p>
<p>However, fun though they are as a technical challenge, technical approaches such as these always feel like fighting a losing battle. I might write a lengthier article on this at a later date, but I&#8217;d like to see ISPs take a far more hardline attitude with their peers that host spammers. There are also compelling economic solutions to the problem, mostly related to <a href="http://fare.tunes.org/articles/stamps_vs_spam.html">micro-payments for sending email</a>. There are problems with those too (how do you roll them out gradually?), but you rarely see <a href="http://blogs.msdn.com/oldnewthing/archive/2004/09/16/230388.aspx">graphs of spam</a> that have a downward trend &#8211; a solution to the spam problem would be most welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/11/10/spam-and-ocr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two Google Ideas</title>
		<link>http://www.andrewferrier.com/blog/2006/11/04/two-google-ideas/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=two-google-ideas</link>
		<comments>http://www.andrewferrier.com/blog/2006/11/04/two-google-ideas/#comments</comments>
		<pubDate>Sat, 04 Nov 2006 13:07:30 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[design&usability]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/11/04/two-google-ideas/</guid>
		<description><![CDATA[Google have created a powerful brand based on creating simplicity from complexity (what all good IT is about). Their tools aren&#8217;t perfect, but they&#8217;ve made life easier for billions, and so I think they still deserve some free feedback from time-to-time. So, a few thoughts: Mr. Google, please develop a podcast search engine. So much [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/">Google</a> have created a powerful brand based on creating simplicity from complexity (what all good IT is about). Their tools aren&#8217;t perfect, but they&#8217;ve made life easier for billions, and so I think they still deserve some free feedback from time-to-time. So, a few thoughts:</p>
<ul>
<li>Mr. Google, please develop a podcast search engine. So much interesting content is now being released as podcasts (quick plug for my favourite: <a href="http://www.econtalk.org/">EconTalk</a>), that it would be useful to be able to search them. All you have to do is invent a speech-to-text interpreter that actually works reliably. Simple. [<strong>Note</strong>: as I sometimes do, I wrote this post in advance of it being published. I've since discovered that such a tool <a href="http://www.podzinger.com/">already exists</a>. However, I thought I'd leave the original prose here: Google, if you get one out soon, you could still corner the market]</li>
<li>Mr. Google, please stop developing so many interfaces &#8211; and plug them all together. If I want to do an exhaustive search for something, I now have to search <a href="http://www.google.co.uk/">Google Web</a>, <a href="http://images.google.co.uk/imghp?ie=UTF-8&#038;oe=UTF-8&#038;hl=en&#038;tab=wi">Google Images</a>, <a href="http://groups.google.co.uk/grphp?ie=UTF-8&#038;oe=UTF-8&#038;hl=en&#038;tab=wg">Google Groups</a>, <a href="http://news.google.co.uk/nwshp?ie=UTF-8&#038;oe=UTF-8&#038;hl=en&#038;tab=wn">Google News</a>, <a href="http://video.google.co.uk/">Google Video</a>, <a href="http://www.google.co.uk/blogsearch?hl=en">Google Blog Search</a>, <a href="http://www.google.co.uk/books?hl=en">Google Book Search</a>, <a href="http://scholar.google.com/">Google Scholar</a>, and possibly others. This is not a good thing &#8211; you&#8217;re straying from the simple search you started with. Some of those searches do show up in the main search results, but you could do a better job of tying them together to show what I&#8217;m actually looking for. This could be a real competitive edge, especially since the basic searches that <a href="http://www.msn.com/">MSN</a> and others provide are now actually quite reasonable.</li>
</ul>
<p>Google still have an edge in providing what people want &#8211; for a company so technically-focused, they either have talented marketers or are just <a href="http://www.google.com/help/features.html#lucky">lucky</a>. Please, Google, keep it up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/11/04/two-google-ideas/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Silly Word of the Day #94</title>
		<link>http://www.andrewferrier.com/blog/2006/10/18/silly-word-of-the-day-94/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=silly-word-of-the-day-94</link>
		<comments>http://www.andrewferrier.com/blog/2006/10/18/silly-word-of-the-day-94/#comments</comments>
		<pubDate>Wed, 18 Oct 2006 08:48:31 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[linguistics]]></category>
		<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/10/18/silly-word-of-the-day-94/</guid>
		<description><![CDATA[Marchitecture. I shamelessly stole this from a presentation I attended the other day (names withheld to protect the innocent). If it resonates with you, it probably doesn&#8217;t need explaining, but marchitecture is IT architecture that is used for marketing reasons rather than technical ones. Sometimes the marchitecture looks the same as the &#8216;real&#8217; architecture, sometimes [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Marchitecture</strong>. I shamelessly stole this from a presentation I attended the other day (names withheld to protect the innocent). If it resonates with you, it probably doesn&#8217;t need explaining, but marchitecture is <a href="http://en.wikipedia.org/wiki/Software_architecture">IT architecture</a> that is used for marketing reasons rather than technical ones. Sometimes the marchitecture looks the same as the &#8216;real&#8217; architecture, sometimes not. <a href="http://en.wikipedia.org/w/index.php?title=Marchitecture&#038;oldid=77014800">Wikipedia&#8217;s definition</a> seems a bit narrow (I&#8217;m not sure what electronic architecture is anyway), but hey. <a href="http://en.wikipedia.org/wiki/Wikipedia:No_original_research">No original research</a> seems to one of the more widely violated Wikipedian principles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/10/18/silly-word-of-the-day-94/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Imperial MEng Presentations</title>
		<link>http://www.andrewferrier.com/blog/2006/10/09/imperial-meng-presentations/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=imperial-meng-presentations</link>
		<comments>http://www.andrewferrier.com/blog/2006/10/09/imperial-meng-presentations/#comments</comments>
		<pubDate>Mon, 09 Oct 2006 16:32:42 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[humans]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/10/09/imperial-meng-presentations/</guid>
		<description><![CDATA[IBM Hursley invited three final-year MEng students from Imperial College to give us presentations on their individual MEng projects today (mine, from several years ago, can be found here). They were: Marc Hull, who talked about his project on Balancing simplicity and efficiency in web applications. Marc&#8217;s work focused on improving the development of stateful [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www-5.ibm.com/uk/locations/hursley_details.html">IBM Hursley</a> invited three final-year <a href="http://www.doc.ic.ac.uk/teaching/undergraduate/computing/">MEng</a> students from <a href="http://www.imperial.ac.uk/">Imperial College</a> to give us presentations on their individual MEng projects today (mine, from several years ago, can be found <a href="http://www.new-destiny.co.uk/andrew/project/index.php">here</a>). They were:</p>
<ul>
<li><a href="http://www.doc.ic.ac.uk/~mfh02/">Marc Hull</a>, who talked about his project on <a href="http://www.doc.ic.ac.uk/~mfh02/project/">Balancing simplicity and efficiency in web applications</a>. Marc&#8217;s work focused on improving the development of stateful web applications, and in particular on <a href="http://www.new-destiny.co.uk/andrew/past_work/ORMapping.pdf">object-relational mapping in Java</a>, in an attempt to allow more straightforward persistence of objects to databases. This has always seemed to me to be an area lacking in usability and ease (see <a href="http://www.new-destiny.co.uk/andrew/blog/2006/07/27/esb-negates-the-decline-of-j2ee/">J2EE</a> for plenty of examples), so anything that moves us closer is welcome.</li>
<li><a href="http://www.wellquite.org/">Matthew Sackman</a>, who talked about his project <a href="http://www.wellquite.org/glint/">Glint: Breeding Mobile Ambients with Actors</a> (which won the <a href="http://www.wellquite.org/index.php/2006/06/30/its-all-over-part-2/">IBM Project Prize for the best final year Individual Project</a>). Essentially, Matthew seems to be attacking the area of concurrent and distributed computing, in order to improve its robustness against deadlock (and other concurrency problems). He has chosen to do this by writing a compiler for the GLINT language, which is based on an <a href="http://en.wikipedia.org/wiki/Actor_model">Actor model</a> and is especially particularly suitable for modelling concurrent systems.</li>
<li>Francis Russell, who talked about his project <a href="http://www.doc.ic.ac.uk/~fpr02/final-year-project/">Delayed Evaluation and Runtime Code Generation as a  				means to Producing High Performance Numerical Software</a>. Francis&#8217;s infrastructure shifts some code generation and execution to the runtime of a program (<a href="http://en.wikipedia.org/wiki/Lazy_evaluation">lazy evaluation</a>). It does this by building up a <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph">DAG</a> to represent expressions that are &#8216;should&#8217; have been already evaluated. The expression it represents isn&#8217;t actually evaluated until it&#8217;s needed, which enables certain optimisations to be performed (which is useful, for example, in matrix arithmetic). The framework generates and executes the optimised code at runtime (and it also caches this generated code).</li>
</ul>
<p>I had the chance to meet these folks briefly (Marc and Matthew had also been here previously, when they were part of the team from Imperial who <a href="http://www.doc.ic.ac.uk/about/news/ibm.html">won the Thinkpad Challenge</a>). It was interesting to see some academic work for a change &#8211; whilst I&#8217;d never be able to make a career out of that, bringing academia and business together always seems to reap benefits.</p>
<p>I wish Marc, Matthew and Francis luck if they choose to develop their projects further.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/10/09/imperial-meng-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM and Open-source</title>
		<link>http://www.andrewferrier.com/blog/2006/09/13/ibm-and-open-source/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ibm-and-open-source</link>
		<comments>http://www.andrewferrier.com/blog/2006/09/13/ibm-and-open-source/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 07:35:54 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[economics]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/09/13/ibm-and-open-source/</guid>
		<description><![CDATA[One of the things I&#8217;ve felt IBM&#8216;s been strong at in recent years is the way we embrace open-source as a development model, and as a model for providing software to our customers. Eclipse, which has a lot of support from IBM, is a well-known example, but there are plenty of others. I honestly believe [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things I&#8217;ve felt <a href="http://www.ibm.com/">IBM</a>&#8216;s been strong at in recent years is the way we embrace open-source as a development model, and as a model for providing software to our customers. <a href="http://www.eclipse.org/">Eclipse</a>, which has a lot of support from IBM, is a well-known example, but there are plenty of others. I honestly believe that the provision of open-source software gives us a competitive edge over IT organisations of comparable size. Sure, we don&#8217;t do it for all our products, but for toolchains like Eclipse it has delivered real benefits &#8211; the number of plugins developed for it is testament to that.</p>
<p>Greg at IBM Eye <a href="http://www.ibmeye.com/ibm-open-source-strategy-is-beyond-linux/">has provided a brief recap</a> of the many software domains in which IBM supports open-source. I think Greg&#8217;s analysis is too narrow &#8211; there are <a href="http://www.opensource.org/advocacy/recommended.php">other benefits to open-source software</a> apart from savings on purchase cost &#8211; some of them bogus and some not &#8211; but quality and maintainability are certainly side-effects of open-source software, and are worth having even if they&#8217;re hard to quantify.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/09/13/ibm-and-open-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reuse and SOA</title>
		<link>http://www.andrewferrier.com/blog/2006/09/10/reuse-and-soa/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=reuse-and-soa</link>
		<comments>http://www.andrewferrier.com/blog/2006/09/10/reuse-and-soa/#comments</comments>
		<pubDate>Sun, 10 Sep 2006 16:35:12 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[humans]]></category>
		<category><![CDATA[soaandesb]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/09/10/reuse-and-soa/</guid>
		<description><![CDATA[Joe McKendrick discusses SOA and reuse in a recent blog entry, essentially drawing on some comments from David Chappell that reuse didn&#8217;t do as well as predicted in the era of object-orientation, and that SOA isn&#8217;t faring well in this department either. Dave Linthicum, in his latest podcast, also discusses this topic. I&#8217;m not sure [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.zdnet.com/service-oriented/">Joe McKendrick</a> discusses <a href="http://en.wikipedia.org/wiki/Service_oriented_architecture">SOA</a> and reuse in a <a href="http://blogs.zdnet.com/service-oriented/?p=699">recent blog entry</a>, essentially drawing on some comments from <a href="http://www.davidchappell.com/">David Chappell</a> that reuse didn&#8217;t do as well as predicted in the era of <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">object-orientation</a>, and that SOA isn&#8217;t faring well in this department either. <a href="http://weblog.infoworld.com/realworldsoa/">Dave Linthicum</a>, in his <a href="http://weblog.infoworld.com/realworldsoa/archives/2006/09/soa_and_reuse_a.html">latest podcast</a>, also discusses this topic.</p>
<p>I&#8217;m not sure I can comment that widely on the state of current SOA projects, and I would agree that SOA may suffer from similar management problems to that of object-orientation: if developers of SOA systems aren&#8217;t rewarded for saving time with a reuse strategy, they won&#8217;t be enthused to do so. This is an important part of any software project, and encouraging reuse is a best practice that shouldn&#8217;t be restricted to object-orientation or SOA.</p>
<p>However, whilst I agree that SOA has other benefits apart from encouraging reuse, I have a fairly high opinion of its potential in that respect. It&#8217;s important to understand what we mean by reuse. Reuse rarely means using an object or service as it is. There is often a mismatch between the interface offered by the service (object) being consumed, and the service (object) that needs to call this interface. Expecting anything else is unrealistic (even if future reuse plans are made). This is often solved using something like a <a href="http://en.wikipedia.org/wiki/Facade_pattern">façade pattern</a> in object-oriented languages, and some form of mediation with services (such as that offered by <a href="http://www.ibm.com/software/integration/wsesb/">WebSphere ESB</a>). The latter is often easier, because there is a lower degree of coupling than inside a single programming language, and because programming code is not often needed, and this is why I believe SOA reuse is simpler &#8211; if done well. Of course, some work is still required, but this greater ease of reuse makes it a realistic strategy for more scenarios.</p>
<p>I would agree, however, that, as is often the case, the project management problems here are the greatest ones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/09/10/reuse-and-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Test Automation Conference</title>
		<link>http://www.andrewferrier.com/blog/2006/09/09/google-test-automation-conference/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=google-test-automation-conference</link>
		<comments>http://www.andrewferrier.com/blog/2006/09/09/google-test-automation-conference/#comments</comments>
		<pubDate>Sat, 09 Sep 2006 18:04:41 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[humans]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/09/09/google-test-automation-conference/</guid>
		<description><![CDATA[I spent last Thursday and Friday in London at the Google offices in Victoria for the first Google Test Automation Conference. The presentation topics ranged widely, considering the relatively narrow scope of the conference, but most were well developed and interesting, even if some retrod familiar topics. Some of the highlights included: Steve Loughran and [...]]]></description>
			<content:encoded><![CDATA[<p>I spent last Thursday and Friday in London at the <a href="http://management.silicon.com/itpro/0,39024675,39154338,00.htm">Google offices in Victoria</a> for the first <a href="http://www.google.co.uk/intl/en/events/londontesters/speakers.html">Google Test Automation Conference</a>. The presentation topics ranged widely, considering the relatively narrow scope of the conference, but most were well developed and interesting, even if some retrod familiar topics. Some of the highlights included:</p>
<ul>
<li><a href="http://www.xml.com/pub/au/218">Steve Loughran</a> and <a href="http://conferences.oreillynet.com/cs/eurooscon/view/e_spkr/2332">Julio Guijarro</a>, <a href="http://www.hpl.hp.com/">HP Labs</a>. This presentation was about <a href="http://www.smartfrog.org/">Smartfrog</a>, a system deployment framework, which Steve and Julio were working on as part of a strategy for system testing. They demonstrated several examples of how the system might work in practice. Smartfrog looks pretty flexible, and I plan to spend some time looking into it. Frameworks for deployment have an inherent problem in catering to the wide variety of platforms, configuration mechanisms, deployment combinations and so on that are necessary in practice. Anything that gets closer to this is therefore welcome. Smartfrog also has the interesting property that the <a href="http://www.w3.org/TR/xhtml1/">XHTML</a> it produces as output is sufficiently well-formed that, although it has an embedded <a href="http://www.w3.org/Style/CSS/">CSS</a> stylesheet for presentation in a web browser, it can also be parsed as <a href="http://www.w3.org/XML/">XML</a> data without much effort, and thus act as a machine-readable data source as well. This might seem obvious to some folks, and I&#8217;m willing to bet it&#8217;s not the first time it&#8217;s been done, but it seemed novel to me.</li>
<li><a href="http://chatley.com/blog/">Robert Chatley</a> (a fellow alumnus from Imperial College) and <a href="http://weblogs.java.net/blog/tomwhite/">Tom White</a>, <a href="http://www.kizoom.com/">Kizoom</a>. Tom and Robert were talking about what they called literate functional testing. Essentially this involves creating tests, in this case written in <a href="http://en.wikipedia.org/wiki/Java_programming_language">Java</a>, that use plain English for method names, variables, and so on. This means that once punctuation is stripped out, Java code &#8211; test assertions &#8211; become statements that are readily understandable by non-programmers (such as the business analysts in their organisation). Their framework will shortly be available <a href="http://code.google.com/p/literate/">on Google Code</a>.</li>
<li><a href="http://se.ethz.ch/people/leitner/">Andreas Leitner</a>, <a href="http://se.ethz.ch/people/leitner/">ETH Zurich</a>: Andreas discussed automated testing using contracts. Essentially this means using a language which has <a href="http://en.wikipedia.org/wiki/Precondition">pre-conditions</a> and <a href="http://en.wikipedia.org/wiki/Postcondition">post-conditions</a> on methods, and optionally assertions on objects. He has developed a testing framework called <a href="http://se.ethz.ch/people/leitner/auto_test/">AutoTest</a>, using the <a href="http://en.wikipedia.org/wiki/Eiffel_programming_language">Eiffel</a> language, which has these features built in (<a href="http://www.cs.iastate.edu/~leavens/JML/">similar extensions</a> are available for more mainstream languages such as Java). Once these restrictions are placed on a program, generated input can be used to determine whether methods behave as they should. A number of strategies are available for generating this data, and they are pluggable into Andreas&#8217;s framework. The simplest is of course to generate the data randomly, but other, more sophisticated strategies are available to improve coverage. Andreas stressed that this type of testing, which is essentially <a href="http://en.wikipedia.org/wiki/Fuzz_testing">fuzz testing</a> with intelligence, should be used to complement human-created unit tests, not to replace them.</li>
<li>Goranka Bjedov, <a href="http://www.google.com/">Google</a>: Goranka explained some of the background to performance testing, including the differences between performance testing, stress testing, load testing, scalability testing, etc., and how to deploy and manage performance testing systems.</li>
<li>The conference finished with 10 <a href="http://perl.plover.com/lightning-talks.html">lightning talks</a>. Subjects covered included <a href="http://www.jmock.org/">jMock</a> (a mock objects framework that complements <a href="http://www.junit.org/">JUnit</a>), justifying automated tesing in financial terms, testing heresies, <a href="http://www.yandex.ru/">Yandex</a> (the largest search engine in Russia, their share ~60%, Google&#8217;s ~6%), &#8216;Automated Testing: Why bother?&#8217;, <a href="http://www.workroom-productions.com/Google-LTAC.html">automated tricks for manual testing</a>, and the Perl-inspired <a href="http://search.cpan.org/dist/Test-Harness/lib/Test/Harness/TAP.pod">Test Anything Protocol</a>. I hadn&#8217;t seen lightning talks before, and I thought they were a fantastic idea &#8211; similar in some ways to the Straight 8 showings <a href="http://www.new-destiny.co.uk/andrew/blog/2006/08/01/straight-8-and-metro-polis/">I wrote about a while ago</a> &#8211; if you don&#8217;t like what you&#8217;re seeing, something else is coming along soon. More presentations should be like this.</li>
</ul>
<p>My thanks to the guys at Google for hosting this conference, particularly for free. The original call for attendees was on their <a href="http://googleresearch.blogspot.com/">research blog</a>. Some of the conference topics were quite academic and in-depth, but that provided a good constrast to the more practical topics. Google&#8217;s offices and facilities are also impressive &#8211; definitely worth visiting if you get the chance.</p>
<p><font size="-2" color="#aaaaaa">Google LTAC</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/09/09/google-test-automation-conference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Future of Programming</title>
		<link>http://www.andrewferrier.com/blog/2006/08/30/the-future-of-programming/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=the-future-of-programming</link>
		<comments>http://www.andrewferrier.com/blog/2006/08/30/the-future-of-programming/#comments</comments>
		<pubDate>Wed, 30 Aug 2006 12:20:36 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/08/30/the-future-of-programming/</guid>
		<description><![CDATA[Marc Andreessen discussed the history of programming in a recent podcast, noting the shift from machine-targeted languages to human-targeted languages. Although he seems to think that the change was fairly sudden (for him, it was started with Java in 1995), and he spends a surprising amount of time discussing PHP, which seems to be his [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Marc_Andreessen">Marc Andreessen</a> discussed the history of programming <a href="http://osc.gigavox.com/shows/detail994.html">in a recent podcast</a>, noting the shift from machine-targeted languages to human-targeted languages. Although he seems to think that the change was fairly sudden (for him, it was started with <a href="http://en.wikipedia.org/wiki/Java_programming_language">Java</a> in 1995), and he spends a surprising amount of time discussing <a href="http://en.wikipedia.org/wiki/PHP">PHP</a>, which seems to be his favourite example of an easy-to-use language, his general point is still well founded.</p>
<p>It&#8217;s certainly interesting to see how languages like <a href="http://en.wikipedia.org/wiki/C_programming_language">C</a> and <a href="http://en.wikipedia.org/wiki/C++">C++</a> are fading, their place being taken by Java. This is simply due to economic incentives: why spend expensive programmer time solving problems than can be solved by a cheap machine? Java is in danger of becoming overly feature-laden, but it still has a single important strength over its predecessors &#8211; simple dynamic memory management &#8211; no more explicit object creation/destruction. This does for memory what filesystems have done for disk. It&#8217;s hard to see just how much this has done for development speed and robustness until you compare it to what went before. PHP, <a href="http://en.wikipedia.org/wiki/Python_programming_language">Python</a>, and so on, have the potential to do more, particularly for the new breed of web-based applications.</p>
<p>Andreessen also briefly discusses <a href="http://en.wikipedia.org/wiki/Web_service">Web Services</a>. He certainly seems to believe in Web Services &#8211; as he notes, the majority of major languages have good bindings for them now. I can see good things ahead for Web Services as the annoying details are sorted out by the market: see the doc/literal discussion from Andre Tost&#8217;s article <a href="http://www.new-destiny.co.uk/andrew/blog/2006/08/27/10-web-services-issues/">I linked to a few days ago</a> for an example. I look forward to seeing how this pans out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/08/30/the-future-of-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is Business Logic?</title>
		<link>http://www.andrewferrier.com/blog/2006/08/16/what-is-business-logic/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-is-business-logic</link>
		<comments>http://www.andrewferrier.com/blog/2006/08/16/what-is-business-logic/#comments</comments>
		<pubDate>Wed, 16 Aug 2006 09:53:47 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[soaandesb]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/08/16/what-is-business-logic/</guid>
		<description><![CDATA[In the world of business-oriented software, we use the phrase &#8216;business logic&#8217; a lot. In my particular area (WebSphere integration products), a typical pattern is to delegate &#8216;technical logic&#8217; to mediation flows in WebSphere ESB, and to put &#8216;business logic&#8217; in process flows in WebSphere Process Server. It doesn&#8217;t have to be that way, but [...]]]></description>
			<content:encoded><![CDATA[<p>In the world of business-oriented software, we use the phrase &#8216;business logic&#8217; a lot. In my particular area (WebSphere integration products), a typical pattern is to delegate &#8216;technical logic&#8217; to mediation flows in <a href="http://www.ibm.com/software/integration/wsesb/">WebSphere ESB</a>, and to put &#8216;business logic&#8217; in process flows in <a href="http://www.ibm.com/software/integration/wps/">WebSphere Process Server</a>. It doesn&#8217;t have to be that way, but that&#8217;s what many people encourage, as it seems to neatly match what the software can provide.</p>
<p>But what do we mean by the phrase &#8216;business logic&#8217;? Ultimately both business logic and technical logic come down to the same thing; instructions executed by the machine. I can implement both in mediation flows, Java, Perl, assembler, or shell scripts. So why the distinction? It really depends on one&#8217;s perception.</p>
<p>For example, let&#8217;s imagine we are developing an integration system for a peanut factory, and we are developing a system to handle the orders. A typical way we might encourage someone to use WebSphere ESB is at the boundary, to convert between the protocol used by the web-based bulk order system (say <a href="http://www.w3schools.com/soap/soap_httpbinding.asp">SOAP/HTTP</a>) to the one used by the back-end production system (say <a href="http://java.sun.com/products/jms/">JMS</a>). The distinction between these isn&#8217;t important to the business; it doesn&#8217;t matter what format the message is in; it just has to be in a certain format because we need some integration and don&#8217;t want to change everything.</p>
<p>By comparison, we might encourage someone to use a business flow to model (say) the approval of orders of peanuts. The process might follow a number of steps, some of which might involve human intervention, to modify the order (message) accordingly &#8211; i.e. adding &#8216;approved&#8217; or &#8216;denied&#8217;. This would be based on the size of the order, that customer&#8217;s past history, whether they were salted or (urgh) dry roasted &#8211; all things that are at the business level &#8211; things that we find interesting (assuming we like peanuts).</p>
<p>Therefore, let&#8217;s characterise the difference as follows:</p>
<ul>
<li><strong>Technical logic</strong>: Stuff we don&#8217;t want to do, but need to in order for everything to work.</li>
<li><strong>Business logic</strong>: Stuff we do want to do &#8211; the reason we&#8217;re doing all this. We can not only decide on how to implement this (as we can with technical logic), we can also decide not to implement it all, or to implement different logic.</li>
</ul>
<p>Therefore, these two types of logic are at different abstraction layers &#8211; the technical layer we&#8217;d love to make as simple as possible and hide away (and I&#8217;d like to think WebSphere ESB does a good job of helping IBM&#8217;s customers do that), whereas the business layer we find interesting and want to spend some time on. <a href="http://www.new-destiny.co.uk/andrew/blog/2006/06/26/new-best-practice-for-soaesb/">I mentioned something similar before as a best practice</a> &#8211; I could rephrase that best practice here as: &#8216;Spend as much time as possible on the business logic, and as little time as possible on the technical logic&#8217;. It seems sensible, then, that to keep them separate (and there are plenty of patterns for doing just that) is a natural thing to want to do.</p>
<p>I&#8217;d love to hear some comments from my consultant colleagues on this: do you think this distinction is important? Does it impact the way you work day-to-day?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/08/16/what-is-business-logic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>7 Java Irritants</title>
		<link>http://www.andrewferrier.com/blog/2006/08/11/7-java-irritants/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=7-java-irritants</link>
		<comments>http://www.andrewferrier.com/blog/2006/08/11/7-java-irritants/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 10:31:09 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/08/11/7-java-irritants/</guid>
		<description><![CDATA[Java is a pretty robust language for the objectives it seems to set itself &#8211; being a clean and easy-to-learn object-oriented language &#8211; although the slippery slope towards featuritis is very apparent in 5.0. The automatic garbage collection, in particular, is a godsend for someone migrating from C++. But there are still plenty of little [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Java_programming_language">Java</a> is a pretty robust language for the objectives it seems to set itself &#8211; being a clean and easy-to-learn object-oriented language &#8211; although the slippery slope towards <a href="http://en.wikipedia.org/wiki/Feature_creep">featuritis</a> is very apparent in 5.0. The automatic garbage collection, in particular, is a godsend for someone migrating from <a href="http://en.wikipedia.org/wiki/C++">C++</a>.</p>
<p>But there are still plenty of little niggles that could be rectified:</p>
<ol>
<li>Make the structure of the program dependent on indentation, like <a href="http://en.wikipedia.org/wiki/Python_programming_language">Python</a>, and get rid of the curly braces everywhere. <a href="http://www.secnetix.de/~olli/Python/block_indentation.hawk">It makes sense</a>.</li>
<li>Get rid of the primitive data types (int, long, etc.) at the source level. <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html">Auto-boxing in Java 5.0</a> makes them less annoying, but they still aren&#8217;t necessary &#8211; the lack of a primitive string datatype makes that clear.</li>
<li>Have an explicit modifier for <a href="http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html">package-private/friendly visibility</a>, for consistency, and make it mandatory to specify a visibility modifier. These things make the code less ambiguous for those unfamiliar with the rules.</li>
<li>Remove the one-class-per-source-file restriction (in theory this is for public classes only, but because of this, most people use a separate file for each class). It makes for huge and unwieldy build and deployment structures. <a href="http://en.wikipedia.org/wiki/C++">C++</a> shows how it can be done.</li>
<li>Get rid of the syntatic inconsistency between interfaces and classes. Methods in interfaces are always abstract as they cannot have a body. Java allows the <em>abstract </em>modifier to be missed out, however. This can be confusing.</li>
<li>Make <code>/* */</code>-style comments nestable. It is very irritating to comment out a block, but have to do it in bits because of a &#8216;real&#8217; comment block that&#8217;s part of the code. Colour-coding text editors mean that there shouldn&#8217;t be any confusion when doing this. It would also make <code>//</code>-style comments largely redundant.</li>
<li>Merge the concepts of list and arrays, <a href="http://www.faqs.org/docs/pperl/pickingUpPerl_4.html">as Perl does</a>. This allows for a far greater degree of expression in the language, and reduces some of the <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">OO</a> waffle necessary in Java when dealing with lists.</li>
</ol>
<p>This kind of stuff is almost always about personal preference, so it&#8217;s unlikely that you&#8217;ll agree with all of the above. But I&#8217;d love to hear your comments anyway. What little things annoy you about Java?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/08/11/7-java-irritants/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Controversial Linguistics Concept of the Week #222</title>
		<link>http://www.andrewferrier.com/blog/2006/08/04/controversial-linguistics-concept-of-the-week-222/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=controversial-linguistics-concept-of-the-week-222</link>
		<comments>http://www.andrewferrier.com/blog/2006/08/04/controversial-linguistics-concept-of-the-week-222/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 11:15:03 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[linguistics]]></category>
		<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/08/04/controversial-linguistics-concept-of-the-week-222/</guid>
		<description><![CDATA[The Sapir-Whorf hypothesis basically states that there is a relationship between the language that a person uses and the way they think about the world. Although it&#8217;s controversial, many linguists believe there is at least some truth in it: as Wikipedia says, &#8216;The opposite extreme—that language does not influence thought at all—is also widely considered [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://en.wikipedia.org/wiki/Sapir-Whorf_hypothesis">Sapir-Whorf hypothesis</a> basically states that there is a relationship between the language that a person uses and the way they think about the world. Although it&#8217;s controversial, many <a href="http://en.wikipedia.org/wiki/Linguist">linguists</a> believe there is at least some truth in it: as Wikipedia says, &#8216;The opposite extreme—that language does not influence thought at all—is also widely considered to be false&#8217;. The theory has implications, such as that the value of improving one&#8217;s vocabulary or learning another language are even greater than they would be otherwise.</p>
<p>The hypothesis has also been <a href="http://en.wikipedia.org/wiki/Sapir-Whorf_and_programming_languages">extended to programming languages</a>. Essentially, the theory here is that certain types of language are more suited to solving certain problems, and programmers who aren&#8217;t aware of these types may not be able to solve some problems in the most effective way. I think this is borne out by empirical evidence: there is a noticeable difference in the way those who have been trained in declarative programming (such as functional and logic programming) solve problems, even in when writing in traditional procedural languages (for example, <a href="http://en.wikipedia.org/wiki/C_programming_language">C</a>), from those who are only trained in those procedural languages. This is important for some types of problem, such as writing compilers or parsers, which are well suited to declarative programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/08/04/controversial-linguistics-concept-of-the-week-222/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Change Management Should Change</title>
		<link>http://www.andrewferrier.com/blog/2006/07/24/software-change-management-should-change/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=software-change-management-should-change</link>
		<comments>http://www.andrewferrier.com/blog/2006/07/24/software-change-management-should-change/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 07:31:50 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[economics]]></category>
		<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/07/24/software-change-management-should-change/</guid>
		<description><![CDATA[Almost all software, whether it be public domain, open-source, or commercial, is not just released once. Typically it goes through many versions, changing (and hopefully improving) each time, sometimes adding features, sometimes removing bugs or problems, sometimes introducing new ones. This change is normally managed (at least for larger software systems) using two or three [...]]]></description>
			<content:encoded><![CDATA[<p>Almost all software, whether it be public domain, open-source, or commercial, is not just released once. Typically it goes through many versions, changing (and hopefully improving) each time, sometimes adding features, sometimes removing bugs or problems, sometimes introducing new ones. This change is normally managed (at least for larger software systems) using two or three elements:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Revision_control">Version control systems</a> (also called source control or library systems). These are typically used to keep track of different versions of source-code, enabling previous versions to be retrieved, different parts of the software to be merged together, and so on. <a href="http://www.nongnu.org/cvs/">CVS</a> is a well-known open source example.</li>
<li><a href="http://en.wikipedia.org/wiki/Bug_tracking">Bug tracking systems</a> (bugs are sometimes called defects). These are used to keep a list of all the outstanding bugs and details about them. <a href="http://www.bugzilla.org/">Bugzilla</a> is a well-known open-source example.</li>
<li>Feature or requirement tracking systems. These are used to track new features that need to be added to the software (wherever they may come from).</li>
</ul>
<p>In some cases, these systems may be integrated, in other cases not (integrated systems are normally more useful: for example, you can easily ask the question: &#8216;when this bug was fixed, what code changed?&#8217;).</p>
<p>Currently, commercial software companies often follow something akin to a <a href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall model</a> and treat features as long-term work items and bugs as short-term (as an aside, the original inventor of the waterfall model <a href="http://tarmo.fi/blog/2005/09/09/dont-draw-diagrams-of-wrong-practices-or-why-people-still-believe-in-the-waterfall-model/">didn&#8217;t believe in its effectiveness</a>). This is a risky game to play if your competitor can implement new features before your model allows you to. It&#8217;s likely that as commercial software becomes under increasing pressure from open-source competitors, often using nimble development methods such as <a href="http://en.wikipedia.org/wiki/Agile_processes">agile programming</a>, commerical software production companies will need to turn around production of new versions with new features faster than before to survive.</p>
<p>One of the mismatches occurs in treating bugs and features independently. Bugs take time to fix. Features take time to implement. In a sense, both are actually customer requirements, even if the customer hasn&#8217;t asked for them. Bugs customers won&#8217;t notice shouldn&#8217;t be fixed, and bugs they will notice will become a requirement even if they haven&#8217;t noticed them yet. Features either the customer has asked for or you think they may want should be implemented. Features that only you want are a waste of time. Bugs that your customer thinks are bugs normally are, even if you want to call them a feature.</p>
<p>So this leads to my conclusion (and not everyone agrees): <strong>bugs and features are actually the same type of thing</strong>. They are both customer requirements and should be managed the same way, triaged the same way, and developer time assigned to them in the same way.</p>
<p>Many open-source projects already treat features and bugs like this. <a href="https://bugzilla.mozilla.org/">Firefox&#8217;s Bugzilla</a>, for example (in common with most Bugzilla installations), tracks features with a severity of &#8216;enhancement&#8217;. This probably isn&#8217;t ideal; features shouldn&#8217;t be treated as second-class citizens compared to bugs. But it&#8217;s a step in the right direction. This way, developers of Firefox see bugs and features as being of the same kin; lack of features cause some customers just as much pain as lack of bugfixes.</p>
<p>This issue is far from settled, and there are strong opinions out there that disagree with me. But it is clear that everyone involved in software development should be aware that this is not a solved problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/07/24/software-change-management-should-change/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Is Text Messaging Synchronous?</title>
		<link>http://www.andrewferrier.com/blog/2006/07/20/is-text-messaging-synchronous/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=is-text-messaging-synchronous</link>
		<comments>http://www.andrewferrier.com/blog/2006/07/20/is-text-messaging-synchronous/#comments</comments>
		<pubDate>Thu, 20 Jul 2006 20:16:16 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[soaandesb]]></category>
		<category><![CDATA[softwareengineering]]></category>
		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/07/20/is-text-messaging-synchronous/</guid>
		<description><![CDATA[Working with WebSphere ESB recently has got me thinking about synchronous and asynchronous communication mechanisms. I began to wonder about a mechanism that&#8217;s more familiar to most people &#8211; text messaging &#8211; and how it plays a dual role in usage. Let&#8217;s recap first on two other communication mechanisms that more obviously fit into one [...]]]></description>
			<content:encoded><![CDATA[<p>Working with <a href="http://www.ibm.com/software/integration/wsesb/">WebSphere ESB</a> recently has got me thinking about synchronous and asynchronous communication mechanisms. I began to wonder about a mechanism that&#8217;s more familiar to most people &#8211; <a href="http://en.wikipedia.org/wiki/Short_message_service">text messaging</a> &#8211; and how it plays a dual role in usage. Let&#8217;s recap first on two other communication mechanisms that more obviously fit into one category or the other (perhaps ironically, a modern mobile phone can do all of these, including text messaging):</p>
<ul>
<li><strong>Phone call</strong> &#8211; synchronous. You are engaging in an ongoing conversation with the other party. The flow of conversation goes back and forth at a high rate, and you have to be present when the phone call is occurring to participate (ignoring voicemail, recordings etc.).</li>
<li><strong>Email</strong> &#8211; asynchronous. You can send someone a message and it doesn&#8217;t matter when they read it &#8211; it could be in 2 minutes, 5 hours, or 3 days. The message can get to them via a number of &#8216;store-and-forward&#8217; hops, rather than directly. When and if they reply, the same rules apply.</li>
</ul>
<p>Text messaging, in many ways, is technically similar to email. It has different protocols, is typically used with different types of software, and has different formats. But it&#8217;s still store-and-forward and is still technically asynchronous.</p>
<p>However, I would assert that in many (although not all) situations, text messaging is, from a usage point-of-view, synchronous. The stories about teenagers who rack up £1000s in phone bills or develop <a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury">RSI</a> from text conversations across the classroom attest to that. Although they are using a mechanism which is by nature asynchronous, they are actually able to use it in a semi-synchronous way because it is reliable and fast. Whilst most adults&#8217; use of text messaging isn&#8217;t quite so dramatic, text &#8216;conversations&#8217; of 3 or 4 messages in fast succession each way aren&#8217;t uncommon (I have done this, although rarely, because I have large thumbs and find phone keypads awkward &#8211; don&#8217;t laugh!). Also, though, text messages are still used asynchronously in many situations (I don&#8217;t have any statistics on this but would hazard a 50:50 ratio as a not unreasonable estimate).</p>
<p>In many ways, this isn&#8217;t anything new &#8211; it has always been possible to emulate synchronous messaging with fast asynchronous messaging (arguably, this is what voice-over-IP systems such as <a href="http://www.skype.com/">Skype</a> do, for example). But what I do find striking about text messaging is its dual usage role &#8211; sometimes synchronous, sometimes not. Often the difference is only in the perception of the sender &#8211; some people expect prompt replies, others perhaps not for days, and it all depends what one&#8217;s sending anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/07/20/is-text-messaging-synchronous/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Near-human Tasks</title>
		<link>http://www.andrewferrier.com/blog/2006/07/04/near-human-tasks/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=near-human-tasks</link>
		<comments>http://www.andrewferrier.com/blog/2006/07/04/near-human-tasks/#comments</comments>
		<pubDate>Tue, 04 Jul 2006 13:05:18 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/07/04/near-human-tasks/</guid>
		<description><![CDATA[This morning I was writing a test plan document. It contained lots of technical nitty-gritty and detail, but a lot of it was the same stuff repeated over and over again. It was very tedious to write (and hence undoubtedly error-prone), but necessary. I kept thinking how useful it would be if I could automate [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I was writing a test plan document. It contained lots of technical nitty-gritty and detail, but a lot of it was the same stuff repeated over and over again. It was very tedious to write (and hence undoubtedly error-prone), but necessary. I kept thinking how useful it would be if I could automate the process. I knew it was just a little too complex, and contained a few too many exceptions, though, that writing a program to do it would be more trouble than it would be worth.</p>
<p>This led me to thinking about &#8216;near-human&#8217; tasks. Perhaps we can classify tasks into three board areas:</p>
<ul>
<li><strong>Automatable</strong>. These are tasks that can easily be programmed, and where it makes sense to do so once you have a computer. For example, figuring out the prime numbers between 1 and 1 million is far faster on computer than by hand (including the time to write the program).</li>
<li><strong>Non-automatable</strong>. These are tasks that almost certainly cannot be programmed, even with the current state of <a href="http://en.wikipedia.org/wiki/Artificial_intelligence">AI</a>, and are often open questions: &#8216;How do I prevent wars?&#8217;, &#8216;Is global warming real?&#8217;, &#8216;Which way should I design my new product?&#8217;, &#8216;What&#8217;s the best colour for a car?&#8217;, etc.</li>
<li><strong>Near-human, or semi-automatable</strong>. These are tasks (such as mine above), that feel like they should be automatable, but anyone who has any software engineering experience knows that they will spend more time writing the program to do it than doing the task (although only by a factor of up to 10, say).</li>
</ul>
<p>It wouldn&#8217;t surprise me to discover that near-human tasks are an already-understood concept, probably in the field of AI or some other computer science theoretical field (possibly something I should already know!), and that I&#8217;m reinventing terms here. But maybe they an area that we can focus on more in order to overcome some frustration with the menial tasks that annoy us?</p>
<p>One possible example, although more automatable than my original one, is that of detecting spam. <a href="http://spamassassin.apache.org/">Relatively good spam filters now exist</a> for email, with ~1% false negative rate and next-to-no false positives. These spam filters have been probably been technically possible for some time (although they still eat a fair amount of compute resources), but have only risen to prominence in the past few years because the rising tide of spam has made them necessary. They are still not perfect, which in my mind is what keeps them out of the fully-automatable category (the writers are always one step behind the spammers, and would have to do more work than is worthwhile, or maybe even possible, to get a 0% false negative rate), but they are getting closer.</p>
<p>What other examples of near-human tasks exist? What should the bright software engineers of tomorrow be working on to make our lives easier?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/07/04/near-human-tasks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Streaming Audio/Video Slow-down Performance Improvement</title>
		<link>http://www.andrewferrier.com/blog/2006/06/27/streaming-audiovideo-slow-down-performance-improvement/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=streaming-audiovideo-slow-down-performance-improvement</link>
		<comments>http://www.andrewferrier.com/blog/2006/06/27/streaming-audiovideo-slow-down-performance-improvement/#comments</comments>
		<pubDate>Tue, 27 Jun 2006 21:03:36 +0000</pubDate>
		<dc:creator>andrewferrier</dc:creator>
				<category><![CDATA[softwareengineering]]></category>

		<guid isPermaLink="false">http://www.new-destiny.co.uk/andrew/blog/2006/06/27/streaming-audiovideo-slow-down-performance-improvement/</guid>
		<description><![CDATA[Audio and video players such as RealPlayer use read-ahead buffering on the client when streaming across networks to accommodate for temporary slow-downs or delays in network traffic. Most of them also use a form of pre-buffering, in which a certain amount of data is read before playback starts (or when the buffer runs out). Some [...]]]></description>
			<content:encoded><![CDATA[<p>Audio and video players such as <a href="http://www.real.com/freeplayer/">RealPlayer</a> use read-ahead buffering on the client when streaming across networks to accommodate for temporary slow-downs or delays in network traffic. Most of them also use a form of pre-buffering, in which a certain amount of data is read before playback starts (or when the buffer runs out). Some &#8211; such as RealPlayer &#8211; will also dynamically alter the <a href="http://en.wikipedia.org/wiki/Bits_per_second">bitrate</a> being requested, if network performance drops for a period of time. This noticeably affects the quality of the audio/video.</p>
<p>There is a possible complement to the bitrate method &#8211; if minor network delays are suspected, and the buffer is moderately full, slow down the audio or video by a small amount (perhaps 3-15%). This would be mostly unnoticeable, <a href="http://en.wikipedia.org/wiki/Pitch_correction">as it&#8217;s possible to dynamically &#8216;correct&#8217; the pitch</a> in real time, but would slow down the rate at which the buffer is emptying, and reduce the likelihood of skips or pauses whilst the buffer is pre-filled again. It would probably have to be combined with the bitrate method, as that would have a more drastic effect on the data rate.</p>
<p>I&#8217;m not aware of any player currently available that does this (<a href="http://www.intervideo.com/">WinDVD</a> can slow down/speed up DVD playback, with pitch correction, but as far as I know, this only applies to &#8216;local&#8217; DVDs). I&#8217;d be interested to hear any thoughts on the theory or a possible implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewferrier.com/blog/2006/06/27/streaming-audiovideo-slow-down-performance-improvement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
