<?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>le accidental occurrence</title>
	<atom:link href="http://blog.42at.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.42at.com</link>
	<description>42at</description>
	<lastBuildDate>Wed, 04 Aug 2010 01:00:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>node.js: anatomy of a net connection</title>
		<link>http://blog.42at.com/node-js-anatomy-of-a-net-connection</link>
		<comments>http://blog.42at.com/node-js-anatomy-of-a-net-connection#comments</comments>
		<pubDate>Sun, 01 Aug 2010 18:20:45 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=193</guid>
		<description><![CDATA[Been looking into the awesome node.js project, &#8220;evented I/O&#8221; server-side Javascript running on V8.  I got introduced to node.js while attending a Bayjax meeting back in May dubbed Cinco de Node.js with node.js&#8217; creator Ryan Dahl presenting (video).
My little side project (more on that later) involved delving into the internals of the node.js Javascript library [...]]]></description>
			<content:encoded><![CDATA[<p>Been looking into the awesome <a href="http://nodejs.org/">node.js</a> project, &#8220;evented I/O&#8221; server-side Javascript running on V8.  I got introduced to node.js while attending a Bayjax meeting back in May dubbed <a href="http://www.meetup.com/BayJax/calendar/13308905/">Cinco de Node.js</a> with node.js&#8217; creator Ryan Dahl presenting (<a href="http://www.yuiblog.com/blog/2010/05/20/video-dahl/">video</a>).</p>
<p>My little side project (more on that later) involved delving into the internals of the node.js Javascript library and figuring out how a network connection was made.  It turns out to be quite nontrivial with the myriad async calls and network socket handshaking.  I started to document the connection process and wanted to share it.  Perhaps others will find it useful also.</p>
<p>A typical client-server connection code can found in the node.js test harness, eg, <a href="http://github.com/ry/node/blob/master/test/simple/test-http-1.0.js">test-http-1.0</a>.  Create a server:</p>
<pre class="brush: jscript;">

var server = http.createServer(function (req, res) {
res.writeHead(200, {&quot;Content-Type&quot;: &quot;text/plain&quot;});
res.end(&quot;hello world\n&quot;);
})
server.listen(PORT);
</pre>
<p>and the client:</p>
<pre class="brush: jscript;">

var c = net.createConnection(80);
c.setEncoding(&quot;utf8&quot;);
c.addListener(&quot;connect&quot;, function () {
 c.write( &quot;GET / HTTP/1.0\n\n&quot; );
});

c.addListener(&quot;data&quot;, function (chunk) {
 console.log(chunk);
 });

c.addListener(&quot;end&quot;, function () {
 c.end();
 server.close();
});
</pre>
<p>The server goes through the regular socket(), bind(), listen() routine.  It then kicks off its readWatcher which listens() for any connections.  Once a connect request comes in, it creates a  peer socket and pairs it to the incoming connection.  It sets the peer&#8217;s socket error state to zero (0), which tells the peer that the connection was successful. Finally, it kicks off connectionListener(), which waits for incoming data.  The server logic is shown in this diagram: (click for full image)</p>
<div id="attachment_194" class="wp-caption alignnone" style="width: 624px"><a href="http://blog.42at.com/wp-content/uploads/2010/08/node-net-server.png"><img class="size-large wp-image-194 " title="node-net-server" src="http://blog.42at.com/wp-content/uploads/2010/08/node-net-server-1024x478.png" alt="" width="614" height="287" /></a><p class="wp-caption-text">node.js server connection diagram</p></div>
<p>Meanwhile, back at the client, net.createConnection() calls the doConnect() routine which calls socket connect().  If a server is found at the address:port, the client&#8217;s socket state is set to &#8216;connect in progress&#8217; (EINPROGRESS), and the socket is made writable.  This triggers the client&#8217;s writeWatcher, which checks the client&#8217;s socket error state for zero (connected).  When the socket is connected, the client&#8217;s readWatcher is kicked off which listens for response data, and it emits the &#8216;connect&#8217; event, indicating the client is ready to make a request.  The client logic is show in the following diagram (click for full image):</p>
<div id="attachment_195" class="wp-caption alignnone" style="width: 624px"><a href="http://blog.42at.com/wp-content/uploads/2010/08/node-net-client.png"><img class="size-large wp-image-195 " title="node-net-client" src="http://blog.42at.com/wp-content/uploads/2010/08/node-net-client-1024x620.png" alt="" width="614" height="372" /></a><p class="wp-caption-text">node.js client connection diagram</p></div>
<p>The exact sequence of events and calls may change as node.js is under fast-paced development (the diagrams correspond to roughly v0.1.96).  But it should give a good overview of the sequence of events and relation to the callbacks.</p>
<p>More node.js goodness will be coming.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/node-js-anatomy-of-a-net-connection/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>imagined conversation</title>
		<link>http://blog.42at.com/imagined-conversation</link>
		<comments>http://blog.42at.com/imagined-conversation#comments</comments>
		<pubDate>Tue, 11 May 2010 07:58:22 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=192</guid>
		<description><![CDATA[- Moos

- (Bewildered)

- It's my stage name.

- Are you an actor?

- No, I'm a programmer.
  And the web is my stage.


&#160;

]]></description>
			<content:encoded><![CDATA[<pre>- Moos

- (Bewildered)

- It's my stage name.

- Are you an actor?

- No, I'm a programmer.
  And the web is my stage.
</pre>
<pre>
&nbsp;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/imagined-conversation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tap tap sound fx using HTML5</title>
		<link>http://blog.42at.com/tap-tap-sound-fx-using-html5</link>
		<comments>http://blog.42at.com/tap-tap-sound-fx-using-html5#comments</comments>
		<pubDate>Mon, 03 May 2010 21:40:13 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=189</guid>
		<description><![CDATA[Quick demonstration of enabling sounds effects using HTML5 &#60;audio&#62; tag.
Click the bookmarklet below to  enable old-style typewriter sounds effects on this page. Drag it to the  browser toolbar to enable on any web page.
Try  taptapFx bookmarklet now.
Volume control will show on top right corner of screen.
Tested on FF3.6, Chrome 4, Safari 4. [...]]]></description>
			<content:encoded><![CDATA[<p>Quick demonstration of enabling sounds effects using HTML5 <code>&lt;audio&gt;</code> tag.<img class="alignright size-thumbnail wp-image-190" title="old typewriter (image: http://www.abm.on.ca)" src="http://blog.42at.com/wp-content/uploads/2010/05/old3-150x150.jpg" alt="old typewriter" width="150" height="150" /></p>
<p>Click the bookmarklet below to  enable old-style typewriter sounds effects on this page. Drag it to the  browser toolbar to enable on any web page.</p>
<p><a title="taptapSfx" href="javascript:void((function(){if  (document.querySelector('script[src*=\'taptapSfx.js\']')) return; var  e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('src','http'+'://bit.ly/duYv88?path=http'+'://42at.com/lab/taptapSfx/taptapSfx.js');(document.getElementsByTagName('head')[0]  || document.getElementsByTagName('body')[0]).appendChild(e)})())">Try  taptapFx bookmarklet now</a>.</p>
<p>Volume control will show on top right corner of screen.</p>
<p>Tested on FF3.6, Chrome 4, Safari 4.   Probably works on Opera, iPad/iPhone  browsers as well.  Not IE8, but  maybe IE9!</p>
<p>See <a href="http://42at.com/lab/taptapSfx/">test area</a>.  View <a href="http://github.com/moos/taptapSfx/blob/master/taptapSfx.js">taptapSfx.js</a> source at github.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/tap-tap-sound-fx-using-html5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>_xiterator: an expression iterator for Underscore</title>
		<link>http://blog.42at.com/_xiterator-an-expression-iterator-for-underscore</link>
		<comments>http://blog.42at.com/_xiterator-an-expression-iterator-for-underscore#comments</comments>
		<pubDate>Thu, 15 Apr 2010 20:41:47 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[underscore]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=186</guid>
		<description><![CDATA[Underscore.js is an excellent, compact Javascript  library extending the language with useful tools.  Most of the utils are drawn from Prototype and/or been inspired by languages such as Ruby. Underscore reverts to native  code where it is supported.
A hand-full of so-called Collection functions which operate on arrays &#38; objects, such as _any(), _all(), _map(), and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://documentcloud.github.com/underscore/">Underscore.js</a> is an excellent, compact Javascript  library extending the language with useful tools.  Most of the utils are drawn from <a href="http://prototypejs.org">Prototype</a> and/or been inspired by languages such as Ruby. Underscore reverts to native  code where it is supported.</p>
<p>A hand-full of so-called Collection functions which operate on arrays &amp; objects, such as _any(), _all(), _map(), and _detect(), take an iterator function as an argument:</p>
<pre class="brush: jscript;">
if ( _.any([1,2,3], function iterator(value){
    return ! _.isNumber(value);
})) {
    // ...
}
</pre>
<p>_.isNumber() is one of a dozen or so type checking routines provided by Underscore, in addition to, _isString(), _isFunction(), _isArray(), and others.</p>
<p>Often times the iterator is a simple type-checking, like above, or some sort of expression that needs to be evaluated.  So why not just enter the expression:</p>
<pre class="brush: jscript;">if (_.any([1,2,3], &quot;!isNumber&quot;)) {
 // ...
}</pre>
<p>This is what <strong>_xiterator</strong>, an add-on for Underscore, provides.  It  is simply the meat of the iterator in a compact semantic.</p>
<p>Let&#8217;s throw in some range checking:</p>
<pre class="brush: jscript;">
if (_.any([1,2,3], function iterator(value){
    return ! _.isNumber(value) || value &lt; 0 || value &gt; 10;
})){
    // ...
}
</pre>
<p>can be  replaced by:</p>
<pre class="brush: jscript;">
if (_.any([1,2,3], &quot;!isNumber || &lt; 0 || &gt; 10&quot;)){
    // ....
}
</pre>
<h2>Expression iterators</h2>
<p>The expression is composed of valid Javascript code.  In the case of relational operators (&lt;, &lt;=, ==, etc.) the left operand is <em>implied</em> to be the value of the iterator.  The expression is evaluated in global scope.</p>
<p>Any of the Underscore _.isXXX type-checking routines can be used without the argument (the _.  part is implied).  In addition, three new routines are added: <em>isBlank</em>, <em>isOdd</em>, <em>isEven</em>.</p>
<p>Parenthetical expressions are fully supported:</p>
<pre class="brush: jscript;"> _.any([1,2,3], &quot;(isNumber &amp;&amp; &gt; 0) || (isString &amp;&amp; !isBlank)&quot;);</pre>
<p>Validating functions:</p>
<pre class="brush: jscript;"> function checkZip(value) {...}

 _.any(zips, &quot;!isBlank &amp;&amp; checkZip(__value) &quot;);  // __value is the placeholder</pre>
<p>In addition to __value, __key and __list placeholder variables, corresponding to the formal arguments of the iterator, are available.</p>
<p>How about a regular expression:</p>
<pre class="brush: jscript;"> _.all([1,2,3], /\d+/);   // either as string or RegExp object</pre>
<p>Of course, functions are still supported and will work as before.</p>
<h3>Accessing original methods</h3>
<p>Since the expression string needs to be parsed, runtime performance will be affected.  Performance sensitive applications involving huge sets should use the original routine.</p>
<p>The original routines  can be explicitly accessed by passing no argument, eg.</p>
<pre class="brush: jscript;">
var originalAny = _.any();
originalAny(veryLargeSet, function(){...});
</pre>
<p>Or more compactly,</p>
<pre class="brush: jscript;">_.any()(veryLargeSet, function(){...});
</pre>
<p>Expressions cannot be used on original methods:</p>
<pre class="brush: jscript;">
originalAny(veryLargeSet, 'isNumber'); //  =&gt; raises exception
</pre>
<h3>The code</h3>
<p>Details, code, and examples (including <a href="http://moos.github.com/_xiterator">test suite</a>) are on <a href="http://github.com/moos/_xiterator">Github</a>.   Released under MIT license.</p>
<p><strong>Update: </strong>Just came across <a href="http://osteele.com/sources/javascript/functional/">Functional.js</a>.  Above technique is not too dissimilar to its string `lambda` functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/_xiterator-an-expression-iterator-for-underscore/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad Thumboard &#8211; live!</title>
		<link>http://blog.42at.com/ipad-thumboard-live</link>
		<comments>http://blog.42at.com/ipad-thumboard-live#comments</comments>
		<pubDate>Thu, 25 Mar 2010 11:05:59 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[ipad]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=182</guid>
		<description><![CDATA[Remember the thumb keyboard concept for the iPad introduced earlier?  Well, here&#8217;s a real live working demo.  This demo works best on latest Safari or Chrome (although Firefox is workable too).
Try Thumboard live!

It&#8217;ll be best to try it on an actual iPad when it ships, which shouldn&#8217;t be too long now.  There is also a [...]]]></description>
			<content:encoded><![CDATA[<p>Remember the <a href="http://blog.42at.com/thumb-keyboard-concept-for-the-ipad">thumb keyboard concept for the iPad</a> introduced earlier?  Well, here&#8217;s a real live working demo.  This demo works best on latest Safari or Chrome (although Firefox is workable too).</p>
<p><a href="http://42at.com/lab/Thumboard">Try Thumboard live!</a></p>
<pre><img class="size-medium wp-image-183 aligncenter" title="Thumboard" src="http://blog.42at.com/wp-content/uploads/2010/03/thumboard-sm-228x300.jpg" alt="" width="228" height="300" /></pre>
<p>It&#8217;ll be best to try it on an actual <a href="http://www.apple.com/ipad/">iPad</a> when it ships, which shouldn&#8217;t be too long now.  There is also a <a href="http://42at.com/lab/Thumboard/bookmarklet.html">bookmarklet</a> to enable the Thumboard on any website.  Try the &#8216;rotate&#8217; button to simulate rotating on the iPad.</p>
<h2>Usage</h2>
<pre>&lt;script type="text/javascript" src="getThumboard.js" charset="utf-8" &gt;
&lt;/script&gt;</pre>
<p>This will load the necessary JS/CSS/HTML files and fire up the thumboard.</p>
<p><strong>Or with callback:</strong></p>
<pre>&lt;script type="text/javascript" src="getThumboard.js?cb=my_init" charset="utf-8" &gt;
&lt;/script&gt;</pre>
<p>where my_init() is defined in your code, eg:</p>
<pre class="brush: jscript;">function my_init() {
     var options = {enterText:'Search'};
     new Thumboard(options);
}</pre>
<p>Who knows, now that there seems to be <a href="http://www.tuaw.com/2010/03/19/ipad-dvorak-hardware-keyboard/">Dvorak keyboard support</a> for the iPad, why not a Thumboard!?</p>
<p><strong>Update:</strong> Apr. 23.  The demo has been improved and updated.   Work around for webkit <a href="https://bugs.webkit.org/show_bug.cgi?id=25444">bug</a> selectionStart on readOnly inputs.  Enter key support on forms (except webkit due to another <a href="https://bugs.webkit.org/show_bug.cgi?id=31234">bug</a>!)</p>
<h6>NOTE: This code is provided purely for demonstration  purposes and  may not live long.  Commercial use without express permission prohibited!</h6>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/ipad-thumboard-live/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Pollock&#8217;d</title>
		<link>http://blog.42at.com/pollockd</link>
		<comments>http://blog.42at.com/pollockd#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:08:51 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[harmony]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=175</guid>
		<description><![CDATA[
  
* done with tricked-up Harmony.
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-174" title="Pollock by Moos with Harmony 1" src="http://blog.42at.com/wp-content/uploads/2010/03/pollock1.png" alt="" width="640" height="527" /></p>
<p><em><a href="http://blog.42at.com/wp-content/uploads/2010/03/pollock3.png"><img class="size-thumbnail wp-image-177 alignleft" title="Pollock by Moos with Harmony 3" src="http://blog.42at.com/wp-content/uploads/2010/03/pollock3-150x150.png" alt="" width="150" height="150" /></a></em><a href="http://blog.42at.com/wp-content/uploads/2010/03/pollock5.png"> <img class="alignnone size-thumbnail wp-image-185" title="Pollock by Moos with Harmony 5" src="http://blog.42at.com/wp-content/uploads/2010/03/pollock5-150x150.png" alt="" width="150" height="150" /></a> <br style="clear: both;" /><br />
<em>* done with tricked-up <a href="http://blog.42at.com/harmony-webappd">Harmony</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/pollockd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aw Shucks &#8211; only 2!</title>
		<link>http://blog.42at.com/aw-shucks-only-2</link>
		<comments>http://blog.42at.com/aw-shucks-only-2#comments</comments>
		<pubDate>Fri, 12 Mar 2010 21:50:32 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[ipad]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=169</guid>
		<description><![CDATA[
iPad pre-order is go &#8212; will you buy one?
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-173" title="aw shucks - only 2!" src="http://blog.42at.com/wp-content/uploads/2010/03/ipad-shucks.png" alt="" width="646" height="322" /></p>
<p><a href="http://www.engadget.com/2010/03/12/ipad-pre-order-is-go-will-you-buy-one/">iPad pre-order is go &#8212; will you buy one?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/aw-shucks-only-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Harmony webapp&#8217;d</title>
		<link>http://blog.42at.com/harmony-webappd</link>
		<comments>http://blog.42at.com/harmony-webappd#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:21:05 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[drawing]]></category>
		<category><![CDATA[harmony]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[webapps]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=163</guid>
		<description><![CDATA[Saw this nice little sketching app called Harmony, a procedural drawing tool, by  Ricardo Cabello  (via Daring Fireball) that uses HTML5 canvas.   Works nicely on the iPhone too, so I thought it would be a great to have it as a webapp.
The webapp version adds:

offline mode via HTML5 cache
full-screen mode
two-finger pan/zoom (upto 4x)

To use [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://42at.com/lab/harmony" target="_blank"><img class="alignright size-full wp-image-164" title="Harmony webapp" src="http://blog.42at.com/wp-content/uploads/2010/03/startup.png" alt="Harmony webapp" width="192" height="276" /></a>Saw this nice little sketching app called <a href="http://mrdoob.com/blog/post/689">Harmony</a>, a procedural drawing tool, by  Ricardo Cabello  (via <a href="http://daringfireball.net/linked/2010/03/09/harmony">Daring Fireball</a>) that uses HTML5 canvas.   Works nicely on the iPhone too, so I thought it would be a great to have it as a webapp.</p>
<p>The webapp version adds:</p>
<ul>
<li>offline mode via HTML5 cache</li>
<li>full-screen mode</li>
<li>two-finger pan/zoom (upto 4x)</li>
</ul>
<p>To use the full-screen &amp; offline mode on your iPhone/iPod  Touch(/iPad?), bookmark the page and select &#8220;Add to Home Screen&#8221;.</p>
<h3>Desktop browser enhancements</h3>
<p>Other added features for desktop browsers include:</p>
<ul>
<li>autosave feature</li>
<li>session save</li>
<li>undo (de facto!)</li>
</ul>
<p>Alas, the autosave feature doesn&#8217;t work on the iPhone OS 3.1.3 due to the <a href="https://bugs.webkit.org/show_bug.cgi?id=33029">canvas origin-flag bug</a> (hopefully this&#8217;ll be fixed on OS 3.2!).  It works nicely on FF 3.6, Chrome 4.x, and Safari 4.x.  After a brief delay after the last user stroke (<em>about 5 secs</em>), the state of the canvas and the last brush is saved to sessionStorage (or localStorage in the case of Chrome as it doesn&#8217;t fully support sessionStorage yet).</p>
<p>This provides a convenient <strong>undo </strong>feature as well.  Don&#8217;t like your last few stroke, F5 (refresh) and zap! (You&#8217;ve got 5 seconds to decide!)</p>
<p>If localStorage is available (as in the three browsers mentioned) and &#8216;<strong>save</strong>&#8216; button is clicked, the canvas is also saved to<em> local storage</em>.  So even if the browser is restarted, it&#8217;ll start at the last saved canvas.</p>
<p>Thanks to Ricardo Cabello for this great tool.</p>
<p><strong>Try it: </strong><a href="http://42at.com/lab/harmony" target="_blank">Harmony webapp</a>.</p>
<p>Note: As Ricardo mentions in the comments to his post, you can take a snapshot of the canvas on the iPhone/iPod touch by pressing the power button and home button at the same time.   This is probably the best way to save/share on the iPhone.</p>
<p><strong>Update 1</strong>: 11 March 2010 &#8212; fixed offline issue.  Please re-install on iPhone/iPod Touch.</p>
<p><strong>Update 2:</strong> Examples of the awesome sketches being created in Harmony:</p>
<p>- Polish artists: <a href="http://blip.pl/tags/harmony" target="_blank">http://blip.pl/tags/harmony</a><br />
- alternatyves: <a href="http://twitpic.com/187ih1" target="_blank">here</a>, <a href="http://twitpic.com/17rc0b" target="_blank">here</a>, and <a href="http://twitpic.com/17rbi5" target="_blank">here</a><br />
- <a href="http://www.flickr.com/photos/axeldiego/4423305948/" target="_blank">in color</a><br />
- <a href="http://www.flickr.com/photos/nathanbowers/sets/72157623471092593/" target="_blank">more</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/harmony-webappd/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>San Francisco, 1905</title>
		<link>http://blog.42at.com/san-francisco-1905</link>
		<comments>http://blog.42at.com/san-francisco-1905#comments</comments>
		<pubDate>Wed, 03 Mar 2010 10:28:05 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[vintage]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=162</guid>
		<description><![CDATA[Awesome footage of appears to be Market St. going towards the clock tower, pre-Earthquake.  Love the nonchalant playfulness of the kids running in front of the camera.  Little did they figure their actions would delight some hapless net-passerby a hundred years later!

via Mises Economics Blog.

Update: Looks like there is 2005 response video.
]]></description>
			<content:encoded><![CDATA[<p>Awesome footage of appears to be Market St. going towards the clock tower, pre-Earthquake.  Love the nonchalant playfulness of the kids running in front of the camera.  Little did they figure their actions would delight some hapless net-passerby a hundred years later!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/NINOxRxze9k&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NINOxRxze9k&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>via <a href="http://blog.mises.org/archives/011744.asp">Mises Economics Blog</a>.</p>
<div></div>
<p>Update: Looks like there is 2005 <a href="http://www.youtube.com/watch?v=Vqcz_tllnwM&#038;feature=player_embedded">response video</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/san-francisco-1905/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thumb keyboard concept for the iPad</title>
		<link>http://blog.42at.com/thumb-keyboard-concept-for-the-ipad</link>
		<comments>http://blog.42at.com/thumb-keyboard-concept-for-the-ipad#comments</comments>
		<pubDate>Wed, 17 Feb 2010 01:46:52 +0000</pubDate>
		<dc:creator>Moos</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[concept]]></category>
		<category><![CDATA[ipad]]></category>

		<guid isPermaLink="false">http://blog.42at.com/?p=146</guid>
		<description><![CDATA[Update: Try live working demo!
iPad will be a great device for casual reading and web surfing.   Not so for writing. The lack of tactile-feedback is one reason.  The form-factor is another.
The great thing about the iPad is being able to hold it in your hands. To use the default keyboard, you&#8217;d have to hold it [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><strong>Update: </strong>Try live <a href="http://blog.42at.com/ipad-thumboard-live">working demo</a>!</p>
<p>iPad will be a great device for casual reading and web surfing.   Not so for writing. The lack of tactile-feedback is one reason.  The form-factor is another.</p>
<p>The great thing about the iPad is being able to hold it in your hands. To use the default keyboard, you&#8217;d have to hold it in one hand while typing with the other &#8212; not so comfortable.  Or lay it on a flat surface, which takes away from the form-factor benefits.</p>
<p>Why not use your thumbs?  You can hold it with both hands and use both thumbs for typing.  Thumb-based keyboards are a plenty:</p>
<p><img class="size-thumbnail wp-image-147" title="31EDemzi6AL._SS400_.jpg" src="http://blog.42at.com/wp-content/uploads/2010/02/31EDemzi6AL._SS400_.jpg-150x150.jpg" alt="" width="120" height="120" /><img class="size-thumbnail wp-image-148" title="HP Thumb - Keyboard" src="http://blog.42at.com/wp-content/uploads/2010/02/HP-Thumb-Keyboard-150x150.jpg" alt="" width="120" height="120" /><img class="size-thumbnail wp-image-149" title="i-mate Pocket PC Thumb Keyboard (English)" src="http://blog.42at.com/wp-content/uploads/2010/02/i-mate-Pocket-PC-Thumb-Keyboard-English-150x150.jpg" alt="" width="120" height="120" /><img class="alignnone size-thumbnail wp-image-150" title="xbox-qwerty-keyboard-top.jpg" src="http://blog.42at.com/wp-content/uploads/2010/02/xbox-qwerty-keyboard-top.jpg-150x150.jpg" alt="" width="120" height="120" /></p>
<p>The default iPad keyboard (as gleamed from the photos), has 37 keys.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-151" title="original ipad keyboard" src="http://blog.42at.com/wp-content/uploads/2010/02/ipad-orig2.png" alt="" /></p>
<ul>
<li>26 &#8211; A-Z</li>
<li>2 &#8211; right/left shift</li>
<li>2 &#8211; right/left numeric</li>
<li>2 &#8211; punctuation</li>
<li>2 &#8211; meta</li>
<li>1 &#8211; delete</li>
<li>1 &#8211; search/enter</li>
</ul>
<p><img class="alignright size-full wp-image-152" style="margin-top: -20px;" title="thumb-dim" src="http://blog.42at.com/wp-content/uploads/2010/02/thumb-dim.jpg" alt="" width="189" height="161" /></p>
<p>With inside screen dimensions (sans bevel border) of roughly 5.82&#8243; x 7.76&#8243;, I estimate key dimension to be about .4&#8243; for the typical alphanumeric keys, plus the space around it.</p>
<p>The length of my thumb is about 2 ½&#8221; long.  So, including intra-key spacing, roughly four keys should be easily within reach of a single thumb.</p>
<p><span id="more-146"></span></p>
<p>The <em>thumb-zone</em> on the iPad is a roughly 2&#8243; radius area around the  two corners.</p>
<p><a href="http://blog.42at.com/wp-content/uploads/2010/02/ipad-2e1.png"><img class="aligncenter size-medium wp-image-156" title="ipad-2e" src="http://blog.42at.com/wp-content/uploads/2010/02/ipad-2e1-238x300.png" alt="iPad thumb keyboard concept - thumb-zone" width="238" height="300" /></a></p>
<h2>Thumb keys &#8211; Concept 1</h2>
<p>Here&#8217;s a keyboard design concept with the keys arranged around the two corners within easy reach of the thumbs.</p>
<p><a href="http://blog.42at.com/wp-content/uploads/2010/02/ipad-sq-alpha.png"></a><a href="http://blog.42at.com/wp-content/uploads/2010/02/ipad-sq-alpha.png"><img class="aligncenter size-medium wp-image-153" title="ipad-sq-alpha" src="http://blog.42at.com/wp-content/uploads/2010/02/ipad-sq-alpha-238x300.png" alt="iPad thumb keys - square" width="238" height="300" /></a></p>
<p>This key configuration has 39 keys, with roughly the same dimensions as the default iPad keyboard.  The main alphanumeric keys are  arranged in a 4&#215;4 grid on each side of the tablet, with the rest of the keys on top.</p>
<p>One problem with this layout is that the keys do not fall within the familiar QWERTY layout, and this could impact usability.</p>
<h2>Thumb keys &#8211; Concept 2</h2>
<p><a href="http://blog.42at.com/wp-content/uploads/2010/02/ipad-alpha.png"><img class="aligncenter size-medium wp-image-158" title="ipad-alpha" src="http://blog.42at.com/wp-content/uploads/2010/02/ipad-alpha-238x300.png" alt="iPad thumb keyboard concept - QWERTY " width="238" height="300" /></a></p>
<p>This design follows the QWERTY layout (with slight modification) while keeping the majority of the keys within the <em>thumb-zone</em>.   The Q, O, and P keys are moved up one row, but are still within the proximity of their original positions.</p>
<p>This layout has 38 keys, including an elongated space key.</p>
<h2>In real life</h2>
<p>How does the thumb keyboard play in real life.  Well, there is no iPad available yet, but my trusty <a href="http://en.wikipedia.org/wiki/Composition_book">composition book</a> has dimensions remarkably close to the iPad!  Here&#8217;s what it might look like.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-160" title="holding-thumbkey" src="http://blog.42at.com/wp-content/uploads/2010/02/holding-thumbkey.jpg" alt="iPad thumb keyboard concept - holding mockup" width="480" height="401" /></p>
<p>(This mock-up is from an earlier layout with the space key on the right.) Usability is quite good.  All keys are withing range of my thumbs and in their familiar place (except the Q, O, P keys).</p>
<p>Any chance Apple will add this as an optional layout on the iPad?!</p>
<p><strong>Update:</strong> Looks like others have been thinking along the same lines.  I like Scot Robbin&#8217;s split space bar in<a href="http://www.flickr.com/photos/srobbin/4309481995/"> Concept: iPad Split Keyboard</a>.  I&#8217;m less enthused about the duplicate keyboard design over at <a href="http://lonelysandwich.com/post/336355528/what-has-two-thumbs">lonelysandwich</a>.  Dan Moran makes a good case for a thumb-centered virtual keyboard in <a href="http://www.macworld.com/article/145609/2010/01/tablet_text_entry.html">the text&#8217;s the thing</a>.  Then there is the <a href="http://blog.pekpongpaet.com/2010/01/27/concept-ui-ipad-curved-keypad/">curved keypad</a>, which although nice looking,  may have usability issues.  <a href="http://gizmodo.com/5446652/how-will-we-type-on-the-apple-tablet">Gizmodo </a>contends scaling the iPhone&#8217;s keyboard to the iPad doesn&#8217;t make much sense, although that&#8217;s <a href="http://i.gizmodo.com/5458397/the-ipads-onscreen-typing-solution-isnt-a-solution-at-all">not what Apple thinks</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.42at.com/thumb-keyboard-concept-for-the-ipad/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
