<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0QNSH45fSp7ImA9WhRUFU8.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376</id><updated>2012-01-25T14:09:59.025-08:00</updated><category term="climbing" /><category term="music" /><category term="technology" /><category term="business" /><category term="sailing" /><category term="art" /><category term="software" /><category term="photography" /><category term="Japan" /><category term="outdoors" /><category term="thoughts" /><title>51 Elliot</title><subtitle type="html">Notes from Silicon Valley North</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://51elliot.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>225</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/51Elliot" /><feedburner:info uri="51elliot" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><feedburner:emailServiceId>51Elliot</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0QNSH4_eSp7ImA9WhRUFU8.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-332324788315597953</id><published>2012-01-25T13:59:00.000-08:00</published><updated>2012-01-25T14:09:59.041-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T14:09:59.041-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Simple Intro to NodeJS Module Scope</title><content type="html">People often ask about scope and visibility in Node.JS modules. What's visible outside the module versus local to the module? How can you write a module that automatically exports an object? And so on.&lt;br /&gt;
&lt;br /&gt;
Here are six examples showing six ways of defining things in Node.JS modules. &amp;nbsp;Not all of these are recommended (in fact, a couple of them are definitely NOT recommended). But these simple examples should help explain how modules and their exports work, intuitively.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;foo.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This module defines a global function called foo. By not putting var in front of the declaration of foo, foo is global. This is really not recommended. You should avoid polluting the global namespace.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// foo.js
foo = function () {
  console.log("foo!");
}
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module supplies global function foo()
require('./foo');
foo();
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;bar.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This module exports an anonymous function.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// bar.js
module.exports = function() {
  console.log("bar!");
}
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module exports anonymous function
var bar = require('./bar');
bar();
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;fiz.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This exports a function called fiz.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// fiz.js
exports.fiz = function() {
  console.log("fiz!");
}
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module exports function fiz()
var fiz = require('./fiz').fiz;
fiz();
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;buz.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This exports an anonymous object.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// buz.js
var Buz = function() {}; 

Buz.prototype.log = function () {
  console.log("buz!");
};
module.exports = new Buz();
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module exports anonymous object
var buz = require('./buz');
buz.log();
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;baz.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This exports an object called Baz.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// baz.js
var Baz = function() {}; 

Baz.prototype.log = function () {
  console.log("baz!");
};

exports.Baz = new Baz();
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module exports object Baz
var baz = require('./baz').Baz;
baz.log();
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;qux.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This exports a prototype called Qux.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// qux.js
var Qux = function() {}; 
Qux.prototype.log = function () {
  console.log("qux!");
};
exports.Qux = Qux;
&lt;/pre&gt;&lt;br /&gt;
Here is an app that use it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// Module exports a prototype Qux
var Qux = require('./qux').Qux;
var qux = new Qux();
qux.log();
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-332324788315597953?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nHJtJfrp7Q0M88dbDQTaqV3kmLw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nHJtJfrp7Q0M88dbDQTaqV3kmLw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nHJtJfrp7Q0M88dbDQTaqV3kmLw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nHJtJfrp7Q0M88dbDQTaqV3kmLw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/FthHk_9iI8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/332324788315597953/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=332324788315597953" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/332324788315597953?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/332324788315597953?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/FthHk_9iI8o/simple-intro-to-nodejs-module-scope.html" title="Simple Intro to NodeJS Module Scope" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2012/01/simple-intro-to-nodejs-module-scope.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YGRXk4fCp7ImA9WhRWGE8.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-6260461651672586587</id><published>2012-01-05T21:38:00.000-08:00</published><updated>2012-01-05T21:52:04.734-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T21:52:04.734-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><title>The Global Power Shift</title><content type="html">Paddy Ashdown's fantastic speech at TEDx Brussels, which was published today.&amp;nbsp; This is well worth watching for anyone interested in what is happening in global power structures and the end of the American century.&amp;nbsp; Absolutely brilliant talk, at once troubling and still inspirational.&lt;br /&gt;
&lt;br /&gt;
&lt;object width="526" height="374"&gt;
&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talk/stream/2011X/Blank/PaddyAshdown_2011X-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PaddyAshdown_2011X-embed.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=1314&amp;lang=&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=paddy_ashdown_the_global_power_shift;year=2011;theme=bold_predictions_stern_warnings;theme=the_rise_of_collaboration;event=TEDxBrussels;tag=Foreign+Policy;tag=Global+Issues;tag=politics;tag=world+cultures;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2011X/Blank/PaddyAshdown_2011X-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PaddyAshdown_2011X-embed.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=1314&amp;lang=&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=paddy_ashdown_the_global_power_shift;year=2011;theme=bold_predictions_stern_warnings;theme=the_rise_of_collaboration;event=TEDxBrussels;tag=Foreign+Policy;tag=Global+Issues;tag=politics;tag=world+cultures;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"&gt;&lt;/embed&gt;
&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-6260461651672586587?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sJRrmGLqrQnltQE21QfrtGs-FNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sJRrmGLqrQnltQE21QfrtGs-FNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sJRrmGLqrQnltQE21QfrtGs-FNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sJRrmGLqrQnltQE21QfrtGs-FNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/418x4_6eVqk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/6260461651672586587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=6260461651672586587" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6260461651672586587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6260461651672586587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/418x4_6eVqk/global-power-shift.html" title="The Global Power Shift" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2012/01/global-power-shift.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4DRHw6cSp7ImA9WhRWE0Q.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-8589521803145890111</id><published>2011-12-31T21:47:00.000-08:00</published><updated>2011-12-31T21:49:35.219-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-31T21:49:35.219-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>The Battle Path</title><content type="html">Writing-On-Stone Provincial Park, Alberta, Canada&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Ao8shTTtRlg/Tv_zFzdkJ3I/AAAAAAAAA-w/8YFEgwNFEM4/s1600/writing+on+stone.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/-Ao8shTTtRlg/Tv_zFzdkJ3I/AAAAAAAAA-w/8YFEgwNFEM4/s400/writing+on+stone.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="color: #666666;"&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;© 2012 Darren DeRidder&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-8589521803145890111?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XVaBS96Omun8CSD8fwRyInxT3KA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XVaBS96Omun8CSD8fwRyInxT3KA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XVaBS96Omun8CSD8fwRyInxT3KA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XVaBS96Omun8CSD8fwRyInxT3KA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/hmxMxOzWF5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/8589521803145890111/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=8589521803145890111" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8589521803145890111?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8589521803145890111?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/hmxMxOzWF5Q/battle-path.html" title="The Battle Path" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Ao8shTTtRlg/Tv_zFzdkJ3I/AAAAAAAAA-w/8YFEgwNFEM4/s72-c/writing+on+stone.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/12/battle-path.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MGRH87eCp7ImA9WhRQF0g.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-538419213078384787</id><published>2011-12-12T22:53:00.000-08:00</published><updated>2011-12-12T22:57:05.100-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T22:57:05.100-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>Carbide Wilson Mill</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;Abandoned Mill, Gatineau, Quebec&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qzVpT2aa8GM/Tub2AUlX7KI/AAAAAAAAA-g/0h2InWoJTPg/s1600/IMG_1871_DPP.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://1.bp.blogspot.com/-qzVpT2aa8GM/Tub2AUlX7KI/AAAAAAAAA-g/0h2InWoJTPg/s400/IMG_1871_DPP.jpg" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="color: #999999; font-size: x-small;"&gt;©2011 Darren DeRidder&lt;/span&gt;&lt;span style="color: #999999;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-538419213078384787?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BYsmTsJoKh-kjjxhiMYWYX1Txhs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYsmTsJoKh-kjjxhiMYWYX1Txhs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BYsmTsJoKh-kjjxhiMYWYX1Txhs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYsmTsJoKh-kjjxhiMYWYX1Txhs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/iNFIEHn6H1s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/538419213078384787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=538419213078384787" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/538419213078384787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/538419213078384787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/iNFIEHn6H1s/carbide-wilson-mill.html" title="Carbide Wilson Mill" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-qzVpT2aa8GM/Tub2AUlX7KI/AAAAAAAAA-g/0h2InWoJTPg/s72-c/IMG_1871_DPP.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/12/carbide-wilson-mill.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcAR3g8fip7ImA9WhRQFEw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-7178133208820811035</id><published>2011-12-08T21:13:00.000-08:00</published><updated>2011-12-08T21:54:06.676-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T21:54:06.676-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Checking In</title><content type="html">Hard to believe the month of November flew by without so much as a peep out of 51 Elliot.&amp;nbsp; Between getting my boat put away for the winter, removing stain from my porch and cleaning the wood, spending too many hours on &lt;a href="http://floorplanner.com/"&gt;floorplanner.com&lt;/a&gt; and various architectural websites, and raking up about 87 bags of autumn leaves, it just happened.&lt;br /&gt;
&lt;br /&gt;
And, instead of posting my usual techo / philosophical points of view, the last couple of months have been mainly a time to sit back and observe. The Occupy movement has been in the news a lot, the OpenMedia.ca campaign in Canada has been building momentum, and businesses of the digital economy are speaking out against the abuse of copyright by media conglomerates as manifest in the much-hated SOPA and Protect-IP proposals. I'm looking forward to seeing how it all plays out, and I hope it results in a better world for everyone.&amp;nbsp; A Christmas wish, a bit early.&lt;br /&gt;
&lt;br /&gt;
I did manage to accumulate a fairly big back log of interesting articles, so here to make up for my recent silence is the second ever web-dump of nifty things I found interesting:&lt;br /&gt;
&lt;br /&gt;
US Big Brother wholesale spying aka. the PATRIOT Act is &lt;a href="http://arstechnica.com/tech-policy/news/2011/12/patriot-act-and-privacy-laws-take-a-bite-out-of-us-cloud-business.ars?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=rss"&gt;taking a bite out of the US cloud computing market&lt;/a&gt;. Business are choosing not to use the products and services of companies like Microsoft and Amazon, who are bound by the laws of a government that has created what is considered an "indemic surveillance society".&lt;br /&gt;
&lt;br /&gt;
Fabian Pascal has a very good paper on &lt;a href="http://www.dbdebunk.com/page/page/1103793.htm"&gt;database normalization, integrity and performance&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The first in a series of posts on &lt;a href="http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees"&gt;damn cool algorithms&lt;/a&gt;... this one's on BK Trees.&lt;br /&gt;
&lt;br /&gt;
This was the year for Javascript. Javascript on the client, Javascript on the server, everywhere you look Javascript. This is great! Why? Because &lt;u&gt;JavaScript Is Not Java&lt;/u&gt;.&amp;nbsp; Thank goodness.&lt;br /&gt;
&lt;br /&gt;
This year Node.js, the server-side Javascript engine based on Google's blazing-fast V8 Javascript engine, took off like wildfire. &lt;a href="http://www.catonmat.net/blog/nodejs-modules-optimist/"&gt;Node.js modules you should know about&lt;/a&gt; is a series of posts on... um, Node.js modules you should know about.&lt;br /&gt;
&lt;br /&gt;
I know that Chrome is what all the cool kids are using. But, given the aforementioned reference to Big Brother, I still use Firefox frequently.&amp;nbsp; For web developers, there are &lt;a href="http://hacks.mozilla.org/2011/11/firefox-tons-of-tools-for-web-developers/"&gt;a ton of great web developer plugins for Firefox&lt;/a&gt;, and this post covers a half-gazillion of them. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://paperjs.org/"&gt;Paper.js&lt;/a&gt; is a neat little Javascript graphics library for programmers of neat little Javascript graphics.&lt;br /&gt;
&lt;br /&gt;
Or perhaps you want to try doing &lt;a href="http://facedetection.jaysalvat.com/"&gt;face detection in Javascript&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
One of my biggest complaints about any library-heavy language is poor curation. Java suffers terribly from this, and so do jQuery and Node.js to a degree. That's why I thought &lt;a href="http://repo.eire-media.com/go/"&gt;The Hand-picked jQuery Plugins Repo&lt;/a&gt; was pretty interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://mozillapopcorn.org/learn-popcorn/"&gt;Mozilla Popcorn&lt;/a&gt; hasn't been generating the same amount of buzz as some of the other web debutantes, but it looks interesting for the future of web video. In particular the &lt;a href="http://highrise.nfb.ca/onemillionthtower/1mt_webgl.php"&gt;National Film Board's project "One Millionth Tower"&lt;/a&gt; is... really cool to watch and play with.&lt;br /&gt;
&lt;br /&gt;
It was about a year ago I predicted a rise in popularity of darknets or mesh networks. So I was delighted to find a solitary article detailing &lt;a href="http://arstechnica.com/open-source/news/2011/11/the-darknet-plan-netroots-activists-dream-of-global-mesh-network.ars"&gt;the rise in popularity of darknets&lt;/a&gt;. Well, there were a couple, actually.&amp;nbsp; This is going to happen sooner or later because politicians and corporate fascists are too technologically illiterate to understand the way their old-school strategies are pushing new-school innovation forward. As a colleague of mine says, the Internet views censorship as a failure and routes around it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://bellard.org/jslinux/"&gt;The JavaScript PC Emulator&lt;/a&gt; by Fabrice Bellard is mind-numbingly jaw-droppingly cool. If you're into that sorta thing. Bellard is one amazing researcher.&lt;br /&gt;
&lt;br /&gt;
I really like the &lt;a href="http://superkul.ca/projects/crescent-house"&gt;Crescent Road House&lt;/a&gt;. It's beautiful.&lt;br /&gt;
&lt;br /&gt;
We have it pretty good in Canada. Canadians are officially richer than Americans. We have better privacy laws. We have a great health care system.&amp;nbsp; But, what keeps high tech innovation from happening here on a larger scale. According to this post, it might be because &lt;a href="http://blogs.vancouversun.com/2011/11/01/canadian-laws-would-have-stopped-youtube-google-from-emerging-here-e-prof-laments/"&gt;Canadian laws would have made starting up Facebook or Youtube impossible in Canada&lt;/a&gt;.&amp;nbsp; This is one for the conservatives to pay attention to, with their pandering to the US Copyright-abuse industry.&lt;br /&gt;
&lt;br /&gt;
Do you feel like taking a course in &lt;a href="http://www.ml-class.org/course/auth/welcome"&gt;Machine Learning from Stanford University&lt;/a&gt;? Of course you do.&amp;nbsp; It's free. As should all education be in this information age. And will be.&amp;nbsp; Oops, I guess that's my prediction for this post.&amp;nbsp; Watch for a movement around free higher education based on meritocratic principles.&lt;br /&gt;
&lt;br /&gt;
Oh, here's &lt;a href="http://chronicle.com/article/Fear-of-Repression-Spurs/129049/"&gt;that other article&lt;/a&gt; on the rise of darknets / mesh networks that I was talking about.&amp;nbsp; Why are people doing this? Fear of repression.&amp;nbsp; Land of the free, home of my ass.&lt;br /&gt;
&lt;br /&gt;
How many mobile frameworks could a woodchuck chuck, if a woodchuck could chuck mobile frameworks? He'd chuck &lt;a href="http://www.markus-falk.com/mobile-frameworks-comparison-chart/"&gt;all the mobile frameworks on this page&lt;/a&gt; and then probably end up using Phonegap.&lt;br /&gt;
&lt;br /&gt;
I can't resist one last JavaScript item, a truly incredible and beautiful work by Mr. Doob... yep, it's &lt;a href="https://github.com/mrdoob/three.js"&gt;three.js&lt;/a&gt;. I used to say that web technology was poised to do everything traditional desktop software programming environments could do, with the exception of 3D video games.&amp;nbsp; That is no longer the case.&amp;nbsp; I for one, welcome our new JavaScript overlords!&lt;br /&gt;
&lt;br /&gt;
Happy reading and have a wonderful week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-7178133208820811035?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZRVJwvuEqm7B9N083Ae2c743fbg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZRVJwvuEqm7B9N083Ae2c743fbg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZRVJwvuEqm7B9N083Ae2c743fbg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZRVJwvuEqm7B9N083Ae2c743fbg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/QHhBBAkO4ds" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/7178133208820811035/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=7178133208820811035" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/7178133208820811035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/7178133208820811035?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/QHhBBAkO4ds/checking-in.html" title="Checking In" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/12/checking-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFRnk5fCp7ImA9WhdbE0g.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-1853293279730028596</id><published>2011-10-11T09:54:00.000-07:00</published><updated>2011-10-11T09:55:17.724-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T09:55:17.724-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>Pink Lake</title><content type="html">Pink Lake, Gatineau Park, Quebec&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2JDYxYeqC0s/TpR0mp-AqCI/AAAAAAAAA8E/C_S53gYscj0/s1600/IMG_2059.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://4.bp.blogspot.com/-2JDYxYeqC0s/TpR0mp-AqCI/AAAAAAAAA8E/C_S53gYscj0/s400/IMG_2059.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #666666;"&gt;&amp;nbsp;© 2011 by Darren DeRidder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-1853293279730028596?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l-qImozeUi8it3ZpKmv4S2U5XtQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-qImozeUi8it3ZpKmv4S2U5XtQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l-qImozeUi8it3ZpKmv4S2U5XtQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-qImozeUi8it3ZpKmv4S2U5XtQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/RnjoYeG5AiE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/1853293279730028596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=1853293279730028596" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1853293279730028596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1853293279730028596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/RnjoYeG5AiE/pink-lake.html" title="Pink Lake" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-2JDYxYeqC0s/TpR0mp-AqCI/AAAAAAAAA8E/C_S53gYscj0/s72-c/IMG_2059.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/10/pink-lake.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEMRnw-fip7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-1750042027113626212</id><published>2011-09-28T15:24:00.000-07:00</published><updated>2011-09-28T15:24:47.256-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T15:24:47.256-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>Little Meech Outflow</title><content type="html">Gatineau Park, Quebec&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dkAWbcXiwBY/ToOeObiJOiI/AAAAAAAAA6s/d3-U0qpk-xg/s1600/IMG_1833.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/-dkAWbcXiwBY/ToOeObiJOiI/AAAAAAAAA6s/d3-U0qpk-xg/s400/IMG_1833.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="color: #666666; font-size: x-small;"&gt;© 2011 Darren DeRidder&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-1750042027113626212?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zLEY9G145H_FYYgnhBmbBtYwnNc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zLEY9G145H_FYYgnhBmbBtYwnNc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zLEY9G145H_FYYgnhBmbBtYwnNc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zLEY9G145H_FYYgnhBmbBtYwnNc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/op42t1fuhC4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/1750042027113626212/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=1750042027113626212" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1750042027113626212?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1750042027113626212?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/op42t1fuhC4/little-meech-outflow.html" title="Little Meech Outflow" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-dkAWbcXiwBY/ToOeObiJOiI/AAAAAAAAA6s/d3-U0qpk-xg/s72-c/IMG_1833.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/09/little-meech-outflow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAFQHk9fip7ImA9WhdVFEo.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-436920373049234262</id><published>2011-09-19T16:25:00.001-07:00</published><updated>2011-09-19T16:25:11.766-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T16:25:11.766-07:00</app:edited><title>Himeji-jo Corridor</title><content type="html">&lt;a href="http://www.flickr.com/photos/30357539@N08/6119328486/" title="photo sharing"&gt;&lt;img src="http://farm7.static.flickr.com/6198/6119328486_71b7150691_m.jpg" alt="" style="border: solid 1px #666666;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/30357539@N08/6119328486/"&gt;Himeji-jo Corridor&lt;/a&gt; &lt;br /&gt;&amp;copy; 2010 Darren DeRidder. Originally uploaded by &lt;a href="http://www.flickr.com/photos/30357539@N08/"&gt;soto voce&lt;/a&gt;&lt;/span&gt;&lt;br clear="all" /&gt;&lt;p&gt;A room within one of the outer walls of Himeji Castle, Himeji, Japan.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-436920373049234262?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4lSFO2Xu3byUJtMU3Dc4BQu_4qg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4lSFO2Xu3byUJtMU3Dc4BQu_4qg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4lSFO2Xu3byUJtMU3Dc4BQu_4qg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4lSFO2Xu3byUJtMU3Dc4BQu_4qg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/U0ND9AO6XaU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/436920373049234262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=436920373049234262" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/436920373049234262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/436920373049234262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/U0ND9AO6XaU/himeji-jo-corridor.html" title="Himeji-jo Corridor" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6198/6119328486_71b7150691_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/09/himeji-jo-corridor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ESXw_eSp7ImA9WhdWGUg.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-6661353739551875398</id><published>2011-09-13T17:06:00.001-07:00</published><updated>2011-09-13T17:06:48.241-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T17:06:48.241-07:00</app:edited><title>Himeji-jo no Kabe</title><content type="html">&lt;a href="http://www.flickr.com/photos/30357539@N08/6117441969/" title="photo sharing"&gt;&lt;img src="http://farm7.static.flickr.com/6086/6117441969_afe2a7c685_m.jpg" alt="" style="border: solid 1px #666666;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/30357539@N08/6117441969/"&gt;Himeji-jo no Kabe&lt;/a&gt; &lt;br /&gt;&amp;copy; 2010 Darren DeRidder. Originally uploaded by &lt;a href="http://www.flickr.com/photos/30357539@N08/"&gt;soto voce&lt;/a&gt;&lt;/span&gt;&lt;br clear="all" /&gt;&lt;p&gt;Himeji castle wall, Himeji, Japan&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-6661353739551875398?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qDp2VdMdMHnv5CRBayW8Ka_lSm0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qDp2VdMdMHnv5CRBayW8Ka_lSm0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qDp2VdMdMHnv5CRBayW8Ka_lSm0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qDp2VdMdMHnv5CRBayW8Ka_lSm0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/M-XCWAODbD8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/6661353739551875398/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=6661353739551875398" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6661353739551875398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6661353739551875398?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/M-XCWAODbD8/himeji-jo-no-kabe.html" title="Himeji-jo no Kabe" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6086/6117441969_afe2a7c685_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/09/himeji-jo-no-kabe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGQHc7fSp7ImA9WhdWEkk.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-8924441314176120723</id><published>2011-09-05T10:59:00.000-07:00</published><updated>2011-09-05T11:08:41.905-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-05T11:08:41.905-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="Japan" /><title>Japanese Craftsmanship</title><content type="html">In his wonderful and comprehensive book, "Japanese Homes and Their Surroundings", first published in 1885 and now available from Google Books, Edward S. Morse writes the following delightful description of Japanese home-building craftsmanship.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZNrYPa7gmz8/TmUMfvFGh-I/AAAAAAAAA6Q/BNSWoR_a8LQ/s1600/IMG_0008.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-ZNrYPa7gmz8/TmUMfvFGh-I/AAAAAAAAA6Q/BNSWoR_a8LQ/s200/IMG_0008.jpg" width="133" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;Within these houses there are often to be seen marvels of exquisite carving, and the perfection of cabinet work; and surprise follows surprise, as one becomes more fully acquainted with the interior finish of these curious and remarkable dwellings.&lt;/blockquote&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MYIFqX3P3js/TmUMknmdLhI/AAAAAAAAA6U/s_EztRlGNXc/s1600/IMG_0010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://4.bp.blogspot.com/-MYIFqX3P3js/TmUMknmdLhI/AAAAAAAAA6U/s_EztRlGNXc/s200/IMG_0010.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;... as to altering the present plan of housebuilding... If such changes are effected, then will perish many of the best features of true Japanese art, which has been the surprise and admiration of Western nations, and of which in the past they have been the unwitting cause of modification and degradation it has already undergone. &lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PSrj_oIl-kc/TmUMlRTKg2I/AAAAAAAAA6Y/_aTszz1qCJM/s1600/IMG_0017.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://3.bp.blogspot.com/-PSrj_oIl-kc/TmUMlRTKg2I/AAAAAAAAA6Y/_aTszz1qCJM/s200/IMG_0017.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;a href="http://3.bp.blogspot.com/-ub2A4BFeFao/TmUMmOB7klI/AAAAAAAAA6c/jm9H0rTFdMw/s1600/IMG_0021.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-ub2A4BFeFao/TmUMmOB7klI/AAAAAAAAA6c/jm9H0rTFdMw/s200/IMG_0021.jpg" width="133" /&gt;&lt;/a&gt;A somewhat extended experience with the common everyday carpenter at home leads me to say, without fear of contradiction, that in matters pertaining to their craft the Japanese carpenters are superior to American. Not only do they show their superiority in their work, but in their versatile ability in making new things. It is a notorious fact that most of the carpenters in our smaller towns and villages are utterly incompetent to carry out any special demand made upon them, outside the building of the conventional two-storied house and ordinary roof. They stand bewildered in the presence of a window-projection or cornice outside the prescribed ruts with which they and their fathers were familiar. Indeed, in most cases their fathers were not carpenters, nor will their children be; and herein alone the Japanese carpenter has an immense advantage over the American, for his trade, as well as other trades, have been perpetuated through generations of families. The little children have been brought up amidst the odor of fragrant shavings, -- have with childish hands performed the duties of an adjustable vice or clamp; and with the same tools which when children they have handed to their fathers, they have in later days earned their daily rice.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href="http://4.bp.blogspot.com/-GDdPkF9CfAQ/TmUMnLrKBWI/AAAAAAAAA6g/IEQKRJKnyHQ/s1600/IMG_0025.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-GDdPkF9CfAQ/TmUMnLrKBWI/AAAAAAAAA6g/IEQKRJKnyHQ/s200/IMG_0025.jpg" width="133" /&gt;&lt;/a&gt;When I see one of our carpenters' ponderous tool-chests, made of polished woods, inlaid with brass decorations, and filled to repletion with several hundred dollars' worth of highly polished and elaborate machine-made implements, and contemplate the work done with them, -- with everything binding that should go loose, and everything rattling that should be tight, and much work that has to be done twice over, with an indication everywhere of a poverty of ideas, -- and then recall the Japanese carpenter with his ridiculously lights and flimsy tool-box containing a meager assortment of rude and primitive tools, -- considering the carpentry of the two people, I am forced to the conviction that civilization and modern appliances count as nothing unless accompanied with a moiety of brains and some little taste and wit.&lt;/blockquote&gt;&lt;blockquote&gt;It is a very serious fact that now-a-days no one in our country is acquiring faithfully the carpenter's trade. Much of this lamentable condition of things is no doubt due to the fact that machine-work has supplanted the hand-work of former times. Doors, blinds, sashes, mouldings are now turned out by the cord and mile, and all done in such greedy haste, and with the greenest of lumber, that if it does not tumble to pieces in transportation it is sure to do so very soon after entering into the house-structure. Nevertheless, the miserable truth yet remains that any man who has nailed up a few boxes, or stood in front of a circular saw for a few months, feels competent to exercise all the duties of that most honorable craft, -- the building of a house.&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vFfTGVnHEy4/TmUMoJNnnzI/AAAAAAAAA6k/2VaVfA1WIXQ/s1600/IMG_0075.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-vFfTGVnHEy4/TmUMoJNnnzI/AAAAAAAAA6k/2VaVfA1WIXQ/s320/IMG_0075.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-8924441314176120723?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SibhR66TCmfK0Hsj-RchPpgxCFE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SibhR66TCmfK0Hsj-RchPpgxCFE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SibhR66TCmfK0Hsj-RchPpgxCFE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SibhR66TCmfK0Hsj-RchPpgxCFE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/qUn-z7ZRh7I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/8924441314176120723/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=8924441314176120723" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8924441314176120723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8924441314176120723?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/qUn-z7ZRh7I/japanese-craftsmanship.html" title="Japanese Craftsmanship" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZNrYPa7gmz8/TmUMfvFGh-I/AAAAAAAAA6Q/BNSWoR_a8LQ/s72-c/IMG_0008.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/09/japanese-craftsmanship.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4DRHs8fyp7ImA9WhdWEkk.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-4513429373246895891</id><published>2011-09-04T13:13:00.000-07:00</published><updated>2011-09-05T09:42:55.577-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-05T09:42:55.577-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="Japan" /><title>Origami Flight</title><content type="html">Paper Airplane Sculpture, Toronto Pearson International Airport &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-EMHJrNPSU2Y/TmPa5BT4mRI/AAAAAAAAA6I/XIAtA3qmyIU/s1600/Departure.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-EMHJrNPSU2Y/TmPa5BT4mRI/AAAAAAAAA6I/XIAtA3qmyIU/s640/Departure.jpg" width="425" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span style="color: #666666;"&gt;&lt;span style="font-size: x-small;"&gt;©2011 Darren DeRidder&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-4513429373246895891?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B2gAm6ng5OdfFe4pjj4wNEh48gg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B2gAm6ng5OdfFe4pjj4wNEh48gg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B2gAm6ng5OdfFe4pjj4wNEh48gg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B2gAm6ng5OdfFe4pjj4wNEh48gg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/E0-tOZKqjWI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/4513429373246895891/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=4513429373246895891" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4513429373246895891?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4513429373246895891?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/E0-tOZKqjWI/origami-flight.html" title="Origami Flight" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-EMHJrNPSU2Y/TmPa5BT4mRI/AAAAAAAAA6I/XIAtA3qmyIU/s72-c/Departure.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/09/origami-flight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQBQXc4cSp7ImA9WhdRFUw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-4243207199973090216</id><published>2011-08-04T21:24:00.000-07:00</published><updated>2011-08-04T21:25:50.939-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-04T21:25:50.939-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>The Market</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Byward Market, Ottawa, Ontario&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm7.static.flickr.com/6004/6010237959_59fa900765_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://farm7.static.flickr.com/6004/6010237959_59fa900765_b.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="background-color: white; color: #444444;"&gt;© 2011 Darren De Ridder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-4243207199973090216?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/myUEGM20MLvj89H-Tyv2tz2TxsU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/myUEGM20MLvj89H-Tyv2tz2TxsU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/myUEGM20MLvj89H-Tyv2tz2TxsU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/myUEGM20MLvj89H-Tyv2tz2TxsU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/50zLNLRKR6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/4243207199973090216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=4243207199973090216" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4243207199973090216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4243207199973090216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/50zLNLRKR6w/market.html" title="The Market" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6004/6010237959_59fa900765_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/08/market.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQHQ3w-fCp7ImA9WhdRFUw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-6877360990900231438</id><published>2011-07-25T20:13:00.001-07:00</published><updated>2011-08-04T21:25:32.254-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-04T21:25:32.254-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>Aberdeen Pavilion</title><content type="html">The Aberdeen Pavilion at mid-day, Landsdowne Park, Ottawa. &lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/30357539@N08/5976175033/" title="photo sharing"&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;img alt="" height="400" src="http://farm7.static.flickr.com/6130/5976175033_d61c5fd6c5_m.jpg" style="border: 1px solid rgb(102, 102, 102);" width="266" /&gt;&lt;br /&gt;
&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;br /&gt;
© 2011 Darren DeRidder.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-6877360990900231438?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xajwr1GKkbqZcTfO_eoLy4nhOXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xajwr1GKkbqZcTfO_eoLy4nhOXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xajwr1GKkbqZcTfO_eoLy4nhOXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xajwr1GKkbqZcTfO_eoLy4nhOXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/pEjWhT0dMPI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/6877360990900231438/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=6877360990900231438" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6877360990900231438?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6877360990900231438?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/pEjWhT0dMPI/aberdeen-pavilion.html" title="Aberdeen Pavilion" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6130/5976175033_d61c5fd6c5_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/aberdeen-pavilion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04DQ3k_eyp7ImA9WhdSGEo.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-6507812876933525985</id><published>2011-07-22T07:53:00.000-07:00</published><updated>2011-07-28T12:06:12.743-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T12:06:12.743-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>jQuery, Data-link, Knockout.JS and Microsoft</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://knockoutjs.com/img/mixVideo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="90" src="http://knockoutjs.com/img/mixVideo.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;In may 2010 Microsoft contributed the template and datalink plugins to jQuery. The announcement was made on Scott Guthrie's blog:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
On October 4 Scott G, Boris Moore and John Resig all announced these as official jQuery plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.borismoore.com/2010/10/jquery-templates-is-now-official-jquery.htmlhttp://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/"&gt;http://www.borismoore.com/2010/10/jquery-templates-is-now-official-jquery.htmlhttp://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
One of the comments in Scott's post suggested that his team should be working with Steve Sanderson as well.&amp;nbsp; Sanderson is the guy behind the &lt;a href="http://knockout.js/"&gt;Knockout.js&lt;/a&gt; templating and data-binding library.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx#7624049"&gt;http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx#7624049&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In November 2011 Steve Sanderson announced he was joining Microsoft's ASP .NET team in the Web Platform and Tools (WPT) Developer Division. http://blog.stevensanderson.com/2010/11/&lt;br /&gt;
&lt;br /&gt;
From this, and taken together with their recent Windows 8 preview, it appears that Microsoft has an interest in promoting advance templating and data-binding for application development on the web stack of Javascript / HTML / CSS, and may put their weight behind Knockout.JS in spite of the "official" status of the&lt;a href="http://api.jquery.com/category/plugins/templates/"&gt; jQuery Templates&lt;/a&gt; and Data-Link plugins.&lt;br /&gt;
&lt;br /&gt;
There is significant overlap between these libraries. In fact, Knockout.JS works closely with the jQuery Template plugin. However, it provides features that are missing from the jQuery data-link plugin and seems more well-suited to the new features of HTML5.&amp;nbsp; It looks like Knockout.JS used together with jQuery Templates could become a leading contender in client side templating, with jQuery and Microsoft's support.&lt;br /&gt;
&lt;br /&gt;
There are many others that also look promising, including &lt;a href="http://angularjs.org/"&gt;AngularJS&lt;/a&gt;, &lt;a href="http://documentcloud.github.com/backbone/"&gt;BackboneJS&lt;/a&gt;, and some that are still in development such as &lt;a href="http://batman.js/"&gt;batman.js&lt;/a&gt; from Shopify.&amp;nbsp; It will be interesting to see how these shake out over the next year or so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-6507812876933525985?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z7nTziVdioTqMeoty8_PCC4efxk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z7nTziVdioTqMeoty8_PCC4efxk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z7nTziVdioTqMeoty8_PCC4efxk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z7nTziVdioTqMeoty8_PCC4efxk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/7m3-gYIYeFk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/6507812876933525985/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=6507812876933525985" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6507812876933525985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6507812876933525985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/7m3-gYIYeFk/jquery-data-link-knockoutjs-and.html" title="jQuery, Data-link, Knockout.JS and Microsoft" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/jquery-data-link-knockoutjs-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIAQXo4eSp7ImA9WhdSEk8.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-1570561769487607832</id><published>2011-07-20T21:26:00.000-07:00</published><updated>2011-07-20T21:29:00.431-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T21:29:00.431-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sailing" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><title>Marina at Dusk</title><content type="html">Sunset over the Nepean Sailing Club, Lac Duschenes, Ottawa&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xq4SwIB0FQE/TieqEDGZ5KI/AAAAAAAAA50/t-Eh8g94_88/s1600/IMG_4539_40_41_tonemapped.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="265" src="http://2.bp.blogspot.com/-xq4SwIB0FQE/TieqEDGZ5KI/AAAAAAAAA50/t-Eh8g94_88/s400/IMG_4539_40_41_tonemapped.jpg" width="400" /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="background-color: #f3f3f3;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="background-color: white; color: black; text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;© 2011 Darren De Ridder &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-1570561769487607832?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OWDlCeDWxvibz1KW3n0nhenkzmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OWDlCeDWxvibz1KW3n0nhenkzmA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OWDlCeDWxvibz1KW3n0nhenkzmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OWDlCeDWxvibz1KW3n0nhenkzmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/2GEA38rHzv0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/1570561769487607832/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=1570561769487607832" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1570561769487607832?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/1570561769487607832?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/2GEA38rHzv0/marina-at-dusk.html" title="Marina at Dusk" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-xq4SwIB0FQE/TieqEDGZ5KI/AAAAAAAAA50/t-Eh8g94_88/s72-c/IMG_4539_40_41_tonemapped.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/marina-at-dusk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGQnYzfip7ImA9WhdSGU0.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-6806533883670481390</id><published>2011-07-07T12:51:00.000-07:00</published><updated>2011-07-28T19:42:03.886-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T19:42:03.886-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Selenium IDE Sideflow Update</title><content type="html">Once again, for your development pleasure, ladies and gentlemen, the &lt;a href="http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html"&gt;famous Sideflow plugin&lt;/a&gt; for Selenium IDE!&amp;nbsp; Goto and while loops performed in Selenium, before your very eyes.&lt;br /&gt;
&lt;br /&gt;
Some people were having a bit of trouble getting started, so I've updated the demo test for Sideflow (Selenium IDE flow control extension) to use the latest Selenese commands.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MaQrV3fQTFA/ThYGx__R3HI/AAAAAAAAA4w/jt7braiMGXc/s1600/sideflow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-MaQrV3fQTFA/ThYGx__R3HI/AAAAAAAAA4w/jt7braiMGXc/s320/sideflow.png" width="306" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
What's changed: no more direct access to 'storedVars'.&amp;nbsp; No more 'getEval'... uses 'runScript' instead.&amp;nbsp; Need to do some weird casting to perform counter increments.&lt;br /&gt;
&lt;br /&gt;
The github repo is &lt;a href="https://github.com/darrenderidder/sideflow"&gt;over here&lt;/a&gt;.&amp;nbsp; Everybody git on board the github train!&lt;br /&gt;
&lt;br /&gt;
PS. You can find the original post &lt;a href="http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-6806533883670481390?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oS5TAdgpghuli4yxosQm7gcvqlw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oS5TAdgpghuli4yxosQm7gcvqlw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oS5TAdgpghuli4yxosQm7gcvqlw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oS5TAdgpghuli4yxosQm7gcvqlw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/TWCkpyo4BNg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/6806533883670481390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=6806533883670481390" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6806533883670481390?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/6806533883670481390?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/TWCkpyo4BNg/selenium-ide-sideflow-update.html" title="Selenium IDE Sideflow Update" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-MaQrV3fQTFA/ThYGx__R3HI/AAAAAAAAA4w/jt7braiMGXc/s72-c/sideflow.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/selenium-ide-sideflow-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NQns-eyp7ImA9WhdTEE0.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-8725908509231500255</id><published>2011-07-06T20:21:00.000-07:00</published><updated>2011-07-06T20:23:13.553-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T20:23:13.553-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sailing" /><title>Spinnaker Set</title><content type="html">We pulled off a perfect spinnaker set with a crew of first-time sailors, Canada Day long weekend. The weather couldn't have been more perfect!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-K4DfskE1ka0/ThUYMq1UknI/AAAAAAAAA4s/PSc7WGqxICw/s1600/IMG_4188.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-K4DfskE1ka0/ThUYMq1UknI/AAAAAAAAA4s/PSc7WGqxICw/s320/IMG_4188.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;Flying the spinnaker is challenging, and doing it with a crew of brand new sailors was interesting.&amp;nbsp; There's a real art to skippering a boat and helping the crew learn the ropes.&amp;nbsp; It's definitely taught me a lot about patience and leadership.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-8725908509231500255?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u03rq1JCHGaKzCJtT6A5DgoFB0E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u03rq1JCHGaKzCJtT6A5DgoFB0E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u03rq1JCHGaKzCJtT6A5DgoFB0E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u03rq1JCHGaKzCJtT6A5DgoFB0E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/A1evGstEmCw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/8725908509231500255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=8725908509231500255" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8725908509231500255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8725908509231500255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/A1evGstEmCw/spinnaker-set.html" title="Spinnaker Set" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-K4DfskE1ka0/ThUYMq1UknI/AAAAAAAAA4s/PSc7WGqxICw/s72-c/IMG_4188.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/spinnaker-set.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04MSX44eip7ImA9WhZaGE4.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-781109517099660502</id><published>2011-07-04T18:19:00.000-07:00</published><updated>2011-07-04T19:13:08.032-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-04T19:13:08.032-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>A simple introduction to TDD with Expresso in NodeJS</title><content type="html">In the last post we made a super simple &lt;a href="http://nodejs.org/"&gt;NodeJS&lt;/a&gt; module called hello.js and used it in app.js. We can make it better, and test it with &lt;a href="https://github.com/visionmedia/expresso"&gt;Expresso&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
First we can add to the awesomeness of hello.js by adding a farewell function, so it can say both "hello" &lt;i&gt;and&lt;/i&gt; "goodbye".&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// hello.js
var greeting="Hello World!";
var farewell="Goodbye Cruel World!";
var greet = function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; return greeting;
};
var leave = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; return farewell;
};
exports.greet = greet;
exports.leave = leave;
&lt;/pre&gt;&lt;br /&gt;
So now our module can say hello, and bid farewell.&amp;nbsp; It exports the "greet" and "leave" functions, which we can use from app.js like so:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// app.js
var hello=require('./lib/hello.js'); 
console.log(hello.greet());
console.log(hello.leave());
&lt;/pre&gt;&lt;br /&gt;
Notice that I moved hello.js into a new directory called "lib", which is why the require statement now says "require('./lib/hello.js')".&lt;br /&gt;
&lt;br /&gt;
Now suppose we want to test this module using expresso.&amp;nbsp; Since expresso is a command-line utility, we should install it globally:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;npm install -g expresso
&lt;/pre&gt;&lt;br /&gt;
Now we can write a test.&amp;nbsp; First we make a "test" directory and then create a file called "hello.test.js".&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;mkdir test
vi test/hello.test.js
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// test/hello.test.js
var assert = require('assert'),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hello = require('hello.js);

module.exports = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'greet()': function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert.equal('Hello World!', hello.greet());
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
};
&lt;/pre&gt;&lt;br /&gt;
This just requires node's built-in "assert" module for unit testing, plus our hello.js module that we want to test. Then, it defines a test to make sure that when we call "greet()", the response is "Hello World!". Alright! Now we can go back to the parent directory (where app.js lives) and run expresso. We tell it to look in the "lib" directory for hello.js. Expresso already knows to look in the "test" directory for tests, and will run everything it finds there.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ expresso -I lib

&amp;nbsp;&amp;nbsp;&amp;nbsp; %100 1 tests

&lt;/pre&gt;Wonderful.&amp;nbsp; Only, we didn't test the part where we say goodbye. Expresso has built-in code coverage reporting that we can enable with the "-c" flag:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ expresso -I lib -c

&amp;nbsp;&amp;nbsp; Test Coverage

&amp;nbsp;&amp;nbsp; +------------------------------------------+----------+------+------+--------+
&amp;nbsp;&amp;nbsp; | filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | coverage | LOC&amp;nbsp; | SLOC | missed |
&amp;nbsp;&amp;nbsp; +------------------------------------------+----------+------+------+--------+
&amp;nbsp;&amp;nbsp; | hello.js&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 87.50 |&amp;nbsp;&amp;nbsp; 10 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |
&amp;nbsp;&amp;nbsp; +------------------------------------------+----------+------+------+--------+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 87.50 |&amp;nbsp;&amp;nbsp; 10 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +----------+------+------+--------+

&amp;nbsp;&amp;nbsp; hello.js:

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 | 1 | var greeting = "Hello World!";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 | 1 | var farewell&amp;nbsp; = "Goodbye Cruel World!";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 | 1 | var greet = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 | 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp; return greeting;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 |&amp;nbsp;&amp;nbsp; | };
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 | 1 | var leave = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 | 0 |&amp;nbsp;&amp;nbsp;&amp;nbsp; return farewell;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 |&amp;nbsp;&amp;nbsp; | };
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 | 1 | exports.greet = greet;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 | 1 | exports.leave = leave; &lt;/pre&gt;&lt;br /&gt;
Cool. It tells us we haven't tested the part about leaving with a farewell. All we have to do if we want 100% code coverage is to define a test for "leave":&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// test/hello.test.js
var assert = require('assert'),
    hello = require('hello.js');

module.exports = {
   'greet()': function() {
       assert.equal('Hello World!', hello.greet());
   }, 
   'leave()': function() {
       assert.equal('Goodbye Cruel World!', hello.leave());
   }
};

&lt;/pre&gt;&lt;br /&gt;
And now when we run expresso again, we should have 100% code coverage.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ expresso -I lib -c

  Test Coverage

   +------------------------------------------+----------+------+------+--------+
   | filename                                 | coverage | LOC  | SLOC | missed |
   +------------------------------------------+----------+------+------+--------+
   | hello.js                                 |   100.00 |   10 |    8 |      0 |
   +------------------------------------------+----------+------+------+--------+
                                              |   100.00 |   10 |    8 |      0 |
                                              +----------+------+------+--------+

   hello.js:

      1 | 1 | var greeting = "Hello World!";
      2 | 1 | var farewell  = "Goodbye Cruel World!";
      3 | 1 | var greet = function() {
      4 | 1 |    return greeting;
      5 |   | };
      6 | 1 | var leave = function() {
      7 | 1 |    return farewell;
      8 |   | };
      9 | 1 | exports.greet = greet;
     10 | 1 | exports.leave = leave; 
&lt;/pre&gt;&lt;br /&gt;
Cool, eh?&lt;br /&gt;
&lt;br /&gt;
Expresso offers several other assert functions that you can find in the documentation here: &lt;a href="http://visionmedia.github.com/expresso/"&gt;http://visionmedia.github.com/expresso/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-781109517099660502?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/euKlu0WR3L3lktH0RyoiZHIZqjQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/euKlu0WR3L3lktH0RyoiZHIZqjQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/euKlu0WR3L3lktH0RyoiZHIZqjQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/euKlu0WR3L3lktH0RyoiZHIZqjQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/1MMjFJP8tHs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/781109517099660502/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=781109517099660502" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/781109517099660502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/781109517099660502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/1MMjFJP8tHs/simple-introduction-to-tdd-with.html" title="A simple introduction to TDD with Expresso in NodeJS" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/simple-introduction-to-tdd-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MRnk4cCp7ImA9WhdSFkU.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-8599238578730968162</id><published>2011-07-03T21:34:00.000-07:00</published><updated>2011-07-26T06:44:47.738-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T06:44:47.738-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>A simple intro to NodeJS modules</title><content type="html">In preparation for an upcoming workshop at &lt;a href="http://www.shad.ca/"&gt;Shad Valley&lt;/a&gt; on &lt;a href="http://nodejs.org/"&gt;NodeJS&lt;/a&gt;, I tried to come up with some simple examples of the &lt;a href="http://commonjs.org/"&gt;CommonJS&lt;/a&gt; module system in NodeJS.&amp;nbsp; &lt;a href="http://twitter.com/felixge"&gt;Felix Geisendörfer&lt;/a&gt; has a similar "hello world" example in his &lt;a href="http://nodeguide.com/beginner.html"&gt;Node.js Beginner Guide&lt;/a&gt;.&amp;nbsp; I've put the main concepts into a short tutorial. We start with one line of Javascript, and turn it into a working NodeJS module.&lt;br /&gt;
&lt;br /&gt;
Assuming you have node installed, you can run "node" from the command line to get the REPL (ie. node shell).&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ node
&amp;gt; console.log("Hello World!");
Hello World!
&lt;/pre&gt;&lt;br /&gt;
Wonderful.  How about putting this in a file?&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// hello.js
console.log("Hello World!")
&lt;/pre&gt;&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;pre&gt;$ node hello.js
Hello World!
&lt;/pre&gt;&lt;br /&gt;
Also wonderful.  Then, how about making an application that includes hello.js?  Let's call it app.js. Here are the two files:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// app.js
require('./hello.js');
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// hello.js
console.log("Hello World!");
&lt;/pre&gt;&lt;br /&gt;
Now we can run it like this.&lt;br /&gt;
&lt;pre&gt;$ node app.js
Hello World!
&lt;/pre&gt;&lt;br /&gt;
Again wonderful. We've written a module. Not a very fancy one, but it's a start. Now, as an aside, suppose we want to run app.js like a shell script, without specifying "node" on the command line all the time? Simply add the node command to the app.js script:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;#!/usr/bin/env node
// app.js
require('./hello.js');
&lt;/pre&gt;&lt;br /&gt;
Oh, and make it executable.&lt;br /&gt;
&lt;pre&gt;chmod u+x app.js&lt;/pre&gt;&lt;br /&gt;
Now we can run it like so:&lt;br /&gt;
&lt;pre&gt;$ ./app.js
Hello World!
&lt;/pre&gt;&lt;br /&gt;
Now we can begin having fun. The thing about modules is that whatever you declare in the module (hello.js) is local to that module.  If you want to use it externally, you have to add it to the special variable "exports":&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;// hello.js
var greeting = "Hello World!";
var greet = function() {
   console.log(greeting);
}
exports.greet = greet;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="brush: jscript"&gt;#!/usr/bin/env node
// app.js
var mygreet = require('./hello.js').greet;
mygreet();
&lt;/pre&gt;&lt;br /&gt;
This accomplishes the same thing, but take note of a couple things.  First, "var greeting" is not available outside of the hello.js file. The function "greet" is available though, because we added it to exports.  So that's how you get variables, functions and objects to be available from your module.  Easy peasy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-8599238578730968162?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kufHw15UlRLLp8b-hYv27R4ptkI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kufHw15UlRLLp8b-hYv27R4ptkI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kufHw15UlRLLp8b-hYv27R4ptkI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kufHw15UlRLLp8b-hYv27R4ptkI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/zD4RgM-YOFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/8599238578730968162/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=8599238578730968162" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8599238578730968162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/8599238578730968162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/zD4RgM-YOFI/simple-intro-to-nodejs-modules.html" title="A simple intro to NodeJS modules" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/07/simple-intro-to-nodejs-modules.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04ARHc7cCp7ImA9WhZUGE8.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-4601396215918028589</id><published>2011-06-11T12:52:00.000-07:00</published><updated>2011-06-11T12:52:25.908-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-11T12:52:25.908-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title>Smile</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i1.sndcdn.com/artworks-000008026257-qridzl-original.jpg?10e4608" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://i1.sndcdn.com/artworks-000008026257-qridzl-original.jpg?10e4608" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Reading articles on multi-core scaling while listening to a new track from Jamiroquai - "Smile" - available as a download from &lt;a href="http://soundcloud.com/jamiroquai1/jamiroquai-smile"&gt;http://soundcloud.com/jamiroquai1/jamiroquai-smile&lt;/a&gt;. It's pretty good - even if you're not into software design for multi-core, multi-cpu computer architectures. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-4601396215918028589?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rooiIgsuLUmdkHNX5-wA7OY_jwo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rooiIgsuLUmdkHNX5-wA7OY_jwo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rooiIgsuLUmdkHNX5-wA7OY_jwo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rooiIgsuLUmdkHNX5-wA7OY_jwo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/S_3EiszaIaE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/4601396215918028589/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=4601396215918028589" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4601396215918028589?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/4601396215918028589?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/S_3EiszaIaE/smile.html" title="Smile" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/06/smile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQEQ3s6eCp7ImA9WhZUEUw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-5493196607619312072</id><published>2011-06-01T19:39:00.000-07:00</published><updated>2011-06-03T09:25:02.510-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-03T09:25:02.510-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="thoughts" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>Windows 8 gets on the Web Stack Bandwagon</title><content type="html">I'm a Mac / Linux guy, but it's good to see Microsoft putting some serious work into the user experience in the &lt;a href="http://www.microsoft.com/presspass/features/2011/jun11/06-01corporatenews.aspx"&gt;Windows 8 preview&lt;/a&gt;.&amp;nbsp; What's cool about the video on that link is that they've also seen the light when it comes to the &lt;i&gt;developer experience&lt;/i&gt;, paving the way for rapid application development by leveraging the web stack of HTML5 and JavaScript.&amp;nbsp; A long way back I wrote about&amp;nbsp; "&lt;a href="http://51elliot.blogspot.com/2007/05/gdel-escher-bach.html"&gt;Gödel, Escher, Bach&lt;/a&gt;" to explore the link between artistic creativity and great engineering work - how a love of technical complexity drives some developers, compared to a love of elegance and simplicity that drives another kind of developer.&amp;nbsp; While technical complexity enamors the uber-geek, artists are inspired by technology that gets out of the way and allows them to do what they do best - create stuff.&amp;nbsp; Even though a web stack wouldn't be my first choice for some kinds of apps, it's just fine for a whole lot of them, and when it comes to rapid application development its way, way up high on the list of best options.&lt;br /&gt;
&lt;br /&gt;
It seems like in the midst of Apple's incredible growth in the mobile, laptop, and tablet space there's been a lot of soul-searching going on at companies like Nokia, Microsoft, RIM, and many others.&amp;nbsp; A dominant theme that keeps coming up is "simplicity".&amp;nbsp; For example, see "&lt;a href="http://51elliot.blogspot.com/2011/01/more-simplicity.html"&gt;Why Dropbox beat Syncplicity&lt;/a&gt;".&amp;nbsp; By embracing web technologies for app development&amp;nbsp; Microsoft is taking a forward-looking step towards simplicity in application development.&amp;nbsp; Hopefully this means standards-based web technologies and not the embrace-and-extend, proprietary model we have come to expect from Microsoft.&lt;br /&gt;
&lt;br /&gt;
Things all seem to be moving in this direction.&amp;nbsp; RIM has a platform for building apps on web standards for the Blackberry.&amp;nbsp; The iPhone has had "web apps" for a long time.&amp;nbsp; And recently I've run into more people who are excited about Nitobi's PhoneGap, a technology I reviewed a few months ago (&lt;a href="http://51elliot.blogspot.com/2011/02/phonegap-and-jquery-mobile-first.html"&gt;PhoneGap and jQuery Mobile First Impressions&lt;/a&gt;) which let's you build apps for 6 different smartphone platforms using standard web technologies &lt;br /&gt;
&lt;br /&gt;
I think I just set a record for cross-linking to my own posts!&amp;nbsp; To make up for it next time I'll post a bunch of external links to cool stuff from the interwebs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-5493196607619312072?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yFhqhuwCYzmMFtHg6sW9oS0waa4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yFhqhuwCYzmMFtHg6sW9oS0waa4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yFhqhuwCYzmMFtHg6sW9oS0waa4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yFhqhuwCYzmMFtHg6sW9oS0waa4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/ZtqM7u_i_dw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/5493196607619312072/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=5493196607619312072" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/5493196607619312072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/5493196607619312072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/ZtqM7u_i_dw/windows-8-gets-on-web-stack-bandwagon.html" title="Windows 8 gets on the Web Stack Bandwagon" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/06/windows-8-gets-on-web-stack-bandwagon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQ3Y_eip7ImA9WhZaEUU.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-5955556756824231200</id><published>2011-05-16T08:25:00.001-07:00</published><updated>2011-06-27T06:48:42.842-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-27T06:48:42.842-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>get path in bash</title><content type="html">When running a bash shell you might want to find files and directories relative to the path of the script. The use of 'pwd' in this case can lead to problems if the script has been run from another directory. What you need is the absolute path of the script being executed.  Here's an example of how to do it. This works on most Linuxes but unfortunately is not supported on Mac OSX.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/974638.js?file=bashpath.sh"&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-5955556756824231200?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aGIEO40CZsCCqNxJ_LNrhoNMc8o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aGIEO40CZsCCqNxJ_LNrhoNMc8o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aGIEO40CZsCCqNxJ_LNrhoNMc8o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aGIEO40CZsCCqNxJ_LNrhoNMc8o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/8WtQCb4LCyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/5955556756824231200/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=5955556756824231200" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/5955556756824231200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/5955556756824231200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/8WtQCb4LCyY/get-path-in-bash.html" title="get path in bash" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/05/get-path-in-bash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIESX87eip7ImA9WhZQFUo.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-7810081989174479396</id><published>2011-04-23T09:01:00.000-07:00</published><updated>2011-04-23T09:01:48.102-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-23T09:01:48.102-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title>Map Reduce in JS</title><content type="html">Joel Spolsky's piece "&lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;Can Your Programming Language Do This?&lt;/a&gt;" was an enjoyable read for three reasons: 1) he provides some clear, simple examples of map/reduce and anonymous functions, 2) he shows how these are natively supported in JavaScript (actually there is even more and better support for Map/Reduce in JavaScript than he describes) and 3) he hints (link to related article) at why Java is a mediocre language that produces mediocre software. Originally posted in 2006 it generated a big buzz on HN this morning and is more timely now than ever, considering the groundswell of support and innovation around JavaScript in the upcoming generation of web-scale programmers.&lt;br /&gt;
&lt;br /&gt;
Those who follow the bleeding edge of software development today know that in  the last two years there has been a Cambrian explosion of innovation and  creativity related to JavaScript as a serious, server-side programming  language.&amp;nbsp; It may not be a stretch to say that a majority of the  software people interact with today is powered by JavaScript,  considering the ubiquity of web-based applications. With the increasing prevalence of  JSON as a data interchange format, the advent of high-performance  server-side JavaScript engines, and non-relational data-stores that  speak JSON natively, there is now, for the first time, a homogeneous  software ecosystem that spans the N-tier distributed architecture. It seems this post from 2006 was prescient in it's discussion of the language's capabilities and potential.&lt;br /&gt;
&lt;br /&gt;
A good post that hits three of my favorite birds with one stone, and an excellent cup of Francesco's dark roast on a rainy Saturday morning while listening to the Isbells.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src="http://www.youtube.com/embed/6qaDZytsJPc?fs=1" allowfullscreen="" frameborder="0" height="344" width="425"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-7810081989174479396?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a2bf5Li7RnbzELlW6I-u4Nq7wKk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a2bf5Li7RnbzELlW6I-u4Nq7wKk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a2bf5Li7RnbzELlW6I-u4Nq7wKk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a2bf5Li7RnbzELlW6I-u4Nq7wKk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/Up6dcW1RUBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/7810081989174479396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=7810081989174479396" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/7810081989174479396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/7810081989174479396?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/Up6dcW1RUBo/map-reduce-in-js.html" title="Map Reduce in JS" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/6qaDZytsJPc/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/04/map-reduce-in-js.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYDQHY_fyp7ImA9WhZQFUw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-2155327257316670901</id><published>2011-04-22T17:08:00.000-07:00</published><updated>2011-04-22T17:22:51.847-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T17:22:51.847-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title>Virtual Chior 2.0 "Sleep"</title><content type="html">The previously mentioned production of Eric Whitacre's Virtual Chior 2.0 performance of "Sleep", previewed recently at TED, has been posted on Youtube. A brilliant collaboration of more than 2000 singers from around the world participating in a virtual choir.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="235" width="400"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6WhWDCw3Mng&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/6WhWDCw3Mng&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="400" height="235"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-2155327257316670901?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XMXy9ManvlVQiS6ULyAWiyZwR-s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XMXy9ManvlVQiS6ULyAWiyZwR-s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XMXy9ManvlVQiS6ULyAWiyZwR-s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XMXy9ManvlVQiS6ULyAWiyZwR-s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/x-8FQTgR2Qg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/2155327257316670901/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=2155327257316670901" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/2155327257316670901?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/2155327257316670901?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/x-8FQTgR2Qg/virtual-chior-20-sleep.html" title="Virtual Chior 2.0 &quot;Sleep&quot;" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/04/virtual-chior-20-sleep.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04BSX05eip7ImA9WhZQFUw.&quot;"><id>tag:blogger.com,1999:blog-3302102753324425376.post-3801785429138377349</id><published>2011-04-22T16:45:00.000-07:00</published><updated>2011-04-22T16:45:58.322-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T16:45:58.322-07:00</app:edited><title>The Dark Side of Hadoop</title><content type="html">Backtype Technology posted an article "&lt;a href="http://tech.backtype.com/the-dark-side-of-hadoop"&gt;The Dark Side of Hadoop&lt;/a&gt;".&lt;br /&gt;
&lt;br /&gt;
[via HN]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3302102753324425376-3801785429138377349?l=51elliot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s9n7IZEUeDwmc8U0Rn6loFtnThg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9n7IZEUeDwmc8U0Rn6loFtnThg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s9n7IZEUeDwmc8U0Rn6loFtnThg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9n7IZEUeDwmc8U0Rn6loFtnThg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/51Elliot/~4/YOfQImr5bGk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://51elliot.blogspot.com/feeds/3801785429138377349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3302102753324425376&amp;postID=3801785429138377349" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/3801785429138377349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3302102753324425376/posts/default/3801785429138377349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/51Elliot/~3/YOfQImr5bGk/dark-side-of-hadoop.html" title="The Dark Side of Hadoop" /><author><name>Darren DeRidder</name><uri>http://www.blogger.com/profile/00230771763285373052</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_Vi1folaOZAs/SeDgn0bDzBI/AAAAAAAAAVQ/3ikN43XB-Bw/S220/Photo+3.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://51elliot.blogspot.com/2011/04/dark-side-of-hadoop.html</feedburner:origLink></entry></feed>

