<?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>Psyche</title>
	<atom:link href="http://www.disinformatics.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.disinformatics.com/blog</link>
	<description>The opposite of opposite</description>
	<lastBuildDate>Sun, 06 Feb 2011 20:19:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Scala program to get sizes and number of contiguous blocks in a matrix</title>
		<link>http://www.disinformatics.com/blog/2011/02/06/scala-program-to-get-sizes-and-number-of-contiguous-blocks-in-a-matrix/</link>
		<comments>http://www.disinformatics.com/blog/2011/02/06/scala-program-to-get-sizes-and-number-of-contiguous-blocks-in-a-matrix/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 20:12:22 +0000</pubDate>
		<dc:creator>Farhan Mannan</dc:creator>
				<category><![CDATA[informatics]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.disinformatics.com/blog/?p=706</guid>
		<description><![CDATA[// 1000 // 1001 // 0111 The above has two contiguous blocks of sizes 2 and 4 (I&#8217;m not counting diagonals as contiguous). The auxiliary constructor for the class Grid takes a height and width argument and creates a random matrix. You can then invoke the numBlocks method and access the blockSizes field on your [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="scala" style="font-family:monospace;"><span style="color: #008000; font-style: italic;">// 1000</span>
<span style="color: #008000; font-style: italic;">// 1001</span>
<span style="color: #008000; font-style: italic;">// 0111</span></pre></div></div>

<p>The above has two contiguous blocks of sizes 2 and 4 (I&#8217;m not counting diagonals as contiguous).</p>
<p>The auxiliary constructor for the class Grid takes a height and width argument and creates a random matrix. You can then invoke the numBlocks method and access the blockSizes field on your instance of Grid.</p>

<div class="wp_syntax"><div class="code"><pre class="scala" style="font-family:monospace;"><span style="color: #0000ff; font-weight: bold;">class</span> Grid<span style="color: #F78811;">&#40;</span>s<span style="color: #000080;">:</span> Array<span style="color: #F78811;">&#91;</span>Array<span style="color: #F78811;">&#91;</span>Boolean<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
  require<span style="color: #F78811;">&#40;</span>s.<span style="color: #000000;">length</span> <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&amp;&amp;</span> s<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">length</span> <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&amp;&amp;</span> s.<span style="color: #000000;">forall</span><span style="color: #F78811;">&#40;</span><span style="color: #000080;">_</span>.<span style="color: #000000;">length</span> <span style="color: #000080;">==</span> s<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> height <span style="color: #000080;">=</span> s.<span style="color: #000000;">length</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> width <span style="color: #000080;">=</span> s<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">length</span>
  <span style="color: #0000ff; font-weight: bold;">final</span> <span style="color: #0000ff; font-weight: bold;">val</span> state <span style="color: #000080;">=</span> s
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> <span style="color: #0000ff; font-weight: bold;">this</span><span style="color: #F78811;">&#40;</span>h<span style="color: #000080;">:</span> Int, w<span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">this</span><span style="color: #F78811;">&#40;</span>Array.<span style="color: #000000;">fill</span><span style="color: #F78811;">&#91;</span>Boolean<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#40;</span>h, w<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>scala.<span style="color: #000000;">util</span>.<span style="color: #000000;">Random</span>.<span style="color: #000000;">nextBoolean</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">private</span> <span style="color: #0000ff; font-weight: bold;">def</span> valid<span style="color: #F78811;">&#40;</span>r<span style="color: #000080;">:</span> Int, c<span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span><span style="color: #000080;">:</span> Boolean <span style="color: #000080;">=</span>
    <span style="color: #F78811;">0</span> <span style="color: #000080;">&lt;=</span> r <span style="color: #000080;">&amp;&amp;</span> r <span style="color: #000080;">&lt;</span> height <span style="color: #000080;">&amp;&amp;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&lt;=</span> c <span style="color: #000080;">&amp;&amp;</span> c <span style="color: #000080;">&lt;</span> width
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">private</span> <span style="color: #0000ff; font-weight: bold;">def</span> contiguous<span style="color: #F78811;">&#40;</span>r<span style="color: #000080;">:</span> Int, c<span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> 
    <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#123;</span>
      i <span style="color: #000080;">&lt;</span>- -<span style="color: #F78811;">1</span> to <span style="color: #F78811;">1</span>
      j <span style="color: #000080;">&lt;</span>- -<span style="color: #F78811;">1</span> to <span style="color: #F78811;">1</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>i <span style="color: #000080;">*</span> j <span style="color: #000080;">==</span> <span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #F78811;">&#125;</span> <span style="color: #0000ff; font-weight: bold;">yield</span> <span style="color: #F78811;">&#40;</span>r + i, c + j<span style="color: #F78811;">&#41;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">val</span> blockSizes <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> visited <span style="color: #000080;">=</span> Array.<span style="color: #000000;">ofDim</span><span style="color: #F78811;">&#91;</span>Boolean<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#40;</span>height, width<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> visit<span style="color: #F78811;">&#40;</span>r<span style="color: #000080;">:</span> Int, c<span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span><span style="color: #000080;">:</span> Int <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>valid<span style="color: #F78811;">&#40;</span>r, c<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">&amp;&amp;</span> <span style="color: #000080;">!</span>visited<span style="color: #F78811;">&#40;</span>r<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>c<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">&amp;&amp;</span> state<span style="color: #F78811;">&#40;</span>r<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>c<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
        visited<span style="color: #F78811;">&#40;</span>r<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>c<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">true</span>
        <span style="color: #F78811;">1</span> + contiguous<span style="color: #F78811;">&#40;</span>r, c<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">map</span><span style="color: #F78811;">&#123;</span> <span style="color: #0000ff; font-weight: bold;">case</span> <span style="color: #F78811;">&#40;</span>i, j<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=&gt;</span> visit<span style="color: #F78811;">&#40;</span>i, j<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#125;</span>.<span style="color: #000000;">sum</span>
      <span style="color: #F78811;">&#125;</span>
      <span style="color: #0000ff; font-weight: bold;">else</span>
        <span style="color: #F78811;">0</span>
    <span style="color: #F78811;">&#125;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> sizes <span style="color: #000080;">=</span> 
      <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#123;</span>
        r <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">0</span> until height
        c <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">0</span> until width
        <span style="color: #0000ff; font-weight: bold;">val</span> v <span style="color: #000080;">=</span> visit<span style="color: #F78811;">&#40;</span>r, c<span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">if</span> v <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span>
      <span style="color: #F78811;">&#125;</span> <span style="color: #0000ff; font-weight: bold;">yield</span> v
    sizes.<span style="color: #000000;">toList</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> numBlocks <span style="color: #000080;">=</span> blockSizes.<span style="color: #000000;">length</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">override</span> <span style="color: #0000ff; font-weight: bold;">def</span> toString <span style="color: #000080;">=</span> state.<span style="color: #000000;">map</span><span style="color: #F78811;">&#40;</span><span style="color: #000080;">_</span>.<span style="color: #000000;">map</span><span style="color: #F78811;">&#40;</span><span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span><span style="color: #000080;">_</span><span style="color: #F78811;">&#41;</span> <span style="color: #6666FF;">&quot;x&quot;</span> <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #6666FF;">&quot;.&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">mkString</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot; &quot;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">mkString</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span><span style="color: #F78811;">&#41;</span>
<span style="color: #F78811;">&#125;</span></pre></div></div>

<p>The computation in the blockSizes method works using a val visited: Array[Boolean] which is mutated by the visit method. The visit method recursively visits all active cells contiguous to the current one, adding one to a running sum of the number of active cells visited in this block and so finally returning the size of the block.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.disinformatics.com/blog/2011/02/06/scala-program-to-get-sizes-and-number-of-contiguous-blocks-in-a-matrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Google Internship Interview Question in Scala</title>
		<link>http://www.disinformatics.com/blog/2010/12/14/a-google-internship-interview-question-in-scala/</link>
		<comments>http://www.disinformatics.com/blog/2010/12/14/a-google-internship-interview-question-in-scala/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 21:04:30 +0000</pubDate>
		<dc:creator>Farhan Mannan</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[informatics]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.disinformatics.com/blog/?p=670</guid>
		<description><![CDATA[Isn&#8217;t it weird how sorting transforms the complexity of a solution? It must be a special case of some concept of &#8220;transformations&#8221; in complexity theory or something. Tell me if this is true. The Question The question is: given a sorted array of integers and a target integer, find a pair of integers in the [...]]]></description>
			<content:encoded><![CDATA[<p>Isn&#8217;t it weird how sorting transforms the complexity of a solution? It must be a special case of some concept of &#8220;transformations&#8221; in complexity theory or something. Tell me if this is true.</p>
<p><strong>The Question</strong></p>
<p>The question is: given a <strong>sorted</strong> array of integers and a target integer, find a pair of integers in the array that sum to the target in <strong>linear</strong> time.</p>
<p><strong>The Solution</strong></p>
<p>A solution is to initialise two pointers to the ends of the array and compute the sum of the two elements pointed to. If the sum equals the target, we&#8217;re done.</p>
<p>If not, it either exceeds the target (in which case we can decrease our candidate solution by the smallest amount possible in a unique way: decrementing the upper pointer) or is too small (in which case we perform the dual operation and increment the lower pointer).</p>
<p>We repeat this process (via a while loop or recursion) until we find a solution or the pointers cross (if they cross, there was no pair of distinct elements of the array that summed to the target).</p>
<p>It&#8217;s linear time because on each pass of the loop/recursion, the algorithm either terminates (by success or pointers crossing) or the distance between the pointers decreases by one. Therefore in the worst case (i.e. termination as late as possible), the pointers meet and force termination &#8211; they must have jointly travelled n places, where n is the length of the array. Therefore it&#8217;s O(n) &#8211; linear time.</p>
<p><strong>The Scala code</strong></p>

<div class="wp_syntax"><div class="code"><pre class="scala" style="font-family:monospace;"><span style="color: #0000ff; font-weight: bold;">object</span> PairSum <span style="color: #F78811;">&#123;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> main<span style="color: #F78811;">&#40;</span>args<span style="color: #000080;">:</span> Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
&nbsp;
    <span style="color: #008000; font-style: italic;">// parse input</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> xs <span style="color: #000080;">=</span> args.<span style="color: #000000;">tail</span>.<span style="color: #000000;">map</span><span style="color: #F78811;">&#40;</span><span style="color: #000080;">_</span>.<span style="color: #000000;">toInt</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> target <span style="color: #000080;">=</span> args<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toInt</span>
&nbsp;
    <span style="color: #008000; font-style: italic;">// ensure list is sorted</span>
    require<span style="color: #F78811;">&#40;</span>sorted<span style="color: #F78811;">&#40;</span>xs<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> sorted<span style="color: #F78811;">&#40;</span>xs<span style="color: #000080;">:</span> Array<span style="color: #F78811;">&#91;</span>Int<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> xs.<span style="color: #000000;">sliding</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">2</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">forall</span> <span style="color: #F78811;">&#123;</span> <span style="color: #0000ff; font-weight: bold;">case</span> Array<span style="color: #F78811;">&#40;</span>a,b<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=&gt;</span> a <span style="color: #000080;">&lt;=</span> b <span style="color: #F78811;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic;">// find a solution, if one exists</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> findPair<span style="color: #F78811;">&#40;</span>l<span style="color: #000080;">:</span> Int, h<span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span><span style="color: #000080;">:</span> Option<span style="color: #F78811;">&#91;</span><span style="color: #F78811;">&#40;</span>Int, Int<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>l <span style="color: #000080;">&gt;=</span> h<span style="color: #F78811;">&#41;</span> None
      <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>xs<span style="color: #F78811;">&#40;</span>l<span style="color: #F78811;">&#41;</span> + xs<span style="color: #F78811;">&#40;</span>h<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">==</span> target<span style="color: #F78811;">&#41;</span> Some<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#40;</span>xs<span style="color: #F78811;">&#40;</span>l<span style="color: #F78811;">&#41;</span>, xs<span style="color: #F78811;">&#40;</span>h<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>xs<span style="color: #F78811;">&#40;</span>l<span style="color: #F78811;">&#41;</span> + xs<span style="color: #F78811;">&#40;</span>h<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">&lt;</span>  target<span style="color: #F78811;">&#41;</span> findPair<span style="color: #F78811;">&#40;</span>l + <span style="color: #F78811;">1</span>, h<span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">else</span>                              findPair<span style="color: #F78811;">&#40;</span>l, h - <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #F78811;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic;">// pretty printout</span>
    println<span style="color: #F78811;">&#40;</span>
      findPair<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span>, xs.<span style="color: #000000;">length</span> - <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> <span style="color: #0000ff; font-weight: bold;">match</span> <span style="color: #F78811;">&#123;</span>
        <span style="color: #0000ff; font-weight: bold;">case</span> Some<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#40;</span>a,b<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=&gt;</span> a + <span style="color: #6666FF;">&quot; + &quot;</span> + b + <span style="color: #6666FF;">&quot; = &quot;</span> + <span style="color: #F78811;">&#40;</span>a + b<span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">case</span> None <span style="color: #000080;">=&gt;</span> <span style="color: #6666FF;">&quot;No solution&quot;</span>
      <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#41;</span>
&nbsp;
  <span style="color: #F78811;">&#125;</span>
<span style="color: #F78811;">&#125;</span></pre></div></div>

<p><strong>Comments on coding the solution</strong></p>
<p>Before learning Scala, I did this in Java (going a bit mental and creating a new datatype &#8211; a &#8220;double pointer array&#8221;&#8230;) and then tried doing it in a &#8220;functional-programming-y&#8221; way in ML. That ended badly &#8211; I was trying to use lists (nullifying the whole point of efficiency as there&#8217;s no O(1) random access). I could have used ML&#8217;s arrays and whatnot, but it&#8217;s nightmarishly ugly stuff. </p>
<p>Xiang managed to do an <a href="http://pastebin.com/kj7ZpQfE ">O(n) time, O(1) space list implementation in ML!</a></p>
<p>This ended up being surprisingly idiomatic in Scala. The require and sorted predicate, the combination of tail recursion (which the JVM can just about handle in this case), immutability, OOP field syntax, seamlessly using what are traditionally list functionals on arrays&#8230; seems quite Scala-ish.</p>
<p>Having said that, I&#8217;m a Scala beginner &#8211; tell me if there are any obvious improvements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.disinformatics.com/blog/2010/12/14/a-google-internship-interview-question-in-scala/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Transclusion</title>
		<link>http://www.disinformatics.com/blog/2008/02/05/transclusion-2/</link>
		<comments>http://www.disinformatics.com/blog/2008/02/05/transclusion-2/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 18:31:04 +0000</pubDate>
		<dc:creator>Farhan Mannan</dc:creator>
				<category><![CDATA[informatics]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[ted nelson]]></category>
		<category><![CDATA[xanadu]]></category>

		<guid isPermaLink="false">http://disinformatics.com/blog/2008/02/05/transclusion/</guid>
		<description><![CDATA[Here&#8217;s some enlightening info about XanaduSpace. If you have no idea what&#8217;s going on, read it. Ted Nelson gave a talk at school today. He handed out some copies of ZigZag and Xanadu and demoed XanaduSpace. Having heard about it for ages and seeing demonstrations in other videos scattered across the web, it was great [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xanadu.com/XanaduSpace/btf.htm">Here&#8217;s some enlightening info about XanaduSpace</a>. If you have no idea what&#8217;s going on, read it.</p>
<p>Ted Nelson gave a talk at school today.</p>
<p>He handed out some copies of <a href="http://www.xanadu.com/zigzag/">ZigZag</a> and <a href="http://www.xanadu.com/">Xanadu</a> and demoed <a href="http://xanarama.net/">XanaduSpace</a>. Having heard about it for ages and seeing demonstrations in other videos scattered across the web, it was great to see it right there. I think a combination of seeing it materialise despite the rather long-lived smear campaign against it (the print equivalent of Googlebombing &#8220;Xanadu&#8221; for &#8220;vaporware&#8221;) and hearing Ted talk about concrete implementation details (C++, OpenGl and Python back-end, next platform will be iPhone, Flash version soon) really brought it to life.</p>
<p>The basic thread of the talk was an indignant reminder that technology was really just &#8220;<strong>packaging</strong> and <strong>conventions</strong>&#8221; and that we had learned to use kludgy solutions rather than engineering great solutions (this was blamed on <a href="http://www.bbc.co.uk/switch/them/will-techie.shtml">techies</a>). Nelson believes that the web&#8217;s infrastructure (one-way links, unsourced quotations etc.) is a shadow of what it should be, and that 1984, when Xerox PARC gave us the desktop metaphor, was when &#8220;it all went wrong&#8221;. Seems fair.</p>
<p>At age 70, having been ridiculously ahead of the curve for so long but never really achieving the recognition he deserves, Nelson continues to pursue his original projects with zeal and keen perceptiveness. Listening to his anecdotes and analogies reminded me strongly of interviews with Richard Feynman.</p>
<p>Mr Smith <a href="http://www.preoccupations.org/2008/02/ted-nelson-st-p.html">covered the talk</a>.</p>
<p><em><strong>Update</strong></em>: since writing this post, I have read <a href="http://geeks-bearing-gifts.com/">Geeks Bearing Gifts</a>, which I thoroughly recommend to anyone with any interest in computers. Nelson&#8217;s autobiography, Possiplex, is imminent: find it and read it. Coincidentally, I visited Greenwich Village in NY (where Nelson grew up) &#8211; nice place!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.disinformatics.com/blog/2008/02/05/transclusion-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

