<?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>Generation 5 &#187; Asynchronous Communications</title>
	<atom:link href="http://gen5.info/q/category/asynchronous-communications/feed/" rel="self" type="application/rss+xml" />
	<link>http://gen5.info/q</link>
	<description>Towards Intelligent Systems</description>
	<lastBuildDate>Fri, 20 Aug 2010 19:43:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>What Is Ookaboo?</title>
		<link>http://gen5.info/q/2010/08/20/what-is-ookaboo/</link>
		<comments>http://gen5.info/q/2010/08/20/what-is-ookaboo/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 19:43:11 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=304</guid>
		<description><![CDATA[Ookaboo is a collection of images that are indexed by terms from the semantic web, or, the web of linked data. Ookaboo provides both a human interface and a semantic API. Ookaboo has two goals: (i) to dramatically improve the state of the art in image search for both humans and machines, and (ii) to [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right"><img src="/q/wp-content/uploads/2010/08/346315main_launch-5_full.jpg" align=right></div>
<p><a href="http://ookaboo.com/">Ookaboo</a> is a collection of images that are indexed by terms from the semantic web,  or,  the web of linked data.  Ookaboo provides both a <a href="http://ookaboo.com/">human interface</a> and a <a href="http://about.ookaboo.com/a/ookaboo_api/">semantic API.</a> Ookaboo has two goals:  (i) to dramatically improve the state of the art in image search for both humans and machines,  and (ii) to construct a knowledge base about the world that people live in that can be used to help information systems better understand us.</p>
<p><strong>Semantic Web, Linked Data</strong></p>
<p>In the semantic web,  we replace the imprecise words that we use everyday with precise terms defined by URLs.  This is <em>linked data</em> because it creates a universal shared vocabulary.<br />
<span id="more-304"></span></p>
<p>For an example,  in conventional image search,  a person might use the word &#8220;jaguar&#8221; to search for</p>
<ul>
<li> <a href="http://en.wikipedia.org/wiki/Jaguar">the animal</a></li>
<li> <a href="http://en.wikipedia.org/wiki/Jaguar_Cars">the automobile brand</a></li>
<li> <a href="http://en.wikipedia.org/wiki/Jacksonville_Jaguars">the Jacksonville Jaguars (NFL team)</a></li>
<li> <a href="http://en.wikipedia.org/wiki/Atari_Jaguar">the game console from Atari</a></li>
<li> &#8230; and nearly <a href="http://en.wikipedia.org/wiki/Jaguar_(disambiguation)">30 other things that are listed in Wikipedia.</a></li>
</ul>
<p>Note in the cases above,  there are pages in Wikipedia about each of the topics above:  it&#8217;s reasonable,  therefore,  that we could use these URLs as a <em>shared vocabulary</em> for referring to these things.  However,  we get some benefits when we use URLs that are linked to machine-readable pages,  such as</p>
<p><a href="http://dbpedia.org/resource/Jaguar">http://dbpedia.org/resource/Jaguar</a>,  or <a href="http://rdf.freebase.com/rdf/biology.itis.180593">http://rdf.freebase.com/rdf/biology.itis.180593</a></p>
<p>Pages on Ookaboo are marked up with <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa</a>,  a standard that lets semantic web tools extract machine readable information from the same pages that people view.</p>
<p><strong>Named entities</strong></p>
<p>Ookaboo is oriented around named entities,  particularly &#8216;concrete&#8217; things such as places,  people and creative works.  With current technology,  it&#8217;s more practical to create a taxonomy of things like &#8220;Manhattan&#8221;,  &#8220;Isaac Asimov&#8221; and &#8220;The Catcher In the Rye&#8221; than it is to tackle topics like &#8220;eating&#8221;,  &#8220;digestion&#8221; and &#8220;love&#8221;.  We believe that a comprehensive exploration of named entities will open pathways to an understanding of other terms,  and hope to extend Ookaboo&#8217;s capabilities as technology advances.</p>
<p><strong>Ookaboo semantic API</strong></p>
<p>The Ookaboo semantic API is a simple mechanism to query Ookaboo for photographs about named entities defined by URLs.  Based on JSON,  it makes it easy for automated systems to find photographs about topics.  You can get started in a few minutes by reading the <a href="http://about.ookaboo.com/a/ookaboo_api">documentation</a> and <a href="http://api.ookaboo.com/api1/register_for_api">creating and API Key.</a></p>
<p><strong>Creative Commons</strong></p>
<p>All images in Ookaboo are either public domain or under Creative Commons licenses.  As does Wikimedia Commons,  we exclude images with a &#8220;noncommercial&#8221; clause,  but unlike Wikimedia,  we refuse non-free images with a claim of &#8220;fair use&#8221; and we permit images that contain a &#8220;nonderivative&#8221; clause.</p>
<p>Visitors to Ookaboo and users of the API are invited to use images they find in a manner consistent with their licensing.  We believe that a link to the picture metadata page on Ookaboo (<a href="http://ookaboo.com/o/pictures/picture/13716/Canalside_apartments_in_Birmingham_City_">example</a> here) for an image satisfies the &#8220;BY&#8221; requirement in creative commons,  because our pages trace the provenance of images,  however,  we advise you to contact the creator of an image if you have any questions &#8212; for instance,  the creator of an image can grant you the right to use an image under terms different than the creative commons license.</p>
<p><strong>Geospatial Reasoning</strong></p>
<p>Ookaboo is initially focused on things that are located in space:  things like countries,  cities,  administrative divisions,  monuments,  buildings and bridges.  This part of the Ontology2 strategy of exploiting &#8220;unreasonably effective&#8221; strategies for organizing information.  As Ookaboo evolves,  expect to see spatial knowledge reflected in both the U.I. and API.</p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2010/08/20/what-is-ookaboo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nested Functions: C# that looks like Javascript</title>
		<link>http://gen5.info/q/2010/05/14/nested-functions-c-that-looks-like-javascript/</link>
		<comments>http://gen5.info/q/2010/05/14/nested-functions-c-that-looks-like-javascript/#comments</comments>
		<pubDate>Fri, 14 May 2010 15:10:04 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=295</guid>
		<description><![CDATA[Introduction Anonymous functions and closures are a language feature that,  in many ways,  allow programmers to reshape the syntax of a language.  Although often associated with highly dynamic languages such as Lisp and TCL and moderately dynamic languages,  such as Javascript,  C# shows that closures retain their power in statically typed languages.  In this article, [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://gen5.info/q/wp-content/uploads/2010/05/footbal2l.jpg"><img class="alignright size-full wp-image-297" style="float: right; padding-left: 15px;" title="footbal2l" src="http://gen5.info/q/wp-content/uploads/2010/05/footbal2l.jpg" alt="" width="200" height="197" /></a>Introduction</h2>
<p>Anonymous functions and closures are a language feature that,  in many ways,  allow programmers to reshape the syntax of a language.  Although often associated with highly dynamic languages such as Lisp and TCL and moderately dynamic languages,  such as Javascript,  C# shows that closures retain their power in statically typed languages.  In this article,  I identify a language feature that I like from the Pascal language and &#8216;clone&#8217; it using closures in C#.</p>
<h2><span id="more-295"></span>Nested Functions in Pascal</h2>
<p>Pascal (a historically important teaching language that&#8217;s as statically typed as you can get) allows programmers to define a named function inside the scope of an enclosing function.  This is a mechanism for encapsulation,  much like the mechanisms of object-oriented programming.  Here&#8217;s an example of how nested functions work in Pascal,  borrowed from Wikipedia:</p>
<pre>01 function E(x: real): real;
02    function F(y: real): real;
03    begin
04        F := x + y
05    end;
06 begin
07     E := F(3)
08 end;</pre>
<p>Note that you return values in Pascal by assigning to a &#8216;variable&#8217; with the same name as the function.  The F function is nested inside E,  so (i) F can only be called inside function E and (ii) F has access to variables defined inside function E.  Now,  this example is contrived (it&#8217;s an obfuscated way to write E(x)=x+3,  but this is a useful tool if you&#8217;ve got a chunk of code that is reused several times inside a function.</p>
<h2>Nested Functions in C#</h2>
<p>Although C# doesn&#8217;t explicitly support nested functions,  it&#8217;s easy to simulate this feature using an anonymous function (a lambda.)  To do this,  I use an idiom which is common in Javascript,  the naming of an anonymous function by assigning it to a named variable:</p>
<pre>09 static double E(double x) {
10    Func&lt;double,double&gt; F = (double y) =&gt; x+y;
11    return F(3.0);
12 }</pre>
<div>Note that F is a variable with a delegate type:  Func&lt;double,double&gt;,  but the call to F on line 11 looks exactly like an ordinary function call.  The C# compiler is doing some funky things behind the scenes to make this work,  but it&#8217;s most important to note that you&#8217;re not allowed to use &#8216;var&#8217; on line 10,  because the compiler infers the type of the function from the left hand side (LHS) of the expression.</div>
<h2>But why?</h2>
<p>I was writing an algorithm over trees the other day,  and noticed that there was a chunk of code that I was repeating in multiple places inside a single function;  as this chunk was increasing in complexity,  I felt alarmed by the duplication.  I could have spun the &#8220;inner&#8221; function into a named method of the class the &#8220;outer&#8221; function was in,  but that would have meant moving certain variables out of method scope into class scope &#8212; I didn&#8217;t like this,  because the rest of the class had no business accessing these variables.</p>
<p>I could have split out the tree algorithm into a separate class,  but that bulks up the code and creates more artifacts to maintain.  Splitting the algorithm into a separate class might let me enable reuse by adding extension points and using the Visitor pattern,  but I could have ended up creating an interface and several new classes&#8230;  while never getting around in the future to take advantage of that promised reuse.</p>
<p>Object-functional languages like C# offer programmers new choices when it comes to encapsulation,  inheritance and reuse:  the study of patterns and idioms used in languages such as LISP and Javascript can be fruitful for the C# programmer,  and proves that the many of the strengths that people associate with dynamically typed languages can be enjoyed in statically typed languages.</p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2010/05/14/nested-functions-c-that-looks-like-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Closures, Javascript And The Arrow Of Time</title>
		<link>http://gen5.info/q/2009/06/23/closures-javascript-and-the-arrow-of-time/</link>
		<comments>http://gen5.info/q/2009/06/23/closures-javascript-and-the-arrow-of-time/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 15:24:40 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=280</guid>
		<description><![CDATA[Introduction In most written media,  time progresses as you move down a page:  mainstream computing languages are no different.   Anonymous Closures are a language mechanism that,  effectively,  lets programmers create new control structures.  Although people associate this power with exotic dynamic languages such as FORTH,  Scheme and TCL,   closures are becoming a feature of  mainstream [...]]]></description>
			<content:encoded><![CDATA[<p><img align=right title="time-machine" src="http://gen5.info/q/wp-content/uploads/2009/06/time-machine.jpg" alt="time-machine" width="175" height="285" /></p>
<h2>Introduction</h2>
<p>In most written media,  time progresses as you move down a page:  mainstream computing languages are no different.   <em>Anonymous Closures</em> are a language mechanism that,  effectively,  lets programmers create new control structures.  Although people associate this power with exotic dynamic languages such as FORTH,  Scheme and TCL,   closures are becoming a feature of  mainstream languages such as Javascript and PHP (and even static languages such as C#.)</p>
<p>Although this article talks about issues that you&#8217;ll encounter in languages such as C# and Scheme,  I&#8217;m going to focus on Javascript written on top of the popular JQuery library:  I do that because JQuery is a great toolkit that lets programmers and designers of all skill levels do a lot by writing very little code.  Because JQuery smooths away low-level details,  it lets us clearly illustrate little weirdnesses of its programming model. Although things often work &#8220;just right&#8221; on the small scale,  little strange things snowball in larger programs &#8212; a careful look atthe  little problems is a key step towards the avoidance and mitigation of problems in big RIA projects.</p>
<p><span id="more-280"></span></p>
<h2>Time In Programming Languages</h2>
<p>Absent control structures,  execution proceeds from top to bottom in a computer program,  consider:</p>
<pre>01 document.write('Hello');
02 document.write(' ');
03 document.write('World!');</pre>
<p>Today&#8217;s languages are based on structured programming,  which encourages to use a limited number of control structures,  such as conditional expressions</p>
<pre>04 if(happy=true) {
05    document.write('Hello');
06 } else {
07    document.write('Goodbye Cruel');
08 }
09
10 document.write('  ');
11 document.write('World!');</pre>
<p>and loops</p>
<pre>12 var sum=0;
13 for(i=0;i&lt;x.length;i++) {
14   sum += x[i];
15 }</pre>
<p>With GOTO expunged from the programming canon,   execution proceeds from top to down,   except for a limited number of  control structures that let us return to the beginning or jump to the end of a block.  It&#8217;s a simple and intuitive model that we don&#8217;t often think about,  but it&#8217;s easy to write code that breaks this model when programming with closures.</p>
<h2>Emulating Foreach() in Javascript with Closures</h2>
<p>Popular languages such as PHP and C# have a <em>foreach()</em> statement that loops over the elements of a collection without the need to keep track of a counter variable.  Popular Javascript frameworks such as JQuery and Dojo implement <em>foreach</em> functions;  with the magic of closures,  we can get an effect similar to a built-in <em>foreach</em> construct.  For instance,  in JQuery,  we can write</p>
<pre>16 var sum=0;
17 $.each(x,function(i,val) {
18    sum += arg;
19 });</pre>
<p>In this case,  the second argument of the <em>$.each</em> (<a href="http://docs.jquery.com/Utilities/jQuery.each">JQuery.each</a>) function is a anonymous function.  The special property it has,  as a closure,  is that the anonymous function has access to variables in the enclosing scope,  namely<em> sum</em>.  This allows the code in 16-19 to look and work a lot like the code in 12-15,  despite the fact that line 18 is in a different function than line 16.</p>
<p>As an aside,  this kind of higher-order function is often simple to implement;  although the real<em> $.each(</em>) function is capable of iterating over a wide variety of types (thus more complex),  a function that can iterate over arrays is as simple as</p>
<pre>20 function foreachArrayElement(arr,loopBody) {
21    for(i=0;i&lt;x.length;i++) {
22       loopBody(i,x[i])
23    }
24 }</pre>
<h2>Breaking The Conventions of Time</h2>
<p>Although you&#8217;ve got other choices,  closures are  a popular and concise way to write callbacks for aysnchronous communication.  Suppose that we want to GET a packet of JSON data from a server and update a user inteface.  In JQuery we could write:</p>
<pre>25 $.get("JsonService", {}, function(data, textStatus) {
26     var obj=JSON.parse(data);
27     someUIElement.update(obj);
28  });
29
30 ... do more stuff ...</pre>
<p>Note that time isn&#8217;t progressing downward in this script anymore.  We got from line 25 directly to line 30.  The code between 26-28 only executes when data gets back from the server.  In this case,  this behavior is caused by the asynchronous nature of <em>XMLHttpRequest</em>,  for which <em>$.get()</em> is  wrapper.  Similar behavior can be had by attaching an event handler to a DOM object,  or even by adding a function reference to an object or the global scope,  causing the anonymous function to execute when some other function,  defined elsewhere,  executes.</p>
<h2>&#8220;Race Conditions&#8221; In Asynchronous Communication</h2>
<p>Although it&#8217;s not wrong to break the conventions of time,  doing so risks the introduction of tricky and subtle errors.  Suppose we&#8217;re building an AJAX application where we&#8217;d like to cache an object,  retrieving the object only if we don&#8217;t have a copy in cache.  One obvious approach is to write</p>
<pre>31 if (cachedCopy==undefined) {
32  $.get("DataService",{},function(data,textStatus) {
33       cachedCopy=data;
34       updateUIOne(data);
35   }
36 } else {
37   updateUIOne(cachedCopy);
38 }
39
40 updateUITwo();</pre>
<p><em>UpdateUIOne(data)</em> populates the user interface with the data.  <em>UpdateUITwo()</em> makes some other change to the user interface.</p>
<p>Unfortunately,  this code has a potential bug that&#8217;s hidden by the conventions of time.  When data is in the cache,  line 37 executes before line 40,  so that <em>updateUIOne(data</em>) is called before <em>updateUITwo()</em>.   When data is not in the cache,  line 40 executes before 33 (communication callbacks don&#8217;t run in Javascript until the code being run returns to the browser.)  It&#8217;s all fine if the order in which you run <em>updateUIOne</em> and <em>updateUITwo</em> doesn&#8217;t matter &#8212; and it&#8217;s a disaster if it does&#8230;  This kind of code does one thing sometimes and does another thing other times:  code of this type is difficult to test,  and leads to the kind of bug that drives people to drink.</p>
<p>The real answer to these problems is to take a systematic approach to asynchronous communication:  any strategy based on band-aids that work here or these is going will eventally break down under the weight of growing requirements.  That said,  I&#8217;ll offer a few strategies for patching this kind of problem:</p>
<ol>
<li>If we could move <em>updateUITwo() </em>from line 40 to before line 31,  <em>updateUITwo()</em> and <em>updateUIOne(</em>) could be run in a consistent order.</li>
<li>Modifying <em>updateUIOne(data)</em> to call <em>updateUITwo()</em> after it completes also results in a consistent order</li>
<li>We can schedule <em>UpdateUIOne</em> to run AFTER the executing code returns to the browser,  by replacing line 34 with</li>
</ol>
<pre>41    setTimeout(function() { updateUIOne(data) },1);</pre>
<h2>Structural Instability</h2>
<p>Let&#8217;s consider another example where the conventions of time are treacherous:  suppose we need to retrieve three chunks of data from the server</p>
<pre>42 $.get("Chunk1Server",{},function(data1,textStatus1) {
43   UpdateUIOne(data1);
44   $.get("Chunk2Server",{},function(data2,textStatus2) {
45       UpdateUITwo(data2);
46        $.get("Chunk3Server",{},function(data3,textStatus3) {
47            UpdateUIThree(data3);
48       });
49    });
50 });</pre>
<p>Note that this specific chunk of code executes exactly the way that it looks.  Although there are some gaps,  execution proceeds progressively from line 42 to 47.  The &#8220;nested closure&#8221; idiom is common in Javascript code,   probably because it looks a lot the synchronous code that does the same job,  but it&#8217;s treacherous:  a tiny change in the code can break the conventions of time,  causing strange things to happen.  This property is called structural instability.</p>
<p>For example,  the above code might return directly to the browser,   eliminating the possibility of the &#8220;race conditions&#8221; seen in the last section. If we add the following line:</p>
<pre>51 UpdateUIFour();</pre>
<p>we&#8217;ll find that <em>UpdateUIFour()</em> runs ~before~ the other other functions.  This isn&#8217;t bad behavior if we expect it,  but could have spooky effects if we don&#8217;t.  This example is trivial,  but similar mistakes can be made in any of the closures,  resulting in errors that can be quite baffling.</p>
<p>The structural instability of nested closures pushes complex AJAX applications towards other styles of coding,  such as a state-machine organization.</p>
<h2>Order Of Arguments</h2>
<p>This is small compared to the other issues,  but the order of arguments of callback functions can add to the the confusions around the time:  The <em>$.get()</em> function provides a good example,  since it support four parameters:</p>
<pre>51 $.get(url,parameters,callback,type);</pre>
<p>all of the parameters,  except for the url,  are optional.   It&#8217;s generally good to put less used optional parameters towards the right,  but placing the type declaration after the callback disturbs the flow of time and hurts readability.  If you choose to have the return data parsed as JSON format,</p>
<pre>52 $.get(targetUrl,{},function(data,textStatus) {
53    ... handler code ...
54 },"json");</pre>
<p>you&#8217;ll see that the type specification occurs after the callback.  This,  by itself,  adds a small amount of confusion,  but when you&#8217;ve got multiple nested closures or if you were computing the values defined after the callback,  code becomes immediately difficult to understand.</p>
<h2>Event Handlers And &#8220;COMEFROM&#8221;</h2>
<p>In 1973 R. Lawrence Clark kiddingly introduced a COMEFROM statement in response to Edgser Dijkstra&#8217;s famous &#8220;GO TO Considered Harmful&#8221;,  from <a href="http://en.wikipedia.org/wiki/COMEFROM">the associated Wikipedia Article</a>,  I take an example of a program in a hypothetical BASIC dialect that uses COMEFROM:</p>
<pre class="source-qbasic"><span class="nu0">55</span> COMEFROM <span class="nu0">58</span>
<span class="nu0">56 </span><span class="kw3">INPUT</span> <span class="st0">"WHAT IS YOUR NAME? "</span>; A$
<span class="nu0">57 </span><span class="kw3">PRINT</span> <span class="st0">"HELLO, "</span>; A$
<span class="nu0">58 </span><span class="co2">REM
</span></pre>
<p><span class="co2">COMEFROM is a bit disturbing because it involves an &#8220;action at a distance:&#8221;  line 55 modifies the behavior of line 58.  A person looking a line 58 in isolation would have a hard time understanding what happens in the program when execution reaches line 58.</span></p>
<p><span class="co2">The use of event handlers,  both built in and custom,  has an effect similar to COMEFROM.  Consder the common example<br />
</span></p>
<pre><span class="co2">59 $("#activeButton").click(function() {
60    ... handle button click...
61 }</span></pre>
<p><span class="co2">Once more,  the code at line 60 will execute after the code that follows line 61.  Line 59 modifies the behavior of a built-in UI element,  which might be defined like</span></p>
<pre><span class="co2">62 &lt;input type="button" id="activeButton" value="Button X"&gt;
</span></pre>
<p><span class="co2">Looking at line 62 alone,  it&#8217;s impossible to tell what what happens when you click on the button;  an &#8220;onClick&#8221; handler in line 62 would be more immediately obvious in function.  That said,  events are a proven model for GUI programming that introduces a useful decoupling between the parts of a system &#8212; a looser coupling that lets us build bigger systems.  In the context of JQuery,  it&#8217;s great to be able to write something like</span></p>
<pre><span class="co2">63 &lt;div class="SpecialArea"&gt;... content ...&lt;/div&gt;</span></pre>
<p><span class="co2">Javascript code can then use the $() function to attach styles,  event handlers and to manipulate DOM elements inside the .SpecialArea to give the area specific behaviors and appearance.  This lets a developer provide a powerful but easy-to-use abstraction to a designer:   adding a single class specification lets us reuse tens of CSS specifications and several event handlers.   This is a big win,  but we can&#8217;t forget the hidden COMEFROM that&#8217;s implied.<br />
</span></p>
<p><span class="co2">Events are dynamically added and removed,  even in static languages such as Java and C#.  Although this dynamism adds flexibility,  it comes at a cost.  IDEs such as Eclipse and Visual Studio can do a great job of helping programmers understand static method calls:  for instance,  you can click on the name of a method and see a list of places where this method is called.  Because events aren&#8217;t amenable to static analysis,  inappropriate use (or even appropriate use) of events impair some of the tools we have for understanding programs.<br />
</span></p>
<p><span class="co2">Events are a great tool,  but programmers need to understand the weirdness that underlies them.  Used deliberately,  events can provide a concise and scalable way to move information and direct control in an application.  Poorly used events can cause software to degenerate to &#8220;spaghetti code&#8221;.</span></p>
<h2><span class="co2">Conclusion</span></h2>
<p><span class="co2">Closures are a powerful and concise way to express your intentions to a computer:  however,  closures break some of the intuitive assumptions that people use to understand software &#8212; specifically,  the idea that time moves downward through the execution of a procedure.  This leads to a kind of <em>structural instability</em>,   where software that&#8217;s perfectly simple and clear at a simple level can suddenly get much harder to understand when several complications converge.  This article uses JQuery-Javascript as an example not because JQuery is bad,  but because it&#8217;s good:   it&#8217;s a tool that helps beginning (and advanced) programmers accomplish a lot with little code.  Yet,  as we build increasingly complex applications,  we need a clear understand of the big and little weirdnesses of RIA programming.<br />
</span></p>
<p><span class="co2"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2009/06/23/closures-javascript-and-the-arrow-of-time/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Carpictures.cc,  My First Web 3.0 Site</title>
		<link>http://gen5.info/q/2009/04/01/carpicturescc-my-first-web-30-site/</link>
		<comments>http://gen5.info/q/2009/04/01/carpicturescc-my-first-web-30-site/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 02:23:08 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[Semantic Web]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=268</guid>
		<description><![CDATA[I haven&#8217;t blogged much in the last month because I&#8217;ve been busy. I&#8217;ve got a day job, and I&#8217;m a parent, and I&#8217;ve also been working on a new site: Creative Commons Car Pictures.  What you see on the surface of &#8220;Car Pictures&#8221; might be familiar,  but what&#8217;s under the surface is something you&#8217;ve probably [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t blogged much in the last month because I&#8217;ve been busy.  I&#8217;ve got a day job,  and I&#8217;m a parent,  and I&#8217;ve also been working on a new site:  <a href="http://carpictures.cc/cars/photo/">Creative Commons Car Pictures</a>.  What you see on the surface of &#8220;Car Pictures&#8221; might be familiar,  but what&#8217;s under the surface is something you&#8217;ve probably never seen before:</p>
<p><img class="alignnone size-full wp-image-269" title="carpicturesfrontpage" src="http://gen5.info/q/wp-content/uploads/2009/04/carpicturesfrontpage.png" alt="carpicturesfrontpage" width="500" height="300" /></p>
<p>A collection of car pictures under a Creative Commons license,  it was built from a taxonomy that was constructed from <a href="http://dbpedia.org/About">Dbpedia</a> and <a href="http://freebase.com/">Freebase</a>.  My editor and I then used a scalable process to clean up the taxonomy,  find matching images and enrich image metadata.  As you can imagine,  this is a process that can be applied to other problem domains:  we&#8217;ve tested some of the methodology on our site <a href="http://animalphotos.info/a/">Animal Photos!</a> but this is the first site designed from start to finish based on the new technology.</p>
<p><a href="http://carpictures.cc/cars/photo/">Car Pictures</a> was made possible by data sets available on the semantic web,  and it&#8217;s soon about to export data via the semantic web.  We&#8217;re currently talking with people about exporting our content in a machine-readable <a href="http://linkeddata.org/">linked data</a> format &#8212; in our future plans,  this will enable a form of semantic search that will revolutionize multimedia search:  rather than searching for inprecise keywords,  it will become possible to look up pictures,  video and documents about named entities found in systems such as Freebase,  Wikipedia,  WordNet,  Cyc and OpenCalais.</p>
<p>In the next few days we&#8217;re going to watch carefully how Car Pictures interacts with users and with web crawlers.  Then we&#8217;ll be adding content,  community features,  and a linked data interface.   In the meantime,  we&#8217;re planning to build something at least a hundred times bigger.</p>
<p>Quite literally, thousands of people have contributed to Car Pictures,  but I&#8217;d like to particularly thank <a href="http://danbri.org/">Dan Brickley</a>,  who&#8217;s been helpful in the process of interpreting Dbpedia with his <a href="http://arc.semsol.org/">ARC2</a> RDF tools,  and <a href="http://twitter.com/kidehen">Kingsley Idehen</a>,  who&#8217;s really helped me sharpen my vision of what the semantic web can be.</p>
<p>Anyway,  I&#8217;d love any feedback that you can give me about Car Pictures and any help I can get in spreading the word about it.  If you&#8217;re interested in making  similar site about some other subject,  please contact me:  it&#8217;s quite possible that we can help.</p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2009/04/01/carpicturescc-my-first-web-30-site/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nested Sets, PHP, Verb Objects and Noun Objects</title>
		<link>http://gen5.info/q/2008/11/04/nested-sets-php-verb-objects-and-noun-objects/</link>
		<comments>http://gen5.info/q/2008/11/04/nested-sets-php-verb-objects-and-noun-objects/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:06:29 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[Th]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=101</guid>
		<description><![CDATA[Introduction Controversy persists to this day about the relative merits of dynamic languages such as PHP and Python versus static languages such as C# and Java.  We&#8217;re finding more and more that the difference isn&#8217;t so much about static or dynamic typing,  but more about the cultures of different languages.   In this article,  I discuss [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p><a href="http://blog.dhananjaynene.com/2008/09/commentary-on-python-from-a-java-programming-perspective/">Controversy persists to this day</a> about the relative merits of dynamic languages such as PHP and Python versus static languages such as C# and Java.  We&#8217;re finding more and more that the difference isn&#8217;t so much about static or dynamic typing,  but more about the cultures of different languages.   In this article,  I discuss an efficient representations of SQL trees in a database,  an algorithm for creating that representation,  and a PHP implementation.  The PHP implementations uses objects in a way foreign to many developers:  rather than using objects to represent nouns (data),  it uses a class to represent a verb (an algorithm.)  I make the case that programmers shouldn&#8217;t feel compelled to create new classes to represent every data item:  that verb objects often provide the right level of abstraction for many tasks.</p>
<h2>The Presenting Problem</h2>
<p>Lately I&#8217;ve been <a href="http://animalphotos.info/a/">collecting pictures of animals</a>,  and decided that incorporating the taxonomic database from <a href="http://www.itis.gov/">ITIS</a> would be a big help.  I&#8217;m interested in asking questions like &#8220;What are all the species underneath the <a href="http://en.wikipedia.org/wiki/Tapir">Tapiridae</a> family?&#8221;  The ITIS database uses the <em>adjacency list</em> representation,  where each row contains a column that references the primary key of a parent row.  Algorithms for the adjacency list are well known,  but are awkward to implement in SQL since it takes multiple SQL statements to traverse a tree.<span id="more-101"></span></p>
<p><em>Nested sets</em> are an alternative representation that makes it simple to write fast queries on trees.  Like the parts explosion diagram below,  components of the hierarchy are represented with contiguous numbers (parts 1-3 form one end piece of the steering knuckle.)</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/09/steering-knuckle.png"><img class="alignnone size-full wp-image-103" title="steering-knuckle" src="http://gen5.info/q/wp-content/uploads/2008/09/steering-knuckle.png" alt="" width="439" height="416" /></a></p>
<p>This article discusses the adjacency list and nested set models and presents a simple algorithm for converting an adjacency list into nested sets.</p>
<h2>Adjacency lists</h2>
<p>A common representation of a tree in a relational database is like this:</p>
<pre>[01] create table obviousTree (
[02]   id varchar(255),
[03]   parent varchar(255),
[04]   primary key(id),
[05]   foreign key(parent) references tree(id)
[06] )</pre>
<p>The <em>parent</em> column is allowed to be <em>null</em>,  so the root of the tree has a <em>null</em> parent.  A typical tree in this representation might look like</p>
<pre>[07] sql&gt; SELECT * FROM obviousTree;
[08]    +--------------+
[09]    | id  | parent |
[10]    |-----|--------|
[11]    | 'a' |  null  |
[12]    | 'b' |  'a'   |
[13]    | 'c' |  'a'   |
[14]    | 'd' |  'b'   |
[15]    | 'e' |  'b'   |
[16]    | 'f' |  'b'   |
[17]    +--------------+</pre>
<p>It&#8217;s simple in this representatation to find out what the parent of a node is,</p>
<pre>[18] SELECT parent FROM obviousTree WHERE id=@Child</pre>
<p>or to find the direct children of a node,</p>
<pre>[19] SELECT id FROM obviousTree WHERE parent=@Parent</pre>
<p>It&#8217;s not possible,  however,  to write a pure SQL statement that traverses all of the descendants of a node (at least not in standard SQL.)   You need to either write a stored procedure or write a program in a language like C# or PHP to implements a breadth-first or depth-first traversal of the tree.  This isn&#8217;t conceptually hard,  but it&#8217;s inefficient and doesn&#8217;t take full advantage of the querying power of SQL.</p>
<h2>Nested Sets</h2>
<p>Joe Celko has promoted the Nested Set representation of trees in several of his <a href="http://www.amazon.com/gp/product/1558609202?ie=UTF8&amp;tag=honeymediasys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1558609202">books</a>.  In the nested set representation,  we represent the position of each node in the tree with two numbers:  the <em>left</em> value and the <em>right</em> value.  We&#8217;ll call them <em>lft</em> and <em>rgt</em> in our code,  since <em>LEFT</em> and <em>RIGHT</em> are reserved words in SQL.</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/09/nestedset.png"><img class="alignnone size-full wp-image-102" title="nestedset" src="http://gen5.info/q/wp-content/uploads/2008/09/nestedset.png" alt="" width="472" height="313" /></a></p>
<p>The left and right values of a parent node enclose the left and right values of the children,  so it&#8217;s easy to ask for the the descendants of a node</p>
<pre>[20] SELECT * FROM fastTree WHERE
[21]    lft&gt;@AncestorLft
[22]    AND lft&lt;@AncestorRgt</pre>
<p>to count the children</p>
<pre>[23] SELECT (rgt-lft-1)/2 FROM fastTree WHERE lft=@AncestorLeft</pre>
<p>or to find all the ancestors of a node</p>
<pre>[24] SELECT * FROM fastTree WHERE
[25]    lft&lt;@DescendentLft
[26]    AND rgt&gt;@DescendentRgt</pre>
<p>Granted,  update operations are slower and more complex in the nested set representation,  but for my application,  where I&#8217;m accessing a nearly 500,000-node tree that never changes,  nested sets are the clear choice.</p>
<h2>The Conversion Algorithm in PHP</h2>
<p>Looking at the tree above,  you can see a straightforward algorithm for creating the nested set representation.  We traverse the tree depth-first,  keeping a counter,  which we&#8217;ll call <em>cnt</em> as we go &#8212; it works a lot like a thumb operated tally counter:</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/09/200handtallycounterchrome.jpg"><img class="alignnone size-full wp-image-104" title="200handtallycounterchrome" src="http://gen5.info/q/wp-content/uploads/2008/09/200handtallycounterchrome.jpg" alt="" width="200" height="229" /></a></p>
<p>When we first encounter a node (going down),  we write <em>cnt</em> into the <em>lft</em> field of that node,  then we increment <em>cnt</em>.  When we encounter it again (going up),  we write cnt into the rgt field of the node an increment <em>cnt</em>.</p>
<p>Joe Celko makes a good case for implementing mutating operations on nested sets in stored procedures.  (see his book on <a href="http://www.amazon.com/gp/product/1558609202?ie=UTF8&amp;tag=honeymediasys-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1558609202">Trees and Hiearchies and SQL)</a> I think he&#8217;s particularly right when it comes to adding,  removing and moving nodes,  where the operation requires several statements that should be done in a transaction.  Transactional integrity is less important,  however,  in a one-time import procedure which is done in a batch;  although Mysql 5.0 (which I&#8217;m using) supports stored procedures,  it&#8217;s got less of a culture of stored procedure use than other databases,  so I felt comfortable writing the conversion script in PHP.   This script converted a tree with 477,797 nodes in less than a minute,  so performance was adequate.</p>
<p>I&#8217;m going to store the nested set in a table that looks like</p>
<pre>[27] create table fastTree (
[28]    lft integer not null,
[29]    rgt integer not null,
[30]    id varchar(255),
[31]    primary key(lft),
[32]    unique(rgt),
[33]    unique(id)
[34] )</pre>
<p>I include <em>&#8220;_Config.php&#8221;</em>,  which initializes the database connection,  $conn,  using the third-party ADODB library.  After that  I retrieve the list of parent-child relationships from the database:</p>
<pre>[35] require_once("./_Config.php");
[36] $rawLink=$conn-&gt;Execute("SELECT id,parent FROM obviousTree");
[37]
[38] $link=array();
[39] foreach($rawLink as $k=&gt;$row) {
[40]    $parent=$row["parent"];
[41]    $child=$row["id"];
[42]    if (!array_key_exists($parent,$link)) {
[43]       $link[$parent]=array();
[44]    }
[45]    $link[$parent][]=$child;
[46] }</pre>
<p>Note that we&#8217;re building a complete copy of the adjacency list in RAM:  the value of <em>$link[$parent]</em> is an array that contains the id&#8217;s of all the children of the <em>$parent</em>.  I&#8217;m doing this for two reasons:  (i) the adjacency list is small enough to fit in RAM,  and (ii) minimize the cost of I/O:  if you expect to access all rows in a table,  it&#8217;s a lot cheaper to do a full table scan than it is to do hundreds of thousands of index queries.</p>
<p>Next we define an object,  <em>TreeTransformer</em>,  that represents the algorithm.  In particular,  it provides a scope for the <em>$cnt</em> variable,  which has a lifespan apart from the recursive function that represents the tree:</p>
<pre>[47] class TreeTransformer {
[48]   function __construct($link) {
[49]     $this-&gt;count=1;
[50]     $this-&gt;link=$link;
[51]   }
[52]
[53]   function traverse($id) {
[54]     $lft=$this-&gt;count;
[55]     $this-&gt;count++;
[56]
[57]     $kid=$this-&gt;getChildren($id);
[58]     if ($kid) {
[59]       foreach($kid as $c) {
[60]         $this-&gt;traverse($c);
[61]      }
[62]     }
[63]     $rgt=$this-&gt;count;
[64]     $this-&gt;count++;
[65]     $this-&gt;write($lft,$rgt,$id);
[66]   }</pre>
<p><em>Traverse()</em> is the core of the algorithm:  it works in three phases:  (i) it assigns the <em>$lft</em> value,   (ii) it loops over all children,  calling itself recursively for each child,  and (iii) assigns the <em>$rgt</em> value and writes an output record.  The scope of <em>$this-&gt;count</em> is exactly the scope we want for the variable,  and saves the need of passing <em>$count</em> back and forth between different levels of <em>traverse()</em>.  Traverse calls two functions:</p>
<pre>[67]   function getChildren($id) {
[68]      return $this-&gt;link[$id];
[69]   }
[70]
[71]   function write($lft,$rgt,$id) {
[72]     global $conn;
[74]     $conn-&gt;Execute("
[75]        INSERT INTO fastTree
[76]           (lft,rgt,id)
[77]        VALUES
[78]           (?,?,?)
[79]     ",array($lft,$rgt,$id));
[80]   }
[81] }</pre>
<h2>Noun Objects or Verb Objects?</h2>
<p>This script uses a single class:  instead of using classes to represent data,  it uses a class to represent an algorithm,  a verb.  Rather than create objects to create data structures,  I <em>reuse</em> data structures that come with PHP.</p>
<p>This is an extensible design.</p>
<p><em>TreeTransformer</em> provides two extension points:  <em>getChildren()</em> and <em>write()</em>.  Most of the objections a person could have to this implementation could be addressed here:  for instance,  <em>getChildren()</em> could be modified to support a different data structure for the adjacency list,  or even to operate in a streaming mode that does an SQL query for each node.  <em>write()</em>,  on the other hand,  could be modified to avoid the limitations of the global <em>$conn</em>,  or to change the output format.  If <em>TreeTransformer</em> were to evolve in the future,  it would make sense to push <em>traverse()</em> up to an <em>AbstractTreeWriter </em>and define <em>getChildren()</em>,  <em>write()</em> and <em>$this-&gt;link</em> in a subclass.</p>
<p>Noun objects (that represent things) can be useful,  but a compulsion to create noun objects can lead to an entanglement between algorithms and data structures,   poor code reuse,  and a proliferation of artifacts that makes for a high defect count and expensive maintainance.  Even if were using noun objects in this program,  it still makes sense to implement this algorithm as a verb object:  by creating interfaces for the adjacancy list and for the output,  I could keep the algorithm reusable while keeping the noun objects simple.</p>
<h2>Conclusion: Write Less Code</h2>
<p>Many of the fashionable languages that people claim improve productivity,  such as Lisp,  Python and Ruby,  put powerful data structures at the programmer fingertips:  they encourage you to reuse data structures provided by the language rather than to create a new object in response to every situation.  Functional languages such as CAML and F# show the power of programming by composition,  enabled by the use of standard data structures (and interfaces.)</p>
<p>What&#8217;s really exciting is that these methods are becoming increasingly available and popular in mainstream languages,  such as C# and PHP.</p>
<p>Generic classes and methods,  as available in Java and C#,  let you have both reusable data structures <em>and</em> type safety.  Although there are trade offs,  you seriously consider using a <em>List&lt;Thing&gt;</em> rather than creating a <em>CollectionOfThings</em>.   Yes,  a collection of things that you create can present <strong>exactly</strong> the interface you need,  however,  without a lot of care,  you might find that another member of your team wrote an incompatible <em>JohnsCollectionOfThings</em>,  and you end up writing more glue code because you&#8217;re interfacing with a third party vendor that uses a <em>MagicBoxFullOfThings</em> instead.</p>
<p>Although there advantages to encapsulation,  and advantages to creating noun objects (sometimes they do provide the right places for extension points,)  programmers need to be careful when they create new classes.  Every class you write,  every method,  and every line of code is like a new puppy:  you not only need to write it,  but you&#8217;ll need to maintain it in the future.</p>
<p><small>Image sources: Parts Explosion Diagram of Hummer Steering Knuckle from <a href="http://www.chemaxx.com/hummmer_failure_analysis.htm">CHEMAXX</a>,  Handheld Tally Counter from <a href="http://www.difflearn.com/prodinfo.asp?number=DRT+188">Different Roads To Learning.</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/11/04/nested-sets-php-verb-objects-and-noun-objects/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Converting A Synchronous Program Into An Asynchronous Program</title>
		<link>http://gen5.info/q/2008/08/13/converting-a-synchronous-program-into-an-asynchronous-program/</link>
		<comments>http://gen5.info/q/2008/08/13/converting-a-synchronous-program-into-an-asynchronous-program/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:58:48 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=49</guid>
		<description><![CDATA[Introduction One of the challenges in writing programs in today&#8217;s RIA environments  (Javascript, Flex, Silverlight and GWT)  is expressing the flow of control between multiple asynchronous XHR calls.  A &#8220;one-click-one-XHR&#8221; policy is often best,  but you don&#8217;t always have control over your client-server protocols.  A program that&#8217;s simple to read as a synchronous program can [...]]]></description>
			<content:encoded><![CDATA[<h2 style="text-align: left;">Introduction</h2>
<p style="text-align: left;">One of the challenges in writing programs in today&#8217;s RIA environments  (Javascript, Flex, Silverlight and GWT)  is expressing the flow of control between multiple asynchronous XHR calls.  A &#8220;<a href="http://gen5.info/q/2008/03/27/managing-concurrency-with-asynchronous-http-requests/">one-click-one-XHR</a>&#8221; policy is often best,  but you don&#8217;t always have control over your client-server protocols.  A program that&#8217;s simple to read as a synchronous program can become a tangle of subroutines when it&#8217;s broken up into a number of callback functions.  One answer is <em>program translation</em>:  to manually or automatically convert a synchronous program into an asynchronous program:  starting from the theoretical foundation,  this article talks about a few ways of doing that.</p>
<p style="text-align: left;"><a href="http://www.thibaudlopez.net/">Thibaud Lopez Schneider</a> sent me a link to an interesting paper he wrote,  titled &#8220;<a href="http://www.thibaudlopez.net/xhr/Writing%20effective%20asynchronous%20XmlHttpRequests.pdf">Writing Effective Asynchronous XmlHttpRequests</a>.&#8221;  He presents an informal proof that you can take a program that uses synchronous function calls and common control structures such as <em>if-else</em> and <em>do-while</em>,  and transform it a program that calls the functions asynchronously.  In simple language,  it gives a blueprint for implementing arbitrary control flow in code that uses asynchronous XmlHttpRequests.</p>
<p style="text-align: left;">In this article,  I work a simple example from Thibaud&#8217;s paper and talk about four software tools that automated the conversion of conventional control flows to asynchronous programming.  One tool,  the <a href="http://en.wikipedia.org/wiki/Windows_Workflow_Foundation">Windows Workflow Foundation,</a> lets us compose long-running applications out of a collection of asynchronous <em>Activity</em> objects.  Another two tools are<em> </em><a href="http://chumsley.org/jwacs/">jwacs</a> and <a href="http://www.neilmix.com/narrativejs/doc/">Narrative Javascript</a>,  open-source   translators that translated pseudo-blocking programs in a modified dialect of JavaScript into an asynchronous program in ordinary JavaScript that runs in your browser.</p>
<p style="text-align: left;"><span id="more-49"></span></p>
<p style="text-align: left;">
<h2 style="text-align: left;">A simple example: Sequential Execution</h2>
<p style="text-align: left;">I&#8217;m going to lift a simple example from <a href="http://www.thibaudlopez.net/xhr/Writing%20effective%20asynchronous%20XmlHttpRequests.pdf">Thibaud&#8217;s paper</a>,  the case of sequential execution.  Imagine that we want to write a function <em>f()</em>,  that follows the following logic</p>
<pre style="text-align: left;">[01] function f() {
[02]    ... pre-processing ...
[03]    result1=MakeRequest1(argument1);
[04]    ... think about result1 ...
[05]    result2=MakeRequest2(argument2);
[06]    ... think about result2 ...
[07]    result3=MakeRequest3(argument3);
[08]    ... think about result3 ...
[09]    return finalResult;
[10] }</pre>
<p style="text-align: left;">where functions of the form <em>MakeRequestN</em> are ordinary synchronous functions.  If,  however,  we were working in an environment like JavaScript,  GWT,  Flex,  or Silverlight,  server requests are asynchronous,  so we&#8217;ve only got functions like:</p>
<pre>[11] function BeginMakeRequestN(argument1, callbackFunction);</pre>
<p style="text-align: left;">It&#8217;s no longer possible to express a sequence of related requests as a single function,  instead we need to transform f() into a series of functions,  like so</p>
<pre style="text-align: left;">[12] function f(callbackFunction) {
[13]   ... pre-processing ...
[14]   BeginMakeRequest1(argument,f1);
[15] }
[16]
[17] function f1(result1) {
[18]    ... think about result1 ...
[19]    BeginMakeRequest2(argument2,f2);
[20] }
[21]
[22] function f2(result2) {
[23]    ... think about result2 ...
[24]    BeginMakeRequest3(argument3,f3);
[25] }
[26]
[27] function f3(result3) {
[28]   ... think about result 3 ...
[29]   callbackFunction(finalResult);
[30] }</pre>
<p style="text-align: left;">My example differs from the example of on page 19 of <a href="http://www.thibaudlopez.net/xhr/Writing%20effective%20asynchronous%20XmlHttpRequests.pdf">Thibaud&#8217;s paper</a> in a few ways&#8230;  In particular,  I&#8217;ve added the <em>callbackFunction</em> that <em>f()</em> uses to &#8220;return&#8221; a result to the program that calls it.  Here the <em>callbackFunction</em> lives in a scope that&#8217;s shared by all of the <em>fN</em> functions,  so it&#8217;s available in <em>f3</em>.  I&#8217;ve found that when you&#8217;re applying Thibuad&#8217;s kind of thinking,  it&#8217;s useful for <em>f()</em> to correspond to an object,   of which the <em>fN()</em> functions are methods. [<a href="http://gen5.info/q/2008/06/02/keeping-track-of-state-in-asynchronous-callbacks/">1</a>] [<a href="http://gen5.info/q/2008/04/18/asynchronous-functions/">2</a>] [<a href="http://gen5.info/q/2008/04/11/the-asynchronous-command-pattern/">3</a>]</p>
<p style="text-align: left;">Thibaud also works the implementation of <em>if-then-else</em>,  <em>switch</em>,  <em>for</em>,  <em>do-while</em>,  <em>parallel-do</em> and other common patterns &#8212; <a href="http://www.thibaudlopez.net/xhr/Writing%20effective%20asynchronous%20XmlHttpRequests.pdf">read his paper</a>!</p>
<h2 style="text-align: left;">What next?</h2>
<p>There are things missing from Thibaud&#8217;s current draft:  for instance,  he doesn&#8217;t consider how to implement exception handling in asynchronous applications,  although it&#8217;s <a href="http://gen5.info/q/2008/04/18/asynchronous-functions/">quite possible to do</a>.</p>
<p>Thinking about things systematically helps you do things by hand,  but it really comes into it&#8217;s own when we use systematic thinking to develop tools.  I can imagine two kinds of tools based on Thibaud&#8217;s ideas:</p>
<ol>
<li>Specialized languages for expressing asynchronous flows,  and</li>
<li>Compilers that transform synchronous programs to asynchronous programs</li>
</ol>
<h2>Windows Workflow Foundation</h2>
<p>Windows Workflow Foundation is an example of the first approach.</p>
<p>Although it&#8217;s not designed for use in asynchronous RIA&#8217;s,  Microsoft&#8217;s <a href="http://joeon.net/post/2008/02/Windows-Workflow-Foundation-Tutorial-Series.aspx">Windows Workflow Foundation </a>is an new approach to writing reactive programs.   Unfortunately,  like a lot of enterprise technologies,  WWF is surrounded by a lot of hype that obscures a number of worthwhile ideas:  the book <a href="http://www.amazon.com/gp/product/0321399838/103-7142849-0321425?ie=UTF8&amp;tag=honeymediasys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321399838">Essential Windows Workflow Foundation</a> by Shukla and Schmidt is a lucid explanation of the principles behind it.  It&#8217;s good reading even if you hate Microsoft and would never use a Microsoft product,  because it could inspire you to implement something similar in your favorite environment.  (I know someone who&#8217;s writing a webcrawler in PHP based on a similar approach)</p>
<p>What does it do?</p>
<p>In WWF,  you create an asynchronous program by composing a set of asynchronous <em>Activities</em>.  Ultimately your program is a tree of <em>Activity</em> objects that you can assemble any way you like,  but typically you&#8217;d build them with a XAML (XML) file that might look like</p>
<pre>[31] &lt;Interleave x:Name="i1"&gt;
[32]    &lt;Sequence x:Name="s1"&gt;
[33]       &lt;ReadLine x:Name="r1" /&gt;
[34]       &lt;WriteLine x:Name="w1"
[35]          Text="{wf:ActivityBind r1,path=Text}" /&gt;
[36]       &lt;ReadLine x:Name="r2" /&gt;
[37]       &lt;WriteLine x:Name="w2"
[38]          Text="{wf:ActivityBind r2,path=Text}" /&gt;
[39]    &lt;/Sequence&gt;
[40]    &lt;Sequence x:Name="s2"&gt;
[41]       &lt;ReadLine x:Name="r3" /&gt;
[42]       &lt;WriteLine x:Name="w3"
[43]          Text="{wf:ActivityBind r3,path=Text}" /&gt;
[44]       &lt;ReadLine x:Name="r4" /&gt;
[45]       &lt;WriteLine x:Name="w4"
[46]          Text="{wf:ActivityBind r4,path=Text}" /&gt;
[47]    &lt;/Sequence&gt;
[48] &lt;/Interleave&gt;</pre>
<p>(The above example is based on Listing 3.18 on Page 98 of Shukla and Schmidt,  with some namespace declarations removed for clarity)</p>
<p>This defines a flow of execution that looks like:</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/08/wwfdiagram.png"><img class="alignnone size-full wp-image-60" title="wwfdiagram" src="http://gen5.info/q/wp-content/uploads/2008/08/wwfdiagram.png" alt="" width="485" height="244" /></a></p>
<p>The <em>&lt;Interleave&gt;</em> activity causes two <em>&lt;Sequence&gt;</em> activities to run simultaneously.  Each <em>&lt;Sequence&gt;</em>,  in turn,  sequentially executes two alternating pairs of <em>&lt;ReadLine&gt;</em> and <em>&lt;WriteLine&gt;</em> activities.  Note that the attribute values that look like <em>{wf: ActivityBind r3,path=Text}</em> wire out the output of a <em>&lt;ReadLine&gt;</em> activity to the input of a <em>&lt;WriteLine&gt;</em> activity.</p>
<p>Note that <em>&lt;Interleave&gt;</em>,  <em>&lt;Sequence&gt;</em>,  <em>&lt;ReadLine&gt;</em> and <em>&lt;WriteLine&gt;</em> are all asynchronous activities defined by classes <em>Interleave</em>, <em>Sequence</em>, <em>ReadLine</em> And <em>WriteLine</em> that all implement <em>Activity</em>.   An activity can invoke other activities,  so it&#8217;s possible to create new control structures.  Activities can wait for things to happen in the outside world (such as a web request or an email message) by listening to a queue.   WWF also defines an elaborate model for error handling.</p>
<p>Although other uses are possible,   WWF is intended for the implementation of server applications implementations that implement workflows.  Imagine,  for instance,  a college applications system,  which must wait for a number of forms from the outside,  such as</p>
<ul>
<li>an application,</li>
<li>standardized test scores, and</li>
<li>letters of reccomendation</li>
</ul>
<p>and that needs to solicit internal input from</p>
<ul>
<li>an initial screening committee,</li>
<li>the faculty of individual departments,  and</li>
<li>the development office.</li>
</ul>
<p>The state of a workflow can be serialized to a database,   so the workflow can be something that takes place over a long time,  such as months or weeks &#8212; multiple instances of the workflow can exist at the same time.</p>
<p>WWF looks like a fun environment to program for,  but I don&#8217;t know if I&#8217;d trust it for a real business application.  Why?  I&#8217;ve been building this sort of application for years using relational databases,  I know that it&#8217;s possible to handle the maintenance situations that occur in real life with a relational representation:  both the little tweaks you need to make to a production system from time to time,  and the more major changes required when your process changes.  Systems based on object serialization,  such as WWF,   tend to have trouble when you need to change the definition of objects over time.</p>
<p>I can say,  however,  that the <a href="http://www.amazon.com/gp/product/0321399838/103-7142849-0321425?ie=UTF8&amp;tag=honeymediasys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321399838">Shukla and Schmidt</a> book is so clear that an ambitious programmer could understand enough of the ideas behind WWF to develop a similar framework that&#8217;s specialized for developing asynchronous RIAs in Javascript,  Java,  or C# pretty quickly.   Read it!</p>
<h2>Transforming Javascript and Other Languages</h2>
<p>Another line of attack on asynchronous programming is the creation of compilers and translators that transform a synchronous program into a synchronous program.  This is particularly popular in Javascript,  where open-source tools such as <a href="http://chumsley.org/jwacs/demos.html">jwacs</a> (Javascript With Advanced Continuation Syntax) let you write code like this:</p>
<pre>[49] function main() {
[50]    document.getElementById('contentDiv').innerHTML =
[51]      '&lt;pre&gt;'
[52]      + JwacsLib.fetchData('GET', 'dataRows.txt')
[53]      + '&lt;/pre&gt;';
[54] }</pre>
<p>Jwacs adds four new keywords to the Javascript language:  internally,  it applies transformations like the ones in the Thibaud paper.  Although it looks as if the call to <em>JwacsLib.fetchData</em> blocks,  in reality,  it splits the <em>main()</em> function into two halves,  executing the function by a form of cooperative multitasking.</p>
<p><a href="http://neilmix.com/narrativejs/doc/index.html">Narrative Javascript</a> is a similar open-source translator that adds -&gt;,  a &#8220;yielding&#8221; operator to Javascript.  This signals the translator to split the enclosing function,  and works for timer and UI event callbacks as well as XHR.  Therefore,  it&#8217;s possible to write a pseudo-blocking sleep() function like:</p>
<pre>[55] function sleep(millis) {
[56]    var notifier = new EventNotifier();
[57]    setTimeout(notifier, millis);
[58]    notifier.wait-&gt;();
[59] }</pre>
<p>Narrative Javascript doesn&#8217;t remember the special nature of the the sleep() function,  so you need to call it with the yielding operator too.  With it,  you can animate an element like so:</p>
<pre>[60] for (var i = 0; i &lt; frameCount - 1; i++) {
[61]    var nextValue = startValue + (jumpSize * i);
[62]    element.style[property] = nextValue + "px";
[63]    sleep-&gt;(frequency);
[64] }</pre>
<p>You can use the yielding operator to wait on user interface events as well.  If you first define</p>
<pre>[65] function waitForClick(element) {
[66]    var notifier = new EventNotifier();
[67]    element.onclick = notifier;
[68]    notifier.wait-&gt;();
[69] }</pre>
<p>you can call it with the yielding operator to wait for a button press</p>
<pre>[70] theButton.innerHTML = "go right";
[71] waitForClick-&gt;(theButton);
[72] theButton.innerHTML = "--&gt;";
[73] ... continue animation ...</pre>
<p>The <a href="http://rifers.org/wiki/display/RIFE/Web+continuations">RIFE Continuation Engine</a> implements something quite similar in Java,  but it translates at the bytecode level instead of at the source code level:  it aims to transform the server-side of web applications,  rather than the client,  by allowing the execution of a function to span two separate http requests.</p>
<h2>Conclusion</h2>
<p>It&#8217;s possible to systematically transform a function that&#8217;s written in terms of conventional control structures and synchronous function calls into a collection of functions that performs the same logic using asynchronous function calls.   A paper by <a href="http://www.thibaudlopez.net/">Thibaud Lopez Schneider</a> points the way,  and is immediately useful for RIA programmers that need to convert conventional control structures in their head into asynchronous code.</p>
<p>A longer-term strategy is to develop frameworks and languages that make it easier to express desired control flows for asynchronous program.  The Windows Workflow Foundation from Microsoft is a fascinating attempt to create a specialized language for assembling asynchronous programs from a collection of <em>Activity</em> objects.  <a href="http://chumsley.org/jwacs/demos.html">jwacs</a> and <a href="http://neilmix.com/narrativejs/doc/index.html">Narrative Javascript</a> are bold attempts to extend the Javascript language so that people can express asynchronous logic as pseudo-threaded programs.  The <a href="http://rifers.org/wiki/display/RIFE/Web+continuations">RIFE Continuation Engine</a> demonstrates that this kind of behavior can be implemented in more static languages such as Java and C#.  Although none of these tools are ready for production-quality RIA work,  they may lead to something useful in the next few years.</p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/08/13/converting-a-synchronous-program-into-an-asynchronous-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Multiton Design Pattern</title>
		<link>http://gen5.info/q/2008/07/25/the-multiton-design-pattern/</link>
		<comments>http://gen5.info/q/2008/07/25/the-multiton-design-pattern/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 16:04:05 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=41</guid>
		<description><![CDATA[Introduction Many people have independely discovered a new design pattern, the &#8220;Multiton&#8221;, which, like the &#8220;Singleton&#8221; is an initialization pattern in the style of the Design Patterns book. Like the Singleton, the Multiton provides a method that controls the construction of a class: instead of maintaining a single copy of an object in an address [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Many people have independely discovered a new design pattern,  the &#8220;Multiton&#8221;,  which,  like the &#8220;Singleton&#8221; is an initialization pattern in the style of the Design Patterns book.  Like the Singleton,  the Multiton provides a method that controls the construction of a class:  instead of maintaining a single copy of an object in an address space,  the Multiton maintains a Dictionary that maps keys to unique objects.</p>
<p>The Multiton pattern can be used in systems that store persistent data in a back-end store,  such as a relational databases.  The Multiton pattern can be used to maintain a set of objects are mapped to objects (rows) in a persistent store:  it applies obviously to object-relational mapping systems,  and is also useful in asynchronous RIA&#8217;s,  which need to keep track of user interface elements that are interested in information from the server.</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/07/multitondiagram.png"><img title="multitondiagram" src="http://gen5.info/q/wp-content/uploads/2008/07/multitondiagram.png" alt="" /></a></p>
<p>An alternate use case of Mulitons,  seen in the &#8220;<a href="http://en.wikipedia.org/wiki/PureMVC">Multicore</a>&#8221; version of the PureMVC framework,  is the extension of the Singleton pattern to support multiple instances of a system in a single address space.</p>
<p>As useful as the Multiton pattern is,  this article explains how Multitons use references in a way that doesn&#8217;t work well with conventional garbage collection.  Multitons are a great choice when the number of Multitons is small,  but they may leak memory unacceptablely when more than a few thousand are created.  Future posts will describe patterns,  such as the Captive Multiton,  that provide the same capabilities with more scalable memory management &#8212; subscribe to our <a href="http://feeds.feedburner.com/Generation5">RSS feed</a> to keep informed.</p>
<h2><span id="more-41"></span>Use of a Multiton in An Asynchronous Application</h2>
<p>In our last article on <a href="http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/">Model-View Separation in Asynchronous RIA&#8217;s</a>,   we used a Singleton object that represented an entire table in a relational database.  This object maintained a list of listerners that were interested in the contents of a table.  In this case,  the amount of information in the table was small,  and often used in the aggregate,   so retreiving a complete copy of the table was a reasonable level of granularity.  We could imagine a situation,  however,  where the number of records and size of the records is enough that we need to transfer records individually.  (This specific case is an outline of an implementation for Silverlight:  a GWT implementation would be similar &#8212; details specific to GWT are talked about in <a href="http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/">a previous post</a>.)</p>
<p>Imagine,  for instance,  a <em>BlogPosting</em> object,  which represents a post in a blog,  which in turn has an integer primary key.  The BlogPosting object is a multiton,  so you&#8217;d write</p>
<pre>[01] var posting=BlogPosting.GetInstance(postId);</pre>
<p>to get the instance of <em>BlogPosting</em> that corresponds to <em>postId</em>.  Client objects can&#8217;t really write something like</p>
<pre>[02] TitleField.Text=posting.Title</pre>
<p>because the operation of retrieving text from an the server is asynchronous,  and won&#8217;t return in time to return a value,  either on line [01] or [02].  More reasonably,  a <em>BlogPostingViewer</em> can register itself against a <em>BlogPosting</em> instance so it will be notified when information is available about the blog posting.</p>
<pre>[03] public class BlogPostingViewer: UserControl,IBlogPostingListener {
[04]     protected int PostId;
[05]
[06]     public BlogPostViewer(int postId) {
[07]        PostId=postId;
[08]        BlogPosting.GetInstance(postId).AddListener(this);
[09]     }
[10]
[11]     public void Dispose() {
[12]        BlogPosting.GetInstance(postId).RemoveListener(this);
[13]        super.Dispose();
[14]     }</pre>
<p>This example shows a pattern usable in a Silverlight applicaton,  unlike the GWT style in the <a href="http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/">model-view article</a>.  The <em>Dispose()</em> method will need to be called manually when the <em>BlogPostingViewer</em> is no longer needed,  since it will never be garbage collected so long as a reference to it inside the <em>BlogPosting</em> exists.  (This points to a general risk of memory leaks with Multitons that we&#8217;ll talk about later.)  This problem can be addre</p>
<p>The <em>BlogPostingViewer</em> goes on to implement the <em>IBlogPostingListener</em> interface,  updating the visual appearance of the user interface to reflect information from the UI:</p>
<pre>[15]     public void UpdatePosting(BlogPostingData d) {
[16]         if (d==null) {
[17]            ClearUserInterface();   // user-defined method blanks out UI
[18]            return
[19]         }
[20]         TitleField.Text=d.Title;
[21]         ...
[22]     }
}</pre>
<p>We assume that <em>BlogPostingData</em> represents the state of the <em>BlogPosting</em> at a moment in time,  distinct from the <em>BlogPosting</em>,  which represents the <em>BlogPosting</em> as a persistent object.  <em>BlogPostingData</em> might (roughly) correspond to the the columns of a relational table and look something like:</p>
<pre>[23] public class BlogPostingData {
[24]    public string Title { get; set;}
[25]    public Contributor Author { get; set; }
[26]    public string Body { get; set;}
[27]    public Category[] AssociatedCategories { get; set;}
[28]    ...
[29] }</pre>
<p>We could then add a <em>BlogPostingViewer</em> to the user interface and schedule it&#8217;s initialization by writing</p>
<pre>[30] var viewer=new BlogPostingViewer(PostId);
[31] OuterControl.Children.Add(viewer);
[32] BlogPosting.GetInstance(PostId).Fetch();</pre>
<p>Note that line [32] tells the <em>BlogPosting</em> instance to retreive a copy of the posting from the server (an instance of <em>BlogPostingData</em>) and call <em>UpdatePosting()</em> on all of the listeners.  Therefore,  there will be a time between line [30] and the time when the async call started on line [32] gets back when the <em>BlogPostingViewer</em> is empty (not initialized with <em>BlogPostingData</em>.)  Therfore,  the <em>BlogPostingViewer</em> must be designed so that nothing bad happens when it&#8217;s in that state:  it has to show something reasonable to user and not crash the app if the user clicks a button that isn&#8217;t ready yet.</p>
<p>(In a more developed application,  the <em>BlogPosting</em> could keep a cache of the latest <em>BlogPostingData</em>:  this could improve responsiveness by updating the <em>BlogPostingViewer</em> at the moment it registers,  or by doing a timestamp or checksum stamp against the server to reduce the bandwidth requirements of a <em>Fetch()</em>,  just watch out for the <a href="http://gen5.info/q/2008/04/21/once-asynchronous-always-asynchronous/">unintended consequences of multiple code paths</a>.)</p>
<h2>Implementing a Muliton</h2>
<p>Here&#8217;s an implementation of a Multiton in C# that&#8217;s not too different from the <a href="http://gen5.info/q/2008/04/21/once-asynchronous-always-asynchronous/">Java implementation from Wikipedia</a>.</p>
<pre>class BlogPosting {
    #region Initialization
    private static readonly Dictionary&lt;int,BlogPosting&gt; _Instances =
       new Dictionary&lt;int,BlogPosting&gt;();

    private BlogPosting(int key) {
        ... construct the object ...
    }

    public static BlogPosting GetInstance(int key) {
        lock(_Instances) {
            BlogPosting instance;
            if (_Instances.TryGetValue(key,out instance)) {
                return instance;
            }</pre>
<pre>            instance = new BlogPosting(key);
            _Instances.Add(key, instance);
            return instance;
        }
    }
    #endregion

    ... the rest of the class ...

}</pre>
<p>I&#8217;m pretty sure that a  version of this could be created in C# with slightly sweeter syntax that would look like</p>
<p>BlogPosting.Instance[postId]</p>
<p>but this doesn&#8217;t address the weak implementation of  static inheritence in many popular languages that requires us to cut-and-paste roughly 20 lines of code for each Multiton class,  rather than being able to reuse inheritence logic.  The Ruby Applications Library,  on the other hand,  contains a <a href="http://raa.ruby-lang.org/project/multiton/">Multiton</a> class that can be used to bolt Multiton behavior onto a class.  It would be interesting to see what could be accomplished with PHP 5.3&#8242;s <a href="http://www.colder.ch/news/08-24-2007/28/late-static-bindings-expl.html">late static binding</a>.</p>
<h2>Multitons And Memory Leaks</h2>
<p>Multitons,  unfortunately,  don&#8217;t interact well with garbage collectors.  Once a Multiton is created,  the static <em>_Instances</em> array will maintain a reference to every Multiton in the system,  so that Multitons won&#8217;t be collected,  even if  no active references exist.</p>
<p>You might think you could manually remove Multitons from the <em>_Instances</em> list,  but this won&#8217;t be entirely reliable.  In the case above,  each <em>BlogPosting </em>maintains a list of <em>IBlogPostingListeners</em>.  You could,  in principle,  scavenge <em>BlogPostings</em> with an empty set of listerners,  but that doesn&#8217;t stop a class from squirreling away a copy of a <em>BlogPosting</em> that will later conflict with a new BlogPosting that somebody creates by using <em>BlogPosting.GetInstance()</em>.</p>
<p><em>WeakReferences</em>,  as available in dot-Net and the full Java platform (as opposed to GWT),  are not an answer to this problem,  because references work backwards in this case:  a <em>BlogPosting</em> is collectable if (i) no references to the <em>BlogPosting</em> exist outside the <em>_Instances</em> array,  and (ii) a <em>BlogPosting </em>doesn&#8217;t hold references to other objects that may need to be updated in the future.</p>
<p>The severity of this issue depends on the number of Multitons created and the size of the Mulitons.  If the granularity of Multitons is coarse,  and you&#8217;ll only create five of them,  there&#8217;s no problem.  1000 Multitons that each consume 1 kilobyte will consume about a megabyte of RAM,  which is inconsequential for most applications these days.  However,  this amounts to a scaling issue:  an application that works fine when it creates 50 Mulitons could break down when it creates 50,000.</p>
<p>One answer to this problem is to restrict access to Muliton so that:  (i) references to Multitons can&#8217;t be saved by arbitrary objects and (ii) manages Multitons with a kind of reversed reference count,  so that Multitons are discared when they no longer hold useful informaton.  I call this a <em>Captive Multiton</em>,  and this will be the subject of our next exciting episode:  <a href="http://feeds.feedburner.com/Generation5">subscribe to our RSS feed </a>so you won&#8217;t miss it.</p>
<h2>More Information About Multitons</h2>
<p>So far as I can tell,  Multitons have been independently discovered by many developers in recent years.  I used Multitons (I called them &#8220;Parameterized Singleons&#8221;) in the manner above in a GWT application that I developed in summer 2007.  <a href="http://en.wikipedia.org/wiki/PureMVC">The PureMVC Framework uses Multitons</a> to allow multiple instances of the framework to exist in an address space.   A <a href="http://raa.ruby-lang.org/project/multiton/">reusable Multiton implementation</a> exists in Ruby.</p>
<h2>Conclusion</h2>
<p>The Muliton Pattern is an initialization pattern in the sense defined in the notorious &#8220;Design Patterns&#8221; Book.  Mulitons are like Singletons in that they use static methods to control access to a private constructor,  but instead of maintaining a single copy of an object in an address space,  a Multiton maintains a mapping from key values to objects.  A number of uses are emerging for mulitons:  (i) Multitons are useful when we want to use something like the Singleton pattern,  but support multiple named instances of a system in an an address space and (ii) Multitons can be a useful representation of an object in a persistent store,  such as a relational database.  Multitons,  however,  are not collected properly by conventional garbage collectors:  this is harmless for applications that create a small number of mulitons,  but poses a scaling problem when Multitons are used to represent a large number of objects of fine granularity &#8212; a future posting will introduce a Captive Multiton that solves this problem:  <a href="http://feeds.feedburner.com/Generation5">subscribe to our RSS feed</a> to follow this developing story.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f07%2f25%2fthe-multiton-design-pattern%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f07%2f25%2fthe-multiton-design-pattern%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/07/25/the-multiton-design-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Role Of The Model in Silverlight, GWT and Javascript</title>
		<link>http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/</link>
		<comments>http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 19:00:18 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=35</guid>
		<description><![CDATA[Introduction When people start developing RIA&#8217;s in environments such as Silverlight, GWT, Flex and plain JavaScript, they often write asynchronous communication callbacks in an unstructured manner, putting them wherever is convenient &#8212; often in an instance member of a user interface component (Silverlight and GWT) or in a closure or global function (JavaScript.) Several problems [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>When people start developing RIA&#8217;s in environments such as Silverlight,  GWT,  Flex and plain JavaScript,  they often write asynchronous communication callbacks in an unstructured manner,  putting them wherever is convenient &#8212; often in an instance member of a user interface component (Silverlight and GWT) or in a closure or global function (JavaScript.)</p>
<p>Several problems almost invariably occur as applications become more complex that force the development of an architecture that decouples communication event handlers from the user interface:  a straightforward solution is to create a model layer that&#8217;s responsible for notifying interested user interface components about data updates.</p>
<p>This article uses a simple example application to show how a first-generation approach to data updates breaks down and how introducing a model-view split makes for a reliable and maintainable application.</p>
<p>(This is one of a series of articles on RIA architecture:  subscribe to the <a href="http://feeds.feedburner.com/Generation5">Gen5 RSS feed</a> for future installments.)</p>
<h2>Example Application: Blogging And The Category Dropdown</h2>
<p>Imagine a blogging application that works like the WordPress blog used on this site.  This application consists of a number of forms,  one of which is used to write a new post:</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/07/demoapplication2.png"><img class="alignnone size-full wp-image-40" title="demoapplication2" src="http://gen5.info/q/wp-content/uploads/2008/07/demoapplication2.png" alt="" width="500" height="202" /></a></p>
<p>This form lets you fill out two text fields:  a title and the body of the post.  It also contains a dropdown list of categories,  and gives you the option of adding a new category.  Categories are represented (server-side) in a table in a relational database that looks like:</p>
<pre>[01] CREATE TABLE categoryList (
[02]     id                 integer primary key auto_increment,
[03]     name               varchar(255)
[04] );<span id="more-35"></span></pre>
<p>Adding a category to the database requires a call to the server that adds a row to the database and returns the new category list,  which is then used to update the dropdown list.  I&#8217;ll show you samples of the app in a pseudocode in an imaginary environment which combines the best of Silverlight and GWT.  First we initialize the form and set an event handler that&#8217;s called when somebody clicks on the <em>AddCategoryButton</em>:</p>
<pre>[05] class CreatePostForm {
[06]    protected TextBox Title;
[07]    protected ListBox Category;
[08]    protected TextBox AddCategoryName;
[09]    protected Button  AddCategoryButton;
[10]    protected RichTextArea Body;
[11]    protected Button  Submit;
[12]
[13]    public CreatePostForm() {
[14]        ... initialize and lay out UI elements ...
[15]
[16]        AddCategoryButton.OnClick += AddCategoryButton_OnClick;
[17]
[18]        ... finish construction ...
[19]    }</pre>
<p>Leaving out error handling and other details,  the job of the event handler is to pass the name of the new category to the server.  The event handler is defined as an instance method of <em>CreatePostForm</em>:</p>
<pre>[20]    protected void AddCategoryButton_OnClick {
[21]        Server.Instance.AddCategory(AddCategoryName.Text,AddCategory_Completed)
[22]    }</pre>
<p>The <em>AddCategory</em> RPC call is defined on a Singleton called <em>Server</em>,  and takes two arguments:  (1) a string with the name of the new category,  and (2) a reference to to the callback function that gets called when the RPC call is complete.   The callback,  <em>AddCategory_Completed</em>,  is also an instance method:</p>
<pre>[23]     protected void AddCategory_Completed(List&lt;ListBoxItem&gt; items) {
[24]            Category.Items = items;
[25]     }</pre>
<p><em>ListBoxItem</em> is a class that represents a single row in a ListBox,  which has properties <em>ListBox.Id</em> and <em>ListBox.Name</em>.  This is simple and straightforward code,  and it ought to maintainable,  right?</p>
<p>Let&#8217;s see</p>
<h2>The Naive Implementation Adapts</h2>
<p>Well,  when we finish writing the class,  we notice the first problem &#8211; a minor problem.  There are two buttons on the form,  so we need two event handlers and two callback functions.  As a UI class gets complicated,  it can accumulate quite a few callback functions,  and it can get tricky keeping track of them all.  Careful naming,  code organization,  and the use of <em>#region </em>in C# can help organize the code,  but it&#8217;s easy to build UI controls that have tens of methods in which we can get lost.</p>
<p>Over time,  we&#8217;ll add more forms to the app,  and pretty soon we&#8217;ll add another form that has a category list:  perhaps this a form used by administrators to search for posts:  let&#8217;s call it <em>AdminSearchForm</em>.   <em>AdminSearchForm</em> also contains a <em>Listbox</em> called <em>Category</em>.  It&#8217;s a protected field of <em>AdminSearchForm</em>,  but we need to update it when the administrator adds a new category.   It seems reasonable to add a public method to AdminSearchForm</p>
<pre>[26] public class AdminSearchForm {
[27]     ...
[28]     protected ListBox Categories;
[29]     ...
[30]     public void UpdateCategoryList(List&lt;ListBoxItem&gt; items) {
[31]       Categories.Items=items;
[32]     }
[33] }</pre>
<p>Now we update the <em>AddCategory_Completed</em> function so it updates the <em>AdminSearchForm</em>:</p>
<pre>[34] public class CreatePostForm {
[35]    ...
[36]    protected void AddCategory_Completed(List&lt;ListBoxItems&gt; items) {
[37]       Categories.Items=items;
[38]       App.Instance.MainTabPanel.AdminSearchForm.UpdateCategoryList(items);
[39]    }
[40] }</pre>
<p>Not too bad,  eh?  just four more lines of transparent code to update <em>AdminSearchForm</em>,   even if line [38] has a rather ugly coupling to the detailed structure of the application.</p>
<h2>The Naive Implementation Breaks Down</h2>
<p>Over the next few weeks,  we add a few more dropdown lists to the application,  we keep doing the same thing,  and it&#8217;s fine for a while.  Then we start running into problems:</p>
<ol>
<li>We can&#8217;t reuse <em>CreatePostForm</em> to make different versions of the application,  because it contains a hard-coded list of all the dropdown lists in the application.</li>
<li>We can&#8217;t update the contents of a category list that it&#8217;s a dynamically generated UI element,  such as a dialog box,  a draggable representation of an item,  a search result listing,  or an application plug-in.</li>
<li>You need to consider how all of these dropdown lists get initialized when the application starts (something this code sample doesn&#8217;t show.)</li>
<li>At some point you need to add a second way that a user can add a category (for instance,  the &#8220;Manage Categories&#8221; screen in WordPress) &#8212; at that point you can (a) duplicate the code in <em>AddCategory_Completed</em> (bad idea!),  (b) have the <em>ManageCategoriesForm</em> class call the  <em>AddCategory_Completed </em>method of <em>CreatePostForm</em> (better) or (c) move <em>CreatePostForm</em> someplace else. (best)</li>
<li>If UI components were responsible for communicating with the server to update themselves,  performance could be destroyed by unnecessary communications,  with no guarantee that UI components would be updated consistently.</li>
</ol>
<p>I&#8217;m sorry to admit that,  when I built my first GWT app,  I ran into all of the above problems,  plus a number of others.  I tried a number of ad hoc solutions until I was forced to sit down and develop an architecture (the one below) that doesn&#8217;t run out of steam.  Today,  you can do better.</p>
<h2>Separating the Model And The View</h2>
<p>Ok,  the plan is to create two classes:  <em>CategoryList</em> and <em>CategoryListBox</em> that work together to solve the problem of updating CategoryList boxes.  <em>CategoryList</em> is a singleton:  it keeps track of the current state of the category list and keeps a list of clients that need to know when the list is updated.</p>
<p><a href="http://gen5.info/q/wp-content/uploads/2008/07/objects.png"><img class="alignnone size-full wp-image-39" title="objects" src="http://gen5.info/q/wp-content/uploads/2008/07/objects.png" alt="" width="500" height="278" /></a></p>
<p>The code for <em>CategoryList</em> looks like:</p>
<pre>[41] public class CategoryList {
[42]    private static CategoryList _Instance;
[43]    public static CategoryList Instance {
[44]       get {
[45]           if (_Instance==null)
[46]              _Instance=new CategoryList();
[47]
[48]           return _Instance;
[49]       }
[50]    }
[51]
[52]    private List&lt;ListBoxItems&gt; Items {get; set;}
[53]    private List&lt;ICategoryListener&gt; Listeners;
[54]    private CategoryList() { ... construct ...};</pre>
<p>Java programmers might notice a few C#-isms here,  in particular the way the class defines a static property called <em>Instance</em> that other classes use.  We don&#8217;t,  however,  use the C# event mechanism,  because it doesn&#8217;t do exactly what we want to do.</p>
<p>We call <em>UpdateItems</em> when there&#8217;s a change in the category list,  or when we initialize the category list when the application starts.  <em>UpdateItems</em> as an ordinary method,  although a C# stylist might probably make the <em>Items</em> property public and put the following logic in the setter:</p>
<pre>[55]   public void UpdateItems(List&lt;ListBoxItems&gt; items) {
[56]      Items=items;
[57]      foreach(var l in Listeners) {
[58]         l.UpdateItems(Items);
[59]      }
[60]   }</pre>
<p><em>CategoryListBoxes</em> will register and unregister themselves with the <em>CategoryList</em> with the following methods:</p>
<pre>[61]    public AddListener(ICategoryListener l) {
[62]       Listeners.Add(l);
[63]       l.UpdateItems(Items);
[64]    }
[65]    public RemoveListener(ICategoryListener l) {
[66]       Listeners.Remove(l);
[67]    }
[68] }</pre>
<p>Note that we could have built all of this logic into the CategoryListBox,  but by introducing the <em>CategoryList</em> class and the <em>ICategoryListener</em> interface,  we&#8217;ve decoupled the model from the view,  and given ourselves the option to create new visual representations of the category list.  (WordPress,  for instance has a distinct representation of the category list on the &#8220;Manage Category&#8221; screens and more than one way you can show a category list to your viewers.)</p>
<p>An interesting point is that <em>AddListener</em> immediately updates the listener when it registers itself.  This is a pattern that handles asynchronous initialization:  so long as the <em>Items</em> property starts out as something harmless,  <em>ICategoryListeners</em> formed before app initialization is completed will be initialized when the application initialization code calls <em>UpdateItems</em>.  If an <em>ICategoryListener</em> is created later,  it gets initialized upon registration  &#8212; either way you&#8217;re covered without having to think about it.</p>
<p>Let&#8217;s take a look at the CategoryListBox,  which extends ListBox and implements ICategoryListener.</p>
<pre>[70] public CategoryListBox: ListBox, ICategoryListener {</pre>
<p>It implements <em>ICategoryListener</em> by implementing the <em>UpdateItems</em> method:</p>
<pre>[71]   public UpdateItems(List&lt;ListBoxItems&gt; items) {
[72]      Items=items
[73]   }</pre>
<p>We&#8217;re going to implement registration and deregistration GWT style,  because GWT has particularly strict requirements for how we can access UI components.  We&#8217;re only allowed to manipulate UI components that are attached to the underyling HTML document tree &#8212; by registering and deregistering when the component is attached and detached,  components get updated at the proper times:</p>
<pre>[74]   public OnAttach() {
[75]      super.OnAttach();
[76]      CategoryList.Instance.AddListener(this);
[77]   }
[78]
[79]   public OnDetach() {
[80]      CategoryList.Instance.RemoveListner(this);
[81]      super.OnDetach();
[82]   }</pre>
<p>The GWT style is particularly nice in that it prevents long-lasting circular references between the view and the model:  once you remove the view from the visual,  the reference in the model goes away.  Silverlight is more forgiving in where you can register the control:  you can do it either the constructor or the <em>Loaded</em> event,  but I don&#8217;t see an equivalent <em>Unloaded</em> event which could be used for automatic deregistration &#8212; manual deregistration may be necessary to prevent memory leaks.</p>
<p>So what have we got?</p>
<p>We&#8217;ve got a <em>CategoryListBox </em>control that works together with the <em>CategoryList</em> singleton to keep itself updated.  So long as we call <em>CategoryList.UpdateItems()</em> during the initialization process,  we can just include a <em>CategoryListBox</em> where we want it and never worry about initialization or updating.  We can even create new <em>ICategoryListeners</em> if we want to make other visual controls that display the category list.  This is a path to simple and scalable development.</p>
<h2>What happened to the &#8220;Controller?&#8221;</h2>
<p>The Model-View-Controller paradigm is a perennially popular buzzword in computing.  The phrase was coined in the early 1980&#8242;s to describe a <a href="http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html">particular implementation in Smalltalk</a>,  which was one of the first implementations of a modern GUI.  The Controller is a third component that mediates between the View,  Controller and their environment.  Although Controllers are widspread in server-based web applications, the Controller often withers away in today&#8217;s GUI environments,  because it&#8217;s functions are often implemented by the event-handling mechanisms that come with the environment.  In this case,  &#8220;Controller&#8221;-like logic is embedded in certain methods of the <em>CategoryList</em>.</p>
<p>Note that there are two objects here that could be called a &#8220;Model&#8221;.  I&#8217;m calling the <em>CategoryList</em> a model because it has a 1-1 relationship with an object on the server:  the <em>categoryList</em> table.  <em>CategoryList</em> is a relatively persistent object that lasts for the lifetime of the RIA.  There&#8217;s another kind of &#8220;Model&#8221; object,  the <em>List&lt;ListBoxItems&gt;</em> that is stored in the <em>Items</em> property of <em>CategoryList</em> and is passed to a <em>ICategoryListener</em> during initialization or update &#8212; that object represents the state of the <em>categoryList</em> table at a particular instance time.  The generic <em>List&lt;&gt;</em> is an adequate representation of the state of <em>categoryList</em>,  although there are many cases where we might want to define a new class to represent the momentary state of a server object.</p>
<p>Something else funny about <em>CategoryList</em> is that it doesn&#8217;t export a public <em>Items</em> property.  It certainly could,  bu I chose not to because <strong><em>a getter for an asynchronous model object is making an empty promise</em></strong>.</p>
<p>A getter in a synchronous application can always initialize or update itself before returning:  a similar method in an asynchronous object must return to it&#8217;s caller before it can receive information from the server.   As asynchronous model can return a cached value of <em>Items</em> if available,  but it can make a much firmer promise to deliver correct updates of <em>Items</em> when they become available.  <em>CategoryList</em> does,  however,  deliver a cached copy of <em>Items </em>to  <em>CategoryListeners</em> after registration,  as this is an effective and efficient mechanism for initialization.</p>
<p>Would it be possible to define only a temporary &#8216;model&#8217; class and put a single <em>Controller</em> class in charge of updates?  Sure.  I think that would make more sense in a dynamically typed language like Javascript than it does in Java or C#,  since it would be hard for such a <em>Controller</em> to enforce type-safety.  Could we call <em>CategoryList</em> a <em>Controller</em>?  Perhaps,  but I think <em>CategoryList</em> is a logical place to locate methods that manipulate the <em>categoryList</em> &#8212; it really is a representation of a persistent object.</p>
<h2>What next?</h2>
<p>This is a good start,  but we haven&#8217;t entirely solved the RIA architecture problem.  Let&#8217;s talk about some of the issues we&#8217;d face if we generalized this approach:</p>
<ol>
<li>What if there was more than one type of dropdown list?  We ought to have an inheritance hierarchy from which we can derive multiple types of dropdown lists.  This could include mutable lists such as <em>ContributorTypeListBox</em> as well as immutable lists such as <em>USStateListBox</em>.</li>
<li>There is just one <em>CategoryList</em> in the application:  in some sense it&#8217;s globally scoped.  What if we want to represent a <em>BlogPost</em> or a <em>Contributor? </em>Simple,  use a <a href="http://en.wikipedia.org/wiki/Multiton">Multiton</a> instead of a Singleton.  Rather than writing <em>CategoryList.Instance</em>,  you might write <em>BlogPost.Instance[25]</em>,  where <em>25</em> is the primary key of the blog post.  The logic behind <em>Instance[] </em>is responsible for maintaining one and only one instance of <em>BlogPost</em> per actual blog post.</li>
<li>Isn&#8217;t the updating logic in the <em>CategoryList</em> and <em>CategoryListBox</em> repetitive?  It is.  A mature framework will either push this logic up into superclasses (kind of an embedded controller),  or push it out into a <em>Controller</em>.  The best approach will depend on the characteristics of the environment and the application.</li>
</ol>
<p>I&#8217;ll be elaborating on these issues in future postings:  subscribe to my <a href="http://feeds.feedburner.com/Generation5">RSS feed</a> to keep up to date!</p>
<h2>Conclusion</h2>
<p>It&#8217;s simple to initialize and update data in the simplest RIA&#8217;s,  but asynchronous communications makes it increasingly difficult as applications grow in complexity.  A simple approach to data updating that is reliable and maintainable is to create a set of persistent model classes that maintain:</p>
<ol>
<li>A cache of the latest data value,  and</li>
<li>A list of dependent view objects</li>
</ol>
<p>Model objects are responsible for updating View objects,  which in turn,  are responsible for registering themselves with the Model.  The result of this is that View objects can be used composably in the UI:  View objects can be added to the user interface without explicitly writing code to manage data updates.</p>
<p>Although this pattern can be applied immediately,  we&#8217;ll get the most of it when it (or a similar pattern) is incorporated in client-side RIA frameworks.  There are only a few client-side frameworks today (for instance, <a href="http://www.techper.net/2008/06/09/patterns-of-gui-architecture-in-cairngorm-and-puremvc/">Cairngorn and PureMVC</a>) but I think we&#8217;ll see exciting developments in the next year:  subscribe to the <a href="http://feeds.feedburner.com/Generation5">Gen5 RSS feed</a> to keep up with developments.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f07%2f18%2fthe-role-of-the-model-in-silverlight-gwt-and-javascript%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f07%2f18%2fthe-role-of-the-model-in-silverlight-gwt-and-javascript%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/07/18/the-role-of-the-model-in-silverlight-gwt-and-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting back to the UI Thread in Silverlight 2 Beta 2</title>
		<link>http://gen5.info/q/2008/06/25/getting-back-to-the-ui-thread-in-silverlight-2/</link>
		<comments>http://gen5.info/q/2008/06/25/getting-back-to-the-ui-thread-in-silverlight-2/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 20:54:24 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=33</guid>
		<description><![CDATA[The problem Silverlight 2 Beta 2 has changed the concurrency model for asynchronous communications.  In Silverlight 2 Beta 1,  asynchronous requests always returned on the UI Thread.  This was convenient,  since updates to the user interface can only be done via the UI thread.  As of Silverlight 2 Beta 2,  asynchronous callbacks are fired in [...]]]></description>
			<content:encoded><![CDATA[<h2>The problem</h2>
<p>Silverlight 2 Beta 2 has changed the concurrency model for asynchronous communications.  In Silverlight 2 Beta 1,  asynchronous requests always returned on the UI Thread.  This was convenient,  since updates to the user interface can <em>only</em> be done via the UI thread.  As of Silverlight 2 Beta 2,  asynchronous callbacks are fired in worker threads that come from a thread pool:  although this potentially allows for better performance via concurrency,  it increases the risk for race conditions between callbacks &#8211;  more importantly,  some mechanism is necessary to make code that updates the user interface run in the UI thread.</p>
<h2>A solution</h2>
<p>It&#8217;s straightforward to execute a function in the UI thread by using the <em>Dispatcher</em> property of any <em>ScriptObject</em> The tricky part is that <em>ScriptObjects</em> are part of the user interface,  so you can only access the<em> Dispatcher</em> property from the UI thread.  At first this seems like a chicken-and-egg situation:  you need a<em> Dispatcher </em>to get to the UI thread,  but you need to be in the UI thread to get a <em>Dispatcher</em>.</p>
<p>This dilemma can be resolved by accessing a<em> Dispatcher</em> in your App.xaml.cs file and stashing it away in a static variable on application startup:</p>
<pre>private void Application_Startup(object sender, StartupEventArgs e) {
    ...
    UIThread.Dispatcher = RootVisual.Dispatcher;
}</pre>
<p>UIThread is a simple static class:</p>
<pre>public static class UIThread {
    public static Dispatcher Dispatcher {get; set;}
    public static void Run(Action a) {
        Dispatcher.BeginInvoke(a);
    }
}</pre>
<p>At some point in the future,  you can transfer execution to the UIThread by scheduling a function to run in it.</p>
<pre>public class ProcessHttpResponse(...) {
   ...
   UIThread.Run(UpdateUserInterface);
}</pre>
<p>The parameter of <em>Run</em> is an <em>Action</em> delegate,  which is a function that returns void and takes no parameters.  That&#8217;s fine and good,  but what if you want to pass some parameters to the function that updates the UI.  The usual <a href="http://gen5.info/q/2008/06/02/keeping-track-of-state-in-asynchronous-callbacks/">three choices for passing state in asynchronous applications</a> apply,  but it&#8217;s particularly easy and fun to use a closure here:</p>
<pre>public class ProcessHttpResponse(...) {
    ...
    var elementToUpdate=...;
    var updateWithValue=...;

    UIThread.Run(delegate() {
        UpdateUserInterface(elementToUpdate,updateWithValue)
    });
}</pre>
<h2>When to return?</h2>
<p>If your application is complex,  and you have nested asynchronous calls,  you&#8217;re left with an interesting question:  where is the best place to switch execution to the UI thread?  You <strong>can</strong> switch to the UI Thread as soon as you get back from an HttpRequest or a WCF call and you <strong>must </strong>switch to the UI Thread before you access any methods or properties of the user interface.  What&#8217;s best?</p>
<p>It is simple and safe to switch to the UI Thread immediately after requests return from the server.  If you&#8217;re consistent in doing this,  you&#8217;ll never have trouble accessing the UI thread,  and you&#8217;ll never have trouble with race conditions between returning communication responses.  On the other hand,  you&#8217;ll lose the benefit of processing responses concurrently,  which can improve speed and responsiveness on today&#8217;s multi-core computers.</p>
<p>It&#8217;s straightforward to exploit concurrency when a requests can be processed independently.  For instance,  imagine a <a href="http://en.wikipedia.org/wiki/VRML">VRML</a> viewer written in Silverlight.  Displaying a VRML would require the parsing of a file,  the construction of the scene graph and the initialization of a 3-d engine,  which may require building data structures such as a BSP Tree.  Doing all of this work in the UI Thread would make the application lock up while a model is loading &#8212; it would be straightforward,  instead,  to construct all of the data structures required by the 3-d engine,  and attach the fully initialized 3-d engine to the user interface as the last step.  Since the data structures would be independent of the rest of the application,  thread safety and liveness is a nonissue.</p>
<p>Matters can get more complicated,  however,  if the processing of a request requires access to application-wide data;  response handlers running in multiple threads will probably corrupt shared data structures unless careful attention is paid to thread safety.  One simple approach is to <strong>always</strong> access shared data from the UI Thread,  and to transfer control to the UI Thread with <em>UIThread.Run</em> before accessing shared variables.</p>
<h2>Conclusion</h2>
<p>Silverlight 2 Beta 2 introduces a major change in the concurrency model for asynchronous communication requests.  Unlike SL2B1,  where asynchronous requests executed on the user interface thread,  SL2B2 launches asynchronous callbacks on multiple threads.  Although this model offers better performance and responsiveness,  it requires Silverlight programmers to explicitly transfer execution to the UI thread before accessing UI objects:  most SL2B1 applications will need to be reworked.</p>
<p>This article introduces a simple static class, <em> UIThread</em>,  which makes it easy to schedule execution in the UI Thread.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f06%2f25%2fgetting-back-to-the-ui-thread-in-silverlight-2%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f06%2f25%2fgetting-back-to-the-ui-thread-in-silverlight-2%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/06/25/getting-back-to-the-ui-thread-in-silverlight-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Keeping Track Of State In Asynchronous Callbacks</title>
		<link>http://gen5.info/q/2008/06/02/keeping-track-of-state-in-asynchronous-callbacks/</link>
		<comments>http://gen5.info/q/2008/06/02/keeping-track-of-state-in-asynchronous-callbacks/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 17:13:43 +0000</pubDate>
		<dc:creator>Paul Houle</dc:creator>
				<category><![CDATA[Asynchronous Communications]]></category>
		<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://gen5.info/q/?p=27</guid>
		<description><![CDATA[When you&#8217;re writing applications that use asynchronous callbacks (i.e. Silverlight, AJAX, or GWT) you&#8217;ll eventually run into the problem of keeping track of the context that a request is being done in. This isn&#8217;t a problem in synchronous programming, because local variables continue to exist after one function calls another function synchronously: int AddToCount(int amount,string [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;re writing applications that use asynchronous callbacks (i.e. Silverlight, AJAX, or GWT) you&#8217;ll eventually run into the problem of keeping track of the context that a request is being done in.   This isn&#8217;t a problem in synchronous programming,  because local variables continue to exist after one function calls another function synchronously:</p>
<pre>int AddToCount(int amount,string countId)  {
   int countValue=GetCount(countId);
   return countValue+amount;
}</pre>
<p>This doesn&#8217;t work if the <em>GetCount</em> function is asynchronous,  where we need to write something like</p>
<pre>int AddToCountBegin(int amount,string countId,CountCallback outerCallback) {
     GetCountBegin(countId,AddToCountCallback);
}

void AddToCountCallback(int countValue) {
    ... some code to get the values of amount and outerCallback ...
    outerCallback(countValue+amount);
}</pre>
<p>Several things change in this example:  (i) the <em>AddToCount</em> function gets broken up into two functions:  one that does the work before the <em>GetCount</em> invocation,  and one that does the work after <em>GetCount</em> completes.   (ii) We can&#8217;t return a meaningful value from AddToCountCallback,  so it needs to &#8216;return&#8217; a value via a specified callback function.   (iii) Finally,  the values of <em>outerCallback</em> and <em>amount</em> aren&#8217;t automatically shared between the functions,  so we need to make sure that they are carried over somehow.<br />
There are three ways of passing context from a function that calls and asynchronous function to the callback function:</p>
<ol>
<li>As an argument to the callback function</li>
<li>As an instance variable of the class of which the callback function is a class</li>
<li>Via a closure</li>
</ol>
<p>Let&#8217;s talk about these alternatives:</p>
<h3>1. Argument to the Callback Function</h3>
<p>In this case,  a context object is passed to the asynchronous function,  which passes the context object to the callback.  The advantage here is that there aren&#8217;t any constraints on how the callback function is implemented,  other than by accepting the context object as a callback.  In particular,  the callback function can be static.  A major disadvantage is that the asynchronous function has to support this:  it has to accept a state object which it later passes to the callback function.</p>
<p>The implementation of <em>HttpWebRequest.BeginGetResponse(AsyncCallback a,Object state) </em>in the Silverlight libraries is a nice example.  If you wish to pass a context object to the <em>AsyncCallback</em>,  you can pass it in the second parameter, <em>state</em>.  Your callback function will implement the <em>AsyncCallback</em> delegate,  and will get something that implements <em>IAsyncResult</em> as a parameter.  The state that you passed into <em>BeginGetResponse</em> will come back in the <em>IAsyncResult.AsyncState</em> property. For example:</p>
<pre>class MyHttpContext {
	public HttpWebRequest Request;
        public SomeObject FirstContextParameter;
        public AnotherObject AnotherContextParameter;
}

protected void myHttpCallback(IAsyncResult abstractResult) {
	MyHttpContext context = (MyHttpContext) abstractResult.AsyncState;
	HttpWebResponse Response=(HttpWebResponse) context.Request.EndGetResponse(abstractResult);
}

public doHttpRequest(...) {
	...
        MyHttpContext context=new MyHttpContext();
	context.Request=Request;
	context.FirstContextParameter = ... some value ...;
	context.AnotherContextParameter = .. another value ...;
	Request.BeginGetResponse();
	Request.Callback(myHttpCallback,context);
}</pre>
<p>Note that,  in this API,  the <em>Request</em> object needs to be available in <em>myHttpCallback </em>because <em>myHttpCallbacks</em> get the response by calling the <em>HttpWebResponse.EndGetResponse()</em> method.  We could simply pass the Request object in the <em>state</em> parameter,  but we&#8217;re passing an object we defined, <em>myHttpCallback</em>,  because we&#8217;d like to carry additional state into <em>myHttpCallback</em>.</p>
<p>Note that the corresponding method for doing XMLHttpRequests in GWT,   the use of a <em>RequestBuilder</em> object doesn&#8217;t allow using method (1) to pass context information &#8212; there is no <em>state</em> parameter.   in GWT you need to use method (2)  or (3) to pass context at the <em>RequestBuilder</em> or GWT RPC level.  You&#8217;re free,  of course, to use method (1) when you&#8217;re chaining asynchronous callbacks:  however,  method (2) is more natural in Java where,  instead of a delegate,  you need to pass an object reference to designate a callback function.</p>
<h3>2. Instance Variable Of The Callback Function&#8217;s Class</h3>
<p>Functions (or Methods) are always attached to a class in C# and Java:  thus,  the state of a callback function can be kept in either static or instance variables of the associated class.  I don&#8217;t advise using static variables for this,  because it&#8217;s possible for more than one asynchronous request to be flight at a time:  if two request store state in the same variables,  you&#8217;ll introduce race conditions that will cause a world of pain. (see <a href="http://gen5.info/q/2008/05/02/how-asynchronous-execution-works-in-rias/">how race conditions arise in asynchronous communications</a>.)</p>
<p>Method 2 is particularly effective when both the calling and the callback functions are methods of the same class.  Using objects whose lifecycle is linked to a single asynchronous request is an effective way to avoid conflicts between requests (see the <a href="http://gen5.info/q/2008/04/11/the-asynchronous-command-pattern/">asynchronous command pattern</a> and <a href="http://gen5.info/q/2008/04/18/asynchronous-functions/">asynchronous functions</a>.)</p>
<p>Here&#8217;s an example,  lifted from the <a href="http://gen5.info/q/2008/04/18/asynchronous-functions/">asynchronous functions</a> article:</p>
<pre>    public class HttpGet : IAsyncFunction&lt;String&gt;
    {
        private Uri Path;
        private CallbackFunction&lt;String&gt; OuterCallback;
        private HttpWebRequest Request;

        public HttpGet(Uri path)
        {
            Path = path;
        }

        public void Execute(CallbackFunction&lt;String&gt; outerCallback)
        {
            OuterCallback = outerCallback;
            try
            {
                Request = (HttpWebRequest)WebRequest.Create(Path);
                Request.Method = "GET";
                Request.BeginGetRequestStream(InnerCallback,null);
            }
            catch (Exception ex)
            {
                OuterCallback(CallbackReturnValue&lt;String&gt;.CreateError(ex));
            }
        }

        public void InnerCallback(IAsyncResult result)
        {
            try
            {
                HttpWebResponse response = (HttpWebResponse) Request.EndGetResponse(result);
                TextReader reader = new StreamReader(response.GetResponseStream());
                OuterCallback(CallbackReturnValue&lt;String&gt;.CreateOk(reader.ReadToEnd()));
            } catch(Exception ex) {
                OuterCallback(CallbackReturnValue&lt;String&gt;.CreateError(ex));
            }
        }
    }</pre>
<p>Note that two pieces of context are being passed into the callback function:  an <em>HttpWebRequest</em> object named <em>Request</em> (necessary to get the response) and a <em>CallbackFunction&lt;String&gt;</em> delegate named <em>OuterCallback</em> that receives the return value of the asynchronous function.</p>
<p>Unlike Method 1,  Method 2 makes it possible to keep an unlimited number of context variables that are unique to a particular case in a manner that is both typesafe and oblivious to the function being called &#8212; you don&#8217;t need to cast an <em>Object</em> to something more specific,  and you don&#8217;t need to create a new class to hold multiple variables that you&#8217;d like to pass into the callback function.</p>
<p>Method 2 comes into it&#8217;s own when it&#8217;s used together with polymorphism,  inheritance and initialization patterns such as the factory pattern:  if the work done by the requesting and callback methods can be divided into smaller methods,  a hierarchy of asynchronous functions or commands can reuse code efficiently.</p>
<h3>3. Closures</h3>
<p>In both C# and Java,  it&#8217;s possible for a method defined inside a method to have access to variables in the enclosing method.  In C# this is a matter of creating an anonymous delegate,  while in Java it&#8217;s necessary to create an anonymous class.</p>
<p>Using closures results in the shortest code,  if not the most understandable code.  In some cases,  execution proceeds in a straight downward line through the code &#8212;  much like a synchronous version of the code.  However,  people sometimes get confused the indentation,  and,  more seriously,  parameters after the closure definition and code that runs immediately after the request is fired end up in an awkward place (after the definition of the callback function.)</p>
<pre>    public class HttpGet : IAsyncFunction&lt;String&gt;
    {
        private Uri Path;

        public HttpGet(Uri path)
        {
            Path = path;
        }

        public void Execute(CallbackFunction&lt;String&gt; outerCallback)
        {
            OuterCallback = outerCallback;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Path);
                Request.Method = "GET";
                Request.BeginGetRequestStream(delegate(IAsyncResult result) {
	            try {
                        response = request.EndGetResponse(result);
                        TextReader reader = new StreamReader(response.GetResponseStream());
                        outerCallback(CallbackReturnValue&lt;String&gt;.CreateOk(reader.ReadToEnd()));
                    } catch(Exception ex) {
                        outerCallback(CallbackReturnValue&lt;String&gt;.CreateError(ex));
                    }</pre>
<pre>            },null); <span style="color: #800000;">// &lt;--- note parameter value after delegate definition</span></pre>
<pre>            }
            catch (Exception ex)
            {
                outerCallback(CallbackReturnValue&lt;String&gt;.CreateError(ex));
            }
        }
    }</pre>
<p>The details are different in C# and Java:  anonymous classes in Java can access local,  static and instance variables from the enclosing context that are declared <em>final</em> &#8212;  this makes it impossible for variables to be stomped on while an asynchronous request is in flight.  C# closures,  on the other hand,  can access only local variables:  <em>most</em> of the time this prevents asynchronous requests from interfering with one another,  unless a single method fires multiple asynchronous requests,  in which case  <a href="http://blogs.msdn.com/abhinaba/archive/2005/10/18/482180.aspx">counter-intuitive things can happen</a>.</p>
<h3>Conclusion</h3>
<p>In addition to receiving return value(s),  callback functions need to know something about the context they run in:  to write reliable applications,  you need to be conscious of where this information is;  better yet,  a strategy for where you&#8217;re going to put it.  Closures,  created with anonymous delegates (C#) or classes (Java) produce the shortest code,  but not necessarily the clearest.  Passing context in an argument to the callback function requires the cooperation of the called function,  but it makes few demands on the calling and callback functions:  the calling and callback functions can both be static.  When a single object contains both calling and callback functions,  context can be shared in a straightforward and typesafe manner;  and when the calling and callback functions can be broken into smaller functions,  opportunities for efficient code reuse abound.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f06%2f02%2fkeeping-track-of-state-in-asynchronous-callbacks%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgen5.info%2fq%2f2008%2f06%2f02%2fkeeping-track-of-state-in-asynchronous-callbacks%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gen5.info/q/2008/06/02/keeping-track-of-state-in-asynchronous-callbacks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

