<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>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>
	<lastBuildDate>Wed, 25 Jan 2012 01:13:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to make incoming calls ring longer for Singtel mobile plans</title>
		<link>http://wooden-robot.net/2012/01/24/how-to-make-incoming-calls-ring-longer-for-singtel-mobile-plans/</link>
		<comments>http://wooden-robot.net/2012/01/24/how-to-make-incoming-calls-ring-longer-for-singtel-mobile-plans/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 01:13:52 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=276</guid>
		<description><![CDATA[If you have a mobile plan with Singtel, the default ring time for incoming calls is 15 seconds. You can adjust that yourself up to 30 seconds, by doing this: Go to your mobile phone&#8217;s dialer pad Enter **61*1389**30# and then press the Call button. (Change &#8217;30&#8242; to whatever number of seconds you want the rings [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a mobile plan with Singtel, the default ring time for incoming calls is 15 seconds. You can adjust that yourself up to 30 seconds, by doing this:</p>
<ol>
<li>Go to your mobile phone&#8217;s dialer pad</li>
<li>Enter **61*1389**30# and then press the Call button. (Change &#8217;30&#8242; to whatever number of seconds you want the rings to last, up to 30.)</li>
<li>No call will be made but you should see a text confirmation.</li>
</ol>
<p>Some bloggers indicate that one can go up to 60 seconds if one disables voicemail. (If you are a business, please don&#8217;t disable your voicemail. Providing your hours of operation in your voice greeting is very helpful.)</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2012/01/24/how-to-make-incoming-calls-ring-longer-for-singtel-mobile-plans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Windows7 on a 12&#8243; Motion Computing M1400 TabletPC</title>
		<link>http://wooden-robot.net/2011/10/24/installing-windows7-on-a-12-motion-computing-m1400-tabletpc/</link>
		<comments>http://wooden-robot.net/2011/10/24/installing-windows7-on-a-12-motion-computing-m1400-tabletpc/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 01:49:41 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Digirati]]></category>
		<category><![CDATA[MSWindows]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=269</guid>
		<description><![CDATA[My job involves reading and annotating a lot of PDFs, and doing so on a tablet seems much more comfortable than using a laptop. The tablet would have to support handwriting recognition, of course, because a laptop&#8217;s keyboard would be far superior to a virtual keyboard at an odd angle right at my pelvis. As [...]]]></description>
			<content:encoded><![CDATA[<p>My job involves reading and annotating a lot of PDFs, and doing so on a tablet seems much more comfortable than using a laptop. The tablet would have to support handwriting recognition, of course, because a laptop&#8217;s keyboard would be far superior to a virtual keyboard at an odd angle right at my pelvis. As of Fall 2011, there is no native handwriting rec ability in either Apple iOS nor Google Android, and apparently none in their app stores, either. Besides, their largest displays are 10 inches (diagonally), while an 8.5&#215;11 inch page ideally needs a 14 inch display. Also, my favorite PDF annotation tool, Tracker Software&#8217;s PDF XChange PRO, isn&#8217;t available on those platforms. Fortunately, there are tablets dating from the early 2000s that have 12 inch displays, native handwriting rec support, and designed to run the OS that my PDF tool requires (i.e. Microsoft Windows). As an added bonus, those tablets can now be bought for around US$100 even though they sold for thousands when first released.</p>
<p>I&#8217;ll focus here on Motion Computing&#8217;s M1400 tablet. I found one for $99 on eBay with its original digitizer pen and Windows XP installed. One or two owners before me had experimented with it, because there was no apparent way to open the Input Panel to use handwriting rec, the device buttons didnt work (except the power button), and the virtual keyboard would open only if I booted with an external keyboard attached and entered Ctrl+U during boot to activate the Utility Manager and turn on the virtual keyboard. A further problem with the hardware itself was that it got quite hot while in use, too hot to keep in one&#8217;s lap.</p>
<p>Installing Windows7 (the lowly Home Premium variant is sufficient) solved all of the software problems, and the device no longer gets more than mildly warm.</p>
<p>One new problem is that the display cannot be rotated to portrait orientation, because Intel refuses to release an updated video driver for this CPU chip for Windows7. However, some people have had success <a href="http://www.tabletpcbuzz.com/showthread.php?36239-Windows-7-on-M1400&amp;p=317603#post317603">running the video driver in XP Compatibility mode</a>, which requires installing the Professional or Ultimate variants of Windows7. I recommend installing Comodo Time Machine <em>after</em> the OS install and <em>before</em> any changes to drivers or registry settings, so you don&#8217;t have to reinstall the OS in case of an error.</p>
<p>By the way, I had never heard of Motion Computing before buying this device, but I am very impressed by them. They provided free tech support for a product they hadn&#8217;t sold in 5 years, it was very quick, and very thorough. If they offer a 12+ inch Windows8 tablet, especially if it has a color eInk/LCD dual display, it&#8217;ll be the first one I consider buying.</p>
<p>If landscape-only orientation is okay with you (and possibly no audio), here&#8217;s what you need:</p>
<ul>
<li>Motion Computing M1400 tablet</li>
<li>Windows7 Home Premium installer software</li>
<li>external usb-connected keyboard with arrow keys</li>
<li>CD/DVD external usb-connected drive (or 4GB usb drive + laptop/desktop with CD/DVD drive)</li>
<li>Ethernet cable to your router</li>
</ul>
<p>Follow these steps:</p>
<ol>
<li>The following procedure will NOT leave your files on the tablet in place. Many of them will be moved to c:\windows.old, but you should probably make a backup copy of any that you would hate to lose.</li>
<li>If you use PDF XChange 4.0 (but not the portable version), and if you have a session that you want to remember (i.e. a set of open PDFs), then be sure to note down the filepath of each (in addition to backing up the file itself in step 1 above). Although this PDF viewer is great, they don&#8217;t yet support session backup (nor syncing).</li>
<li>If you don&#8217;t have an external CD/DVD drive, you&#8217;ll need to <a href="http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/">make the usb drive bootable</a>. Don&#8217;t forget to copy all the installer software to it.</li>
<li>Connect the external keyboard and the external drive.</li>
<li>Make sure that the tablet can boot from the external drive:
<ol>
<li>Reboot the tablet and the white Motion Computing screen appears, hold the digipen tip to the screen. A context menu should appear; select Launch System Setup.</li>
<li>The PhoenixBIOS Setup Utility should open. Tap the Boot tab along the top.</li>
<li>If you&#8217;ll be using an external CD/DVD drive, then &#8220;CD-ROM Drive&#8221; should be listed higher than &#8220;+HDD&#8221;. If it&#8217;s not, then look at the bottom and tap the white down arrow to the left of Select Item until CD-ROM Drive is highlighted in white, then tap the + to the left of Change Values to move it up the list.</li>
<li>If you&#8217;ll be using a bootable usb external drive, then tap the white down arrow until +HDD is highlighted in white. Tap the white Enter to the left of &#8220;Select &gt; Sub-Menu&#8221;. A submenu should open below HDD, and the external usb drive should be listed above the hard drive; if it&#8217;s not, tap the white down arrow until the usb drive is highlighted in white, then tap the + to move the usb drive higher in the submenu.</li>
<li>When finished, tap the white F10 at bottom right to save and exit. A yes/no confirmation dialog will appear. Click yes. A beep will sound and you should exit to the Windows bootup process on your external drive.</li>
</ol>
</li>
<li>At this point, the digipen was no longer recognized for me, but the arrow keys on the external keyboard did.</li>
<li>When you are prompted whether to enable WindowsUpdate, I recommend not doing so. It&#8217;s a great feature, but when I did this procedure the first time and turned this feature on, the installation of Windows7 SP1 introduced a bug that made several applications give errors about not having the right permissions, or not having enough space on disk, and I could not uninstall some apps like Comodo Time Machine, either.</li>
<li>During the install process your machine will reboot, and if you booted from a usb drive, you&#8217;re going to boot from it again (unless you&#8217;re quick and yank it). If you do boot back into the install dialog again, just move the power switch to off, yank the usb drive, and power on. Installation will pickup from where it should.</li>
<li>Once Windows7 is installed, use the Ethernet cable to connect to your router so you can get drivers, especially a wifi driver. The external usb drive and keyboard can be disconnected.</li>
<li>To get drivers, go to Start | ControlPanel | DeviceManager, hold down the pen button while clicking on Display Adapters (i.e., do a right-click), and select &#8220;Scan for hardware changes&#8221;. This should trigger a search on Microsoft/manufacturer sites for all the drivers you need, not just display adapters. If you turned off WindowsUpdate during install, you&#8217;ll get no drivers at this point and should click the Change Setting button, then the Yes radiobutton. You should get drivers for:
<ul>
<li>Intel PRO Wireless 2200BG Network</li>
<li>Motion Computing Tablet PC Buttons</li>
<li>AuthenTec AES2501 (fingerprint sensor)</li>
</ul>
<p>Even with this, I could not get drivers for:</p>
<ul>
<li>Video controller</li>
<li>Multimedia Audio Controller</li>
<li>PCI Modem</li>
</ul>
</li>
<li>You should now have wifi connection ability, so the Ethernet cable can be removed.</li>
<li>By default, if one holds the digipen to the screen for a short while, it will be interpreted as a right-click. This is a problem if one uses a multi-level dropdown menu and wants to select anything other than the first item in one of its submenus. To disable this, go to Start | ControlPanel | Pen And Touch | Pen Options, highlight &#8220;Press and hold&#8221; in the list, and click Settings. Turn off the &#8220;Enable press and hold for right-clicking&#8221; checkbox.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2011/10/24/installing-windows7-on-a-12-motion-computing-m1400-tabletpc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows error: &#8216;bin&#8217; is not recognized as an internal or external command</title>
		<link>http://wooden-robot.net/2010/12/06/bin-is-not-recognized-as-an-internal-or-external-command/</link>
		<comments>http://wooden-robot.net/2010/12/06/bin-is-not-recognized-as-an-internal-or-external-command/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 05:57:52 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[MSWindows]]></category>

		<guid isPermaLink="false">http://wooden-robot.net/?p=262</guid>
		<description><![CDATA[Make sure you use a backslash in filepaths on Windows. For example, you might be trying &#8220;bin/foo.bat&#8221; instead of &#8220;bin\foo.bat&#8221;]]></description>
			<content:encoded><![CDATA[<p>Make sure you use a backslash in filepaths on Windows. For example, you might be trying &#8220;bin/foo.bat&#8221; instead of &#8220;bin\foo.bat&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://wooden-robot.net/2010/12/06/bin-is-not-recognized-as-an-internal-or-external-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 &#8211; there being no way to add a content type for ecl and pro files in particular &#8211; 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>
		<slash:comments>0</slash:comments>
		</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 [...]]]></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>
		<slash:comments>0</slash:comments>
		</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>
		<slash:comments>0</slash:comments>
		</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. [...]]]></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>
		<slash:comments>0</slash:comments>
		</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>
		<slash:comments>0</slash:comments>
		</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 [...]]]></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> &#8211; appearing to be true (100c)</li>
<li><strong>factive</strong> &#8211; 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> &#8211; 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> &#8211; 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> &#8211; 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> &#8211; 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> &#8211; &#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> &#8211; 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> &#8211; &#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 &#8211; whether something is present or absent</li>
</ul>
<ul>
<li>State of change &#8211; whether something changed or was in stasis
<ul>
<li>State of motion &#8211; whether something moved or not (&#8220;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> &#8211; &#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> &#8211; e.g., English verbs &#8220;face&#8221; and &#8220;look out&#8221;</li>
<li><strong>Alignment paths</strong> &#8211; e.g., English verb &#8220;lie&#8221; with path prepositions &#8220;toward&#8221; or &#8220;away from&#8221;</li>
<li><strong>Demonstrative paths</strong> &#8211; e.g., English verb &#8220;point&#8221; with path prepositions &#8220;toward&#8221; or &#8220;away from&#8221;</li>
<li><strong>Targeting paths</strong> &#8211; 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> &#8211; 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> &#8211; (skipped pp. 111-116)</li>
<li><strong>Shadow paths</strong> -</li>
<li><strong>Sensory paths</strong> -</li>
</ol>
</li>
<li><strong>Pattern paths</strong> &#8211; (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) &#8211; 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> &#8211; 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>
		<slash:comments>0</slash:comments>
		</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>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

