<?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>Alan's blog &#187; software engineering</title>
	<atom:link href="http://www.alandix.com/blog/tag/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alandix.com/blog</link>
	<description>just starting ...</description>
	<lastBuildDate>Wed, 08 Feb 2012 18:53:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Time Machine &#8211; when it goes wrong and how to fix it</title>
		<link>http://www.alandix.com/blog/2010/07/09/time-machine-when-it-goes-wrong-and-how-to-fix-it/</link>
		<comments>http://www.alandix.com/blog/2010/07/09/time-machine-when-it-goes-wrong-and-how-to-fix-it/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 09:05:55 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[fail-fast programming]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=262</guid>
		<description><![CDATA[Unfortunately only fixing Mac OS X backup, not the Tardis &#8230; but, nonetheless, critical. What bit of software do you really need to be reliable?  If anything else goes really wrong you have the backup &#8212; but if the backup fails you really are lost. And Mac OS X Time Machine, while it does have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.apple.com/macosx/what-is-macosx/time-machine.html" target="_blank"><img class="alignright" title="MacOSX Time Machine" src="http://www.alandix.com/images/time-machine-logo-only.gif" alt="" width="100" height="100" /></a>Unfortunately only fixing Mac OS X backup, not the Tardis <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  &#8230; but, nonetheless, critical.</p>
<p>What bit of software do you really need to be reliable?  If anything else goes really wrong you have the backup &#8212; but if the backup fails you really are lost.</p>
<p>And Mac OS X <a href="http://www.apple.com/macosx/what-is-macosx/time-machine.html" target="_blank">Time Machine</a>, while it does have a very pretty  interface, is inclined to get stuck sometimes.</p>
<p>This is my own story of how it goes wrong &#8230; and how to put it right.</p>
<p>&#8230; and throughout I&#8217;ve dropped in a few lessons for anyone implementing critical system software &#8212; maybe the odd Apple engineer is reading</p>
<h3>how to tell when things are wrong</h3>
<p>Occasionally Time Machine seems to be stuck, but isn&#8217;t really.  When you first do a backup, or when you haven&#8217;t backed up to a particular disk for ages (perhaps if you have been away on a trip), it can spend several hours &#8216;preparing&#8217;.  You can tell it is &#8216;preparing&#8217; because when you open the Time Machine preferences there is the little barbers pole saying &#8216;preparing&#8217; <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="padding-left: 30px;"><img class="alignnone" title="Time Machine preparing ..." src="http://www.alandix.com/images/time-machine-preparing.gif" alt="" width="253" height="45" /></p>
<p>This is when it is running over the disk working out what it needs to backup, and always seems to be the lengthiest operation, actually backing up the disk is often quite fast, and yet, for some reason there is no indication of how far through the &#8216;preparing&#8217; process it has got.</p>
<p style="padding-left: 30px;"><span style="color: #000080;"><strong>Lesson 1: </strong></span><span style="color: #993366;">make sure you include progress indicators for anything that can take a while, not just the obvious &#8216;slow&#8217; things.</span></p>
<p>So, when you see &#8216;preparing&#8217;, just be patient!</p>
<p>However, at least half-a-dozen times over the last year, my Time Machine has got completely stuck.  I have seen this happen in three ways:</p>
<p>(i)  it is still saying &#8216;preparing&#8217; after leaving it overnight!</p>
<p>(ii)  it starts to transfer to disk, but then gets stuck part way:</p>
<p style="padding-left: 30px;"><img class="alignnone" title="Tiem Machine transfering to disk" src="http://www.alandix.com/images/time-machine-transfering.png" alt="" width="252" height="44" /></p>
<p>(iii)  if you look in the Time Machine preferences it says the backup has failed</p>
<p>This last time in fact the first sign was (iii), but it doesn&#8217;t actually tell you (if you don&#8217;t look) until it has failed for ten days, by which time I was travelling.  In the days before Time Machine I always did a manual backup before travelling as I knew that was when things were most likely to go wrong, but now-a-days I have got used to relying on it and forget to check it is working OK &#8230; so if you are paranoid about your data, do peek occasionally at Time Machine to check it is still working!</p>
<p>When I got home and told Time Machine to backup to the Time Capsule here rather than my office disk (why can&#8217;t it remember that I have two backup disks??).  Then (after being very very patient while to was &#8216;preparing&#8217; for four hours), I saw it got stuck in step (ii) at 1.4 GB or 4.2 GB.  Of course progress indicators are never very good for very slow operations, when transferring several GB of data there may be several minutes before the bar even moves a pixel &#8230; but I was very very patient and it definitely did not move!</p>
<p style="padding-left: 30px;"><span style="color: #000080;"><strong>Lesson 2: </strong></span><span style="color: #993366;">for very long processes supplement the progress indicator with some other indicator to show things are still working, in this case perhaps amount transferred in last minute<br />
</span></p>
<p>At this point I did the normal things, turn Time Machine On/Off,  restart machine a couple of times, etc., but when it persists then you know something is deeply wrong.</p>
<h3>so why does it go wrong?</h3>
<p>In fact Fiona@<a href="http://www.lovefibre.com/" target="_blank">lovefibre</a> has found Time Machine flawless for her desktop machine backing up to exactly the same <a href="http://www.apple.com/timecapsule/" target="_blank">Time Capsule</a>.  I am guessing the problem I have is because I use a laptop so possible reasons:</p>
<ul>
<li>it may go to sleep occasionally, breaking connection to the Time Capsule</li>
<li>maybe the WiFi aerial on a laptop is not as good as the desktop</li>
</ul>
<p>However, if every laptop failed as often surely Apple would have fixed it by now.  So guessing there is an additional factor:</p>
<ul>
<li>my disk has 196 Gb of data, much of it in smaller document files (word docs, code files, etc.), not just a few giant movies.</li>
</ul>
<p>The software will be designed to withstand a certain amount of external failure, especially when connecting to disks over WiFi as the Time Capsule is designed to do.  However, I imagine that there are places in the code where there are race conditions, or critical portions where external failure really makes a difference.  If the external connections are reliable and the backup is quite fast the likelihood of hitting one of the nasty spots in the code is low.  However, if you have a lot of data to check and then transfer and the external failures more frequent, then the likelihood of hitting one increases and things start to go wrong.</p>
<p>I see similar problems with other software, Dreamweaver in particular, which has got better, but still can crash if the Internet connection is poor (see also &#8220;<a href="http://www.alandix.com/blog/2008/06/21/why-software-need-never-hang/" target="_blank">Why software need never hang</a>&#8220;).  What happens is that during testing, the <span style="color: #000000;">test machines  often have minimal data, little software (maybe just the operating system and what is being tested), and  operate in perfect situations.  In such circumstances these hidden flaws never become apparent.<br />
</span></p>
<p style="padding-left: 30px;"><span style="color: #000080;"><strong>Lesson 3: </strong></span><span style="color: #993366;">make sure your test machine is fully loaded with data and applications, and operates in an unreliable environment, so that testing is realistic<br />
</span></p>
<p>However, this is not like Word crashing and losing your most recent edits to one document.  When Time Machine fails it seems to occasionally leave something corrupt in the backup disk so that subsequent attempts to backup also fail.  There is no excuse for this, the techniques for dealing with potential disk-writing failures are well established in both databases and low-level disk management.  For example, one can save a timestamp file at the end of successful operations so that, when  returning to the data, if the timestamp file is not there the software knows something went wrong last time.</p>
<p>Maybe Time Machine is trying to be too clever, picking up where it left off when, for example, connection to the disk is broken.  If so it clearly needs some additional mechanism to notice &#8220;I&#8217;ve tried this several times and it keeps going wrong, maybe I need to back off to the last successful state&#8221;.  Perhaps not something to worry about in less critical software, but not difficult to get right when it is really needed &#8230; as in backups!</p>
<p style="padding-left: 30px;"><span style="color: #000080;"><strong>Lesson 4: </strong></span><span style="color: #993366;">build critical software defensively in layers so that errors in one part do not affect the whole; and if saving to disk ensure there is some sort of atomic transaction<br />
</span></p>
<p>The aim during testing should be what I call &#8220;fail-fast programming&#8221; trying to make sure that failures happen during testing not real use!</p>
<p>One thing I found particularly disturbing about my most recent Time Machine hang is that when I looked at the system console it had regular spats of &#8220;unknown SIGSEGV&#8221; several times a minute &#8230; in the kernel!  If you don&#8217;t know UNIX internals the &#8216;kernel&#8217; is the heart of the operating system of the Mac, where all the lowest level work is done and where if something goes wrong <em>everything</em> fails.  SIGSEGV means that some bit of software is trying to access a memory location that doesn&#8217;t exist.  In fact while this is caught it is not so bad, the greater worry is that if it is trying to access non-existent memory, then it may corrupt other memory &#8230; and the kernel has access to everything &#8211; not good.</p>
<p style="padding-left: 30px;"><a href="http://www.alandix.com/images/time-machine-backup-console.png" target="_blank"><img class="alignnone" style="border: 1px solid black;" title="console with kernel SIGSEGV - segment violation!" src="http://www.alandix.com/images/time-machine-backup-console.png" alt="" width="342" height="139" /></a></p>
<p>Please, <em>please</em> Apple if you cannot get Time Machine to work properly, do not let it affect the kernel!</p>
<h3>how to put it right</h3>
<p>One might hope that even if Time Machine cannot notice itself there is something wrong at least there would be an option to say &#8220;restart yourself&#8221;.  One might hope, but there is not.  However, you can do it yourself by digging a little into the backup disk itself.</p>
<p>First problem is to stop the Time Machine backup if it has hung.</p>
<p>In the Time Machine control panel, you can simply slide the OFF-ON button to OFF.  The status <em>should</em> change to &#8216;stopping&#8217; and after a while stop.  Then you can restart the machine and try to fix things.</p>
<p style="padding-left: 30px;"><img class="alignnone" title="Tiem Machine on-off button" src="http://www.alandix.com/images/time-machine-on-off.png" alt="" width="139" height="49" /></p>
<p>This is the ideal thing to do, but I find that when Time Machine is really hung this rarely works.  I do turn it to OFF, but either it never changes to &#8216;stopping&#8217; and stays &#8216;preparing&#8217;, or it changes to &#8216;stopping&#8217;, but never does.  If this happens the system restart typically doesn&#8217;t restart the system as Time Machine won&#8217;t stop running.  Then, always with much trepidation, I reach for the on/off button on the Mac itself :-/</p>
<p style="padding-left: 30px;"><img class="alignnone" title="MacBook Pro power button" src="http://www.alandix.com/images/macbook-power-button.jpg" alt="" width="119" height="97" /></p>
<p>After doing a hard on/off like this, I usually do anther restart from the Apple menu &#8230; not sure if this is necessary, but just to be on the safe side!</p>
<p>Occasionally I skip to the next step before the hard restart.</p>
<p>Then you can start to fix the problem properly.</p>
<p>Find the backup disk.  If it is not obvious in the Finder use the &#8216;Go&#8217; menu and select &#8220;Computer&#8221;; it shows all the locally connected disks (or it may simply appear in the left hand favourites pane in each Finder window).</p>
<p>If you skipped the restart stage (or of you just peek now to see what it is like when it hasn&#8217;t gone wrong), you will see something like &#8220;Backup of Alan Dix’s MacBook Pro&#8221; (obviously for you it will not be &#8220;Alan Dix&#8217;s MacBook Pro&#8221;!).  This is the Time Machine backup.  However, if you have restarted the machine with Time Machine off you will have to find the actual disk that you chose as your backup disk and on it look for a file called something like &#8220;Alan Dix’s MacBook  Pro_0039fc56f8a2.sparsebundle&#8221;.  This is some form of compressed disk image.  In the older versions of Time Machine there was simply a folder with all the backups in it &#8212; I felt much more secure.  Now this is a single opaque file and I worry that if one day it gets corrupted :-/</p>
<p>Having found the &#8216;sparsebundle&#8217; double click it and it will display a little pop-up window that says &#8216;checking volumes&#8217;.  I keep meaning to see if this ever stops, but I am not patient enough and press the button that says to skip this state and then (after a while) it mounts the disk image and the disk &#8220;Backup of Alan Dix’s MacBook Pro&#8221; appears.</p>
<p>Double click &#8220;Backup of Alan Dix’s MacBook Pro&#8221; and look inside and then inside the folder &#8220;Backups_backupd&#8221; and you find loads of dated folders, which are the actual backups of your system that you can browse if you prefer instead of using the Time Machine interface.  In addition there may be one file ending &#8220;.inProgress&#8221;, which is some sort of internal file created while it is in the middle of doing the backup.</p>
<p style="padding-left: 30px;"><a href="http://www.alandix.com/images/time-machine-volume.png" target="_blank"><img class="alignnone" title="Time Machine backup volume" src="http://www.alandix.com/images/time-machine-volume.png" alt="" width="577" height="130" /></a></p>
<p>Delete the &#8220;.inProgress&#8221; file.</p>
<p>In addition, I usually delete the last of the dated folders (sort by &#8220;Date Modified&#8221; to get the last one).  However, if you don&#8217;t want to lose the last backup you can try just deleting the &#8220;inProgress&#8221; file and only delete the last dated backup if Time Machine still gets stuck.</p>
<p style="padding-left: 30px;"><span style="color: #000080;"><strong>Important: </strong></span><span style="color: #993366;">only delete the latest of the dated backup folders (e.g. &#8220;2010-06-09-225547&#8243; in the screen shot above), NOT the entire &#8220;Alan Dix&#8217;s Macbook Pro&#8221; folder.  If you do that you lose all your backups!<br />
</span></p>
<p>I recall doing this all with extreme trepidation the first time, but had got to the point when I couldn&#8217;t do backups or access them anyway so had nothing to lose.  Actually it seems pretty OK getting in here and doing this sort of thing, the nice thing about Time Machine is that it uses ordinary folder structures that you can peek around in and see are there all secure.  I am much happier with this than the kind of backup where you only know if it is working the day you try to restore something!  At least half the times I have used such backups over the years I&#8217;ve found the backup is in some way corrupt or incomplete. So actually one up for Time Machine <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Now reboot again (for luck).  Turn Time Machine back on in the control panel and wait &#8230; a long time &#8230; it will start &#8216;preparing&#8217; as if for the first backup &#8230; and several hours later hopefully all will be well.</p>
<p>But do remember to set the power save options not to go to sleep in the middle!</p>
<p>In fact the above has always worked for me except for this last time when, for some reason (maybe I missed something on the way?), it hung again and I had to go through the whole process again.  This time I waited until yesterday evening before turning Time Machine back on so that I could leave it to do the long 4 hour &#8216;preparing&#8217; stage without me doing anything else.</p>
<p>And then:</p>
<p style="padding-left: 30px;"><a href="http://www.alandix.com/images/time-machine-control-panel-success.png" target="_blank"><img class="alignnone" title="Tiem Machine success!" src="http://www.alandix.com/images/time-machine-control-panel-success.png" alt="" width="294" height="195" /></a></p>
<p>Joy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2010/07/09/time-machine-when-it-goes-wrong-and-how-to-fix-it/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>reading: Computing is a Natural Science</title>
		<link>http://www.alandix.com/blog/2008/12/09/reading-computing-is-a-natural-science/</link>
		<comments>http://www.alandix.com/blog/2008/12/09/reading-computing-is-a-natural-science/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 20:22:49 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[computation]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[mathematics]]></category>
		<category><![CDATA[socio-organisational church-turing hypothesis]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=108</guid>
		<description><![CDATA[I&#8217;ve just been re-reading Peter Denning&#8217;s article &#8220;Computing is a Natural Science&#8221;1.    The basic thesis is that computation as broad concept goes way beyond digital computers and many aspects of science and life have a computational flavour; &#8220;Computing is the study of natural and artificial information processes&#8220;.  As an article this is in some [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just been re-reading Peter Denning&#8217;s article &#8220;<a title="ACM DOI: Computing is a Natural Science" href="http://doi.acm.org/10.1145/1272516.1272529" target="_blank">Computing is a Natural Science</a>&#8221;<sup><a href="#footnote-1-108" id="footnote-link-1-108" title="See the footnote.">1</a></sup>.    The basic thesis is that computation as broad concept goes way beyond digital computers and many aspects of science and life have a computational flavour; &#8220;<em>Computing is the study of natural and artificial information processes</em>&#8220;.  As an article this is in some ways not so controversial as computational analogies have been used in cognitive science for almost as long as there have been computers (and before that analogies with steam engines) and readers of popular science magazines can&#8217;t have missed the physicists using parallels with information and computation in cosmology.  However, Denning&#8217;s paper is to some extent a manifesto, or call to arms: &#8220;computing is not just a load of old transistor, but something to be proud of, the roots of understanding the universe&#8221;.</p>
<p>Particularly useful are the &#8220;principles framework for computing&#8221; that Denning has been constructing through a community discussion process.  I mentioned these before when blogging about &#8220;<a href="http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/" target="_blank">what is computing?</a> The article lists the top level categories and gives examples of how each of these can be found in areas that one would not generally think of as &#8216;computing&#8217;.</p>
<blockquote>
<p class="ip"><strong>Computation</strong><span style="font-weight: normal;"> (meaning and limits of computation)</span><strong><br />
Communication</strong><span style="font-weight: normal;"> (reliable data transmission)</span><strong><br />
Coordination</strong><span style="font-weight: normal;"> (cooperation among networked entities)</span><strong><br />
Recollection</strong><span style="font-weight: normal;"> (storage and retrieval of information)</span><strong><br />
Automation</strong><span style="font-weight: normal;"> (meaning and limits of automation)</span><strong><br />
Evaluation</strong><span style="font-weight: normal;"> (performance prediction and capacity planning)</span><strong><br />
Design</strong><span style="font-weight: normal;"> (building reliable software systems)<br />
</span><span style="font-weight: normal;"> </span><span style="font-weight: normal;"> </span><span style="font-weight: normal;"> </span><span style="font-weight: normal;"> </span><span style="font-weight: normal;"> <em>c</em></span><span style="font-weight: normal;"><em>ategories from &#8220;<a href="http://cs.gmu.edu/cne/pjd/GP/GP-site/welcome.html" target="_blank">Great Principles of Computing</a>&#8220;</em></span></p></blockquote>
<p class="ip">Occasionally the mappings are stretched &#8230; I&#8217;m not convinced that natural fractals are about hierarchical aggregation &#8230; but they do paint a picture of ubiquitous parallels across the key areas of computation.<br />
<a href="http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/" target="_blank"></a></p>
<p class="ip">Denning is presenting a brief manifesto not a treatise, so examples of very different kinds tend to be presented together.  There seem to be three main kinds:</p>
<ul>
<li>ubiquity of computational devices &#8211; from iPods to the internet, computation is part of day-to-day life</li>
<li>ubiquity of computation as a tool -  from physical simulations to mathematical proofs and eScience</li>
<li>ubiquity of computation as an explanatory framework &#8211; modelling physical and biological systems as if they were performing a computational function</li>
</ul>
<p class="ip">It is the last, computation as analogy or theoretical lens that seems most critical to the argument as the others are really about computers in the traditional sense and few would argue that computers (rather than computation) are everywhere.</p>
<p class="ip">Rather like weak AI, one can look treat these analogies as simply that, rather like the fact that electrical flow in circuits can be compared with water flow in pipes.  So we may feel that computation may be a good way to understand a phenomena, but with no intention of saying the phenomena is fundamentally computational.</p>
<p class="ip">However, some things are closer to a &#8216;strong&#8217; view of computation as natural science.  One example of this is the &#8220;socio-organisational Church-Turing hypothesis&#8221;, a term I often use in talks with its origins in a 1998 paper &#8220;<a href="http://www.hcibook.com/alan/papers/artefacts98/" target="_blank">Redefining Organisational Memory</a>&#8220;.  The idea is that organisations are, amongst other things, information processing systems, and therefore it is reasonable to expect to see structural similarities between phenomena in organizations and those in other information processing systems such as digital computers or our brains.  Here computation is not simply an analogy or useful model, the similarity is because there is a deep rooted relationship &#8211; an organisation is not just like a computer, it is actually computational.</p>
<p>Apparently absent are examples of where the methods of algorithmics or software engineering are being applied in other domains; what has become known as &#8216;<a href="http://portal.acm.org/citation.cfm?id=1227504.1227378" target="_blank">computational thinking</a>&#8216;. This maybe because there are two sides to computing:</p>
<ul>
<li>computing (as a natural science) understanding how computers (and similar things) behave &#8211; related to issues such as emergence, interaction and communication, limits of computability</li>
<li>computing (as a design discipline) making computers (and similar things) behave as we want them to &#8211; related to issues such as hierarchical decomposition and separation of concerns</li>
</ul>
<p>The first can be seen as about understanding complexity and the latter controlling it.  Denning is principally addressing the former, whereas computational thinking is about the latter.</p>
<p>Denning&#8217;s thesis could be summarised as &#8220;computation is about more than computers&#8221;.  However, that is perhaps obvious in that the early study of computation by Church and Turing was before the advent of digital computers; indeed Church was primarily addressing what could be computed by mathematicians not machines!  Certainly I was left wondering what exactly was ubiquitous: computation, mathematics, cybernetics?</p>
<p>Denning notes how the pursuit of cybernetics as an all embracing science ran aground as it seemed to claim too much territory (although the practical application of control theory is still live and well) &#8230; and one wonders if the same could happen for Denning&#8217;s vision.  Certainly embodied mind theorists would find more in common with cybernetics than much of computing and mathematicians are not going to give up the language of God too easily.</p>
<p>Given my interest in all three subjects, computation, mathematics, cybernetics, it prompts me to look for the distinctions, and overlaps, and maybe the way that they are all linked (perhaps all just part of mathematics <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).  Furthermore as I am also interested in understanding the nature of computation I wonder whether looking at how natural things are &#8216;like&#8217; computation may be not only an application of computational understanding, but more a lens or mirror that helps us see computation itself more clearly.</p>
<p class="ip">
<br /><ol class="footnotes"><li id="footnote-1-108">well when I say re-reading I think the first &#8216;read&#8217; was more of a skim, great thing about being on sabbatical is I actually DO get to read things <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />    [<a href="#footnote-link-1-108">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2008/12/09/reading-computing-is-a-natural-science/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PPIG2008 and the twenty first century coder</title>
		<link>http://www.alandix.com/blog/2008/09/16/ppig2008-and-the-twenty-first-century-coder/</link>
		<comments>http://www.alandix.com/blog/2008/09/16/ppig2008-and-the-twenty-first-century-coder/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 17:36:22 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[human computer interaction]]></category>
		<category><![CDATA[mathematics]]></category>
		<category><![CDATA[maths]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[techie]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=95</guid>
		<description><![CDATA[Last week I was giving a keynote at the annual workshop PPIG2008 of the Psychology of Programming Interest Group.   Before I went I was politely pronouncing this pee-pee-eye-gee … however, when I got there I found the accepted pronunciation was pee-pig … hence the logo! My own keynote at PPIG2008 was &#8220;as we may code: [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I was giving a keynote at the annual workshop <a href="http://www.cs.st-andrews.ac.uk/~jr/ppig08/" target="_blank">PPIG2008</a> of the <a href="http://www.ppig.org/" target="_blank">Psychology of Programming Interest Group</a>.   Before I went I was politely pronouncing this pee-pee-eye-gee … however, when I got there I found the accepted pronunciation was pee-pig … hence the logo!</p>
<p><a href="http://www.ppig.org/" target="_blank"><img class="alignright" title="two pigs" src="http://www.cs.st-andrews.ac.uk/~jr/ppig08/img/pair-100.JPG" alt="" width="100" height="125" align="right" /></a></p>
<p>My own keynote at PPIG2008 was &#8220;<a title="as we may code - web pages" href="http://www.hcibook.com/alan/papers/PPIG2008-as-we-may-code/" target="_blank">as we may code: the art (and craft) of computer programming in the 21st century</a>&#8221; and was an exploration of the changes in coding from 1968 when <a title="Wikipedia.org: Donald Knuth" href="http://en.wikipedia.org/wiki/Donald_Knuth" target="_blank">Knuth</a> published the first of his books on &#8220;<a title="Wikipedia: the art of computer programmimg" href="http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming" target="_blank">the art of computer programming</a>&#8220;.  On the <a title="as we may code - web pages" href="http://www.hcibook.com/alan/papers/PPIG2008-as-we-may-code/" target="_blank">web site for the talk</a> I&#8217;ve made a relatively unstructured list of some of the distinctions I&#8217;ve noticed between 20th and 21st Century coding (C20 vs. C21); and in <a href="http://www.comp.lancs.ac.uk/~dixa/papers/PPIG2008-as-we-may-code/as-we-may-code-v2.pdf" target="_blank">my slides</a> I have started to add some more structure.  In general we have a move from more mathematical, analytic, problem solving approach, to something more akin to a search task, finding the right bits to fit together with a greater need for information management and social skills. Both this characterisation and the list are, of course, a gross simplification, but seem to capture some of the change of spirit.  These changes suggest different cognitive issues to be explored and maybe different personality types involved &#8211; as one of the attendees, <a href="http://www.cs.ncl.ac.uk/people/david.greathead" target="_blank">David Greathead</a>, pointed out, rather like the judging vs. perceiving personality distinction in Myers-Briggs<sup><a href="#footnote-1-95" id="footnote-link-1-95" title="See the footnote.">1</a></sup>.</p>
<p>One interesting comment on this was from <a href="mcs.open.ac.uk/mp8/ " target="_blank">Marian Petre</a>, who has studied many professional programmers.  Her impression, and echoed by others, was that the heavy-hitters were the more experienced programmers who had adapted to newer styles of programming, whereas  the younger programmers found it harder to adapt the other way when they hit difficult problems.  Another attendee suggested that perhaps I was focused more on application coding and that system coding and system programmers were still operating in the C20 mode.</p>
<p>The social nature of modern coding came out in several papers about agile methods and pair programming.  As well as being an important phenomena in its own right, pair programming gives a level of think-aloud  &#8216;for free&#8217;, so maybe this will also cast light on individual coding.</p>
<p><a href="http://webhome.cs.uvic.ca/%7Emstorey/" target="_blank">Margaret-Anne Storey</a> gave a fascinating keynote about the use of comments and annotations in code and again this picks up the social nature of code as she was studying open-source coding where comments are often for other people in the community, maybe explaining actions, or suggesting improvements.  She reviewed a lot of material in the area and I was especially interested in one result that showed that <em>novice</em> programmers with <em>small</em> pieces of code found method comments more useful than class comments.  Given my own frequent complaint that code is inadequately <em>documented</em> at the class or higher level, this appeared to disagree with my own impressions.  However, in discussion it seemed that this was probably accounted for by differences in context: novice vs. expert programmers, small vs large code, internal comments vs. external documentation.  One of the big problems I find is that the way different classes work together to produce effects is particularly poorly documented.  Margaret-Anne described one system her group had worked on<sup><a href="#footnote-2-95" id="footnote-link-2-95" title="See the footnote.">2</a></sup> that allowed you to write a tour of your code opening windows, highlighting sections, etc.</p>
<p>I sadly missed some of the presentations as I had to go to other meetings (the danger of a conference at your home site!), but I did get to some and  was particularly fascinated by the more theoretical/philosophical session including one paper addressing the psychological origins of the notions of objects and another focused on (the dangers of) abstraction.</p>
<p>The latter, presented by <a href="http://www.lukechurch.net/" target="_blank">Luke Church</a>, critiqued  <a href="http://www.cs.cmu.edu/~wing/" target="_blank">Jeanette Wing</a>&#8216;s 2006 CACM paper on <a href="http://portal.acm.org/citation.cfm?id=1227504.1227378" target="_blank">Computational Thinking</a>.  This is evidently a &#8216;big thing&#8217; with loads of funding and hype &#8230; but one that I had entirely missed :-/ Basically the idea is to translate the ways that one thinks about computation to problems other than computers &#8211; nerds rule OK. The tenet&#8217;s of computational thinking seem to overlap a lot with management thinking and also reminded me of the way my own HCI community and also parts of the Design (with capital D) community in different ways are trying to say they we/they are the universal discipline  &#8230; well if we don&#8217;t say it about our own discipline who will &#8230;the physicists have been getting away with it for years <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Luke (and his co-authors) argument is that abstraction can be dangerous (although of course it is also powerful).  It would be interesting perhaps rather than Wing&#8217;s paper to look at this argument alongside  Jeff Kramer&#8217;s 2007 CACM article &#8220;<a href="http://dx.doi.org/10.1145/1232743.1232745" target="_blank">Is abstraction the key to computing?</a>&#8220;, which I recall liking because it says computer scientists ought to know more mathematics <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I also sadly missed some of <a href="http://www.lancs.ac.uk/staff/mackenza/" target="_blank">Adrian Mackenzie</a>&#8216;s closing keynote &#8230; although this time not due to competing meetings but because I had been up since 4:30am reading a PhD thesis and after lunch on a Friday had begin to flag!  However, this was no reflection an Adrian&#8217;s talk and the bits I heard were fascinating looking at the way bio-tech is using the language of software engineering.  This sparked a debate relating back to the overuse of abstraction, especially in the case of the genome where interactions between parts are strong and so the software component analogy weak.  It also reminded me of yet another relatively recent paper<sup><a href="#footnote-3-95" id="footnote-link-3-95" title="See the footnote.">3</a></sup> on the way computation can be seen in many phenomena and should not be construed solely as a science of computers.</p>
<p>As well as the academic content it was great to be with the PPIG crowd they are a small but very welcoming and accepting community &#8211; I don&#8217;t recall anything but constructive and friendly debate &#8230; and next year they have PPIG09 in Limerick &#8211; PPIG and Guiness what could be better!</p>
<br /><ol class="footnotes"><li id="footnote-1-95">David has done some really interesting work on the relationship between personality types and different kinds of programming tasks.  I&#8217;ve seen him present before about debugging and unfortunately had to miss his talk at PPIG on comprehension.  Given his work has has shown clearly that there are strong correlations between certain personality attributes and coding, it would be good to see more qualitative work investigating the nature of the differences.   I&#8217;d like to know whether strategies change between personality types: for example, between systematic debugging and more insight-based scan and see it bug finding.   [<a href="#footnote-link-1-95">back</a>]</li><li id="footnote-2-95">but I can&#8217;t find on their website <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />   [<a href="#footnote-link-2-95">back</a>]</li><li id="footnote-3-95">Perhaps 2006/2007 in either CACM or Computer Journal, if anyone knows the one I mean please remind me!  [<a href="#footnote-link-3-95">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2008/09/16/ppig2008-and-the-twenty-first-century-coder/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>why software need never hang</title>
		<link>http://www.alandix.com/blog/2008/06/21/why-software-need-never-hang/</link>
		<comments>http://www.alandix.com/blog/2008/06/21/why-software-need-never-hang/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 13:54:19 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[human computer interaction]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[Word]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=81</guid>
		<description><![CDATA[Over 20 years ago I wrote &#8220;The Myth of the Infinitely Fast Machine&#8220;, about the way software developers effectively assume that everything on the machine side of human interaction happens instantly. Often interaction is programmed in a turn-taking style: wait for user action process the event display changes back to step 1 This assumption of [...]]]></description>
			<content:encoded><![CDATA[<p>Over 20 years ago I wrote &#8220;<a href="http://www.comp.lancs.ac.uk/~dixa/papers/hci87/" target="_blank">The Myth of the Infinitely Fast Machine</a>&#8220;, about the way software developers effectively assume that everything on the machine side of human interaction happens instantly.  Often interaction is  programmed in a turn-taking style:</p>
<ol>
<li>wait for user action</li>
<li>process the event</li>
<li>display changes</li>
<li>back to step 1</li>
</ol>
<p>This assumption of instant (or at least infinitely fast) response at step 2 often ignores network delays, disk IO or heavy computation. This tends to work fine on a high-spec development or test machine, with a fast network and clean install of all system software &#8230; but when the software hits a real machine, a few years old, untidy system, slow network &#8230; things fall to pieces.</p>
<p>So 20 years later (as I described in my <a title="pain, tears and office 2008" href="http://www.alandix.com/blog/2008/06/16/pain-tears-and-office-2008/" target="_self">post last week</a>) I am sitting watching the spinning rainbow ball as Word struggles to save a document (over an hour now, I think I will need to kill it).  To be fair I think the root &#8217;cause&#8217; of the problem &#8230; or at least one problem &#8230; may be the printer as the Cannon printer driver has never worked properly on an Intel Mac (maybe new driver when I upgrade to Leopard?) and perhaps some change in the rest of the system (maybe the Office install) has tipped it over into not working at all.</p>
<p>As far as I can tell Word then decides to ask the printer things in order to set the margins properly when saving the document, and then gets stuck.  I found a post on a Microsoft forum about a different print related problem and the &#8216;helpful&#8217; tech support from MS simply said &#8220;not our fault, re-install everything&#8221;.</p>
<p>So to recap:</p>
<ul>
<li>user asks Word to save &#8211; probably the most critical operation in the system, or the system auto-saves, again to ensure safety against crashes, so really critical</li>
<li>Word decides it needs information from the printer (although it has been displaying the page to the users using some existing information on page properties).</li>
<li>Word asks for info from the printer driver of the currently selected printer</li>
<li>if the printer doesn&#8217;t respond Word hangs and blocks all user interaction</li>
</ul>
<p>However, the printer driver may be third party, may be connecting to a shared printer hanging off a different network, or in the case of a laptop on a network currently disconnected from the computer &#8230; and any resulting delay is not the fault of the developers of Word??!</p>
<p>The annoying thing is that such &#8216;hanging&#8217; delays need never happen.</p>
<p>Basically there are four main causes for delays:</p>
<ol>
<li>ordinary computation takes a long time due to it being too complex for the available hardware</li>
<li>unbounded internal computation -for example iterative algorithms</li>
<li>waiting for external resources (disk, network, etc.)</li>
<li>bugs that lead to the system going crazy (effectively case 2 by accident!)</li>
</ol>
<p>Type 1 will surface during testing and may require re-design of the interaction, but is simply &#8216;slow&#8217; rather than &#8216;hanging&#8217;.  Typically it leads to things gradually getting slower as the document or data gets larger or more complicated.  This requires standard profiling and optimisation.</p>
<p>Type 4 is hard to deal with &#8211; bugs do happen.  However, the majority of the problems I&#8217;m experiencing in Word at the moment are not a failure of this kind as Word does, most of the time, eventually complete without crashing.</p>
<p>Types 2 and 3, especially the latter, should be detected and then dealt with in the design of the user interface.</p>
<p>Some real-time programming languages have ways of automatically working out how long code will take to run in order to be able to assert &#8220;this will respond within a 10 ms interrupt cycle&#8221;.  However, this is hard, even for relatively simple embedded systems; so not practical for complex operating systems or user interfaces.</p>
<p>However, a simpler version of the above is possible.  Certain system functions invoke external resources such as the disk, or the network.  If any function or method in your own application invokes one of these system functions, then it could potentially hang &#8211; and should be documented to say so or return some sort of &#8216;promise&#8217;: &#8220;I&#8217;ve started to do X, please check back later to see if it is ready&#8221;. Of course the methods that call these themselves need to be documented as potentially hanging &#8230; and so forth.</p>
<p>If the response to any form of user interaction ends up calling a potentially hanging function, then it is in danger of having a delay of type 3 above.  However, so long as this is known, it can be dealt with at the user interface level by spawning a thread to do the work so that some form of progress indicator or at least &#8220;Cancel&#8221; button can be active &#8211; it should <strong>never</strong> &#8216;hang&#8217;.</p>
<p>This marking of functions as potentially &#8216;hanging&#8217; could be done by programmers themselves, but equally can be automated as a form of static analysis, simply starting with a known set of hanging system functions and recursively  &#8216;colouring&#8217; functions that call them.  This kind of automated checking should  be standard practice in any large software project.</p>
<p>The type 2 hanging is a little more complicated.  The ADA programming language has a &#8216;safe&#8217; subset that only allows loops where  the bounds are fixed at compile time.  This is probably too restrictive for complex software, but certainly any loop with unknown  limits could be flagged.  If as part of a code walk through or similar practice it is decided that the loop is &#8216;safe&#8217; it can be annotated as such, otherwise, just like the case of system calls, the system can propagate the fact that certain functions may have unbounded computation and then the UI adjusted accordingly.</p>
<p>For small bespoke software development I can be forgiving, but for large vendors like Microsoft, Apple or Adobe, there is no excuse for this form of culpable failure.</p>
<p>&#8230; but I have a bad feeling that in 20 years time I may be writing again &#8230;</p>
<p>[[ News flash - 1.5 hours later Word has finished saving the document! ... 14 pages obviously  hard work. ... but then it has hung again <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ]]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2008/06/21/why-software-need-never-hang/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is Computing?  The centrality of systemics</title>
		<link>http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/</link>
		<comments>http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 19:08:10 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[computation]]></category>
		<category><![CDATA[embodied computation]]></category>
		<category><![CDATA[human computer interaction]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[turing machine]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/</guid>
		<description><![CDATA[Recently I was in a meeting where the issue of &#8216;core&#8217; computer science came up. One person listed a few areas, but then this was challenged by another member of the group who said (to be fair, partly in jest), that core computer science should certainly include computer architecture, but not the &#8216;human stuff&#8217;. I [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I was in a meeting where the issue of &#8216;core&#8217; computer science came up.  One person listed a few areas, but then this was challenged by another member of the group who said (to be fair, partly in jest), that core computer science should certainly include computer architecture, but not the &#8216;human stuff&#8217;.</p>
<p>I felt a little like a teenager complete with T-shirt and iPod dropped into Jurassic Park arguments that I thought had been put to bed in the 1980s suddenly resurfacing &#8211; how do you explain this white thing that makes sounds from its earphones to a caveman wearing skins?</p>
<p>However, I also felt a certain sympathy as I often wonder about computer science as a whole; indeed it has its own arguments in the 1960s and &#8217;70s as to whether it was a &#8216;discipline&#8217; as opposed to just an application domain for maths or electronics, or just a tool for business.  Maybe one of the clinchers was the theoretical foundations of computing in the work of Church and Turing &#8230; but strangely enough at Lancaster the closest to this, the course on algorithmic complexity, is taught by a HCI person!</p>
<p>One of my worries in computing is that these theoretical foundations are still weak, there is black hole in the theoretical centre of computer science<sup><a href="#footnote-1-58" id="footnote-link-1-58" title="See the footnote.">1</a></sup>.   However, these theoretical issues were certainly not what was bothering my colleague. To answer his challenge and my own worries about the discipline we really need to know &#8211; what is computing?</p>
<p><span id="more-58"></span></p>
<h3>Fundamentals: algorithmics and systemics</h3>
<p>One way to &#8216;carve up&#8217; computing is in terms of <em>algorithmics</em> and <em>systemics</em><sup><a href="#footnote-2-58" id="footnote-link-2-58" title="See the footnote.">2</a></sup>.</p>
<p><strong>Algorithmics</strong> &#8211; the way computational devices behave individually and largely <em>internally</em> to achieve particular input/output behaviours.</p>
<p><strong>Systemics</strong> &#8211; the way computational devices fit together in systems with their environments, in order to achieve <em>external</em> purposes.</p>
<p>When a computer scientist thinks of the &#8216;core&#8217; of computing, it is the algorithmic side that springs most readily to mind and this is certainly the principle focus of more theoretical computer science.  However, when Peter Denning suggests seven categories for fundamental principles of computing: computation, communication, coordination, recollection, automation, evaluation and design; it is notable that only two, computation and recollection, fall relatively soundly under algorithmics<sup><a href="#footnote-3-58" id="footnote-link-3-58" title="See the footnote.">3</a></sup>.</p>
<p>Indeed, the topics and sub-disciplines of computing address different aspects of both algorithmics and systemics. Some topics are almost entirely about algorithmics: programming languages (theory and practice), compilation, data structures and algorithms, and algorithmic complexity.  Other topics, notably software engineering and human-computer interaction are focused most strongly on systemics.  Most topics incorporate aspects of both: for example most courses on databases consider both the context in which databases work and the way in which they connect to code (systemics), but also the data structures and algorithms used to achieve this behaviour (algorithmics); and in my own HCI courses I cover both the more external human design issues and algorithmic and architectural issues of interactive systems<sup><a href="#footnote-4-58" id="footnote-link-4-58" title="See the footnote.">4</a></sup>.</p>
<p>So, while issues of systemics underlie the majority of modern computer science, it is still algorithmics alone that comprises our caricature of the subject.  Systemics is like the Cinderella of the discipline who does all the work but gets none of the limelight.</p>
<h3>Taking systemics seriously</h3>
<p>Apart from being the grist for bar table discussions of computing does this matter?</p>
<p>It certainly seems to influence what we regard as basics of computing for first year computing students.</p>
<p>When I was in previous departments that had both &#8216;computer science&#8217; and business computing students, the former were taught Java and the later Visual Basic.  VB was regarded as a somewhat Noddy language in particular as it was poor in data structures and so less suitable for fundamentals of real programming such as arrays and iteration (interestingly both fine in VB!).  What interested me was that students doing VB started out with event-based programming as the &#8216;easy&#8217; way into programming with VB is to construct a GUI using visual tools and then add behaviours.  In contrast, for those doing Java this would have been an &#8216;advanced&#8217; topic they did when they eventually got on to GUI programming, or maybe never.</p>
<p>Event-based programming is core when you think systemics â€“ that the computer program you are writing is part of a larger whole, but seems peripheral to a more narrow algorithmic focus.  Of course, it is not just graphical user interfaces where event-based programming is core, bur also any sort of distributed, networked or embedded programming and not least web computing both at the server-end with transactional code and now at the client-end also with AJAX.  Absolutely central to so many aspects of computing but often an &#8216;optional extra&#8217; in our teaching</p>
<p>At a theoretical level Wegner has been vocal in advocating that an adequate account of theoretical computing has to take into account interaction with the environment.<sup><a href="#footnote-5-58" id="footnote-link-5-58" title="See the footnote.">5</a></sup> Personally, I don&#8217;t buy all his arguments, but the crucial message is clearly true: computational devices do not simply take an input and produce (eventually) an output, bur are in fact processes involving their own state and interacting with their environment: input and output are in fact sequences not singular occurrences<sup><a href="#footnote-6-58" id="footnote-link-6-58" title="See the footnote.">6</a></sup>.</p>
<p>Systemics also forces you to take seriously embodied computation both in the theoretical sense that I have considered myself<sup><a href="#footnote-7-58" id="footnote-link-7-58" title="See the footnote.">7</a></sup> and also in the practical sense that computational devices are physically in the world as well as interacting with it and so we need to take this into account.  For example, issues of power consumption were central to the <a title="One Laptop per Child project" href="http://laptop.org/" target="_blank">One Laptop per Child</a> project as they are in ubiquitous and mobile computing.</p>
<p>With the exceptions of space and time complexity algorithmics focuses us on functional properties whereas systemics connects more closely to non-functional properties.  Interestingly all the problems I cited in my recent blog &#8216;&#8221;<a title="blog: i just wanted to print a file" href="http://www.alandix.com/blog/2007/12/27/i-just-wanted-to-print-a-file/" target="_blank">I just wanted to print a file</a>&#8221; are about systemics</p>
<br /><ol class="footnotes"><li id="footnote-1-58"> This demands a discussion of its own, but the basic problem is that while Church and Turing gave us understanding of disembodied computation, we still do not have clear understanding of generic computation when embodied in devices in general only particular architectures.   [<a href="#footnote-link-1-58">back</a>]</li><li id="footnote-2-58"> Perhaps I am still being too narrow in this distinction. Arguably there ought to be a heading <em>pragmatics</em>: how we understand and manage the processes external to the computational system, those that give rise to it (e.g. requirements), and those that sustain it (e.g. maintenance, testing, documentation).  However, for the time being I&#8217;ll lump these under the systemic label.    [<a href="#footnote-link-2-58">back</a>]</li><li id="footnote-3-58"> The principles are listed at Denning, P. J. 2007. Computing is a natural science. Comm. ACM 50, 7 (Jul. 2007), 13-18. DOI= <a title="ACM DOI: computing is a natural science" href="http://doi.acm.org/10.1145/1272516.1272529" target="_blank">http://doi.acm.org/10.1145/1272516.1272529</a>.  They are part of Denning&#8217;s programme to develop &#8220;<a title="Great principles of computing" href="http://cs.gmu.edu/cne/pjd/GP" target="_blank">Great Principles of Computing</a>&#8220;.   [<a href="#footnote-link-3-58">back</a>]</li><li id="footnote-4-58">In fact, Lancaster Computing prides itself on its systems orientation and this is reflected in areas of expertise that are strongly focused on systemics: networking, distributed systems, software engineering, HCI, embedded systems.  [<a href="#footnote-link-4-58">back</a>]</li><li id="footnote-5-58">Wegner, P. 1997. Why interaction is more powerful than algorithms. Comm. ACM 40, 5 (May. 1997), 80-91. DOI= <a title="ACM DOI: why interaction is more powerful than algorithms" href="http://doi.acm.org/10.1145/253769.253801" target="_blank">http://doi.acm.org/10.1145/253769.253801</a>, see also <a title="Wegner: home page" href="http://www.cs.brown.edu/~pw/" target="_blank">Peter Wegner&#8217;s home page</a> and Dina Goldin&#8217;s papers on <a title="Goldin: interactive computation" href="http://www.cs.brown.edu/people/dqg/papers/#interaction" target="_blank">Interactive Computation</a>   [<a href="#footnote-link-5-58">back</a>]</li><li id="footnote-6-58"> In Wegner and Goldin&#8217;s work IO are strictly sequences, not time series &#8211; they assume synchronised stepwise processing.  As an aside it is interesting to think more widely about time in computing.  Time is taken into account in various areas notably algorithmic complexity and (naturally) real-time computing.  However, the central notion of computability in Church and Turing ignores time so long as it is finite.  [<a href="#footnote-link-6-58">back</a>]</li><li id="footnote-7-58">See &#8220;<a title="blog: matterealities and the physical embodiment of code" href="http://www.alandix.com/blog/2007/11/09/matterealities-and-the-physical-embodiment-of-code/" target="_blank">matterealities and the physical embodiment of code</a>&#8221; and my notes on <a title="embodied computation" href="http://www.hcibook.com/alan/topics/embodied-computation/" target="_blank">embodied computation</a>.   [<a href="#footnote-link-7-58">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2008/01/13/what-is-computing-the-centrality-of-systemics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>I just wanted to print a file</title>
		<link>http://www.alandix.com/blog/2007/12/27/i-just-wanted-to-print-a-file/</link>
		<comments>http://www.alandix.com/blog/2007/12/27/i-just-wanted-to-print-a-file/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 10:12:57 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[human computer interaction]]></category>
		<category><![CDATA[snip!t]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/2007/12/27/i-just-wanted-to-print-a-file/</guid>
		<description><![CDATA[I just wanted to print a file, now it is an hour and a half later and I still have nothing &#8230; this is where all our time goes gently coaxing our computers in the hope they may do what we ask. Such a simple thing to want to do &#8230; and so much pain [...]]]></description>
			<content:encoded><![CDATA[<p> I just wanted to print a file, now it is an hour and a half later and I still have nothing &#8230;  this is where all our time goes gently coaxing our computers in the hope they may do what we ask.</p>
<p>Such a simple thing to want to do &#8230; and so much pain on the process, and so many simple things that application designers could do it make it better.</p>
<p><span id="more-53"></span><br />
I have a PhD thesis to read, it arrived last night and palexa, whose thesis it is, is coming this afternoon to talk about it.  But I got an error that communication to the printer had failed &#8211; &#8220;please check it is turned it on&#8221;! Of course it is on already, but I checked anyway.</p>
<p>I recall at the weekend Fiona had a similar problem; she rebooted her machine and it all worked again.</p>
<blockquote><p><em>WHY should a simple thing like connecting to a printer require periodic reboots</em>?</p></blockquote>
<p>&#8230; who knows, but we try &#8230;</p>
<p>To reboot my computer involves closing it down &#8230; and some applications notably Microsoft Word, Photoshop, Dreamweaver never close without more coaxing &#8230; shutting windows one by one, until there is nothing left and then &#8230;. &#8216;application not responding&#8217; and I have to Force Quit them anyway.</p>
<p>Of course some of the problem and the reason why the machine crawls to a halt, with lots of spinning rainbows and sluggish mouse, is that I have so many open applications and they all grow over time â€“ but</p>
<blockquote><p><em>why can&#8217;t an application quit without dragging a gigabyte into RAM?</em></p></blockquote>
<p>&#8230; and of course because I know it will take me so much pain to close down my computer I don&#8217;t do it often &#8230; hmm what was that about positive feedback?<br />
As I close down Firefox windows I find several that I need to do things with as they were sitting there as reminders &#8211; so twenty minutes updating web pages, saving bookmarks or grabbing bits in Snip!t.  In fact if Firefox crashes it does recall its last state &#8230; but not when it is closed down &#8216;normally&#8217;.  I sometimes &#8216;Force Quit&#8217; it in order to make it save state &#8211; that is like pulling the plug out form your computer to stop it erasing your disk when you shutdown.</p>
<blockquote><p><em>In an age of laptops why don&#8217;t all applications save their current state when they close down?</em></p></blockquote>
<p>And of course Firefox crashed anyway when I eventually hit Quit.</p>
<p>And then as the windows clear I find a little Software Update window asking me if I want to install urgent security fixes &#8230; between 80 and 50 meg each.  What I can never recall is whether this means &#8220;I have downloaded do you want me to do the actual install&#8221; or &#8220;if you say YES install it will take a LONG time as it downloads files&#8221;</p>
<blockquote><p><em>Why can&#8217;t  applications give you ate least order of magnitude estimates of the time cost before you confirm actions?</em></p></blockquote>
<p>Of course, if I had recalled the download was still needed I could have put off the update &#8230; but of course the dialogue didn&#8217;t have any options to say things like &#8216;do this slowly in the background&#8217; and if it did would I risk rebooting my computer through it.</p>
<blockquote><p><em>Why can&#8217;t applications give users control over when things happen instead of assuming it happens now or never?</em></p></blockquote>
<p>Software Update begins the download &#8230; it estimates 5 minutes, so  go off to get some cornflakes.  I come back and it is almost finished &#8230; I wait &#8230; the little progress bar gets to the end &#8230; and then starts again with another 5 minutes. My head in my hands I recall &#8220;Of course the 5 minutes was for the first of the sevral tings it needs to downlaod&#8221;.</p>
<blockquote><p><em>Why when an application does something in several stages are the progress bars on an action-by-action basis?  The user has to wait for them all to complete.  By all means show individual progress for each stag, but also some form of overall estimate &#8230; please.</em></p></blockquote>
<p>Some time later  &#8230; an information box appears: &#8220;Some of the checked updates couldn&#8217;t be installed &#8211; a network error has occurred&#8221;</p>
<p>I despair.</p>
<p style="text-align: center"><img src="http://www.alandix.com/images/software-update-failed.png" title="Software Update Failed" alt="Software Update Failed" border="0" height="190" width="437" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2007/12/27/i-just-wanted-to-print-a-file/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>after the ball is over &#8230;</title>
		<link>http://www.alandix.com/blog/2007/09/11/after-the-ball-is-over/</link>
		<comments>http://www.alandix.com/blog/2007/09/11/after-the-ball-is-over/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 07:52:51 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[appropriate intelligence]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[fail-fast programming]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[hci-2007]]></category>
		<category><![CDATA[hci2007]]></category>
		<category><![CDATA[intelligent user interfaces]]></category>
		<category><![CDATA[nad]]></category>
		<category><![CDATA[physicality]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/2007/09/11/after-the-ball-is-over/</guid>
		<description><![CDATA[Last week&#8217;s HCI2007 conference and the Physicality workshop now all finished (except sorting out the the final finances for HCI &#8230; but I&#8217;ll forget that for now!) Being part of the organisation of things you always see so many things that are not as planned (like going wrong), but for the delegates it all seems [...]]]></description>
			<content:encoded><![CDATA[<p>Last week&#8217;s  <a href="http://www.bcs-hci.org.uk/hci2007/" title="HCI 2007 conference web site" target="_blank">HCI2007</a> conference and the <a href="http://www.physicality.org/" title="physicality web site" target="_blank">Physicality</a> workshop now all finished (except sorting out the the final finances for HCI &#8230; but I&#8217;ll forget that for now!)</p>
<p>Being part of the organisation of things you always see so many things that are not as planned (like going wrong), but for the delegates it all seems a well-oiled machine.  In this as in many other domains, the mark of a rubust system is not whether or not it fails, but how it copes with failure. This is the heart of my principles for <a href="http://www.hcibook.com/alan/topics/appropriate-intelligence/" target="_blank">appropriate intelligence</a> when designing &#8216;intelligent&#8217; user interfaces and also &#8216;fail fast programming&#8217;<sup><a href="#footnote-1-37" id="footnote-link-1-37" title="See the footnote.">1</a></sup> when designing and debugging critical computer systems.</p>
<p>Great to see so many old friends &#8230; and meet new people &#8230; and after able to show Nad<sup><a href="#footnote-2-37" id="footnote-link-2-37" title="See the footnote.">2</a></sup> the glories of the Lake District.</p>
<p align="center"><img src="http://www.alandix.com/images/lake-district-3-sml.gif" alt="windermere" title="windermere" align="middle" />        <img src="http://www.alandix.com/images/lake-district-1-sml.gif" alt="lake district mountains" title="lake district mountains" align="middle" />        <img src="http://www.alandix.com/images/lake-district-2-sml.gif" alt="lake district in winter" title="lake district in winter" align="middle" /></p>
<br /><ol class="footnotes"><li id="footnote-1-37">I must make web pages for this some day &#8230; but see debugging notes I did for a <a href="http://www.comp.lancs.ac.uk/~dixa/teaching/CSC221/">software engineering course</a> a few years ago  [<a href="#footnote-link-1-37">back</a>]</li><li id="footnote-2-37">see his blog on <a href="http://www.virtualchaos.co.uk/blog/2007/09/04/arriving-at-hci2007/" title="Nad arrives at HCI2007" target="_blank">arriving at the conference</a> and his <a href="http://www.flickr.com/photos/7418252@N06/sets/72157601937826707/" target="_blank" title="Nad's Flickr photos of the Lakes">Flickr photos of the Lake District</a>  [<a href="#footnote-link-2-37">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2007/09/11/after-the-ball-is-over/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

