<?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; ajax</title>
	<atom:link href="http://www.alandix.com/blog/tag/ajax/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>Phoenix rises &#8211; vfridge online again</title>
		<link>http://www.alandix.com/blog/2010/06/11/phoenix-rises-vfridge-online-again/</link>
		<comments>http://www.alandix.com/blog/2010/06/11/phoenix-rises-vfridge-online-again/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 19:47:19 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[aqtive]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Fiona]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[part-time]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[social networking]]></category>
		<category><![CDATA[vfridge]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[websharer]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=260</guid>
		<description><![CDATA[vfridge is back! I mentioned &#8216;Project Phoenix&#8217; in my last previous post, and this was it &#8211; getting vfridge up and running again. Ten years ago I was part of a dot.com company aQtive1 with Russell Beale, Andy Wood and others.  Just before it folded in the aftermath of the dot.com crash, aQtive spawned a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alandix.com/images/vfridge-splash.png"><img class="alignright" style="margin: 3px; border: 0pt none;" title="vfridge home page" src="http://www.alandix.com/images/vfridge-splash.png" alt="" width="214" height="154" /></a>vfridge is back!</p>
<p>I mentioned &#8216;Project Phoenix&#8217; in my <a href="http://www.alandix.com/blog/2010/06/09/php-syntax-checker-updated/" target="_blank">last previous post</a>, and this was it &#8211; getting <a href="http://www.vfridge.com/" target="_blank">vfridge</a> up and running again.</p>
<p>Ten years ago I was part of a dot.com company aQtive<sup><a href="#footnote-1-260" id="footnote-link-1-260" title="See the footnote.">1</a></sup> with <a href="http://www.cs.bham.ac.uk/~rxb/" target="_blank">Russell Beale</a>, Andy Wood and others.  Just before it folded in the aftermath of the dot.com crash, aQtive spawned a small spin-off vfridge.com.  The <em>virtual fridge</em> was a social networking web site before the term existed, and while vfridge the company went the way of most dot.coms, for some time after I kept the vfridge web site running on Fiona&#8217;s servers until it gradually &#8216;decayed&#8217; partly due to Javascript/DOM changes and partly due to Java&#8217;s interactions with mysql becoming unstable (note very, very old Java code!).  But it is now <a href="http://www.vfridge.com/phoenix/f" target="_blank">back online</a> <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><img class="alignright" title="vfridge screenshot full view" src="http://www.vfridge.com//using/screenshots/fullview-25.gif" alt="" width="181" height="139" />The core idea of vfridge is placing small notes, photos and &#8216;magnets&#8217; in a shareable web area that can be moved around and arranged like you might with notes held by magnets to a fridge door.</p>
<p>Underlying vfridge was what we called the <a href="http://www.hiraeth.com/alan/ebulletin/websharer/" target="_blank">websharer vision</a>, which looked towards a web of user-generated content.  Now this is passé, but at the time  was directly counter to accepted wisdom and looking back seem prescient &#8211; remember this was written in 1999:</p>
<blockquote><p><em>Although everyone isn&#8217;t a web developer, it is likely that soon everyone will become an Internet communicator — email, PC-voice-comms, bulletin boards, etc. For some this will be via a PC, for others using a web-phone, set-top box or Internet-enabled games console.<br />
&#8230;</em></p>
<p><em>The web/Internet is not just a medium for publishing, but a potential shared place.</em></p>
<p><em>Everyone may be a </em>web sharer<em> — not a publisher of formal public &#8216;content&#8217;, but personal or semi-private sharing of informal &#8216;bits and pieces&#8217; with family, friends, local community and virtual communities such as fan clubs.</em></p>
<p><em>This is not just a future for the cognoscenti, but for anyone who chats in the pub or wants to show granny in Scunthorpe the baby&#8217;s first photos.</em></p></blockquote>
<p><img class="alignright" title="vfridge closeup" src="http://www.vfridge.com/research/candf3/images/notes-1.gif" alt="" width="209" height="229" />Just over a year ago I thought it would be good to write a retrospective about vfridge in the light of the social networking revolution.  We did a poster &#8220;<a href="http://www.vfridge.com/research/candf3/candf.html" target="_blank">Designing a virtual fridge</a>&#8221; about vfridge years ago at a <a href="http://www-users.york.ac.uk/%7Eam1/candf3.html" target="_blank">Computers and Fun workshop</a>, but have never written at length abut its design and development.  In particular it would be good to analyse the reasons, technical, social and commercial, why it did not &#8216;take off&#8217; the time.  However, it is hard to do write about it without good screen shots, and could I find any? (Although now I have)  So I thought it would be good to revive it and now you can <a href="http://www.vfridge.com/phoenix/f" target="_blank">try it out again</a>. I started with a few days effort last year at Christmas and Easter time (leisure activity), but now over the last week have at last used the fact that I have <a href="http://www.alandix.com/blog/2010/02/02/now-part-time/" target="_blank">half my time unpaid</a> and so free for my own activities &#8230; and it is done <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The original vfridge was implemented using Java Servlets, but I have rebuilt it in PHP.  While the original development took over a year (starting down in Coornwall while on holiday watching the solar eclipse), this re-build took about 10 days effort, although of course with no design decisions needed.  The reason it took so much development back then is one of the things I want to consider when I write the retrospective.</p>
<p>As far as possible the actual behaviour and design is exactly as it was back in 2000 &#8230; and yes it does feel clunky, with lots of refreshing (remember no AJAX or web2.0 in those days) and of course loads of frames!  In fact there is a little cleverness that allowed some client-end processing pre-AJAX<sup><a href="#footnote-2-260" id="footnote-link-2-260" title="See the footnote.">2</a></sup>.    Also the new implementation uses the same templates as the original one, although the expansion engine had to be rewritten in PHP.  In fact this template engine was one of our most re-used bits of Java code, although now of course many alternatives.  Maybe I will return to a discussion of that in another post.</p>
<p style="text-align: center;"><img class="alignnone" style="border: 1px solid black; margin-left: 20px; margin-right: 20px;" title="vfridge the WAP interface" src="http://www.alandix.com/images/iPhone-vfridge33.png" alt="" width="107" height="160" /> <img class="alignnone" style="margin-left: 20px; margin-right: 20px;" title="old WAP phone" src="http://www.alandix.com/images/phone-med50.jpg" alt="" width="128" height="147" /></p>
<p>I have even resurrected the <a href="http://www.vfridge.com/phoenix/f?op=wap" target="_blank">old mobile interface</a>.  Yes there were WAP phones even in 2000, albeit with tiny green and black screens.  I still recall the excitement I felt the first time I entered a note on the phone and saw it appear on a web page <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   However, this was one place I had to extensively edit the page templates as nothing seems to process <a href="http://en.wikipedia.org/wiki/Wireless_Markup_Language" target="_blank">WML</a> anymore, so the WML had to be converted to plain-text-ish HTML, as close as possible to those old phones!  Looks rather odd on the iPhone :-/</p>
<p>So, if you were one of those who had an account back in 2000 (<a href="http://www.idemployee.id.tue.nl/p.markopoulos/default.htm" target="_blank">Panos Markopoulos</a> used it to share his baby photos <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), then everything is still there just as you left it!</p>
<p>If not, then you can register now and play.</p>
<br /><ol class="footnotes"><li id="footnote-1-260">The old aQtive website is still viewable at <a href="http://www.aqtive.org/" target="_blank">aqtive.org</a>, but don&#8217;t try to install onCue, it was developed in the days of Windows NT.  [<a href="#footnote-link-1-260">back</a>]</li><li id="footnote-2-260">One trick used the fact that you can get Javascript to pre-load images.  When the front-end Javascript code wanted to send information back to the server it preloaded an image URL that was really just to activate a back-end script.  The frames  used a change-propagation system, so that only those frames that were dependent on particular user actions were refreshed.  All of this is preserved in the current system, peek at the Javascript on the pages.    Maybe I&#8217;ll write about the details of these another time.  [<a href="#footnote-link-2-260">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2010/06/11/phoenix-rises-vfridge-online-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What&#8217;s wrong with dynamic binding?</title>
		<link>http://www.alandix.com/blog/2009/07/20/whats-wrong-with-dynamic-binding/</link>
		<comments>http://www.alandix.com/blog/2009/07/20/whats-wrong-with-dynamic-binding/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 20:14:19 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[literate programming]]></category>
		<category><![CDATA[mobile design]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress plugins]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=187</guid>
		<description><![CDATA[Dynamic scoping/binding of variables has a bad name, rather like GOTO and other remnants of the Bad Old Days before Structured Programming saved us all1.  But there are times when dynamic binding is useful and looking around it is very common in web scripting languages, event propagation, meta-level programming, and document styles. So is it [...]]]></description>
			<content:encoded><![CDATA[<p>Dynamic scoping/binding of variables has a bad name, rather like GOTO and other remnants of the <em>Bad Old Days</em> before <em>Structured Programming</em> saved us all<sup><a href="#footnote-1-187" id="footnote-link-1-187" title="See the footnote.">1</a></sup>.  But there are times when dynamic binding is useful and looking around it is very common in web scripting languages, event propagation, meta-level programming, and document styles.</p>
<p>So is it really so bad?</p>
<p><span id="more-187"></span></p>
<h3>tiny-screen coding and literate programming</h3>
<p>This issue came to mind because I&#8217;ve been considering what programming language support might be like for tiny screens (and I mean mobile phone not laptop!).  This was prompted by group discussions at the <a href=" Mobile Design Dialog webpage. http://www.cs.swan.ac.uk/mobdesign/ " target="_blank">Mobile Design Dialogue</a> conference last year<sup><a href="#footnote-2-187" id="footnote-link-2-187" title="See the footnote.">2</a></sup> and at a bootcamp session at the <a href="http://www.ukinit.org/02122008/winter-school-interactive-technologies" target="_blank">Winter School on Interactive Technologies</a> in Bangalore in February.</p>
<p>One of my first thoughts was that something akin to <a href="http://en.wikipedia.org/wiki/Literate_programming" target="_blank">literate programming</a> might provide a useful contribution as it allows details to be elided.  For example:</p>
<pre style="padding-left: 30px;">@{obtain email address from form variables}
if @{check email address valid}
then @{produce bad email error message}
else @{send email message}</pre>
<p>The placeholders (such as &#8220;check email address valid&#8221;) are then defined separately.  In <a href="http://www-cs-faculty.stanford.edu/~knuth/lp.html" target="_blank">Knuth&#8217;s original WEB</a> (and Harold Thimbleby&#8217;s <a href="http://comjnl.oxfordjournals.org/cgi/content/abstract/29/3/201" target="_blank">cweb</a>), all the definitions are in a single file, but in a phone-based environment this would be more like a hypertext &#8212; indeed reminiscent of the <a href="http://portal.acm.org/citation.cfm?id=54700" target="_blank">code browsers I worked on</a> when I first came into computer science!</p>
<p>Using this form of named fragments would mean that one could have much smaller snippets of code on screen at any moment of time, basically substituting abstraction for scrolling, hence the reason for thinking this could be good for tiny-screen coding.</p>
<p>However, the semantics of these fragments in literate programming is textual inclusion, basically macro expansion.  Amongst other things this means effectively dynamic scoping; for example, the code &#8220;obtain email address from form variables&#8221; might define a variable &#8220;email&#8221; that is then used in &#8220;send email message &#8220;.</p>
<p>However, the dynamic scoping is quite limited as the code fragments were always (or maybe normally) only used in one place, that is they are merely a way of hiding code.  This is quite different from a piece of code that takes different meaning wherever you place it dependent on what variables it picks up.</p>
<h3>scripts and templates</h3>
<p>As I began to think about this I recalled early templating languages I developed for code generation from data types (somewhat similar to current web scripting languages).  In these I used abstractions that were partly like a procedure, but also, similar to literate programming, in that &#8216;parameters&#8217; could be extracted from context if not given explicitly.  In the example earlier a &#8216;procedure&#8217; like &#8220;check email address valid &#8221; might have an explicit parameter  &#8216;email&#8217;, but this would be taken from the environment if it was not set explicitly.  This reflects the fact that in many situations there is an &#8216;obvious&#8217; parameter, just as in day to day life you just say &#8220;post the letter&#8221;, not &#8220;post the letter that is on the hall table just where you will obviously find it as you go out and where I always put it&#8221;.</p>
<p>While this still seems a little heretical when implemented as part of a programming language (or at least templating script), in fact it is common at the meta-coding level of &#8216;includes&#8217; found in most web scripting including JSP.  For example in PHP one might write:</p>
<pre style="padding-left: 30px;">&lt;?php
foreach ( $messages as $message ) {
    include "format-message.php";
}
?&gt;</pre>
<p>The PHP code in the file &#8221; format-message.php &#8221; is effectively textually included inside the &#8216;foreach&#8217; block and hence &#8216;$message&#8217; would be available to it as a variable.  While the base language is largely lexically scoped, the includes effectively allow an alternative abstraction with dynamic binding.  Purists would might decry the above code, but few have not  used something similar at some point. Indeed the <a href="http://wordpress.org/extend/plugins/" target="_blank">WordPress plugin system</a> depends entirely on careful use of such constructs.</p>
<p>In my websites (e.g. <a href="http://www.hcibook.com/e3/" target="_blank">hcibook.com/e3</a>, <a href="http://www.snipit.org/" target="_blank">snipit.org</a>) I typically have a &#8216;top.php&#8217; function that routes raw URLs to appropriate pages or scripts by use of &#8216;include&#8217;<sup><a href="#footnote-3-187" id="footnote-link-3-187" title="See the footnote.">3</a></sup>.  Often this performs common start-up actions such as establishing database connections, reading Cookies, or parsing URL path information, and, of course, the results of all of this are then available as context for the included scripts.  Sometimes I wrap this in a single global variable $context, but not always (life is short, and the sensible time to code a website shorter!).</p>
<h3>aggregate inheritance</h3>
<p>In a HTML document, the font of a paragraph is set not by some form of object inheritance based on the class of the &lt;p&gt; tag, but instead on the smallest enclosing block that has an explicit font style.  The binding of fonts is in a sense static or even lexical as it is based on where in the document structure the text sits, but it is not about the lexical structure of the CSS, but of the HTML document to which it is applied.</p>
<p>Similarly, in a GUI a mouse click on a button will typically go through a hierarchy where the enclosing elements (screen panel, etc.) get &#8216;first dibs&#8217; to filter or react to the event, eventually dribbling down to the button itself, and then sometimes back up again with the containers getting a chance to do some sort of &#8216;after the event&#8217; processing.  Just like the font on the page, the meaning of &#8216;click on button&#8217; cannot be found solely in the class structure of &#8216;JButton&#8217;, but in the dynamic location where it is found.</p>
<p>I don&#8217;t know a standard term for this, but I have always called it &#8216;<em>aggregate inheritance</em>&#8216; as elements inherit from the containers within which they are aggregated.</p>
<p>While lexical binding is about the structure of the <em>code</em>, normal dynamic binding is about the structure of the <em>process</em> (calling pattern) and aggregate inheritance is about the structure of the <em>data</em>.</p>
<h3>the bad and the worse</h3>
<p>The reasons for eschewing dynamic binding were partly about efficient compilation of block-structured languages, albeit now with complex object inheritance rules, dynamic binding seems tame!  The other reason was semantic as static (and especially lexical) binding allows a limited form of referential transparency, you can tell what a variable means and track the data flow &#8212; locality.</p>
<p>Clearly at one stage the jury was still out, indeed one of the innovations (I believe) in Algol 68 was the inclusion of dynamic binding and as late (sic) as 1986 papers were discussing ways of implementing dynamic binding<sup><a href="#footnote-4-187" id="footnote-link-4-187" title="See the footnote.">4</a></sup>.  However, even Lisp eventually moved to making its default binding static.</p>
<p>Today all major languages use lexical binding &#8212; except they don&#8217;t.  In fact there are numerous workarounds, just like the tortured workarounds we use for GOTO-less code<sup><a href="#footnote-5-187" id="footnote-link-5-187" title="See the footnote.">5</a></sup>.</p>
<p>Simple object inheritance is static, but only so long as no one changes the classes you inherit from!  Of course OO inheritance is itself often criticised, but is generally accepted as OK<sup><a href="#footnote-6-187" id="footnote-link-6-187" title="See the footnote.">6</a></sup>.</p>
<p>In even simple code we also use global variables, which while static in scope certainly allow non-local effects.  These are again especially common in web scripting where context seems particularly important. In fact they are so ubiquitous that special language constructs may be used such as PHP&#8217;s &#8216;<a href="http://uk3.php.net/manual/en/language.variables.superglobals.php" target="_blank">superglobals</a>&#8216; or &#8216;<a href="http://uk3.php.net/manual/en/function.define.php" target="_blank">define</a>&#8216;. On the client side also, Javascript code is often replete with globals.</p>
<p>Those using &#8216;proper&#8217; languages may look down on slack web programming practices.  However, the popular singleton pattern or static Class variables (such as in the Java System class) are but globals by another name, and database access and the filesystem again access a large global name space.</p>
<p>But if the problem of dynamic binding is non-locality, surely the worst culprits are pointers and references.  Pure functional programming takes referential transparency seriously, is side effect free and so avoids updatable references and pointers.  However, few programmers, however pure, are willing to work totally under FP&#8217;s strictures<sup><a href="#footnote-7-187" id="footnote-link-7-187" title="See the footnote.">7</a></sup>.</p>
<p>Non-locality of reference and effect seems, not just common but ubiquitous.  It is dangerous, but that is because it is powerful.  This is true of pointers, but equally of variable binding paradigms, the issue is how to ensure understanding and control of non-locality, not to forbid some kinds whilst allowing free reign to others.</p>
<h3>context and pipelines</h3>
<p>I&#8217;ve used the term &#8216;context&#8217; several times.  In ubicomp and intelligent interfaces issues connected with context are critical in interpreting user activity.  Similarly, natural language processing and vision at first (many years ago), took a very pure layered approach with each level of processing giving its results to the next up in a pipeline: lexical to syntactic to semantic.  However, human interpretation is not so neatly layered<sup><a href="#footnote-8-187" id="footnote-link-8-187" title="See the footnote.">8</a></sup>.  Both NLP and computer vision became a lot more successful when they allowed downwards paths from semantics back down to lower levels.</p>
<p>Compiler and language design took their form partly based on early models of language, indeed any cross-over between layers of processing was deemed problematic<sup><a href="#footnote-9-187" id="footnote-link-9-187" title="See the footnote.">9</a></sup>.  Whilst AI seems to have moved on, programming language design does not; in language and the physical world we assume that terms take meaning from context, why not in programming?</p>
<h3>using dynamic binding</h3>
<p>Recently I was writing <a href="http://codex.wordpress.org/Shortcode_API" target="_blank" title="Wordpress Shortcode API">shortcodes</a> in a WordPress plugin.  Shortcodes are tags in the text of a blog item that can be used as a form of extensible markup.  For example &#8220;[cite key=Dx09]&#8221; in the text might lookup and link to an entry in a bibliographic database<sup><a href="#footnote-10-187" id="footnote-link-10-187" title="See the footnote.">10</a></sup>.  Some of the codes are stand alone, but some come in pairs [/code]</p>
<p>Being a typical hacker, I first of all created a generic helper plug-in (SimpleShortcodeHandler) that made it easy to do simple things like add a span or div with a specific class.  However, I was aware that I might want to add more complicated things like a BibTeX-style bibliography list:</p>
<pre style="padding-left: 30px;">[bibliography format=APA"]
[bibitem key="Dx09 "] A. Dix (2009).
    What's wrong with dynamic binding? [/bibitem]
[bibitem key="Dy68"] Dykstra, E. (1968).
    GoTo … [/bibitem]
[/bibliography]</pre>
<p>The behaviour of the '[bibitem]' codes would clearly need to depend on the format of the bibliography, but the normal shortcode extension mechanism means (as in all good programming!) the code to process each shortcode is in isolation applied to its own text.  As a simple addition, the SimpleShortcodeHandler class keeps a stack of enclosing shortcodes in a post so that the handler for 'bibitem' can query the stack for the most recent enclosing 'bibliography' tag.  That is, I added a workaround for dynamic binding in the program code to enable aggregate inheritance in the blog post.</p>
<p>In fact, the way WordPress processes shortcodes means that the code for 'bibitem' is called within a call to the expansion code for 'bibliography', however, there are intervening calls to WordPress' internal functions, so one cannot simply pass in context information as an additional parameter.</p>
<p>Similar but more complex issues arise when dealing with sessions in web applications, AJAX programming, or other asynchronous remote procedure calls, all of which are basically an extreme case of program  inversion as found following structure clash in old <a href="http://en.wikipedia.org/wiki/Jackson_Structured_Programming" target="_blank">Jackson Structured Programming</a>, or more generally in <a href="http://en.wikipedia.org/wiki/Coroutine" target="_blank">co-routine-based coding</a>.</p>
<h3>adding dynamic binding to the language</h3>
<p>There seem to be two forms of dynamic binding that are commonly used.</p>
<p>The first is <em>shallow dynamic binding</em>, for things like the literate programming and PHP includes.  Here the dynamic binding is almost a form of implicit parameter passing, a convenient shortcut for writing code like:</p>
<pre style="padding-left: 30px;">function do_some_work_to_x(x) { . . . }
// . . . later in the code
x = 3;
do_some_work_to_x(x);</pre>
<p>The expanded code may update variables as well as use their values, but that is then like passing variables by reference.</p>
<p>When using PHP includes that are doing work (e.g. web page templates, as opposed to declaring functions) I usually add a comment block at the top saying what variables it expects to find in its environment.  There is no reason why this should not be made more explicit, whether hand written, or generated by a programming environment.</p>
<p>The second form is <em>deep dynamic binding</em> as in the shortcode stack described above, and indeed in many forms of meta-level programming where there is aggregate inheritance on a data structure.  In these examples, the dynamic binding is to variables that are connected to a module or similar namespace, but where the scoping of the namespace is not the call structure.</p>
<p>In the shortcode example, this simply was a means to pass information up and down to related functions, 'skipping' other 'foreign' functions on the way.</p>
<p>However, in other cases there may be a more complex pattern of scoping the context. A simple example would be for having variable 'constants' in a mathematical function class:</p>
<pre style="padding-left: 30px;">module Math {
  context { precision = 0.0001; base = 10; }
  sqrt(x) {
      y = 1;
      while ( abs(y*y-x)&gt; precision )
          y = (y+x/y)/2;
      return y;
  }
}</pre>
<p>Then in the calling code something like:</p>
<pre style="padding-left: 30px;">Math.push_context;
Math.precision=0.1;
z = sqrt(2);
Math.pop_context;</pre>
<p>To some extent this form of deep context is relatively easy to manage through coding patterns, but the ubiquity in transactional, asynchronous and co-routine programming, suggests deeper infrastructure support would be useful.</p>
<h3>in short</h3>
<p>In dealing with the lack of good mechanisms for dynamic binding, programmers are often forced into workarounds that are worse than if there were a simple way to do it in the language.  The non-locality problems of dynamic binding are also present in other accepted programming constructs such as pointers.  On the other hand, there are many contexts, especially in web programming, where forms of dynamic binding lead to neater, more comprehensible, and hence more robust and maintainable code. Dynamic programming can be dangerous and the overall approach of the past 20 years has been to hope it will go away. However, its ubiquity and utility suggests that including support for safe and appropriate dynamic binding in tools, frameworks or languages (and the three can be conflated) may be a better approach for the future.</p>
<br /><ol class="footnotes"><li id="footnote-1-187">Strangely also the days when major advances in substance seemed to be more important than minor advances in nomenclature  [<a href="#footnote-link-1-187">back</a>]</li><li id="footnote-2-187">Recently Ken Banks, Matt Jones and Gary Marsden who proposed the MDD discussion are amongst the partners in a new project &#8216;<a href="http://mobility.kiwanja.net/" target="_blank">mobility</a>&#8216;, which is planning to work on mobile-based programming tools.  [<a href="#footnote-link-2-187">back</a>]</li><li id="footnote-3-187">Similar to the pattern proposed by <a href="http://josephscott.org/" target="_blank">Joseph Scott</a> in &#8220;<a href="http://josephscott.org/archives/2008/11/php-url-routing-pur/" target="_blank">PHP URL Routing (PUR)</a>&#8220;  [<a href="#footnote-link-3-187">back</a>]</li><li id="footnote-4-187">e.g. Gantenbein, R. E. and Jones, D. W. 1986. Dynamic binding of separately compiled objects under program control. In Proceedings of the 1986 ACM Fourteenth Annual Conference on Computer Science (Cincinnati, Ohio, United States). CSC &#8217;86. ACM, New York, NY, 287-292. DOI= <a href="http://doi.acm.org/10.1145/324634.325436" target="_blank">http://doi.acm.org/10.1145/324634.325436</a>  [<a href="#footnote-link-4-187">back</a>]</li><li id="footnote-5-187">The argument for avoiding where possible GOTOs was of course clearly made by Dijkstra in &#8220;<a href="http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html" target="_blank">Go To Statement Considered Harmful</a>&#8221; (Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148). However, see the <a href="http://david.tribble.com/text/goto.html" target="_blank">example of an LR parser</a> in <a href="http://david.tribble.com/" target="_blank">David Tribble</a>&#8216;s commentary on Dijkstra&#8217;s paper.  The parser would typically be coded now-a-days using a number of state variables, obfuscating the meaning far more than the controlled use of GOTO.  [<a href="#footnote-link-5-187">back</a>]</li><li id="footnote-6-187">Oddly, whilst inheritance is deemed OK, for some reason <a href="http://en.wikipedia.org/wiki/Mixin" target="_blank">mix-ins</a> are avoided in Java and indeed most modern OO languages.  This seems to be due to some of the semantic quagmire of multiple-inheritance, but mix-ins can be made semantically innocuous and would be so useful!  To some extent <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" target="_blank">Aspect-Oriented Programming</a> has some of the feel of mix-ins, and can be used to solve some similar problems; however it too brings issues of locality and transparency.  [<a href="#footnote-link-6-187">back</a>]</li><li id="footnote-7-187">Although <a href="http://labs.google.com/papers/mapreduce.html" target="_blank">Google&#8217;s MapReduce</a> shows functional programming can be very powerful.  Having worked with FP people for many years, I find much of my own code has an FP feel.  [<a href="#footnote-link-7-187">back</a>]</li><li id="footnote-8-187">In particular, semantic levels of processing &#8216;pass down&#8217; context to lower levels so that they &#8216;know what to expect&#8217; and so can disambiguate stimuli.  To some extent we see and hear what we expect, hence various forms of optical illusion.  [<a href="#footnote-link-8-187">back</a>]</li><li id="footnote-9-187">For example, in K&amp;R C, the expression: &#8220;kind (*fun)();&#8221; is syntactically ambiguous unless you know whether &#8216;kind&#8217; is a user defined type. This rare cross-over between syntax and semantics was seen as a weakness in the language.  [<a href="#footnote-link-9-187">back</a>]</li><li id="footnote-10-187">I&#8217;m writing plugin&#8217;s to help write the <a href="http://www.physicality.org/TouchIT/" target="_blank">TouchIT book</a>  [<a href="#footnote-link-10-187">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2009/07/20/whats-wrong-with-dynamic-binding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Some lessons in extended interaction, courtesy Adobe</title>
		<link>http://www.alandix.com/blog/2009/03/23/some-lessons-in-extended-interaction-courtesy-adobe/</link>
		<comments>http://www.alandix.com/blog/2009/03/23/some-lessons-in-extended-interaction-courtesy-adobe/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 11:59:48 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[HCI and usability]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[banks]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Corina Sas]]></category>
		<category><![CDATA[Haliyana Khalid]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[identity theft]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/?p=138</guid>
		<description><![CDATA[I use various Adobe products, especially Dreamweaver and want to get the newest version of Creative Suite.  This is not cheap, even at academic prices, so you might think Adobe would want to make it easy to buy their products, but life on the web is never that simple! As you can guess a number [...]]]></description>
			<content:encoded><![CDATA[<p>I use various Adobe products, especially Dreamweaver and want to get the newest version of Creative Suite.  This is not cheap, even at academic prices, so you might think Adobe would want to make it easy to buy their products, but life on the web is never that simple!</p>
<p>As you can guess a number of problems ensued, some easily fixable, some demonstrating why effective interaction design is not trivial and apparently good choices can lead to disaster.</p>
<p>There is a common thread.  Most usability is focused on the time we are actively using a system &#8211; yes obvious &#8211; however, most of the problems I faced were about the <em>extended use of the system</em>, the way individual periods of use link together.  Issues of long-term interaction have been an interest of mine for many years<sup><a href="#footnote-1-138" id="footnote-link-1-138" title="See the footnote.">1</a></sup> and have recently come to the fore in work with <a href="http://www.lancs.ac.uk/postgrad/khalid/" target="_blank" title="Haliyana Khalid - home page">Haliyana</a>, <a href="http://www.comp.lancs.ac.uk/department/staff.php?name=corina" target="_blank" title="Corina Sas - departmental page">Corina</a> and others on social networking sites and the nature of &#8216;extended episodic experience&#8217;.  However, there is relatively little in the research literature or practical guidelines on such extended interaction, so problems are perhaps to be expected.</p>
<p>First the good bit &#8211; the Creative &#8216;Suite&#8217;  includes various individual Adobe products and there are several variants Design/Web, Standard/Premium, however there is a <a href="http://www.adobe.com/uk/products/creativesuite/compare/" target="_blank">great page comparing them all</a> &#8230; I was able to choose which version I needed, go to the academic purchase page, and then send a link to the research administrator at Lancaster so she could order it.  So far so good, 10 out of 10 for Adobe &#8230;</p>
<p>To purchase as an academic you quite reasonably have to send proof of academic status.  In the past a letter from the dept. on headed paper was deemed sufficient, but now they ask for a photo ID.  I am still not sure why this is need, I wasn&#8217;t going in in person, so how could a photo ID help?  My only photo ID is my passport and with security issues and identity theft constantly in the news, I was reluctant to send a fax of that (do US homeland security know that Adobe, a US company, are demanding this and thus weakening border controls?).</p>
<p>After double checking all the information and FAQs in the site, I decided to contact customer support &#8230;</p>
<h3>Phase 1 customer support</h3>
<p>The site had a &#8220;contact us&#8221; page and under &#8220;Customer service online&#8221;, there is an option &#8220;Open new case/incident&#8221;:</p>
<p style="text-align: center;"><a href="http://www.adobe.com/uk/aboutadobe/contact.html" target="_blank"><img class="aligncenter" title="Adobe customer support" src="http://www.alandix.com/images/adobe-customer-service-1.png" alt="" width="231" height="81" /></a></p>
<p>&#8230; not exactly everyday language, but I guessed this meant &#8220;send us a message&#8221; and proceeded. After a few more steps, I got to the enquiry web form and asked whether there was an alternative, or if I sent fax of the passport whether I could blot out the passport number and submitted the form.</p>
<p style="padding-left: 30px;"><strong>Problem 1:</strong> The confirmation page <em>did not say what would happen next</em>.  In fact they send an email when the query is answered, but as I did not know that, so I had to periodically check the site during the rest of the day and the following morning.</p>
<p style="padding-left: 30px;"><strong>Lesson 1: </strong> Interactions often include &#8216;breaks&#8217;, when things happen over a longer period.  <em>When there is a &#8216;beak&#8217; in interaction, explain the process.</em></p>
<p>Lesson 1 can be seen as a long-term equivalent of standard usability principles to offer feedback, or in <a href="http://www.useit.com/papers/heuristic/heuristic_list.html" target="_blank">Nielsen&#8217;s Heuristics</a> &#8220;Visibility of system status&#8221;, but this design advice is normally taken to refer to immediate interactions and what has already happened, not about what will happen in the longer term.  Even principles of &#8216;predictability&#8217; are normally phrased in knowing what I can do to the system and how it will respond to my actions, but not formulated clearly for when the system takes autonomous action.</p>
<p>In terms of <a href="http://www.hcibook.com/alan/topics/status/" target="_blank" title="Alan's status-event analysis page">status-event analysis</a>, they quite correctly gave me an generated an interaction event for me (the mail arriving) to notify me of the change of status of my &#8216;case&#8217;.  It was just that the hadn&#8217;t explained that is what they were going to do.</p>
<p>Anyway the next day the email arrived &#8230;</p>
<p style="padding-left: 30px;"><strong>Problem 2:</strong> The mail&#8217;s subject was &#8220;Your customer support case has been closed&#8221;.  Within the mail there was no indication that the enquiry had actually been answered (it had), nor a link to the the location on the site to view the &#8216;case&#8217; (I had to login and navigate to it by hand), just a general link to the customer &#8216;support&#8217; portal and a survey to convey my satisfaction with the service (!).</p>
<p style="padding-left: 30px;"><strong>Lesson 2.1:</strong> <em>The email is part of the interaction.</em> So apply &#8216;normal&#8217; interaction design principles, such as Nielsen&#8217;s &#8220;speak the users&#8217; language&#8221; &#8211; in this case &#8220;case has been closed&#8221; does not convey that it has been dealt with, but sounds more like it has been ignored.</p>
<p style="padding-left: 30px;"><strong>Lesson 2.2:</strong> <em>Give clear information in the email &#8211; don&#8217;t demand a visit to the site.</em> The eventual response to my &#8216;case&#8217; on the web site was entirely textual, so why not simply include it in the email?  In fact, the email included a PDF attachment, that started off identical to the email body and so I assumed was a copy of the same information &#8230; but turned out to have the response in it.  So they had given the information, just not told me they had!</p>
<p style="padding-left: 30px;"><strong>Lesson 2.3:</strong> <em>Except where there is a security risk &#8211; give direct links not generic ones.</em> The email could easily have included a direct link to my &#8216;case&#8217; on the web site, instead I had to navigate to it.  Furthermore the link could have included an authentication key so that I wouldn&#8217;t have to look up my Adobe user name and password (I of course needed to create a web site login in order to do a query).</p>
<p>In fact there are sometimes genuine security reasons for sometimes <strong>NOT</strong> doing this.  One is if you are uncertain of the security of the email system or recipient address, but in this case Adobe are happy to send login details by email, so clearly trust the recipient. Another is to avoid establishing user behaviours that are vulnerable to &#8216;fishing&#8217; attacks.  In fact I get annoyed when banks send me emails with direct links to their site (some still do!), rather than asking you to visit the site and navigate, if users get used to navigating using email links then entering login credentials this is an easy way for malicious emails to harvest personal details. Again in this case Adobe had other URLs in the email, so this was not their reason.  However, if they had been &#8230;</p>
<p style="padding-left: 30px;"><strong>Lesson 2.4:</strong> <em>If you are worried about security of the channel, give clear instructions on how to navigate the site instead of a link.</em></p>
<p style="padding-left: 30px;"><strong>Lesson 2.5:</strong> <em>If you wish to avoid behaviour liable to fishing</em>, <em>do not include direct links to your site in emails</em>.  However, <em>do give the user a fast-access reference number</em> to cut-and-paste into the site once they have navigated to the site manually.</p>
<p style="padding-left: 30px;"><strong>Lesson 2.6:</strong> As a more general lesson <em>understand security and privacy risks</em>.  Often systems demand security procedures that are unnecessary (forcing me to re-authenticate), but omit the ones that are really important (making me send a fax of my passport).</p>
<p>Eventually I re-navigate the Adobe site and find the details of my &#8216;case&#8217; (which was also in the PDF in the email if I had realised).</p>
<p style="padding-left: 30px;"><strong>Problem 3: </strong> The &#8216;answer&#8217; to my query was a few sections cut-and-pasted from the academic purchase FAQ &#8230; which I had already read before making the enquiry.  In particular it did not answer my specific question even to say &#8220;no&#8221;.</p>
<p style="padding-left: 30px;"><strong>Lesson 3.1: </strong> The FAQ sections could easily have been identified automatically the day before. <em>If there is going to be  delay in human response, where possible offer an immediate automatic response.</em> If this includes a means to say whether this has answered the query, then human response may not be needed (saving money!) or at least take into account what the user already knows.</p>
<p style="padding-left: 30px;"><strong>Lesson 3.2: </strong><em>For human interactions &#8211; read what the user has said. </em> Seems like basic customer service &#8230; This is a training issue for human operators, but reminds us that:</p>
<p style="padding-left: 30px;"><strong>Lesson 3.3:</strong> <em>People are part of the system too.</em></p>
<p style="padding-left: 30px;"><strong>Lesson 3.4:</strong> <em>Do not &#8216;close down&#8217; an interaction until the user says they are satisfied.</em> Again basic customer service, but whereas 3.2 is a human training issue, this is about the design of the information system: the user needs some way to say whether or not the answer is sufficient.  In this case, the only way to re-open the case is to ring a full-cost telephone support line.</p>
<h3>Phase 2 customer feedback survey</h3>
<p>As I mentioned, the email also had a link to a web survey:</p>
<blockquote>
<pre>In an effort to constantly improve service to our customers, we would be very
interested in hearing from you regarding our performance.  Would you be so
kind to take a few minutes to complete our survey?   If so, please click here:</pre>
</blockquote>
<p>Yes I did want to give Adobe feedback on their customer service! So I clicked the link and was taken to a personalised web survey.  I say &#8216;personalised&#8217; in that the link included a reference to the customer support case number, but thereafter the form was completely standard  and had numerous multi-choice questions completely irrelevant to an academic order.  I lost count of the pages, each with dozens of tick boxes, I think around 10, but may have been more &#8230; and certainly felt like more.  Only on the last page was there a free-text area where I could say what was the real problem. I only persevered because I was already so frustrated &#8230; and was more so by the time I got to the end of the survey.</p>
<p style="padding-left: 30px;"><strong>Problem 4:</strong> Lengthy and largely irrelevant feedback form.</p>
<p style="padding-left: 30px;"><strong>Lesson 4.1:</strong> <em>Adapt surveys to the user, don&#8217;t expect the user to adapt to the survey! </em> The &#8216;case&#8217; originated in the education part of the web site, the selections I made when creating the &#8216;case&#8217; narrowed this down further to a purchasing enquiry; it would be so easy to remove many of the questions based on this. Actually if the form had even said in text &#8220;if your support query was about X, please answer &#8230;&#8221; I could then have known what to skip!</p>
<p style="padding-left: 30px;"><strong>Lesson 4.2:</strong> <em>Make surveys easy for the user to complete: limit length and offer fast paths.</em> If a student came to me with a questionnaire or survey that long I would tell them to think again.  If you want someone to complete a form it has to be easy to do so &#8211; by all means have longer sections so long as the user can skip them and get to the core issues.  I guess cynically making customer surveys difficult may reduce the number of recorded complaints <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Phase 3 the order arrives</h3>
<p>Back to the story: the customer support answer told me no more than I knew before, but I decided to risk faxing the passport (with the passport number obscured) as my photo ID, and (after some additional phone calls by the research administrator at Lancaster!), the order was placed and accepted.</p>
<p>When I got back home on Friday, the box from Adobe was waiting <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I opened the plastic shrink-wrap &#8230; and <em>only then</em> noticed that on the box it said &#8220;Windows&#8221; <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>I had sent the research adminstrator a link to the product, so had I accidentally sent a link to the Windows version rather than the Mac one?  Or was there a point later in the purchasing dialogue where she had had to say which OS was required and not realised I used a Mac?</p>
<p>I went back to my mail to her and <a href="https://store2.adobe.com/cfusion/store/html/index.cfm?event=displayProduct&amp;categoryOID=1901573&amp;store=OLS-EDU-UK" target="_blank">clicked the link:</a></p>
<p style="text-align: center;"><a href="https://store2.adobe.com/cfusion/store/html/index.cfm?event=displayProduct&amp;categoryOID=1901573&amp;store=OLS-EDU-UK" target="_blank"><img class="aligncenter" title="Adobe Order Page" src="http://www.alandix.com/images/adobe-order-page.jpg" alt="" width="515" height="244" /></a></p>
<p>The &#8220;Platform&#8221; field clearly says &#8220;Mac&#8221;, but it is actually a selection field:</p>
<p style="text-align: center;"><img class="aligncenter" title="Adoeb order page menu" src="http://www.alandix.com/images/adobe-order-page-menu.png" alt="" width="241" height="144" /></p>
<p>It seemed odd that the default value was &#8220;Mac&#8221; &#8230; why not &#8220;CHOOSE A PLATFORM&#8221;, I wondered if it was remembering a previous selection I had made, so tried the URL in Safari &#8230; and it looked the same.</p>
<p>&#8230; then I realised!</p>
<p>The web form was being &#8216;intelligent&#8217; and had detected that I was on a Mac and so set the field to &#8220;Mac&#8221;.  I then sent the URL to the research administrator and on her Windows machine it will have defaulted to &#8220;Windows&#8221;.  She quite sensibly assumed that the URL I sent her was for the product I wanted and ordered it.</p>
<p>In fact offering <a href="http://www.lukew.com/ff/entry.asp?691" target="_blank">smart defaults</a> is  good web design advice, so what went wrong here?</p>
<p style="padding-left: 30px;"><strong>Problem 5: </strong>What I saw and what the research administrator saw were different, leading to ordering the wrong product.</p>
<p style="padding-left: 30px;"><strong>Lesson 5.1: </strong><em>Defaults are also dangerous.</em> If there are defaults the user will probably agree to them without realising there was a choice.  We are talking about a £600 product here, that is a lot of room for error.  For very costly decisions, this may mean not having defaults and forcing the user to choose, but maybe making it easy to choose the default (e.g. putting default at top of a menu).</p>
<p style="padding-left: 30px;"><strong>Lesson 5.2: </strong> If we decide the advantages of the default outweigh the disadvantages then we need to <em>make defaulted information obvious</em> (e.g. highlight, special colour) and possibly <em>warn the user</em> (one of those annoying &#8220;did you really mean&#8221; dialogue boxes! &#8230; but hey for  £600 may be worth it).  In the case of an e-commerce system we could even track this through the system and keep inferred information highlighted (unless explicitly confirmed) all the way through to the final order form. Leading to &#8230;</p>
<p style="padding-left: 30px;"><strong>Lesson 5.3:</strong> <em>Retain provenance</em>.  Automatic defaults are relatively simple &#8216;intelligence&#8217;, but as more forms of intelligent interaction emerge it will become more and more important to retain the provenance of information &#8211; what came explicitly from the user, what was inferred and how.  Neither current database systems nor emerging semantic web infrastructure make this easy to achieve internally, so new information architectures are essential.  Even if we retain this information, we do not yet fully understand the interaction and presentation mechanisms needed for effective user interaction with inferred information, as this story demonstrates!</p>
<p style="padding-left: 30px;"><strong>Lesson 5.4: </strong><em>The URL is part of the interaction</em><sup><a href="#footnote-2-138" id="footnote-link-2-138" title="See the footnote.">2</a></sup>.  I mailed a URL believing it would be interpreted the same everywhere, but in fact its meaning was relative to context.  This can be problematic even for &#8216;obviously&#8217; personalised pages like a <a href="http://www.new.facebook.com/home.php" target="_blank">Facebook home page</a> which always comes out as <em>your own</em> home page, so looks different.  However, it is essential when someone might want to bookmark, or mail the link.</p>
<p>This last point has always been one of the problems with framed sites and is getting more problematic with AJAX.  Ideally when dynamic content changes on the web page the URL should change to reflect it.  I had mistakenly thought this impossible without forcing a page reload, until I noticed that the <a href="multimap" target="_blank">multimap</a> site does this.</p>
<p style="text-align: center;"><a href="http://www.multimap.com/maps/?qs=tiree&amp;countryCode=GB#map=56.50485,-6.89441|12|4&amp;bd=useful_information&amp;loc=GB:56.5:-6.91667:17|tiree|Tiree" target="_blank" title="Multimap - Tiree"><img class="aligncenter" title="Multimap URL line with map location" src="http://www.alandix.com/images/multimap-url-changing.png" alt="" width="515" height="46" /></a></p>
<p style="text-align: left;">The map location at the end of the URL changes as you move around the map.  It took me still longer to work out that this is accomplished because changing the part of the URL after the hash (sometimes called the &#8216;fragment&#8217; and accessed in Javascript via location.hash) does not force a page reload.</p>
<p style="text-align: left;">If this is too complicated then it is relatively easy to use Javascript to update some sort of &#8220;use this link&#8221; or &#8220;link to this page&#8221; both for frame-based sites or those using web form elements or even AJAX. In fact, multimap does this as well!</p>
<p style="text-align: center;"><a href="http://www.multimap.com/maps/?qs=tiree&amp;countryCode=GB#map=56.50485,-6.89441|12|4&amp;bd=useful_information&amp;loc=GB:56.5:-6.91667:17|tiree|Tiree" target="_blank" title="Multimap - Tiree"><img class="aligncenter" title="Multimap - send/share link" src="http://www.alandix.com/images/multimap-send-link.png" alt="" width="213" height="59" /></a></p>
<p style="padding-left: 30px;"><strong>Lesson 5.5:</strong> When you have dynamic page content <em>update the URL or provide a &#8220;link to this page&#8221; URL</em>.</p>
<h3>Extended interaction</h3>
<p>Some of these problems should have been picked up by normal usability testing. It is reasonable to expect problems with individual web sites or low-budget sites of small companies or charities.  However, large corporate sites like Adobe or central government have large budgets and a major impact on many people.  It amazes and appals me how often even the simplest things are done so sloppily.</p>
<p>However, as mentioned at the beginning, many of the problems and lessons above are about extended interaction: multiple visits to the site, emails between the site and the customer, and emails between individuals.  None of my interactions with the site were unusual or complex, and yet there seems to be a systematic lack of comprehension of this longer-term picture of usability.</p>
<p>As noted also at the beginning, this is partly because there is scant design advice on such interactions.  Norman has discussed &#8220;<a href="http://www.jnd.org/dn.mss/human-centered.html" target="_blank">activity centred design</a>&#8220;, but he still focuses on the multiple interactions within a single session with an application.  Activity theory takes a broader and longer-term view, but tends to focus more on the social and organisational context whereas the story here shows there is also a need for detailed interaction design advice.  The work I mentioned with Haliyana and Corina has been about the experiential aspects of extended interaction, but the problems on the Adobe were largely at a functional level (I never got so far as appreciating an &#8216;experience&#8217; except a bad one!). So there is clearly much more work to be done here &#8230; any budding PhD students looking for a topic?</p>
<p>However, as with many things, once one thinks about the issue, some strategies for effective design start to become obvious.</p>
<p>So as a last lesson:</p>
<p style="padding-left: 30px;"><strong>Overall Lesson:</strong> <em>Think about extended interaction</em>.</p>
<br /><ol class="footnotes"><li id="footnote-1-138">My earliest substantive work on long-term interaction was papers at HCI 1992 and 1994 on&#8221;<a href="http://www.hcibook.com/alan/papers/pace/" target="_blank">Pace and interaction</a>&#8221; and &#8220;<a href="http://www.hcibook.com/alan/papers/loop-HCI94/" target="_blank">Que sera sera &#8211; The problem of the future perfect in open and cooperative systems</a>&#8220;, mostly focused on communication and work flows.  The best summative work on this strand is in a 1998  journal paper &#8220;<a href="http://www.hcibook.com/alan/papers/IwCtau98/" target="_blank">Interaction in the Large</a>&#8221; and a more recent book chapter &#8220;<a href="http://www.hcibook.com/alan/papers/triggers2002/" target="_blank">Trigger Analysis &#8211; understanding broken tasks</a>&#8220;  [<a href="#footnote-link-1-138">back</a>]</li><li id="footnote-2-138">This is of course hardly new, although neither address the particular problems here, see Nielsen&#8217;s &#8220;<a href="http://www.useit.com/alertbox/990321.html" target="_blank">URL as UI</a>&#8221; and James Gardner&#8217;s &#8220;<a href="http://jimmyg.org/2007/11/11/best-practice-for-good-url-structures/" target="_blank">Best Practice for Good URL Structures</a>&#8221; for expostions of the general principle. Many sites still violate even simple design advice like W3C&#8217;s &#8220;<a href="http://www.w3.org/Provider/Style/URI" target="_blank">Cool URIs don&#8217;t change</a>&#8220;.  For example, even the BCS&#8217; eWIC series of electronic proceedings, have URLs of the form &#8220;<a href="http://www.bcs.org/server.php?show=nav.10270" target="_blank">www.bcs.org/server.php?show=nav.10270</a>&#8220;; it is hard to believe that &#8220;show=nav.10270&#8243; will persist beyond the next web site upgrade <img src='http://www.alandix.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />    [<a href="#footnote-link-2-138">back</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2009/03/23/some-lessons-in-extended-interaction-courtesy-adobe/feed/</wfw:commentRss>
		<slash:comments>0</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>omnignorance, the future of the web</title>
		<link>http://www.alandix.com/blog/2007/03/09/omnignorance-the-future-of-the-web/</link>
		<comments>http://www.alandix.com/blog/2007/03/09/omnignorance-the-future-of-the-web/#comments</comments>
		<pubDate>Fri, 09 Mar 2007 07:31:56 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[academic]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[digital authentication]]></category>
		<category><![CDATA[identity2.0]]></category>
		<category><![CDATA[open authentication]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.alandix.com/blog/2007/03/09/omnignorance-the-future-of-the-web/</guid>
		<description><![CDATA[The dream of the web seems a form of omniscience, unlmited and universal knowledge available at the vlick ofof a button or least at the click of a Google &#8216;Seach&#8217; button. However, last night I was on a site that empitomised the problems of the web. I was pointed to a blog entry about a [...]]]></description>
			<content:encoded><![CDATA[<p>The dream of the web seems a form of omniscience, unlmited and universal knowledge available at the vlick ofof a button or  least at the click of a Google &#8216;Seach&#8217;  button.  However, last night I was on a site that empitomised the problems of the web.</p>
<p>I was pointed to a blog entry  about a presentation that the blog said was &#8220;<a href="http://www.cc.isel.ipl.pt/CS/blogs/lfalcao/archive/2007/02/08/simply-the-best-presentation-i-ve-ever-seen.aspx">Simply the best presentation I&#8217;VE EVER SEEN!</a>&#8220;.  I was intrigued and and followed this to the <a href="http://identity20.com/">Identity2.0</a> site and in  particular a page about a <a href="http://identity20.com/media/OSCON2005/">keynote at OSCON 2005</a>.</p>
<p>The entry about the talk mentioned &#8216;Identity2.0&#8242; and &#8216;digital identity&#8217; so guessed this was something to do with single logins (like MS passport) or open authentication, which has long been an open issue (with many &#8216;solutions&#8217; but so far little success).  However, was this person and this site talking about one of these such as plain open authentication, or something deeper.</p>
<p>Well it is fine for the page about the talk not to say clearly, it is written within the context of the Indetity2.0 site, so I looked for an &#8216;about&#8217; link or something like that &#8230; nothing  I stripped the url back to plain <a href="http://identity20.com/">identity2.0.com</a> and of course simply got to a stabdard blog front page (I guess rather like this one), with the latest news, but nothing to gove over context or background.</p>
<p>In fact by chasing yet more links to other sites, by half guessing from various abstracts, blog entries, etc. I managed to pick out half a story about what this was about &#8230; but why so hard?</p>
<p>This reminds me of the <a href="http://www.alandix.com/blog/2007/01/14/keeping-track-of-history-blair-iraq-and-all-of-us/">problem I recorded a month or so back</a> when trying to find last week&#8217;s (as opposed to yesterday&#8217;s) news.  Really easy to find the latest item or even the hotest item, but really bad at getting to the background that gives context and turns buzz words into meaning.</p>
<p>At the risk of sounding like a codger at a cafe table, the same is true of much software documentation.  If you have seen the software grow and develop over the years it makes sense, but to students trying to make sense of Java packages, AJAX, Mac/Windows APIs, it is like fumbling in the dark.  Good signpoosting at every street corner, but no roadmaps.</p>
<p>In all these cases there are real questions we want to ask, this is not like meandering around Flickr or YouTube, travelling just for the journey.   However definitive statements (I&#8217;ll not say answers) give way to half-overheard conversations in a coffee shop.</p>
<p>It is often said that experts know more and more about less and less untul eventually they know everything about nothing.  It seems we are turning into a generation who know less and less about more and more until we know nothing about everthing &#8211; omingnorance rules.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alandix.com/blog/2007/03/09/omnignorance-the-future-of-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

