<?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>Fri, 19 Feb 2010 07:42:44 +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>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>
		<item>
		<title>Open a page in the default browser following a schedule</title>
		<link>http://wooden-robot.net/2009/06/07/open-a-page-in-the-default-browser-following-a-schedule/</link>
		<comments>http://wooden-robot.net/2009/06/07/open-a-page-in-the-default-browser-following-a-schedule/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 01:37:46 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[MSWindows]]></category>

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

		<guid isPermaLink="false">http://wooden-robot.net/?p=177</guid>
		<description><![CDATA[The notification component of our wiki (plone) isn&#8217;t useful enough to bother with, so as a workaround I view its &#8220;Recent Changes&#8221; page on a regular basis. Well, as regularly as I can remember, which hasn&#8217;t been regular enough. So now I use Windows7&#8217;s Task Scheduler to open the page for me on a repeating [...]]]></description>
			<content:encoded><![CDATA[<p>The notification component of our wiki (plone) isn&#8217;t useful enough to bother with, so as a workaround I view its &#8220;Recent Changes&#8221; page on a regular basis. Well, as regularly as I can remember, which hasn&#8217;t been regular enough. So now I use Windows7&#8217;s Task Scheduler to open the page for me on a repeating schedule.</p>
<p>This should also be useful for catching regular Internet radio programs.</p>
<p>Steps:</p>
<ol>
<li>Start | All Programs | Admin Tools | Task Scheduler | Create Task (in far right pane)</li>
<li>General tab
<ul>
<li>Enter a name you&#8217;ll recognize later</li>
</ul>
</li>
<li>Triggers tab | New&#8230;
<ul>
<li>Enter when the task should occur</li>
</ul>
</li>
<li>Actions tab | New&#8230;
<ul>
<li>Action = Start a Program</li>
</ul>
<ul>
<li>Program/script = rundll32</li>
</ul>
<ul>
<li>Arguments = url.dll,FileProtocolHandler http://yourFavoriteSiteHere.net</li>
</ul>
</li>
<li>Conditions tab
<ul>
<li>Start only if the computer is on AC power =&gt; off</li>
</ul>
<ul>
<li>Wake the computer to run this task =&gt; on</li>
</ul>
</li>
<li>Settings tab
<ul>
<li>Run as soon as possible after scheduled start is missed =&gt; on</li>
</ul>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/06/07/open-a-page-in-the-default-browser-following-a-schedule/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Portable Windows with/without admin privilege</title>
		<link>http://wooden-robot.net/2009/05/26/portable-windows-withwithout-admin-privilege/</link>
		<comments>http://wooden-robot.net/2009/05/26/portable-windows-withwithout-admin-privilege/#comments</comments>
		<pubDate>Wed, 27 May 2009 02:57:25 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[MSWindows]]></category>

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

		<guid isPermaLink="false">http://wooden-robot.net/?p=145</guid>
		<description><![CDATA[Update: SORRY! It turns out that VirtualBox ties its configuration very closely to specifics of its host machine (such as through the MAC address), so I have to back away from the &#8220;portable&#8221; claim in this post&#8217;s title. Until VirtualBox realizes the value to them of supporting portability, using VirtualBox won&#8217;t actually help you go [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #ff0000;">Update: SORRY! It turns out that VirtualBox ties its configuration very closely to specifics of its host machine (such as through the MAC address), so I have to back away from the &#8220;portable&#8221; claim in this post&#8217;s title. Until VirtualBox realizes the value to them of supporting portability, using VirtualBox won&#8217;t actually help you go portable.</span></strong></p>
<p>Previously, I described how to get some freedom from the &#8220;no admin privilege&#8221; restriction that many workplace computers have. That technique involved <a href="http://wooden-robot.net/2009/03/07/going-portable-as-an-alternative-to-using-a-remote-desktop/" target="_blank">running specially-built versions of one&#8217;s applications from a thumbdrive</a>. After trying that for a month or more, I grew tired of the following limitations:</p>
<ul>
<li>Many useful apps aren&#8217;t built to run from a thumbdrive, often because they use the registry</li>
<li>Going back to Firefox from Chrome wasn&#8217;t a good fit for me (and Chrome isn&#8217;t really portable yet)</li>
<li>One can&#8217;t control default applications; for example, one can&#8217;t directly open links in messages in portable Thunderbird using one&#8217;s portable browser</li>
</ul>
<p>There is a framework called qemu that allows running an entire operating system from a thumbdrive, and it can do so in a mode that doesn&#8217;t require admin privilege. But this mode can&#8217;t access USB peripherals like keyboards, mice, and other drives connected to the host computer. The final deciding factor against qemu for me is that OSs make many writes to the storage they boot from, and thumbdrives allow only thousands of writes before their storage capability degrades.</p>
<p>If you really want to try qemu before my final solution, here&#8217;s what I tried with it:</p>
<ol>
<li>Install <a href="http://www.portablefreeware.com/?id=640" target="_blank">Qemu manager</a> on usb</li>
<li>Set VM RAM to 512MB</li>
<li>Give the VM whatever name you want, and whatever OS label you want&#8230;I used &#8220;Windows7Portable&#8221; for both</li>
<li>Start VM</li>
<li>In VM/Qemu Client, click CD Drive button in menu bar and browse to your Windows 7 RC ISO file</li>
<li>Wait while OS installer gets going&#8230;I had to quit and go to bed before it finished</li>
</ol>
<p>Here are some related links that were helpful:</p>
<ul>
<li><a href="http://www.davereyn.co.uk/download.htm" target="_blank">http://www.davereyn.co.uk/download.htm</a></li>
<li><a href="http://www.portablefreeware.com/forums/viewtopic.php?p=11773" target="_blank">http://www.portablefreeware.com/forums/viewtopic.php?p=11773</a></li>
<li>h<a href="ttp://www.techbeta.org/portable-apps/portable-virtual-box/" target="_blank">ttp://www.techbeta.org/portable-apps/portable-virtual-box/</a></li>
<li><a href="http://forums.virtualbox.org/viewtopic.php?p=4060" target="_blank">http://forums.virtualbox.org/viewtopic.php?p=4060</a></li>
<li><a href="http://portableapps.com/node/8191" target="_blank">http://portableapps.com/node/8191</a></li>
<li><a href="http://homepage3.nifty.com/takeda-toshiya/qemu/" target="_blank">http://homepage3.nifty.com/takeda-toshiya/qemu/</a></li>
<li><a href="http://qemu-forum.ipi.fi/viewtopic.php?f=5&amp;t=4994" target="_blank">http://qemu-forum.ipi.fi/viewtopic.php?f=5&amp;t=4994</a></li>
<li><a href="http://www.pendrivelinux.com/creating-a-portable-qemu-ubuntu-orca-for-the-blind/" target="_blank">http://www.pendrivelinux.com/creating-a-portable-qemu-ubuntu-orca-for-the-blind/</a></li>
<li>local readme: file:///C:/Users/david/Desktop/qemu-0.9.1-windows/qemu-0.9.1-windows/qemu-doc.html#SEC5</li>
</ul>
<p>Because qemu would not be able to use usb-connected keyboard and mouse, because I&#8217;d have to copy it to a new thumbdrive fairly often, and because it would be pretty slow by most accounts, I decided to give up on the &#8220;no admin privilege required&#8221; goal. Instead, I asked my IT dept to install <a href="http://www.virtualbox.org/wiki/Downloads" target="_blank">VirtualBox</a>. The following steps were inspired by a <a href="http://lifehacker.com/5204434/the-beginners-guide-to-creating-virtual-machines-with-virtualbox" target="_blank">Lifehacker</a> post.</p>
<ol>
<li>Get a portable hard drive. I got a Maxtor 160GB &#8220;Basics&#8221; model for about US$60.</li>
<li>Plug in the drive to any machine you plan to use where you don&#8217;t have full control, then check that you can write to it. (For example, right-click in the drive contents shown in Windows Explorer and choose New | Text Document.) If you can&#8217;t write to it, ask your IT dept to grant you write permission for it.</li>
<li>If you&#8217;re going to overwrite a virtual disk file you may already have on the portable drive, and you use Chrome, be sure to export your bookmarks and open tabs to the host first. (ouch)</li>
<li>Have VirtualBox installed. Then copy its .VirtualBox directory to your portable hard drive.</li>
<li>Start VirtualBox and go to File | Preferences | General. Change &#8220;Default Hard Disk Folder&#8221; and &#8220;Default Machine Folder&#8221; to .VirtualBox\HardDisks and .VirtualBox\Machines on your portable drive.</li>
<li>In VirtualBox, press the New button.</li>
<li>Click through the Next buttons, including leaving virtual memory at 512M.</li>
<li>Click through more Next buttons, including the creation of a new boot (virtual) hard drive of size 20GB. This virtual drive will be kept in .VirtualBox\HardDisks</li>
<li>Choose Dynamically-Sized storage</li>
<li>Take a lunch break while the VDI is created. I also created a brief &#8220;reward if returned&#8221; text file with contact info at the root of the portable drive.</li>
<li>Once your virtual drive is created, click the Settings button, then the CD/DVD tab and the Add button, and browse to the ISO file of the OS you want to run in the virtual machine. For me, this was Windows 7 RC and my &#8220;host&#8221; is Windows XP. Click Ok and return to the main VirtualBox window.</li>
<li>Click the Start button. You should eventually see the OS installation prompts. Answer the prompts the way you would if you were installing to a machine sitting right next to your current one and on the same network.</li>
<li>When the OS has been installed (it may need to reboot itself within the window a couple times, but won&#8217;t affect the rest of your computer), go to Devices and select Install Guest Additions. This will make it much easier to use your keyboard and mouse. (If you have difficulty getting to the menu, hit the Ctrl key on the right of your keyboard and then try again.)</li>
<li>Once the OS is installed, you can move or delete the ISO file. If VirtualBox complains about not being able to find the ISO file, just use the button to remove it from the CD/DVD mounts.</li>
<li>To get access to folders on the host machine:
<ol>
<li><a href="http://lifehacker.com/software/mac-os-x/how-to-mount-a-windows-shared-folder-on-your-mac-247148.php" target="_blank">Turn on sharing</a> for each of the folders you want to access.</li>
<li>In your VM window, go to Devices | Shared Folders. The &#8220;Folder Path&#8221; browse button should allow you to select one of the folders you just shared</li>
<li>To make the shared folder appear among the drives shown under Computer in your VM OS (&#8221;the guest machine&#8221;), go to the Start menu, type in &#8220;cmd&#8221;, and then type in &#8220;net use s: \\vboxsrv\MyHostFolder&#8221; where MyHostFolder is replaced by the name of a folder you shared, and where s: is replaced by a drive letter not already in use.</li>
</ol>
</li>
<li>You should now be able to copy all the data folders from your host to the guest.</li>
<li>Go ahead and install all the apps you need on the guest. I have some recommendations:
<ol>
<li>Do not install an antivirus program. They can make your guest unusable by turning its display to snow and ignoring your commands. This is the most significant sacrifice I&#8217;ve encountered so far.</li>
<li>Use Mozy to backup your data. The first 2GB is free, and you won&#8217;t have to remember to backup again.</li>
<li>Windows Explorer settings
<ul>
<li>Change default folder to Computer
<ol>
<li>Right-click on Windows Explorer in taskbar</li>
<li>When &#8220;Windows Explorer&#8221; appears in the &#8220;jump list&#8221;, right-click on it and select Properties</li>
<li>For Target, enter
<pre>%windir%\explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}</pre>
</li>
</ol>
</li>
<li>Organize | Folder and Search Options | View
<ul>
<li>Show hidden files, folders, and drives =&gt; checked</li>
<li>Hide extensions for known file types =&gt; NOT checked</li>
<li>click Apply to Folders and have it apply to all folders</li>
</ul>
</li>
</ul>
</li>
<li>Control Panel | Programs | Turn Windows features on or off | Games =&gt; NOT checked</li>
<li>Control Panel | Taskbar and Start Menu | Start Menu | Customize
<ul>
<li>Computer, Control Panel, Personal folder = &gt; Display as menu</li>
<li>Documents, Games, Music, Pictures =&gt; Don&#8217;t display</li>
<li>Run =&gt; checked</li>
<li>System admin tools =&gt; Display in All Programs and the Start menu</li>
<li>Use large icons =&gt; NOT checked</li>
</ul>
</li>
<li>Pin to taskbar: Cmd shell, Calculator, CharMap</li>
<li>Set built-in Windows Defender (anti malware) to run everyday over lunchtime instead of at 2am, since the portable drive may be disconnected overnight.</li>
<li>Media players like Winamp stutter when run in a VM. I run them from the host instead.</li>
</ol>
</li>
<li>If some of the options for setting screen resolution in your guest are disabled, you might be able to enable them by running this in a cmd window in the host:
<pre>C:\Program Files\Sun\xVM VirtualBox&gt;VBoxManage setextradata global GUI/MaxGuestResolution any</pre>
</li>
<li>Whenever you need to take the portable drive with you, go to Machine | Close | Save Machine State. All your open windows and state will be saved and the VM will close. Quit VirtualBox so it doesn&#8217;t hold onto the VDI file on the drive, then unmount the drive via Safely Remove Hardware. If something still won&#8217;t let you unmount, then you may have to shutdown the host.</li>
<li>I have been closing down my VM every night, because when I&#8217;ve allowed it to run for several days before shutting down, VirtualBox seems to get stuck in a &#8220;stopping&#8221; state. It&#8217;s not clear if this is a bug in VirtualBox or a behavior in Windows 7 that can be configured not to happen.</li>
<li>Finally, as a note to myself, here are some preferred Win7 settings and applications:
<ol>
<li>Desktop context menu | View | Small icons</li>
<li>Unpin Windows Media and IE from taskbar</li>
<li>Taskbar properties:
<ol>
<li>Use small icons</li>
<li>Dock at bottom</li>
<li>Never combine/stack buttons</li>
</ol>
</li>
<li>My favorite apps:
<ul>
<li><a href="http://java.sun.com/javase/downloads/index.jsp" target="_blank">Java 1.6 SDK with Netbeans</a></li>
<li><a href="http://dev.chromium.org/getting-involved/dev-channel" target="_blank">Chrome</a> from the dev channel
<ul>
<li>Create a shortcut and append &#8211;enable-sync to the Target value</li>
<li>While I would like to pin the shortcut to the taskbar, I&#8217;m not sure the &#8211;enable-sync flag would survive that, so I put the shortcut in the Startup folder instead. (My bookmarks on different machines have been out of sync for a few days, and I suspect this is because I was starting the browser from the taskbar.)</li>
<li><a href="http://arienh4.net/AdSweep.crx" target="_blank">Install AdSweep ad-blocker extension by clicking here</a></li>
<li>under (wrench menu)
<ul>
<li>Turn on syncing of bookmarks</li>
<li>Always show bookmarks bar</li>
<li>under Options
<ul>
<li>under Basics
<ul>
<li><span style="background-color: #ffffff;">On startup | Restore the pages that were open last</span></li>
<li><span style="background-color: #ffffff;">Home page | Show Home button on the toolbar =&gt; off</span></li>
</ul>
</li>
<li><span style="background-color: #ffffff;">under Personal Stuff</span>
<ul>
<li><span style="background-color: #ffffff;">Passwords | Offer to save</span></li>
<li><span style="background-color: #ffffff;">Themes | Get Themes | Themes by Google | Greyscale</span></li>
</ul>
</li>
<li>under Under the Hood
<ul>
<li>Download location | Desktop</li>
<li>Ask where to save each file before downloading =&gt; off</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Right-click on these tabs and select Pin to tab:
<ul>
<li><span style="background-color: #ffffff;">Evernote</span></li>
<li><span style="background-color: #ffffff;">Gmail</span></li>
<li><span style="background-color: #ffffff;">Gmail calendar</span></li>
<li><span style="background-color: #ffffff;">Google reader</span></li>
</ul>
</li>
<li>Right-click in address box and select Edit Search Engines, then change these keywords:
<ul>
<li><span style="background-color: #ffffff;">Wikipedia =&gt; w</span></li>
<li><span style="background-color: #ffffff;">Google Scholar =&gt; s</span></li>
<li><span style="background-color: #ffffff;">Lifehacker =&gt; l (small L)</span></li>
<li><span style="background-color: #ffffff;">Amazon =&gt; a</span></li>
<li><span style="background-color: #ffffff;">Google groups =&gt; g</span></li>
<li><span style="background-color: #ffffff;">Download.com =&gt; d</span></li>
<li><span style="background-color: #ffffff;">Google image search =&gt; i</span></li>
<li><span style="background-color: #ffffff;">Youtube =&gt; y</span></li>
<li><span style="background-color: #ffffff;">Ebay =&gt; e</span></li>
</ul>
</li>
<li>Wishlist: Save session/open-tabs, Pinned tabs, and Search Engine Settings to Google bookmarks or some obvious file that I could backup</li>
<li>Wishlist: An official theme that matches my Windows default theme!</li>
</ul>
</li>
<li><a href="https://mozy.com/account/download" target="_blank">Mozy</a>
<ul>
<li>I keep all my files in 4 desktop folders; I backup only parts of these:
<ul>
<li>Business</li>
<li>Papers: Articles by others in PDF and HTML format</li>
<li>Projects: Workspaces for IDEs, Todo lists, etc</li>
<li>Tools: Portable apps, Printer drivers, Installers</li>
</ul>
</li>
<li>Schedule | Alert me if a backup hasn&#8217;t happened in this many days =&gt; 1</li>
<li>Options
<ul>
<li>Notify me when a backup starts =&gt; off</li>
<li>Show status when a backup successfully completes =&gt; off</li>
</ul>
</li>
</ul>
</li>
<li>portable Thunderbird email client with Lightning calendar extension
<ul>
<li>Pin to taskbar</li>
</ul>
</li>
<li><a href="http://notepad-plus.sourceforge.net/uk/site.htm" target="_blank">Notepad++</a>
<ul>
<li>Pin to taskbar</li>
<li>Settings | Preferences
<ul>
<li>Global
<ul>
<li>Toolbar | Hide =&gt; checked</li>
<li>Tab bar | Vertical =&gt; checked</li>
<li>Tab bar | Enable close button on each tab =&gt; checked</li>
</ul>
</li>
<li>Misc | Remember current session for next launch =&gt; checked</li>
</ul>
</li>
</ul>
</li>
<li>portable PDF XChange Viewer
<ul>
<li>Pin to taskbar</li>
</ul>
</li>
<li><a href="http://www.izarc.org/download.html" target="_blank">IZArc</a> unzipper
<ul>
<li>During install, make these settings:
<ul>
<li>Explorer Enhancements tab: Extract Here, Extract to &lt;folder&gt;, Email, Create self-extracting, Test, Display icons on context menus =&gt; NOT checked</li>
<li>Program Locations tab: Default viewer =&gt; Notepad++</li>
</ul>
</li>
</ul>
<ul>
<li>Wishlist: a setting that allows &#8220;Extract all subfolders&#8221; as the default</li>
</ul>
</li>
<li><a href="http://download.openoffice.org/other.html" target="_blank">OpenOffice</a>
<ul>
<li>Pin to taskbar</li>
</ul>
</li>
<li>doPDF virtual printer (use browser&#8217;s Print command to create PDF version of webpages for archiving)</li>
</ul>
<ul></ul>
</li>
<li><a href="http://www.pidgin.im/" target="_blank">Pidgin</a>
<ul>
<li>Don&#8217;t pin to taskbar; it will be added to hidden system tray</li>
<li>Buddies | Show | Offline buddies</li>
<li>Create shortcut and drop in Startup folder</li>
<li>Preferences
<ul>
<li>Interface | Show IMs and chats in tabs =&gt; off</li>
<li>Conversations | Enable buddy icon animation =&gt; off</li>
<li>Sounds : Enabled only for &#8220;Message received&#8221;</li>
<li>Logging | Log all instant messages =&gt; on</li>
</ul>
</li>
</ul>
</li>
<li><a href="http://tweaks.com/software/tweakslogon/" target="_blank">TweakLogin</a></li>
<li><a href="http://gallery.live.com/liveItemDetail.aspx?li=be5c647c-224b-40b4-ac9c-8044f51abb4a&amp;bt=1&amp;pl=1" target="_blank">Google Calendar gadget</a>. Move to lower right corner.</li>
<li><a href="http://www.amzi.com/download/prolog_download_sites.htm" target="_blank">Amzi Eclipse IDE</a> version 8 for Prolog and Java
<ul>
<li>Pin to taskbar</li>
<li>Set workspace to Desktop\Tools\EclipseWorkspace</li>
</ul>
</li>
</ol>
</li>
<li>One would think that &#8220;.pdf&#8221; would appear at Control Panel | &#8220;Associate a file type or protocol with a program&#8221; but it doesn&#8217;t. Instead, double-click any PDF, choose &#8220;select a program&#8221;, choose your PDF viewer, and make sure the checkbox is checked for &#8220;always use the selected program&#8221;. (This entire step is probably only necessary because I use the portable version of the viewer, and it doesn&#8217;t create entries in the registry.)</li>
<li>Go to Control Panel | Devices&amp;Printers and add the office Grayscale and Color printers</li>
<li>Get more <a href="http://www.windowsvistamagazine.com/05582469249658242575/give-your-windows-vista-pc-a-windows-7-makeover.html" target="_blank">free wallpapers</a> from Microsoft</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2009/05/26/portable-windows-withwithout-admin-privilege/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
