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

<channel>
	<title>Thoughts on the World &#187; Code &amp; Development</title>
	<atom:link href="http://www.andrewj.com/blog/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andrewj.com/blog</link>
	<description>Thoughts on the World and Other Ramblings from Andrew Johnston</description>
	<lastBuildDate>Mon, 07 May 2012 07:13:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Macs Are Really Easy? Ha!</title>
		<link>http://www.andrewj.com/blog/2012/macs-are-really-easy-ha/</link>
		<comments>http://www.andrewj.com/blog/2012/macs-are-really-easy-ha/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 15:35:46 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=977</guid>
		<description><![CDATA[There is a myth. The myth goes &#8220;Windows is complicated. Macs are really easy &#8211; they just work.&#8221; Like most myths this may have started from an original truth, but is now a lie. I am it&#8217;s latest, but I &#8230; <a href="http://www.andrewj.com/blog/2012/macs-are-really-easy-ha/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There is a myth. The myth goes &#8220;Windows is complicated. Macs are really easy &#8211; they just work.&#8221;</p>
<p>Like most myths this may have started from an original truth, but is now a lie. I am it&#8217;s latest, but I suspect far from only, victim.</p>
<p>Let me explain. For over a year now I have been developing a plugin for the RAW developer Bibble and it&#8217;s recent successor, Corel AfterShot. These plugins are developed using c++ and the Nokia QT framework, which theoretically allows the same code and user interface design to compile and run on Windows, Linux and Mac.</p>
<p>As a died in the wool Windows developer, that&#8217;s where I started. There&#8217;s a QT add-in to Visual Studio, so with a bit of juggling I managed to get one of the examples to load into VS, build, and run using Bibble as the target executable, and I was off. I was on a fairly steep learning curve in respect of the programming model, but I had very few problems compiling and running things.</p>
<p>When it got to the stage that I had something to share with the Bibble community I published the Windows version, and another member of the community kindly cross- compiled for the other platforms. There was another learning curve to make sure my code compiled cleanly on the other platforms, but nothing too drastic. For over a year I sent code updates to Jonathan, and got compiled Linux and Mac libraries back.</p>
<p>Although Jonathan still provides a very helpful service, it became apparent that if I wanted to have full control over the application versions I support, and be able to verify my plugin&#8217;s portability, I needed the ability to compile and run each version myself. I wasn&#8217;t prepared to buy and carry extra hardware around, but maybe VM technology would work.</p>
<p>I started with Linux. I had a couple of false starts but quickly found a site which has pre-built VMs for most Linux distributions (<a href="http://www.trendsigma.net/vmware/">http://www.trendsigma.net/vmware/</a>), and homed in on Lubuntu &#8211; based on Ubuntu but with a quite Windows-like shell. I downloaded and installed AfterShot and  QT Creator, loaded up a copy of my code, and clicked &#8220;build&#8221;. <strong>And it worked first time! </strong> Getting a completely slick solution took a bit more effort, but it works so well I don&#8217;t now even copy the Windows code, I just open the same directory from my Linux VM and run the Linux builds in place.</p>
<p>So far so good. Now for the Mac. What could go wrong?</p>
<p><span id="more-977"></span>Apple&#8217;s antipathy to virtualisation is well known (see <a href="http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/">http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/</a>), and strictly speaking you&#8217;re not allowed to run OSX on non-Apple hardware. However, I got a legal copy of Snow Leopard, and found advice on the web on how to run up an OSX VM. You have to be patient, especially as it can take a couple of goes to boot the VM cleanly or install software, but generally it works pretty well.</p>
<p>First challenge: installing software. Unlike Windows or Linux, where non-trivial software has to be installed by a program which does useful things like error checking, on the Mac you often just simply drag a package of files to &#8220;Applications&#8221;. When it works, this is nice and easy. But if it fails, and I&#8217;ve now experienced this several times, it does so silently leaving you with a broken installation, which may not be obvious until things don&#8217;t work.</p>
<p>Eventually I manage to install Bibble, ASP, QT and, adding 30% to the size of the OS, XCode, the Mac development environment. I open QT Creator, and try to open my project. The first problem is that QT puts platform-specific settings in a small file alongside the main project files, and this has a fixed name, so you can store either the Linux or the Mac settings, but not both. Sigh, and copy the files from Windows to a local directory on the Mac.</p>
<p>After a bit of juggling, I got the plugin to compile. I then had to set up the deployment steps, renaming and copying files. Cue the next annoyance. Deployment configuration requires copying and adjusting complex filenames and paths. On Windows, you right-click any file or folder and there&#8217;s an option to copy the path to the clipboard. I was delighted to find that exactly the same trick works on Linux. OSX has no such simple solution. In the end I found a page of instructions on the web, which involved setting up macros as the like, but it wasn&#8217;t &#8220;easy&#8221;.</p>
<p>So I&#8217;ve compiled and deployed my plugin. Start AfterShot. Half the plugins and tools are missing, including mine. Re-install AfterShot, reboot the vMac, and now the standard tools are there, but still no sign of my plugin. The files are there, but the log has a very cryptic message about how my plugin &#8220;does not contain any recognisable symbols&#8221;.</p>
<p>Cue about 5 days of testing, trying different things, emails and posts on the Bibble forums. To cut a long story to a tolerable length&#8230;</p>
<ol>
<li> No one seems to know how to compile successfully using QT Creator on the Mac, you have to convert to XCode,</li>
<li>XCode can&#8217;t cope with spaces in your folder or filenames. Another reason why the code can&#8217;t be shared directly with Windows and Linux,</li>
<li>When you&#8217;ve finished compiling, you have to do an extra step called &#8220;fixing the paths&#8221;. The QT/XCode combo manages to embed hard-coded pathnames in the executable files, which fail immediately you rename or move it. This doesn&#8217;t happen on the other platforms. Fortunately there are scripts available to perform the fix, but it&#8217;s certainly not obvious,</li>
<li>It&#8217;s all very sensitive to precise choices of SDK versions and the like,</li>
<li>Plugins for Bibble have to be compiled using a different QT version to those for ASP, and you can&#8217;t have more than one version installed on a Mac (ironically this restriction doesn&#8217;t apply on Windows or Linux, where there&#8217;s no problem just using the latest libraries for both). I had to use the &#8220;clone&#8221; feature of VMWare to create a &#8220;branched&#8221; VM with a different installation &#8211; on a physical machine I&#8217;d be sunk.</li>
</ol>
<p>That&#8217;s not quite the end of it. One of the SDK features I use in AfterShot relies on an asynchronous processing model. On the other platforms and on a physical Mac my code runs fine, but on the &#8220;vMac&#8221; it returns invalid data. This is clearly a Bibble/Corel problem, but one for which no-one has yet offered an explanation or fix.</p>
<p>Now I accept that some of this may be down to my use of a VM, and some is definitely weaknesses in the Mac versions of the QT and Corel software. But setting those aside, the fact remains that the Linux exercise was genuinely quite easy, the Mac version far from it.</p>
<p>So there are lies, damn&#8217; lies and statements about how &#8220;Macs are easy, they just work&#8221;. The next person to repeat that lie to me may suffer a painful injury to a soft part of their anatomy&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2012/macs-are-really-easy-ha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OSX&#8211;A Third-Class OS?</title>
		<link>http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/</link>
		<comments>http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 20:40:18 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/</guid>
		<description><![CDATA[Does Apple's opposition to virtualisation create a technical ghetto? <a href="http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A recent post on The Online Photographer (<a title="http://theonlinephotographer.typepad.com/the_online_photographer/2012/02/more-planned-obsolescence-evil-lion.html" href="http://theonlinephotographer.typepad.com/the_online_photographer/2012/02/more-planned-obsolescence-evil-lion.htmlThis" target="_blank">More Planned Obsolescence: Evil Lion</a>) really chimed with me. Apple&#8217;s implacable opposition to virtualisation is a significant opportunity lost.
<p>I&#8217;m a Windows user, spending much of the working week away from home. I get a vast amount of value from virtualisation. It allows me to carry just one PC with multiple &#8220;client specific&#8221; images, and enables me to keep running legacy software almost indefinitely. My main client uses the same technology to provide legacy support for essential software, which in long-cycle engineering businesses can easily be 20-30 years old, as physical assets in such businesses age many times more slowly than the computing equipment around them.
<p>I also develop plugins for the Bibble RAW processor. The same code should work on Windows, Mac and Linux, but you have to compile and test on each platform to confirm this. I&#8217;ve recently added a Linux Virtual Machine to my kit. This was remarkably painless, just a few hours work, and I can now rapidly cross-compile and test my Windows-based developments under Linux. If there&#8217;s an issue which means having to support more than one flavour or version of Linux adding it would be trivial.
<p>I just can&#8217;t do this for the Mac. I don&#8217;t want to buy and carry another laptop (which would be useless for any other purpose), and you can&#8217;t get virtualised OSX, either as a VM or as a service, through any legal and “safe” route. The result: as far as I am concerned OSX is a “third-class” OS, almost a “technical ghetto”, and I have to rely on the good offices of other developers to deliver my plugins for it.
<p>People will put up with a lot in the name of love. Maybe Mac users “love” their computers enough to tolerate this behaviour. But looking in from outside I find Apple&#8217;s attitude perplexing and very annoying.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2012/mac-osxa-third-class-os/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>First Bibble Plugin Published</title>
		<link>http://www.andrewj.com/blog/2010/first-bibble-plugin-published/</link>
		<comments>http://www.andrewj.com/blog/2010/first-bibble-plugin-published/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 08:38:17 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Photography]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/first-bibble-plugin-published/</guid>
		<description><![CDATA[I’ve just published my first plugin for the popular image processing suite, Bibble. CAQuest manages chromatic aberration correction, so if you find yourself always having to apply correction for “purple fringes”, this is the tool you need. To find out &#8230; <a href="http://www.andrewj.com/blog/2010/first-bibble-plugin-published/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I’ve just published my first plugin for the popular image processing suite, <a href="http://www.bibblelabs.com" target="_blank">Bibble</a>. CAQuest manages chromatic aberration correction, so if you find yourself always having to apply correction for “purple fringes”, this is the tool you need.</p>
<p>To find out more, visit <a href="http://www.andrewj.com/plugins">www.andrewj.com/plugins</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2010/first-bibble-plugin-published/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrating External Content with WordPress</title>
		<link>http://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/</link>
		<comments>http://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 20:25:12 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Website & Blog]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/integrating-external-content-with-wordpress/</guid>
		<description><![CDATA[I&#8217;ve been developing andrewj.com for about 15 years, and although I&#8217;m not that prolific I&#8217;ve built up quite a lot of content. I recently converted my blog from an old bespoke (= &#8220;custom&#8221;, for my American friends) solution to one &#8230; <a href="http://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been developing <em>andrewj.com </em>for about 15 years, and although I&#8217;m not that prolific I&#8217;ve built up quite a lot of content.</p>
<p>I recently converted my blog from an old bespoke (= &#8220;custom&#8221;, for my American friends) solution to one based on WordPress. However, this created a problem, in that the WordPress model is to hold all content in the database, and that wasn&#8217;t the right model for me.</p>
<p>Firstly, I have a number of articles which are very long for a blog post, and I had no interest in restructuring them. I also didn&#8217;t want to break external links to the existing articles.</p>
<p>Next, I decided that I wanted the freedom to continue to write in that style. Some of my writing takes several weeks, and it works for me to draft it as separate HTML pages. I also sometimes want to include active content or multiple images, and I don&#8217;t want to create a large and unwieldy WordPress database full of such stuff.</p>
<p>Finally, my online photo galleries are managed and generated using Jalbum, and I wanted to find a way of neatly integrating single images into my blog, complete with the watermarks and metadata extraction which Jalbum manages so well, without duplicating that functionality in WordPress.</p>
<p>This is probably typical of many older web sites, but WordPress doesn&#8217;t really embrace the integration of external content. <a href="/thoughts/linkexternal.asp">This article</a> describes how I solved this problem, and a WordPress plugin I have developed to make my solution reusable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In Damnation of PHP</title>
		<link>http://www.andrewj.com/blog/2010/in-damnation-of-php/</link>
		<comments>http://www.andrewj.com/blog/2010/in-damnation-of-php/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 21:23:36 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/in-damnation-of-php/</guid>
		<description><![CDATA[&#60;rant&#62;Apologies if the title is a bit strong, but I think it&#8217;s the nearest I can get to the opposite of &#8220;In Praise of PHP&#8221; I&#8217;ve just spent a week-end migrating my website to a new hosting server. As part &#8230; <a href="http://www.andrewj.com/blog/2010/in-damnation-of-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&lt;rant&gt;Apologies if the title is a bit strong, but I think it&#8217;s the nearest I can get to the opposite of &#8220;In Praise of PHP&#8221;</p>
<p>I&#8217;ve just spent a week-end migrating my website to a new hosting server. As part of that process, I had to rewrite all my old ASP code using PHP. Here&#8217;s what I learned:</p>
<ol>
<li>The Apache/Linux community have misleadingly changed the meaning of &#8220;ASP&#8221;. If you bought a Linux-based hosting service 5+ years ago with &#8220;ASP&#8221;, it meant a *nix port of Active Server Pages. That worked for me, as I could develop it on Windows. Now, if you buy a Linux hosting service with &#8220;ASP&#8221; it means &#8220;Apache Server Pages&#8221;, and the embedded language is Perl. Useless!</li>
<li>PHP has positively the worst combination of features for a language:
<ul>
<li>A c-based language&#8217;s sensitivity to case, ending semicolons and curly bracket counts,</li>
<li>None of the protections against errors in the latter that a C++/Java (or VB) language gives you, like strong typing and forced variable declaration,</li>
<li>No single-step debugging. Now I accept that this may not be 100% true, so don&#8217;t all write in with the names of all the debuggers I didn&#8217;t find in a quick search for tools on Sunday morning, but certainly I don&#8217;t have one at the moment,</li>
<li>It runs differently on Windows and Linux, and in a way I haven&#8217;t yet understood 100%, so I can only test by uploading to my live website.</li>
</ul>
</li>
</ol>
<p>That said, I&#8217;ve still got it! I&#8217;ve managed to convert my blog and my book reviews, and I&#8217;ve actually improved on my old code for the latter. Just please let me have VB.NET back for my next major project.</p>
<p>OK. &lt;/rant&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2010/in-damnation-of-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Volume Shadowing with Ntbackup Under Vista</title>
		<link>http://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/</link>
		<comments>http://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 00:00:03 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2007/using-volume-shadowing-with-ntbackup-under-vista/</guid>
		<description><![CDATA[The brain-dead backup function of Windows Vista is enormously annoying. There are known ways to get good old ntbackup working, but they have their limitations. Read this article about my attempts to get round some of those limitations. <a href="http://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The brain-dead backup function of Windows Vista is enormously annoying. There are known ways to get good old <em>ntbackup </em>working, but they have their limitations. Read this article about my attempts to get round some of those limitations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain-Specific Languages</title>
		<link>http://www.andrewj.com/blog/2005/domain-specific-languages/</link>
		<comments>http://www.andrewj.com/blog/2005/domain-specific-languages/#comments</comments>
		<pubDate>Sun, 26 Jun 2005 09:06:19 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/domain-specific-languages/</guid>
		<description><![CDATA[There seems to be quite a lot of activity on the &#8220;Domain Specific Language&#8221; front at the moment. Martin Fowler published &#8220;Language Workbenches: The Killer-App for Domain Specific Languages?&#8221;, in which he concludes that the common programming pattern of setting &#8230; <a href="http://www.andrewj.com/blog/2005/domain-specific-languages/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There seems to be quite a lot of activity on the &#8220;Domain Specific Language&#8221; front at the moment. Martin Fowler published <a href="http://www.martinfowler.com/articles/languageWorkbench.html" target="_blank">&#8220;Language Workbenches: The Killer-App for Domain Specific Languages?&#8221;</a>, in which he concludes that the common programming pattern of setting up repeating data structures via either very similar lines of code, or an external configuration file, is actually a DSL. He also republished a paper by Dave Thomas entitled <a href="http://www.martinfowler.com/ieeeSoftware/accChange.pdf" target="_blank">&#8220;Design to Accomodate Change&#8221;</a> on the related topic of table-driven programming.</p>
<p>However, Martin&#8217;s essay goes beyond common programming and data techniques to look at the development of specialist tools which he calls &#8220;Language Workbenches&#8221;. I&#8217;m not completely convinced that we need these in the world of XML and XSD. If you have a defined schema for you XML-based DSL (and aren&#8217;t all the many *ML langauges just different DLSs?) then any schema-sensitive editor will provide you with good design and editing support. The leading IDEs (e.g. Visual Studio) all have such a tool built into their core capabilities. Surely we now have a sufficiently sophisticated set of XML-based tools and standards that we have an opportunity to exploit synergies rather than re-inventing the wheel?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2005/domain-specific-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Growing a Language</title>
		<link>http://www.andrewj.com/blog/2005/growing-a-language/</link>
		<comments>http://www.andrewj.com/blog/2005/growing-a-language/#comments</comments>
		<pubDate>Wed, 11 May 2005 20:08:56 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/growing-a-language/</guid>
		<description><![CDATA[I&#8217;ve just read a wonderful paper by Guy L Steele, &#8220;Growing a Language&#8220;. He argues strongly that programming languages must be &#8220;small&#8221;, but able to grow. Such a language will have a relatively simple structure, syntactic rules, and a small &#8230; <a href="http://www.andrewj.com/blog/2005/growing-a-language/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just read a wonderful paper by Guy L Steele, &#8220;<a href="http://homepages.inf.ed.ac.uk/wadler/steele-oopsla98.pdf" target="_blank">Growing a Language</a>&#8220;. He argues strongly that programming languages must be &#8220;small&#8221;, but able to grow. Such a language will have a relatively simple structure, syntactic rules, and a small core vocabulary. However it must also be able to &#8220;grow&#8221;, integrating new data types and functions, in the form of user code accessed in exactly the same way as core functions.</p>
<p>Steele&#8217;s argument is highlighted by the paper&#8217;s unique style &#8211; he uses a small but growing language himself. He writes using only words of one syllable, gradually adding other words he has defined in these terms.</p>
<p>The paper works at many levels. As well as the fascinating intellectual exercise in style, it makes a strong case for:</p>
<ul>
<li>simple but extensible programming languages,</li>
<li>improving the extensibility of Java, rather than its core vocabulary,</li>
<li>an agile community process for developing languages, rather than up-front design of great monoliths,</li>
<li>the communication power of simple language and words.</li>
</ul>
<p>Steele exhorts us to think about extensibility mechanisms &#8211; if we get these right then the core functionality can always grow. And by example, he encourages us to use simple, direct language and benefit from its discipline. On both accounts I agree wholeheartedly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2005/growing-a-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise Integration Patterns</title>
		<link>http://www.andrewj.com/blog/2005/enterprise-integration-patterns/</link>
		<comments>http://www.andrewj.com/blog/2005/enterprise-integration-patterns/#comments</comments>
		<pubDate>Fri, 25 Mar 2005 00:00:00 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/enterprise-integration-patterns/</guid>
		<description><![CDATA[Integration, like other design activities, can benefit from sharing ideas and proven strategies in the form of patterns. An excellent starting point is Gregor Hohpe and Bobby Woolf&#8217;s Enterprise Integration Patterns website and book. In my recent work I&#8217;ve discovered &#8230; <a href="http://www.andrewj.com/blog/2005/enterprise-integration-patterns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Integration, like other design activities, can benefit from sharing ideas and proven strategies in the form of patterns. An excellent starting point is Gregor Hohpe and Bobby Woolf&#8217;s <a href="http://www.enterpriseintegrationpatterns.com/" target="_blank">Enterprise Integration Patterns</a> website and book.</p>
<p>In my recent work I&#8217;ve discovered a few patterns of my own, and I&#8217;ve started a page to document them.</p>
<p>First up is entitled <strong>&#8220;Change Indicator&#8221;</strong> . You may have a legacy system with an EAI adaptor, or a similar source of messages, which reports on the current state of key business objects. The messages will typically tell you <em>when</em> something has changed, but not necessarily <em>what</em> has changed, but the latter may be important to downstream systems. This pattern shows how to use EAI elements to add this information in a way which is totally transparent to the legacy system and existing users of the EAI scheme.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2005/enterprise-integration-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogger Me!</title>
		<link>http://www.andrewj.com/blog/2005/blogger-me/</link>
		<comments>http://www.andrewj.com/blog/2005/blogger-me/#comments</comments>
		<pubDate>Mon, 07 Mar 2005 20:14:47 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/blogger-me/</guid>
		<description><![CDATA[My blog is now fully live. My Thoughts on the World, and the articles in AgileArchitect.org, are now available via an RSS feed. For the technically inclined, I&#8217;ve built my blog using a combination of VB.NET, Active Server Pages, and &#8230; <a href="http://www.andrewj.com/blog/2005/blogger-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My blog is now fully live. My <a href="http://www.andrewj.com/thoughts/thoughts.php">Thoughts on the World</a>, and the articles in <a href="http://www.agilearchitect.org/agile/articles/index.asp"><br />
AgileArchitect.org</a>, are now available via an RSS feed.</p>
<p>For the technically inclined, I&#8217;ve built my blog using a combination of VB.NET, Active Server Pages, and a bit of XSLT. This allows me to develop my site using FrontPage and IIS, and run it under Apache. If anyone&#8217;s interested I&#8217;ll write a technical note on it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2005/blogger-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Fast Diff Algorithm</title>
		<link>http://www.andrewj.com/blog/2005/a-fast-diff-algorithm/</link>
		<comments>http://www.andrewj.com/blog/2005/a-fast-diff-algorithm/#comments</comments>
		<pubDate>Mon, 21 Feb 2005 19:00:00 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/a-fast-diff-algorithm/</guid>
		<description><![CDATA[An implementation of a Diff algorithm in VB.NET, with various techniques to improve performance <a href="http://www.andrewj.com/blog/2005/a-fast-diff-algorithm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This recent posting to <a href="http://www.codeproject.com" target="_blank">The Code Project</a> is an implementation of a Diff<br />
algorithm in VB.NET, with various techniques to improve performance, while<br />
keeping the code simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2005/a-fast-diff-algorithm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Combining Risk Factors</title>
		<link>http://www.andrewj.com/blog/2003/combining-risk-factors/</link>
		<comments>http://www.andrewj.com/blog/2003/combining-risk-factors/#comments</comments>
		<pubDate>Thu, 25 Sep 2003 04:01:00 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		
		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2003/combining-risk-factors/</guid>
		<description><![CDATA[A simple analytical approach to combine the effects of multiple risk factors <a href="http://www.andrewj.com/blog/2003/combining-risk-factors/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.andrewj.com/books/review.php?book=demarco">&#8220;Waltzing with Bears&#8221;</a> Tom DeMarco and Tim Lister introduce the very useful concept of the &#8220;Uncertainty Diagram&#8221;, the probability distribution for project metrics such as delivery date, expenditure or benefit delivery. This is used, for example, to assess the likelihood of delay from a given risk.</p>
<p>However, they rely entirely on Monte-Carlo simulation. I believe that where the curve is defined by, or can be approximated by, a few discrete points, a relatively simple analytical solution can then be used in place of simulation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewj.com/blog/2003/combining-risk-factors/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

