<?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/"
	>

<channel>
	<title>Wooden-Robot.net</title>
	<atom:link href="http://wooden-robot.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://wooden-robot.net</link>
	<description>Commonsense AI, NLP, interaction design, web apps</description>
	<pubDate>Mon, 12 Apr 2010 08:41:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Editing ECLiPSe constraint logic code in the Eclipse IDE</title>
		<link>http://wooden-robot.net/2010/04/08/editing-eclipse-constraint-logic-code-in-the-eclipse-ide/</link>
		<comments>http://wooden-robot.net/2010/04/08/editing-eclipse-constraint-logic-code-in-the-eclipse-ide/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 06:13:21 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=247</guid>
		<description><![CDATA[One of our projects uses the ECLiPSe constraint logic programming language (a more powerful flavor of Prolog) in conjunction with Java (which is a good way to integrate graphics, unit testing, etc). One of the most popular developer tools for Java is the Eclipse IDE (yes, same name, totally different application), and we&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<p>One of our projects uses the <a href="http://eclipse-clp.org" target="_blank">ECLiPSe constraint logic programming language</a> (a more powerful flavor of Prolog) in conjunction with Java (which is a good way to integrate graphics, unit testing, etc). One of the most popular developer tools for Java is the <a href="http://eclipse.org">Eclipse IDE</a> (yes, same name, totally different application), and we&#8217;d like to find a similarly-powerful editor for our pure-Prolog (.pro) and ECLiPSe (.ecl) files &#8212; one that provides indicators of (im)balanced parens, coloring of built-in predicates and syntax, and maybe code completion and compiler warnings.</p>
<p>ECLiPSe had a project called Saros on sourceforge that aimed to provide all this functionality, plus a debugger. Unfortunately, I wasn&#8217;t able to get any of these features working in its 1.0 version (after installing it as a plugin in the IDE). I&#8217;ve also heard that development on Saros has stopped.</p>
<p>However, I would be happy just getting paren-balancing, and I found a way to do that in the Eclipse IDE:</p>
<ol>
<li>Go to Window | Preferences</li>
<li>Select General | Content Types in the left pane, and then on the right, select Text in the Content Types list.</li>
<li>In the File Associations list below that on the right side, you should see &#8220;*.txt (locked)&#8221;. Click the Add button and add &#8220;.ecl&#8221; when prompted for the Content Type. Do this again for .pl files (or .pro files, as I prefer, to distinguish from Perl files).</li>
<li>Back in the left pane, select General | Editors | File Associations.</li>
<li>On the right side, add &#8220;.ecl&#8221; and &#8220;.pl&#8221; (or &#8220;.pro&#8221;) if they aren&#8217;t already present.</li>
<li>Select &#8220;*.ecl&#8221; in the upper list on the right. Then in the lower listbox, if &#8220;Standalone Structured Source Editor (default)&#8221; isn&#8217;t shown, use the Add button to select &#8221;Standalone Structured Source Editor&#8221; and then click the Default button.</li>
<li>Select &#8220;*.pl&#8221; (or &#8220;*.pro&#8221;) in the upper list, and make sure it has the same default editor.</li>
<li>Click OK.</li>
</ol>
<p>Now, if you open an .ecl or .pro file using either the Java or Debug perspective, and you place the text cursor after a ) or ] that is balanced, you will see a blue rectangle around the corresponding ( or [. There is no indicator if the ) or ] is not balanced.</p>
<p>Note that if you quit the IDE and launch it again, you will get a warning dialog about &#8220;Unsupported content type in editor.&#8221; I believe that&#8217;s because we selected &#8220;Text&#8221; in the Content Types preferences - there being no way to add a content type for ecl and pro files in particular - and that this resulted in our files being &#8220;locked&#8221; to the generic text editor in the File Associations preference. However, by marking the structured text editor as the default, we override that locking, and you&#8217;ll notice that if you dismiss the warning, paren-balancing still works. So, I selected the checkbox for &#8220;Do not show this message again&#8221; in the warning. Relaunching the IDE again gives me paren-balancing with no warning dialog.</p>
<p><strong>UPDATE:</strong> Christian Wirth said on the eclipse-clp-users mailing list: &#8220;You have to install the Web Tools Project also.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/04/08/editing-eclipse-constraint-logic-code-in-the-eclipse-ide/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Is Mercurial better than SVN for source control?</title>
		<link>http://wooden-robot.net/2010/03/23/is-mercurial-better-than-svn-for-source-control/</link>
		<comments>http://wooden-robot.net/2010/03/23/is-mercurial-better-than-svn-for-source-control/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 03:21:25 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Source control]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=237</guid>
		<description><![CDATA[Joel Spolsky makes an impassioned argument that source control tool Mercurial is a much better fit for how software development works than SVN. I might make the switch after digging in more.
He also provides a Mercurial tutorial.
There are at least two plugins for the Eclipse IDE, and the more mature one seems to be HgEclipse.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joelonsoftware.com/items/2010/03/17.html" target="_blank">Joel Spolsky makes an impassioned argument that source control tool Mercurial is a much better fit for how software development works than SVN</a>. I might make the switch after digging in more.</p>
<p>He also provides a <a href="http://hginit.com/" target="_blank">Mercurial tutorial</a>.</p>
<p>There are at least two plugins for the Eclipse IDE, and<a href="http://blogs.intland.com/main/entry/20091214" target="_blank"> the more mature one</a> seems to be HgEclipse.</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/03/23/is-mercurial-better-than-svn-for-source-control/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to avoid unexpected backtracking in Prolog fail loops</title>
		<link>http://wooden-robot.net/2010/02/18/how-to-avoid-unexpected-backtracking-in-prolog-fail-loops/</link>
		<comments>http://wooden-robot.net/2010/02/18/how-to-avoid-unexpected-backtracking-in-prolog-fail-loops/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 05:39:20 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Prolog]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=232</guid>
		<description><![CDATA[A Prolog fail loop is a way of doing iteration in Prolog. For example, in this predicate (methods and functions are called predicates in Prolog because the method name is used in the predicate position of propositions used to write Prolog code), we iterate over all facts in the knowledge base that match the given [...]]]></description>
			<content:encoded><![CDATA[<p>A Prolog fail loop is a way of doing iteration in Prolog. For example, in this predicate <span style="color: gray;">(methods and functions are called predicates in Prolog because the method name is used in the predicate position of propositions used to write Prolog code)</span>, we iterate over all facts in the knowledge base that match the given &#8216;edge&#8217; pattern:</p>
<pre>buildEdges(MiddleNode, RightNode) :-
   LeftNode #&lt; MiddleNode, %ECLiPSe feature: constrain LeftNode to be an int smaller than MiddleNode
   edge(LeftNode, MiddleNode),
   addEdge(LeftNode, RightNode),
   fail.</pre>
<p>The reason that putting &#8216;fail&#8217; at the end leads to iteration is that Prolog automatically searches for other ways of satisfying conditions, unless you tell it not to. So, if there is a fact matching the &#8216;edge&#8217; pattern, and if &#8216;addEdge&#8217; also succeeds, then when the interpreter reaches &#8216;fail&#8217; it &#8220;backtracks&#8221; to the addEdge call to see if there were any unexplored ways of satisfying it (aka, it checks if there were any other &#8220;choicepoints&#8221;). If there were such unexplored options in addEdge, the interpreter tries the first one; if this succeeds, we return to &#8216;fail&#8217;; if the first one fails, it tries any others for addEdge. Once the options in addEdge are exhausted, the interpreter takes another step &#8220;upward&#8221; to see if there were any unexplored matches for the &#8216;edge&#8217; pattern.</p>
<p>As you can see, forcing backtracking by putting &#8216;fail&#8217; at the end of your conditions is one way of implementing iteration over a set of matching facts. But what you may not have expected, and what you probably don&#8217;t want, is for the interpreter to try calling &#8216;addEdge&#8217; several times before looking for the next edge match. There are two standard ways of avoiding this:</p>
<ol>
<li>Put a condition at the start of all definitions of &#8216;addEdge&#8217; that allow it to be entered only under the intended circumstances. (This isn&#8217;t a good match for the current example, because you can&#8217;t specify a condition that says &#8220;only call me once when iterating over edges&#8221;.)</li>
<li>Put a cut (denoted with an exclamation point, !, in Prolog) <strong>at the end</strong> of all definitions of addEdge. A cut tells the interpreter to forget about any other choicepoints for this call of this predicate. <a href="http://87.230.22.228/doc/tutorial/tutorial021.html#toc29" target="_blank">Other</a> <a href="http://www.amzi.com/AdventureInProlog/a14cntrl.htm" target="_blank">tutorials</a> <a href="http://www.coli.uni-saarland.de/projects/milca/courses/coal/html/node162.html" target="_blank">about fail loops</a> neglect to emphasize that the cut must be put at the end, because otherwise backtracking from the fail loop will explore any choicepoints remaining after the cut, even ones in your definitions of &#8216;addEdge&#8217;.</li>
</ol>
<p>Side note: One can replace &#8216;fail&#8217; with a condition to get do-while behavior instead of exhaustive iteration. And if one wanted to isolate a block of code for iteration (say, you want to avoid repeating the #&lt; step), one could put &#8220;<a href="http://87.230.22.228/doc/bips/kernel/control/repeat-0.html" target="_blank">repeat</a>,&#8221; at the start of the block, and then backtracking would never go above that point.</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/02/18/how-to-avoid-unexpected-backtracking-in-prolog-fail-loops/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why Palm&#8217;s webOS is the future of Android (and desktop computing)</title>
		<link>http://wooden-robot.net/2010/01/28/why-palms-webos-is-the-future-of-android-and-desktop-computing/</link>
		<comments>http://wooden-robot.net/2010/01/28/why-palms-webos-is-the-future-of-android-and-desktop-computing/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 07:53:04 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[DHTML]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[PIM]]></category>

		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=216</guid>
		<description><![CDATA[Do you connect these dots in the same way I do?

The current practice in OSs and browsers of asking the user at install time whether to proceed with the install, as a way of avoiding security threats, just doesn&#8217;t work. Users do not have the right kind of information at that time to decide.
The threat [...]]]></description>
			<content:encoded><![CDATA[<p>Do you connect these dots in the same way I do?</p>
<ol>
<li>The current practice in OSs and browsers of asking the user at install time whether to proceed with the install, as a way of avoiding security threats, just doesn&#8217;t work. Users do not have the right kind of information at that time to decide.</li>
<li>The threat of compromised systems and data loss is severe enough that consumer and enterprise OSs will have to be designed in a different way to manage installation risks. The widespread acceptance of smartphone apps indicates that smartphones will need such protection, too.</li>
<li>Google&#8217;s <a href="http://cacm.acm.org/magazines/2010/1/55768-native-client-a-sandbox-for-portable-untrusted-x86-native-code/abstract" target="_blank">NativeClient</a> <a href="http://code.google.com/p/nativeclient/" target="_blank">project</a> is a good way of handling the risk because it provides a sandbox, and it&#8217;s better than alternatives like Java and Flash because it allows apps to run faster (because the apps are compiled natively rather than into bytecode).</li>
<li>Palm&#8217;s webOS for its new smartphones has a very similar design to NativeClient (and since NativeClient is open source, could be built on top of it, for all I know). Specifically, webOS&#8217; plugin development kit (PDK) will allow allow apps written in C and C++, two languages which by themselves allow altering memory contents almost anywhere in RAM and thus open to abuse by malicious app coders, but the PDK will sandbox apps, apparently in much the same way that NativeClient does. WebOS&#8217; other interface, the Mojo SDK, allows apps written in Javascript to access data on the phone in much the same way that NativeClient&#8217;s browser plugin design would allow.</li>
<li>Thus, webOS seems to provide a glimpse into what smartphone and desktop OSs will be like in coming years, if they deal with security threats in the inspired way detailed in the NativeClient design.</li>
</ol>
<p>And there&#8217;s another force pushing Google&#8217;s Android smartphone OS in the same direction as webOS:</p>
<ol>
<li>Google always seems to prefer keeping its apps as platform-agnostic as it can by leveraging browsers when it can. The exceptions are Google Earth, GTalk, etc which must be installed either for performance reasons or to gain access to &#8220;hooks&#8221; in the OS that browsers can&#8217;t offer.</li>
<li>Google&#8217;s apps for Android are Java-based (i.e., not browser-based) for apparently no strong reason. In fact, it seems that if Google had had Palm&#8217;s insights about how a web-oriented OS could be made back when Android was being designed, then Android would be very much like webOS so that Google wouldn&#8217;t have to split its app-building competence and resources across so many platforms (of course, the iPhone and Blackberry platforms would still make their own demands). Google&#8217;s efforts to build ChromeOS is another strong bit of evidence of its desire that there be fewer platforms and that they resemble browsers more.</li>
<li>Eric Schmidt has said that Android and ChromeOS will eventually merge. I&#8217;m not sure if he came to this conclusion before or after learning about the design of Palm&#8217;s webOS, but webOS seems like a good hint of what such a merge would result in.</li>
</ol>
<p>Am I pulling too hard on thin threads, or does this paint the same strong picture for you that Palm&#8217;s webOS really is a glimpse of the future? It sure is a fun way for me to stretch my thinking about what smartphones can do and be.</p>
<p>If this is an accurate prediction, then two consequences come to mind:</p>
<ol>
<li>The current unspoken practice of web engineers looking into the Javascript source of their competitors, learning new tricks, and helping the craft of web engineering to improve will suffer because companies will want to shift their presentation and business logic out of Javascript and into compiled native code for greater performance and out of a misguided attempt to protect their intellectual property.</li>
<li>Having Google compete in the same idea space will help inspire both toward even better ideas. Of course, Google won&#8217;t buy Palm (why would it need to?), and it&#8217;s unlikely that having similar platform designs will affect the market share of either of them. As long as Palm can capture a significant share of the growing global demand for smartphones, it should be able to survive. And it&#8217;s likely to always have an advantage over Android in the beauty of its UI, given the DNA of the two companies.</li>
</ol>
<p><strong>UPDATE</strong>: <a href="http://developer.android.com/sdk/ndk/1.5_r1/index.html" target="_blank">Google released an &#8220;NDK&#8221; for Android way back in June 2009</a>, which sounds like webOS&#8217; planned PDK and also sounds like it was built on NativeClient. So, my prediction above that webOS is the future of Android has things a bit turned around.</p>
<p>Also, although the NDK seems to have a very similar design to NativeClient, and might have been built on NaCl, I&#8217;m somewhat doubtful because NaCl relies heavily on a feature known as &#8220;segmented memory&#8221; in the 386 chip architecture, and I wonder if that same feature is present in mobile CPUs such as ARM.</p>
<p><strong>UPDATE</strong>: <a href="http://ajaxian.com/archives/view-source-how-important-was-it-is-it-and-will-it-be" target="_blank">Other devs are worried that we might lose the ability to view html source</a> and thus lose one of the primary learning and innovation paths for web app devs.</p>
<ol></ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/01/28/why-palms-webos-is-the-future-of-android-and-desktop-computing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to enable TestNG launch configurations in Eclipse IDE (Windows)</title>
		<link>http://wooden-robot.net/2010/01/03/how-to-enable-testng-launch-configurations-in-eclipse-ide-windows/</link>
		<comments>http://wooden-robot.net/2010/01/03/how-to-enable-testng-launch-configurations-in-eclipse-ide-windows/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 03:10:18 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Coding style]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=210</guid>
		<description><![CDATA[When using TestNG 5.11 (and at least one earlier version, 5.9) with the Eclipse IDE 3.4.2 (Ganymede, for Windows), one can&#8217;t setup a Run configuration for TestNG in the usual way. That is, one can&#8217;t use Project &#124; Properties &#124; Run/Debug because only Java App and Java Applet options are presented there. (Of course, one [...]]]></description>
			<content:encoded><![CDATA[<p>When using TestNG 5.11 (and at least one earlier version, 5.9) with the Eclipse IDE 3.4.2 (Ganymede, for Windows), one can&#8217;t setup a Run configuration for TestNG in the usual way. That is, one can&#8217;t use Project | Properties | Run/Debug because only Java App and Java Applet options are presented there. (Of course, one has to install the TestNG plugin first for this to make any sense.)  Instead, here&#8217;s a workaround gleaned from a post by Ajay Mehra:</p>
<ol>
<li>Make sure you haven&#8217;t hidden any launch configuration types
<ol>
<li>Go to the top menu bar and select Window | Preferences.</li>
<li>In the left pane, select Run/Debug | Launching | Launch Configurations. On the right side, make sure that Java Application and TestNG are shown and not checked. (You may have to check &#8216;Filter checked launch types&#8217; temporarily in order to scroll or uncheck some items.)</li>
</ol>
</li>
<li>Make sure the class(es) you want to test have @Test annotations in them
<ol>
<li>If you want to see an example, look at the <a href="http://testng.org/doc/index.html" target="_blank">SimpleTest class definition</a> near the top of the TestNG homepage.</li>
<li>Note that in SimpleTest, it&#8217;s not necessary to include an @BeforeClass annotation anywhere, nor is it necessary to include &#8220;(groups &#8230;)&#8221; after the @Test annotations. And rather than importing all of &#8220;org.testng.annotations.*&#8221;, you may be able to get away with just importing &#8220;org.testng.annotations.Test&#8221;.</li>
<li>To support the @Test annotation, the IDE will want to add the testng-jdkNN.jar (where NN is 15 if you&#8217;re using JDK 1.5) to your project&#8217;s classpath.</li>
<li>Any methods you want to be used as tests should be marked as <strong>public,</strong> so TestNG can invoke them.
<ul>
<li>If you don&#8217;t make any test methods public, then when you run your tests, the TestNG tab near the console tab will show that zero tests were run.</li>
</ul>
</li>
</ol>
</li>
<li>Create a launch configuration for your test
<ol>
<li>Go to the top menu bar and click the down-facing black triangle to the right of the Run button (a green circle with a white triangle in it). This should trigger a dropdown menu that includes &#8220;Run Configurations&#8230;&#8221; Select it.</li>
<li>Select TestNG in the left pane, then click the New button in the upper left (the white rectangle with a yellow plus in the upper right). Enter a name for the new launch config; if your test will use just one class of test methods, that class name would probably be a good choice as a memory aid.</li>
<li>Under the Test tab, browse to the &#8220;Project&#8221; of the test, and then select a &#8220;Run&#8230;&#8221; target. (For example, if you&#8217;re trying things out with SimpleTest, you should have created a new empty project, pasted SimpleTest.java into it, and now use the Browse button for Class to select SimpleTest.java.)</li>
<li>If you need to provide any arguments to the JVM before the test is launched, do so under the Arguments tab.</li>
<li>To save your edits, click Apply. When you&#8217;re done editing, click Close (or you could execute the test by clicking Run).</li>
</ol>
</li>
<li>Verify that the test is setup correctly
<ol>
<li>Run the test by selecting the black triangle again near the green Run button, and then selecting the launch config you just named.</li>
<li>The Console tab should show
<pre>[Parser] Running:
  <em>pathToYourProject</em>\<em>ProjFolder</em>\temp-testng-customsuite.xml</pre>
<p>The name of the xml file shown here is what TestNG generates if your launch config doesn&#8217;t use the &#8220;Suite&#8221; option and you didn&#8217;t provide your own xml file.</p>
<p>Following that will be any System.out printing your test methods did, plus</p>
<pre>PASSED: <em>testMethodName</em></pre>
<p>for any of your test methods that passed.</p>
<p>Finally, there will be a summary report like this</p>
<pre>===============================================
    SimpleTest
    Tests run: 2, Failures: 0, Skips: 0
===============================================</pre>
</li>
<li>A similar, more graphical view of the summary report should be available under the TestNG tab.</li>
<li>If the report says &#8220;Tests run: 0&#8243;, double-check that your @Test annotations are on the right methods, and that those methods are public.</li>
</ol>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/01/03/how-to-enable-testng-launch-configurations-in-eclipse-ide-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Glossary and notes for Len Talmy&#8217;s work on cognitive semantics</title>
		<link>http://wooden-robot.net/2009/12/27/glossary-and-notes-for-len-talmys-work-on-cognitive-semantics/</link>
		<comments>http://wooden-robot.net/2009/12/27/glossary-and-notes-for-len-talmys-work-on-cognitive-semantics/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 06:17:30 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[AI]]></category>

		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=204</guid>
		<description><![CDATA[I&#8217;m starting to read Talmy&#8217;s work on folk concepts of space and causality, and I find that I need to keep a glossary of his specialist terms. Maybe this will be helpful to other readers of Talmy, too.
As a quick introduction, you might want to read the Wikipedia page on Force dynamics.
[Why do we think [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m starting to read Talmy&#8217;s work on folk concepts of space and causality, and I find that I need to keep a glossary of his specialist terms. Maybe this will be helpful to other readers of Talmy, too.</p>
<p>As a quick introduction, you might want to read the Wikipedia page on <a href="http://en.wikipedia.org/wiki/Force_Dynamics" target="_blank">Force dynamics</a>.</p>
<p>[Why do we think Talmy's work might be useful to us? We are looking for folk concepts of space, time, causality, and intention that we can formalize and use in a computer simulation of how people attribute causality and intentionality to figures in simple animations. Talmy's work might provide articulations of the folk concepts we are after. A primary challenge for us is to identify concepts of interest to us (i.e., those that trigger expectations or that are necessary to support explanations) , because most of the concepts that Talmy identifies are powerful generalizations of distinctions made in language but which have little apparent causative power that shapes our thinking. For example, the distinction between moving-to and moving-from seems to have little effect on our expectations of what the moving object will do next, while the distinction between contact and attachment clearly affects our expectations of how two objects will move if rotated, say, around their common center of gravity.]</p>
<p>All page references refer to his book, <em><a href="http://wings.buffalo.edu/linguistics/people/faculty/talmy/talmyweb/TCS.html" target="_blank">Toward a cognitive semantics</a></em><em>, volume 1</em>.</p>
<h2>Glossary (sorted in order of appearance, not alphabetically)</h2>
<ul>
<li><strong>veridical</strong> - appearing to be true (100c)</li>
<li><strong>factive</strong> - When two representations of the same thing are contradictory, the one that appears <em>more</em> true is called &#8220;factive&#8221; (100d)</li>
<li><strong>fictive</strong> - When two representations of the same thing are contradictory, the one that appears <em>less</em> true is called &#8220;fictive&#8221; (100d)</li>
<li><strong>fictivity</strong> - there exist multiple conflicting representations of the same thing, some of which seem more true than others</li>
<li><strong>see</strong> vs <strong>sense</strong> - When two percepts of the same thing are contradictory, and one is less palpable and thus more fictive, Talmy calls the perception of the factive one &#8220;seeing&#8221; and the perception of the fictive one &#8220;sensing&#8221;. (102a). For example, a static Pac-Man quasi-circle shape is &#8220;seen&#8221; while the dynamic alternative of a circle having a wedge cut from it is &#8220;sensed&#8221;.</li>
<li><strong>ception</strong> - A continuous conceptual space whose dimensions are all related to palpability (aka, the ability to recognize or act on something). (102b)  Intended as a replacement for arbitrary pigeon-holing of phenomena as one of sensation, perception, or conception. (139d)</li>
<li><strong>constructional</strong> vs <strong>experienced fictive motion</strong> - &#8220;Languages systematically and extensively refer to stationary circumstances with forms and constructions whose basic reference is to motion;&#8221; however, there are &#8220;differences over the degree to which such expressions evoke an actual sense or conceptualization of motion [in their speakers].&#8221; (104c)  While some speakers would report a strong sense of movement for a construction that other speakers would report feeling no such sense, there are some constructions that evoke a sense of motion in almost all speakers.</li>
<li><strong>active-determinative principle</strong> - For &#8220;some&#8221; [119b] emanation types of motion, the source role will usually be attributed to the more active or determinative candidate objects. For example, in a radiation path between the Sun and one&#8217;s hand, the Sun is perceived as the brighter of the two, and thus the more active, and thus given the role of source. &#8220;This principle accounts for the absence of any linguistic formulations that depict the sun as drawing energy from objects.&#8221; (117c) &#8220;One&#8217;s experience of the characteristics of agency may provide one with the model for the active-determinative principle&#8221; (119d)</li>
<li><strong>extramission</strong> - &#8220;the notion that sight involves something emerging from the eyes&#8221; (124b) &#8220;The conceptual model in which the Agent emits a sensory Probe appears to hold sway in the cartoon imagery [of Superman's X-ray vision].&#8221; (125b) Similarly, the expression &#8220;to look daggers at&#8221; or &#8220;the evil eye&#8221;.</li>
</ul>
<h2>Notes</h2>
<ol>
<li>When fictivity is present, the representations often differ in a single dimension. (100e)
<ul>
<li>State of occurrence - whether something is present or absent</li>
</ul>
<ul>
<li>State of change - whether something changed or was in stasis
<ul>
<li>State of motion - whether something moved or not (&#8221;stationariness&#8221;)</li>
</ul>
</li>
</ul>
</li>
<li>There is a general cognitive bias towards dynamism; i.e., things appear to move when they are in fact still, rather than things appearing to remain still when they in fact have moved. (101b)
<ul>
<li>For example, an utterance and a belief might be contradictory, and where greater credence is given to the belief, and the utterance indicates movement while the belief indicates stationariness: &#8220;That mountain range goes from Canada to Mexico.&#8221;</li>
</ul>
</li>
<li>&#8220;Fictive motion in language encompasses a number of relatively distinct categories&#8221; (103c), including:
<ol>
<li><strong>Emanation</strong> - &#8221;The fictive motion of something intangible emerging from a source.&#8221; (105d) &#8220;In most subtypes, the entity continues along its emanation path and terminates by impinging on some distal object.&#8221; Note the reliance on distal objects in all the examples below.
<ol>
<li><strong>Orientation paths</strong> - &#8220;A continuous linear intangible entity emerging from the front of some object and moving steadily away from it.&#8221; E.g., &#8220;She crossed in front of the TV.&#8221;
<ol>
<li><strong>Prospect paths</strong> - e.g., English verbs &#8220;face&#8221; and &#8220;look out&#8221;</li>
<li><strong>Alignment paths</strong> - e.g., English verb &#8220;lie&#8221; with path prepositions &#8220;toward&#8221; or &#8220;away from&#8221;</li>
<li><strong>Demonstrative paths</strong> - e.g., English verb &#8220;point&#8221; with path prepositions &#8220;toward&#8221; or &#8220;away from&#8221;</li>
<li><strong>Targeting paths</strong> - An agent aims an object that has a front so that the front follows a desired path &#8220;relative to the object&#8217;s surroundings&#8221; (109d)</li>
<li><strong>Line of sight</strong> - E.g., English verbs &#8220;look&#8221; and &#8220;turn&#8221; with path prepositions &#8221;toward&#8221; or &#8220;away from&#8221;</li>
</ol>
</li>
<li><strong>Radiation paths</strong> - (skipped pp. 111-116)</li>
<li><strong>Shadow paths</strong> -</li>
<li><strong>Sensory paths</strong> -</li>
</ol>
</li>
<li><strong>Pattern paths</strong> - (skipped pp. 129-138)</li>
<li><strong>Frame-relative motion</strong> -</li>
<li><strong>Advent paths</strong> -
<ol>
<li><strong>Site manifestation</strong> -</li>
<li><strong>Site arrival</strong> -</li>
</ol>
</li>
<li><strong>Access paths</strong> -</li>
<li><strong>Coextension paths</strong> (e.g., see mountain range example above) -
<ol>
<li>Talmy83: Virtual motion</li>
<li>Jackendoff83: Extension</li>
<li>Langacker87: Abstract motion</li>
<li>Matsumoto96: Subjective motion</li>
</ol>
</li>
</ol>
</li>
<li>&#8220;Palmer (1980) and Palmer and Bucher (1981) found that in certain arrays consisting of co-oriented equilateral triangles, subjects perceive all the triangles at once pointing by turns in the direction of one or another of their common vertices. Moving the array in the direction of one of the common vertices biases the perception of the pointing to be in the direction of that vertex.&#8221; (123b)</li>
<li>Anthropologist Pascal Boyer&#8217;s study of &#8220;ghost physics&#8221; (1994) - Belief systems characteristically permit some exceptions to normal physics, such as invisibility or passing through walls, but not other (barely!) conceivable exceptions such as &#8220;reverse causality&#8221;.</li>
<li>The semi-abstract level of palpability (146)
<ol>
<li>Sensing of object structure, e.g. envelope/interior similarity across magnitudes of volcano and thimble</li>
<li>Sensing of path structure, e.g., similarity regardless of shape of &#8220;across&#8221; when a deer runs straight across a field or zig-zags across it</li>
<li>Sensing of reference frames: earth-based, object-based, or viewer-based</li>
<li>Sensing of structural history and future (object is stationary), e.g. a broken flower pot</li>
<li>Sensing of projected paths (object is moving), e.g. a thrown ball currently arcing through the air, or a path through a crowded restaurant</li>
<li>Sensing of force dynamics, e.g. perceived forces among objects thought to naturally be in motion or at rest. Jepson and Richards (93)  found a sideways T is thought to have its two parts &#8220;attached&#8221; while in an upside-down T, the two parts are perceived merely to be in &#8220;contact&#8221;. [See Siskind's AI work on attributing support vs attachment.]</li>
</ol>
</li>
<li>(skipped pp. 154-172, which is the rest of the chapter on Fictive Motion in Language and &#8220;Ception&#8221;)</li>
<li><strong>Motion-aspect formulas</strong> - e.g., Be at, Move to, &#8230;, Move from-along (215-6, 245-52)</li>
<li>(skipped to 409)</li>
<li><strong>Force dynamics</strong> (to be continued)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/12/27/glossary-and-notes-for-len-talmys-work-on-cognitive-semantics/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Good advice about how to hire programmers</title>
		<link>http://wooden-robot.net/2009/12/27/good-advice-about-how-to-hire-programmers/</link>
		<comments>http://wooden-robot.net/2009/12/27/good-advice-about-how-to-hire-programmers/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 09:41:08 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/2009/12/27/good-advice-about-how-to-hire-programmers/</guid>
		<description><![CDATA[http://www.aaronsw.com/weblog/hiring
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.aaronsw.com/weblog/hiring">http://www.aaronsw.com/weblog/hiring</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/12/27/good-advice-about-how-to-hire-programmers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Porting Amzi prolog to ECLiPSe</title>
		<link>http://wooden-robot.net/2009/12/02/porting-amzi-prolog-to-eclipse/</link>
		<comments>http://wooden-robot.net/2009/12/02/porting-amzi-prolog-to-eclipse/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 05:00:47 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=199</guid>
		<description><![CDATA[While Amzi Prolog has the best debugger I&#8217;ve seen for any flavor of Prolog (and I&#8217;ve evaluated many flavors), it&#8217;s become clear that my project needs the ability to constrain variables before committing to particular values. This is the key feature difference that leads me to want to port to ECLiPSe, a flavor of Prolog [...]]]></description>
			<content:encoded><![CDATA[<p>While <a href="http://www.amzi.com/" target="_blank">Amzi Prolog</a> has the best debugger I&#8217;ve seen for any flavor of Prolog (and I&#8217;ve evaluated <a href="http://wooden-robot.net/2008/10/15/comparison-of-tools-for-rule-based-inference/" target="_blank">many flavors</a>), it&#8217;s become clear that my project needs the ability to constrain variables before committing to particular values. This is the key feature difference that leads me to want to port to <a href="http://eclipse-clp.org" target="_blank">ECLiPSe</a>, a flavor of Prolog where constraint propagation is the main focus. And there are other features of ECLiPSe that are very appealing:</p>
<ul>
<li>Easily embedded in a Java application (via a jar that implements a JNI bridge to the native ECLiPSe executable) that allows for loose coupling through queues-and-listeners or even asynchronous queues.</li>
<li>Similar library support for manipulating terms, strings, lists, etc as other Prolog flavors</li>
<li>An Eclipse IDE plugin, Saros. (It&#8217;s not quite usable for me in its current stage but I hear a new version is imminent. And it has a Tk-based UI including debugger that&#8217;s pretty good.)</li>
</ul>
<p>Here are the changes I had to make to my Amzi code so it would run in ECLiPSe:</p>
<ul>
<li>Changed all calls using <code>consult/1</code> or <code>debug_consult</code> to <code>[...comma-separated filenames...]</code></li>
<li>Changed &#8216;/&#8217; when used in predicate names to &#8216;_&#8217;</li>
<li>Changed <code>import(list)</code> to <code>import(list<strong>s</strong>)</code></li>
<li>Changed all <code>abolish</code> calls to <code>retractall</code> (although this doesn&#8217;t seem absolutely necessary)</li>
<li>Changed <code>string_term(String,Term)</code> to <code>term_string(Term,String)</code></li>
<li>Changed <code>stringlist_concat</code> calls to <code>concat_string</code></li>
<li>Discovered that many of my variables were singletons, and changed them to start with &#8216;_&#8217; (so they would be self-documenting singletons and not trigger a compiler warning)</li>
<li>Added <code>dynamic</code> declarations for all my dynamic predicates (Amzi probably doesn&#8217;t provide a warning when these are asserted or retracted without having been so declared)</li>
<li>Changed my <code>(retractall(<em>predicate(_,&#8230;)</em>) ; true)</code> pattern to just <code>retractall(<em>predicate(_,&#8230;)</em>)</code>, since retractall never fails in ECLiPSe</li>
</ul>
<p>I&#8217;m grateful to Dennis Merrit and Chip Eastman of Amzi for all their help in getting my initial Amzi app working, and for their excellent documentation of Prolog and Building Expert Systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/12/02/porting-amzi-prolog-to-eclipse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Evaluating animation toolkits for &#8216;perception of intentionality&#8217; simulations</title>
		<link>http://wooden-robot.net/2009/10/13/evaluating-animation-toolkits-for-perception-of-intentionality-simulations/</link>
		<comments>http://wooden-robot.net/2009/10/13/evaluating-animation-toolkits-for-perception-of-intentionality-simulations/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 13:32:49 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[AI]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=186</guid>
		<description><![CDATA[Our team needs to create 2D animations that trigger the &#8216;perception of causality&#8217; or the &#8216;perception of intentionality&#8217; through the movement of simple shapes. (Jointed figures with faces and props can come later.) The prototypical example of such animation is the one Heider and Simmel used in their experiments in 1944, since then transcribed into [...]]]></description>
			<content:encoded><![CDATA[<p>Our team needs to create 2D animations that trigger the &#8216;perception of causality&#8217; or the &#8216;perception of intentionality&#8217; through the movement of simple shapes. (Jointed figures with faces and props can come later.) The prototypical example of such animation is the one Heider and Simmel used in their experiments in 1944, since then <a href="http://anthropomorphism.org/img/Heider_Flash.swf" target="_blank">transcribed into Flash</a>.</p>
<p>I&#8217;ve been evaluating animation toolkits with a few objectives in mind:</p>
<ol>
<li>Creating such 2D animations must be as easy as possible</li>
<li>It must be possible to inspect such an animation programmatically to determine where each shape is in each frame. (We are creating a simulation that will &#8220;watch&#8221; the same animation, but instead of observing pixels it will read such data.)</li>
<li>The animations must be easily distributed, such as being able to run in most browsers on most platforms using no plugin or only a commonly installed one</li>
</ol>
<p>Here are my evaluations.</p>
<p><a href="http://www.adobe.com/products/flash/" target="_blank"><strong>Adobe CS4 Flash Professional</strong></a></p>
<p>PROs</p>
<ul>
<li>Flash files (SWF file format) are playable on most platforms using the Flash Player browser plugin, which most people already have installed</li>
<li>There are many online tutorials about how to create animation using this toolkit, and expertise with the tool is widespread (so it would be easy to find help or hire someone)</li>
<li>The &#8220;motion tween&#8221; feature available in the CS4 version eliminates the need to copy/paste/tweak each frame into the next frame; instead, one just drags from the starting position to the ending position, and can add arbitrary curvature at many points in between by pulling on edit points.</li>
<li>Although it&#8217;s a binary file format, <a href="http://www.adobe.com/devnet/swf/" target="_blank">the SWF format has been documented by Adobe</a>, and there is an open-source Java library, <a href="http://jswiff.com/" target="_blank">JSwiff</a>, that provides handy wrapper accessors. It even has a <a href="http://forum.jswiff.com/forums/list.page" target="_blank">forum for questions about JSwiff</a>, but answers seem infrequent.
<ul>
<li>This library is a little out of date, since it refuses to process files using SWF versions after 8, but the code seems capable of handling version 10 just fine (version 10 is what CS4 Flash Pro generates). To use the library with more recent SWF versions, it seems one has to edit the source (included in the download) by changing SWFDocument.setVersion to eliminate the max version check, and then build one&#8217;s own jar file. This method refers to private member &#8220;header&#8221;, so one can&#8217;t just subclass SWFDocument and override the method.</li>
<li>The JSwiff site also offers a separate download for its <a href="http://jswiff.com/download/index.jsp" target="_blank">inspector.bat, which provides a GUI for inspecting all tag content of a SWF</a>. Surprisingly, it works on SWF version 10; I&#8217;m not sure how it gets around the version check.</li>
<li>Note: There is another Java library, <a href="http://sourceforge.net/projects/javaswf/" target="_blank">JavaSWF</a>, but work on it seems to have stopped around 2005 and it doesn&#8217;t handle recent updates to the SWF file format such as the DefineShape4 tag. There is a <a href="http://tech.groups.yahoo.com/group/JavaSWF-Support/" target="_blank">JavaSWF Yahoo group</a>, but it seems answers are rarely provided for any questions in recent years.</li>
</ul>
</li>
</ul>
<p>CONs</p>
<ul>
<li>Adobe&#8217;s tool costs US$700.</li>
<li>There is an option to <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/motionXSD.html" target="_blank">Export Motion XML</a>, which seems like a good alternative to the Java wrapper, but despite multiple attempts I couldn&#8217;t get it to include information about each frame of my test animation.</li>
</ul>
<p><a href="http://www.allwebdesignresources.com/webdesignblogs/graphics/flash-alternatives-ultimate-list-of-flash-like-animation-software/" target="_blank"><strong>Alternative SWF toolkits</strong></a></p>
<p>For example,</p>
<p style="padding-left: 30px;"><a href="http://my.smithmicro.com/mac/anime/index.html" target="_blank">AnimeStudio Debut6</a></p>
<p style="padding-left: 30px;"><a href="http://www.swishzone.com/index.php?area=products&amp;product=max_mini" target="_blank">Swish MaxMini</a></p>
<p style="padding-left: 30px;"><a href="http://synfig.org/" target="_blank">Synfig</a></p>
<p style="padding-left: 30px;"><a href="http://www.toufee.com/" target="_blank">Toufee</a></p>
<p>PROs</p>
<ul>
<li>At US$50-150, much more affordable than Adobe&#8217;s toolkit</li>
</ul>
<p>CONs</p>
<ul>
<li>Harder to use than Adobe&#8217;s toolkit because they require copy/paste/tweak of each frame of motion, and there is  no motion guide unless one sketches a path using the drawing tool and then erases that path.</li>
<li>Toufee&#8217;s min frame rate is 1 frame/sec, which is far too slow for my needs. It also has a number of bugs such as having random transition effects on by default, and making it impossible to configure an object to disappear faster than in 5 sec in the first frame</li>
<li>Although Synfig is an open-source SWF-creating toolkit, which would otherwise make it very attractive, it has such a convoluted install process for Windows that I&#8217;m not willing to put my time into evaluating it further. It seems likely that it could just break someday, and there would be too little interest in Windows users to expect them to fix it.</li>
</ul>
<p><strong>Alternative web-based animation platforms</strong></p>
<p>For example,</p>
<p style="padding-left: 30px;">HTML5&#8217;s canvas element + Javascript</p>
<p style="padding-left: 30px;">Java</p>
<p style="padding-left: 30px;">Microsoft Silverlight</p>
<p>PROs</p>
<ul>
<li>Inexpensive (free) toolkits</li>
<li>Easily distributed and demo&#8217;d</li>
</ul>
<p>CONs</p>
<ul>
<li>Would require investing significant time or hiring funds into programming animations largely from scratch</li>
<li>Would require significant effort to design a way that an outside application could inspect what objects are depicted and what is happening</li>
</ul>
<p><a href="http://www.k-sketch.org/" target="_blank"><strong>K-Sketch</strong></a></p>
<p>PROs</p>
<ul>
<li>Free, open-source, and allows for easy creation of motion paths</li>
<li>Allows export to SWF</li>
</ul>
<p>CONs</p>
<ul>
<li>Motion paths aren&#8217;t editable &#8212; one needs a very steady hand</li>
<li>Current release won&#8217;t run on my XP machine, and on my Vista machine the lasso selection tool doesn&#8217;t work, which means I can&#8217;t create any motion paths. Not actively supported right now, but that might change soon.</li>
</ul>
<p><strong>Bottom line:</strong> Assuming one can afford Adobe&#8217;s Flash toolkit, the combination of it and the Java wrapper seem like a very workable solution.</p>
<p><strong>Tip:</strong> If you need to control the playback of an SWF using Java, it seems the best option is a hack where a native SWF player like XULRunner is controlled by Java by injecting Javascript. Have a look at the <a href="http://java.dzone.com/announcements/dj-native-swing-098-web" target="_blank">DJ Native Swing project</a>. It&#8217;s hosted on Sourceforge and has <a href="https://sourceforge.net/projects/djproject/forums" target="_blank">discussion forums</a> there.</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/10/13/evaluating-animation-toolkits-for-perception-of-intentionality-simulations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A font for eco-friendly printing</title>
		<link>http://wooden-robot.net/2009/08/05/a-font-for-eco-friendly-printing/</link>
		<comments>http://wooden-robot.net/2009/08/05/a-font-for-eco-friendly-printing/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 03:08:32 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Interaction Design]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=182</guid>
		<description><![CDATA[So you already print double-sided or reuse single-sided prints? You can go even further in your quest for eco-friendly printing.
A font has been developed that reduces the amount of toner used while minimizing loss of readability. The download page includes tips on how to install on a variety of platforms, and here&#8217;s a tip for [...]]]></description>
			<content:encoded><![CDATA[<p>So you already print double-sided or reuse single-sided prints? You can go even further in your quest for eco-friendly printing.</p>
<p><a href="http://www.ecofont.eu/ecofont_en.html" target="_blank">A font has been developed that reduces the amount of toner used while minimizing loss of readability</a>. The download page includes tips on how to install on a variety of platforms, and here&#8217;s a tip for <a href="http://winse7en.blogspot.com/2009/01/how-to-install-font-in-windows-7.html" target="_blank">installing a font in Windows 7</a>. Note that after clicking the &#8220;Install&#8221; button for a font, there is no indication of success beyond the Install button becoming disabled &#8212; although you can open the Fonts control panel to verify success.</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/08/05/a-font-for-eco-friendly-printing/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
