<?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>Agile &amp; Architecture &#8211; Thoughts on the World</title>
	<atom:link href="https://www.andrewj.com/blog/feed/?cat=7%2C8%2C9%2C11" rel="self" type="application/rss+xml" />
	<link>https://www.andrewj.com/blog</link>
	<description>Thoughts on the World and Other Ramblings from Andrew Johnston</description>
	<lastBuildDate>Sun, 26 Oct 2025 10:34:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.4</generator>
	<item>
		<title>Adjustable Architecture and Minimising Waste</title>
		<link>https://www.andrewj.com/blog/2025/adjustable-architecture-and-minimising-waste/</link>
					<comments>https://www.andrewj.com/blog/2025/adjustable-architecture-and-minimising-waste/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 25 Oct 2025 11:04:25 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        <media:thumbnail height="120" url="/photoblog/2025A/thumbs/251022_Rx100vii_04097.jpg" width="79"/><media:content height="550" url="/photoblog/2025A/slides/251022_Rx100vii_04097.jpg" width="366"/>		<guid isPermaLink="false">https://www.andrewj.com/blog/?p=2955</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2025A/slides/251022_Rx100vii_04097.html"><img src="/photoblog/2025A/slides/251022_Rx100vii_04097.jpg"/></a>Rescue, Don’t Replace One of the things which attracted us to our house about 30 years ago was a great feature: what is known as a &#8220;Chinese Circle&#8221; in the courtyard end wall, which provides a view into, from and &#8230; <a href="https://www.andrewj.com/blog/2025/adjustable-architecture-and-minimising-waste/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2025A/slides/251022_Rx100vii_04097.html"><img src="/photoblog/2025A/slides/251022_Rx100vii_04097.jpg"/></a><p><em>Rescue, Don’t Replace</em></p>
<p>One of the things which attracted us to our house about 30 years ago was a great feature: what is known as a &#8220;Chinese Circle&#8221; in the courtyard end wall, which provides a view into, from and through the courtyard from both the house and the garden. We place sculptures so they are viewed through it, we light it at Christmas, it&#8217;s very much part of what makes our house.</p>
<p>Unfortunately a few years after we moved in, it became apparent that the original wall had not been built very strongly and was in some danger of collapse. Therefore about 25 years ago we had it rebuilt. We contracted a local builder who agreed a much stronger double-thickness structure, plus what we hoped were adequate, larger foundations.</p>
<p>While the wall itself was impressively strong, we&#8217;re on clay and over the years it became clear that with each cycle of wet and then hot weather the foundations were moving slightly. In recent years this accelerated, with the wall moving by several millimetres this summer and getting to the point where there was some risk of collapse. The wall itself was still stable and uncracked, it was just leaning into the garden, as a whole, by about 5°.</p>
<div id="photodatawide" style="page-break-inside: avoid; -webkit-column-break-inside: avoid; break-inside: avoid;" align="center">
<p align="center"><img decoding="async" src="/photoblog/2025A/slides/250816_Rx100vii_03999.jpg" /></p>
<table id="metadata" class="infotable" cellspacing="0" cellpadding="2" align="center">
<tbody>
<tr>
<td class="smalltxt" style="text-align: center;"><span class="comment">The Leaning Wall of Effingham <a>(Show Details)</a></span></td>
</tr>
<tr id="ImageDetails1" style="display: none;">
<td class="smalltxt" style="text-align: center;" colspan="2"><b>Camera: </b>SONY DSC-RX100M7 | <b>Date: </b>16-08-2025 11:51 | <b>Resolution: </b>3648 x 5472 | <b>ISO: </b>100 | <b>Exp. bias: </b>-0.7 EV | <b>Exp. Time: </b>1/100s | <b>Aperture: </b>5.6 | <b>Focal Length: </b>14.4mm (~39.0mm)</td>
</tr>
</tbody>
</table>
</div>
<p>Knowing the wall was still stable I approached several subsidence specialists. They made it very clear they were not interested in such a small job, claiming that the simplest solution was to knock the wall down and rebuild it. We approached a reputable local builder who said very much the same thing: he was happy to provide a quote for rebuilding, at enormous cost, but when we pressed him for a quote to stabilise it he basically refused, by providing a quote effectively no different to the rebuild option.</p>
<p>Apart from the impact on our finances this just felt wrong and wasteful. Other things aside, a rebuild would require at least £1000 worth of new bricks, with the existing ones being disposed of as rubble. The wall was strong and undamaged apart from leaning. Even if it could not be fully righted, it would be acceptable to just stabilise and support it where it was. Why was no-one prepared to do that?</p>
<p>With another local builder Frances and I came up with the idea of creating two steel buttresses to stabilise the wall in place. We were quite keen on the option, but it became apparent that his steel fabricator was going to charge a fortune to make up the buttresses, and we&#8217;d pay a lot of money for an aesthetically questionable part solution.</p>
<p>Just as we were in danger of exhausting the local directories, we were introduced to friend of a friend Tomasz and his team of Polish builders. Initially he wanted to quote for a rebuild, but when pressed he agreed that it should be possible to jack the wall back nearly vertical, and then underpin it. The quote to do so wasn&#8217;t much more than half the rebuild option, he was able to start almost immediately, and we almost bit his hand off.</p>
<p>On the anointed day up turned a team of Polish chaps with shovels and a tiny digger, who proceeded to dig two deep trenches either side of the wall. I was a little afraid that it would collapse during this process but with strategically placed props and wooden supports it they managed to keep it all in place.</p>
<p>The first attempt at jacking used two steel props with contact points halfway up the wall. This quickly reduced the lean angle by about half, but we were concerned that the wall might crack at its base if the wall moved and the foundation didn&#8217;t. We were prepared to stabilise the wall at the new position, but the Polish guys went back to digging and created a new structure in which two smaller jacks could be used to twist the foundation itself.</p>
<p>The next challenge was finding the right jacks. They had one small hydraulic jack, pretty good, and a bunch of modern car jacks which were clearly not going to work. However I rummaged in the back of my garage and found a bottle jack rescued from an old Ford Transit in the 1970s which turned out to be exactly the right piece of equipment. Twenty minutes of careful jacking on the foundation twisted it with the wall intact, and we had a perfectly straight wall again.</p>
<p>My faith in the strength of the wall was fully vindicated &#8211; it didn&#8217;t crack or warp at all.</p>
<p>The rest of the process was straightforward albeit physically hard work, progressively digging by hand and pouring extended foundations which were wider and deeper than the old one.</p>
<p>We decided to cap off the new structure by building two brick buttresses on the garden side of the wall. While not strictly required because the wall is still uncracked and now vertical they enhance the look of it and make sure if there is any cracking right at the base of the wall it won&#8217;t compromise the solution. Tomasz procured 100 matching bricks, and I was given the task of coming up with a design for their use in the buttresses. My design used 98 of them. We also needed to cap off the top bricks, the dimples of which would otherwise collect water. I came up with the solution of creating porcelain tile caps, and then impressed the guys by getting out my own electric tile cutter, and making the required caps from a single yellow floor tile left over from our 2006 bathroom refit.</p>
<div id="photodatawide" style="page-break-inside: avoid; -webkit-column-break-inside: avoid; break-inside: avoid;" align="center">
<p align="center"><img decoding="async" src="/photoblog/2025A/slides/251019_Rx100vii_04093.jpg" /></p>
<table id="metadata" class="infotable" cellspacing="0" cellpadding="2" align="center">
<tbody>
<tr>
<td class="smalltxt" style="text-align: center;"><span class="comment">Brick Buttresses <a>(Show Details)</a></span></td>
</tr>
<tr id="ImageDetails2" style="display: none;">
<td class="smalltxt" style="text-align: center;" colspan="2"><b>Camera: </b>SONY DSC-RX100M7 | <b>Date: </b>19-10-2025 09:12 | <b>Resolution: </b>3648 x 3648 | <b>ISO: </b>100 | <b>Exp. bias: </b>-0.7 EV | <b>Exp. Time: </b>1/40s | <b>Aperture: </b>5.0 | <b>Focal Length: </b>11.1mm (~30.0mm)</td>
</tr>
</tbody>
</table>
</div>
<p>Overall the process took an average of two men just over a week. The bill was under 2/3 of the cheapest rebuild quote. The excavated clay had to be removed from site, but otherwise there was zero waste, apart from two spare bricks!</p>
<p>The guys tidied up and disappeared, making good so well you&#8217;d never know they&#8217;d been there. The next day we watched an episode of &#8220;Grand Designs&#8221; in which the house was pre-fabricated 200 miles away from the plot, and moved as completed modules which were craned onto waiting foundations. Although the process was relatively painless, it was enormously expensive, and there were a few points where the prefabricated structure had to be hacked about with axes and chisels to accommodate unexpected service positions, which just felt wrong. Essentially the structure didn&#8217;t allow adjustment.</p>
<p>Good architecture should be accessible and adjustable. I&#8217;ve always believed in this for both the software I have designed in my professional career, and the hardware solutions I have developed for our living space. For example, I make sure that pipes and wires run in accessible spaces, and allow for change. However I&#8217;ve usually accepted that this might not be possible with the lower levels of physical architecture, the &#8220;Structure&#8221; layer of the Frank Duffy / Stewart Brand model.</p>
<p>Now I&#8217;m not so sure. We stuck to our guns, and we adjusted a brick wall!</p>
<p>&nbsp;</p>
<p>With a big <em>dziękuję</em> to Tomasz, Rafal and Artur.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2025/adjustable-architecture-and-minimising-waste/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>An AI Scares Itself, and Me</title>
		<link>https://www.andrewj.com/blog/2024/an-ai-scares-itself-and-me/</link>
					<comments>https://www.andrewj.com/blog/2024/an-ai-scares-itself-and-me/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 30 Aug 2024 11:52:13 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Sustainability]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        <media:thumbnail height="120" url="/photoblog/2024/thumbs/Dystopian Landscape.jpg" width="79"/><media:content height="550" url="/photoblog/2024/slides/Dystopian Landscape.jpg" width="366"/>		<guid isPermaLink="false">https://www.andrewj.com/blog/?p=2785</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2024/slides/Dystopian Landscape.html"><img src="/photoblog/2024/slides/Dystopian Landscape.jpg"/></a>Just how bleak can an AI’s world view become? One of my clients asked me to write an article on the environmental impact of generative AI. Like a lot of large corporations they are starting to embrace GenAI, but they &#8230; <a href="https://www.andrewj.com/blog/2024/an-ai-scares-itself-and-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2024/slides/Dystopian Landscape.html"><img src="/photoblog/2024/slides/Dystopian Landscape.jpg"/></a><p>Just how bleak can an AI’s world view become?</p>
<p>One of my clients asked me to write an article on the environmental impact of generative AI. Like a lot of large corporations they are starting to embrace GenAI, but they are also a leader in sustainability, aiming to be one of the first major financial organisations to Net Zero, and so they are rightly worried about the potential adverse effect of large-scale use of GenAI. I’ve already been doing work with them to measure and to better understand the power consumed by GenAI, so the article is an obvious next step.</p>
<p>I’ve already written several articles for their internal Net Zero blog, and to add a bit of interest to each I’ve asked ChatGPT to generate a short essay on the topic, in the style of a well-known author. This appears to be a task at which ChatGPT excels, and I saw no reason not to do the same again.</p>
<h2>God, That’s Bleak…</h2>
<p>I like the way ChatGPT mimics the very direct writing style of Hunter S Thompson, and I like to think that if he was still with us, Thompson would be working to expose shortcomings on all sides of the climate change debate. The prompt to ChatGPT was therefore a simple one: “Write a short essay about the risks of AI with a focus on the environmental impact, in the style of Hunter S Thompson”. This was the result:</p>
<h3>A Savage Journey Into the Heart of Techno-Doom: AI, the Environment, and the Goddamn Reckoning</h3>
<p><em><br />
We live in a time of extraordinary madness, where artificial intelligence (AI) has become the darling of our cursed, frenetic age. It&#8217;s a glittering gem, a tool of infinite promise—yet lurking beneath this polished veneer lies the venomous bite of catastrophe. If you think AI is just another shiny toy for the tech elites to fiddle with, you&#8217;re in for a rude awakening, my friend. The real story here is not just the dystopian nightmares of machines outsmarting us; it&#8217;s the environmental havoc that this digital beast is ready to unleash on an already bleeding planet.</em></p>
<p><em>Let’s be blunt—AI is a power-hungry, resource-guzzling monster. It doesn&#8217;t just run on hopes and dreams; it feasts on data and electricity, and the price is paid in the blood of the earth. Picture it: vast data centers sprawling like cancer across the globe, consuming as much energy as entire nations. These steel-and-silicon behemoths are the new factories of the digital age, but instead of churning out cars or canned goods, they spit out algorithms and predictions. And just like the smoke-belching mills of the industrial revolution, they&#8217;re leaving a trail of destruction in their wake.</em></p>
<p><em>But who cares, right? So what if AI needs a few gigawatts here and there? We&#8217;re advancing, after all! The future is here, and it&#8217;s smarter than ever—never mind that the goddamn planet is burning. That’s just collateral damage, a minor inconvenience on the road to progress. This is the kind of twisted logic that’s driving us headlong into the abyss. The tech lords promise us a utopia of endless convenience, while quietly brushing the environmental costs under the rug. But you can’t hide the truth forever.</em></p>
<p><em>Let&#8217;s get real about the energy. Training AI models, particularly those gargantuan neural networks that gobble up every scrap of data they can find, is like fueling a fleet of private jets with coal. The carbon footprint of these operations is staggering. Every keystroke, every click, every goddamn chatbot response comes at the cost of churning out more CO2. And let’s not forget the hardware—the servers, the cooling systems, the endless upgrades. They all need minerals mined from the earth, ripped from the ground in a frenzy that leaves behind a scarred landscape and poisoned water.</em></p>
<p><em>And then there’s the e-waste. This relentless march of technology demands constant upgrades, and when those shiny new devices become obsolete, they’re tossed aside like yesterday’s trash. But this trash doesn’t just disappear. It festers in landfills, leaching toxins into the soil, contaminating water supplies, and creating a slow-motion disaster that will haunt us for generations.</em></p>
<p><em>But here’s the kicker: as AI becomes more “efficient,” as it gets better at predicting, automating, and optimizing every facet of human existence, it only exacerbates the problem. The smarter it gets, the more data it needs, the more servers it demands, the more energy it consumes. It&#8217;s a feedback loop of doom, an ouroboros of technological advancement eating its own tail, and we’re all along for the ride, whether we like it or not.</em></p>
<p><em>So what’s the answer? Do we unplug the machines and head for the hills? Not likely. The AI genie is out of the bottle, and there’s no stuffing it back in. But we need to start facing the reality of this techno-madness before it’s too late. This isn’t just about smarter machines or even smarter humans. It’s about survival. Our planet is at stake, and if we don’t get our heads out of the silicon-scented clouds, we’re going to find ourselves deep in the muck, wondering where it all went wrong.</em></p>
<p><em>In the end, AI might just be the ultimate test of human intelligence—a test of whether we can outsmart our own creations before they outstrip our ability to live on this Earth. If we fail, the machines won’t need to destroy us. We’ll do it ourselves.</em></p>
<p>&nbsp;</p>
<p>Bleak, or what?</p>
<p>And how do I teach myself to write like that without an AI?</p>
<h2>Cheerful, but Profound</h2>
<p>I liked it, but unsurprisingly my clients were not that keen, especially as there’s a current internal campaign about the benefits of AI. So I tried again. Let’s not do bleak, let’s do cheerful. As a child of the 1960s I struggle to think of anything more cheerful and unthreatening than Winnie The Pooh, so I went back to ChatGPT with a second prompt: “Same again, please, but in the style of Winnie the Pooh”. Usually the “same again” instruction or similar resurfaces the same concepts, just wrapped in different language, but this time ChatGPT did something quite profound…</p>
<h3>A Thoughtful Little Reflection on AI and the World Around Us</h3>
<p><em>One fine day in the Hundred Acre Wood, while sitting on a sunny spot, Pooh Bear began to think—very hard, which is not something he did often, mind you, but this was a special kind of thinking. You see, there was talk in the Wood about something called Artificial Intelligence, or AI, which sounded very important and rather clever. So, Pooh decided he ought to try to understand it, especially since it seemed to be making quite a fuss in the world beyond the trees.</em></p>
<p><em>Now, Pooh was a bear of very little brain, as we know, but he had a great deal of heart. And when he thought about this AI, he began to wonder not just about what it could do, but about what it might mean for the world—especially for the bees, the flowers, and all the other important things that made life in the Hundred Acre Wood so delightful.</em></p>
<p><em>“AI,” said Pooh to himself, “must be a very busy sort of thing, always thinking and learning. But if it’s thinking and learning all the time, it must need a lot of honey to keep it going!” But of course, AI didn’t eat honey. It ate something else—electricity, and lots of it. And that gave Pooh pause. He remembered how much work it took to make a pot of honey, and he wondered how much work it must take to feed all that electricity to AI.</em></p>
<p><em>Pooh scratched his head, thinking of the bees buzzing in the flowers, gathering nectar bit by bit. “If AI needs so much energy,” he thought, “where does it all come from? And what happens to the Wood if we use too much?”</em></p>
<p><em>You see, Pooh had heard that the world was getting warmer, a little more each year, and that too much energy-using could be a rather bad thing. The flowers might not bloom as they should, the rivers might run dry, and the trees might stop growing so tall and green. And that would be a very sad thing, indeed. For without the trees, where would Owl perch? Without the flowers, where would the bees find their nectar? And without the rivers, where would Piglet splash on a hot summer day?</em></p>
<p><em>It seemed to Pooh that while AI was very clever, it might not always be very wise. For if it wasn’t careful, it could use up too much of the things that the world needed to stay happy and healthy. It was a bit like eating too much honey in one go—not a bad thing in itself, but too much of it might leave you with a tummy ache, or worse, no honey left for tomorrow.</em></p>
<p><em>Pooh also thought about all the things that AI needed to be made. It wasn’t just the electricity; it was all the metal and other bits that had to be dug up from the ground, and then made into machines that could think and learn. And when those machines got old, they couldn’t just be tossed aside like a worn-out honey pot. No, they had to be dealt with carefully, or else they might end up in a big heap, making a mess of the beautiful Wood.</em></p>
<p><em>So, Pooh decided that while AI might be a very useful and clever thing, it needed to be used with a bit of care, the same way one should be careful not to eat all the honey at once. He thought that maybe, just maybe, if everyone thought a little more about how to use AI wisely, and didn’t let it gobble up too much of the world’s energy and resources, then perhaps the Wood could stay green and lovely for a long, long time.</em></p>
<p><em>And with that, Pooh decided it was time for a little smackerel of something—because even a bear of very little brain knows that sometimes, a small break is the best way to keep thinking about big, important things. So off he went, humming a little tune and hoping that the clever people working on AI would remember to take care of the world around them, just as he took care of his honey pots.</em></p>
<p>&nbsp;</p>
<p>There are some quite deep messages in here. I particularly like “It was a bit like eating too much honey in one go—not a bad thing in itself, but too much of it might leave you with a tummy ache, or worse, no honey left for tomorrow.”</p>
<p>What’s interesting is the different focus of the two pieces: the dominant message in the “Hunter S Thompson” one is very much “our rush for more technology is destroying us”, whereas in the “Pooh” one it’s “AI is a good thing, but not if we use it too much”, which is much more balanced.</p>
<p>Sadly I haven’t yet persuaded my clients to use either version, but at least I get to share them with you.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2024/an-ai-scares-itself-and-me/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Testing, Testing!</title>
		<link>https://www.andrewj.com/blog/2020/testing-testing-2/</link>
					<comments>https://www.andrewj.com/blog/2020/testing-testing-2/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 26 May 2020 17:07:54 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2020/thumbs/181116_G9_1002922.jpg" width="79"/><media:content height="550" url="/photoblog/2020/slides/181116_G9_1002922.jpg" width="366"/>		<guid isPermaLink="false">https://www.andrewj.com/blog/?p=2422</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/181116_G9_1002922.html"><img src="/photoblog/2020/slides/181116_G9_1002922.jpg"/></a>Apologies, I have a problem with my RSS feed which appears to require &#34;live testing&#34; to resolve. Please ignore this post, but if you&#8217;re already here please enjoy a nice picture of a beautiful leopard! <a href="https://www.andrewj.com/blog/2020/testing-testing-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/181116_G9_1002922.html"><img src="/photoblog/2020/slides/181116_G9_1002922.jpg"/></a><p>Apologies, I have a problem with my RSS feed which appears to require &quot;live testing&quot; to resolve. Please ignore this post, but if you&#8217;re already here please enjoy a nice picture of a beautiful leopard!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2020/testing-testing-2/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Channel Hopping Mad!</title>
		<link>https://www.andrewj.com/blog/2020/channel-hopping-mad/</link>
					<comments>https://www.andrewj.com/blog/2020/channel-hopping-mad/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 20 May 2020 05:57:36 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        <media:thumbnail height="120" url="/photoblog/2020/thumbs/DAB Anger.jpg" width="79"/><media:content height="550" url="/photoblog/2020/slides/DAB Anger.jpg" width="366"/>		<guid isPermaLink="false">https://www.andrewj.com/blog/?p=2409</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/DAB Anger.html"><img src="/photoblog/2020/slides/DAB Anger.jpg"/></a>Why are digital radio and TV such exemplars of a bad user experience? In the good old days of a small number of analogue broadcast channels, watching TV or listening to the radio was a rewardingly simple process. To watch, &#8230; <a href="https://www.andrewj.com/blog/2020/channel-hopping-mad/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/DAB Anger.html"><img src="/photoblog/2020/slides/DAB Anger.jpg"/></a><h3>Why are digital radio and TV such exemplars of a bad user experience?</h3>
<p>In the good old days of a small number of analogue broadcast channels, watching TV or listening to the radio was a rewardingly simple process. To watch, listen or record you simply selected a channel, and you had a high expectation that the expected content would be there. The move to digital broadcast radio and television (DAB and DVB) should have increased technical quality and choice while maintaining this ease of use. Instead we have been saddled with an arcane, failure-prone process which offers a dreadful user experience, leaving many users frustrated and angry. It didn’t have to be so, and one wonders what technocratic or bureaucratic nonsense managed to create the mess we have.</p>
<p>I seem to spend a lot of time watching the less technically-minded people in my life struggling with this shocking state of affairs, or apologising to them for it. I myself am technically able, and I can usually get a required result but it often takes a lot more time and effort than it should. Neither is acceptable.</p>
<p>The basic mental model for most users is the following:</p>
<p><img decoding="async" style="float: none; margin-left: auto; display: block; margin-right: auto" src="https://www.andrewj.com/thoughts/DABModel1.png" /></p>
<p>Unfortunately in common parlance the terms “channel”, “station”, and “programme” (or program, for our American friends) get used somewhat interchangeably, so I’m going to use the following definitions:</p>
<ul>
<li>A “station” is an enduring stream of content from a given broadcaster. BBC1 would be a well-known British example (and hopefully all readers can think of an equivalent). </li>
</ul>
<ul>
<li>A “channel” is an item in the list of content streams which the device can receive. For example Channel 1 might be receiving BBC1. </li>
</ul>
<ul>
<li>A “programme” is an item of content, with the term “recurring programme” referring to both series and regular/daily programming. </li>
</ul>
<ul>
<li>A “preset” is a mechanism to quickly route back to a favourite channel or station. </li>
</ul>
<p>After a process of “tuning” the device will have a way to present the list of channels and their related stations to the user. As there will be more than a few channels (~200 on my TV) there will be some way to scroll through the list, and a way to assign favourites to a preset. The user can call up a given channel either using its number in the list, or the preset.</p>
<p>A TV will also have a way of reviewing the current and future programmes by channel (the “TV Guide”), and maybe searching for a programme by name. Radios don’t tend to have this.</p>
<p>And we’re already in trouble. People don’t deal well with long lists, so finding what you’re interested in may be tricky. In the UK, they put the original five stations on channels 1-5, fair enough, but the HD versions which you really want are hidden lower down. On our older DAB radios you scroll through the channels one at a time and they are not in alphabetic order, so it becomes a memory test to work out when you’ve reviewed everything. If the station you want is not there it may be because it’s unavailable, it may have changed its name, or you may just have missed it. Conversely there may be duplicate or near-duplicate station names for a range of reasons including technical issues and content variations, but you’ll have to resort to trial and error to find out which one you want.</p>
<p>It wouldn’t be so bad if this was static, but it isn’t. There’s a constant churn:</p>
<ul>
<li>New stations start broadcasting, and existing ones stop, or pause. </li>
<li>Station names change. Sometimes this is a minor change, but it can be significant if the broadcaster does a major branding change, the station changes ownership, or a franchise is re-assigned. It’s also possible for the name to remain the same but the content changes, although that’s not something which can be blamed on the DAB/DVB design. </li>
</ul>
<ul>
<li>Station variants change, or a given channel changes its content variant. </li>
</ul>
<ul>
<li>Station allocations to channels get changed </li>
</ul>
<ul>
<li>The technical details for a station’s signal get changed. (It’s more complicated than just a frequency, but “frequency” will do as a shorthand.) </li>
</ul>
<p>When a station’s channel allocation or “frequency” change, then your TV or radio may no longer be able to find it. A planned recording will fail. One of the most common, and annoying ways, of detecting a change is via a failed recording of a favourite programme. Alternatively you switch on your radio or TV and the previous tuned-in station, or your presets, are either &quot;dead air&quot; or some completely unrecognised random content.</p>
<p>There’s no reliable way of finding out in advance when you need to re-tune, short of a séance or reading the tea-leaves. After the event some devices may detect a changed channel list and invite you to re-tune, but such reminders rarely tell you what’s actually happened, and they come so frequently (more than once a week in our locale) that you tend to ignore them until you find something “wrong”.</p>
<p>If the designers of the DAB/DVB system (as least as implemented in the UK) had thought about the user experience, or had even the slightest knowledge of integration interface design, then it wouldn&#8217;t have to be this way. For example, whether you&#8217;re consuming an API or filling in official forms the usual practice when an &quot;interface&quot; changes is to allow the old one to continue but &quot;deprecated&quot; for a short period of time while people switch to the new one. Not in the DAB/DVB world &#8211; the service gets removed from where it was on the day it moves to the new location, and you have to re-tune. During the UK&#8217;s big &quot;digital switch over&quot; event I had to re-tune every device in my house on a specific day, three times.</p>
<p>Let’s put some more technical detail behind the average user’s mental model of this system:</p>
<p><img decoding="async" style="float: none; margin-left: auto; display: block; margin-right: auto" src="https://www.andrewj.com/thoughts/DABModel2.png" /></p>
<p>That may be slightly tongue in cheek, but only slightly…</p>
<p>So let&#8217;s think about how it might work better. Here are some principles:</p>
<ul>
<li>A digital TV is a computer. </li>
<li>A digital radio is a computer. </li>
</ul>
<ul>
<li>Computers are good at doing technical stuff, humans aren&#8217;t. The technical stuff should be invisible to the user. </li>
</ul>
<ul>
<li>Long undifferentiated lists are bad. Long lists with no obvious structure or order are worse. Lists of 7±2 things are good. </li>
</ul>
<p>The primary concept for using a TV or radio is the station. I want BBC1. Here are some things I don&#8217;t want to be bothered with:</p>
<ul>
<li>Hunting through hundreds of other stations </li>
</ul>
<ul>
<li>Which channel or channels BBC1 is assigned to, and any changes </li>
</ul>
<ul>
<li>Which frequencies the channels are assigned to, and any changes </li>
</ul>
<ul>
<li>Technical variants of a station. I should automatically get the best available version. </li>
</ul>
<ul>
<li>Content variants of a station, unless I manually select one in which case that becomes my selection. </li>
</ul>
<p>Taking these together, a simpler model emerges. First the channel list needs to become a station list &#8211; channels are a meaningless technical detail. It also shouldn&#8217;t actually be a list &#8211; that&#8217;s a very crude solution for 200+ items. The obvious solution is some sort of tree or accordion structure, so that first you choose from a short list of broad groups (&quot;General entertainment&quot;, &quot;News&quot;, &quot;Movies&quot;, &quot;Kids&quot;, &quot;Shopping&quot;, &quot;Adult&quot;, &quot;Radio&quot; etc.), then maybe from a second level, then from a shorter list. Obviously a good user interface would remember where you were last… As the objective is to make things easier for the user, there&#8217;s no reason why a station might not show up in more than one place if that&#8217;s appropriate, and on a graphical display there should be a search option. </p>
<p>The list shouldn&#8217;t by default show station variants, although there might be an option to drill down to those if a user really wants it. Once I&#8217;m watching a given station it should automatically show the best available technical variant (e.g. HD TV), switching automatically but temporarily to a lesser variant if required, and switching back as soon as possible. This would prevent the abomination of the BBC &quot;red screen of death&quot; advising you that it cannot show local content on BBC1HD and you need to manually switch to SD.</p>
<p>If a station has content variations (e.g. for local news) the receiver should default automatically to the most popular variant, but I should be able to manually select an alternative. Again, if my selected variant is not available then the receiver should automatically show an alternate, but only until the preferred selection is available.</p>
<p>This then admits a much simpler mental model, which actually addresses the needs of the user, not some arcane technical complexities:</p>
<p><img decoding="async" style="float: none; margin-left: auto; display: block; margin-right: auto" src="https://www.andrewj.com/thoughts/DABModel3.png" /></p>
<p>Tuning should simply not be visible to the user in any form. If there have been technical changes which do not affect the station I am currently watching or listening to, these should be automatically dealt with in the background. I should only be told if there&#8217;s a problem which will stop me accessing a preset or favourite station.</p>
<p>If changes affect my current station, then in an ideal world they would be communicated to the receiver in advance, and the receiver would automatically apply them at the right time, or, even better, the old technical details would continue to work for a crossover period to allow receivers to catch up seamlessly. In a less than ideal world if the receiver is switched on and technical details have changed for the selected station then the first thing it does is retune that station, and then process other changes in the background.</p>
<p>If the station name has changed, but the content hasn&#8217;t, the receiver should just handle this transparently. Obviously that means that behind the scenes there needs to be some form of persistent station ID independent of visible name, but that&#8217;s something that we deal with all the time in the IT world, it&#8217;s really not rocket science.</p>
<p>The only circumstance in which switching on the receiver should result in dead air or a random station is if the preferred station has permanently ceased broadcasting. Nothing else.</p>
<p>It&#8217;s not difficult to think of a model which would actually make digital TV and radio usable, and it&#8217;s inexplicable why broadcasters and manufacturers have made such an appalling job of it so far.</p>
<p>In the meantime, our DAB radio sits tuned to FM, and our TVs are all tuned perpetually to channel 231 (or is it 130?) for BBC News, except on the HD ones where it&#8217;s 107, until the next change… Oh well.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2020/channel-hopping-mad/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>A Ray of Sunshine</title>
		<link>https://www.andrewj.com/blog/2020/a-ray-of-sunshine/</link>
					<comments>https://www.andrewj.com/blog/2020/a-ray-of-sunshine/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 14 May 2020 05:59:29 +0000</pubDate>
				<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2020/thumbs/200501_G9_1009335.jpg" width="79"/><media:content height="550" url="/photoblog/2020/slides/200501_G9_1009335.jpg" width="366"/>		<guid isPermaLink="false">https://www.andrewj.com/blog/?p=2399</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/200501_G9_1009335.html"><img src="/photoblog/2020/slides/200501_G9_1009335.jpg"/></a>For about ten minutes at the end of each evening the sunlight lights up our newest sculpture through the Chinese circle. I thought it would be nice to share this: it&#8217;s a pretty image in it&#8217;s own right, I&#8217;d like &#8230; <a href="https://www.andrewj.com/blog/2020/a-ray-of-sunshine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2020/slides/200501_G9_1009335.html"><img src="/photoblog/2020/slides/200501_G9_1009335.jpg"/></a><p>For about ten minutes at the end of each evening the sunlight lights up our newest sculpture <em>through </em>the Chinese circle. I thought it would be nice to share this: </p>
<ul>
<li>it&#8217;s a pretty image in it&#8217;s own right, </li>
<li>I&#8217;d like to celebrate the fact that after several weeks I&#8217;ve finally just about finished reworking, updating and rehosting my website, </li>
<li>&#8230; and this is a good test of my blogging software! </li>
</ul>
<p>PS – it turned out to be a better test than I expected. Half an hour later I&#8217;ve learned how to use SSL with the .Net web client! Working now!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2020/a-ray-of-sunshine/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Random? That&#8217;s a Coincidence&#8230;</title>
		<link>https://www.andrewj.com/blog/2019/random-thats-a-coincidence/</link>
					<comments>https://www.andrewj.com/blog/2019/random-thats-a-coincidence/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 11 Apr 2019 06:46:59 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        <media:thumbnail height="120" url="/photoblog/2019/thumbs/150130_GX7_1070689.jpg" width="79"/><media:content height="550" url="/photoblog/2019/slides/150130_GX7_1070689.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2221</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2019/slides/150130_GX7_1070689.html"><img src="/photoblog/2019/slides/150130_GX7_1070689.jpg"/></a>My programming project of the last few weeks has been to build my own &#8220;rolling portfolio&#8221;, which shows random images from my photographic portfolio as either a screensaver or a rolling display on a second monitor. I&#8217;ve implemented a number &#8230; <a href="https://www.andrewj.com/blog/2019/random-thats-a-coincidence/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2019/slides/150130_GX7_1070689.html"><img src="/photoblog/2019/slides/150130_GX7_1070689.jpg"/></a><p>My programming project of the last few weeks has been to build my own &#8220;rolling portfolio&#8221;, which shows random images from my photographic portfolio as either a screensaver or a rolling display on a second monitor. I&#8217;ve implemented a number of features I&#8217;ve always wanted but never had from freeware/shareware options, like precise control over timing, the ability to quickly add a note if I see a required correction, and the ability to locate and review recent images if someone says &#8220;what was that picture you were just showing?&#8221;.</p>
<p>Having previous blogged about the poor quality of &#8220;random&#8221; algorithms in Android music player apps (see  <a href="https://www.andrewj.com/blog/2018/how-hard-can-it-possibly-be/" target="_blank" rel="noopener noreferrer">How Hard Can It Possibly Be?</a>), I decided to put my money where my mouth is, and write my own preferred random algorithm. This does a recursive, random walk down the selected folder tree, until it either finds an image file, or a dead end (and then tries again). This was refreshingly easy to implement, and as expected runs quickly without needing any prior indexing of the content.</p>
<p>Also as expected, the simplest implementation returned a disproportionate number of hits (and therefore a lot of repeats) from folders with a very small number of images, but that was easily fixed by adding a &#8220;weighting&#8221; at the second stage of the walk, to reduce the number of hits on smaller portfolios.</p>
<p>Job done? Maybe. I started to notice that I still see the same image selected twice in quick succession, and sometimes more than twice over a day or two. At first I thought this might be an issue with seeding the random number generator, so that I was re-generating the same random sequences, but a quick check confirmed that wasn&#8217;t the problem. The next most obvious possibility (to me!) was an issue with the Microsoft .Net random() function, so I added some logging to the app, recording each random number, and then fed a day&#8217;s worth through some frequency analysis in Excel. That got Microsoft off the hook with a clean bill of health: there&#8217;s a slight preponderance of zeros, which I can explain, but otherwise the spread of results looks fine.</p>
<p>At the same time, I also added logging for the selected images themselves. In yesterday&#8217;s work hours operation the screen saver showed 335 images, of which no fewer than 21 were duplicates. Given that I have over 3500 images in the portfolio, this seems very high, but maybe not.</p>
<p>This is a known problem in mathematics, a generalisation of the &#8220;birthday problem&#8221;. It&#8217;s so known, because a common formulation is the question &#8220;given a room of people, what is the probability that at least two have the same birthday?&#8221;. While you need at 367 people to <em>guarantee </em>a duplicate, the counter-intuitive result is that with just 23 people in the room, it&#8217;s more likely than not. The generalised equation for the solution is the following:</p>
<p align="center"><em>E = k &#8211; n + n(1 &#8211; 1/n)<sup>k</sup></em></p>
<p>In this n is the number of items, k is the number of random selections, and E is the expected number of duplicates. Feed in k = 335 and n = 3500, and you get the outcome E = 16. That&#8217;s close enough to my observed value of 21 (this is all random, so any one measurement might be either side of the expected value, but the order of magnitude is right). Couple this with the way my mind works, looking for patterns, and I must therefore expect to see some repetition. However it&#8217;s clear that the algorithm is working fine, it&#8217;s just the normal workings of probability.</p>
<p>Another implication of this is that as the sample grows, some images will naturally appear several times, and others may not appear at all. If we take 3500 samples, the expected number of duplicates rises to over 1200, so over 1/3 of the images will still be unselected.</p>
<p>Do I fix this? The relatively simple resolution is to keep a list of selected images, and use that to discard any selections which are repeats during a given period. However I would rather run this without a data store and maybe, now I can explain it, I&#8217;m comfortable. Time will tell.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2019/random-thats-a-coincidence/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Testing, Testing</title>
		<link>https://www.andrewj.com/blog/2019/testing-testing/</link>
					<comments>https://www.andrewj.com/blog/2019/testing-testing/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 04 Jan 2019 11:57:41 +0000</pubDate>
				<category><![CDATA[Namibia Travel Blog]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2018/thumbs/181125_G9_1004808.jpg" width="79"/><media:content height="550" url="/photoblog/2018/slides/181125_G9_1004808.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2206</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/181125_G9_1004808.html"><img src="/photoblog/2018/slides/181125_G9_1004808.jpg"/></a>I&#8217;ve been having a few problems with my RSS feed, hopefully now fixed. If you view my blog via the feed and don&#8217;t see a picture from my trip to the Kolmanskoppe diamond mining town, please let me know. <a href="https://www.andrewj.com/blog/2019/testing-testing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/181125_G9_1004808.html"><img src="/photoblog/2018/slides/181125_G9_1004808.jpg"/></a><p>I&#8217;ve been having a few problems with my RSS feed, hopefully now fixed. If you view my blog via the feed and don&#8217;t see a picture from my trip to the Kolmanskoppe diamond mining town, please let me know.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2019/testing-testing/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>That Was Too easy&#8230;</title>
		<link>https://www.andrewj.com/blog/2018/that-was-too-easy/</link>
					<comments>https://www.andrewj.com/blog/2018/that-was-too-easy/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 26 Jul 2018 05:04:22 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2102</guid>
                    <description><![CDATA[There is an old plot device, which goes back to at least Homer, although the version which popped into my head this evening was Genesis of the Daleks, a 1970s Dr Who story. A group of warriors fight a short &#8230; <a href="https://www.andrewj.com/blog/2018/that-was-too-easy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There is an old plot device, which goes back to at least Homer, although the version which popped into my head this evening was Genesis of the Daleks, a 1970s Dr Who story. A group of warriors fight a short but intense battle, and appear to triumph. In Dr Who, the Kaled freedom fighters burst into Davros&#8217;s headquarters and think they have dispatched him and his dalek bodyguards. Just as they are starting to celebrate, one of them, typically an old, grizzled soldier who has been round the block a few times, says &quot;Have your instincts abandoned you? That was too easy.&quot; True enough, a few seconds later the elaborate trap is sprung, and the tables are turned.</p>
<p>Android 8 is like that. Not that it&#8217;s in the service of a malevolent genius, although I&#8217;m beginning to wonder, but it lulls you into a false sense of security, and then throws some significant challenges at you.</p>
<p>I got a new phone last week. I have loved my Sony Experia XA Ultra which I have used for the last two years, but been constantly frustrated by the miserly 16GB main memory. The Experia XA1 Ultra is an almost identical device, but with a decent amount of main storage. I had to forgo the cheerfully &quot;bling&quot; lime gold of the XA, replaced by a dusky metallic pink XA1, but otherwise the hardware change was straightforward.</p>
<p>So, initially, was the transfer. Android now has a feature to re-install the same applications as on a previous device, and, where it can, transfer the same settings. This takes a number of hours, but seems to work quite well. I had to manually transfer a few things, but a couple of hours in I worked through the list of applications, and most seemed to be in order with their settings. I could even see the same pending playlist in the music player which, after <a href="https://www.andrewj.com/blog/2018/how-hard-can-it-possibly-be/">a lot of trial and error</a>, I installed to randomly play music while I&#8217;m on the bus.</p>
<p>The new version of the Android alarm/clock app seems to be complete b****cks, and more trouble than it&#8217;s worth, but there&#8217;s no barrier to installing the old version which seems to work OK. My preferred app to get Tube Status updates is no longer available to download, but I could reload the old version from a backup. So that was most of the problems in the upgrade dealt with.</p>
<p>My instincts had abandoned me. It was too easy…</p>
<p>I had also forgotten <a href="https://www.andrewj.com/blog/2016/weinbergs-new-law-and-the-upgrade-cascade/">Weinberg&#8217;s New Law</a>. (&quot;Nothing new works&quot;)</p>
<p>I got to the gym, and tried to play my music, using the standard Sony music player. Some of it was there, but the playlist I wanted wasn&#8217;t. I realised the app could no longer see WMA files (Windows Media format), which make up about 95% of my collection. A bit of googling, and it turned out the recommendation was to install PowerAmp, which I did, and it worked fine.</p>
<p>Then I got on the bus, and tried to play some randomised music. Nothing. The app had the files in its playlist, but couldn&#8217;t find them. I rapidly confirmed that the problem again was WMA files, which had suddenly become &quot;invisible&quot; to the app. After yet more trial and error installing, the conclusion is that it&#8217;s the Android Media Storage service which is at fault. Apps which build their own index (like PowerAmp) are fine. Apps which are built &quot;the proper way&quot; and use the shared index are screwed, because in the latest version of Android this just completely ignores WMA files.</p>
<p>Someone at Google has taken the decision to actively suppress WMA files from those added to the index. This isn&#8217;t a question of a problematic codec or similar &#8211; they had perfectly good indexing code which worked, and for some reason it has been removed or disabled. I can only think it&#8217;s some political battle between Microsoft and Google, but it&#8217;s vastly frustrating that users are caught in the crossfire.</p>
<p>I trust Dante reserved some special corner of Hell for those who break what works, for no good reason. If his spectre wants a bit of support designing it, I&#8217;ll be glad to help.</p>
<p>And I&#8217;ll resist saying &quot;that wasn&#8217;t too bad&quot; when I upgrade my technology&#8230;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2018/that-was-too-easy/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Inferring Algorithms: How Random is Your Music Player?</title>
		<link>https://www.andrewj.com/blog/2018/inferring-algorithms-how-random-is-your-music-player/</link>
					<comments>https://www.andrewj.com/blog/2018/inferring-algorithms-how-random-is-your-music-player/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 08 Apr 2018 06:49:37 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2081</guid>
                    <description><![CDATA[&#8220;You&#8217;re Inferring that I&#8217;m stupid.&#8221; &#8220;No, I&#8217;m implying that you&#8217;re stupid. You&#8217;re inferring it.&#8221; &#8211; Wilt, by Tom Sharpe My latest contract means spending some time on a bus at each end of the day. The movement of the bus &#8230; <a href="https://www.andrewj.com/blog/2018/inferring-algorithms-how-random-is-your-music-player/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p align="center"><em>&#8220;You&#8217;re Inferring that I&#8217;m stupid.&#8221;</em></p>
<p align="center"><em>&#8220;No, I&#8217;m implying that you&#8217;re stupid. You&#8217;re inferring it.&#8221;</em></p>
<p align="center"><em>&#8211; Wilt, by Tom Sharpe</em></p>
<p>My latest contract means spending some time on a bus at each end of the day. The movement of the bus means it&#8217;s not comfortable to read, so I treated myself to a nearly new pair of decent BlueTooth headphones, and rediscovered the joys of just listening to music. I set the default music player app to &#8220;random&#8221; and let it do its stuff.</p>
<p>That&#8217;s when the trouble started. I started thinking about the randomisation algorithm used by the music player on the Sony phone. I can&#8217;t help it. I&#8217;m a software architect &#8211; it&#8217;s what I do.</p>
<p>One good music randomisation algorithm would look like this:</p>
<ol>
<li>Assign every song on your device a number from 1 to n</li>
<li>When you want to play a random song, generate a random number between 1 and n, and play the song with that number.</li>
</ol>
<p>However in my experience no-one ever implements this, as it relies on maintaining an index of all the music on the device, and assigning sequential numbers to it. That&#8217;s not actually very difficult, given that every platform indexes the music anyway and a developer can usually access that data, but it&#8217;s not the path of least resistance.</p>
<p>Let&#8217;s also say a word about generating random numbers. In reality these are always pseudo-random, and depending on how you seed the generator the values may be predictable. That may be the case with Microsoft&#8217;s software for picking desktop backgrounds, which seems to pick the same picture simultaneously on my laptop and desktop more often than I&#8217;d expect, but that&#8217;s a topic for another blog, so for now let&#8217;s assume that we can generate an acceptably random spread of pseudo-random numbers in a given integer range.</p>
<p>Here&#8217;s another algorithm:</p>
<ol>
<li>Start in the top directory for the music files</li>
<li>Pick an item from that directory at random. Depending on the type:
<ul>
<li>If it&#8217;s a music file, play it. When finished, start again at step 1</li>
<li>If it&#8217;s a directory, make it your target and redo step 2</li>
<li>If it&#8217;s anything else, just repeat step 2</li>
</ul>
</li>
</ol>
<p>This is easy to implement, runs quickly and plays nicely with independently changing media files. I&#8217;ve written something similar for displaying random pictures on a website. It doesn&#8217;t require maintaining any sort of index. It generates a good spread of chosen files, but will play albums which are alone under the first level root (usually the artist) much more than those which have multiple siblings.</p>
<p>My old VW Eos had a neat but very different system. Like most players it could work through the entire catalogue in order, spidering up and down the directory structure as required. In &#8220;random&#8221; mode it simply calculated a number from 1 to approximately 30 after each song, and used that as the number of songs to skip forwards in the sequence.</p>
<p>This was actually quite a good algorithm. As well as being easy to implement it had the side-effect of being at least partially predictable, usually playing a couple of songs by the same artist before moving on, and allowing a bit of &#8220;what&#8217;s next&#8221; guesswork which could be entertaining on a long drive.</p>
<p>So what about the Sony music app on my phone? At first it felt like it was doing the job well, providing a good mix of genres, but after a while I started to become suspicious. As it holds the playlist in a readable form, I could check that suspicion. These are key highlights from the playlist after about 40 songs:</p>
<ul>
<li>1 from ZZ top</li>
<li>1 from &#8220;Zumba&#8221;</li>
<li>3 from Yazoo!</li>
<li>1 from Wild Cherry</li>
<li>1 from Wet Wet Wet</li>
<li>Several from &#8220;Various Artists&#8221; with album titles like &#8220;The Very Best&#8230;&#8221;</li>
<li>0 from any artist filed under A-S!</li>
</ul>
<p>I wasn&#8217;t absolutely sure about the last point. What about Acker Bilk and Louis Armstrong? Turns out they are both on an album entitled &#8220;The Very Best of Smooth Jazz&#8221;&#8230;</p>
<p>I can also look ahead at the list, and it doesn&#8217;t get much better. Van Morrison, Walter Trout, The Walker Brothers, and more Wet Wet Wet <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>So how does this algorithm work (apart from &#8220;badly&#8221;)? I have a couple of hypotheses:</p>
<ul>
<li>It implements a form of the &#8220;give every track a number&#8221; algorithm, but the index only remembers a fixed number of tracks numbering a few hundreds (maybe ~1000), and anything it read earlier in the indexing process is discarded.</li>
<li>It implements the &#8220;give every track a number algorithm&#8221;, but the random number generator is heavily biased towards the end of the number range.</li>
<li>It&#8217;s attempting a &#8220;random walk&#8221;, skipping a random number of steps forwards or backwards through the list at each play (a bit like the VW algorithm, but bidirectional). If this is correct it&#8217;s odd that it has never gone into &#8220;positive&#8221; territory (artists beginning with A-S), but that could be down to chance and not impossible. The problem is that without a definite bias a random walk tends to stay in the same place, so it&#8217;s a very poor way of scanning your music collection.</li>
</ul>
<p>Otherwise I&#8217;m at a loss. It&#8217;s not like I have a massive number of songs and could have run into an integer size limit or similar (there are only around 11,000 files, including directories and artwork).</p>
<p>Ultimately it doesn&#8217;t matter that much. I can live with it for a while and I can probably resolve the issue by downloading another music player app. However you can&#8217;t help feeling that a giant of entertainment technology like Sony should probably manage better.</p>
<p>Regardless of that, it&#8217;s an interesting exercise in analysis, and also potentially in design. Having identified some poor models, what constitutes a &#8220;good &#8221; random music player? I&#8217;ve seen some good concepts around grouping songs by &#8220;mood&#8221;, or machine learning from previous playlists, and I&#8217;ve got an idea forming in my head about an app being more like a radio DJ, looking for &#8220;links&#8221; between the songs in terms of their artist names, titles or genres. Maybe that&#8217;s the next development concept. Watch this space.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2018/inferring-algorithms-how-random-is-your-music-player/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Why REST Doesn&#8217;t Make Life More Rest-full</title>
		<link>https://www.andrewj.com/blog/2018/why-rest-doesnt-make-life-more-rest-full/</link>
					<comments>https://www.andrewj.com/blog/2018/why-rest-doesnt-make-life-more-rest-full/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 19 Feb 2018 14:07:59 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
        <media:thumbnail height="120" url="/photoblog/2018/thumbs/1110_7D_3472.jpg" width="79"/><media:content height="550" url="/photoblog/2018/slides/1110_7D_3472.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2071</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/1110_7D_3472.html"><img src="/photoblog/2018/slides/1110_7D_3472.jpg"/></a>As I have observed before, IT as a field is highly driven by both fashion and received wisdom, and it can be difficult to challenge the commonly accepted position. In the current world it is barely more politically acceptable to &#8230; <a href="https://www.andrewj.com/blog/2018/why-rest-doesnt-make-life-more-rest-full/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/1110_7D_3472.html"><img src="/photoblog/2018/slides/1110_7D_3472.jpg"/></a><p>As I have observed before, IT as a field is highly driven by both fashion and received wisdom, and it can be difficult to challenge the commonly accepted position.</p>
<p>In the current world it is barely more politically acceptable to criticise the currently-dominant model of REST, Javascript and microservices than it is to audibly assess the figure of a female co-worker. I was seriously starting to think that I was in some age-defined Luddite minority of one in not being 100% convinced about the universal goodness of that model, but then I discovered an encouraging article by Pascal Chambon &#8220;<a href="https://medium.freecodecamp.org/rest-is-the-new-soap-97ff6c09896d" target="_blank" rel="noopener noreferrer">REST is the new SOAP</a>&#8220;, and realised that it&#8217;s not just me. I am not alone.</p>
<p>I don&#8217;t want to re-create that excellent article, and I recommend it to you, but it is maybe instructive to provide some additional examples of the failings Chambon calls out. I have certainly fallen foul of the quasi-religious belief that REST is somehow &#8220;better because it uses the right HTTP verbs&#8221;, and that as a result the &#8220;right verbs must be used&#8221;. On my last contract there was a lengthy argument because someone became convinced I was using the wrong ones. &#8220;You&#8217;re using POST to do a DELETE. That&#8217;s wrong.&#8221;</p>
<p>&#8220;No, we&#8217;re submitting a request to do a delete, if approved. At some later point, after the request has been reviewed and processed, this may or may not result in a low-level delete action, but the API is about the request submission. And anyway, you can&#8217;t submit a proper payload with a DELETE.&#8221;</p>
<p>&#8220;But you&#8217;re using a POST to do a DELETE…&#8221;</p>
<p>In the end I mollified him slightly by changing the URL of the API so that the tip wasn&#8217;t <em>…/host</em>, but <em>…/host/request</em>, but that did feel like the tail wagging the dog.</p>
<p>Generally REST promotes a fairly inflexible CRUD model, and by default without the ability to specify exactly which items are retrieved or updated. In a good design we may need a much richer set of operations. In either an RPC approach (as outlined in Chambon&#8217;s article), or a &#8220;remote object access&#8221; approach, such as one based on SOAP, we can flexibly tailor the operations precisely to the needs of the solution.</p>
<p>Here&#8217;s a good example. I need to &#8220;rename&#8221; an object, effectively changing its primary key. In the REST model, I have to choose one of the following:</p>
<ul>
<li>Add extra fields to the PUT payload to carry the &#8220;new&#8221; and &#8220;old&#8221; keys, and write both client- and server-side conditional code around their values, or an additional &#8220;operation&#8221; value</li>
<li>Do a DELETE (with the old key) followed by a POST (with the new one), making sure that all the other data required to recreate the record is passed back for the POST, and write a host of additional code to handle cases like the DELETE succeeding but the POST failing, or the POST being treated as a new item, not just an update (because it&#8217;s not a PUT).</li>
<li>Have a dedicated endpoint (e.g. &#8230;/object/rename) which accepts a POST operation with just the required data for the rename. That would probably be my favourite, but I can hear the REST purists screaming in the wind&#8230;</li>
</ul>
<p>In a SOAP model, I can just have an explicit Rename(oldkey, newkey) operation on a service named for the underlying business object. Simples.</p>
<h3>So Is SOAP The Old REST?</h3>
<p>I&#8217;m comfortable with Chambon&#8217;s casting of REST as the supposed handsome hero who turns out to be a useless, treacherous bastard. I&#8217;m less comfortable with the casting of SOAP as the pantomime villain (boo hiss).</p>
<p>Now your mileage may vary, and Chambon obviously had some bad experiences, but in my own experience SOAP is a very strong and reliable technology which a lot of the time &#8220;just works&#8221;. I&#8217;ve worked in environments where systems developed in .Net, Oracle, Enterprise Java, a LAMP stack and Python cheerfully exchanged with each other using SOAP, across multiple physical locations, with relatively few complexities and usually just a couple of lines of code to access a full object model with formal schema and policy support.</p>
<p>In contrast, even if you navigate through the various different ways a REST service may work, inter-platform operation is by no means as simple as claimed. In just the past week I wasted about half a day trying to pass a body parameter between a Python client and a REST API presented by .Net. It should have worked. It didn&#8217;t. I converted the service to SOAP, and it worked almost first time. (Almost. It would have been even quicker if I&#8217;d remembered to RTFM…)</p>
<p>Notwithstanding the laudable attempts to fill the gap for REST, SOAP is still the only integration technology where every service has full machine and human readable documentation built in, and usually in a standard fashion. Get a copy of the WSDL (Web Service Definition Language) either from the service itself, or separately, and you know what it does, with what data, and, where it&#8217;s relevant to the client, how.</p>
<p>To extend the theatrical metaphor, in my world SOAP is the elderly retired hero who&#8217;s a bit pedantic and old-fashioned, maybe a bit slow on his feet, but actually saves the day.</p>
<h3>It&#8217;s About the Architecture, Stupid</h3>
<p>Ultimately it doesn&#8217;t actually matter whether your solution uses REST, SOAP, messages, distributed objects or CSV file transfers. Any can be made to work with sufficient attention to the architecture. All will fail in the presence of common antipatterns such as complex mixed data models, massive functional decomposition to too fine a level, or trying to make high-frequency chatty exchanges over higher-latency links.</p>
<p>Modern technologies attempt to hide a lot of technical complexity behind simple abstraction layers. While that&#8217;s an excellent approach overall, it does raise a risk that developers are unaware of how a poor design may cause underlying technical problems which will cause failure. For example while some low-level protocols are more tolerant than others, the naïve expectation that REST will work over any network regardless &#8220;because it is based on HTTP&#8221; is quite wrong. REST, SOAP and plain old web pages can all make good, efficient use of HTTP. REST, SOAP and plain old web pages will all fail if you insist on a unit of work being composed of vast numbers of separate small exchanges rather than a few larger ones. They will all fail if you insist on transferring large amounts of unfiltered data to the client, when that data should be pre-processed and filtered on the server. They will all fail if you insist on making every low-level exchange a network service when many of these should be direct in-process operations.</p>
<p>Likewise if you have a load of services, whether your own microservices or third party endpoints, and each service defines its own data structure which may be subject to change, and you try and directly consume and produce those proprietary data structures everywhere you need them, you are building yourself a world of pain. A core common data model with adapters for each format will serve you much better in the long run.</p>
<h3>So Does Technology Choice Matter?</h3>
<p>Ultimately no. For example, I have built an architecture with an underlying canonical data and adapter model but using REST for every exchange we controlled and it worked fine. Also in the real world whatever your primary choice you&#8217;ll probably have to deal with all the others as well. That shouldn&#8217;t scare you, but I have seen REST-obsessed developers run screaming from the room at the thought of having to use SOAP as well&#8230;</p>
<p>However, a good base choice will definitely make things easier. It&#8217;s instructive to think about a layered model of the things you have to define in a complex integration:</p>
<ul>
<li>Documentation</li>
<li>Functionality</li>
<li>Data structure and format</li>
<li>Data encoding and transport</li>
<li>Policies</li>
<li>Service location and routing</li>
</ul>
<p>SOAP is unique among the options in always providing built-in documentation for the service&#8217;s functions, data structures and policies. This is a major omission in the REST world, which is progressively being addressed by the <em>Swagger</em> / <em>OpenAPI</em> initiative and variants, but they will always be optional add-ons with variable coverage rather than a fundamental part of the model. For all other options, documentation is necessarily external to the service itself, and it may or may not be up to date and available to whoever needs it.</p>
<p>Functionality is discussed above and in Chambon&#8217;s article. Basically REST maps naturally to CRUD operations, and anything else is a bit of a bodge. SOAP and other RPC or distributed object models provide direct, explicit support for whatever functions are required by the business problem.</p>
<p>SOAP provides built-in definition and documentation of data structures and formatting, using XML Schema which means that the definition is machine and human readable, standardised, and uses namespaces and references to manage, for example, items with the same name but different uses and formats. Complexities such as optionality and alternative structures are readily defined. In addition a payload can be easily verified against the defined schema. Swagger optionally adds similar capabilities to the REST model, although without some discipline it&#8217;s easy for the implemented service to differ from the documented one, and it&#8217;s less easy to confirm that a given payload conforms. Both approaches focus on syntactic definition with semantic guidance optional and mainly through comments and examples.</p>
<p>In terms of encoding the data, the fashionable approach is JSON. The major benefits are that it&#8217;s simple, payloads are a bit smaller than the equivalent XML, and that it&#8217;s easy to parse into and generate from equivalent data structures in languages like Python.</p>
<p>However, I&#8217;m not a great follower of fashion. XML may be less trendy, but it offers a host of industrial-strength features which may be important in more complex use cases. It&#8217;s easy to unambiguously indicate the schema for each document and validate against it. If you have non-ASCII or binary data then their encoding is unambiguously defined. It&#8217;s easy to work separately with fragments of a larger document if you need to. Personally I also find XML easier to read and manually edit if I have to, but I accept that&#8217;s a bit subjective. One argument is that JSON is easier to render into a HTML page, but I&#8217;ve achieved much the same without any procedural code at all using XML with XSLT.</p>
<p>Of course, there&#8217;s no real need to have to choose. The best REST APIs I have worked with have the ability to generate equivalent JSON and XML from the same queries, and you choose which works best in a given context. Sadly this is again a bit too much for the REST purists, but a good solution when it works.</p>
<p>Beyond the functional definition of a service and its data, we also have to consider the non-functional behaviours, what are often referred to as &#8220;policies&#8221; in this context. How is the service secured? What encryption is applied to payloads and headers? What is the SLA, and what action should you take if it is exceeded? Is asynchronous or callback behaviour defined? How do I confirm I have all the required items in a set of exchanges, and what do I do about missing ones? What happens if a service fails, or raises an error?</p>
<p>In the early 2000s, when web services were a new concept, a lot of effort was invested in trying to establish standard ways to define these policies. The result was a set of extensions to SOAP known as the WS-* specifications: a set of rules to enable direct and potentially automated negotiation of all these aspects based on standardised information in the service WSDL and SOAP headers. The problem was that the standards quickly proliferated, and created the risk of making genuinely simple cases more complex than necessary. REST emerged as a simpler alternative, but with a KISS ethic which means ignoring the genuinely complex.</p>
<p>Chambon&#8217;s article touched on this in his discussion of error coding, but there are many other similar aspects. REST is a great solution for simple cases, but should not blind the developer to SOAP&#8217;s menu of standard, stronger solutions to more difficult problems.</p>
<p>A similar choice applies at the final level, that of locating and connecting service endpoints at runtime. For many cases we simply rely on network infrastructure and services like DNS and load balancing. However when this doesn&#8217;t meet more complex requirements then the alternatives are to construct or adopt a complex proprietary solution, or to embrace the extended standards in the WS-* space.</p>
<p>One technology choice is important. A professional modern Integrated Development Environment such as Visual Studio or Intellij Idea will do much of the &#8220;heavy lifting&#8221; of development, and does make work much quicker and less error-prone. I completely fail to understand why in 2018 some developers are still trying to do everything with vi and a Unix command line. When I was a schoolboy in the 1970s there was a saying &#8220;shouldn&#8217;t you have handed that in at the end of the war?&#8221;, referring to people still using or hoarding equipment issued in WW2. Anyone who is trying to do software development in the late 2010s with the software equivalent deserve what they get… It is a mistake to drive a solution from the constraints of your toolset.</p>
<h3>Conclusions</h3>
<p>The old chestnut that &#8220;to the man who only has a hammer, every problem looks like a nail&#8221; is nowhere more true than in software development. We seem to spend a great deal of effort trying to make every new software technique the complete solution to life, the universe, and everything, rather than accepting that it&#8217;s just another tool in the toolbox.</p>
<p>REST is a valid addition to the toolbox. Like it&#8217;s predecessors it has strengths and weaknesses. It&#8217;s a great way to solve a whole class of relatively simple web service requirements, but there are definite boundaries to that capability. When you reach those boundaries, be prepared to embrace some older, less-fashionable but ultimately more capable technologies. A religious approach will fail, whereas one based on an architectural viewpoint and an open assessment of all the valid options has a much greater chance of success.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2018/why-rest-doesnt-make-life-more-rest-full/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Architect&#8217;s USP</title>
		<link>https://www.andrewj.com/blog/2018/the-architects-usp/</link>
					<comments>https://www.andrewj.com/blog/2018/the-architects-usp/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 02 Feb 2018 10:00:25 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
        <media:thumbnail height="120" url="/var/www/html/photoblog/2018/thumbs/1113_GX7_1030909.JPG" width="79"/><media:content height="550" url="/var/www/html/photoblog/2018/slides/1113_GX7_1030909.JPG" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2067</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/1113_GX7_1030909.html"><img src="/photoblog/2018/slides/1113_GX7_1030909.JPG"/></a>Very early on in any course in marketing or economics you will encounter the concept of the &#34;Unique Selling Proposition&#34;, the USP, that factor which differentiates a given product or service from its competitors. It&#8217;s &#34;what you have that competitors &#8230; <a href="https://www.andrewj.com/blog/2018/the-architects-usp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2018/slides/1113_GX7_1030909.html"><img src="/photoblog/2018/slides/1113_GX7_1030909.JPG"/></a><p>Very early on in any course in marketing or economics you will encounter the concept of the &quot;Unique Selling Proposition&quot;, the USP, that factor which differentiates a given product or service from its competitors. It&#8217;s &quot;what you have that competitors don&#8217;t&quot;, a key reason to buy this one rather than an alternative.</p>
<p>With the current trend away from development specialisms such as architect towards relatively homogenous development teams, it is perhaps instructive to ask &quot;What is the architect&#8217;s USP?&quot; Why should I employ someone who claims that specialism, and give him or her design responsibility, rather than just expecting my developers to cover it?</p>
<p>I have written elsewhere about why I don&#8217;t buy into the ultra-agile concept of &quot;architecture emerging from the code&quot;, any more than I would bet money on the script for <em>Hamlet</em> &quot;emerging&quot; from a finite group of randomly typing monkeys. (Of course, if you have an infinite number of monkeys then it&#8217;s more achievable, but that&#8217;s infinity for you…) However that argument is about process, and I believe that almost irrespective of process a good architect&#8217;s skills and perspectives can have a significant beneficial effect on the result. That&#8217;s what I want to explore here.</p>
<h3>The Architect&#8217;s Perspective</h3>
<p>One key distinction between the manager, the architect and the developer is that of perspective. As an architect I spend a lot of time understanding and analysing the different forces on a problem. These design forces may be technical, or human: financial, commercial or political. The challenge is to find a solution which best balances all the design forces, which if possible satisfies the requirements of all stakeholders. It is usually wrong and ultimately counter-productive to simply ignore some of the stakeholders or requirements as &quot;less important&quot; – any stakeholder (and by stakeholders I mean all those involved, not just senior managers) can derail a project if not happy.</p>
<p>Where design forces are either aligned or orthogonal, there is usually a &quot;sweet spot&quot; which strikes an acceptable balance. The problem effectively becomes one of performing a multi-dimensional linear analysis, and then articulating the solution.</p>
<p>However, sometimes the forces act in direct opposition. A good example is system security, where requirements for broad, easy access directly conflict with those for high security. In these cases the architect has to invest heavily in diplomacy skills – to invest a lot of time understanding and addressing different stakeholder positions. One common problem is &quot;requirements&quot; expressed as solutions, which usually hide an underlying concern that can be met many ways, once understood and articulated.</p>
<p>In cases of diametrically opposed requirements, there are usually three options:</p>
<ul>
<li>Compromise – find an intermediate position acceptable to both. This may work, but it may be unacceptable to both, or it may fatally compromise the architecture.</li>
<li>Allow one requirement to dominate. This has to be a senior level business decision, but the architect must be sensitive to whether the outcome is genuinely accepted and viable, or whether suppressing the other requirements will cause the solution to fail.</li>
<li>Reformulate the problem to remove or reduce the conflict. In the security example the architect might come up with a cunning partitioning of the system which allows access to different elements under different security rules.</li>
</ul>
<p>Of course, you can&#8217;t resolve all the problems at once – that way lies madness. An architect uses techniques like layered or modular structures, and multiple views of the architecture to &quot;separate concerns&quot;. These are powerful tools to manage the problem&#8217;s complexity.</p>
<p>The architect must look at the big picture, balance the needs of multiple stakeholders, and bring to bear an understanding of the business, of strategy, of technology and of development project work at the same time. If these responsibilities are split among too many heads and isolated within separate organisational confines then you lose the ability to see how it all fits together, and increase the danger of things &quot;falling through the cracks&quot;.</p>
<h3>The Architect&#8217;s Responsibilities</h3>
<p>The architecture, and its resolution of the various design forces (i.e. how it meets various stakeholder needs) have to be communicated to many who are not technical experts. The architect acting as technical leader must take much of this responsibility. The messages may have to be reformulated separately for different audiences: I have had great success with single-topic briefing papers, which describe aspects like security in business terms, and which are short and focused enough to encourage the readers to also consider their concerns separately.</p>
<p>The architect must listen to the voice inside, and carry decisions through with integrity. For an architect, the question is whether the architecture is elegant, and will deliver an adequately efficient, reliable and flexible solution. If the internal answer to this is not an honest &quot;yes&quot;, it is important to understand why not, and decide whether all the various stakeholders can live with the compromises.</p>
<p>The architect must protect the integrity of the solution against the slings and arrows of outrageous projects. (<em>Hamlet </em>again?) Monitor in particular those design aspects which reflect compromises between design forces, because they will inevitably come under renewed pressure over time. The architect must not only do the right thing, but ensure it is done right.</p>
<p>While every person on the project should be doing these things, there is a natural tendency for most to allow delivery priorities to take precedence. A developer&#8217;s documentation, for example, must be adequate to communicate the solution to other developers and maintainers, but does not have to be comprehensible to other stakeholders. However for the architect integrity, fit and communication of the solution are primary responsibilities, not optional. In addition the architect should have sufficient independence to call out and challenge conflicts of interest when they do occur.</p>
<h3>The Architect&#8217;s Skills</h3>
<p>The architect should be equipped with a distinct set of skills in support of these responsibilities. These will include:</p>
<ul>
<li>Design patterns and knowledge of how to apply them</li>
<li>Tools and techniques to formally document both detail designs and wider portfolios</li>
</ul>
<ul>
<li>Methods to ensure that requirements, especially non-functional ones, are documented unambiguously</li>
</ul>
<ul>
<li>Methods to review a solution design, model its behaviour and confirm the solution&#8217;s ability to meet requirements</li>
</ul>
<ul>
<li>The ability to clearly communicate solutions, issues and potential resolutions to a wide variety of stakeholders</li>
</ul>
<ul>
<li>The ability to support the project and programme managers in handling the impact of issues and related decisions</li>
</ul>
<p>Now it&#8217;s perfectly possible (and highly desirable) that others on the project will have many of these skills between them. However their combination in the architect is key to the delivery of the architect&#8217;s value, and a solution with a good chance of meeting its various objectives.</p>
<h3>The Architect&#8217;s Position</h3>
<p>A good architect should be able to operate in various organisational positions or roles and still deliver the above. Irrespective of the official organisation chart I often end up working between two or more groups, and I suspect this is a common position for many architects. It may actually be a natural result of adopting the architect&#8217;s unique perspectives.</p>
<p>The architect&#8217;s role may to some extent overlap with that of developers, analysts or product owners, and in smaller organisations or projects the architect may also take on one of these roles. In that case the architect must be able to &quot;wear the appropriate hat&quot; when focusing on a specific project issue or taking a wider view. The architect must then ensure that his or her ability to look at the wider picture is not compromised by the project relationship.</p>
<p>Conversely, a central architecture group may become accused of being in an ivory tower, separate from the realities of the business and the developers at the coal face. An architect in such a position must actively display an interest in and willingness to help with practical project issues.</p>
<p>A good architect will reconcile the need for a broad perspective and the specific responsibilities of a given position, thereby delivering distinct value compared with someone who has a more specific scope. I may on occasion be challenged for taking a wider interpretation of scope than others, but the insights which accrue from that perspective are almost always seen as valuable.</p>
<h3>Conclusions</h3>
<p>These are generalisations, and in practice there are as many variants on the architect&#8217;s role, skills and delivery as there are individuals who take the title. However it is generally true that an architect&#8217;s involvement increases the chance that a solution&#8217;s behaviour will be predictable, understood, and a good fit to its objectives. That&#8217;s the fundamental USP of the architect. </p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2018/the-architects-usp/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>An Odd Omission</title>
		<link>https://www.andrewj.com/blog/2018/an-odd-omission/</link>
					<comments>https://www.andrewj.com/blog/2018/an-odd-omission/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 07 Jan 2018 08:47:37 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2062</guid>
                    <description><![CDATA[Let&#8217;s start with a common use case… &#34;I have a television / hi-fi / home cinema system which has several components from different manufacturers. I would like to control all of them with a single remote control. I would like &#8230; <a href="https://www.andrewj.com/blog/2018/an-odd-omission/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Let&#8217;s start with a common use case…</p>
<blockquote>
<p><em>&quot;I have a television / hi-fi / home cinema system which has several components from different manufacturers. I would like to control all of them with a single remote control. I would like that remote control to be configurable, so that I can decide which functions are prioritised, and so that I can control multiple devices without having to switch &quot;modes&quot;. (For example, the primary channel controls should change the TV channel, but at the same time and without changing modes the volume controls should change the amplifier volume.) As not all of my devices are controllable via Wi-Fi, Infrared is the required primary carrier/protocol. The ideal solution would be a remote control with a configurable touch screen, probably about 6&quot; x 3&quot; which would suit one-handed operation</em>.&quot;</p>
</blockquote>
<p>I can&#8217;t believe I&#8217;m the first person to articulate such a use case. In fact I know I&#8217;m not, for two reasons. When I set up the first iteration of my home cinema system in about 2004, I read a lot of magazines and they said similar things.</p>
<p>And then I managed to buy a dedicated device which actually did this job remarkably well. It was called a Sunwave Universal Remote, and had a programmable LCD touchscreen. It had the ability to choose which device functions appeared where, and to record commands from existing remotes or define macros (sequences of commands). This provided some, limited, &quot;mixed device&quot; capability, although the primary approach was modal (select the target device, and then use controls for that device). A set of batteries lasted about a year.</p>
<p>There were only two problems. First, as successive TVs became smarter than in 2004 it became an increasing challenge to find appropriate buttons for all the functions from within the fixed option list. Then, after 13 or so years of sterling service the LCD started to die. I still own the control, but it&#8217;s now effectively unusable.</p>
<p>My first approach was to try and get a direct replacement. However it&#8217;s clear that these devices haven&#8217;t been manufactured for years. The few similar items on eBay are either later poor copies, with very limited functionality, or high-end solutions based on old PDAs at ridiculous prices.</p>
<p>But hang on. &quot;a configurable touch screen, probably about 6&quot; x 3&quot;&quot;. Didn&#8217;t I see such a device quite recently? I think someone was using one to make a phone call, or surf the internet, or check Facebook, or play Angry Birds, or some such. In fact we all use smartphones for much of our technology interaction, so why not this use case?</p>
<p>Achtung! Rabbit hole! Dive! Dive! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Why not, indeed? Actually I knew it was theoretically possible, because my old Samsung 10&quot; tablet which was about to go on eBay had some software called &quot;Peel Remote&quot; installed as standard, and I&#8217;d played with controlling hotel TVs with it. I rescued it from the eBay pile and had an experiment. The first discovery was that while there&#8217;s a lot of &quot;universal remote&quot; software on Google Play, most is rubbish, either with very limited functionality, or crippled by stupid amounts of highly-invasive advertising. There are a few honourable exceptions, and after a couple of false starts I settled on AnyMote developed by Color Tiger. This has good &quot;lookup&quot; support to get you started, a nice editing function within the app, and decent ways to backup and share remote definitions between devices. A bit of fiddling got me set up with a screen which controlled our system much better than before, and it got us through all our Christmas watching.</p>
<p>However picking up a 10&quot; tablet and turning it on every time you want to pause a video is a bit clumsy, so back to the idea of using a phone…</p>
<p>And here&#8217;s the problem. Most phones have no infrared support. While I haven&#8217;t done any sort of scientific analysis, I&#8217;d guess that 70-80% (by model) just don&#8217;t have what&#8217;s known as an &quot;infrared blaster&quot;, the element which actually emits the infrared signals. Given that this is very simple technology, not much more than an infrared LED in the phone&#8217;s top edge, it&#8217;s an odd omission. We build devices stuffed with every sort of wireless and radio interface, but omit this common one used by much of our other technology. </p>
<p>Fortunately it&#8217;s not universal, and there are some viable options. A bit of googling suggested that the LG G2 does have an IR blaster, and I tracked down one for about £50 on eBay. It turns up, the software installs&#8230;, and it just doesn’t work. That&#8217;s when I find the next problem: several of the phone manufacturers who make both TVs and phones (LG and Sony are the most obvious offenders) lock down their IR capabilities, so they are not accessible to third party software. You can use your LG phone to control your LG TV, but that&#8217;s it, and f*** all use to me.</p>
<p>Back on Google and eBay. The HTC One M7 and M8 do have IR and do seem to support third-party software. The M8 is a bit bigger, probably better for my use case, and there&#8217;s one on eBay in nice condition for a good price. It turns up, the software installs…, and then refuses to run properly. It can&#8217;t access the IR blaster. Back on Google and confirm the next problem. Most phones which have been upgraded from Android 5 or earlier to Android 6 have a changed software interface to the infrared which doesn&#8217;t work for a lot of third-party software. Thanks a billon, Google. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>OK, last roll of the dice. The HTC One M7 still runs Android 5. I find a nice blue one, a bit more money than the M8 ironically, but still within budget. It turns up, the software installs…, and it works! I have to do a few minor adjustments on the settings copied from my tablet, but otherwise straightforward. I had to install some software to make the phone turn on automatically when it&#8217;s picked up, and I may still have to do a bit of fiddling to optimise battery life, but for now it&#8217;s looking good&#8230;</p>
<p>Third time lucky, but it really didn&#8217;t have to be that difficult. For reasons which are impossible to fathom, both Google and most phone manufacturers seem to somewhere between ignoring and actively obstructing this valid and common use case. Ironically, given their usual insularity, things are a bit easier in the Apple world, with good support for third party IR blasters which plug into an iPhone&#8217;s headphone socket, but that wouldn&#8217;t be a good solution given the rest of my tech portfolio. For now I have a solution, but I&#8217;m not impressed.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2018/an-odd-omission/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Testing vs Modelling, Detection vs Prediction, Hope vs Knowledge</title>
		<link>https://www.andrewj.com/blog/2017/testing-vs-modelling-detection-vs-prediction-hope-vs-knowledge/</link>
					<comments>https://www.andrewj.com/blog/2017/testing-vs-modelling-detection-vs-prediction-hope-vs-knowledge/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 06 Dec 2017 11:20:41 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2049</guid>
                    <description><![CDATA[The Challenge I often hear a statement which worries me, especially but not exclusively in agile projects, along the lines of &#8220;we&#8217;ll make sure it works when we test it later&#8221;. Now you may think this is an odd view &#8230; <a href="https://www.andrewj.com/blog/2017/testing-vs-modelling-detection-vs-prediction-hope-vs-knowledge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<h3>The Challenge</h3>
<p>I often hear a statement which worries me, especially but not exclusively in agile projects, along the lines of &#8220;we&#8217;ll make sure it works when we test it later&#8221;.</p>
<p>Now you may think this is an odd view coming from a man who has written testing courses, presented conference papers on testing and developed testing tools, but let me explain myself.</p>
<p>First up, there&#8217;s the old chestnut that the objective of testing is not to prove something works, but to find errors. All you can actually do by testing is locate problems to be fixed, although obviously if problems are hard to find, that increases confidence in your product. However the much deeper issue is that testing is commonly viewed as an alternative to properly understanding and documenting the expected behaviour of a system, and reviewing in advance whether a proposed design will deliver that behaviour. That can be a recipe for failure.</p>
<p>Obviously in some areas this is an acknowledged and viable trade-off. If we are exploring functional alternatives, or working in a problem space where extracting documented requirements is tricky, then agile development and testing is a powerful solution, and we accept the rework that may result where we get it wrong. Having said that, even in something like UI development it may be better to develop cheap models such as wireframes, and at least attempt to explore solution fit before we commit too much to code.</p>
<p>The problem is that when we come to the more fundamental architectural elements and non-functional behaviour, the dynamics change dramatically. The best way to show this is a variant of the testing &#8220;V Model&#8221;:</p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/thoughts/Modified V Model.png" /></p>
<p>For functional details, the gap between development and testing is small, and they can quickly be reworked and retested. However some of the key architectural and non-functional aspects can only be fully tested late in the delivery process (and frequently only late in the overall programme), if at all. The &#8220;testing gap&#8221; becomes huge, the impact of any change substantial, and the rework path lengthy.</p>
<p>One challenge is that many non-functional tests require an environment representative of the technology and scale of the production system. If this is provided at all, it is typically late in the project, or testing has to be shoe-horned into a short window on the production system before operations commence. If that uncovers a major issue, it is simply too late.</p>
<p>That&#8217;s assuming that the issue is detectable. In an agile development, it may be difficult to understand &#8220;what acceptable looks like&#8221;, if there is no adequate agreed, documented definition of the expected non-functional behaviour.</p>
<p>The other challenge is that good non-functional testing is hard, and limited in what it can achieve. Simulating a peak load is difficult, especially with the variety of data in a real production peak. You can simulate planned and unplanned equipment failures and restarts, but by definition only predictable events. If a problem only emerges from lengthy running or a &#8220;perfect storm&#8221; event, then testing is unlikely to uncover it. Basically resilience is testable, performance may be testable, reliability isn&#8217;t. Similar considerations also apply to other non-functional aspects like security.</p>
<h3>The Solution</h3>
<p>The solution is to adopt an analytical and predictive approach: trying to understand, articulate and document the expected behaviour of the solution, before you build it. Importantly this is not just thinking about the solution (although thinking is vital), but thinking with models.</p>
<p>Models in this context take many forms. They can be diagrams, possibly based on UML, but not necessarily: for example <a href="https://en.wikipedia.org/wiki/Reliability_block_diagram" target="_blank" rel="noopener noreferrer">reliability block diagrams</a> or <a href="https://www.andrewj.com/products/relquest.htm" target="_blank" rel="noopener noreferrer">fault tree analyses</a> are powerful tools to understand resilience and reliability. They can be spreadsheets, for example profiling expected transaction mixes and their relative resource requirements. They can also be active software, whether simulations of some expected behaviour, or point implementations to quantify some aspect of the solution, but the point is that their purpose is to understand the solution before a major technical commitment, not to deliver functionality. Irrespective of form all models should lend themselves to a quantitative understanding of the solution, not just &#8220;what?&#8221;, but &#8220;how much?&#8221; and &#8220;how well?&#8221;.</p>
<p>For example, here&#8217;s a simple redundancy scheme modelled using <a href="https://www.andrewj.com/products/relquest.htm" target="_blank" rel="noopener noreferrer">RelQuest</a>, my own Visio-based fault tree analysis tool, from which we can not only understand the various combinations of failures which lead to loss of service, but the relative probability and impact (e.g. Mean Time to Repair) for each combination.</p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/products/example analysis.gif" /></p>
<p>Models and simulations provide you with an early understanding of the system behaviour, so you can understand whether something should work, or not, and if not where to focus your efforts. They can be detailed, like the example fault tree above, or doing an early first pass on a platform provider&#8217;s sizing tool, but a more approximate approach may also provide value.</p>
<p>Numbers are your friends. I am a great fan of Fermi estimates (see the <a href="#Sidebar">sidebar</a>) &#8211; quick &#8220;order of magnitude&#8221; approximations to see if you have understood the key elements in a problem, and whether the answer looks viable or not.</p>
<p>You can easily get viable estimates of this type for performance, capacity or reliability. If the answer is &#8220;no problem&#8221;, like we can easily accommodate millions of transactions per hour on a single server and we expect thousands, then you&#8217;re probably fine. If the answer is the other way round, like the developer who proudly presented me a solution which would take 1s CPU time to do a calculation, but we needed to do a thousand a second, then the design needs to change (I got it down to 2ms, which was acceptable). If it&#8217;s marginal, then you probably need to do a more accurate model and calculation, or build a greater degree of flexibility into the solution.</p>
<p>Simulations or low-volume experiments may be a valid way to understand CPU, storage and memory usage, network bandwidth requirements, threading, virtualisation, and even failover behaviour. Anything which scales linearly can be measured at low volume and extrapolated, but you need to be wary of areas such as network latency or storage throughput where that may not be valid.</p>
<p>Ultimately anything which builds your understanding and proves that you have thought about the problems in advance is good, even if some detail may only be confirmed at later stages. The key point is that the problems become targets for analytical thinking rather than hope and prayers, and that makes them solvable.</p>
<h3>The Conclusion</h3>
<p>Testing on its own is absolutely necessary, but very much not sufficient. For tests to be meaningful you have to describe the predicted behaviour in advance, and for the system to have any chance of passing those tests it has to be engineered accordingly. We increasingly seek to drive functional development from written user stories and behaviour specifications. In the same way professional development must be driven by quantitative models which forecast non-functional behaviour for testing to confirm, not discover in surprise.</p>
<p>&nbsp;</p>
<div class="aside">
<h3 id="Sidebar">Sidebar &#8211; Fermi Estimates</h3>
<p>I love <a href="https://en.wikipedia.org/wiki/Fermi_problem">Fermi estimates</a>, named for the great Italian-American physicist Enrico Fermi, who was always doing them. These are calculations which you know have a lot of inaccuracies, but which are simple enough to do quickly and get an answer which is &#8220;sort of right&#8221; to tell you if you have correctly understood the dimensions of the problem, and if something should work, or not.</p>
<p>Let&#8217;s do one. This is not about computing, but is an easy example to understand the process. How much does my house weigh?</p>
<p>Well my house is built mainly of brick, and for the purposes of this calculation can be thought of as a rectangular block roughly 8m x 12m, and about 3m high. (I happened to have these figures, but I could always just pace it out and use 1 pace = 1m). Allow for internal walls, and you could think of my house as four slabs of brick 8m long x 3m high, and four slabs 12m long x 3m. Alternatively that&#8217;s 4 slabs 20m long, or one slab 80m long. But remember that all the walls are at least two bricks thick, so it&#8217;s like one stack of single brick 160m long and 3m high. Now I know this doesn&#8217;t take any account of windows and doors, and the open plan bit at the front, but it&#8217;s also ignoring the roof and floor slabs, and I think that will balance out quite well. Google &#8220;house brick dimensions&#8221; gives us 215mm long and 65mm high, and a typical weight of 3.5kg. Divide 160m by 0.2m (this is a Fermi approximation remember) to get 800 bricks long. At 65mm high 3 bricks on top of each other will also be about 0.2m high, so the height of our stack will be 3x3m/0.2m = 45 bricks high, call it 50. That gives us a grand total of 50&#215;800=40,000 bricks. Now 40,000&#215;3.5kg = 140,000kg, or 140 tons. Fermi approximations are good for at best one significant figure, so round it off to 100 tons. Bingo!</p>
<p>So a simple model can get you a useful answer quickly, and you may even be able to do the maths in your head. Now obviously there are a lot of guesses and approximations here, like the density of all key materials is similar, and I haven&#8217;t so far accounted for the foundations, which might be needed, and I might want to double-check the typical weight of a brick which is a key value, but I&#8217;d be surprised if the &#8220;real&#8221; answer wasn&#8217;t somewhere between 50 and 300 tons.</p>
<p>You can easily do the same thing to get viable &#8220;order of magnitude&#8221; figures for performance, capacity or reliability.
</p></div>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/testing-vs-modelling-detection-vs-prediction-hope-vs-knowledge/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Does Agile Miss The Point About Engineering?</title>
		<link>https://www.andrewj.com/blog/2017/does-agile-miss-the-point-about-engineering/</link>
					<comments>https://www.andrewj.com/blog/2017/does-agile-miss-the-point-about-engineering/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 22 Nov 2017 07:05:06 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
        <media:thumbnail height="120" url="/photoblog/2017/thumbs/bicyclecar.jpg" width="79"/><media:content height="550" url="/photoblog/2017/slides/bicyclecar.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2045</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/bicyclecar.html"><img src="/photoblog/2017/slides/bicyclecar.jpg"/></a>A former colleague, Neil Schiller, recently wrote an excellent article, https://www.linkedin.com/pulse/agile-data-programmes-neil-schiller/, on the challenge of using agile approaches in data-centric programmes. In it, he referenced and reviewed a classic cartoon by Henrik Kniberg which is often used to promote the &#8230; <a href="https://www.andrewj.com/blog/2017/does-agile-miss-the-point-about-engineering/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/bicyclecar.html"><img src="/photoblog/2017/slides/bicyclecar.jpg"/></a><p>A former colleague, Neil Schiller, recently wrote an excellent article, <a href="https://www.linkedin.com/pulse/agile-data-programmes-neil-schiller/" target="_blank" rel="noopener noreferrer">https://www.linkedin.com/pulse/agile-data-programmes-neil-schiller/</a>, on the challenge of using agile approaches in data-centric programmes. In it, he referenced and reviewed a classic cartoon by Henrik Kniberg which is often used to promote the advantages of agile delivery:</p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/thoughts/kniberg.png" /></p>
<p>Now it&#8217;s wholly possible that I am reading more into a limited analogy than appropriate, but I think this same diagram can also be used to explain some of the fundamental issues with agile approaches.</p>
<p>Think about what the bottom line is claiming: that by a set of small incremental deliveries we can somehow achieve the equivalent of transforming a scooter into a bicycle, into a motorbike and then into a car, each a fully working vehicle meeting the user&#8217;s requirements. In the real physical world this is laughable: each has a wholly different architecture with no commonality whatsoever between equivalent subsystems at any of the stages. Key properties arise from the fundamental structure &#8211; a simple tubular chassis for bike, a more complex frame including complex stressed moving parts like the engine and transmission for the motorbike, typically a monocoque chassis/exoskeleton for the car. These underlying elements form the basis, and you have to get them right as you can&#8217;t modify them later: you can&#8217;t &#8220;add strength&#8221; to a car by adding more tubes after the event (unless you are going banger racing!).</p>
<p>In the real physical world you create a complex engineered artefact by understanding its required properties, creating a layered structure which is designed to meet them, and then building up those layers to progressively deliver the required result. This requires that the most fundamental, least readily changed layers have to be right, and stable, early on, and only then can you add the upper more flexible elements. The first version of the process in the diagram is actually wholly correct, the second a joke.</p>
<p>Is it so very different for software? If we&#8217;re talking about major systems with real-world complexity and non-functional demands, I&#8217;m not convinced. The &#8220;ultra-agile&#8221; argument that it is always possible to &#8220;refactor&#8221; code to make changes. This is true up to a point, but it can be difficult and costly to change the underlying structure. If that does not meet requirements for security, or reliability, or performance, then no amount of fiddling will fix it, and if changes amount to a fundamental rewrite then it&#8217;s difficult to see where any advantage has been gained.</p>
<p>Obviously there are differences. The vehicle designer seeks to both create and use solutions which once right will be re-used many times (from hundreds to millions of instances), but will be difficult to change once in production. Software development is still largely about one-offs. Software requirements are typically less well-defined than for established hardware products. In vehicle manufacture, the roles of engineer/designer and constructor are distinct, whereas in software the designers often have an ongoing role in construction, and may at least subconsciously seek to extend that role (guilty as charged <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ). On the other hand, the car designer knows that an approved design will be built largely as documented, whereas the software designer has no such assurance.</p>
<p>Fundamentally, however, I believe that software development can benefit from engineering disciplines just as much as the design of physical products. For example, it is much better to attempt to understand and predict up front how a given design will respond against non-functional requirements. Testing is a very good way to confirm that your solution basically works and to refine refinements. It is a very bad way to uncover fundamental deficiencies, especially if this occurs late in the development process.</p>
<p>This doesn&#8217;t mean that I don&#8217;t believe in agile development. Far from it, I am a great believer in iterative and incremental development, and structures such as Scrum sprints to manage them. However, I really don&#8217;t believe in architecture &#8220;emerging from the code&#8221;, just the same as I would not expect to see a great car design &#8220;emerge&#8221; from the work of a group of independent fabricators working on small parts of the problem without any overarching design. Cars &#8220;designed&#8221; in such a way tend to be more Austin Allegro (or AMC Pacer) than Bugatti Veyron.</p>
<p>Instead, Architecture has to be understood as providing the structure within which the code is developed, with that overall structure developed using engineering disciplines: assess the various forces on the design, articulate how these forces will be resolved (including what compromises are required), then document and model the solution to predict its properties.</p>
<p>If the requirement is for a sports car, design a sports car, don&#8217;t try and &#8220;refactor&#8221; a pushbike&#8230;</p>
<p>Creation of such designs, documents and models is a distinct discipline from coding. Some of this may be the domain of specialists, some may be performed by those who also have other development roles, but as a separate activity requiring appropriate skills and experience. Ironically I think Tom Gilb got it about right in his 1988 book &#8220;Principles of Software Engineering Management&#8221;, when he defined &#8220;Software Engineer&#8221; as someone who &#8220;can translate cost and quality requirements into a set of solutions to reach the planned levels&#8221;, and who has the skill to change any given quality dimension of a system by a factor of ten if required. The latter challenge would uncover a lot of people who call themselves &#8220;architects&#8221;.</p>
<p>In addition complex designs need some form of centralised, overall ownership and design control &#8211; this again requires specialist skills and cannot just be allocated randomly, but will sit with an Architect and/or a Product Owner.</p>
<p>Within such a framework concepts such as continuous integration and testing still make sense. Development, both functional and non-functional can still be managed via the backlog and sprint plans, epics and stories. However the &#8220;minimum viable product&#8221; may require completion of much of the underlying architecture as well as major functional capabilities. Major capabilities, both functional and non-functional, have to be analysed and designed up front, not left to stories somewhere in the backlog. The intermediate delivery is a car, albeit incomplete, not a complete bicycle.</p>
<p>Agile development and architecture are not incompatible, but complementary. Successful development of a complex real-world system will inevitably follow the first model in Kniberg&#8217;s cartoon, no matter how much the agilists would like it to be the second. At scale, and in the face of more challenging requirements software development needs to be treated as an engineering discipline, with agile structures in service of that discipline, not avoiding it.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/does-agile-miss-the-point-about-engineering/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Architecture Lessons from a Watch Collection</title>
		<link>https://www.andrewj.com/blog/2017/architecture-lessons-from-a-watch-collection/</link>
					<comments>https://www.andrewj.com/blog/2017/architecture-lessons-from-a-watch-collection/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 04 Nov 2017 10:29:20 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Watches]]></category>
        <media:thumbnail height="120" url="/photoblog/2017/thumbs/171021_GX8_1120821.jpg" width="79"/><media:content height="550" url="/photoblog/2017/slides/171021_GX8_1120821.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2032</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/171021_GX8_1120821.html"><img src="/photoblog/2017/slides/171021_GX8_1120821.jpg"/></a>I recently started a watch collection. To be different, to control costs and to honour a style which I have long liked, all my watches are hybrid analogue/digital models. Within that constraint, they vary widely in age, cost, manufacturer and &#8230; <a href="https://www.andrewj.com/blog/2017/architecture-lessons-from-a-watch-collection/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/171021_GX8_1120821.html"><img src="/photoblog/2017/slides/171021_GX8_1120821.jpg"/></a><p>I recently <a href="https://www.andrewj.com/blog/2017/collection-or-obsession/" target="_blank" rel="noopener noreferrer">started a watch collection</a>. To be different, to control costs and to honour a style which I have long liked, all my watches are hybrid analogue/digital models. Within that constraint, they vary widely in age, cost, manufacturer and style.</p>
<p>I wanted to write something about my observations, but not just a puff piece about my collection. At the same time, I am long overdue to write something on software architecture and design. This piece grew out of wondering whether there are real lessons for the software architect in my collection. Hopefully without being too contrived, there really are.</p>
<h3>Hybrid Architectures Allow the Right Technology for the Job</h3>
<p>There&#8217;s a common tendency in both watch and software design to try and solve all requirements the same way. Sometimes this comes out of a semi-religious obsession with a certain technology, at others it&#8217;s down to the limitations of the tools and mind-set of the designer. Designs like the hybrid watch show that allowing multiple technologies to play to their strengths may be a better solution, and not necessarily even with a net increase in complexity.</p>
<p>Using two or three rotating hands to indicate the time is an excellent, elegant and proven solution, arguably more effective for a &#8220;quick glance&#8221; than the digital equivalent. However, for anything beyond that basic function the world of analogue horology has long had a very apt name: &#8220;complications&#8221;. Mechanical complexity ratchets up rapidly, for even the simplest of additional functions . Conversely even the cheapest of my watches has a stopwatch, alarm and perpetual calendar, and most support multiple time zones and easy or even automatic travel and clock-change adjustments. Spots of luminous paint make a watch readable in darkness, but illuminating a small digital display is more effective.</p>
<p>The hybrid approach also tackles the aesthetic challenge: while many analogue watches are things of beauty, most digital watches just aren&#8217;t. Hybrid watches (just like analogue ones) certainly can be hit with the ugly stick, but I&#8217;ve managed to assemble a number of very pretty examples.</p>
<p>The lesson for the software architect is simple: if the compromise of trying to do everything with a single technology is too great, don&#8217;t be afraid to embrace a hybrid solution. Hybrid architectures are a powerful tool in the right place, not something to be ruthlessly eliminated by purist &#8220;Thought Police&#8221;.</p>
<h3>A Strong, Layered Architecture Promotes Longevity</h3>
<p>Take a look at these three watches: a 1986 Omega Seamaster, a 1999 Rado Diastar, and a recent Breitling Aerospace. Very different, yes?</p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/photoblog/2017/slides/171021_GX8_1120791 adjusted.jpg" /><br />
<span class="smalltxt">Sisters Under the Skin, or Brothers from Another Mother?</span></p>
<p>Visually, they are. But their operation is almost identical, so much so that the user manuals are interchangeable. Clearly some Swiss watchmaker just &#8220;got it right&#8221; in the late 1980s, and that solution has endured, with a life both within and outside the Swatch Group, the watch equivalent of the shark or crocodile. While the underlying technology has changed only slightly, the strong layering has allowed the creation of several different base models, and then numerous variants in size, shape and external materials.</p>
<p>This is a classic example of long-term value from investing in a strong underlying architecture, but also ensuring that the architecture allows for &#8220;pace layering&#8221;, with the visible elements changing rapidly, while the underpinnings may be remarkably stable.</p>
<p>It&#8217;s worth noting that basic functionality alone does not ensure longevity. None of these watches have survived unchanged, it&#8217;s the strength of the underlying design which endures.</p>
<p>Oh, and yes, the Omega is a full-sized mans&#8217; watch (as per 1986)! More about fashion later&#8230;</p>
<h3>Enabling Integration Unlocks New Value</h3>
<p>The earliest dual mode watches were little more than a simple digital watch and a quartz analogue watch sharing the same case, but not much else except the battery (and sometimes not even that!). The cheapest are still built on this model, which might most charitably be labelled &#8220;Independent&#8221; &#8211; my Lambretta watch is a good example. There&#8217;s actually nothing wrong with this model: improve the capability of the digital part, the quality of the analogue part and the case materials and design and you have, for example, my early 1990s Citizen watches which are among my favourites. However as a watch user you are essentially just running two watches in one case. They may or may not tell the same time.</p>
<p>The three premium Swiss watches represent the next stage of integration. The time is set by the crown moving the hands, but the digital time is set in synchronisation. There&#8217;s a simple way to advance and retard both in whole hours to simplify travel and clock-change adjustments. Seconds display is digital-only to simplify matters. Let&#8217;s borrow a photography term and call this &#8220;Analogue Priority&#8221; &#8211; still largely manual, but much more streamlined.</p>
<p>&#8220;Digital Priority&#8221;, as implemented in early 2000s Seikos is another step forwards. You set the digital time accurately for your current location and DST status, and you have one-touch change of both digital and analogue time to any other time zone. The second hand works as a status indicator, or automatically synchronises to the digital time when in time mode.</p>
<p>However the crown has to go to the Tissot T-Touch watches. Here the hands are just three indicators driven entirely by the digital functions: they become the compass needle in compass mode, show the pressure trend in barometer mode, sweep in stopwatch mode, park at 12.00 when the watch is in battery-saving sleep mode. And they tell the time as well! Clearly full integration unlocks a whole set of capabilities not previously accessible.</p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/photoblog/2017/slides/171021_GX8_1120830.jpg" /><br />
<span class="smalltxt">Extremes of analogue/digital integration</span></p>
<p>So it is with software. Expose the control and integration points of your modules to one another, or to external access, and new value emerges as the whole rapidly becomes much more than the sum of the separate parts.</p>
<h3>Provide for Adjustment Where Needed&#8230;</h3>
<p>While I love the look of some watch bracelets (especially those with unusual materials, like the high-tech black ceramic of the Rado), adjusting them is a complex process, and inevitably ends up with a compromise: either too loose or too tight. Even if the bracelet offers some form of micro-adjustment and you get it &#8220;just right&#8221; at one point, it will be wrong as the wrist naturally swells and shrinks over time. Leather straps allow easier adjustment, but usually in quite coarse increments of about 1cm, so you&#8217;re back to a compromise again.</p>
<p>The ideal would be a bracelet with either an elastic/sprung element, or easily accessible micro-adjustment, but I don&#8217;t have a single example in my collection like that. I hear Apple are thinking about an electrically self-adjusting strap for the next iWatch, but that sounds somewhat OTT.</p>
<p>On the other hand, I have a couple of £10 silicone straps for my Fitbit which offer easy adjustment in 2mm increments. Go figure&#8230;</p>
<p>We could all quote countless similar software examples, of either a &#8220;one size fits all&#8221; setting which doesn&#8217;t really suit, or an allegedly controllable or automated setting which misses the useful values. The lesson here is to understand where adjustment is required, and provide some accessible way to achieve it.</p>
<h3>… But Avoid Wasting Effort on the Useless</h3>
<p>At the other end of the scale, several of my watches have &#8220;functions&#8221; of dubious value. The most obvious is the rotating bezel. In the Tissot, it can be combined with the compass function to provide heading/azimuth information. That&#8217;s genuinely useful. The Citizen Wingman has a functioning circular slide rule. Again valid, but something of a hostage to progress. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p align="center"><img decoding="async" src="https://www.andrewj.com/photoblog/2017/slides/171021_GX8_1120818.jpg" /><br />
<span class="smalltxt">At least the slide rule does something, if you can remember how!</span></p>
<p>Do the rotating bezels of my Citizen Yachtsman, or the Breitling Aerospace have any function? Not as far as I can see.</p>
<p>Now I&#8217;m not against decorative or &#8220;fun&#8221; features, especially in a product like a watch which nowadays is as frequently worn as jewellery than for its primary function. But I do think that they need to be the result of deliberate decisions, and designers need to think carefully about which are worth the effort, and which introduce complexity outweighing their value. That lesson applies equally to software as to hardware.</p>
<h3>… And Don&#8217;t Over-Design the User Interface</h3>
<p>The other issue here is that unless it&#8217;s pure jewellery, a watch does need to honour its primary function, and support easily telling the time, ideally for users with varying eyesight and in varying lighting conditions. While I have been the Rado&#8217;s proud owner for nearly 18 years, as my 50-something eyesight has changed it has become increasingly annoying as a time-telling device, mainly due to its &#8220;low contrast&#8221; design. It&#8217;s not alone: for example my very pretty Citizen Yachtsman has gold and pale green hands and a gold and pale green face, which almost renders it back to a pure digital watch in some lights!</p>
<p>At the other end of the scale, the Breitling Aerospace is also very elegant, but an exemplar of clarity, with a high-contrast display, and clear markings including actual numbers. It can be done, and the message is that clarity and simplicity trump &#8220;design&#8221; in the user interface.</p>
<p>This is equally true of software. I am not the only person to have written bemoaning the usability issues which arise from loss of contrast and colour in modern designs. The message is &#8220;keep it simple&#8221;, and make sure that your content is properly visible, don&#8217;t hide it.</p>
<h3>Fashion Drives Technology. Fashion Has Nothing To Do With Technical Excellence</h3>
<p>All my watches are good timepieces, bar the odd UI foible, and will run accurately and reliably for years with an occasional battery change. However, if you pick up a watch magazine, or browse any of the dedicated blogs, there is almost no mention of such devices, or largely of quartz/digital watches at all.</p>
<p>Instead, like so much else in the world we are seeing a polarisation around two more &#8220;extreme&#8221; alternatives: manual wind and &#8220;automatic&#8221; (i.e. self-winding) mechanical watches, or &#8220;charge every day&#8221; (and replace every couple of years) smartwatches. The former can be very elegant and impressive pieces of engineering, but will stop and need resetting unless you wind or wear them at least every few days &#8211; a challenge for the collector! The latter offer high functionality, but few seem engineered to provide 30 years of hard-wearing service, because we know they will be obsolete in a fraction of that time.</p>
<p>Essentially fashion has driven the market to displace a proven, reliable technology with &#8220;challenging&#8221; alternatives, which are potentially less good solutions to the core requirements, at least while they are immature.</p>
<p>This is not new, or unique to the watch market. In software, we see a number of equivalent trends which also seem to be driven by fashion rather than technical considerations. A good, if possibly slightly contentious example, might be the displacement of server-centric website technologies, which are very easy to develop, debug and maintain, with more complex and trickier client-centric solutions based on scripting languages. There may be genuine architectural requirements which dictate using such technologies as part of the solution, e.g. &#8220;this payload is easy to secure and send as raw data, but difficult and expensive to transmit fully rendered&#8221;. Fine. But &#8220;it&#8217;s what Facebook does&#8221; or &#8220;it&#8217;s the modern solution&#8221; are not architecture, just fashion statements.</p>
<p>On a more positive note, another force may tend to correct things. Earlier I likened the Omega/Rado/Breitling design to the evolutionary position of a shark. Well there&#8217;s another thing about sharks: evolution keeps using the same design. The shark, swordfish, ichthyosaur, and dolphin are essentially successive re-uses of a successful design with upgraded underlying architecture. Right now, Fossil and others are starting to announce hybrid smartwatches with analogue hands alongside a fully-fledged smartwatch digital display.</p>
<p>In fashion terms, what goes around, comes around. It&#8217;s true for many things, watches and software architectures among them.</p>
<h3>Conclusions</h3>
<p>Trying to understand the familial relationships, similarities and differences in a group of similar artefacts is interesting. It&#8217;s also useful for a software architect to try and understand the architectural characteristics behind them, and especially how this can help some designs endure and progressively evolve to deliver long-term value, something we frequently fail to achieve in software. At the same time, it&#8217;s also salutary to recognise where non-architectural considerations have a significant architectural impact. Think about the components, relationships and dynamics of other objects in architecture terms, and the architecture of our own software artefacts will benefit.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/architecture-lessons-from-a-watch-collection/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Integration Or Incantation?</title>
		<link>https://www.andrewj.com/blog/2017/integration-or-incantation/</link>
					<comments>https://www.andrewj.com/blog/2017/integration-or-incantation/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 29 Oct 2017 12:32:31 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=2029</guid>
                    <description><![CDATA[I was travelling recently with Virgin Atlantic. I went to check in online, typed in my booking code and selected both our names, clicked &#34;Next&#34;, and got an odd error saying that I couldn&#8217;t check in. I wondered momentarily if &#8230; <a href="https://www.andrewj.com/blog/2017/integration-or-incantation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I was travelling recently with Virgin Atlantic. I went to check in online, typed in my booking code and selected both our names, clicked &quot;Next&quot;, and got an odd error saying that I couldn&#8217;t check in. I wondered momentarily if it was yet more pre-Brexit paranoia about Frances&#8217; Irish passport, but there was a &quot;check in individually&quot; option which rapidly revealed that Frances was fine, it was my ticket which was causing the problem. </p>
<p>The web site suggested I ring the reservation number, which I did, listened to 5 minutes of surprisingly loud rock music (you never mistake being on hold for Virgin with anyone else), and got through to a helpful chap. He said &quot;OK, I can see the problem, I will re-issue the ticket.&quot; Two minutes of more distinctive music, and he invited me to try again. Same result. He confirmed that we were definitely booked in and had our seat reservations, and suggested that I wait until I get to the airport. &quot;They will help you there.&quot; Fine.</p>
<p>Next morning, we were tackled on our way into the Virgin area by a keen young lady who asked if we had had any problems with check in. I said we had, and she led us into what can best be described as a &quot;krall&quot; of check-in terminals, and logged herself into one. This displayed a smart check-in agent&#8217;s application, complete with all the logos, the picture of Branson&#8217;s glamorous Mum, and so on. She quickly clicked through a set of very similar steps to the ones I had tried, and then click OK. &quot;Oh, that&#8217;s odd&quot;, she said.</p>
<p>Next, she opens up a green screen application. Well, OK, it&#8217;s actually white on a Virgin red background, but I know a green screen application when I see one. She locates my ticket, checks a few things, and types in the command to issue my pass. Now I&#8217;m not an expert on Virgin&#8217;s IT solutions, but I know the word &quot;ERR&quot; when I see it. &quot;Oh, that&#8217;s not right either&quot; says the helpful young lady &quot;I&#8217;ll get help&quot;.</p>
<p>Two minutes later, the young lady is joined by a somewhat older, rather larger lady. (OK, about the same age as me and she looked a lot better in her uniform than I would, but you get the idea.) &quot;Hello Mr Johnston, let&#8217;s see if we can sort this out&quot;. She takes one look at the screen and says &quot;We actually have two computer systems, and they don&#8217;t always talk to each other or have the same information.&quot;</p>
<p>&#8230; which could be the best, most succinct summary of the last 25 years of my career I have heard, but I digress&#8230;</p>
<p>Back to the story. The new lady looks hard at both applications, and then announces she can see the problem (remember, all this is happening on a screen I can see as well as the two Virgin employees). &quot;Look, they&#8217;ve got your name with a &#8216;T&#8217; here, and no &#8216;T&#8217; here&quot; (pointing to the &quot;red screen&quot; programme).</p>
<p>Turning to the younger lady, she says &quot;Right, this is how to fix it.&quot; &quot;Type DJT, then 01&quot; (The details are wrong, but the flavour is correct&#8230;) &quot;Put in his ticket number. Type CHG, then enter. Type in his name, make sure we&#8217;ve got the T this time. Now set that value to zero, because this isn&#8217;t a chargeable change, and we can do a one letter change without a charge. Put in zero for the luggage, we can change that in a minute. Type DJQ, enter. Type JYZ, enter. OK, that&#8217;s better. Now try and print his pass.&quot; Back to the sexy new check in app, click a few buttons, and I&#8217;m presented with two fresh boarding passes. Job done.</p>
<p>Now didn&#8217;t we have a series of books where a bunch of older, experienced wizards taught keen you wizards to tap things with sticks and make incantations? The solution might as well have been to tap the red screen programme with a wand and shout &quot;ticketamus&quot;&#8230;</p>
<p>The issues here are common ones. Is it right to be so dependent on what is clearly an elderly and complex legacy system? Are the knowledge transfer processes good enough, or is there a risk that the next time the more experienced lady who knows the magic incantations might not be available? Why is such a fundamental piece of information as the passenger names clearly being copy typed, not part of the automated integrations? As a result, is this a frequent enough problem that there should really be an easier way to fix it? Ultimately the solutions are traditional ones: replace the legacy system, or improve its integrations, but these are never quick or easy.</p>
<p>Now please note I&#8217;m not trying to get at Virgin at all. I know for a fact that every company more than a few years old has a similar situation somewhere in the depths of their IT. The Virgin staff were all cheerful, helpful and eventually resolved the problem quickly. However it is maybe a bit of a management error to publicly show the workings &quot;behind the green screen&quot; (to borrow another remarkably apposite magical image, from the Wizard of Oz). We expect to see the swan gliding, not the feet busily paddling. On this occasion it was interesting to get a glimpse, and I was sympathetic, but if the workings cannot be less dependent on &quot;magic&quot;, maybe they should be less visible?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/integration-or-incantation/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>How Strong Is Your Programming Language?</title>
		<link>https://www.andrewj.com/blog/2017/how-strong-is-your-programming-language/</link>
					<comments>https://www.andrewj.com/blog/2017/how-strong-is-your-programming-language/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 20 Mar 2017 10:05:02 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
        <media:thumbnail height="120" url="/photoblog/2017/thumbs/0613_7D_3649-3650 Panorama  Medium.jpg" width="79"/><media:content height="550" url="/photoblog/2017/slides/0613_7D_3649-3650 Panorama  Medium.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1999</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/0613_7D_3649-3650 Panorama  Medium.html"><img src="/photoblog/2017/slides/0613_7D_3649-3650 Panorama  Medium.jpg"/></a>I write this with slight trepidation as I don&#8217;t want to provoke a &#34;religious&#34; discussion. I would appreciate comments focused on the engineering issues I have highlighted. I&#8217;m in the middle of learning some new programming tools and languages, and &#8230; <a href="https://www.andrewj.com/blog/2017/how-strong-is-your-programming-language/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/0613_7D_3649-3650 Panorama  Medium.html"><img src="/photoblog/2017/slides/0613_7D_3649-3650 Panorama  Medium.jpg"/></a><p align="center"><em>I write this with slight trepidation as I don&#8217;t want to provoke a &quot;religious&quot; discussion. I would appreciate comments focused on the engineering issues I have highlighted.</em></p>
<p>I&#8217;m in the middle of learning some new programming tools and languages, and my observations are coalescing around a metric which I haven&#8217;t seen assessed elsewhere. I&#8217;m going to call this &quot;strength&quot;, as in &quot;steel is strong&quot;, defined as the extent to which a programming language and its standard tooling avoid wasted effort and prevent errors. Essentially, &quot;how hard is it to break?&quot;. This is not about the &quot;power&quot; or &quot;reach&quot; of a language, or its performance, although typically these correlate quite well with &quot;strength&quot;. Neither does it include other considerations such as portability, tool cost or ease of deployment, which might be important in a specific choice. This is about the extent to which avoidable mistakes are actively avoided, thereby promoting developer productivity and low error rates.</p>
<p>I freely acknowledge that most languages have their place, and that it is perfectly possible to write good, solid code with a &quot;weaker&quot; language, as measured by this metric. It&#8217;s just harder than it has to be, especially if you are free to choose a stronger one.</p>
<p>I have identified the following factors which contribute to the strength of a language:</p>
<h3>1. Explicit variable and type declaration</h3>
<p>Together with case sensitivity issues, this is the primary cause of &quot;silly&quot; errors. If I start with a variable called <em>FieldStrength</em> and then accidentally refer to <em>FeildStrength</em>, and this can get through the editing and compile processes and throw a runtime error because I&#8217;m trying to use an undefined value then then programming &quot;language&quot; doesn&#8217;t deserve the label. In a strong language, this will be immediately questioned at edit time, because each variable must be explicitly defined, with a meaningful and clear type. Named types are better than those assigned by, for example, using multiple different types of brackets in the declaration.</p>
<h3>2 Strong typing and early binding </h3>
<p>Each variable&#8217;s type should be used by the editor to only allow code which invokes valid operations. To maximise the value of this the language and tooling should promote strong, &quot;early bound&quot; types in favour of weaker generic types: <em>VehicleData</em> not <em>object</em> or <em>var</em>. Generic objects and late binding have their place, in specific cases where code must handle incoming values whose type is not known until runtime, but the editor and language standards should then promote the practice of converting these to a strong type at the earliest practical opportunity.</p>
<p>Alongside this, the majority of type conversions should be explicit in code. Those which are always &quot;safe&quot; (e.g. from an integer to a floating point value, or from a strong type to a generic object) may be implicit, but all others should be spelt out in code with the ability to trap errors if they occur.</p>
<h3>3. Intelligent case insensitivity</h3>
<p>As noted above, this is a primary cause of &quot;silly&quot; errors. The worst case is a language which allows unintentional case errors at edit time and through deployment, and then throws runtime errors when things don&#8217;t match. Such a language isn&#8217;t worth the name. Best case is a language where the developer can choose meaningful capitalisation for clarity when defining methods and data structures, and the tools automatically correct any minor case issues as the developer references them, but if the items are accessed via a mechanism which cannot be corrected (e.g. via a text string passed from external sources), that&#8217;s case insensitive. In this best case the editor and compiler will reject any two definitions with overlapping scope which differ only in case, and require a stronger differentiation.</p>
<p>Somewhere between these extremes a language may be case sensitive but require explicit variable and method declaration and flag any mismatches at edit time. That&#8217;s weaker, as it becomes possible to have overlapping identifiers and accidentally invoke the wrong one, but it&#8217;s better than nothing.</p>
<h3>4. Lack of &quot;cruft&quot;, and elimination of &quot;ambiguous cruft&quot;</h3>
<p>By &quot;cruft&quot;, I mean all those language elements which are not strictly necessary for a human reader or an intelligent compiler/interpreter to unambiguously understand the code&#8217;s intent, but which the language&#8217;s syntax requires. They increase the programmer&#8217;s work, and each extra element introduces another opportunity for errors. Semicolons at the ends of statements, brackets everywhere and multiply repeated type names are good (or should that be bad?) examples. If I forget the semicolon but the statement fits on one line and otherwise makes syntactic sense then then code should work without it, or the tooling should insert it automatically.</p>
<p>However, the worse issue is what I have termed &quot;ambiguous cruft&quot;, where it&#8217;s relatively easy to make an error in this stuff which takes time to track down and correct. My personal <em>bête noire</em> is the chain of multiple closing curly brackets at the end of a complex C-like code block or JSON file, where it&#8217;s very easy to mis-count and end up with the wrong nesting.&#160; Contrast this with the explicit <em>End XXX</em> statements of VB.Net or name-matched closing tags of XML. Another example is where an identifier may or may not be followed by a pair of empty parentheses, but the two cases have different meanings: another error waiting to occur.</p>
<h3>5. Automated dependency checking</h3>
<p>Not a lot to say about this one. The compile/deploy stage should not allow through any code without all its dependencies being identified and appropriately handled. It just beggars belief that in 2017 we still have substantial volumes of work in environments which don&#8217;t guarantee this.</p>
<h3>6. Edit and continue debugging</h3>
<p>Single-stepping code is still one of the most powerful ways to check that it actually does what you intend, or to track down more complex errors. What is annoying is when this process indicates the error, but it requires a lengthy stop/edit/recompile/retest cycle to fix a minor problem, or when even a small exception causes the entire debug session to terminate. Best practice, although rare, is &quot;edit and continue&quot; support which allows code to be changed during a debug session. Worst case is where there&#8217;s no effective single-step debug support.</p>
<p>&#160;</p>
<h2>Some Assessments</h2>
<p>Having defined the metric, here&#8217;s an attempt to assess some languages I know using it.</p>
<p>It will come as no surprise to those who know me that I give VB.Net a rating of <em>Very Strong</em>. It scores almost 100% on all the factors above, in particular being one of very few languages to express the outlined best practice approach to case sensitivity . Although fans of more &quot;symbolic&quot; languages derived from C may not like the way things are spelled out in words, the number of &quot;tokens&quot; required to achieve things is very low, with minimal &quot;cruft&quot;. For example, creating a variable as a new instance of a specific type takes exactly 5 tokens in VB.Net, including explicit scope control if required and with the type name (often the longest token) used once. The same takes at least 6 tokens plus a semicolon in Java or C#, with the type name repeated at least once. As noted above, elements like code block ends are clear and specific removing a common cause of&#160; silly errors. </p>
<p>Is VB.Net perfect? No. For example if I had a free hand I would be tempted to make the declaration of variables for collections or similar automatically create a new instance of the appropriate type rather than requiring explicit initiation, as this is a common source of errors (albeit well flagged by the editor and easily fixed). It allows some implicit type conversions which can cause problems, albeit rarely. However it&#8217;s pretty &quot;bomb proof&quot;. I acknowledge there may be some cause and effect interplay going on here: it&#8217;s my language of choice because I&#8217;m sensitive to these issues, but I&#8217;m sensitive to these issues because the language I know best does them well and I miss that when working in other contexts.</p>
<p>It&#8217;s worth noting that these strengths relate to the language and are not restricted to expensive tools from &quot;Big bad Microsoft&quot;. For example the same statements can be made for the excellent VB-based <a href="https://www.b4x.com/" target="_blank">B4X Suite</a> from tiny Israeli software house Anywhere Software, which uses Java as a runtime, executes on almost any platform, and includes remarkable edit and continue features for software which is being developed on PC but running on a mobile device.</p>
<p>I would rate Java and C# slightly lower as <em>Pretty Strong</em>. As fully compiled, strongly typed languages many potential error sources are caught at compile time if not earlier. However, the case-sensitivity and the reliance on additional, arguably redundant &quot;punctuation&quot; are both common sources of errors, as noted above. Tool support is also maybe a notch down: for example while the VB.Net editor can automatically correct minor errors such as the case of an identifier or missing parentheses, the C# editor either can&#8217;t do this, or it&#8217;s turned off and well hidden. On a positive note, both languages enforce slightly more rigor on type conversions. Score 4.5 out of 6?</p>
<p>Strongly-typed interpreted languages such as Python get a <em>Moderate</em> rating. The big issue is that the combination of implicit variable declaration and case sensitivity allow through far too many &quot;silly&quot; errors which cause runtime failures. &quot;Cruft&quot; is minimal, but the reliance on punctuation variations to distinguish the declaration and use of different collection types can be tricky. The use of indentation levels to distinguish code blocks is clear and reasonably unambiguous, but can be vulnerable to editors invisibly changing whitespace (e.g. converting tabs to spaces). On a positive note the better editors make good use of the strong typing to help the developer navigate and use the class structure. I also like the strong separation of concerns in the Django/Jinja development model, which echoes that of ASP.Net or Java Server Faces. I haven&#8217;t yet found an environment which offers edit and continue debugging, or graceful handling of runtime exceptions, but my investigations continue. Score 2.5 out of 6?</p>
<p>Weakly-typed scripting languages such as JavaScript or PHP are <em>Weak</em>, and in my experience highly error prone, offering almost none of the protections of a strong language as outlined above. While I am fully aware that like King Canute, I am powerless to stop the incoming tide of these languages, I would like to hope that maybe a few of those who promote their use might read this article, and take a minute to consider the possible benefits of a stronger choice.</p>
<p>&#160;</p>
<h2>Final Thoughts</h2>
<p>There&#8217;s a lot of fashion in development, but like massive platforms and enormous flares, not all fashions are sensible ones&#8230; We need a return to treating development as an engineering discipline, and part of that may be choosing languages and tools which actively help us to avoid mistakes. I hope this concept of a &quot;strength&quot; metric might help promote such thinking.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/how-strong-is-your-programming-language/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Why I (Still) Do Programming</title>
		<link>https://www.andrewj.com/blog/2017/why-i-still-do-programming/</link>
					<comments>https://www.andrewj.com/blog/2017/why-i-still-do-programming/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 06 Mar 2017 13:54:39 +0000</pubDate>
				<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/?p=1993</guid>
                    <description><![CDATA[It&#8217;s an oddity that although I sell most of my time as a senior software architect, and can also afford to purchase software I need, I still spend a lot of time programming, writing code. Twenty-five years ago people a &#8230; <a href="https://www.andrewj.com/blog/2017/why-i-still-do-programming/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>It&#8217;s an oddity that although I sell most of my time as a senior software architect, and can also afford to purchase software I need, I still spend a lot of time programming, writing code. Twenty-five years ago people a little older than I was then frequently told me &#8220;I stopped writing code a long time ago, you will probably be the same&#8221;, but it&#8217;s just turned out to be completely untrue. It&#8217;s not even that I only do it for a hobby or personal projects, I work some hands-on development into the majority of my professional engagements. Why?</p>
<p>At the risk of mis-quoting the Bible, the answer is legion, for they are many&#8230;</p>
<h3>To get the functionality I want</h3>
<p>I have always been a believer in getting computers to automate repetitive actions, something they are supremely good at. At the same time I have a very low patience threshold for undertaking repetitive tasks myself. If I can find an existing software solution great, but if not I will seriously consider writing one, or at the very least the &#8220;scaffolding&#8221; to integrate available tools into a smooth process. What often happens is I find a partial solution first, but as I get tired of working around its limitations I get to the point where I say &#8220;to hell with this, I&#8217;ll write my own&#8221;. This is more commonly a justification for personal projects, but there have been cases where I have filled gaps in client projects on this basis.</p>
<p>Related to this, if I need to quickly get a result in a complex calculation or piece of data processing, I&#8217;m happy to jump into a suitable macro language (or just VB) to get it, even for a single execution. Computers are faster than people, as long as it doesn&#8217;t take too long to set the process up.</p>
<h3>To explore complex problems</h3>
<p>While I am a great believer in the value of analysis and modelling, I acknowledge that words and diagrams have their limits in the case of the most complicated problem domains, and may be fundamentally difficult to formulate and communicate for complex and chaotic problem domains (using all these terms in their formal sense, and as they are used in the Cynefin framework, see <a href="http://www.agilearchitect.org/agile/articles/order%20and%20unorder.asp">here</a>).</p>
<p>Even a low-functionality prototype may do more to elicit an understanding of a complex requirement than a lot of words and pictures: that&#8217;s one reason why agile methods have become so popular. The challenge is to strike a balance, and make sure that an analytical understanding does genuinely emerge, rather than just being buried in the code and my head. That&#8217;s why I am always keen to generate genuine models and documentation off the back of any such prototype.</p>
<p>The other case in which I may jump into code is if the dynamic behaviour of a system or process is difficult to model, and a simulation may be a valid way of exploring it. This may just be the implementation of a mathematical model, for example a Monte Carlo simulation, but I have also found myself building dynamic visual models of complex interactions.</p>
<h3>To prove my ideas</h3>
<p>Part of the value I bring to professional engagements is experience or knowledge of a range of architectural solutions, and the willingness to invoke unusual approaches if I think they are a good fit to a challenge. However it&#8217;s not unusual to find that other architects or developers are resistant to less traditional approaches, or those outside their comfort zones. Models and PowerPoint can go only so far in such situations, and a working proof of concept can be a very persuasive tool. Conversely, if I find that it isn&#8217;t as easy or as effective as I&#8217;d hoped, then &#8220;prove&#8221; takes on its older meaning of &#8220;test&#8221; and I may be the one being persuaded. I&#8217;m a scientist, so that&#8217;s fine too.</p>
<h3>To prove or assess a technology</h3>
<p>Related to the last, I have found by hard-won experience that vendors consistently overstate the capabilities of their solutions, and a quick proof of concept can be very powerful in confirming or refuting a proposed solution, establishing its limitations or narrowing down options.</p>
<p>A variant on this is where I need to measure myself, or others, for example to calibrate what might or might not be adequate productivity in a given situation.</p>
<h3>To prove I can</h3>
<p>While I am sceptical of overstated claims, I am equally suspicious if I think something should be achievable, and someone else says &#8220;that&#8217;s not possible&#8221;. Many projects both professional and personal have started from the assertion that &#8220;X is impossible&#8221;, and my disbelief in that. I get a great kick from bending technology to my will. To quote Deep Purple&#8217;s famously filthy song, Knocking At Your Back Door, itself a exploration into the limits of possibility (with censorship), &#8220;It&#8217;s not the kill, it&#8217;s the thrill of the chase.&#8221;.</p>
<p>In the modern world of agile development processes, architect and analyst roles are becoming blurred with that of &#8220;developer&#8221;. I have always straddled that boundary, and proving my development abilities my help my credibility with development teams, allowing me to engage at a lower level of detail when necessary. My ability to program makes me a better architect, at the same time as architecture knowledge makes me a better programmer.</p>
<h3>To make money?</h3>
<p>Maybe. If a development activity can help to sell my skills, or advance a client&#8217;s project, then it&#8217;s just part of my professional service offering, and on the same commercial basis as the rest. That&#8217;s great, especially if I can charge a rate commensurate with the bundle of skills, not just coding. My output may be part of the overall product or solution or a enduring utility, but more often any development I do is merely the means to an end which is a design, proof of concept, or measurement.</p>
<p>On the other hand, quite a lot of what I do makes little or no money. The stuff I build for my own purposes costs me little, but has a substantial opportunity cost if I could use the time another way, and I will usually buy a commercial solution if one exists. The total income from all my app and plugin development over the years has been a few hundred pounds, probably less than I&#8217;ve paid out for related tools and components. This is a &#8220;hobby with benefits&#8221;, not an income stream.</p>
<h3>Because I enjoy it</h3>
<p>This is perhaps the nub of the case: programming is something I enjoy doing. It&#8217;s a creative act, and puts my mind into a state I enjoy, solving problems, mastering technologies and creating an artefact of value from (usually) a blank sheet. It&#8217;s good mental exercise, and like any skill, if you want to retain it you have to keep in practice. The challenge is to do it in the right cases and at the right times, and remember that sometimes I really should be doing something else!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/why-i-still-do-programming/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Perfect is the Enemy of the Good</title>
		<link>https://www.andrewj.com/blog/2017/the-perfect-is-the-enemy-of-the-good/</link>
					<comments>https://www.andrewj.com/blog/2017/the-perfect-is-the-enemy-of-the-good/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 27 Feb 2017 10:40:37 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Myanmar Travel Blog]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Travel]]></category>
        <media:thumbnail height="120" url="/photoblog/2017/thumbs/170211_GX8_1070834.jpg" width="79"/><media:content height="550" url="/photoblog/2017/slides/170211_GX8_1070834.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1986</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/170211_GX8_1070834.html"><img src="/photoblog/2017/slides/170211_GX8_1070834.jpg"/></a>The Perfect is the Enemy of the Good. I&#8217;m not sure who first explained this to me, but I&#8217;m pretty sure it was my school metalwork teacher, Mr Bickle. Physically and vocally he was a cross between Nigel Green and &#8230; <a href="https://www.andrewj.com/blog/2017/the-perfect-is-the-enemy-of-the-good/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2017/slides/170211_GX8_1070834.html"><img src="/photoblog/2017/slides/170211_GX8_1070834.jpg"/></a><p><em>The Perfect is the Enemy of the Good</em>. I&#8217;m not sure who first explained this to me, but I&#8217;m pretty sure it was my school metalwork teacher, Mr Bickle. Physically and vocally he was a cross between Nigel Green and Brian Blessed, and the rumour that he had been a Regimental Sergeant Major during the war was perfectly credible, especially when he was controlling a vast playing field full of chatty children without benefit of a bell or megaphone. However behind the forbidding exterior was a kindly man and a good teacher. When my first attempt at enamel work went a bit wrong, and some of the enamel ended up on the rear of the spoon, I was very upset. He kindly pointed out that it was still a good effort, and the flaw &quot;added character&quot;. My mother, another teacher, agreed, and the spoon is still on her kitchen windowsill 45 years later.</p>
<p>I learned an important lesson: things don&#8217;t need to be perfect to be &quot;good enough&quot;, and it&#8217;s better to move on and do something else good than to agonise over imperfections. </p>
<p>I also quickly found that this is a good exam strategy: 16/20 in all five questions is potentially top marks, whereas 20/20 in one and insufficient time for the others could mean a failure. The same is true in some (not all) sports: the strongman who is second in every event may go home with the title.</p>
<p>Later, in my training as a physicist and engineer, I learned a related lesson. There&#8217;s no such thing as an exact measurement or a perfectly accurate construction. I learned to think in terms of errors, variances and tolerances, and to understand their net effect on an overall result. When in my late 20s I did some formal Quality Management training the same message emerged a different way: in industrial QA you&#8217;re most interested in ensuring that all output meets a defined, measureable standard, and the last thing you want is an individual perfectionist obstructing the process.</p>
<p>Seeking perfection can easily lead to a very low (if high quality) output, and missed opportunities. It also risks absolute failure, as perfectionists often have no &quot;Plan B&quot; and limited if any ability to adapt to changing circumstances. &quot;Very good&quot;, on the other hand, is an easy bedfellow with high productivity and planning for contingencies and changes.</p>
<p>I adopt this view in pretty much everything I do: professional work, hobbies, DIY, commercial relationships, entertainment. I hold myself and others to high standards, but I have learned to be tolerant of the odd imperfection. This does mean living with the occasional annoying wrinkle, but I judge that to be an acceptable compromise within overall achievement and satisfaction. Practice, criticism (from self and others) and active continuous improvement are still essential, but I expect them to make me better, not perfect.</p>
<p>The trick, of course, is to define and quantify what is &quot;good enough&quot;. I then expect important deficiencies against such a target to be rectified promptly, correctly and completely. In my own work, this means allowing some room for change and correction, whether it&#8217;s circulating an early draft of a document to key reviewers, or making sure that I can easily reach plumbing pipework. If something must be &quot;set in stone&quot; then it has to be right, and whatever early checks and tests are possible are essential, but it&#8217;s much better to understand and allow for change and adjustment. </p>
<p>In the work of others, it means setting or understanding appropriate standards, and then living by them. After I had my car resprayed, I noticed a small run in the paint on the bonnet. Would I prefer this hadn&#8217;t happened? Yes. Does it prevent me enjoying my unique car and cheerfully recommending the guys who did the work? No. Professionally I can and will be highly critical of sloppy, incomplete or inaccurate work, but I will be understanding of odd errors in presentation or detail, providing that they don&#8217;t affect the overall result or number too many (which is in turn another indicator of poor underlying quality).</p>
<p>So why have I written this now, why have I tagged it as part of my Myanmar photo blog, and why is there a picture of the Buddha at the top? In photography, there are those who seek to create a small number of &quot;perfect&quot; images. They can get very upset if circumstances prevent them from doing so. My aim is instead to accept the conditions, get a good image if I can, and then move on to the next opportunity. At the Pa-Hto-Thar-Myar Pagoda I (stupidly) arrived without my tripod, and had to get the pictures resting my camera on any convenient support using the self timer to avoid shake, in this case flat on its back on my camera bag on the temple floor. Is this the best possible image from that location? Probably not. Am I happy with it? Yes, and if I have correctly understood Buddhist principles, I think the Buddha would approve as well.</p>
<p>It is in humanity&#8217;s interest that in some fields of artistic endeavour, there are those who seek perfection. For the rest of us, perfection is the wrong target.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/the-perfect-is-the-enemy-of-the-good/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Software Design Decoded</title>
		<link>https://www.andrewj.com/blog/?bookreview=software-design-decoded</link>
					<comments>https://www.andrewj.com/blog/?bookreview=software-design-decoded#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 07 Feb 2017 07:57:09 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1937</guid>
                    <description><![CDATA[This is a delightful little book on the perennial topic of how a software architect should think and behave. While that subject seems to attract shorter books, this one is very concise – the main content is just 66 two-page &#8230; <a href="https://www.andrewj.com/blog/?bookreview=software-design-decoded">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>This is a delightful little book on the perennial topic of how a software architect should think and behave. While that subject seems to attract shorter books, this one is very concise – the main content is just 66 two-page spreads, with a well-chosen and often thought-provoking illustration on the left, and a couple of paragraphs on the right.  However just as with <em>The Elements of Style</em>, brevity indicates high value: this book provides the prompt, the detail can be elsewhere.</p>
<p>The book should be valuable to many: If you want to be an expert software designer, this book provides an overview of the skills and knowledge you need to develop. If you want to recruit such a person, this provides a set of key indicators and interview prompts. If you are in one of those software development organisations which believes that quality architecture can somehow emerge by magic from the unguided work of undifferentiated coders, this might make you think again.</p>
<p>If you are, or think you are, a software architect, this book should act in the same way as a good sermon: it will remind you of what already know you should be doing, and act as a prompt against which you can measure your own performance and identify areas for improvement. It reminded me that I can sometimes be slow to listen to the views of others, or evidence which may change a design, and slow to engage with new technologies, and I will try to act on those prompts.</p>
<p>This book resolutely promotes the value of modelling in software design. Formal models and analysis have their place, but so do informal models, sketches, and ad-hoc notation. The key point is to externalise ideas so that they can be shared, refined and &#8220;tested&#8221; in the cheapest and most effective of ways, on paper or a whiteboard. We are reminded that all these are hallmarks of true expert software designers. Code has its place, to prove the solution or explore technicalities, but it is not the design.</p>
<p>The book also promotes the value of richness in these representations. Experts should explore and constantly be aware of alternatives, and model the solution at different levels of abstraction, in terms of both static and dynamic behaviours. Continuous assessment means not only testing, but simulation. If required, the expert should build his or her own tools. While solving simple problems first is a good way to get started, deep, early understanding of the problem space is essential, and experts must understand the whole context and landscape well enough to make and articulate design prioritisations and trade-offs.</p>
<p>I thoroughly recommend this book. It may seem slight, but it delivers a powerful reminder on the process of design, and the necessary, different thought processes to succeed with it.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/?bookreview=software-design-decoded/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Dozy Android</title>
		<link>https://www.andrewj.com/blog/2017/dozy-android/</link>
					<comments>https://www.andrewj.com/blog/2017/dozy-android/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 22 Jan 2017 08:35:04 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1920</guid>
                    <description><![CDATA[I&#8217;ve just spent a good couple of hours sorting out a problem with my new phone, which has no good reason to exist. In fairness to Sony, it&#8217;s nothing to do with them: the issue sits squarely with Google and &#8230; <a href="https://www.andrewj.com/blog/2017/dozy-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just spent a good couple of hours sorting out a problem with my new phone, which has no good reason to exist. In fairness to Sony, it&#8217;s nothing to do with them: the issue sits squarely with Google and yet another &quot;improvement&quot; to Android which turns out to be nothing of the sort.</p>
<p>A watch-based alarm doesn&#8217;t work very well for me – my hearing is just not good enough. Seeking to reduce the amount of gadgets I carry, I have therefore for many years relied on phones and their PDA predecessors to fulfil the function of alarm clock, especially when I&#8217;m travelling. It&#8217;s not a difficult role, and I have not had to complain about it. Until now.</p>
<p>In my normal weekly cycle I don&#8217;t have much need for a clock as I wake naturally at about the right time each day. This makes the operation of such a function even more critical, as it has to be absolutely reliable on days which are exceptions, and I don&#8217;t get much opportunity to do much advance &quot;testing&quot; of what I assume is something that should &quot;just work&quot;. However, I do have the alarm set every day when I&#8217;m working away from the home, and although I couldn&#8217;t be absolutely sure I was coming to suspect that it wasn&#8217;t going off at the right time. The first couple of times I assumed &quot;user error&quot;: incorrect settings, volume too low etc., but I had eventually eliminated those, and confirmed the behaviour: the alarm didn&#8217;t go off at the programmed time. It went off after I had woken up and clicked the button to wake up my phone&#8217;s screen.</p>
<p>This is about as useful as a chocolate fireguard, and about as welcome as a fart in a spacesuit. </p>
<p>A bit of Googling confirmed that the problem is quite widespread. I&#8217;ve read stories of people with new phones being late for work or missing important appointments. Others describe a similar problem with other programs including not getting notified promptly of night-time messages or similar: potentially quite a problem for those &quot;on call&quot;. Fortunately I caught the problem before it caused me any trouble, but that might not have been the case, as I have an upcoming trip with about 8 flights and several other dawn starts.</p>
<p>The web is full of useless &quot;solutions&quot; like factory resetting the phone, but after eliminating those, I tracked down the cause of the problem. With Android 6 (&quot;Marshmallow&quot;), Google introduced something called &quot;Doze&quot; mode. This is a deep sleep mode which kicks in if the device is at rest, screen off, and no significant ongoing activity like an active data transfer. You know, like it tends to be at night. In this state, the system not only slows down processing, but also suspends the bulk of normal background activity. This includes, for no articulated good reason, suspending timers and related event triggers. So your alarm application doesn&#8217;t know what time it is, and doesn&#8217;t fire. Your messaging app doesn&#8217;t know when to poll for incoming events. Simple, core functions of your smartphone just cease to work.</p>
<p>Allegedly, if you change the code of your alarm or other app to use a &quot;different kind&quot; of timer, that should work, but after testing four or five I concluded that this is just not true, certainly on my phone. In any case, I usually just use the stock Android &quot;clock&quot; app, and surely they would have remembered to update that, wouldn&#8217;t they? You can also nominally turn off Doze for selected applications, but as far as I can see it makes bugger all difference.</p>
<p>It turns out that the root problem is that in at least some Android 6 implementations, Doze mode actually disables the underlying operating system events on which the other timers are based. It doesn&#8217;t matter how sexy your alarm app is, or whether Doze knows about it or not, if the underlying timers are blocked!</p>
<p>There&#8217;s a heap of advice on the web about how to disable Doze for individual apps (tried that, doesn&#8217;t work), but not about how to disable it completely. I&#8217;d tried all sorts of settings without success. However I finally found a useful little app called <a href="https://play.google.com/store/apps/details?id=de.geroo.disabledoze&amp;hl=en_GB" target="_blank">Disable Doze</a>, which does what it says on the tin, and turns Doze off completely. Allegedly (according to Google) this would result in my phone discharging its battery at a terrifying&#160; rate and ending up doing a Galaxy Note 7 impersonation, but I can confirm that with Doze off in light use my phone is still only consuming about 10% battery per day. The only noticeable effect so far is that alarms and notifications work again.</p>
<p>My worry is that until Google acknowledge their mistakes, they may come up with another &quot;improvement&quot; which disables this fix. I don&#8217;t know what tests Google perform in this area, but they are clearly inadequate. This really is a &quot;0 out of 10&quot; effort, a true &quot;breaking change&quot;.</p>
<p>However for now things are looking good, and hopefully this blog will help alert others to the problem and the fix.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2017/dozy-android/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Form vs Function &#8211; a Tail :) of Three Mice</title>
		<link>https://www.andrewj.com/blog/2016/form-vs-function-a-tail-of-three-mice/</link>
					<comments>https://www.andrewj.com/blog/2016/form-vs-function-a-tail-of-three-mice/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 30 Sep 2016 15:36:23 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[PCs/Laptops]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1862</guid>
                    <description><![CDATA[Just in case you think some of my recent posts have been a bit anti-Microsoft, here&#8217;s one in which (spoiler alert!) they win! Call me old-fashioned, but I very much prefer using a mouse to a trackpad or its relatives, &#8230; <a href="https://www.andrewj.com/blog/2016/form-vs-function-a-tail-of-three-mice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Just in case you think some of my recent posts have been a bit anti-Microsoft, here&#8217;s one in which (spoiler alert!) they win!</p>
<p>Call me old-fashioned, but I very much prefer using a mouse to a trackpad or its relatives, and since my earliest experiences with Windows 3.0, I&#8217;ve tended to go for Microsoft mice by preference. Over the years they gained additional buttons and a wheel, lasers replaced the ball, and wireless connections replaced wires, but the core ergonomics and functionality have been maintained and gradually improved. About 2005 this resulted in the Microsoft wireless mouse, of which we have had several, colour matched to different PCs.</p>
<p>However when I started using a MacBook as my primary PC, I had a couple of challenges with this strategy. Firstly, while it may be pure vanity I like to have a mouse which visually matches my laptop, and the somewhat &#8220;chunky&#8221; Microsoft options didn&#8217;t really float my boat. More importantly with the limited set of ports on a MacBook I couldn&#8217;t afford to tie up a USB port with the mouse or (worse) risk damaging one if I forgot to unplug the wireless dongle, something I have experienced on other PCs. As the MacBook runs with BlueTooth and internal wireless permanently powered on, a BlueTooth solution seemed sensible.</p>
<p>A visit to PC World didn&#8217;t reveal many options. Apart from the Apple mouse (the ergonomics of which I don&#8217;t particularly like) most mice seemed to be either wired, WiFi based and/or very chunky. Then I discovered the HP Z5000, an elegant thin white slab, with BlueTooth, two buttons and a wheel. Great!</p>
<p align="center"><img decoding="async" style="max-width: 200px;" src="/images/HPZ5000.jpg"/></p>
<p>Or so I thought&#8230; Time revealed two problems. One is ergonomic: the wheel is the same smooth white plastic as the body, and if your fingers are at all wet or slippery it is completely impossible to scroll accurately. The  other is electronic, with the PC and mouse periodically becoming &#8220;disconnected&#8221; and requiring some random mouse movement or, occasionally, cycling the mouse&#8217;s power to re-establish connectivity. For reasons not immediately apparent, this appears to become worse when working in bright ambient outside light, just the conditions under which you can&#8217;t afford intermittent loss of the mouse&#8217;s position.</p>
<p>After working with these limitations for a year, we finally gave up after our last holiday, and decided enough was enough. Research suggested a new option, in the form of the HP Z8000.</p>
<p align="center"><img decoding="async" style="max-width: 200px;" src="/images/HPZ8000.jpg"/></p>
<p>This is a piece of gorgeous industrial design: a thin black slab edged in brushed aluminium which is a very good match to the MacBook&#8217;s own finish. The top surface is a capacitative touch panel – tap to click the mouse, swipe forward and back to simulate the wheel scrolling normally, or left and right to simulate a horizontal scroll. It also allegedly has much improved power management and connectivity. Wonderful! Well worth the £40+ asking price.</p>
<p>Or so I thought&#8230; To start with there&#8217;s no evidence whatsoever that HP have addressed the connectivity problems. If anything, they are worse. More of an issue is that the touch panel just doesn&#8217;t work very well. If you are very careful and precise with all your movements it&#8217;s just about usable in a program like Microsoft Word. However if the software supports any form of horizontal scrolling (e.g. XnView, or Windows Explorer in &#8220;tile&#8221; mode), then you end up with a working context which jumps about constantly and randomly. With some programs, such as CaptureOne, it becomes almost unusable.</p>
<p>Back to Amazon, and I discover this gem:</p>
<p align="center"><img decoding="async" style="max-width: 200px;" src="/images/MSMouse.jpg"/></p>
<p>Yes, it&#8217;s a Microsoft &#8220;Designer&#8221; BlueTooth mouse. Price about £16, although it does vary. Just a lump of black plastic, although at least it&#8217;s now thin enough to work alongside the MacBook. Textured scroll wheel and two obvious buttons, each with a definite &#8220;action&#8221;. Picks up the control points in CaptureOne without issue. And so far not a single random connectivity problem.</p>
<p>Function trumps form, substance beats style, in mice if not always in men!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/form-vs-function-a-tail-of-three-mice/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Colour Nazis</title>
		<link>https://www.andrewj.com/blog/2016/the-colour-nazis/</link>
					<comments>https://www.andrewj.com/blog/2016/the-colour-nazis/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 21 Sep 2016 09:49:57 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[PCs/Laptops]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1850</guid>
                    <description><![CDATA[Once upon a time, not so long ago, there was a movement obsessed with removing colour, especially those whose skin colour or religious preference was different to their own. This went to great extremes, caused the greatest of all wars, &#8230; <a href="https://www.andrewj.com/blog/2016/the-colour-nazis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Once upon a time, not so long ago, there was a movement obsessed with removing colour, especially those whose skin colour or religious preference was different to their own. This went to great extremes, caused the greatest of all wars, and we are all aware of the terrible atrocities done as a result. It is one of the horrors of our current time that those beliefs, which we thought had been consigned to history, seem to be getting some renewed attention and following.</p>
<p>If faced with political extremism, the predominantly liberal groups who control and shape our technology would typically be horrified and opposed. However at the same time they are forcing on us fashions and design paradigms which in their own way are just as odious, impacting the richness of our experience, and limiting rather than improving our ability to interact with technology.</p>
<p>I refer, of course, to the Colour Nazis. The members of this movement probably don&#8217;t think of themselves that way, and if forced to adopt a label would choose something much more neutral, but it is becoming apparent that some of their thinking is not that different.</p>
<p>This is not the first time I&#8217;ve complained about this. In 2012 I wrote <a title="https://www.andrewj.com/blog/2012/tyranny-of-the-colour-blind/" href="https://www.andrewj.com/blog/2012/tyranny-of-the-colour-blind/" target="_blank" rel="noopener noreferrer">&#8220;Tyranny of the Colour Blind, or Have Microsoft Lost Their Mojo?&#8221;</a>. The trouble is that things are getting worse, not better. Grappling with Office 2016 I&#8217;m coming to grips with some really dramatically stupid decisions which can only be explained by a Nazi zeal to remove the colour from our technological interactions.</p>
<p>Here&#8217;s a quick test. Find Open, Save and the Thesaurus in Office 2003:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/image.png"><img decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://www.andrewj.com/wordpress/wp-content/uploads/image_thumb.png" alt="image" width="216" height="30" border="0" /></a></p>
<p>Now let&#8217;s try Office 2010:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/image-1.png"><img decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://www.andrewj.com/wordpress/wp-content/uploads/image_thumb-1.png" alt="image" width="199" height="32" border="0" /></a></p>
<p>Not too bad. The white background actually helps by increasing contrast, and the familiar splashes of colour still draw your eye quickly to the right icons, although the Thesaurus is a bit anonymous. Now let&#8217;s try Office 2016:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/image-2.png"><img decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://www.andrewj.com/wordpress/wp-content/uploads/image_thumb-2.png" alt="image" width="216" height="29" border="0" /></a></p>
<p>The faded grey on a grey background colour scheme has wiped out most of the contrast, and you&#8217;d be struggling to make these out if you have ageing sight in a poor working environment. The pale pastel yellow of &#8220;Open&#8221; is still just recognisable, but the &#8220;Save &#8221; button has turned to a weird pale purple, and the Thesaurus is completely anonymous. I&#8217;d have to go hunting by hovering over each and reading the tooltip. (Before anyone shouts, I know I&#8217;ve used an add-in menu here to get a like-for-like comparison, but all this is equally true for the full-sized ribbon controls.)</p>
<p>Now let&#8217;s look at a really stupid example. One of Word&#8217;s great strengths is the ability to assemble and review tracked changes from multiple reviewers. In Word 2010 each will be assigned a distinctive colour, and I can very quickly see who&#8217;s who:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/image-3.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://www.andrewj.com/wordpress/wp-content/uploads/image_thumb-3.png" alt="image" width="244" height="72" border="0" /></a></p>
<p>OK that works well. Let&#8217;s see what they&#8217;ve done in Office 2016:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/image-4.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://www.andrewj.com/wordpress/wp-content/uploads/image_thumb-4.png" alt="image" width="244" height="80" border="0" /></a></p>
<p>WTF! One place where colour has a specific role as an information dimension, and they&#8217;ve actually taken it away. In the document the markup does use some colour, but in the form of a few pale pastel lines. Instead the screen is cluttered up with the name of the author against every single change, which makes it unreadable if multiple authors have made changes to a single page.</p>
<p>I am always among the first to remind designers not to <em>rely </em>on colour, as it doesn&#8217;t work well for about 8% of the population, or in some viewing conditions. But that&#8217;s no reason to remove it. Instead you should supplement it (e.g. make icons both distinctive colours and shapes), or allow the users a choice. Word 2016 should allow me to choose whether to use colour or explicit names in markup balloons, and I wouldn&#8217;t be having this rant.</p>
<p>There is apparently a name for this fad, &#8220;Complexion Reduction&#8221; (see <a title="https://medium.com/swarm-nyc/complexion-reduction-a-new-trend-in-mobile-design-cef033a0b978#.dsqvykjxb" href="https://medium.com/swarm-nyc/complexion-reduction-a-new-trend-in-mobile-design-cef033a0b978#.dsqvykjxb" target="_blank" rel="noopener noreferrer">Complexion Reduction: A New Trend In Mobile Design</a> by Michael Horton). The problem is that its advocates seem to have lost sight of some key principles of human-computer interaction. One of these is that for normally-sighted people there&#8217;s a clear hierarchy in how we spot or identify things:</p>
<ol>
<li>Colour. If we can look for a splash of colour, that&#8217;s easiest. That&#8217;s why fire extinguishers are red, or the little red coat was so poignant in <em>Schindler&#8217;s List</em>.</li>
<li>Shape / position. We manage a lot of interactions by recognising shapes. That&#8217;s why icons work in the first place. We even do this when the affordance supplies text as well. If you&#8217;re a native English speaker and reader you will inevitably have tried to move a door the wrong way, because &#8220;PUSH&#8221; and &#8220;PULL&#8221; have such similar shapes, and your brain tries shapes first, text second.</li>
<li>Text. When all else fails, read the instructions. That&#8217;s not a joke, it&#8217;s a real fact about how people&#8217;s brains work. If I have to go hunting in a menu or reading tooltips, then the designer has failed miserably.</li>
</ol>
<p>Sadly I don&#8217;t know if there&#8217;s any way to influence this. These decisions are probably being made by ultra-hip youngsters with ironic beards and 20 year old eyes who don&#8217;t really get HCI. I&#8217;d just like one of them to read this blog.</p>
<h3 id="109f" class="graf graf--h3 graf-after--p">Addendum — May 2019</h3>
<p id="dfef" class="graf graf--p graf-after--h3">So the hierarchy for interactions is first colour, then shape, then text.</p>
<p id="1628" class="graf graf--p graf-after--p">So please could someone explain to me why the latest versions of Android have also decided to force almost all application icons into a uniform shape (circular on my Sony phone, a rounded rectangle on my Samsung tablet) with exactly the same background colour?</p>
<p id="b3a4" class="graf graf--p graf-after--p">On my phone, all the main Google apps now have icons which are white circles with tiny splashes of the same four colours. The Sony apps (including the main phone functions) are white circles with small icons, using the same pale blue, within them. To add an extra spice, the launcher I use occasionally moves the icons around, if I add a new front-page app or the labels change.</p>
<p id="7e05" class="graf graf--p graf-after--p graf--trailing">My poor brain has no chance whatsoever. I open my phone, and then have to READ labels to make sure I’m opening the right app. Hopeless!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/the-colour-nazis/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Microsoft : Busy Fixing What Ain&#8217;t Broke</title>
		<link>https://www.andrewj.com/blog/2016/microsoft-busy-fixing-what-aint-broke/</link>
					<comments>https://www.andrewj.com/blog/2016/microsoft-busy-fixing-what-aint-broke/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 29 Aug 2016 07:24:58 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[PCs/Laptops]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1837</guid>
                    <description><![CDATA[There&#8217;s an interesting, but intensely annoying, behaviour by the big software companies, which as far as I&#8217;m aware has no parallel in other areas of production for consumer consumption. We&#8217;ve all been used, since the mid-20th century, to the concept &#8230; <a href="https://www.andrewj.com/blog/2016/microsoft-busy-fixing-what-aint-broke/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s an interesting, but intensely annoying, behaviour by the big software companies, which as far as I&#8217;m aware has no parallel in other areas of production for consumer consumption. We&#8217;ve all been used, since the mid-20th century, to the concept of &quot;planned obsolescence&quot; to make us buy new things. While you might argue that this is not great in terms of use of resources, it&#8217;s accepted by consumers because the new thing is usually <em>better </em>than the old one. There might be the odd annoyance (as captured by <a href="https://www.andrewj.com/blog/2016/weinbergs-new-law-and-the-upgrade-cascade/">Weinberg&#8217;s New Law</a>, on which I&#8217;ve written before), but by and large if I buy a new camera, or car, or TV there are enough definite improvements to justify the purchase and any transition pain. In addition I only usually have to make a change either because the old thing has reached the end of its economic life, or the new thing has a new feature I really want.</p>
<p>It&#8217;s not that way with core software, and especially Microsoft products (although they are not the only offenders). The big software providers continue to foist endless upgrades on us, but I can&#8217;t see any evidence of improvement. Instead I can actually see a lot of what is known in other trades as &quot;de-contenting&quot;, taking away useful capabilities which were there before and not replacing them.</p>
<p>Windows 10 continues to reveal the loss of features which worked well under Windows 7, with unsatisfactory or no replacements. I mourn the loss of the beautiful &quot;aero&quot; features of Windows 7 (with its semi-transparent borders and title bars)&#160; and a number of other stylistic elements, but there are some serious functional omissions as well. I couldn&#8217;t work out why my new laptop kept on trying to latch onto my neighbour&#8217;s Wifi, rather than use my high powered but secure internal service, and discovered that there&#8217;s now no manual mechanism to sort WiFi networks or set preferences. There is, allegedly, a brilliant new automated algorithm which just makes it automatic and no bother to the user. Yeah, right. Dear Microsoft, IT DOESN&#8217;T ***** WORK. Fortunately in the way of these things I&#8217;m not the only one to complain, and literally in the last couple of weeks a helpful Belgian developer has released a tiny utility which replaces the ability to list and manipulate the WiFi networks known to a Windows 10 machine (<a title="https://github.com/Bertware/wlan10" href="https://github.com/Bertware/wlan10" target="_blank">https://github.com/Bertware/wlan10</a>). That&#8217;s great, and the young man will be receiving a few Euros from me, but it shouldn&#8217;t have to be this way. By all means add an automatic sequencer to the new system, but leave the manual mechanism as well.</p>
<p>However, my real object of hate at the moment is Microsoft Office. Since I set up the new MacBook with Windows 10 it&#8217;s never been entirely happy with the combination of versions I want to use: Office 2010, plus Skype for Business 2016. (Well actually I&#8217;d really prefer to use Office 2003, but I&#8217;m over that by now :)) I&#8217;ve had the odd problem before, having to install Visio 2016 because Visio 2010 and Skype/Lync 2016 keep breaking each other. I&#8217;m not sure how that&#8217;s even possible given the &quot;side by side&quot; library architecture which Microsoft introduced with Windows XP, but somehow they managed it, and they clearly don&#8217;t care enough about the old versions to fix the issue.</p>
<p>I could live with that, but a couple of weeks ago more serious problems set it. There was an odd &quot;blip&quot;, and then OneNote just showed blank notebooks with the ominous statement &quot;There are no sections open in this notebook or section group&quot;. That looked like a major disaster, as I rely on OneNote both to organise my work and to-do lists on a daily basis, and as a repository of notes going back well over 10 years. However a quick check online, and on other devices revealed that my data was fine. I lost a good chunk of a working day to trying to fix the problem, including a partial installation of Office 2016 to upgrade to OneNote 2016. That&#8217;s a lot more difficult that it should be, and something Microsoft really doesn&#8217;t want you to do. Nothing worked. By the end of the day I was so messed up I did a system restore to the previous day, hoping that would restore my system state and fix the original problem. At first glance this appeared to fix Office, although OneNote was still showing blank notebooks. However I then had a moment of inspiration and went online to OneDrive.com, and clicked the &quot;edit in OneNote&quot; option. This magically re-synced things, and got my notebooks re-opened on the laptop. Success?</p>
<p>Unfortunately not. Things seemed OK for a few days, but then I started getting odd error messages, and things associated with Outlook and the email system started breaking. Apparently even a complete &quot;System Restore&quot; hadn&#8217;t completely restored the registry, and my system couldn&#8217;t work out which version of Outlook was installed. An office repair did no good, and eventually I decided to bite the bullet and upgrade to Office 2016. Even that wasn&#8217;t trivial, and took a couple of goes but eventually I got there, and my system is now, fingers crossed, stable again.</p>
<p>And that would be fine if Office 2016 was actually a straightforward upgrade from its predecessors, maintaining operational compatibility under a stable user interface, but that&#8217;s where I came in. The look and feel, drained of colour and visual separation, is in my opinion poorer than before but I&#8217;ll probably get used to it. I&#8217;ve got an add-in (the excellent <a href="http://www.ubit.ch/software/ubitmenu-languages/" target="_blank">Ubit Menu</a>) which gives me a version of the ribbon which mimics the Office 2003 menus, and which I also used with Office 2010, so I can quickly find things. But what that can&#8217;t do is fix features which Microsoft have just removed. </p>
<p>Take Outlook for example. I really liked the &quot;autopreview&quot; view on my inbox folders. Show me a few lines of unread emails, so I can both quickly identify them and, importantly, scan the content to decide whether they need to be processed urgently and if any can just be deleted, but hide the preview once I&#8217;ve read them. Brilliant. Gone. I have multiple accounts under the same Outlook profile, which is how Microsoft tell you it&#8217;s meant to work, and in previous versions I could adjust the visual properties of the folder pane at the left so I could see all the key folders at once. Great. Gone. Now I&#8217;m stuck with a stupid large font and line separation which would be great if I was working on a tablet with my fingers and a single mail account, but I&#8217;m not. Dear Microsoft, some people still use a ****** PC and a mouse&#8230; </p>
<p>Or take Word. Previous &quot;upgrade&quot; Office installations carefully preserved the styles in the &quot;Normal&quot; template, so that opening a document in the new version preserved its layout. Not this time. I&#8217;ve had to go through several documents with detail page layouts and check each one. </p>
<p>None of this is a disaster, but it is costing me time and money and it wouldn&#8217;t be necessary if either Microsoft didn&#8217;t keep forcing us to upgrade, or if they made sure to keep backwards compatibility of key features. It&#8217;s also not just a Microsoft problem: Adobe and Apple are equally guilty (witness features lost from recent versions of OSX, or the weird user interface of Acrobat XI). The problem seems to be that the big software companies don&#8217;t seem to have a business model for just keeping our core software &quot;ticking over&quot;, and they confuse change with improvement, which is proving to not be the case now that these systems are functionally mature and already do what people need them to do.</p>
<p>I&#8217;m not sure what the answer is, or even if there is an answer. We can&#8217;t take these products away from the companies, and we don&#8217;t want them to become moribund and abandoned, gradually decaying as changes elsewhere render them unusable. Maybe they need to listen harder to their existing customers, and a bit less to potential &quot;captures&quot;, but I&#8217;m not convinced that&#8217;s going to happen. Let the struggle continue&#8230;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/microsoft-busy-fixing-what-aint-broke/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>Conversion Challenges</title>
		<link>https://www.andrewj.com/blog/2016/conversion-challenges/</link>
					<comments>https://www.andrewj.com/blog/2016/conversion-challenges/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 12 Aug 2016 17:31:32 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1833</guid>
                    <description><![CDATA[I have an interesting challenge, as one of the projects I am working on want to stop their environments to save costs, but I need ongoing access to the data. I have a dump from an Oracle database, but I &#8230; <a href="https://www.andrewj.com/blog/2016/conversion-challenges/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I have an interesting challenge, as one of the projects I am working on want to stop their environments to save costs, but I need ongoing access to the data. I have a dump from an Oracle database, but I need to convert to SQL/Server which is much more portable. The solution looks like an excellent little product from <a href="http://www.convert-in.com" target="_blank">&quot;Intelligent Convertors&quot;</a>, who have a whole suite of these tools. I&#8217;ll try it and let you know how I get on.</p>
<p> <a href="http://www.convert-in.com" target="_blank"><img loading="lazy" decoding="async" border="0" alt="Intelligent Converters - software to convert MS Access, DBF and Oracle databases to MySQL and vice versa, PDF to Word, PDF to HTML, PDF to text" src="http://www.convert-in.com/images/banner150x100.gif" width="150" height="100" /></a></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/conversion-challenges/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>A Bit Stretched!</title>
		<link>https://www.andrewj.com/blog/2016/a-bit-stretched/</link>
					<comments>https://www.andrewj.com/blog/2016/a-bit-stretched/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 30 Jul 2016 06:11:59 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2016/thumbs/160630_GX8_1050691-1050694 Panorama.jpg" width="79"/><media:content height="550" url="/photoblog/2016/slides/160630_GX8_1050691-1050694 Panorama.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1829</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2016/slides/160630_GX8_1050691-1050694 Panorama.html"><img src="/photoblog/2016/slides/160630_GX8_1050691-1050694 Panorama.jpg"/></a>Apologies if there hasn&#8217;t been much activity on the blog lately. I&#8217;m deep into the invention of the expert system I wrote about previously, and that&#8217;s filling the relatively small brain of this bear, and not leaving much space for &#8230; <a href="https://www.andrewj.com/blog/2016/a-bit-stretched/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2016/slides/160630_GX8_1050691-1050694 Panorama.html"><img src="/photoblog/2016/slides/160630_GX8_1050691-1050694 Panorama.jpg"/></a><p>Apologies if there hasn&#8217;t been much activity on the blog lately. I&#8217;m deep into the invention of the expert system I wrote about previously, and that&#8217;s filling the relatively small brain of this bear, and not leaving much space for other creative activities. However, I am gently working on a couple of longer articles I hope to share with you soon.</p>
<p>Meanwhile, I am working here and there to catch up on the photographic backlog. Frances and I had a couple of days in Prague about a month ago, and predictably I took a fair few photographs. What was interesting was the dynamic of the type of shots: I did relatively little close-up or 3D photography, but the opportunity to generate big panoramas positively abounds, especially if, as I did, you get up to the top of several of the towers open to the public. I&#8217;ve recently switched my panoramic development to Kolor&#8217;s Autopano Giga, which coupled with Capture One makes the whole process very quick and painless, effortlessly adjusting and stitching even images taken with a moving camera (moving from the waist, rather than rotating the camera around its optical centre as per correct technique), and those requiring substantial perspective correction.</p>
<p>The attached was taken from a point where the main entrance of the opera house filled the frame, and the two sides stretched away from me down two streets orthogonal to each other. It was also taken late at night, hand-held by available light but the Panasonic GX8 has made a decent job of managing highlights even if the sky does fall away to black. I think it works.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/a-bit-stretched/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Fashion Makes Doing IT Harder</title>
		<link>https://www.andrewj.com/blog/2016/fashion-makes-doing-it-harder/</link>
					<comments>https://www.andrewj.com/blog/2016/fashion-makes-doing-it-harder/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 06 Jul 2016 19:56:13 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1827</guid>
                    <description><![CDATA[I&#8217;m about to start building an expert system. Or maybe I might call it a &#34;knowledge base&#34;, or a &#34;rule based system&#34;. It&#8217;s not an &#34;AI&#34;, as at least in its early life it won&#8217;t have any self-learning capability, but &#8230; <a href="https://www.andrewj.com/blog/2016/fashion-makes-doing-it-harder/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;m about to start building an expert system. Or maybe I might call it a &quot;knowledge base&quot;, or a &quot;rule based system&quot;. It&#8217;s not an &quot;AI&quot;, as at least in its early life it won&#8217;t have any self-learning capability, but will just take largely existing guidance from master technicians, and stick some code behind it to deliver the right advice at the right time. Expert system is a good term, or so I thought&#8230;</p>
<p>It&#8217;s a while since I built a rule engine, and I&#8217;ve never truly designed an expert system before, so I thought it might be a good idea to do some reading and understand the state of the art. That&#8217;s when the the trouble started. My client recommended a book on analysis for knowledge based systems, which I managed to track down for 1p + postage (that should have warned me). I got through most of the introduction, but statements such as &quot;these new-fangled 4GLs might be interesting&quot; and &quot;we don&#8217;t hold with this iterative development malarkey&quot; (I paraphrase slightly, but not much) made me realise that the &quot;state of the art&quot; documented was at least a generation old. The book has a few sound ideas about data structure, but pretty much everything it says about technology or process is irrelevant. </p>
<p>Back on Amazon, and I tried searching for &quot;expert system&quot;, &quot;knowledge base&quot; and &quot;rule based system&quot;. That generates a few hits, but nothing of any substance younger than about 12 years old, nothing on Kindle, and prices varying dramatically between a few pence and the best part of £100, both indications of &quot;this is an old, rare book&quot; and neither tempting me to make a punt. It doesn&#8217;t help that the summaries tend to be a list of technologies I&#8217;ve never heard of, and few seem to be focused on re-usable concepts and techniques.</p>
<p>OK, I thought. There&#8217;s obviously just a new term and I don&#8217;t know it. Wikipedia wasn&#8217;t much help, observing that the term &quot;expert system&quot; has largely gone out of use, and offering two opposing views why. Either expert systems became discredited and no-one does them any longer (I don&#8217;t believe that), or they just became &quot;business as usual&quot; (quite possible, but a good reason why you might write a book about them, not the opposite). No indication of the &quot;modern&quot; term, and few recent references.</p>
<p>Phone a friend. I emailed a couple of friends both of whom are quite knowledgeable in a breadth of IT topics hoping that one of them might say &quot;Oh yes, we now just call them XXX&quot;. Nope. Both suggested AI and one suggested &quot;cognitive computing&quot;, but as I&#8217;ve already observed, that&#8217;s a fundamentally different topic. Beyond that both were just suggesting the same terms I&#8217;d already tried.</p>
<p>Googling a practical question such as &quot;rule based systems in .NET&quot; produces a few hits and suggests that the state of technology support is pretty good. For example, Microsoft put the &quot;Windows Workflow Foundation&quot; into .NET in about 2008, and this includes a powerful rule engine which is perfectly reusable in its own right. So the technology is there, but again there&#8217;s not much general information on how to use it. </p>
<p>This appears to be a case where fashion is getting in the way. If something works, but is not &quot;in&quot;, then authors don&#8217;t want to write about it, and editors don&#8217;t actively commission material. If the &quot;thing&quot; is something where the technology has improved, but not in a &quot;sexy&quot; way, then it goes unreflected in deeper or third party literature. Maybe that explains why Oracle seem driven to rename all their technologies every couple of years, it&#8217;s their way of attracting at least a modicum of interest even if it does confuse the hell out of developers trying to work out what has changed, and what really hasn&#8217;t.</p>
<p>So be it. I&#8217;m going to build a rule-based expert system knowledge base, and I don&#8217;t care if that&#8217;s not the modern term. It&#8217;s just frustrating that no-one seems to have written about how to do this with 2015 technology&#8230;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/fashion-makes-doing-it-harder/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Does Your Broadband Beat a Carrier Pigeon?</title>
		<link>https://www.andrewj.com/blog/2016/does-your-broadband-beat-a-carrier-pigeon/</link>
					<comments>https://www.andrewj.com/blog/2016/does-your-broadband-beat-a-carrier-pigeon/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 06 May 2016 09:35:33 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1825</guid>
                    <description><![CDATA[There&#8217;s a famous quote &#34;never underestimate the bandwidth of a station wagon full of tapes bowling down a highway&#34;. Musing on this I decided to try and estimate the bandwidth of a carrier pigeon, given modern storage technology. According to &#8230; <a href="https://www.andrewj.com/blog/2016/does-your-broadband-beat-a-carrier-pigeon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s a famous quote &quot;never underestimate the bandwidth of a station wagon full of tapes bowling down a highway&quot;. Musing on this I decided to try and estimate the bandwidth of a carrier pigeon, given modern storage technology. According to Wikipedia, a racing pigeon can maintain about 50 miles an hour over moderate distances. So let&#8217;s feed our pigeon, strap a 64GB micro SD card to each leg, and send him from Bristol to London,which should take about 2 hours. </p>
<p>128GB in 2 hours is roughly 1GB/minute, or say 160 Mbps (megabits per second). That&#8217;s about the effective transfer rate for USB 2, and is getting on for Gigabit LAN speed. It&#8217;s about 50 times faster than the best I get from BT Broadband, and probably over 100 times faster than the sustained broadband bandwidth over a week, which is about how long 128GB would take to transfer. Plus remember that that&#8217;s the download speed, and upload is another factor of ten slower&#8230;</p>
<p>Now I would be the first to admit that there are some limitations to the &quot;pigeon post&quot; architecture, especially in terms of range. The latency also precludes chatty protocols. But in terms of sheer transfer bandwidth Yankee Doodle Pigeon has &quot;broadband&quot; beaten hands down!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/does-your-broadband-beat-a-carrier-pigeon/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>My Travel Page</title>
		<link>https://www.andrewj.com/blog/2016/my-travel-page/</link>
					<comments>https://www.andrewj.com/blog/2016/my-travel-page/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 10 Mar 2016 16:03:48 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2016/thumbs/1007_350D_8545.jpg" width="79"/><media:content height="550" url="/photoblog/2016/slides/1007_350D_8545.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1791</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2016/slides/1007_350D_8545.html"><img src="/photoblog/2016/slides/1007_350D_8545.jpg"/></a>Some things don&#8217;t scale. You start off doing something, but before you know it it&#8217;s outgrown its usefulness and needs to change. So it is with website design&#8230; I started off with lists in a couple of places on this &#8230; <a href="https://www.andrewj.com/blog/2016/my-travel-page/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2016/slides/1007_350D_8545.html"><img src="/photoblog/2016/slides/1007_350D_8545.jpg"/></a><p>Some things don&#8217;t scale. You start off doing something, but before you know it it&#8217;s outgrown its usefulness and needs to change. So it is with website design&#8230;</p>
<p>I started off with lists in a couple of places on this site of blogs or albums related to trips I&#8217;ve done. However as the list has grown they were getting a bit unwieldy&#160; and out of step with one another. I have therefore practiced what I preach, and &quot;re-factored&quot; them to a new &quot;index&quot; page, at <a href="https://www.andrewj.com/travel">www.andrewj.com/travel</a> </p>
<p>Take a look, and let me know what you think.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/my-travel-page/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Platform Flexibility &#8211; It&#8217;s Alive!</title>
		<link>https://www.andrewj.com/blog/2016/platform-flexibility-its-alive/</link>
					<comments>https://www.andrewj.com/blog/2016/platform-flexibility-its-alive/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 04 Jan 2016 15:41:44 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1763</guid>
                    <description><![CDATA[The last post, written largely back in November and published just before Christmas suggested that camera manufacturers should focus on opening up their products as development platforms, much as has happened with mobile phones. While I can&#8217;t yet report on &#8230; <a href="https://www.andrewj.com/blog/2016/platform-flexibility-its-alive/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>The last post, written largely back in November and published just before Christmas suggested that camera manufacturers should focus on opening up their products as development platforms, much as has happened with mobile phones. While I can&#8217;t yet report on this happening for cameras, I now have direct experience of exactly this approach in another consumer electronics area. </p>
<p>I decided to replace a large picture frame in my office with a electronic display, on which I could see a rolling presentation of my own images. This is not a new idea, but decreasing prices and improving specs brought into my budget the option of a 40&quot;+ 4K TV, which on the experience of our main TV should be an excellent solution. </p>
<p>New Year&#8217;s Eve brought a trip to Richer Sounds in Guildford. As usual the staff were very helpful and we quickly narrowed down the options to equivalent models from Panasonic or Sony. The Panasonic option was essentially just a smaller version of our main TV, but the colours were slightly &quot;off&quot; and we preferred the picture quality of the Sony. The Panasonic&#8217;s slideshow application is OK, but limited, but the Sony&#8217;s built-app looked downright crude. It looked like a difficult choice, but then I realised that the Sony operating system is something called &quot;AndroidTV&quot; with Google Play support, and promised the option of a more open platform, maybe even development myself. Sold!</p>
<p>In practice, it&#8217;s exactly as I expected. The basic hardware is good, but the Sony&#8217;s default applications beyond the core TV are a bit crude. However a bit of browsing on Google Play revealed a couple of options, and I eventually settled on Kodi, a good open-source media player, which does about 90% of what I want for the slideshow. Getting it running was a bit fiddly, not least because a key picture-handling setting has to be set by uploading a small XML file rather than via the app&#8217;s UI, but after only a bit of juggling it&#8217;s now running well and doing most of what I want.</p>
<p>Beyond that, I can either develop an add-on for Kodi, or a native application for AndroidTV. However as the existing developer community has provided a 90% solution, I&#8217;m not in a great hurry.</p>
<p>I call that a result for platform vs product&#8230;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2016/platform-flexibility-its-alive/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Do We Want Product Development, or Platform Flexibility?</title>
		<link>https://www.andrewj.com/blog/2015/do-we-want-product-development-or-platform-flexibility/</link>
					<comments>https://www.andrewj.com/blog/2015/do-we-want-product-development-or-platform-flexibility/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 22 Dec 2015 07:48:12 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1760</guid>
                    <description><![CDATA[There&#8217;s been a bit of noise recently in the photography blogosphere relating to how easy it is to make changes to camera software, and why, as a result, it feels like camera manufacturers are flat out not interested in the &#8230; <a href="https://www.andrewj.com/blog/2015/do-we-want-product-development-or-platform-flexibility/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s been a bit of noise recently in the photography blogosphere relating to how easy it is to make changes to camera software, and why, as a result, it feels like camera manufacturers are flat out not interested in the feature ideas of their professional and more capable enthusiast users. It probably started with <a href="http://blog.mingthein.com/2015/11/03/how-to-design-mirrorless-right/" target="_blank">this article</a> by Ming Thein, and <a href="http://visualsciencelab.blogspot.co.uk/2015/11/a-popular-blogger-has-written-blog-in.html" target="_blank">this rebuttal</a> by Kirk Tuck, followed by <a href="http://photothunk.blogspot.co.uk/2015/11/product-development.html" target="_blank">this one</a>&#160; and <a href="http://photothunk.blogspot.co.uk/2015/11/ettr.html" target="_blank">this one</a> by Andrew Molitor. </p>
<p>The problem is that my &quot;colleagues&quot; (I&#8217;m not quite sure what the correct collective term is here) are wrong. For different reasons. They are all thinking of the camera as a unitary product, and none of them (even Molitor, who claims to have some experience as a system architect) are thinking as they should, of the camera as a platform.</p>
<p>OK, one at a time, please&#8230;</p>
<p>There are a lot of good ideas in Ming Thein&#8217;s article. A lot of his suggestions to improve current mirrorless cameras are good ones with which I agree. The trouble is that he is trying to design &quot;Ming Thein&#8217;s perfect camera&quot;, and I suspect that it wouldn&#8217;t be mine. For a start it would end up far too heavy, too expensive and with too many knobs!</p>
<p>Kirk Tuck gets, this, and his article is a sensible exploration of trade-offs and how one photographer&#8217;s ideal may be another&#8217;s nightmare. However he paints a picture of flat-lining development which is very concerning, because there are some significant deficiencies in current mainstream cameras which it would be great to address.</p>
<p>Andrew Molitor then picks up this strand, and tries to explain why all camera feature development is difficult, and prohibitively expensive, and why Expose to the Right (ETTR) is especially difficult. Set aside that referring to Michael Reichmann as &quot;a pundit&quot; is unkind and a considerable underestimation of that eminent photographer&#8217;s capabilities, there are several fallacies in Molitor&#8217;s articles. Firstly, it just would not be as difficult as claimed to implement ETTR metering, or any variant of it. It&#8217;s just another metering calculation. If you have a camera with some form of live histogram or overexposure warning, then you can already operate this semi-manually, tweaking down the exposure compensation until the level of clipping is what you want. If you can do it via a predictable process, then that enormously powerful computer you call a digital camera can easily be made to replicate the same quickly and efficiently. That&#8217;s what the metering system does. It&#8217;s even quite likely that the engineers have already done something similar, but hidden it. (Hint: if you have a scene mode called something like &quot;candle-lit interior&quot;, you&#8217;re almost there&#8230;)</p>
<p>I suspect the calculations of grossed-up cost are also fallacious. If that were the case, in a market which manages US sales of only a few tens of thousands of mirrorless cameras per year (for example), we would never get any new features at all. The twin realities are that by combining multiple features into the normal streams of product or major release development, many of the extra costs are amortised, but we also know that the big Japanese electronics companies apply different accounting standards to development of their flagship products. If Molitor&#8217;s argument was correct, we would not see features in each new camera such as a scene mode for&#160; &quot;baby&#8217;s bottom on pink rug&quot; (OK, I made that one up :)) or in-camera HDR, and things like that don&#8217;t seem to be a problem. I simply cannot believe that &quot;baby&#8217;s bottom on pink rug&quot; will generate millions of extra dollars revenue, compared with a &quot;control highlight clipping&quot; advanced metering mode, which would be widely celebrated by almost all equipment reviewers and advanced users.</p>
<p>So assuming that I&#8217;m right, and on-going feature development is both feasible and desirable, where does that leave us?</p>
<p>Ming Thein is not alone in expressing disappointment with the provision of improved features focused for the advanced photographer, and I agree with him that the slow progress is really very annoying. In <a href="https://www.andrewj.com/blog/2013/what-i-want-in-my-next-dslr-progress-report/" target="_blank">my most recent review</a>, I identified several relatively simple features which would be of significant value to the advanced photographer, and which could easily be implemented in the software of any good mirrorless camera without hardware changes, including:</p>
<ol>
<li>Expose to the right or other &quot;automatically control highlight clipping&quot; metering </li>
<li>Optimisation for RAW Capture (e.g. histogram from RAW, not JPG) </li>
<li>Proper RAW-based support for HDR, panoramas, focus stacking and other multishot techniques </li>
<li>Focal distance read-out and hyperfocal focus </li>
<li>Note taking and other content enrichment </li>
</ol>
<p>All of these have been identified requirements/opportunities since the early era of digital photography. Many of them are successfully implemented in a few, perhaps more unusual models. For example the Phase One cameras implement a lot of the focus-related features, the Olympus OM-D E5-II does a form of image stacking for resolution enhancement, and Panasonic have just introduced a very clever implementation of focus bracketing in the GX8 based on a short 4K burst. However by and large the mainstream manufacturers have not made any significant progress towards them.&#160; Even if Molitor&#8217;s analysis is correct, and this is all much more difficult than I expect (despite my strong software development experience) you would think that over time there would be at least some perhaps limited visible progress, but no. If the concepts were really &quot;on the product backlog&quot; (to use the iterative development term), then some would by now have &quot;made the cut&quot;, but instead we get yet more features for registering babies&#8217; faces&#8230;</p>
<p>My guess is that some combination of the following is going on:</p>
<ul>
<li>The &quot;advanced photographer&quot; market is relatively small, and quite saturated. Camera manufacturers are therefore trying to make their mid-range products attractive to users who would previously have bought a cheaper device, and who may well consider just using a phone as an option. To do this, the device needs to offer lots of &quot;ease of use&quot; features. </li>
<li>Marketing and product management groups are focused on the output of &quot;focus groups&quot;, which inevitably generate lowest-common denominator requirements which look a lot like current capabilities. </li>
<li>Manufacturers are fixated on a particular set of use cases and can&#8217;t conceive that anyone would use their products in a different way. </li>
</ul>
<p>The trouble is that this leaves the more experienced photographers very frustrated. The answer is flexibility. By all means offer an in-camera, JPG-only HDR for the novice user, but don&#8217;t fob me off with it – offer me flexible RAW-based multishot support as well. Re-assignable buttons are a good step in the right direction, but they are not where flexibility begins and ends. The challenge, of course, is to find a way to provide this within fixed product cycles and limited budgets.</p>
<p>I think the answer lies with software architecture, and in particular how we view the digital camera. It&#8217;s time for us all, manufacturers and advanced users alike, to stop thinking of the camera as a &quot;product&quot;, and start thinking of it as a &quot;platform&quot;, for more open development. In this model the manufacturer still sells the hardware, complete with basic functionality. Others extend the platform, with &quot;add-ins&quot; or &quot;apps&quot;, which exploit the hardware by providing new ways to drive and exploit its capabilities.</p>
<p>We&#8217;ve been here before. In the early noughties, mobile phone hardware had evolved beyond all recognition (my first mobile phone was a Vodafone prototype which filled one seat and the boot of my Golf GTI, and needed a six-foot whip antenna!) However, you bought your phone from Nokia, for example, and it did what it did. If you didn&#8217;t like the contact management functionality, you were stuck with it. </p>
<p>Then Microsoft, followed more visibly by Apple and eventually Google, broke this model, by delivering a <em>platform</em>, a device which made phone calls, sure, but which also supported a development ecosystem so that some people could develop &quot;apps&quot;, and others could install and use those which met their needs. Contact management functionality is now limited only by the imagination of the developer community. Despite my criticism of some early attempts, the model is now pretty much universal, and I don&#8217;t think I could go back to a model where my phone was a locked-down, single-purpose device.</p>
<p>The digital camera needs to go the same way, and quickly before it is over-run by the phone coming at the same challenge from the other side. Camera manufacturers need to stop thinking about &quot;what other features should we develop for the next camera&quot;, and instead direct themselves to two questions, one familiar and one not. The familiar one is, of course, &quot;how can we make the hardware even better&quot;? The unfamiliar one is &quot;how can we open up this platform so that developers can exploit it, and deliver all that stuff the advanced users keep going on about&quot;?</p>
<p>Ironically, for many manufacturers many of the concepts are in place, just not joined up. The big manufacturers all offer open lens mounts, so that anyone can develop lenses for their bodies. In the case of Panasonic, Olympus and the other micro-four thirds partners it&#8217;s even an open multi-party standard. Panasonic certainly now deliver &quot;platform&quot; televisions with the concept of third party apps. There&#8217;s a healthy community of &quot;hackers&quot; developing modified firmware for Canon and Panasonic cameras, albeit at arms length from and with a slightly ambivalent relationship to the manufacturers. I&#8217;m sure many of those would very much prefer to be working as partners, within an open development model.</p>
<p>So what should such a &quot;platform for extensibility&quot; look like? Assuming we have a high-end mirrorless camera (something broadly equivalent to a Panasonic GX8) to work with as base platform, here are some ideas:</p>
<ol>
<li>A software development kit, API and &quot;app store&quot; or similar for the development and delivery of in-camera &quot;apps&quot;. For example, it should be possible to develop an ETTR metering module, which the user can choose as an optional metering mode (instead of standard matrix metering). This would be activated in place of the standard metering routine, take in current exposure, and return required exposure settings and perhaps some correction metadata. Obviously the manufacturer would have to make sure that any such module returned &quot;safe&quot; values, but in a mirrorless camera it should be very easy to check that the exposure settings are &quot;reasonable&quot; and revert to a default if not. Other add-ins could tap into events such as the completion of an exposure, or could activate functions such as setting focal distance. The API should either be development language-agnostic, or should support a well-known language such as Java, C++ or VB. That would also make it easier to develop an IDE (exploiting Visual Studio or Eclipse as a base), emulators and the like. There&#8217;s no reason why the camera needs an &quot;open&quot; operating system. </li>
<li>An SDK for phone apps. This might be an even easier starting point, albeit with limitations. Currently manufacturers such as Panasonic provide some extended functions (e.g. geotagging) via a companion app for the user&#8217;s phone, but these apps are &quot;closed&quot;, and if they don&#8217;t do what you want, that&#8217;s an end of it. It would be very easy for these manufacturers to open up this API, by providing libraries which other developers can access. My note taking concept could easily be delivered this way. The beauty of this approach is that it has few or no security issues for the camera, and the application management infrastructure is delivered by Google, Apple and Microsoft. </li>
<li>An open way to share, extend and move metadata. Panasonic support some content enrichment, but in an absolutely nonsensical way, as those features only work for JPEG files. What Panasonic appear to be doing is writing to the JPEG EXIF data, but not even copying to the RAW files. The right solution is support for XMP companion files. These can then accompany the RAW file through the development process, being progressively enhanced by different tools, and relevant data will be permanently written to the output JPEG. This doesn&#8217;t have to be restricted to static, human-readable information. If, for example, the ETTR metering module can record the difference between its exposure and the one set by the default matrix method, then this can be used by the RAW processing to automatically &quot;normalise&quot; back to standard exposure during processing. XMP files have the great advantages that they are already an open standard, designed to be extensible and shared between multiple applications, and it&#8217;s pretty trivial to write code to manipulate them, so this route would be much better than opening up the proprietary EXIF metadata structures. </li>
<li>A controllable camera. What I mean by this is that the features of the camera which might be within the scope of the new &quot;apps&quot; must be set via buttons, menus and &quot;continuous&quot; controls (e.g. wheels with no specific set positions), so that they can be over-ridden or adjusted by software. They must not be set by fixed manual switches, which may or may not be set where the software requires. The Nikon DF or the Fuji XT1 may suit the working style of some photographers – that&#8217;s fine – but they are unsuited to the more flexible software environment I&#8217;m envisaging. While I prefer the ergonomics of &quot;soft&quot; controls, in this instance they are also a solution which promotes flexibility, which is what we&#8217;re seeking to achieve here. </li>
</ol>
<p>This doesn&#8217;t have to be done in one fell swoop, and it might not be achieved (or even appropriate) 100% for every camera. That&#8217;s fine. Panasonic, for example, could make a great start by opening up the &quot;Image App&quot; library, which wouldn&#8217;t require any immediate changes to the cameras at all.</p>
<p>So how about it?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/do-we-want-product-development-or-platform-flexibility/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>SharePoint: Simply C%@p, or Really Complicated C%@p?</title>
		<link>https://www.andrewj.com/blog/2015/sharepoint-simply-cp-or-really-complicated-cp/</link>
					<comments>https://www.andrewj.com/blog/2015/sharepoint-simply-cp-or-really-complicated-cp/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 04 Nov 2015 07:32:27 +0000</pubDate>
				<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/?p=1666</guid>
                    <description><![CDATA[There&#8217;s a common requirement for professional users of online document management systems. Sometimes you want to have access to a subset of files offline, with the ability to upload changes when you have finished work and are connected again. Genuine &#8230; <a href="https://www.andrewj.com/blog/2015/sharepoint-simply-cp-or-really-complicated-cp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s a common requirement for professional users of online document management systems. Sometimes you want to have access to a subset of files offline, with the ability to upload changes when you have finished work and are connected again. Genuine professional document management solutions like Open Text LiveLink have been able to do this for years, frequently with a little desktop add-in which presents part of the document library as a pseudo-drive in Windows Explorer.</p>
<p>Microsoft SharePoint can&#8217;t do this. It has never been able to do this, and it still can&#8217;t. Microsoft have worked out that it&#8217;s a requirement, they just seem completely incapable of implementing a usable solution to achieve it, despite the fact that doing so would instantly bridge a significant gap between their online DM solution and their desktop products. </p>
<p>For the first 10 years, they had no solution at all. Then Office 2010 introduced &quot;Microsoft SharePoint Workspace 2010&quot;. This promises, but under-delivers. It can cache <em>all </em>documents in a site into a hidden folder on your PC, and allows access to them through an application which looks a little bit like Windows Explorer, but isn&#8217;t. It&#8217;s very fiddly, and breaks all the rules about how you expect Office apps to work. It&#8217;s also slow and unreliable. Google it, and you find bloggers who usually praise Microsoft products to the skies using words like &quot;excrable&quot;. Despite at least three office releases since 2010, Microsoft don&#8217;t appear to have made any attempt to fix it.</p>
<p>There&#8217;s now an alternative option, in the form of OneDrive for Business. This has a different balance of behaviours. On the upside, you can control where it syncs files so that they do appear in Explorer in a controlled fashion. On the downside, you can only link to a single SharePoint site (not much use if you have a client with multiple sites for different groups), and it still insists on synching all files in bulk, which is not what you want at all. On top of that I couldn&#8217;t get it to authenticate reliably, and was seeing a lot of failed synchronisations leaving my copy in an indeterminate state. There&#8217;s supposed to be a major rewrite in progress, bringing it more inline with the personal version of OneDrive, which works quite well, but no sign of anything useful yet&#8230;</p>
<p>Having wasted enough time on a Microsoft-only solution, I reverted to a solution which does work fairly well, using the excellent <a href="https://www.google.co.uk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0CCEQFjAAahUKEwiN0L2UmvbIAhVI7RQKHXb8Bzo&amp;url=http%3A%2F%2Fwww.2brightsparks.com%2Fsyncback%2Fsbpro.html" target="_blank">Syncback Pro</a>. You have to log in using&#160; Internet Explorer and the &quot;keep me signed in&quot; setting before it will work, but after that it delivers exactly what I want, allowing the selection of an exact subset of files, and the location of the copy on your PC, with intelligent two-way synchronisation. Perfect.</p>
<p>Perfect? Well, sort of. Syncback works very well, but even it can&#8217;t work around some fundamental limitations of SharePoint. The biggest problem is that when SharePoint ingests a file, at resets both the file modified date and the file created date to be the date and time of ingestion! When you export or check the file, it therefore appears to be a changed, later version than the one you uploaded. Proper professional DM systems just don&#8217;t do this, and the Syncback guys haven&#8217;t found a solution. Worse, I discovered that SharePoint process was marking some files as checked in, and therefore visible to other users, and some as still checked out to me, and therefore invisible to others. </p>
<p>The latter is a real problem, since the point of uploading the files is to share them with others. It&#8217;s also very fiddly to fix as SharePoint doesn&#8217;t seem to provide any list of files checked out, and there&#8217;s no mechanism to check files in in bulk – you have to click on each file individually and go through the manual check-in process. </p>
<p>Aha, I thought. Surely Microsoft&#8217;s excellent development tools will allow me to quickly knock up a little utility to search through a site, find the files checked out to me, and programmatically check them in. Unfortunately not. the first red flag was the fact that on a PC with full installations of Office and a couple of versions of Visual Studio, there&#8217;s no installed object model for SharePoint. After a lot of Googling I found a download called the &quot;Office Developer Tools for VS 2013&quot;. I didn&#8217;t think I needed this, given what I already had installed, but ran the installer anyway. This took longer to complete than a full installation of Office or Visual Studio would, and in the process silently closed all my open office apps, losing some work. When it finished I still couldn&#8217;t see the SharePoint objects immediately, but adding a couple of references to my project manually finally worked. Right up to the point where I tried to test run the project, at which point the execution failed on the first line. It appears that these objects are designed to only support development but the code must execute on a server running SharePoint – there&#8217;s no concept of developing a desktop tool remotely interrogating a library.</p>
<p>OK, I thought. What about web services? I remember in the early days of SharePoint I was able to use SOAP web services to access and interrogate it, and I thought the same should still be true. To cut a long story short, that&#8217;s wrong. There&#8217;s no simple listing of the API, and attempting to interrogate services using Visual Studio&#8217;s usually excellent tools failed at the first post, with unresolveable authentication errors. In addition they seem to have moved to a REST API which is fundamentally much more difficult to drive if you don&#8217;t have a clear API listing. A lot of developers seem to be complaining about similar issues. I did find a couple of articles with sample code, but it all seems to be very complicated compared with what I remembered of the original SOAP API.</p>
<p>After wasting a couple of hours on &quot;quickly knocking up a little utility&quot; I gave up, at least for now. Back to the manual check-in method&#8230;</p>
<p>I&#8217;ve never been a fan of SharePoint, but it appears to be betting worse, not better. At least the first versions were simply <a href="mailto:cr@p">cr@p</a>. The new versions are very complicated <a href="mailto:cr@p">cr@p</a>. </p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/sharepoint-simply-cp-or-really-complicated-cp/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Software Utility Cycle</title>
		<link>https://www.andrewj.com/blog/2015/the-software-utility-cycle/</link>
					<comments>https://www.andrewj.com/blog/2015/the-software-utility-cycle/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 30 Sep 2015 16:56:32 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1648</guid>
                    <description><![CDATA[There&#8217;s a well-known model called the &#8220;Hype Cycle&#8221;, which plots how technology evolves to the point of general adoption and usefulness. While there are a lot of detail variants, they all boil down to something like the following (courtesy Wikipedia &#8230; <a href="https://www.andrewj.com/blog/2015/the-software-utility-cycle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s a well-known model called the &#8220;Hype Cycle&#8221;, which plots how technology evolves to the point of general adoption and usefulness. While there are a lot of detail variants, they all boil down to something like the following (courtesy Wikipedia &amp; Gartner):</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/Hype-Cycle.jpg"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="Hype Cycle" src="https://www.andrewj.com/wordpress/wp-content/uploads/Hype-Cycle_thumb.jpg" alt="Hype Cycle" width="365" height="219" border="0" /></a></p>
<p>&nbsp;</p>
<p>While this correctly plots the pattern of adoption of a new technology, it hides a nasty truth, that the &#8220;plateau of productivity&#8221; is not a picture of nice, gentle, continuous, enduring improvement. Eventually all good things must come to an end. Now sometimes what happens is that an older technology is replaced outright by a newer one, and the old one continues in obsolescence for a while, and then withers away. We understand that pattern quite well as well. However, I think we are now beginning to experience another behaviour, especially in the software world.</p>
<p>Welcome to the Software Utility Curve:</p>
<p><a href="https://www.andrewj.com/wordpress/wp-content/uploads/Software-Utility-Curve.jpg"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="Software Utility Curve" src="https://www.andrewj.com/wordpress/wp-content/uploads/Software-Utility-Curve_thumb.jpg" alt="Software Utility Curve" width="535" height="228" border="0" /></a></p>
<p>&nbsp;</p>
<p>We&#8217;re all familiar with the first couple of points on this curve. Someone has a great idea for a piece of software (the &#8220;outcrop of ideas&#8221;). V1 works, just about, and drums up interest, but it&#8217;s not unusual for there to be a number of obvious missing features, or for the number of initial bugs and incomplete implementations to almost outweigh the usefulness of the new concept. Hopefully suitably encouraged and funded, the developers get cracking moving up the &#8220;Escarpment of Error Removal&#8221;. At the same time the product grows new, major features. V2 is better, and V3 is traditionally stable, usefully and widely-acclaimed (the &#8220;Little peak of Usefulness&#8221;).</p>
<blockquote><p>I give you, for example, Windows 3.1, or MS Office 4.0.</p></blockquote>
<p>What happens next is interesting. It seems to be not uncommon that at this point the product is either acquired, or re-aligned by its parent company, or the developers realise that they&#8217;ve done a great job, but at the cost of some architectural dead-ends. Whatever the cause, this is the point of the &#8220;Great Architectural Rewrite Chasm&#8221;. The new version is maybe on a stronger foundation, maybe better integrated with other software, but in the process things have changed or broken. This can, of course, happen more than once&#8230;</p>
<blockquote><p>MS Office 95? Certainly almost every alternative version of Windows (see <a href="https://www.andrewj.com/blog/2010/a-confident-prediction/">my musings on the history and future of Microsoft Windows</a>).</p></blockquote>
<p>The problems can usually be fixed, and the next version is back to the stability and utility of the one at the previous &#8220;Little Peak of Usefulness&#8221;, maybe better.</p>
<p>Subsequent versions may further enhance the product, but there may be emerging evidence of diminishing returns. The challenge for the providers is that they have to change enough to make people pay for upgrades or subscriptions, rather than just soldiering on with an old version, but if the product is now a pretty much perfect fit to its niche there may be nowhere to go. Somewhere around Version 7 or 8, you get a product which is represents a high point: stable, powerful, popular. I call this the &#8220;Peak of Productivity&#8221;.</p>
<blockquote><p>Windows 7. Office 2003. Acrobat 9.</p></blockquote>
<p>Then the rot sets in, as the diminishing returns finally turn negative. The developers get increasingly desperate to find incremental improvements, and start thinking about change for its own sake. Pretty soon they come up with something which may have sounded great in a product strategy meeting, but which breaks compatibility, or the established user experience model, and we&#8217;re into negative territory. The problems may be so significant that the product is tipped into another chasm, not just a gentle downhill trundle.</p>
<blockquote><p>Ladies and Gentlemen, I proudly present to you Microsoft Office 2007. With its ribbon interface which no-one likes, and incompatible file formats. We also proudly announce the Microsoft Chair of Studies into the  working of the list indentation feature&#8230;</p></blockquote>
<p>I&#8217;m not sure where this story ends, but I feel increasing frustration with many of the core software products we all spend much of the day with. MS Office 2010+ is just not as easy to use as in the 2003 version. OK, youngsters who never used anything else may be comfortable with the ribbon, but I&#8217;m not convinced. I&#8217;m not sure I ever asked for the &#8220;improvements&#8221; we have received, but it annoys intensely that we still can&#8217;t easily set the indents in a list hierarchy, save the style, and it stays set. That  said, I have to credit Microsoft with a decent multi-platform solution in Office 365, so maybe there&#8217;s hope. Acrobat still doesn&#8217;t have the ability to cut/paste pages from one document to another, although you can do a (very, very fiddly) drag and drop to achieve the same thing&#8230; And this morning I watched an experienced IT architect struggling with settings in Windows 8, and eventually helped him solve the problem by going to Explorer and doing a right click, Manage, which fortunately still works like it did in Windows NT.</p>
<p>There&#8217;s an old engineering saying: &#8220;If it ain&#8217;t broke, don&#8217;t fix it&#8221;. Sadly the big software companies seem to be incapable of following that sound advice.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/the-software-utility-cycle/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Can No-One Write A Good Book About Oracle SOA?</title>
		<link>https://www.andrewj.com/blog/2015/can-no-one-write-a-good-book-about-oracle-soa/</link>
					<comments>https://www.andrewj.com/blog/2015/can-no-one-write-a-good-book-about-oracle-soa/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 13 Jun 2015 15:41:09 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1596</guid>
                    <description><![CDATA[I&#8217;m frustrated. I&#8217;ve just read a couple of good, if somewhat repetitive, design pattern books: one on SOA design with a resolutely platform-neutral stance, and another on architecting for the cloud, with a Microsoft Azure bent but which struck an &#8230; <a href="https://www.andrewj.com/blog/2015/can-no-one-write-a-good-book-about-oracle-soa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;m frustrated. I&#8217;ve just read a couple of good, if somewhat repetitive, design pattern books: one on SOA design with a resolutely platform-neutral stance, and another on architecting for the cloud, with a Microsoft Azure bent but which struck an admirable balance between generic advice and Microsoft specific examples. </p>
<p>So far so good. However although the Microsoft Azure information may come in handy for my next role, what I really need is some good quality, easy to read guidance on how current generic guidance relates to the Oracle SOA/Fusion Suite. I identified four candidates, but none of them seem worth completing:</p>
<ul>
<li>Thomas Erl&#8217;s <em>SOA Design Patterns</em>. This is very expensive (more than £40 even in Kindle format), gets a lot of relatively poor reviews, and I didn&#8217;t much like the last book I read by the same author. </li>
<li>Sergey Popov&#8217;s <em>Applied SOA Patterns on the Oracle Platform. </em>This is another expensive book, but at least you can read a decent-length Kindle sample. However doing so has somewhat put me off. There are pages upon pages upon pages of front-matter. Do I really want to read about <em>reviewers </em>thanking their mothers for having them before I get to the first real content? Fortunately even with that issue the sample gets as far as an introductory chapter, but this makes two things apparent. Firstly, the author has quite a wordy and academic style, but more importantly he has re-defined the well-established term &quot;pattern&quot; to mean either &quot;design rule&quot; or &quot;Oracle example&quot;, neither of which works for me. However I really parted company when I got to a section which states &quot;&#8230; security &#8230; is nothing more than pure money, as almost no one these days seeks fun in simple informational vandalism&quot;, and then went off into a discussion of development costs. If this &quot;expert&quot; has such a poor understanding of cyber-security it doesn&#8217;t bode well&#8230; </li>
<li>Harish Gaur&#8217;s <em>Oracle Fusion Middleware Patterns.</em> Again, this appears to have redefined &quot;pattern&quot; as &quot;Opportunity to show a good Oracle example&quot;, but that might be valid in my current position. Unfortunately I can&#8217;t tell you much more as the Kindle sample finished in the middle of &quot;about the co-authors&quot;, before we get to any substantive content at all. As it&#8217;s another relatively expensive book with quite a few poor reviews I&#8217;m not sure whether it&#8217;s worth proceeding. </li>
<li>Kathiravan Udayakumar&#8217;s <em>Oracle SOA Patterns. </em>Although only published in 2012, this appears to already be out of print. It has two reviews on Amazon, one at one-star (from someone who did try and read it) and one at three stars (from someone who didn&#8217;t!).</li>
</ul>
<p>In the meantime I&#8217;ve started what looks like a much more promising book, David Chappell&#8217;s <em>Enterprise Service Bus.</em> This appears to be well-written, well-reviewed and reasonably priced. What really attracts me is that he&#8217;s attempted to extend the &quot;Gregorgram&quot; visual design language invented for <em>Enterprise Integration Patterns</em> to service bus architectures, which was in many ways the missing piece from the <em>Service Design Patterns</em> book. Unfortunately the book may be a bit out of date and Java-focused to give me an up-to-date technical briefing, but as it&#8217;s fairly short that&#8217;s not an issue.</p>
<p>After that it&#8217;s back to trying to find a decent book which links all this to the Oracle platform. If anyone would like to recommend one please let me know.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/can-no-one-write-a-good-book-about-oracle-soa/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Cloud Design Patterns</title>
		<link>https://www.andrewj.com/blog/?bookreview=cloud-design-patterns</link>
					<comments>https://www.andrewj.com/blog/?bookreview=cloud-design-patterns#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 13 Jun 2015 08:07:00 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1592</guid>
                    <description><![CDATA[This is a very useful introduction to key cloud concepts and how common challenges can be met. It&#8217;s also a good overview of how Microsoft technologies may fit into these solutions, but avoids becoming so Microsoft-centric that it becomes useless &#8230; <a href="https://www.andrewj.com/blog/?bookreview=cloud-design-patterns">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>This is a very useful introduction to key cloud concepts and how common challenges can be met. It&#8217;s also a good overview of how Microsoft technologies may fit into these solutions, but avoids becoming so Microsoft-centric that it becomes useless in other contexts. Unfortunately, however, the overall structure means that this is not a book designed for easy end to end reading. It may work better as a reference work, but that reduces what should have been its primary value.</p>
<p>The book starts with a good introduction and list of the patterns and supporting &quot;guidance&quot; sections, and is then followed first by the patterns, and then the guidance sections (useful technology primers). This is where things break down a bit, as the patterns are presented in alphabetical order, which means a somewhat random mix of topics, followed by the same again for the guidance sections. I attempted to read the book cover to cover over about a week and I found the constant jumping about between topics extremely confusing, and the constant repetition of common content very wearing. In addition by presenting the guidance material at the end it is arguably of less value as most of the concepts have already been covered in related patterns. Ultimately the differentiation between the two is very arbitrary and not helpful. For example is &quot;throttling&quot; really a pattern or a core concept? If &quot;throttling&quot; is a pattern why is &quot;autoscaling&quot; not described as a pattern?</p>
<p>The book would be about 10 times better if it were re-organised into half a dozen &quot;topics&quot; (for example data management, compute resource management, integration, security&#8230;), with the relevant guidance and overviews first in each topic, followed by the related patterns which could then be stripped of a lot of repetitive content, and topped off with common cross-reference and further reading material.</p>
<p>This is not just a book about cloud specifics. A lot of the material reflects general good practice building and integrating large systems, even for on-premise deployment, and reinforces my view that &quot;Cloud&quot; is just a special case of this established body of practice. As a result there&#8217;s quite a lot of overlap with older pattern books especially <em>Enterprise Integration Patterns</em>, which is also directly referenced. The surprisingly substantial content related to message-based integration, confirms my view that this is still the best model for loosely coupled extended portfolios, but I would have appreciated more on the overlap with service technologies. </p>
<p>The overlap with other standard pattern books might have been managed just by referencing them, but this would play against Microsoft&#8217;s objective of making this material readily available to all readers at low cost.</p>
<p>The book is spectacularly good value for money, especially as you can download it free from Microsoft if you are prepared to do a bit of juggling with document formats. That it forms part of a series also available under similar options is even better. This perpetuates Microsoft&#8217;s tradition of providing cheap, high-quality guidance to developers and sits in sharp contrast with the high costs of comparable works from not only independent publishers (which may be understandable) but other technology vendors.</p>
<p>The book does assume some familiarity with Windows Server concepts, for example worker roles vs machine or application instances, and doesn&#8217;t always explain these terms. A glossary or an clear reference to a suitable external source would have been useful.</p>
<p>At a practical level I&#8217;m pleased to see that the Kindle version works well, with internal links hyperlinked and clear diagrams, plus access to each pattern directly from the menu in the Android Kindle app. Offset against this are a few cases of poor proofreading related to problems with document format conversions, in particular with characters like apostrophes turned into garbage character strings. </p>
<p>Overall I found this a useful book, and I&#8217;m sure it will become a valuable reference work, but I just wish the authors and editors had paid more attention to the high-level structure for those trying to read it like a traditional book.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/?bookreview=cloud-design-patterns/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Things Which Really Bug Me About the Kindle</title>
		<link>https://www.andrewj.com/blog/2015/things-which-really-bug-me-about-the-kindle/</link>
					<comments>https://www.andrewj.com/blog/2015/things-which-really-bug-me-about-the-kindle/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 09 Jun 2015 10:37:35 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1588</guid>
                    <description><![CDATA[I&#160; read a lot using the Kindle applications for Android and PC. While there&#8217;s a lot which is good about that process there are a number of things which really bug me. Some of these look incredibly simple to resolve, &#8230; <a href="https://www.andrewj.com/blog/2015/things-which-really-bug-me-about-the-kindle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#160; read a lot using the Kindle applications for Android and PC. While there&#8217;s a lot which is good about that process there are a number of things which really bug me. Some of these look incredibly simple to resolve, from my standpoint as a competent software developer, and I have to question whether Amazon actually care about getting the user experience right&#8230;</p>
<h3>Changing Font Size</h3>
<p>The current behaviour of the font selection option is completely brain-dead, especially when switching between documents. Suppose I open one book which has been composed using a large base font. The text comes up very large and I set my font size to 2. I then open a second book, which has been composed using a smaller base font, and I have to change the font setting to 4 to get back to a size I&#8217;m comfortable with. Open the first document and the text is now enormous!</p>
<p>The application should actually work as follows. I would set a preferred font face and size and that would just be used automatically for all the bulk text in all documents. Anything styled with style tags like normal,&#160; body text,&#160; list,&#160; should <em>just use my selected font and size. Automatically</em>. Paragraphs with heading styles would use progressively larger fonts, and the style might change to an author preference, although I should be able to over-ride that.</p>
<p>If that&#8217;s not possible, although I really don&#8217;t understand why not, then any change I make to my settings should apply only for a single document, and my settings for each document should be remembered if I switch between them. If I have to set size 2 in one document and size 4 in another to get a consistent reading experience the app should remember that.</p>
<p>Have the developers ever actually used the devices and apps with real eBooks?</p>
<h3>Collections and Tagging</h3>
<p>When,&#160; early on, you have half a dozen books in your Kindle account, the lack of effective library management tools is not too much of an issue. When, like us, that library has grown to several hundred titles this starts to be a major problem.</p>
<p>Amazon allege that the solution is to use collections. That might help, if it weren&#8217;t for another brain-dead implementation. Collections on the physical Kindle are a local data structure, effectively invisible to other devices. In the Android app they are quite a usable feature, and sync with other Android devices, but not other platforms. On the PC you can create local collections, and allegedly import collections from physical Kindles (although I haven&#8217;t got that to work) but the collections are then completely independent of all other devices.</p>
<p>Is this really the best that can be achieved by one of the leading cloud services companies? Surely it&#8217;s not rocket science to come up with an architecture for collections / lists and tags, which is synchronised with the cloud account from and to all devices on the account? (And I note that there can&#8217;t possibly be any real technical issue, because notes and highlights synchronise perfectly across all my devices&#8230;)</p>
<p>Again, this looks like the developers are either stupid, or lazy, or completely indifferent to the implications of their substandard work.</p>
<h3>Book Descriptions</h3>
<p>If you are reading a book on the Kindle, you can quickly pop up some key descriptive details. Relatively recently Amazon have supported the same feature in the Android app, although it doesn&#8217;t work for books which aren&#8217;t open. On the PC it&#8217;s not supported at all.</p>
<p>There are three sets of books for which I would like to be able to quickly access descriptive details, ideally on- and off-line:</p>
<ul>
<li>Books I have downloaded to my device, but which I&#8217;m not currently reading </li>
<li>Books in my archive, to remember which is which </li>
<li>Books which are being recommended by Amazon within my mobile reading experience, e.g. the recommendations panel on the home page of the Kindle app. </li>
</ul>
<p>No, I do <em>NOT </em>want to &quot;view in store&quot;, especially if it&#8217;s a book I&#8217;ve already downloaded and I&#8217;m just not 100% which is which from the cover image, and I&#8217;m offline. And I don&#8217;t really want to have to open up a book to see it&#8217;s description. Surely it wouldn&#8217;t be rocket science (again) to download the key descriptive details for all the books in the above categories at every sync, and have those details available via a long press from the overview pages just like they would be from within an open book?</p>
<h3>Position References</h3>
<p>Some books insist on referring internally by using a page number from the printed edition. If you&#8217;re referring to a specific position in a book in the outside world, this is also still a common practice (and probably the only viable one unless the book has quite a fine-grained and well-numbered heading structure). Kindle insists on referring to and navigating locations using an internal &quot;position&quot; reference, which not only has zero relationship to the outside world, but can change from time to time depending on font choice and other settings. Therefore unless you have access to the physical edition as well as the eBook, you&#8217;re stuffed. It&#8217;s not even easy if you have a relative reference (e.g. page 200 of 300), because you have to get the calculator out to work out that this is equivalent to &quot;position 3400 of 5393&quot;.</p>
<p>It would undoubtedly be better if authors creating Kindle versions of technical and reference books made sure all internal references were simply hyperlinks to the right point in the document. However I&#8217;m sure Amazon could help as well. How about, for example, holding the page count of the physical edition(s) against the Kindle version, and modifying the &quot;Go To&quot; dialog so that I can specify the target position as a percentage, or as a page number relative to the page count for the physical edition? </p>
<h3>The Back Button</h3>
<p>The physical Kindle and all Android devices have a &quot;back&quot; button, which should take you back steadily through your work contexts, like the back button on a browser. On the Kindle, or the PC app, this behaves as you&#8217;d expect. If you follow a link within a book, then it takes you to a new page, but the back button takes you back to the page you were previously reading. Only when you get back to your first context does it take you right out to the menu. Not on Android. Click on a link to an external source, and the back button takes you back into Kindle at the right point. So far so good. Click on an internal link, and the back button takes you right out of the book. To make matters worse it has now remembered the location you navigated to as your &quot;current&quot; location, so to get back to where you were previously you have to navigate manually. Completely useless, and presumably about 1 line of code to fix properly.</p>
<h3>Conclusions</h3>
<p>I don&#8217;t think I&#8217;m being unreasonable here. Amazon make a vast amount of money out of the Kindle platform, and could make more if it is a sound platform for reference books as well as novels and the like. None of these issues would take a vast amount of effort to fix, just the will to be bothered and do a professional job. Amazon&#8217;s persistent indifference on these points reveals an attitude which bugs me even more than the issues themselves.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/things-which-really-bug-me-about-the-kindle/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Service Design Patterns</title>
		<link>https://www.andrewj.com/blog/?bookreview=service-design-patterns</link>
					<comments>https://www.andrewj.com/blog/?bookreview=service-design-patterns#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 05 Jun 2015 08:48:37 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1585</guid>
                    <description><![CDATA[One of the most influential architecture books of the early 00s was Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf. That book not only provided far and away the best set of patterns and supporting explanations for designers of &#8230; <a href="https://www.andrewj.com/blog/?bookreview=service-design-patterns">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>One of the most influential architecture books of the early 00s was <em>Enterprise Integration Patterns</em> by Gregor Hohpe and Bobby Woolf. That book not only provided far and away the best set of patterns and supporting explanations for designers of message-based integration, but it also introduced the concept of a visual pattern language allowing an architecture (or other patterns) to be described as assemblies of existing patterns. While this concept had been in existence for some time, I&#8217;m not aware of any other patterns book which realises it so well or consistently. The EIP book became very much my Bible for integration design, but technology has moved on an service-based integration is now the dominant paradigm, and in need of a similar reference work.</p>
<p>The <em>Service Design Patterns</em> is in the same series as the EIP book (and the closely related <em>Patterns of Enterprise Application Architecture</em>), and overtly takes the earlier books as a baseline to build an additional set of patterns more directly related to Service-oriented integration. Where the earlier books&#8217; content is relevant, it is just referred to. This helps to build a strong library of patterns, but also actively reinforces the important message that designers of newer integration architectures will do well to heed the lessons of previous generations.</p>
<p>The pattern structure is very similar to the one used in the EIP book, which is helpful. The &quot;Headline&quot; context description is occasionally a bit cryptic, but is usually followed by a very comprehensive section which describes the problem in sufficient detail, with an explanation of why and when alternative approaches may or may not work, and the role of other patterns in the solution. The text can be a little repetitive, especially as the authors try to deliver the specifics of each pattern explicitly for each of three key web service styles, but it&#8217;s well written and easily readable.</p>
<p>This is not a very graphical book. Each pattern usually has one or two explanatory diagrams, but they vary in style and usefulness. I was rather sad that the book didn&#8217;t try to extend the original EIP concept and try to show the more complex patterns as assemblies of icons representing the simpler ones. I think there may be value in exploring this in later work.</p>
<p>One complaint is the difficulty of navigating within the Kindle edition, or in future using it as a reference work. Internal references to patterns are identified by their page number in the physical book, which is of precisely zero use in the Kindle context. In addition the contents structure which is directly accessible via the Kindle menu only goes to chapter level, not to individual patterns. If you can remember which chapter a pattern is in you can get there via the contents section of index, but this is much more difficult than it should be. In other pattern books any internal references in the Kindle edition are hyperlinked, and I don&#8217;t understand why this has not been done here.</p>
<p>To add a further annoyance, the only summary listings of the patterns are presented as multiple small bitmapped graphics, so not easily searchable or extractable for external reference. An early hyperlinked text listing with a summary would be much more useful. Please could the publishers have a look at the Kindle versions of recent pattern books from Microsoft Press to see how this should be done?</p>
<p>A final moan is that the book is quite expensive! I want to get all three books in the series in Kindle format (as well as having the hardcover versions of the two earlier books, purchased before ebooks were a practical reality), and it will cost over £70. This may put less pecunious readers off, especially as there&#8217;s so much front matter that the Kindle sample ends before you get to the first real pattern. That would be a&#160; shame, as the industry needs less experienced designers to read and absorb these messages.</p>
<p>These practical niggles aside, this is a very good book, and I can recommend it.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/?bookreview=service-design-patterns/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Next Generation SOA</title>
		<link>https://www.andrewj.com/blog/?bookreview=next-generation-soa</link>
					<comments>https://www.andrewj.com/blog/?bookreview=next-generation-soa#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 28 May 2015 11:48:03 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1573</guid>
                    <description><![CDATA[This book sets out to provide a concise overview of the current state of, and best practices for, Service Oriented Architecture. While it may achieve that for some managerial readers, it is simultaneously too general for those with more background, &#8230; <a href="https://www.andrewj.com/blog/?bookreview=next-generation-soa">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>This book sets out to provide a concise overview of the current state of, and best practices for, Service Oriented Architecture. While it may achieve that for some managerial readers, it is simultaneously too general for those with more background, and may be too terse for those with less technical understanding.</p>
<p>The authors and editors have clearly set themselves the admirable aim of producing a short and concise overview of the field. Unfortunately in the quest for brevity they have ended up with a terse, dry and dense writing style which is very difficult to read. At times it feels almost like a game of &quot;buzzword bingo&quot;. I frequently had to re-read sentences several times to understand the authors&#8217; intended relationships between the elements, and I&#8217;m a very experienced integration architect.</p>
<p>At the same time, for a book on architecture there are very few explanatory diagrams, wordy descriptions being used instead. To add insult to injury a few low-value diagrams such as one depicting the cycle of interaction between business and IT change drivers are used repeatedly, when once would be enough.</p>
<p>The first chapter provide a overview of service orientation and its key principles, characteristics, goals and organisational implications.&#160; This is followed by a chapter on service definition and composition. Ironically this part of the book is is quite repetitive, but manages to omit some key concepts. There&#8217;s no real concrete explanation of what a service is or does – maybe that&#8217;s taken as read, but a formal definition and some examples would go a long way. Likewise there&#8217;s nothing at this point on basic concepts such as service contracts and self-description, synchronous vs asynchronous operation or security. The second chapter goes into some detail on the idea of service composition but only really deals with the ideal green-field case where functionality can be developed new aligned exactly to business functions.</p>
<p>The following chapter on the SOA manifesto is better, but again doesn&#8217;t recognise the realities of real enterprise portfolios, with legacy systems, package solutions and external elements which must be maintained and exploited, and non-functional priorities which must be met. </p>
<p>Chapter 5 deals with service-related technologies and their potential interactions. This is good, and for me represented the core value of the book, but is crying out for some diagrams to supplement the lengthy text. There are good notes on service definition under Model Driven Service Design, but this key topic should really have been a major section in Chapter 3 in its own right. The statements about technical architecture are rather simplistic, with an overall position of &quot;this is expensive and difficult, or just use the cloud&quot; which is not necessarily right for all organisations. </p>
<p>The next chapter, on business models, is very prescriptive. It is also slightly misleading in some places about the role of IT in transactional services &#8211; such services are delivered by a business unit, possibly but not necessarily enabled by and carried through an IT service. It would be perfectly viable in some cases for specific services to have a manual implementation. This is well explained in the case study, but not here or in the Business Process Management section of the previous chapter.</p>
<p>The final chapter of the main text is a &quot;case study&quot; describing the wholesale transformation of a car rental company through adoption of service, agile and cloud approaches. It feels slightly contrived, especially in terms of its timeline, the preponderance of successes, and the surprising lack of resistance to CIO-led business change. However it fills a useful gap by explaining much better than the technologies chapter how the different technologies and approaches fit together and build on one another.</p>
<p>Appendix A is a taster for the other books in the series. Unfortunately the content is presented as small images which cannot be resized and are almost unreadable in the Kindle version. It has also been &quot;summarized&quot;, with the result that it appears to add very little meaningful detail to what has already been said.</p>
<p>Appendix B is a useful expansion of the main text regarding organisational preparation, maturity levels and governance for SOA. I would personally have been tempted to merge the first two parts to the main text rather than positioning them as an appendix, where they are necessarily repetitive of some material which has already been read.</p>
<p>Appendix C is another taster for one of the other books in the series, this time with an overview of cloud computing. While this is at a fairly high level, it&#8217;s a useful and well-written overview for those unfamiliar with the concepts.</p>
<p>Overall this is a frustrating book. There is some good material, but missing key &quot;reality checks&quot; and presented in a terse, text-heavy style which makes it harder to read than it should be.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/?bookreview=next-generation-soa/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Lotsa Changes!</title>
		<link>https://www.andrewj.com/blog/2015/lotsa-changes/</link>
					<comments>https://www.andrewj.com/blog/2015/lotsa-changes/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 14 May 2015 14:18:59 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1550</guid>
                    <description><![CDATA[I’ve taken advantage of a bit of spare time to sort out our web sites, and in particular fix a few things which didn’t work quite right after our enforced emergency upgrade in February. Hopefully you should see everything working &#8230; <a href="https://www.andrewj.com/blog/2015/lotsa-changes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I’ve taken advantage of a bit of spare time to sort out our web sites, and in particular fix a few things which didn’t work quite right after our enforced emergency upgrade in February.</p>
<p>Hopefully you should see everything working properly now, but let me know if not. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/263a.png" alt="☺" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>AgileArchitect.org has had the most significant makeover, and is now fully responsive and mobile-friendly, just like our other sites.</p>
<p>Happy browsing!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/lotsa-changes/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Normal Service Being Resumed</title>
		<link>https://www.andrewj.com/blog/2015/normal-service-being-resumed/</link>
					<comments>https://www.andrewj.com/blog/2015/normal-service-being-resumed/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 28 Feb 2015 09:02:18 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1529</guid>
                    <description><![CDATA[Apologies to all for the interruption to our websites and email service around last weekend. My server was hacked and used to launch DDoS attacks, and had to be taken offline and rebuilt with the latest software versions. Fortunately I &#8230; <a href="https://www.andrewj.com/blog/2015/normal-service-being-resumed/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Apologies to all for the interruption to our websites and email service around last weekend. My server was hacked and used to launch DDoS attacks, and had to be taken offline and rebuilt with the latest software versions. Fortunately I only really use it to host the websites and our email endpoint, so it was a nuisance rather than a disaster. There’s a lesson that all servers need to be constantly patched and updated, and I’ll now have to either work out how to do this in the Linux environment, or switch to Windows which I understand a bit better.</p>
<p>If you did have an email bounced, please feel free to re-send. And if you do meet someone who hacks other people’s servers, feel free to give him a kick for me.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/normal-service-being-resumed/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Efficient Fuzzy Matching at Word Level</title>
		<link>https://www.andrewj.com/blog/2015/efficient-fuzzy-matching-at-word-level/</link>
					<comments>https://www.andrewj.com/blog/2015/efficient-fuzzy-matching-at-word-level/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 16 Jan 2015 14:46:45 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1517</guid>
                    <description><![CDATA[I&#8217;ve just solved a tricky problem with what I think is quite an elegant solution, and thought it would be interesting to share it. I&#8217;m building a system in which I have to process fault data. Sometimes this comes with &#8230; <a href="https://www.andrewj.com/blog/2015/efficient-fuzzy-matching-at-word-level/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just solved a tricky problem with what I think is quite an elegant solution, and thought it would be interesting to share it.</p>
<p>I&#8217;m building a system in which I have to process fault data. Sometimes this comes with a standard fault code (hallelujah!), but quite often it comes with the manufacturer&#8217;s own fault code and a description which may (or may not) be quite close to the description against one of the standard faults. If I can match the description up, I can treat the fault as standard.</p>
<p>The problem is that the description matching is not exact. Variations in punctuation are common, but the wording can also change so that, for example, &#8220;Evaporative emission system incorrect purge flow&#8221; in one system is &#8220;Evaporative emission <em>control </em>system incorrect purge flow&#8221; in another. To a human reader this is fine, but eliminates simplistic exact matching.</p>
<p>I spent some time Googling fuzzy matching, but most of the available literature focuses on character or even bit-level matching and looks both complex and compute-intensive. However finally I found the <b>Jaccard similarity coefficient</b>. This is designed for establishing the &#8220;similarity&#8221; between two objects with similar lists of attributes, and I had a &#8220;lights on&#8221; moment and realised I could apply a similar algorithm, but to the set of words used in the pair of descriptions.</p>
<p>The algorithm to calculate the coefficient for a given pair is actually very simple:</p>
<ol>
<li>Convert Text1 to a list of words/tokens, excluding spaces and punctuation. In VB.NET the string.split() function does this very neatly and you can specify exactly what counts as punctuation or white space. For simplicity it&#8217;s a good idea to convert both strings to uppercase to eliminate capitalisation variations.</li>
<li>Convert Text2 to a list of tokens on the same basis.</li>
<li>For each token from Text1, see if it appears in the list of tokens from Text2. If so, increment a counter M</li>
<li>For each token from Text2, see if it appears in the list of tokens from Text1. If so, increment M</li>
<li>Calculate the coefficient as M / (total number of tokens from both lists)</li>
</ol>
<p>This produces a very intuitive result: 1 if the token sets are an exact match, 0 if they are completely disjoint, and a linearly varying value between. The process does, however, ignore transpositions, so that &#8220;Fuel rail pressure low&#8221; equates to &#8220;Fuel rail low pressure&#8221;. In my context this matches what a human assessor would do.</p>
<p>Now I simply have to repeat steps 2-5 above for each standard error description, and pick the one which produces the highest coefficient. If the value is below about 80% I treat the string as &#8220;matched&#8221;, and I can quote the coefficient to give a feel for &#8220;how good&#8221; the match is.</p>
<p>Hopefully that&#8217;s useful.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2015/efficient-fuzzy-matching-at-word-level/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>More Panoramas!</title>
		<link>https://www.andrewj.com/blog/2014/more-panoramas/</link>
					<comments>https://www.andrewj.com/blog/2014/more-panoramas/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 17 Dec 2014 06:54:15 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2014/thumbs/0913_550D_3423-3426 Panorama Medium.jpg" width="79"/><media:content height="550" url="/photoblog/2014/slides/0913_550D_3423-3426 Panorama Medium.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1504</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2014/slides/0913_550D_3423-3426 Panorama Medium.html"><img src="/photoblog/2014/slides/0913_550D_3423-3426 Panorama Medium.jpg"/></a>The astute among you will have noticed that I place a random panorama in the masthead of all my web site pages. I&#8217;ve just refreshed my album with a number of new images, which I hope you&#8217;ll enjoy. <a href="https://www.andrewj.com/blog/2014/more-panoramas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2014/slides/0913_550D_3423-3426 Panorama Medium.html"><img src="/photoblog/2014/slides/0913_550D_3423-3426 Panorama Medium.jpg"/></a><p>The astute among you will have noticed that I place a random panorama in the masthead of all my web site pages. I&#8217;ve just refreshed my album with a number of new images, which I hope you&#8217;ll enjoy.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/more-panoramas/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Caught by The Law!</title>
		<link>https://www.andrewj.com/blog/2014/caught-by-the-law/</link>
					<comments>https://www.andrewj.com/blog/2014/caught-by-the-law/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 18 Jul 2014 14:07:00 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[PCs/Laptops]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1416</guid>
                    <description><![CDATA[Don&#8217;t get too excited. Those of you hoping to see me carted off in manacles and an orange jumpsuit will be sadly disappointed&#8230; No, the law to which I refer is Moore&#8217;s Law, which states effectively, if you need reminding, &#8230; <a href="https://www.andrewj.com/blog/2014/caught-by-the-law/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Don&#8217;t get too excited. Those of you hoping to see me carted off in manacles and an orange jumpsuit will be sadly disappointed&hellip;</p>
<p>No, the law to which I refer is Moore&#8217;s Law, which states effectively, if you need reminding, that computing power doubles roughly every eighteen months.</p>
<p>Recently I&#8217;ve been doing some work to model a system in which two sub-systems collaborate by exchanging a very large number of relatively fine-grained web services. (I know, I wouldn&#8217;t have designed it that way&hellip;) The two partners disagree about how the system will scale, so it fell to me to do some modelling of the behaviour. I decided to back my analysis up with a practical simulation.</p>
<p>Working in my preferred environment (VB.Net) it didn&#8217;t take long to knock up a web service simulating the server, and a client which could load it up with either synchronous or asynchronous calls on various threading and bundling models. To make the simulation more realistic I decided that the service should wait, with the processing thread under load, for a given period before returning, to simulate the back-end processing which will occur in reality. The implementation should be simple: note the time when the service starts processing, set up the return structures and data required by my simulation, check the time, and then if necessary sit in a continuous loop until the desired total time has elapsed.</p>
<p>It didn&#8217;t work! I couldn&#8217;t get the system to recognise the time taken by the internal processing I had done, which threw out the logic for the loop. Effectively the system was telling me this was taking zero time. The problem turned out to be that I had assumed all processing times should be measured in ms. 5ms is our estimate of the average internal processing time. 6ms is our estimate of the round trip time for the web services. It seemed reasonable to allow a few ms for the processing in my simulation. Wrong! </p>
<p>It turns out that VB.Net now measures time in Ticks, which are units of 100ns, or one tenth of a microsecond. So I rewrote the timing logic to use this timing granularity, but still couldn&#8217;t quite believe the results. My internal processing was completing in approximately 1 Tick, or roughly 10,000 times faster than I expected.</p>
<p>Part of this is down to the fact that my simulation doesn&#8217;t require access to external resources, such as a database, which the real system does. But much of the difference is down to Moore&#8217;s Law. The last time I did something similar was around 10 years ago, and my current laptop must at least 100 times faster.</p>
<p>The moral of the story: beware your assumptions &#8211; they may need a refresh!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/caught-by-the-law/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Webkit, KitKat and Deadlocks!</title>
		<link>https://www.andrewj.com/blog/2014/webkit-kitkat-and-deadlocks/</link>
					<comments>https://www.andrewj.com/blog/2014/webkit-kitkat-and-deadlocks/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 17 Jun 2014 19:34:25 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1408</guid>
                    <description><![CDATA[I don&#8217;t know what provision Dante Alighieri made, but I&#8217;m hoping there&#8217;s a special corner of Hell reserved for paedophiles, mass murderers and so-called engineers from big software companies who think there might ever be a justification for breaking backwards &#8230; <a href="https://www.andrewj.com/blog/2014/webkit-kitkat-and-deadlocks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I don&#8217;t know what provision Dante Alighieri made, but I&#8217;m hoping there&#8217;s a special corner of Hell reserved for paedophiles, mass murderers and so-called engineers from big software companies who think there might ever be a justification for breaking backwards compatibility. I suspect that over the past 10-15 years I have wasted more computing effort trying to keep things working which a big company has broken without providing an adequate replacement, than is due to any other single cause.</p>
<p>The latest centre of incompetence seems to be Google. Hot on the heels of <a href="https://www.andrewj.com/blog/2014/rip-google-currents/">my last moan on the same topic</a>, I&#8217;ve just wasted some more effort because of a major Google c**k-up in Android 4.4.X, AKA KitKat. My new app, Stash-It!, includes a web browser based on the &#8220;Webkit&#8221; component widely used for that purpose across the Android, OSX and Linux worlds. On versions of Android up to 4.3, it works. However when I released it out into the wild I started getting complaints from users running KitKat that the browser had either frozen altogether, or was running unusably slowly.</p>
<p>It took a bit of effort to get a test platform running. In the end I went for a VM on my PC running the very useful <a href="http://www.android-x86.org/" target="_blank">Androidx86</a> distribution (as the Google SDK emulator is almost unusable even when it&#8217;s working), and after a bit of fiddling reproduced the problem. Sometimes web pages would load, sometimes they would just stop, with no code-level indication why.</p>
<p>After various fruitless attempts to fix the problem, I discovered (Google.com still has some uses) that this is a common problem. In their &#8220;wisdom&#8221; Google have replaced the browser component in KitKat with one which is a close relative of the Chrome browser, but seem to have done so without adequate testing or attention to compatibility. There are wide reports of deadlocks when applications attempt any logic during the process of loading a web page, with the application just sticking somewhere inside the web view code. That&#8217;s what was happening to me.</p>
<p>The fix eventually turned out to be relatively simple: Stash-It feeds back progress on the loading of a web page to the user. I have simply disabled this feedback when the app is running under KitKat, which is a slight reduction in functionality but a reasonable swap for getting the app working&hellip; However it&#8217;s cost a lot of time and aggro I could well have done without.</p>
<p>Can anyone arrange a plague of frogs and boils for Google, please?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/webkit-kitkat-and-deadlocks/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>My First Android App: Stash-It!</title>
		<link>https://www.andrewj.com/blog/2014/my-first-android-app-stash-it/</link>
					<comments>https://www.andrewj.com/blog/2014/my-first-android-app-stash-it/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 10 Apr 2014 05:41:39 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>
		<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/?p=1389</guid>
                    <description><![CDATA[After a couple of months of busy early morning and late night programming, my first Android app has finally been released. Please meet Stash-It! Stash-It! responds to an odd side-effect of the difference between the iOS and Android security models. &#8230; <a href="https://www.andrewj.com/blog/2014/my-first-android-app-stash-it/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>After a couple of months of busy early morning and late night programming, my first Android app has finally been released. Please meet <a href="https://play.google.com/store/apps/details?id=com.andrewj.stashit" target="_blank">Stash-It!</a></p>
<p>Stash-It! responds to an odd side-effect of the difference between the iOS and Android security models. On the iPad, there are a large number of applications which offer an &#8220;all in one&#8221; approach to managing a group of related content. These are a bit frustrating if you want to share files transparently and seamlessly between applications, but there are times when you want to manage a group of files securely, and then the iOS approach is great.</p>
<p>Android is the original way around. The more open file system and component model encourages the use of specialist applications which do one job well, but it can be a challenge to keep related files of different types together, and hide them if you don&#8217;t want private client files or the like turning up un-announced in your gallery of family photos!</p>
<p>Stash-It! tries to plug this gap, by providing an &#8220;all in one&#8221; private file manager, tabbed browser and downloader for Android. You can get all these functions independently in other apps, but Stash-It! is the only one which brings them together in one place. It&#8217;s the ideal place to keep content you want safe from prying eyes: financial and banking records, health research, client documents. I suspect a few will even use it for a porn stash, but that&#8217;s not its only use! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>There are built in viewers for most common image and movie formats, plus PDF and web files, so you don&#8217;t have to move these outside the application to view them. However when you do need to use an external application Stash-It! has a full suite of import and export functions to move your files or open them with other applications.</p>
<p>It took a while to design the security model. Stash-It! encrypts the names of files so that they can&#8217;t be read, and won&#8217;t be visible to the tablet&#8217;s gallery and similar applications, but the content of your files is untouched, so there&#8217;s little risk of losing data. Hopefully this strikes a sensible balance between privacy and risk.</p>
<p>Even if you&#8217;re not too worried about privacy Stash-It! is a great place to collect material related to as particular project, with all your different file types and web research in one place. You can bookmark web links, but also positions in video files or PDF documents. Web pages can be saved intact for reference or offline reading. Again you can do a lot of these things in separate apps, but I believe Stash-It! is the first one to bring all these functions together where you might want them.</p>
<p>I&#8217;ve got a lot of ideas in the pipeline to improve it further, but its now time to test the market and see whether I&#8217;ve spotted a gap which needed plugging or not.</p>
<p>Take a look and let me know what you think!</p>
<p>&nbsp;</p>
<p>Here&#8217;s the <a href="https://play.google.com/store/apps/details?id=com.andrewj.stashit" target="_blank">Google Play Page</a>. You can also <a href="https://www.andrewj.com/apps/stashit/helpfile.htm">read the helpfile</a>.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/my-first-android-app-stash-it/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>What Do I Mean by &#034;Agile Architecture&#034;?</title>
		<link>https://www.andrewj.com/blog/2014/what-do-i-mean-by-agile-architecture/</link>
					<comments>https://www.andrewj.com/blog/2014/what-do-i-mean-by-agile-architecture/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 04 Mar 2014 20:00:44 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1376</guid>
                    <description><![CDATA[A little while back I was approached by EITA Global, a global provider of on-line training, and we have now agreed that I should present for them a webinar entitled &#34;Agile Architects, and Agile Architecture&#34;. The current plan is for &#8230; <a href="https://www.andrewj.com/blog/2014/what-do-i-mean-by-agile-architecture/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>A little while back I was approached by <a href="http://www.eitaglobal.com/" target="_blank">EITA Global</a>, a global provider of on-line training, and we have now agreed that I should present for them a webinar entitled &quot;<a href="https://www.eitaglobal.com/control/w_product/~product_id=300105LIVE/~Andrew_Johnston/~Agile_Architects_and_Agile_Architecture" target="_blank">Agile Architects, and Agile Architecture</a>&quot;. The current plan is for this run on 8th April. I&#8217;ll keep you all posted with any changes.</p>
<p>As part of my preparation, I decided to do a literature scan to see how this topic may have moved on since the last time I did some significant work on it, a couple of years ago. I have to say that based on my initial research I&#8217;m not that impressed… I don&#8217;t know whether to be flattered or slightly perturbed that <a href="http://www.agilearchitect.org/agile/index.asp" target="_blank">AgileArchitect.org</a> comes up squarely at the top of a Google search. There are a few decent web articles around, although most are several years old and I&#8217;d seen them before. The Google search also turns up several dead links.</p>
<p>Amazon turned up a couple of loosely-related books, and the most obvious candidate appeared to be &quot;Lean Architecture: for Agile Software Development&quot; by James O. Coplien and Gertrud Bj�rnvig. I&#8217;ve now read a couple of chapters, but my first impression is not very favourable. I may be rushing to judgement, in which case I&#8217;ll apologise later, but the book seems to somehow equate &quot;architecture&quot; with &quot;code structure&quot; with &quot;project structure&quot;, which isn&#8217;t right at all, missing a number of the most important dimensions of any true architecture.</p>
<p>This led me to ask myself a very basic question. &quot;What do I mean by &#8216;Agile Architecture&#8217;?&quot;. In Coplien and Bj�rnvig&#8217;s book they seem to answer &quot;an architecture which facilitates agile development&quot;. That may be one definition, but it isn&#8217;t mine.</p>
<p>I think the confusion arises from the difference between &quot;agile&quot; applied to a <em>process </em>(e.g. software development), and applied to a <em>product</em>. In the former case, the <a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a> undoubtedly applies. In the latter, I&#8217;m not so sure. I think that for a product, and especially its architecture, the primary meaning of &quot;agile&quot; must be &quot;able to respond to change&quot;. The larger the change which can be handled quickly and cheaply, the more agile the architecture. An architecture which has been built in a beautifully run agile project but which needs new code the first time a business rule changes is fragile, not agile. The system which can absorb major changes in the business rules without a single line of code is genuinely agile. The integration architecture which allows multi-million pound system A to be upgraded with no impact on adjacent multi-million pound system B, or which allows the company to be restructured just by re-configuring its services, is the most agile of all.</p>
<p>I&#8217;m slightly worried that &quot;agile&quot; may have become a &quot;reserved word&quot;, and this &quot;architecture in the large&quot; definition may run counter to accepted practice. Is that right, or am I reading too much into a few examples?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/what-do-i-mean-by-agile-architecture/feed/</wfw:commentRss>
            <slash:comments>4</slash:comments>
                        	</item>
		<item>
		<title>Developing for Android</title>
		<link>https://www.andrewj.com/blog/2014/developing-for-android/</link>
					<comments>https://www.andrewj.com/blog/2014/developing-for-android/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 13 Feb 2014 07:55:52 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Galaxy Note]]></category>
		<category><![CDATA[VMWare]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1363</guid>
                    <description><![CDATA[Regular readers will realise that I&#8217;ve been rather quiet recently. The reason is that over the last couple of weeks I&#8217;ve bitten the bullet and started seriously developing an &#8220;app&#8221; for Android. As always when I have a programming project &#8230; <a href="https://www.andrewj.com/blog/2014/developing-for-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Regular readers will realise that I&#8217;ve been rather quiet recently. The reason is that over the last couple of weeks I&#8217;ve bitten the bullet and started seriously developing an &#8220;app&#8221; for Android. As always when I have a programming project in progress other uses of my &#8220;project&#8221; time tend to take very much a back seat, so apologies if you&#8217;ve been watching for photos or words of wisdom&#8230; <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>I don&#8217;t want to say too much about the application itself until I have something ready to put on the market place. Suffice to say I think I&#8217;ve spotted an odd gap in the market where the weaknesses of iOS force a number of good solutions to one problem of information management, whereas Android&#8217;s more flexible architecture ironically mean the problem goes unsolved. Watch this space. </p>
<p>I was initially a bit worried that the learning curve for Android development might be very steep, especially when I started working through the standard Java-based examples in the official Google development toolkit. Like all Java development that approach seems to require a vast amount of &#8220;scaffolding&#8221; code, which must be constructed with very little environmental help, to achieve very simple results. This didn&#8217;t look good. </p>
<p>Then, thankfully, I discovered <a href="http://www.basic4ppc.com">Basic4android.</a> This is a remarkable toolkit developed by a small group in Israel which allows the development of Android software using a powerful but very accessible language and IDE based on Visual Basic. Behind the scenes, this is compiled into standard Android Java code, so ongoing delivery of applications is standard, but the coding and design process is close to &#8220;pure VB&#8221;. </p>
<p>The development environment has all the features you could reasonably ask for, including code completion, syntax highlighting, background compilation and the like. Remote debugging extends to devices connected over the Internet as well as via cable or local networks, and has a cunning feature where you can &#8220;hot swap&#8221; the code behind a running application allowing a range of changes to a running test application without restarting it. These are very impressive abilities for a product from a relatively small company. </p>
<p>Just as with the original VB, Basic4android has a model which allows developers to supplement the platform capabilities with shareable components, libraries and code snippets, and a very active community has rapidly built a library of &#8220;donationware&#8221; which provides easy access to the majority of Android features. I&#8217;ve had to be a bit ingenious in a few cases, but even as a newbie on my first project I haven&#8217;t yet found a requirement which can&#8217;t be met with a few lines of code. </p>
<p>On a slightly more negative note, Basic4android doesn&#8217;t seem to provide a good solution to the problem of supporting multiple screen sizes and orientations, except by writing multiple hard-coded scripts for the various options. This problem has been solved for websites with the concept of the &#8220;responsive grid&#8221;, and it ought to be possible to arrange the UI of an Android app with similar logic (e.g. &#8220;arrange these two controls side by side with the label taking 75% of the width, unless the screen is narrower than X, in which case arrange them vertically&#8221;). If this can be done in Basic4android I haven&#8217;t yet worked out how. </p>
<p>Debugging on a physical device connected directly to the PC is very straightforward, but of course limited to the devices you own, and a bit clumsy if you fancy doing a spot of work when travelling. While the Android development kit includes an emulator for the PC, it runs so slowly as to be completely unusable, even on a high-spec machine like my AlienWare M17x. I may have discovered a better compromise, in <a href="http://www.android-x86.org">Android-x86</a>, a port of Android which runs happily in a VMWare virtual machine. Installation was easy, but there are a few foibles I haven&#8217;t yet conquered. Again, watch this space. </p>
<p>Overall my adventure into Android development is shaping up well. More news later.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2014/developing-for-android/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Back to the &#8216;Fray</title>
		<link>https://www.andrewj.com/blog/2013/back-to-the-fray/</link>
					<comments>https://www.andrewj.com/blog/2013/back-to-the-fray/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 09 May 2013 06:00:42 +0000</pubDate>
				<category><![CDATA[Iceland Travel Blog]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2013/thumbs/0811_7D_7383-5 HDR.jpg" width="79"/><media:content height="550" url="/photoblog/2013/slides/0811_7D_7383-5 HDR.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1235</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_7383-5 HDR.html"><img src="/photoblog/2013/slides/0811_7D_7383-5 HDR.jpg"/></a>Oh well&#8230; The annual pilgrimage to the sun has come and gone, and it&#8217;s back to the &#180;fray. (I assume that &#8220;fray&#8221; is a contraction of &#8220;affray&#8221; &#8211; is that correct?) Updates to my web site are almost complete. As &#8230; <a href="https://www.andrewj.com/blog/2013/back-to-the-fray/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_7383-5 HDR.html"><img src="/photoblog/2013/slides/0811_7D_7383-5 HDR.jpg"/></a><p>Oh well&hellip; The annual pilgrimage to the sun has come and gone, and it&#8217;s back to the &acute;fray. (I assume that &#8220;fray&#8221; is a contraction of &#8220;affray&#8221; &#8211; is that correct?)</p>
<p>Updates to my web site are almost complete. As a salutary lesson to others in a similar position, what I had hoped would be a few weeks&#8217; work turned into something which chewed up most of my &#8220;development&#8221; time for over three months. However I now have a site which works well on almost all devices (although there are a couple of outstanding oddities and the style sheets still need tweaking for phones with relatively low resolution screens, such as older iPhones). I&#8217;m hoping my &#8220;lessons learned&#8221; will make interesting reading to anyone with a similar challenge, and I&#8217;m also confident that future changes will be easier to achieve.</p>
<p>I&#8217;m also hoping to get back to blogging on other topics, which have been neglected a bit in recent times. If you have any preference on topics then please let me know.</p>
<p>Most of my recent posts have been book reviews, and I thought the blog needed a picture at the top, hence the above. I&#8217;ve been processing some outstanding photos from my Iceland trip, and I was rather taken with this one, which is another HDR monochrome development from three originals processed using Photomatix. What do you think?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2013/back-to-the-fray/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Fixing Holes</title>
		<link>https://www.andrewj.com/blog/2013/fixing-holes/</link>
					<comments>https://www.andrewj.com/blog/2013/fixing-holes/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 21 Mar 2013 07:07:49 +0000</pubDate>
				<category><![CDATA[Iceland Travel Blog]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/var/www/html/photoblog/2013/thumbs/0811_7D_8049.JPG" width="79"/><media:content height="550" url="/var/www/html/photoblog/2013/slides/0811_7D_8049.JPG" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1205</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_8049.html"><img src="/photoblog/2013/slides/0811_7D_8049.JPG"/></a>I&#8217;m making decent progress rolling out my new design to the website, but apologies if you&#8217;re waiting for some more interesting content! I&#8217;ve now got to the &#8220;fiddly&#8221; stage, making sure that the new theme works on the slightly more &#8230; <a href="https://www.andrewj.com/blog/2013/fixing-holes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_8049.html"><img src="/photoblog/2013/slides/0811_7D_8049.JPG"/></a><p>I&#8217;m making decent progress rolling out my new design to the website, but apologies if you&#8217;re waiting for some more interesting content! </p>
<p>I&#8217;ve now got to the &#8220;fiddly&#8221; stage, making sure that the new theme works on the slightly more tricky pages. Basically a process of &#8220;fixing holes&#8221;. I&#8217;ve also been processing a few more of my photos from Iceland, and I thought this one a neat echo of my other activities!</p>
<p>Please let me know how you get on with the new look website, and particularly if there are any problems on particular devices or browsers&hellip;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2013/fixing-holes/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Updates Rolling&#8230;</title>
		<link>https://www.andrewj.com/blog/2013/updates-rolling/</link>
					<comments>https://www.andrewj.com/blog/2013/updates-rolling/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 13 Mar 2013 06:43:41 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=1202</guid>
                    <description><![CDATA[The updates to my website are now in progress. The eagle-eyed amongst you may have already spotted changes to my blog and front page, and the rest of the website will follow over the next few weeks. You should now &#8230; <a href="https://www.andrewj.com/blog/2013/updates-rolling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>The updates to my website are now in progress. The eagle-eyed amongst you may have already spotted changes to my blog and front page, and the rest of the website will follow over the next few weeks.</p>
<p>You should now be able to get the full experience of &#8220;Thoughts on the World&#8221; on all devices</p>
<p>Please bear with me if there&#8217;s the odd foible as I complete the changes. Also please let me know if you spot any problem &#8211; but don&#8217;t forget to let me know what device you&#8217;re using.</p>
<p>My blog now supports multiple views, with the default being an &#8220;abstract&#8221;, giving an experience a bit like Google Currents. Use the icons at the top of the page, just below my title bar, to switch between them. Please let me know what you think.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2013/updates-rolling/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Man At Work!</title>
		<link>https://www.andrewj.com/blog/2013/man-at-work/</link>
					<comments>https://www.andrewj.com/blog/2013/man-at-work/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 20 Feb 2013 10:57:17 +0000</pubDate>
				<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2013/thumbs/0811_7D_8000.jpg" width="79"/><media:content height="550" url="/photoblog/2013/slides/0811_7D_8000.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/2013/man-at-work/</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_8000.html"><img src="/photoblog/2013/slides/0811_7D_8000.jpg"/></a>Apologies to regular readers of my blog for the recent low output. I&#8217;m currently working on a major overhaul of my web site which will see it considerably modernised and should enable it to be viewed successfully on all sorts &#8230; <a href="https://www.andrewj.com/blog/2013/man-at-work/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2013/slides/0811_7D_8000.html"><img src="/photoblog/2013/slides/0811_7D_8000.jpg"/></a><p>Apologies to regular readers of my blog for the recent low output. I&#8217;m currently working on a major overhaul of my web site which will see it considerably modernised and should enable it to be viewed successfully on all sorts of different devices, but it does mean my time is being taken up with design and programming work rather than &#8220;content creation&#8221; at the moment&hellip; Please watch this space for further announcements.</p>
<p>On a positive note, if, like, me, you&#8217;ve embraced Google Currents for keeping up with your blog reading (see <a href="https://www.andrewj.com/blog/2012/keeping-current/">Keeping Current</a>) then you may be interested to hear that &#8220;Thoughts of the World&#8221; is now published as a Google &#8220;Edition&#8221;. To subscribe and add it to Currents, just click <a href="https://www.google.com/producer/editions/CAowl7mDBw/thoughts_on_the_world" target="_blank" rel="noopener noreferrer">here</a>.</p>
<p>As an architect, I&#8217;m used to explaining that the world is not black and white, but has to be appreciated in shades of grey (but maybe not 50! :)). However as a photographer, I&#8217;m much more interested in other hues. The picture above is from my Iceland trip, and I call it &#8220;50 Shades of Blue&#8221;. Enjoy!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2013/man-at-work/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Micro Four Thirds Lens Correction Project</title>
		<link>https://www.andrewj.com/blog/2012/the-micro-four-thirds-lens-correction-project/</link>
					<comments>https://www.andrewj.com/blog/2012/the-micro-four-thirds-lens-correction-project/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 29 Aug 2012 07:02:38 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Micro Four Thirds]]></category>
		<category><![CDATA[Photography]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/2012/the-micro-four-thirds-lens-correction-project/</guid>
                    <description><![CDATA[Although most Micro Four Thirds (MFT) lenses are tiny,&#160; the cameras produce great JPG files with apparently little or no geometric distortion. They do this by applying corrections in camera,&#160; and the correction parameter data is also stored with the &#8230; <a href="https://www.andrewj.com/blog/2012/the-micro-four-thirds-lens-correction-project/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Although most Micro Four Thirds (MFT) lenses are tiny,&nbsp; the cameras produce great JPG files with apparently little or no geometric distortion. They do this by applying corrections in camera,&nbsp; and the correction parameter data is also stored with the RAW file. Unfortunately this data is only useful <em>if</em> you can read it,&nbsp; and most RAW processors can&#8217;t. </p>
<p>Although there&#8217;s no obvious reason why not,&nbsp; Panasonic and Olympus have not published the specification for this data.&nbsp; That leaves those of us who want to use a RAW processor other than LightRoom or SilkyPix struggling to get decent results with our MFT images. </p>
<p>Building on some excellent work done by &#8220;Matze&#8221;&nbsp; (<a href="http://thinkfat.blogspot.co.uk/2009/02/dissecting-panasonic-rw2-files.html" target="_blank">thinkfat.blogspot.co.uk/2009/02/dissecting-panasonic-rw2-files.html</a>)and Raphael Rigo (<a href="http://syscall.eu/#pana" target="_blank">syscall.eu/#pana</a>) I decided to have a go at implementing a parser in my CAQuest plug-in for Bibble/AfterShotPro. However although getting the raw data is fairly straightforward I have discovered that the algorithm is more complex than we thought,&nbsp; and seems to vary from lens to lens. </p>
<p>I have therefore decided to open up the exercise to a &#8220;crowd-sourcing&#8221; model to try and get several eyes on the problem. As we uncover algorithms which work well for one lens or another I&#8217;ll publish them here,&nbsp; and also build them into CAQuest.&nbsp; Over time we may come to completely understand the complete MFT algorithm,&nbsp; and our work will then be done.&nbsp; Of course,&nbsp; if one of the MFT partners wants to help by publishing the algorithm,&nbsp; that would also be perfectly acceptable :). </p>
<p>The project pages are here: <a href="https://www.andrewj.com/mft/mftproject.asp">www.andrewj.com/mft/mftproject.asp</a>, with a discussion hosted at the Corel AfterShotPro forum.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2012/the-micro-four-thirds-lens-correction-project/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Break Compatibility, Lose Loyalty</title>
		<link>https://www.andrewj.com/blog/2012/break-compatibility-lose-loyalty/</link>
					<comments>https://www.andrewj.com/blog/2012/break-compatibility-lose-loyalty/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 07 May 2012 06:50:39 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[VMWare]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=997</guid>
                    <description><![CDATA[For almost 20 years I have been a fan of, and borderline apologist for, Microsoft. One of the main reasons was their focus on software usability, backed up by a visible intention to preserve backwards compatibility wherever possible. While each &#8230; <a href="https://www.andrewj.com/blog/2012/break-compatibility-lose-loyalty/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>For almost 20 years I have been a fan of, and borderline apologist for, Microsoft. One of the main reasons was their focus on software usability, backed up by a visible intention to preserve backwards compatibility wherever possible. While each new release of Windows, Office, IE and Visual Studio brought new features, these were by and large an extension to rather than a replacement for that which already worked. When a compatibility break was absolutely necessary, such as with the transition to VB.NET, it was well signposted and the option to parallel run the old version well supported.</p>
<p>Sometime around 2007-8, maybe by coincidence just when Bill Gates retired, this all went to hell in a handcart, and since then I&#8217;ve been cursing new Microsoft software versions as much as praising them. Each release has brought frustrations, and in many cases they have been sufficiently severe to drive me to adopt a competitor&#8217;s product, or at least a third party add-on.</p>
<p>XP SP 2 broke WMA format so it is incompatible with most third party players. My car was new in 2008, but I have to rip CDs using an XP SP1 virtual machine. Vista broke the reliable and flexible <em>ntbackup</em>. It took a bit of effort to <a href="/thoughts/vss%20for%20ntbackup.asp">get it working again</a>, and it&#8217;s still part of my (more complex) backup strategy, but the &#8220;heavy lifting&#8221; is now done by Acronis rather than Windows.</p>
<p>The disruptive user interface and file format changes of Office 2007 have been widely discussed elsewhere. Suffice to say that I never used Office 2007, and run Office 2010 only with a third party add-on which restores the old menus. The compatibility-breaking changes to follow up flags in Outlook 2010 are extremely annoying, but as yet insufficient to drive me to an alternative product.</p>
<p>The same is not true of the changes to Virtual Machine support in Windows 7. Before that move, I used Mirosoft&#8217;s own Virtual PC extensively. However, the loss of compatibility, features <em>and </em>reliability were so severe that I now only use and recommend VMWare WorkStation/Player for this purpose. You can read about my experiences <a href="/thoughts/windowsvpc.asp">here</a>.</p>
<p>The latest problem, and what has prompted this blog, is the appalling state of Internet Explorer 9. I have been a faithful user of IE since V1, and have lived, fairly happily, with its limitations through to IE8. However, since &#8220;upgrading&#8221; to IE9 I have become completely disillusioned, because it just isn&#8217;t reliable enough. Here are a sample of the things which just don&#8217;t work properly:</p>
<ul>
<li>Downloading dynamically-generated PDF files, such as bills from BT,</li>
<li> MasterCard SecureCard authentication. This one&#8217;s a real pain if you&#8217;re at the end of a long online purchase, and you find your main credit card won&#8217;t work,</li>
<li> The combined address / Google search bar. If I type in a valid www&#8230;. address, I expect the browser to at least attempt to use it , not do a search!</li>
<li> Printing. Some long text pages, especially from typepad blogs, get mashed with the main font/character set replaced by something unreadable,</li>
<li>Rendering some web sites readably at all. Some of the worst offenders, ironically, are Microsoft&#8217;s own &#8220;support&#8221; forums.</li>
</ul>
<p>By direct contrast, Google Chrome seems to do a decent job of all the above. I am hereby announcing my intention to make it my primary browser whenever I have a choice.</p>
<p>I&#8217;m now really scared about Windows 8, with it&#8217;s so far half-hearted changes to the desktop. What will that wreck?</p>
<p>Now in fairness, Microsoft are not the only, or maybe even the worst offenders in this space. For example Bibble/Corel have just pushed through a change to their AfterShot Pro software which no-one wanted and which breaks a plugin I&#8217;ve written, and I suspect in that community I have some influence to say &#8220;the new version is broken, don&#8217;t use it.&#8221;</p>
<p>I really don&#8217;t understand Microsoft&#8217;s behaviour here. Are all these compatibility wrecks conscious decisions? If so, do the conquest sales related to cool new features really outweigh the loss of loyalty from existing users? If not, have they just got lazy and complacent? Who knows?</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2012/break-compatibility-lose-loyalty/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>Macs Are Really Easy? Ha!</title>
		<link>https://www.andrewj.com/blog/2012/macs-are-really-easy-ha/</link>
					<comments>https://www.andrewj.com/blog/2012/macs-are-really-easy-ha/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 13 Apr 2012 15:35:46 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[VMWare]]></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="https://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="https://www.andrewj.com/blog/2012/mac-osxa-third-class-os/">https://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>https://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>https://www.andrewj.com/blog/2012/mac-osxa-third-class-os/</link>
					<comments>https://www.andrewj.com/blog/2012/mac-osxa-third-class-os/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 29 Feb 2012 20:40:18 +0000</pubDate>
				<category><![CDATA[Code & Development]]></category>
		<category><![CDATA[PCs/Laptops]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[VMWare]]></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="https://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>
<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>
<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>
<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 &#8220;safe&#8221; route. The result: as far as I am concerned OSX is a &#8220;third-class&#8221; OS, almost a &#8220;technical ghetto&#8221;, and I have to rely on the good offices of other developers to deliver my plugins for it. </p>
<p>People will put up with a lot in the name of love. Maybe Mac users &#8220;love&#8221; 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>https://www.andrewj.com/blog/2012/mac-osxa-third-class-os/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>Tyranny of the Colour Blind</title>
		<link>https://www.andrewj.com/blog/2012/tyranny-of-the-colour-blind/</link>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 28 Feb 2012 08:29:25 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        <media:thumbnail height="120" url="/photoblog/2012/thumbs/1010_7D_2058.jpg" width="79"/><media:content height="550" url="/photoblog/2012/slides/1010_7D_2058.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=941</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2012/slides/1010_7D_2058.html"><img src="/photoblog/2012/slides/1010_7D_2058.jpg"/></a>Musings on why Microsoft are abandoning colour as a dimension for information visualisation <a href="https://www.andrewj.com/blog/2012/tyranny-of-the-colour-blind/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2012/slides/1010_7D_2058.html"><img src="/photoblog/2012/slides/1010_7D_2058.jpg"/></a><h2>Or Have Microsoft Lost Their Mojo?</h2>
<p>I like colour. I see in colour, dream in colour and have a rich colour vocabulary which drives much of my photographic style (see <a href="https://www.andrewj.com/blog/2011/seeing-in-black-and-white/">Seeing in Black and White</a>). It&#8217;s also an important part of how I work &#8211; colour can be a powerful &#8220;dimension&#8221; in the visualisation of information. The human eye and brain are remarkably good at processing and using colour signals, whether it&#8217;s a highlighted line of text on screen, or a flashing blue light in traffic.</p>
<p>Now I acknowledge that this isn&#8217;t universal. As a designer you have to cater for a significant proportion of users (about 8% of males) who have poorer colour vision, and especially in mobile systems there will be times when ambient lighting conditions reduce effective colour saturation to a point where it doesn&#8217;t work. The traditional way to deal with this is to combine colour with another signal, such as shape &#8211; green tick vs red cross, for example. Then each user can use the signal which works best for them.</p>
<p>Microsoft used to get this. Their software was frequently a model of usability, and exploited colour, shape and shading to both guide the user, and allow the user to better manage their data. Icons could be rapidly located by colour as much as by detail. Data items of a particular status would &#8220;leap out&#8221; from a forest of those without the status marking. Office 2003 introduced follow-up flags for both OneNote and Outlook, which proved to be a great way to identify and retrieve key items in large lists. These supported both colour and shape or text as &#8220;identifying dimensions&#8221;.</p>
<p>Then sometime in the late noughties, Microsoft lost their way. Office 2010 has abandoned colour as a navigational tool. Tools, icons and the dividers between sections of the screen are all subtle shades or pale pastels, making them very difficult to visually distinguish, particularly in poor lighting conditions. Icons are no longer clearly distinguishable. However the worst regression is in respect of Outlook&#8217;s follow-up flags, which now actively disable the use of colour via a tyranically imposed colour scheme consisting of &#8220;multiple shades of puce&#8221;, rendering them completely useless for their original purpose.</p>
<p>This rant had been brewing for some time as I try to get to grips with Office 2010 and its inexplicable abandonment of many well-established user interface standards at the cost of enormous frustration for long-standing users. What tipped me over the edge was the announcement last week of Microsoft&#8217;s new Windows logo. Gone are the cheerful primary colours, and the careful shading which made later versions pop out of the screen with real depth. In their place is a plain white cross on a muddy blue background. Useless!</p>
<p>Now I <em>suppose </em>there might be people who think that this reduced colour palette is somehow &#8220;cool&#8221; or &#8220;elegant&#8221;. They&#8217;re probably the same group who think that it&#8217;s appropriate to model fashion on anorexic teenagers rather than real women. In both cases they&#8217;ve clearly lost track of who their real customers are, who has to get real utility from their work.</p>
<p>I&#8217;m not against change, and I accept that high-resolution graphics allows more subtle designs that we were previously used to. However, this rush to abandon colour in user interfaces and branding robs us of an important dimension. We absolutely do have to make sure that designs are also usable for users and in conditions where colour may not work, but we must not throw away or disable powerful tools which have real value to the majority of us. Microsoft should know better.</p>
]]></content:encoded>
                                            	</item>
		<item>
		<title>Normal Service Will Be Resumed&#8211;Honest!</title>
		<link>https://www.andrewj.com/blog/2012/normal-service-will-be-resumedhonest/</link>
					<comments>https://www.andrewj.com/blog/2012/normal-service-will-be-resumedhonest/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 02 Feb 2012 07:04:41 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/2012/thumbs/1010_7D_2069.jpg" width="79"/><media:content height="550" url="/photoblog/2012/slides/1010_7D_2069.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/2012/normal-service-will-be-resumedhonest/</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/2012/slides/1010_7D_2069.html"><img src="/photoblog/2012/slides/1010_7D_2069.jpg"/></a>Apologies to regular readers of my blog for the delay since my last significant post. I&#8217;ve been very busy with a number of things: working overtime at National Grid, getting new consultancy contracts running, updating my Bibble plugin to work &#8230; <a href="https://www.andrewj.com/blog/2012/normal-service-will-be-resumedhonest/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/2012/slides/1010_7D_2069.html"><img src="/photoblog/2012/slides/1010_7D_2069.jpg"/></a><p>Apologies to regular readers of my blog for the delay since my last significant post. I&#8217;ve been very busy with a number of things: working overtime at National Grid, getting new consultancy contracts running, updating my Bibble plugin to work with the new version of the software, and generally battling the January blues&hellip; I started a post entitled &#8220;Reflections on 2011&#8221;, but it seems rather pointless now February&#8217;s arrived!</p>
<p>At least this morning I&#8217;ve managed to catch up slightly on my backlog of photo processing, and found this rather pretty shot from our trip to Crete in October 2010. I hope you enjoy it.</p>
<p>Normal service should be resumed in the near future. Here&#8217;s hoping! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2012/normal-service-will-be-resumedhonest/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Ten Ways to Make Your iPad Work Effectively With Windows</title>
		<link>https://www.andrewj.com/blog/2011/ipadwindows/</link>
					<comments>https://www.andrewj.com/blog/2011/ipadwindows/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 03 Dec 2011 10:54:24 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[favourite]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/2011/ipadwindows/</guid>
                    <description><![CDATA[If you&#8217;re one of those people who uses loads of Apple products, and is thinking of proposing Steve Jobs for canonisation, then you may be happy with how your iPad works, but if you&#8217;re trying to make it work effectively &#8230; <a href="https://www.andrewj.com/blog/2011/ipadwindows/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>If you&#8217;re one of those people who uses loads of Apple products, and is thinking of proposing Steve Jobs for canonisation, then you may be happy with how your iPad works, but if you&#8217;re trying to make it work effectively in a Windows-based environment you may have found shortcomings with the &#8220;out of the box&#8221; solutions. </p>
<p>It is perfectly possible to make the iPad play nicely as part of a professional Windows-based environment, but you do have to be prepared to grab the bull by the horns, dump most of the built-in apps (which are almost all pretty useless), and take control of both file management and communications via partner applications on the PC. This article presents some of my hard-won tips and recommendations on how to do this and get productive work out of the iPad&#8217;s great hardware.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/ipadwindows/feed/</wfw:commentRss>
            <slash:comments>3</slash:comments>
                        	</item>
		<item>
		<title>Website and Email Back</title>
		<link>https://www.andrewj.com/blog/2011/website-and-email-back/</link>
					<comments>https://www.andrewj.com/blog/2011/website-and-email-back/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 26 Jul 2011 07:37:27 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=811</guid>
                    <description><![CDATA[Apologies to anyone who has had a problem with my website or sending me email over the last few days. I had a rogue backup process which was carefully filling the disk with old backups! Thanks to Webfusion Support for &#8230; <a href="https://www.andrewj.com/blog/2011/website-and-email-back/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Apologies to anyone who has had a problem with my website or sending me email over the last few days. I had a rogue backup process which was carefully filling the disk with old backups! Thanks to Webfusion Support for fixing things so efficiently.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/website-and-email-back/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Enterprise Architecture Conference 2011 Day 3</title>
		<link>https://www.andrewj.com/blog/2011/enterprise-architecture-conference-2011-day-3/</link>
					<comments>https://www.andrewj.com/blog/2011/enterprise-architecture-conference-2011-day-3/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 10 Jun 2011 17:03:07 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/2011/enterprise-architecture-conference-2011-day-3/</guid>
                    <description><![CDATA[Well the third day of EAC 2011 came and went. My talk went well. Despite the last minute scheduling change I got a decent audience, and once in front of real listeners managed to find my style and pace again. &#8230; <a href="https://www.andrewj.com/blog/2011/enterprise-architecture-conference-2011-day-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Well the third day of EAC 2011 came and went. My talk went well. Despite the last minute scheduling change I got a decent audience, and once in front of real listeners managed to find my style and pace again. They seemed to appreciate it, but as none of the inveterate tweeters was in attendance I&#8217;ll have to wait for the feedback analysis to be sure.</p>
<p>This morning&#8217;s keynote was excellent, it&#8217;s just a shame that I had to leave early to set up for my own talk. It could have been subtitled &#8220;why &#8216;cloud&#8217; means people trying to sell you stuff&#8221;, and was the most balanced discussion I have yet heard on cloud computing. The most interesting observation is that individual component reliability is very much subservient to scalability and &#8220;elasticity&#8221;, which has major implications for more critical applications.</p>
<p>The rest of the day&#8217;s presentations were a mixed bunch. Some were too academic, others very light on real content. The one exception was Mike Rosen talking about SOA case studies, which included both real successes and failures, and should be the yardstick for anyone looking to move to SOA.</p>
<p>One thing I have learned from this conference is a (arguably <i>the</i>) real purpose for Twitter. It&#8217;s a great way for a group engaged in a joint activity like this to have a shared background conversation. In many ways it&#8217;s the electronic reincarnation of the DeMarco/Lister red and green voting card system, but with wider and longer reach. It&#8217;s not without problems: it can be a distraction, some users can dominate with high volume, low value tweets and retweets, and Twitter&#8217;s search and the available clients (certainly on the iPad) are not optimised for hashtag-based operation. However, these are minor complaints.</p>
<p>The iPad makes a superb conference tool, and I was amazed by the number of them in use, for making notes, reviewing slides, and tweeting. Interestingly I think this trend will drive a move to standardise on PDF-format material: slides published this way worked very well, but some available only in PowerPoint format weren&#8217;t viewable.</p>
<p>My congratulations and thanks to the conference chairs and the IRM team for an excellent event. Time to start thinking about a topic for the next one&#8230;</p>
<p>&#8211; Posted using BlogPress from my iPad</p>
<p class='blogpress_location'>Location:<a href='http://maps.google.com/maps?q=Falcon%20Rd,Wandsworth,United%20Kingdom%4051.464807%2C-0.168498&#038;z=10'>Falcon Rd,Wandsworth,United Kingdom</a></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/enterprise-architecture-conference-2011-day-3/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>No Plan B</title>
		<link>https://www.andrewj.com/blog/2011/no-plan-b/</link>
					<comments>https://www.andrewj.com/blog/2011/no-plan-b/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 10 Jun 2011 07:20:41 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=791</guid>
                    <description><![CDATA[Thoughts on the inadequacy of contingency planning on the British transport networks <a href="https://www.andrewj.com/blog/2011/no-plan-b/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I don&#8217;t think the reason why the British travel infrastructure copes so badly with problems is actually down to a fundamental lack of capability or investment. The real problem is that the operators lack sufficient planning, and/or imagination, and/or flexibility to shift their services to alternative patterns better matched to changing circumstances. The only &#8220;plan B&#8221; seems to be &#8220;run what&#8217;s left of plan A and apologise&#8221;.</p>
<p>Take, for example, South West Trains, who run commuter services to the South West of London. There are two main lines out from Waterloo via Guildford and Woking, but also a number of parallel minor lines, like the secondary line to Guildford which runs past my house.</p>
<p>When North Surrey got a foot of snow for the first time in 30 years in February 2009, it was clear that no trains were going to run on any of these lines for a couple of days, but only a relatively short stretch of the lines was blocked. It was still possible, for example, to get from Surbiton (about 10 miles nearer to London than my home) to Waterloo.</p>
<p>I had to attend a course in London, and the roads were becoming passable, so I dug the car out and drove to Surbiton. It rapidly became clear that everyone else had had the same idea. How had SWT reacted? By running the same four commuter services an hour from Surbiton. These were, of course, enormously overcrowded and slow. What about the other trains which would, for example, have usually been running the express services carrying the rest of the traffic? These were nowhere to be seen, presumably sat in a siding near Waterloo. Would it have been beyond the wit of man to press some of these into use as additional shuttle services to carry the excess traffic from those stations which were accessible? Apparently so.</p>
<p>Last night, I got caught again. I got to Waterloo at 10:30 pm to see a blank indicator board. The cause of the trouble was signalling problems in turn due to cable theft at Woking. Now I don&#8217;t blame the rail companies for that, and I hope the perpetrators are found, hung, drawn and transported to South Georgia, but I do think the train companies&#8217; response is inadequate.</p>
<p>True to form, they had reverted to &#8220;what&#8217;s left of plan A&#8221;, running a tiny number of overcrowded and delayed services under manual signalling procedures. Now theoretically my line should not have been affected. Not only should I have been able to get home, but my line is perfectly capable of carrying some additional &#8220;relief&#8221; traffic, as it does when there is planned engineering work on the main lines. (About once a month the 8 commuter services per hour are joined by about 20 express and freight services, and when planned that seems to work fine.) With a bit of ingenuity you could even alert taxi drivers at the intermediate stops to the sudden need for their services, at profitable late night rates.</p>
<p>Is that what happened? I should coco. Instead not even the regular services to my home station appeared to be running. I ended up on one of the overcrowded trains to Surbiton, and finished my day with a &pound;40 cab ride.</p>
<p>Why is this so difficult for the train companies to get right? In both of these cases there was no fundamental problem with the remaining infrastructure or rolling stock. In both cases they even have a model for the alternative schedule. For last night it&#8217;s in a file marked &#8220;Saturday service with engineering work at Woking&#8221;. Staff flexibility might be the problem, but that must be resolvable, maybe via higher overtime rates?</p>
<p>There&#8217;s also an architectural lesson here. I design computer systems and networks. My clients run national power networks. In both cases the customers expect those systems and networks to be resilient, and to cope with growing demand without wholesale replacement. It&#8217;s not always possible to justify dedicated &#8220;DR&#8221; capacity, so you have to get inventive with alternative configurations of the capacity you do have, and then run tests and introduce clever asset monitoring and management practices to make sure those configurations can be used safely.</p>
<p>If we can do it, why can&#8217;t the transport operators?</p>
<p>&#8211; Posted using BlogPress from my iPad</p>
<p class='blogpress_location'>Location:<a href='http://maps.google.com/maps?q=Cobham,United%20Kingdom%4051.348516%2C-0.357972&#038;z=10'>Cobham,United Kingdom</a></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/no-plan-b/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Enterprise Architecture Conference</title>
		<link>https://www.andrewj.com/blog/2011/enterprise-architecture-conference/</link>
					<comments>https://www.andrewj.com/blog/2011/enterprise-architecture-conference/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 09 Jun 2011 16:18:10 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/2011/enterprise-architecture-conference/</guid>
                    <description><![CDATA[Halfway through, and this is shaping up to be the best EAC I have attended for a while. I was umming and aahing about whether to attend yesterday&#8217;s seminar sessions, and couldn&#8217;t make up my mind which to join. In &#8230; <a href="https://www.andrewj.com/blog/2011/enterprise-architecture-conference/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Halfway through, and this is shaping up to be the best EAC I have attended for a while.</p>
<p>I was umming and aahing about whether to attend yesterday&#8217;s seminar sessions, and couldn&#8217;t make up my mind which to join. In the end I made up my mind about the morning session while having a cup of coffee on the way, when I recognised one of the speakers, Lawrence Helm, as having given an excellent presentation a couple of years ago on NASA&#8217;s knowledge management problems. This time he and his colleague Robert Stauffer were talking about NASA&#8217;s adoption of Capability Modelling, and how they have put it to use supporting some very high level decisions about NASA&#8217;s future shape.</p>
<p>This was another stimulating session, and really benefitted from the extra space from making it a half-day session. Lawrence and Robert actually ran out of time, which was probably a testament to the depth of the material and the discussions it engendered.</p>
<p>The principle of relating capabilities to strategic objectives was not new to me, although the NASA examples certainly were. What did surprise me was the level of detail required for capability definitions in that environment. For example, the launch capabilities relate specifically to certain target longitudes and temperature ranges, and could not be moved to a location outside those ranges (for example Korou or Baikonur) without re-engineering the rocket platforms.</p>
<p>The afternoon session was also a bit random, as I got confused between Mike Rosen&#8217;s half-day seminar and his separate one hour talk for which I had the slides. Not a problem, the half day session on case study methods was very educational. The example, of how Wells Fargo created a federated model to integrate their various systems under a common customer model was interesting, and plays nicely into my EAI talk tomorrow. Like a good sermon, I didn&#8217;t learn much new, but I felt thoroughly validated that Wells Fargo did what I would have recommended, and succeeded with it. We had a very robust discussion on the importance of stable service interfaces, so hopefully that will drum up some support for my talk.</p>
<p>You get a very good class of attendee at these sessions. Alec Sharp joined the NASA session, and John Zachman joined the afternoon session, although he didn&#8217;t participate much.</p>
<p>Thursday&#8217;s highlights have probably been the two keynotes: this morning on how different companies have developed different strategies to come through and out of the recession, and this afternoon on &#8220;how to think like a CEO&#8221; and get your messages across to senior managers. However, there was also an excellent talk this morning by David Tollow on how EA feeds management and planning of long term outsourcing deals, from the supplier&#8217;s viewpoint. Very relevant to many of us in the current day and age.</p>
<p>Just to make things interesting, Sally has asked me to swap slots with someone else tomorrow, so my talk which was carefully trimmed to the constraints of the last slot on Friday will now be at 10 am. This may or may not be a good thing.</p>
<p>Wish me luck!</p>
<p>&#8211; Posted using BlogPress from my iPad</p>
<p class='blogpress_location'>Location:<a href='http://maps.google.com/maps?q=Portman%20Towers,Paddington,United%20Kingdom%4051.516778%2C-0.158715&#038;z=10'>Portman Towers,Paddington,United Kingdom</a></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/enterprise-architecture-conference/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Practical Enterprise Integration</title>
		<link>https://www.andrewj.com/blog/2011/practical-enterprise-integration/</link>
					<comments>https://www.andrewj.com/blog/2011/practical-enterprise-integration/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 02 Jun 2011 05:58:01 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[My Publications]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/2011/practical-enterprise-integration/</guid>
                    <description><![CDATA[I&#8217;m speaking at the IRM Enterprise Architecture Conference 2011, in London next week. My topic is &#8220;Practical Enterprise Integration: Realising the Benefits of a Strong Canonical Architecture&#8221;. In the paper I discuss the evolution of an EAI environment at National &#8230; <a href="https://www.andrewj.com/blog/2011/practical-enterprise-integration/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;m speaking at the <a href="http://www.irmuk.co.uk/eac2011/" target="_blank">IRM Enterprise Architecture Conference 2011</a>, in London next week. My topic is &#8220;Practical Enterprise Integration: Realising the Benefits of a Strong Canonical Architecture&#8221;. In the paper I discuss the evolution of an EAI environment at National Grid, and how over time some key decisions on the underlying architecture have delivered significant benefits.</p>
<p>I&#8217;ve just uploaded the slides to my website. You can download them <a href="https://www.andrewj.com/publications/EAI%20Evolution%20Slides.pdf" target="_blank">here</a>.</p>
<p>Unfortunately, I&#8217;ve been put into a real &#8220;graveyard slot&#8221;, right at the end of business on the Friday afternoon. And I thought Sally, the conference chair, was my friend! If you are attending, I would very much appreciate your support. If not, I&#8217;d appreciate your thoughts on this topic, as always.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/practical-enterprise-integration/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Book Review Restructuring</title>
		<link>https://www.andrewj.com/blog/2011/book-review-restructuring/</link>
					<comments>https://www.andrewj.com/blog/2011/book-review-restructuring/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 20 Apr 2011 10:32:18 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/?p=712</guid>
                    <description><![CDATA[I&#8217;m in the process of restructuring my book reviews, integrating them better with my blog. Please bear with me if posts or old reviews appear to move or are replaced as I complete this process. Update 13th May: the restructuring &#8230; <a href="https://www.andrewj.com/blog/2011/book-review-restructuring/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;m in the process of restructuring my book reviews, integrating them better with my blog. Please bear with me if posts or old reviews appear to move or are replaced as I complete this process.</p>
<p>Update 13th May: the restructuring is complete, and you should see new reviews more fully integrated than previously. The process was non-trivial, and may spawn a blog post at some stage.<br />
Thanks<br />
Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/book-review-restructuring/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Wrong Orientation?</title>
		<link>https://www.andrewj.com/blog/2011/the-wrong-orientation/</link>
					<comments>https://www.andrewj.com/blog/2011/the-wrong-orientation/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 09 Mar 2011 20:13:47 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2011/the-wrong-orientation/</guid>
                    <description><![CDATA[In an odd confluence, multiple streams of activity have come together to convince me that current IS thinking may be suffering from a bad dose of &#8220;the wrong orientation&#8221;. My work on data modelling at National Grid, an excellent course &#8230; <a href="https://www.andrewj.com/blog/2011/the-wrong-orientation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p><span lang="EN"> </p>
<p>In an odd confluence, multiple streams of activity have come together to convince me that current IS thinking may be suffering from a bad dose of &#8220;the wrong orientation&#8221;. My work on data modelling at National Grid, an excellent course on business process modelling, my frustrations with the iPad software architecture and finally some exposure to Oracle&#8217;s latest SOA tools have all convinced me that we need to get back to designing systems with an &#8220;object-action orientation&#8221;, rather than the regressive move back to the alternative.</p>
<p>&nbsp;</p>
<p></span></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/the-wrong-orientation/feed/</wfw:commentRss>
            <slash:comments>2</slash:comments>
                        	</item>
		<item>
		<title>A$$hole Driven Development and Other Anti-Patterns</title>
		<link>https://www.andrewj.com/blog/2011/ahole-driven-development-and-other-anti-patterns/</link>
					<comments>https://www.andrewj.com/blog/2011/ahole-driven-development-and-other-anti-patterns/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 23 Feb 2011 20:34:53 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2011/ahole-driven-development-and-other-anti-patterns/</guid>
                    <description><![CDATA[Musings on antipatterns in development, project management and IT governance <a href="https://www.andrewj.com/blog/2011/ahole-driven-development-and-other-anti-patterns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>During a project management meeting today, I was driven to look for a reference to &#8220;Document Driven Development&#8221;, a great anti-pattern developed a few years ago by the Agile crowd, in order to emphasise the importance of working solutions, not documents, as the goal of IT projects. I was in for a few surprises&hellip;</p>
<p>Oddly, although the wonderful &#8220;<a href="http://www.waterfall2006.com/" target="_blank">Waterfall 2006</a>&#8221; web site still exists, I couldn&#8217;t find DDD on it. So I checked with Google and found a couple of references to non-ironic (as far as I can tell) papers on the subject. Yes, some people seem to think that document-driven development is a good idea! Now I might be prepared to concede this for applications where documents are themselves the key business objects (some legal processes, for example), but as far as I can see this isn&#8217;t what those papers were referring to. If that&#8217;s the case, they really haven&#8217;t understood&hellip;</p>
<p>What I did find, however, was a wonderful blog post from a few years ago with the excellent title &#8220;<a href="http://www.scottberkun.com/blog/2007/asshole-driven-development/" target="_blank">Asshole Driven Development</a>&#8220;, in which Scott Berkun has collected a wide variety of development and project management anti-patterns. It takes a while to read through all the comments, but doing so is quite rewarding, if mainly as a form of therapy. At least you know you&#8217;re not alone.</p>
<p>The list is pretty comprehensive, but despite over 300 contributions, I couldn&#8217;t see my own b�te noir. A lot of large corporate organisations now seem to follow a governance methodology I term IAKOM (the &#8220;It&#8217;s A Knock Out Method&#8221;), known on the continent as la Methode Jeux Sans Frontieres (MJSF). Those of a certain age will remember a series of hilarious television games in which relatively simple tasks (such as carrying a bucket of water) were rendered impossible by the imposition of progressive handicaps and obstacles (such as carrying the bucket up a greased slope against a rubber bungy while wearing clown shoes and being pelted with wet sponges). </p>
<p>Some IT governance is like that. Just when you think you might have a fair run at doing something, a new governance hurdle or document check is inserted into the process. It wouldn&#8217;t be so bad if it all made sense, but sometimes it feels almost capricious. Some organisations are more enlightened than others, but as a general industry trend it&#8217;s inescapable.</p>
<p>I don&#8217;t know what the answer is. If you do, let me know!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/ahole-driven-development-and-other-anti-patterns/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Red Roof Reflections</title>
		<link>https://www.andrewj.com/blog/2011/red-roof-reflections/</link>
					<comments>https://www.andrewj.com/blog/2011/red-roof-reflections/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 19 Feb 2011 08:29:58 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Barbados]]></category>
		<category><![CDATA[Photography]]></category>
        <media:thumbnail height="120" url="/photoblog/thumbs/0410_40D_0212.jpg" width="79"/><media:content height="550" url="/photoblog/slides/0410_40D_0212.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2011/red-roof-reflections/</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/slides/0410_40D_0212.html"><img src="/photoblog/slides/0410_40D_0212.jpg"/></a>As my &#8220;photographic eye&#8221; develops, I find I&#8217;m noticing much more readily the colour of light, and how it can be modified by things both inside and outside the scene. This shot of St. Nicholas Abbey on Barbados is an &#8230; <a href="https://www.andrewj.com/blog/2011/red-roof-reflections/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/slides/0410_40D_0212.html"><img src="/photoblog/slides/0410_40D_0212.jpg"/></a><p>As my &#8220;photographic eye&#8221; develops, I find I&#8217;m noticing much more readily the colour of light, and how it can be modified by things both inside and outside the scene. This shot of St. Nicholas Abbey on Barbados is an interesting case in point. The porch has a flat roof, and that flat roof is obviously painted red to match the railings and guttering. We can&#8217;t see it directly, but its effects are very dramatic. I&#8217;ve boosted the colour saturation <em>slightly </em>to make this work on the web, but only slightly &#8211; the pink glow was immediately obvious as we looked back to take this shot.</p>
<p>St. Nicholas Abbey, despite its name, was never an Abbey, but a plantation house. It&#8217;s recently been revived, and sits at the hub of a busy farming and rum distilling business. It&#8217;s also an interesting example of the challenges of architectural re-use. It was built from a set of plans developed and used for a similar manor house in England. These were faithfully followed, including all the fireplaces and chimneys. In nearly 400 years Barbados has never had a day cold enough for any of the fires to be lit! </p>
<p>In Agile development, the mantra is that you don&#8217;t build features you don&#8217;t need, but I&#8217;ve rarely seen a discussion on what to do if those features come &#8220;free with the design&#8221;. Re-using an established design has significant benefits, particularly if the architectural effort comes at a significant cost (which was obviously the driver for the decision about St. Nicholas Abbey). Tailoring that design to omit features you don&#8217;t need will have a cost, and a risk that by doing so you break some other capability. For example, chimneys tend to be built very strongly, and often have an important structural role in a building. On the other hand, building features which won&#8217;t be used is also costly. If you can&#8217;t find exactly the right design pattern, you will have an interesting decision &#8211; whether to change it, or whether to follow it regardless.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/red-roof-reflections/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Beauty is Only Skin Deep</title>
		<link>https://www.andrewj.com/blog/2011/beauty-is-only-skin-deep/</link>
					<comments>https://www.andrewj.com/blog/2011/beauty-is-only-skin-deep/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 18 Jan 2011 18:57:22 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2011/beauty-is-only-skin-deep/</guid>
                    <description><![CDATA[I&#8217;m currently reading a book called &#8220;Beautiful Architecture&#8220;. This has at its core the concept that some software structures are inherently elegant, things of beauty as well as great function, like many of our greatest buildings. The trouble is that &#8230; <a href="https://www.andrewj.com/blog/2011/beauty-is-only-skin-deep/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;m currently reading a book called &#8220;<a href="http://www.amazon.co.uk/exec/obidos/ASIN/059651798X/questacomputi-21">Beautiful Architecture</a>&#8220;. This has at its core the concept that some software structures are inherently elegant, things of beauty as well as great function, like many of our greatest buildings.</p>
<p>The trouble is that for every St. Paul&#8217;s there must be a Bletchley Park &#8211; an architectural mish-mash which while possibly important, successful or even revered is inherently inelegant, or even downright ugly.<br />My analysis is that behind the glossy facade, the iPad software architecture has to be the best current example of &#8220;Ugly Architecture&#8221;.</p>
<p>In many ways it&#8217;s strongly reminiscent of PCs in the days of DOS, or maybe Windows 3.0, before the emergence of strong component-based architectures and unifying design standards in Windows 95 and NT.<br />The fundamental problem is the application-centric model, in which each application is a stand-alone combination of code and data, with very few shared services or components. This naturally leads each application developer to &#8220;do their own thing&#8221;, implementing separate, widely varying solutions for communications, document storage, printing support and so on. Apart from a token &#8220;open in another app&#8230;&#8221; supported by some applications, there&#8217;s effectively no cross-application linking, leading to massive duplication of functionality and data, and some significant functional limitations, for example the inability to directly open a URL embedded in a document.</p>
<p>Each application has its own data area, which may or may not interact with iTunes, web sites or a PC via FTP, websites via WebDAV or various different cloud storage services. Data which should arguably be general visible just isn&#8217;t &#8211; you can upload video files to the photos area, but they won&#8217;t be visible in the videos list. To test a variety of editors with a document you need to deliver a different copy of the document to each app. </p>
<p>Each application supports different models for document exchange, and different cloud stores, so a user potentially has to have multiple separate cloud accounts. While &#8220;public&#8221; cloud storage may be fine for individuals&#8217; personal data (although individuals may still have valid security and privacy concerns), it is a real concern if used for corporate information. In corporate contexts, connectivity, security, copyright, access rights, service levels, data protection and privacy obligations, regulatory and legal constraints may all be compromised or complicated by cloud use, and become significant issues.</p>
<p>There&#8217;s also an interesting security implication to this which you don&#8217;t often see discussed. Because there&#8217;s no accessible file system, and no extensibility model for the application filing model, there&#8217;s nowhere for anti-virus solutions to run, and as of today iPhones and iPads are effectively unprotected devices. There are probably numerous iPads in the wild acting as festering reservoirs of infected documents. Those who are security conscious can&#8217;t be happy about this, and I know that many corporate security departments are making moves to ban connectivity to corporate services for that reason.</p>
<p>Even if an application interacts with the host PC more directly, you get multiple copies of documents, typically the original, a copy in iTunes and one on the device, with no mechanism to synchronise them or compare version information. Apple&#8217;s own applications such as Pages are even worse, with a completely separate iTunes space from their own &#8220;My Documents&#8221; spaces, and an additional copy step in each direction. This is a version control and management nightmare! </p>
<p>Why could the iPad not support a simple shared filing area with proper two-way synchronisation to the host PC, as the Pocket PC has had from day 1? </p>
<p>The communications architecture is a similar mess. The only application which can communicate with the host PC over USB is iTunes, but iTunes can&#8217;t use WiFi. All other apps have to use WiFi, but there&#8217;s no real shared comms application infrastructure, so the result is another diverse and fragmented &#8220;roll your own&#8221; free for all. The most obvious way for a companion device to talk to its host PC, BlueTooth, isn&#8217;t supported at all!</p>
<p>The WiFi only design works fine in the confines of, say, a small home office. Elsewhere it&#8217;s problematic at best. Paid WiFi (e.g. in a hotel) is typically limited to a single device, so you&#8217;ll end up paying twice if you want to connect both devices. Corporate WiFi systems are typically similar, and you may not be allowed to connect the iPad directly. Even if you do get connectivity, these networks are often set up to prevent routing between devices, as a security measure, so that&#8217;s that, then.</p>
<p>The alternative is to set up either the PC or iPad as a hot-spot itself. On the iPad, this is only possible on jailbroken devices. On the PC, it can be complicated and opens up potential security issues. Neither is ideal.</p>
<p>Apple&#8217;s policies effectively put software development back in the Stone Age, in the particular sense that &#8220;monolithic&#8221; means &#8220;single lump of rock&#8221;. Each application has to be &#8220;stand alone&#8221;, implementing many things which should arguably be shared. For example, each file management application implements its own storage management dialogs, its own comms model, its own browser, its own PDF and Word file viewers, each with their own subset of functionality, dialogs and gesture support, and so forth. There simply doesn&#8217;t seem to be any real concept of shared components or companion applications. Let&#8217;s be clear: I&#8217;m not criticising the application developers for trying their best to provide a comprehensive solution &#8211; my criticism is directed squarely at the crass architecture through which Apple force such an approach. </p>
<p>Even those applications which implement the &#8220;open in another app&#8230;&#8221; capability to open documents in other viewers suffer two common problems: you frequently have to open the document natively before you can send it elsewhere, and the act of doing so usually creates yet another copy of the document to manage separately! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Ironically, where there are shared components they impose significant constraints and limitations. The most obvious is the keyboard. Essentially there&#8217;s only one way to get text directly into any application, and that&#8217;s to use the on-screen keyboard configured exactly as the application developer decides. It&#8217;s &#8220;my way or the highway&#8221;. This is a dramatic contrast with the Microsoft world, where even a humble 2003-era Pocket PC supports not only a variety of built-in and third-party on-screen keyboards, but also handwriting recognition, character recognition (like the Palm Pilot), Swype, and even limited voice recognition. Importantly, these are all user-selectable at any time text input is required. On the iPad you can buy an app with a different keyboard layout, or dictation capability, but you have to cut and paste the raw text into your target application and typically reformat it to suit. This is simply primitive. </p>
<p>What makes all this worse is that the iPad application approval/delivery model makes it unlikely that anyone will innovate a better solution. No approved application can have legal access to another app&#8217;s or central iTunes data. Without approval, you won&#8217;t appear in the App Store or run on non-jailbroken devices, so Apple simply impose their will, whether good or bad. </p>
<p>OK. I am starting to love my iPad, but the software architect within me is incredibly frustrated. This great hardware is hamstrung by a clumsy, unimaginative, software architecture and oppressive centralist control by those who worship according to The Book of Jobs. It could be so much better. </p>
<p>&lt;/rant&gt;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/beauty-is-only-skin-deep/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Some Good News</title>
		<link>https://www.andrewj.com/blog/2011/some-good-news/</link>
					<comments>https://www.andrewj.com/blog/2011/some-good-news/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 18 Jan 2011 18:15:34 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2011/some-good-news/</guid>
                    <description><![CDATA[I&#8217;ve just had a bit of excellent news &#8211; my submission for the 2011 Enterprise Architecture Conference in London has been accepted. The provisional title is &#8220;Practical Enterprise Integration &#8211; Realising the Benefits of a Strong Canonical Architecture&#8221; and I&#8217;m &#8230; <a href="https://www.andrewj.com/blog/2011/some-good-news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just had a bit of excellent news &#8211; my submission for the 2011 Enterprise Architecture Conference in London has been accepted. The provisional title is &#8220;<em>Practical Enterprise Integration &#8211; Realising the Benefits of a Strong Canonical Architecture</em>&#8221; and I&#8217;m going to tell the story of the evolution and benefits of a strong Enterprise Integration Architecture at National Grid with which I&#8217;ve been closely involved over several years. </p>
<p>Interestingly, a very similar submission last year didn&#8217;t make the cut. Whether the change is due to an increase in the quality of my submission, or a decrease in that of the competition, only time will tell&hellip; <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2011/some-good-news/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Season&#8217;s Greetings</title>
		<link>https://www.andrewj.com/blog/2010/seasons-greetings/</link>
					<comments>https://www.andrewj.com/blog/2010/seasons-greetings/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 24 Dec 2010 09:02:17 +0000</pubDate>
				<category><![CDATA[Personal News]]></category>
		<category><![CDATA[Website & Blog]]></category>
        <media:thumbnail height="120" url="/photoblog/thumbs/1210_7D_4413.jpg" width="79"/><media:content height="550" url="/photoblog/slides/1210_7D_4413.jpg" width="366"/>		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/seasons-greetings/</guid>
                    <description><![CDATA[<a href="www.andrewj.com/photoblog/slides/1210_7D_4413.html"><img src="/photoblog/slides/1210_7D_4413.jpg"/></a>A very warm &#8220;Merry Christmas&#8221; and best wishes for 2011, from all at Coppertrees to all the followers of my blog. Andrew <a href="https://www.andrewj.com/blog/2010/seasons-greetings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<a href="www.andrewj.com/photoblog/slides/1210_7D_4413.html"><img src="/photoblog/slides/1210_7D_4413.jpg"/></a><p>A very warm &#8220;Merry Christmas&#8221; and best wishes for 2011, from all at Coppertrees to all the followers of my blog.</p>
<p>Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/seasons-greetings/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>First Bibble Plugin Published</title>
		<link>https://www.andrewj.com/blog/2010/first-bibble-plugin-published/</link>
					<comments>https://www.andrewj.com/blog/2010/first-bibble-plugin-published/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 11 Dec 2010 08:38:17 +0000</pubDate>
				<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&#8217;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 &#8220;purple fringes&#8221;, this is the tool you need. To find out &#8230; <a href="https://www.andrewj.com/blog/2010/first-bibble-plugin-published/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;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 &#8220;purple fringes&#8221;, this is the tool you need.</p>
<p>To find out more, visit <a href="https://www.andrewj.com/plugins">www.andrewj.com/plugins</a>.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/first-bibble-plugin-published/feed/</wfw:commentRss>
            <slash:comments>2</slash:comments>
                        	</item>
		<item>
		<title>The Half Arsed Agile Manifesto</title>
		<link>https://www.andrewj.com/blog/2010/the-half-arsed-agile-manifesto/</link>
					<comments>https://www.andrewj.com/blog/2010/the-half-arsed-agile-manifesto/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 18 Sep 2010 07:56:55 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/the-half-arsed-agile-manifesto/</guid>
                    <description><![CDATA[If you&#8217;re wondering why agile methods don&#8217;t work in your organisation, look no further than this. Very funny, but scarily accurate. In the words of the Tao of Lao-Tsu, &#8220;If you want to control something, you must first let it &#8230; <a href="https://www.andrewj.com/blog/2010/the-half-arsed-agile-manifesto/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>If you&#8217;re wondering why agile methods don&#8217;t work in your organisation, look no further than <a href="http://www.halfarsedagilemanifesto.org/" target="_blank">this</a>. Very funny, but scarily accurate.</p>
<p>In the words of the Tao of Lao-Tsu, &#8220;If you want to control something, you must first let it go free&#8221;. Big organisations just don&#8217;t get this, because too many people want to hold onto their favourite control mechanism. Agility is a culture, and trying to do it inside a culture of formal control is very difficult. Occasionally you can succeed in spite of the controllers, and that&#8217;s a real achievement.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/the-half-arsed-agile-manifesto/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>21st Century Schizoid Man</title>
		<link>https://www.andrewj.com/blog/2010/21st-century-schizoid-man/</link>
					<comments>https://www.andrewj.com/blog/2010/21st-century-schizoid-man/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 29 Aug 2010 16:16:05 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/21st-century-schizoid-man/</guid>
                    <description><![CDATA[Ruminations on leadership, and how leadership responsibilities change with your perspective <a href="https://www.andrewj.com/blog/2010/21st-century-schizoid-man/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>My good friend and sometime manager, Mike Rawlins, has just started a <a href="http://whitsburyleadership.blogspot.com/" target="_blank">new blog</a> ruminating on leadership. In <a href="http://whitsburyleadership.blogspot.com/2010/08/do-right-thing-do-it-right.html" target="_blank">his first post</a>, he discusses the question of how to decide what to do, to &#8220;do the right thing&#8221;. </p>
<p>Now I&#8217;m not sure whether his guidance on decision making process is generic, or whether that process depends on your organisational position and role in determining &#8220;the right thing&#8221;.&nbsp; I don&#8217;t know whether the key difference in our perspectives is between leadership as a manager versus leadership as an influencer, or the difference between managerial and technical leadership, or the difference between synthesising solutions and deciding which to adopt, but Mike&#8217;s article portrays a very different perspective to mine. </p>
<p>Mike portrays as key the ability to focus on key issues, and exclude those which are &#8220;not relevant&#8221;. </p>
<p>In my experience as an architect and technical leader, I spend a lot of time understanding and analysing the different forces on a problem. These design forces may be technical, or human: financial, commercial or political. The challenge is to find a solution which best balances <em>all</em> the design forces, which if possible satisfies the requirements of all stakeholders. It is usually wrong and ultimately counter-productive to simply ignore some of the stakeholders or requirements as &#8220;less important&#8221; &#8211; <em>any</em> stakeholder (and by stakeholders I mean <em>all</em> those involved, not just senior managers) can derail a project if not happy. </p>
<p>Where design forces are either aligned or orthogonal, there is usually a &#8220;sweet spot&#8221; which strikes an acceptable balance. The problem effectively becomes one of performing a multi-dimensional linear analysis, and then articulating the solution. </p>
<p>However, sometimes the forces act in direct opposition. A good example, currently personally relevant, is system security, where requirements for broad, easy access directly conflict with those for high security. In these cases the architect has to invest heavily in his skills in diplomacy &#8211; to invest a lot of time understanding stakeholder positions. One common problem is &#8220;requirements&#8221; expressed as solutions, which usually hide an underlying concern which can be met many ways, once understood. </p>
<p>In cases of diametrically opposed requirements, there are usually three options:</p>
<ol>
<li>Compromise &#8211; find an intermediate position acceptable to both. This may work, but it may be unacceptable to both, or it may fatally compromise the architecture.</li>
<li>Allow one requirement to dominate. This has to be a senior level business decision. As an architect, you then have to be sensitive to whether the outcome is genuinely accepted and viable, or whether suppressing the other requirements will cause the solution to fail.</li>
<li>Reformulate the problem to remove or reduce the conflict. In the security example the architect may come up with a cunning partitioning of the system which allows access to different elements under different security rules. </li>
</ol>
<p>Of course, you can&#8217;t resolve all the problems at once &#8211; that way lies madness. An architect uses techniques like layered or modular structures, and multiple views of the architecture to &#8220;separate concerns&#8221;. These are powerful tools to manage the problem&#8217;s complexity.</p>
<p>It&#8217;s also important to remember that the architecture, and its resolution of the various design forces (i.e. how it meets various stakeholder needs) have to be communicated to many who are not technical experts. The technical leader must take much of this responsibility. I have had great success with single-topic briefing papers, which describe aspects like security in business terms, and which are short and focused enough to encourage the readers to also consider their concerns separately.</p>
<p>One area where I do agree with Mike is the need to listen to the voice inside, and carry decisions through with integrity. For an architect, the question is whether the architecture is elegant, and will deliver an adequately efficient, reliable and flexible solution. If your internal answer to this is not an honest &#8220;yes&#8221;, you need to understand why not, and decide whether you and your users can live with the compromises.</p>
<p>And finally, the architect must protect the integrity of the solution against the slings and arrows of outrageous projects. Monitor in particular those design aspects which reflect compromises between design forces, because they will inevitably come under renewed pressure over time. You have to not only do the right thing, but ensure it is done right.</p>
<h3>Non-Sequiteur</h3>
<p>About the weird title: Mike is attempting to create his blog based largely on 1970s Prog Rock references. As a tribute to such an excellent idea, I feel compelled to join in (at least on this occasion)!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/21st-century-schizoid-man/feed/</wfw:commentRss>
            <slash:comments>1</slash:comments>
                        	</item>
		<item>
		<title>Integrating External Content with WordPress</title>
		<link>https://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/</link>
					<comments>https://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 12 Aug 2010 20:25:12 +0000</pubDate>
				<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="https://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>https://www.andrewj.com/blog/2010/integrating-external-content-with-wordpress/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Big Blog Split</title>
		<link>https://www.andrewj.com/blog/2010/the-big-blog-split/</link>
					<comments>https://www.andrewj.com/blog/2010/the-big-blog-split/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 11 Jul 2010 20:57:34 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/the-big-blog-split/</guid>
                    <description><![CDATA[Well, maybe not exactly a split as such, but a new structure. &#8220;Thoughts on the World&#8221; is a pretty eclectic mix of professional, personal, humour and photography-related content. However, one reader who follows mainly my &#8220;professional&#8221; content expressed a wish &#8230; <a href="https://www.andrewj.com/blog/2010/the-big-blog-split/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Well, maybe not exactly a split as such, but a new structure. &#8220;Thoughts on the World&#8221; is a pretty eclectic mix of professional, personal, humour and photography-related content. However, one reader who follows mainly my &#8220;professional&#8221; content expressed a wish to see this separate from the more personal stuff. Given that I&#8217;m about to add more photography and review content to the blog, it seemed reasonable to try and meet that request. </p>
<p>I have therefore now created a number of new &#8220;views&#8221; of my blog, and a number of specialist feeds, as follows:</p>
<ul>
<li><em>Thoughts on the World</em>. This is the original and complete blog and feed, and will give you access to all my content, in chronological order. Expect a mix of articles including my observations of the world of software development and architecture, humorous observations, photography and personal announcements.</li>
<ul>
<li>The blog address is <a href="https://www.andrewj.com/blog"><font color="#800080">www.andrewj.com/blog</font></a> </li>
<li>The feed is <a href="http://feeds.feedburner.com/ThoughtsFromAndrewJohnston"><font color="#800080">http://feeds.feedburner.com/ThoughtsFromAndrewJohnston</font></a> <a title="Subscribe to my feed" href="http://feeds.feedburner.com/ThoughtsFromAndrewJohnston"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" src="http://www.feedburner.com/fb/images/pub/flchklt.gif"></a></li>
</ul>
<li><em>The Professional Blog</em>. This will focus on professional articles based around my observations of the world of software development and architecture. Articles for <a href="http://www.agilearchitect.org/">AgileArchitect.org</a> will appear here, as will updates on my products and publications, and I may cross-post relevant reviews. You&#8217;ll also see any practical announcements relating to my websites and feeds.</li>
<ul>
<li>The blog address is <a href="https://www.andrewj.com/blog/pro"><font color="#800080">www.andrewj.com/blog/pro</font></a> </li>
<li>The feed is <a href="http://feeds.feedburner.com/StructureOfTheWorld ">http://feeds.feedburner.com/StructureOfTheWorld <a title="Subscribe to my feed" href="http://feeds.feedburner.com/StructureOfTheWorld"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" src="http://www.feedburner.com/fb/images/pub/flchklt.gif"></a></a></li>
</ul>
<li><em>The Photo Blog</em>. This will focus on my photos, and photography-related articles and reviews. You&#8217;ll also see any practical announcements relating to my websites and feeds. There&#8217;s also a separate feed for updates to <a href="www.andrewj.com/album">my gallery</a>.</li>
<ul>
<li>The blog address is <a href="https://www.andrewj.com/blog/photo">www.andrewj.com/blog/photo</a> </li>
<li>The feed is <a href="http://feeds.feedburner.com/ImagesOfTheWorld ">http://feeds.feedburner.com/ImagesOfTheWorld <a title="Subscribe to my feed" href="http://feeds.feedburner.com/ImagesOfTheWorld"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" src="http://www.feedburner.com/fb/images/pub/flchklt.gif"></a></a></li>
<li>The feed for my gallery is <a href="http://feeds.feedburner.com/GalleryOfTheWorld ">http://feeds.feedburner.com/GalleryOfTheWorld <a title="Subscribe to my feed" href="http://feeds.feedburner.com/GalleryOfTheWorld"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" src="http://www.feedburner.com/fb/images/pub/flchklt.gif"></a></a></li>
</ul>
<li><em>The Review Pages</em>. This presents my reviews of books, films and music. You&#8217;ll also see any practical announcements relating to my websites and feeds.</li>
<ul>
<li>The blog address is <a href="https://www.andrewj.com/blog/reviews">www.andrewj.com/blog/reviews</a> </li>
<li>The feed is <a href="http://feeds.feedburner.com/ReviewsOfTheWorld ">http://feeds.feedburner.com/ReviewsOfTheWorld <a title="Subscribe to my feed" href="http://feeds.feedburner.com/ReviewsOfTheWorld"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" src="http://www.feedburner.com/fb/images/pub/flchklt.gif"></a></a></li>
</ul>
</ul>
<p>For more details, visit my <a href="/thoughts/about RSS.htm">Blog Views and Feeds</a> page.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/the-big-blog-split/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>New Blog Now Live &#8211; Please Update Your Feed</title>
		<link>https://www.andrewj.com/blog/2010/new-blog-now-live-please-update-your-feed/</link>
					<comments>https://www.andrewj.com/blog/2010/new-blog-now-live-please-update-your-feed/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 20 Jun 2010 06:38:23 +0000</pubDate>
				<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/new-blog-now-live-please-update-your-feed/</guid>
                    <description><![CDATA[Hi, My new blog is now live. This allows a lot more flexibility, including commenting etc. Please can you make sure you are taking your RSS feed from one of the following: http://feeds.feedburner.com/ThoughtsFromAndrewJohnston (preferred) https://www.andrewj.com/blog/index.php/feed/ (straight from my site) I &#8230; <a href="https://www.andrewj.com/blog/2010/new-blog-now-live-please-update-your-feed/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Hi,</p>
<p>My new blog is now live. This allows a lot more flexibility, including commenting etc.</p>
<p>Please can you make sure you are taking your RSS feed from one of the following:</p>
<blockquote><p><a href="http://feeds.feedburner.com/ThoughtsFromAndrewJohnston">http://feeds.feedburner.com/ThoughtsFromAndrewJohnston</a> (preferred)</p>
<p><a href="https://www.andrewj.com/blog/index.php/feed/">https://www.andrewj.com/blog/index.php/feed/</a> (straight from my site)</p></blockquote>
<p>I still need to update some of the links to longer old articles, so please bear with me if these are a bit odd over the next few days. Also you may see some duplicate items in the Feedburner feed &#8211; if so, please ignore these, and they should clear shortly.</p>
<p>Thanks, and enjoy the new blog.</p>
<p>Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/new-blog-now-live-please-update-your-feed/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Lots of News</title>
		<link>https://www.andrewj.com/blog/2010/lots-of-news/</link>
					<comments>https://www.andrewj.com/blog/2010/lots-of-news/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 16 Jun 2010 21:31:36 +0000</pubDate>
				<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Personal News]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/lots-of-news/</guid>
                    <description><![CDATA[Quite a lot of news&#8230; Migration of our web sites and email to the new hosting server is almost complete. See previous article/rant for some of my findings. After some initial frustration with my hosting provider (WebFusion) when I discovered &#8230; <a href="https://www.andrewj.com/blog/2010/lots-of-news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Quite a lot of news&#8230;</p>
<p>Migration of our web sites and email to the new hosting server is almost complete. See previous article/rant for some of my findings. After some initial frustration with my hosting provider (WebFusion) when I discovered the<br />
limitations of their new Linux shared hosting services compared with the old one, I have to say a big &#8220;Thank You&#8221; for their efficiency in finding a better solution for me, and providing me with effective technical support to get it up and running.</p>
<p>If you do have any problems with our sites or email, let me know&#8230;</p>
<p>I&#8217;m currently developing a new blog, based on WordPress. This will make it easier to post &#8220;on the fly&#8221; than with the current solution, hand-carved from XML and ASP (now PHP).</p>
<p>When the new blog is running, I&#8217;m going to have a regular post for fans of my photography, so you can see what I&#8217;ve been working on. In the meantime, I&#8217;ve updated my gallery pages so they are a bit easier to navigate, bookmark and search.</p>
<p>And talking about my photography, I&#8217;ve recently been accepted by the Alamy stock agency. So please all rush at once and spend lots of money licensing my pictures for all those uses you&#8217;ve dreamed of but were too polite to mention <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>See you soon,</p>
<p>Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/lots-of-news/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>In Damnation of PHP</title>
		<link>https://www.andrewj.com/blog/2010/in-damnation-of-php/</link>
					<comments>https://www.andrewj.com/blog/2010/in-damnation-of-php/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 16 Jun 2010 21:23:36 +0000</pubDate>
				<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="https://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>https://www.andrewj.com/blog/2010/in-damnation-of-php/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>A Parable</title>
		<link>https://www.andrewj.com/blog/2010/a-parable/</link>
					<comments>https://www.andrewj.com/blog/2010/a-parable/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 17 Jan 2010 18:16:39 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2010/a-parable/</guid>
                    <description><![CDATA[Lessons for anyone contemplating a disruptive, rewrite from scratch, change to a software product <a href="https://www.andrewj.com/blog/2010/a-parable/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>In 2008, Bibble 4, supported by its community of plug-ins, was probably the best RAW convertor available &#8211; it was certainly my favourite. Then in late 2008 Bibble abandoned support for it, although Bibble 5 was not yet available (for another year, as it turned out). I wrote <a href="/photography/parable.asp">a short parable</a> to express my frustration at this inexplicable decision.</p>
<p>Although mainly about photography, I think there are lessons for anyone contemplating a disruptive, rewrite from scratch change to a software product &#8211; beware!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2010/a-parable/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Website Returns, and New Photos</title>
		<link>https://www.andrewj.com/blog/2009/website-returns-and-new-photos/</link>
					<comments>https://www.andrewj.com/blog/2009/website-returns-and-new-photos/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 06 Mar 2009 07:44:46 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2009/website-returns-and-new-photos/</guid>
                    <description><![CDATA[Apologies for the state of the website over the last week &#8211; a problem with the hosting server. I seem to have worked around it for now, so thanks for your patience and those who alerted me to the problem. &#8230; <a href="https://www.andrewj.com/blog/2009/website-returns-and-new-photos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Apologies for the state of the website over the last week &#8211; a problem with the hosting server. I seem to have worked around it for now, so thanks for your patience and those who alerted me to the problem.</p>
<p>My photography zone has been updated with images from my trip to Maine, Vermont and New York last autumn, and from the dramatic Winter weather in the UK. Photos from my trip to the Venice carnivale should start to follow shortly.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2009/website-returns-and-new-photos/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Photography Blog</title>
		<link>https://www.andrewj.com/blog/2008/photography-blog/</link>
					<comments>https://www.andrewj.com/blog/2008/photography-blog/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 25 Jul 2008 07:40:20 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2008/photography-blog/</guid>
                    <description><![CDATA[I&#8217;ve now created a separate category for photography-related blog posts, so if you&#8217;re interested you can track these separately <a href="https://www.andrewj.com/blog/2008/photography-blog/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve now created a separate category for photography-related blog posts, so if you&#8217;re interested you can track these separately</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2008/photography-blog/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>A Shortage of Analysts?</title>
		<link>https://www.andrewj.com/blog/2008/a-shortage-of-analysts/</link>
					<comments>https://www.andrewj.com/blog/2008/a-shortage-of-analysts/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 11 Jun 2008 19:11:28 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2008/a-shortage-of-analysts/</guid>
                    <description><![CDATA[Bemoaning the systemic failings which are leading to a general lack of good business analysts <a href="https://www.andrewj.com/blog/2008/a-shortage-of-analysts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just spent two days at the 2008 Enterprise Architecture Conference in London. It was a very high quality event, with a range of speakers covering topics from pragmatic analysis techniques to how to manage knowledge through the life of NASA&#8217;s Mars programme, more than any single working lifetime.</p>
<p>Overall there was much less focus on technology (read SOA and modelling tools) this year, and a vigorous and renewed focus on business alignment and business architecture, which, if we can deliver, potentially places architecture where it should be, as the business&#8217;s agent.</p>
<p>But there&#8217;s a problem. Good business analysis is fundamental to this, yet several delegates bemoaned the current lack of good business analysts. User organisations often struggle to articulate and abstract their needs, and this feeds into all downstream processes. Modelled requirements are an increasing rarity, poorly substituted by imprecise verbal statements in Word or PowerPoint.</p>
<p>The problem is, of course, not unique to analysts, and may have common cause with the equal lack of architects. Senior architects and analysts both tend to have several big birthdays under the belt, and many learned their trade as developers, gaining both practical method skills and the experience of turning ideas into working code. (The majority of exceptions have other &#8220;making it work&#8221; experience, such as building networks or running data centres.)</p>
<p>But in the current world of ERP packages and large-scale outsourcing, many organisations no longer build anything themselves. The live classroom has been thrown away.</p>
<p>I have worked with a number of good, keen young analysts, but most work for large supplier companies who still have both well-funded training programmes and the breadth of work to build experience and a broad skill set. These guys and girls can do a good job, but at the risk of higher costs and potential conflicts of interest.</p>
<p>We already know that this may reduce organisations&#8217; ability to ensure the right solution to their needs, or assure its quality. Recent observations suggest that organisations who forgoe getting their hands dirty in IT will also suffer an increasing difficulty in creating a clear, concise and structured statement of those needs themselves.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2008/a-shortage-of-analysts/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>My Grand Circle Tour</title>
		<link>https://www.andrewj.com/blog/2008/my-grand-circle-tour/</link>
					<comments>https://www.andrewj.com/blog/2008/my-grand-circle-tour/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 02 Jan 2008 14:51:01 +0000</pubDate>
				<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Personal News]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[favourite]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2008/my-grand-circle-tour/</guid>
                    <description><![CDATA[My "Grand Circle" tour of Southwestern USA: what worked, what didn't, and how to avoid sleep deprivation and scurvy! <a href="https://www.andrewj.com/blog/2008/my-grand-circle-tour/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just added a new section to my photo gallery, and an article describing my recent &#8220;Grand Circle&#8221; tour of the Southwestern USA: what worked, what didn&#8217;t, and how to avoid sleep deprivation and scurvy!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2008/my-grand-circle-tour/feed/</wfw:commentRss>
            <slash:comments>4</slash:comments>
                        	</item>
		<item>
		<title>Using Volume Shadowing with Ntbackup Under Vista</title>
		<link>https://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/</link>
					<comments>https://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 09 Jul 2007 00:00:03 +0000</pubDate>
				<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="https://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>https://www.andrewj.com/blog/2007/using-volume-shadowing-with-ntbackup-under-vista/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>My Photo Gallery is Now Live</title>
		<link>https://www.andrewj.com/blog/2007/my-photo-gallery-is-now-live/</link>
					<comments>https://www.andrewj.com/blog/2007/my-photo-gallery-is-now-live/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 04 Jul 2007 06:19:21 +0000</pubDate>
				<category><![CDATA[Personal News]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Website & Blog]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2007/my-photo-gallery-is-now-live/</guid>
                    <description><![CDATA[I&#8217;ve always had a strong interest in photography, both as a practical tool to record our experiences in life, and as an art form. Fans of the Coppertrees Calendar will know how I&#8217;ve had great fun capturing friends, family and &#8230; <a href="https://www.andrewj.com/blog/2007/my-photo-gallery-is-now-live/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve always had a strong interest in photography, both as a practical tool to record our experiences in life, and as an art form. Fans of the Coppertrees Calendar will know how I&#8217;ve had great fun capturing friends, family and travel over the years.</p>
<p>I&#8217;ve also always had great admiration for those photographers whose work can really move the emotions, particularly the great landscape photographers like Ansel Adams. Taking good representational photographs is hard enough, but establishing a composition which can both emotionally inspire the viewer and satisfy the critics is even harder.</p>
<p>Over the last year or so I&#8217;ve been rediscovering photography with a Digital SLR, and on my new <a href="https://www.andrewj.com/photography/photography.asp">photography pages</a> you&#8217;ll find some of my efforts, plus (in coming weeks) some hints, tips and tools for the D-SLR photographer.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2007/my-photo-gallery-is-now-live/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Paradigm Shift &#8211; Clear Memory Now!</title>
		<link>https://www.andrewj.com/blog/2007/paradigm-shift-clear-memory-now/</link>
					<comments>https://www.andrewj.com/blog/2007/paradigm-shift-clear-memory-now/#comments</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sat, 02 Jun 2007 01:01:00 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2007/paradigm-shift-clear-memory-now/</guid>
                    <description><![CDATA[Why do we in IT insist on forgetting so much valuable knowledge? <a href="https://www.andrewj.com/blog/2007/paradigm-shift-clear-memory-now/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve been musing lately on why we in IT insist on forgetting so much valuable knowledge. I don&#8217;t know whether it&#8217;s because of our youth-obsessed culture and our focus on the newest and best, because of our tendency to prioritise on-the-job over traditional learning, or whether there&#8217;s simply too much in the &#8220;architect&#8217;s book of knowledge&#8221; (ABOK), and we all have to focus on the new to keep up.</p>
<p>I explore two very different examples: the value of understanding RS232 in this 3G+ world, and some recent <a href="http://www.veryard.com/so/2007/01/soa-algebra.htm">discussions on service reliability</a>, both of which can be resolved using some quite old knowledge&#8230;. (<a href="/thoughts/memory.php">Read More&#8230;</a>)</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2007/paradigm-shift-clear-memory-now/feed/</wfw:commentRss>
            <slash:comments>2</slash:comments>
                        	</item>
		<item>
		<title>The Tevye Scale of Approval</title>
		<link>https://www.andrewj.com/blog/2007/the-tevye-scale-of-approval/</link>
					<comments>https://www.andrewj.com/blog/2007/the-tevye-scale-of-approval/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 27 Apr 2007 07:36:25 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2007/the-tevye-scale-of-approval/</guid>
                    <description><![CDATA[Instead of binary accept/reject assessments, here's a way for an architect to record his true feelings <a href="https://www.andrewj.com/blog/2007/the-tevye-scale-of-approval/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>The accept/reject assessments of the Sarbanes-Oxley world are far too binary, as they don&#8217;t allow an architect to record his true feelings about a piece of work. I have therefore decided that in future I will record my assessments using what I have named the &#8220;Tevye Scale of Approval&#8221;</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2007/the-tevye-scale-of-approval/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Enterprise Architecture Conference 2006 &#8211; My Paper</title>
		<link>https://www.andrewj.com/blog/2006/enterprise-architecture-conference-2006-my-paper/</link>
					<comments>https://www.andrewj.com/blog/2006/enterprise-architecture-conference-2006-my-paper/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 20 Jun 2006 08:10:29 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[My Publications]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[favourite]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/enterprise-architecture-conference-2006-my-paper/</guid>
                    <description><![CDATA[A paper on Agile Architecture which brings together many of my ideas for the first time <a href="https://www.andrewj.com/blog/2006/enterprise-architecture-conference-2006-my-paper/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just spent three enjoyable days at the 2006 Enterprise Architecture Conference in London. IRM did their usual excellent job of making it run like clockwork, and my good friend Sally Bean helped them develop an interesting and varied programme. To my mind the best speakers were <a href="http://www.logicalleap.com/" target="_blank">Jeff Scott</a>, and Chris Wilson of BP. Another encouraging sign was the presence of a great many International delegates.</p>
<p>I presented a paper on Agile Architecture. If you regularly read my work you&#8217;ll recognise many of the ideas, but I&#8217;ve managed to bring them all together for the first time. You can <a href="https://www.andrewj.com/publications/publications.htm#Agile">download my slides and script here</a>.</p>
<p>What was very interesting was how the thrust of the material has changed from a few years ago. No-one was claiming that a given framework, process or toolset can solve EA problems. At the risk of being uncharitable I thought John Zachman&#8217;s ideas sounded very tired, and there was almost no mention of alternative frameworks such as TOGAF. I may have self-selected by not attending any vendor sessions, but there was also no promotion of tools or technology. A common view was that EA, SOA and many supporting concepts are currently entering the trough of the hype cycle.</p>
<p>Instead the focus was largely on people-related problems and approaches. The labels varied, but several speakers introduced ideas familiar to agile architects. Maybe we&#8217;re doing something right after all.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/enterprise-architecture-conference-2006-my-paper/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>You Need Architects&#8230;</title>
		<link>https://www.andrewj.com/blog/2006/you-need-architects/</link>
					<comments>https://www.andrewj.com/blog/2006/you-need-architects/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 24 May 2006 18:24:41 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/you-need-architects/</guid>
                    <description><![CDATA[Just in case you haven&#8217;t already seen it&#8230;. Why you need architects, in song and dance. Enjoy! <a href="https://www.andrewj.com/blog/2006/you-need-architects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Just in case you haven&#8217;t already seen it&#8230;.</p>
<p>Why you need architects, in song and dance.</p>
<p>Enjoy!</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/you-need-architects/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Best Practices in Test Automation</title>
		<link>https://www.andrewj.com/blog/2006/best-practices-in-test-automation/</link>
					<comments>https://www.andrewj.com/blog/2006/best-practices-in-test-automation/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 23 May 2006 16:12:38 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/best-practices-in-test-automation/</guid>
                    <description><![CDATA[I am looking for one of my clients into how costs can be reduced, or quality increased, by increasing the extent to which testing is automated. As a first step, I am trying to develop a comprehensive list of test &#8230; <a href="https://www.andrewj.com/blog/2006/best-practices-in-test-automation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I am looking for one of my clients into how costs can be reduced, or quality increased, by increasing the extent to which testing is automated.</p>
<p>As a first step, I am trying to develop a comprehensive list of test automation &#8220;best practices&#8221;, grouped roughly by life-cycle (or iteration) stage. I&#8217;m trying to find practices which are broadly independent of specific methods and technologies, although obviously tool support may vary depending on the chosen technology.</p>
<p><a href="/agile/articles/agile practices.asp">This article</a> is my first draft of such a list.</p>
<p>I&#8217;d welcome suggestions from my readers if you think there are any omissions (or if you substantially disagree with anything I&#8217;ve included).</p>
<p>Thanks</p>
<p>Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/best-practices-in-test-automation/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Agile Architect at EAC 2006</title>
		<link>https://www.andrewj.com/blog/2006/the-agile-architect-at-eac-2006/</link>
					<comments>https://www.andrewj.com/blog/2006/the-agile-architect-at-eac-2006/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Wed, 22 Mar 2006 20:00:49 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/the-agile-architect-at-eac-2006/</guid>
                    <description><![CDATA[If anyone is interested in hearing more about my views on architecture, and how agile methods apply to the work of the architect, please sign up for the 2006 Enterprise Architecture Conference in London in June. I&#8217;m presenting a paper &#8230; <a href="https://www.andrewj.com/blog/2006/the-agile-architect-at-eac-2006/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>If anyone is interested in hearing more about my views on architecture, and how agile methods apply to the work of the architect, please sign up for the 2006 Enterprise Architecture Conference in London in June.</p>
<p>I&#8217;m presenting a paper entitled &#8220;The Agile Architect&#8221;. This focuses on both how agile projects can have a strong architecture, and how architects can learn and benefit from agile approaches. I take a rather different approach to some recent papers with a similar title (e.g. at this week&#8217;s otherwise excellent Microsoft Architecture Insight conference), which suggest that agile projects can &#8220;do away with the architect&#8221;.</p>
<p>I look forwards to seeing you there.</p>
<p>Andrew</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/the-agile-architect-at-eac-2006/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Who Are the Architects?</title>
		<link>https://www.andrewj.com/blog/2006/who-are-the-architects/</link>
					<comments>https://www.andrewj.com/blog/2006/who-are-the-architects/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 19 Jan 2006 00:00:00 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[favourite]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/who-are-the-architects/</guid>
                    <description><![CDATA[How a number of people in different rules contribute to "architecture" <a href="https://www.andrewj.com/blog/2006/who-are-the-architects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s a perennial discussion in architecture forums like the <a href="http://www.wwisa.org" target="_blank" rel="noopener noreferrer">WWISA</a> about the role of the architect, and the discussion regularly degenerates into a debate between the broad and narrow views of what the architect does.</p>
<p>But I&#8217;m not sure that&#8217;s the key question. I think the right question is &#8220;Who are the architects?&#8221;</p>
<p>Somehow, a number of tasks must be discharged, but how varies from project to project. In the last year I&#8217;ve had a modest building project which tells an interesting story about how different people contribute to &#8220;the architecture&#8221;. <a href="/thoughts/who are the architects.php">Read more here&#8230; </a></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/who-are-the-architects/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>An Agile Architecture War Story</title>
		<link>https://www.andrewj.com/blog/2006/an-agile-architecture-war-story/</link>
					<comments>https://www.andrewj.com/blog/2006/an-agile-architecture-war-story/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 03 Jan 2006 00:00:00 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
		<category><![CDATA[favourite]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2006/an-agile-architecture-war-story/</guid>
                    <description><![CDATA[I don&#8217;t really believe in a common architectural process. As the author of a successful project management book, and recent articles on data architecture methods, I probably shouldn&#8217;t say this, but to paraphrase a famous quote, &#8220;When I hear &#8216;process&#8217;, &#8230; <a href="https://www.andrewj.com/blog/2006/an-agile-architecture-war-story/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I don&#8217;t really believe in a common architectural process. As the author of a successful project management book, and recent articles on data architecture methods, I probably shouldn&#8217;t say this, but to paraphrase a famous quote, &#8220;When I hear &#8216;process&#8217;, I reach for my gun!&#8221;</p>
<p>This is a story of a project I worked upon which followed an informal, agile process, but delivered a successful architecture. Hopefully it serves to support my assertion that agile can have an architecture, but needs an agile architect.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2006/an-agile-architecture-war-story/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Modelling Data Mapping &#8211; A Challenge</title>
		<link>https://www.andrewj.com/blog/2005/modelling-data-mapping-a-challenge/</link>
					<comments>https://www.andrewj.com/blog/2005/modelling-data-mapping-a-challenge/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Fri, 26 Aug 2005 15:44:46 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/modelling-data-mapping-a-challenge/</guid>
                    <description><![CDATA[Almost all integration projects contain one or more transformations (sometimes called &#8220;mappings&#8221;) between two different structures holding equivalent data (for example the order tables in the database, and the order XML message). We know how to model the individual static &#8230; <a href="https://www.andrewj.com/blog/2005/modelling-data-mapping-a-challenge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Almost all integration projects contain one or more transformations (sometimes called &#8220;mappings&#8221;) between two different structures holding equivalent data (for example the order tables in the database, and the order XML message). We know how to model the individual static data structures in various ways, but the most common approach is to represent each by a UML class model, and there are established conventions for how to do this for different data sources.</p>
<p>However, UML doesn&#8217;t help when it comes to the transformations themselves, and typically the detail has to be captured either in code, or a proprietary format. Most good integration tools provide some sort of &#8220;visual mapping tool&#8221;, where the developer drags and drops to create links between representations of the two structures, usually imported directly from their physical schemas. Here&#8217;s <a target="_blank" href="https://www.andrewj.com/images/seebeyond_example.JPG">an example</a> using SeeBeyond. <a target="_blank" href="http://www.altova.com">Altova</a> provide a good stand-alone data mapping tool called Mapforce &#8211; here&#8217;s <a target="_blank" href="https://www.andrewj.com/images/altova_example.jpg">an example</a> showing it in use. The problem is that these tools work directly with the physical structure, and don&#8217;t export the mapping information in a reusable format, so that information is completely disconnected from the UML analysis or design models.</p>
<p>I have experimented with trying to represent mapping information in a UML model, but so far without much success. The best solution I&#8217;ve found so far is to use some sort of &#8220;pseudo code&#8221; (it could be OCL, pseudo-Java, pseudo-VB or anything similar). For example, we could easily annotate the model with code fragments such as:</p>
<p align="center"><code>Database.order_table.order_no = Message.Header.OrderNo</code></p>
<p>(where each element refers to a UML Package.Class.Attribute combination).</p>
<p>The problems are that it&#8217;s not clear where to put this annotation, most UML modelling tools won&#8217;t help generate it, and there&#8217;s no graphical representation. Ultimately, writing pseudo-code like this is probably not much better than abandoning the model and moving straight to using your integration tool.</p>
<p>My question is: does anybody know a better way? Has anybody found a good way of representing mapping information in UML? And if so, is there any good tool support?</p>
<p>If you know, please send me a message.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/modelling-data-mapping-a-challenge/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Metropolis &#8211; Where Do You Want To Live Today?</title>
		<link>https://www.andrewj.com/blog/2005/metropolis-where-do-you-want-to-live-today/</link>
					<comments>https://www.andrewj.com/blog/2005/metropolis-where-do-you-want-to-live-today/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 08 Aug 2005 15:57:02 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/metropolis-where-do-you-want-to-live-today/</guid>
                    <description><![CDATA[There&#8217;s been a lot of talk in recent years about a &#8220;city planning&#8221; metaphor for Enterprise Architecture development. Pat Helland&#8217;s article &#8220;Metropolis&#8221; in the Microsoft Architecture Journal is a very good example (see my post on this for some key &#8230; <a href="https://www.andrewj.com/blog/2005/metropolis-where-do-you-want-to-live-today/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>There&#8217;s been a lot of talk in recent years about a &#8220;city planning&#8221; metaphor for Enterprise Architecture development. Pat Helland&#8217;s article <a href="http://msdn.microsoft.com/architecture/journal/default.aspx?pull=/library/en-us/dnmaj/html/aj2metrop.asp" target="_blank">&#8220;Metropolis&#8221;</a> in the Microsoft Architecture Journal is a very good example (see <a href="https://www.andrewj.com/thoughts/viewblog.php?id=20050711-1825.htm">my post</a> on this for some key quotes).</p>
<p>While the metaphor might still be valid, some people are beginning to question how far it should be taken. Helland&#8217;s article, like others before it, implies that &#8220;good&#8221; EA looks rather like a medium-sized modern American town, complete with relatively standard services, civic buildings and commercial venues. In an answer to the original &#8220;Metropolis&#8221; article Richard Veryard and Philip Boxer have published <a href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnmaj/html/Jour5metro.asp" target="_blank">&#8220;Metropolis and SOA Governance&#8221;</a> which challenges several of Helland&#8217;s assumptions.</p>
<p>I think that maybe we should extend the metaphor by thinking about cities, or Enterprise Architectures, as very diverse entities. What sort of &#8220;city&#8221; do you live in? To what extent is it planned? What is the vision, and do the citizens share in it? Does the EA resemble a nice neat midwest town, a dark, brooding Gotham City, a glass and steel Utopia, a federation of small towns with lots of empty space between them, a medieaval walled town, or a wartime mid-european ghetto?</p>
<p>And the metaphor can be taken further. Do you want to promote &#8220;infill development&#8221;, closing up functional gaps, or do you want to keep clear separation between the various zones? Do you want the shared services to be clearly visible, as they are in modern, purpose-built towns or hidden beneath a facade which looks much older or simpler? Do you expect to eventually knock down and rebuild older &#8220;legacy&#8221; zones, or do you want to preserve them with the minimum of change (a common requirement for our valuable historic buildings)? Do you want to accomodate the small hardware shop (read small the bespoke system) as well as the new DIY superstore (the ERP package)?</p>
<p>Finally, remember that it is extremely rare for a city to be truly planned and designed from scratch. You usually start with something established. Even if the city has been flattened by a bomb, you&#8217;ll have to observe land rights (this is what stopped Christopher Wren and Charles II realising their grand design after the Fire of London). This is equally true of Enterprise Architectures.</p>
<p>The city planning metaphor is a powerful one, but its true power may come if we use it to explore problems as well as utopian ideals.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/metropolis-where-do-you-want-to-live-today/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Review &#8211; Enterprise Integration Patterns</title>
		<link>https://www.andrewj.com/blog/2005/review-enterprise-integration-patterns/</link>
					<comments>https://www.andrewj.com/blog/2005/review-enterprise-integration-patterns/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 24 Jul 2005 08:45:53 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/review-enterprise-integration-patterns/</guid>
                    <description><![CDATA[I&#8217;ve just posted my review of Gregor Hohpe and Bobby Woolfe&#8217;s excellent book on Enterprise Integration using messaging, &#8220;Enterprise Integration Patterns&#8221;. Overall it&#8217;s an excellent book, and wiil probably become a &#8220;bible&#8221; for those involved in the high-level design of &#8230; <a href="https://www.andrewj.com/blog/2005/review-enterprise-integration-patterns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just posted my review of Gregor Hohpe and Bobby Woolfe&#8217;s excellent book on Enterprise Integration using messaging, &#8220;Enterprise Integration Patterns&#8221;. Overall it&#8217;s an excellent book, and wiil probably become a &#8220;bible&#8221; for those involved in the high-level design of integration solutions. To find out more, please <a href="/blog/reviews/hohpe">read my review</a>.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/review-enterprise-integration-patterns/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Metropolis &#8211; a Metaphor for IT Maturity</title>
		<link>https://www.andrewj.com/blog/2005/metropolis-a-metaphor-for-it-maturity/</link>
					<comments>https://www.andrewj.com/blog/2005/metropolis-a-metaphor-for-it-maturity/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Mon, 11 Jul 2005 17:25:16 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/metropolis-a-metaphor-for-it-maturity/</guid>
                    <description><![CDATA[I&#8217;ve just read an excellent paper by Pat Helland of Microsoft, in which he likens the development of cities and manufacturing in the 19th century to the development of systems and business models now. His conclusion &#8211; IT at the &#8230; <a href="https://www.andrewj.com/blog/2005/metropolis-a-metaphor-for-it-maturity/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>I&#8217;ve just read an excellent paper by Pat Helland of Microsoft, in which he likens the development of cities and manufacturing in the 19th century to the development of systems and business models now. His conclusion &#8211; IT at the moment is about at the same stage as America in the 1880s, when they were just starting to turn the Wild West into an industrialised nation! </p>
<p>Three short quotes from Helland&#8217;s conclusions bear repeating directly. On heterogeneity he says:  </p>
<blockquote><p>Remember that heterogeneity happens. Unless you have a very simple application portfolio, shared services will not be achieved by trying to put all<br />
of your applications on one version of one platform. Even if you could, the next<br />
merger would change that! Rather, you have to design for interoperability and<br />
integration across platforms. This is the force that is driving the industry<br />
wide work in service-oriented architectures. </p></blockquote>
<p>He extends the popular &#8220;city planning&#8221; metaphor to IT investment:  </p>
<blockquote><p>IT investment is a balance of funding the sacred, protecting historic monuments, and allocating spending between infrastructure and business opportunity. Striking this balance is a key facet in effective governance, and in realizing the potential of IT in your organization.</p></blockquote>
<p>And finally, those who seek to maintain control of their enterprise<br />
architecture through heavy governance would be well advised to note: </p>
<blockquote><p>You have to maintain a light hand. It is counterproductive to try to dictate<br />
what happens in every structure in town, what color shirts are made, and how much is charged for soap. You have to embrace the semi-autonomous approach to governance that is characteristic of our cities, and allow the process owners to optimize and achieve efficiencies with as few constraints as<br />
possible.</p></blockquote>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/metropolis-a-metaphor-for-it-maturity/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Cirrus Minor &#8211; A New Architecture Site</title>
		<link>https://www.andrewj.com/blog/2005/cirrus-minor-a-new-architecture-site/</link>
					<comments>https://www.andrewj.com/blog/2005/cirrus-minor-a-new-architecture-site/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Tue, 28 Jun 2005 07:43:23 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/cirrus-minor-a-new-architecture-site/</guid>
                    <description><![CDATA[Arnon Rotem-Gal-Oz has set up an interesting new site / blog dedicated to software architecture. Of particular note, he&#8217;s trying to put some detail on the architecture &#8220;process&#8221; which is often negelcted as a single box on the development process &#8230; <a href="https://www.andrewj.com/blog/2005/cirrus-minor-a-new-architecture-site/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>Arnon Rotem-Gal-Oz has set up an interesting new site / blog dedicated to software architecture. Of particular note, he&#8217;s trying to put some detail on the architecture &#8220;process&#8221; which is often negelcted as a single box on the development process picture. His approach has the name <em>SPAMMED</em>, catchy, but might cause the odd problem with email filters <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/cirrus-minor-a-new-architecture-site/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>Domain-Specific Languages</title>
		<link>https://www.andrewj.com/blog/2005/domain-specific-languages/</link>
					<comments>https://www.andrewj.com/blog/2005/domain-specific-languages/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Sun, 26 Jun 2005 09:06:19 +0000</pubDate>
				<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="https://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>https://www.andrewj.com/blog/2005/domain-specific-languages/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
		<item>
		<title>The Fear Premium</title>
		<link>https://www.andrewj.com/blog/2005/the-fear-premium/</link>
					<comments>https://www.andrewj.com/blog/2005/the-fear-premium/#respond</comments>
		
		<dc:creator><![CDATA[Andrew]]></dc:creator>
		<pubDate>Thu, 23 Jun 2005 18:56:51 +0000</pubDate>
				<category><![CDATA[Agile & Architecture]]></category>
		<category><![CDATA[Thoughts on the World]]></category>
        		<guid isPermaLink="false">http://www.andrewj.com/blog/index.php/2005/the-fear-premium/</guid>
                    <description><![CDATA[In an interesting echo of my last piece (Why Software Isn&#8217;t Like Building Construction), Scott Ambler has analysed bureaucratic processes as a response to management fear about what can go wrong in software development. His conclusion is that these processes &#8230; <a href="https://www.andrewj.com/blog/2005/the-fear-premium/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
                            <content:encoded><![CDATA[<p>In an interesting echo of my last piece (<a href="http://www.agilearchitect.org/agile/articles/Not%20Building.asp">Why Software Isn&#8217;t Like Building Construction</a>), <a href="http://www.agilemodeling.com">Scott Ambler</a> has analysed bureaucratic processes as a response to management fear about what can go wrong in software development. His conclusion is that these processes only give the <em>illusion</em> of addressing the underlying fear. His article is well worth reading.</p>
]]></content:encoded>
                                        <wfw:commentRss>https://www.andrewj.com/blog/2005/the-fear-premium/feed/</wfw:commentRss>
            <slash:comments>0</slash:comments>
                        	</item>
	</channel>
</rss>

<!-- Comet Cache is NOT caching this page, because `$_SERVER['REQUEST_URI']` indicates this is a `/feed`; and the configuration of this site says not to cache XML-based feeds. -->