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

<channel>
	<title>Dr Nic &#187; Essay</title>
	<atom:link href="http://drnicwilliams.com/category/essay/feed/" rel="self" type="application/rss+xml" />
	<link>http://drnicwilliams.com</link>
	<description>Ruby makes Rails, Javascript makes Ajax, Dr Nic makes Magic</description>
	<lastBuildDate>Tue, 03 Aug 2010 23:44:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Read &#8220;Wrath of a Mad God&#8221; and get closure on Raymond E Feist</title>
		<link>http://drnicwilliams.com/2008/03/23/read-wrath-of-a-mad-god-and-get-closure-on-raymond-e-fiest/</link>
		<comments>http://drnicwilliams.com/2008/03/23/read-wrath-of-a-mad-god-and-get-closure-on-raymond-e-fiest/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 14:30:45 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2008/03/23/read-wrath-of-a-mad-god-and-get-closure-on-raymond-e-fiest/</guid>
		<description><![CDATA[I just finished reading a book. If you&#8217;ve read Magician, by Raymond E Feist, and any of the sequels then you need to read Wrath of a Mad God which has just come out. I know as well as you do that Ray&#8217;s work hasn&#8217;t been fantastic over the last decade or so. In fact, [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2006/10/01/spam-flter-by-language/' rel='bookmark' title='Permanent Link: [Wish] Spam filter by Language'>[Wish] Spam filter by Language</a> <small>Does anyone know to whom I address and send this...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I just finished reading a book.</p>
<p>If you&#8217;ve read <a href="http://www.amazon.com/Magician-Riftwar-Saga-Raymond-Feist/dp/0586217835/">Magician</a>, by <a href="http://en.wikipedia.org/wiki/Raymond_E._Feist">Raymond E Feist</a>, and any of the sequels then you need to read <a href="http://www.amazon.com/Wrath-Mad-Darkwar-Saga-Book/dp/0060792981/">Wrath of a Mad God</a> which has just come out. I know as well as you do that Ray&#8217;s work hasn&#8217;t been fantastic over the last decade or so. In fact, I stopped reading his books altogether. This is noteworthy since he was the only novelist for whom I used buy each and every book he wrote, in hard cover so I could have the entire collection site nicely on my shelf. I even saw him speak in public once.</p>
<p>Then his books became soft like a wet tissue, and I stopped giving him my money. But I just read his latest book over Easter, and now you must read it too.</p>
<p>Similarly if the Catholic church releases the 3rd volume of their &#8220;Bible: The Testaments&#8221; trilogy, you&#8217;d probably grab a copy just to see how the story ends, even if you didn&#8217;t really follow the first 2 books.</p>
<p>With &#8220;Wrath of a Mad God,&#8221; Raymond E Feist has rewarded each any every loyal reader of his multitude of books with a final &#8220;this is how it ends&#8221; book. I&#8217;m prepared to believe that this is Ray&#8217;s final book. He might write more because his publisher gives him money to do it, but really this book ties together 20+ books about the fabulous characters from Midkemia. More importantly, this book answers questions.</p>
<p>Who is Nakor?</p>
<p>Who was Macros?</p>
<p>The downside of this book is that its the 3rd book of a trilogy. Over the last few weeks I bought + read them all, so I can&#8217;t say whether you can just read this latest one on its own and get full value.</p>
<p>Also, I&#8217;m not saying this is the best book you&#8217;ll ever read.</p>
<p>But, if you&#8217;re like me &#8211; yearning for the majestic wars, battles between armies from different planets, interfering Gods, and the superhumans at the center of it all, then its worth taking the final journey: read all three books (starting with <a href="http://www.amazon.com/Flight-Nighthawks-Darkwar-Saga-Book/dp/B000NNX1YQ/">Flight of the Night Hawks</a> and <a href="http://www.amazon.com/Into-Dark-Realm-Darkwar-Saga/dp/0060792809/">Into a Dark Realm</a>).</p>
<p>Need a final excuse to read these books and return to the bosom of all the wonders of Feist&#8217;s earlier works?</p>
<p>When I saw Feist speak in public a decade ago, I distinctly remember one thing. He said the problem with having a superhuman like Pug or Tomas is that you constantly need to distract them throughout the whole book so that the other characters have something to do. So Pug hasn&#8217;t really done any amazingly jaw dropping since he said &#8220;Tremble and despair for I am Power!&#8221; in the first book. I think this last book contains another jaw dropping moment worth the price of admission. Unfortunately he is on his own when he does it, so there is no snappy one-line quote to go with it. This is just an example of my final excuse for you to read these books and thus have closure of Raymond E Feist&#8217;s world of Midkemia:</p>
<p>The last book is all about Pug. A happy place to finish, just as it was a happy place to start.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2006/10/01/spam-flter-by-language/' rel='bookmark' title='Permanent Link: [Wish] Spam filter by Language'>[Wish] Spam filter by Language</a> <small>Does anyone know to whom I address and send this...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2008/03/23/read-wrath-of-a-mad-god-and-get-closure-on-raymond-e-fiest/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?</title>
		<link>http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/</link>
		<comments>http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 23:19:18 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[OpenID]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/</guid>
		<description><![CDATA[This article has no code in it. There are no TODO steps. Nothing to install. Its a picture of the future. There is no reason to bookmark this article and read it another day. Its nearly all pictures. You can read it now. This &#8220;picture of the future&#8221; was actually added to our browsers in [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2007/09/11/myopenid-goes-down-multiple-openids-useful/' rel='bookmark' title='Permanent Link: Why supporting multiple OpenIDs per User is useful for users&#8230;'>Why supporting multiple OpenIDs per User is useful for users&#8230;</a> <small>Web apps/services go down for maintenance (expected or erroneously) all...</small></li><li><a href='http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/' rel='bookmark' title='Permanent Link: One year on the InterTubes'>One year on the InterTubes</a> <small>Dumping thoughts onto the InterTubes, aka blogging, is fun. And...</small></li><li><a href='http://drnicwilliams.com/2007/07/26/sample-app-rails-multiple-openids-per-user/' rel='bookmark' title='Permanent Link: Sample Rails app: multi-OpenIDs per user'>Sample Rails app: multi-OpenIDs per user</a> <small>Last time, on &#8220;Dr Nic loves OpenID&#8221;&#8230; Dr Nic had...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>This article has no code in it. There are no TODO steps. Nothing to install. Its a picture of the future.</p>
<p>There is no reason to bookmark this article and read it another day. Its nearly all pictures. You can read it now.</p>
<p>This &#8220;picture of the future&#8221; was actually added to our browsers in the 90s. Netscape and MSIE3.0 both had it. </p>
<p>&#8220;It&#8221; is Client Certificates, and to me to means &#8220;never logging on with username/password NOR OpenID ever again&#8221;. Zero Sign On. It must be better than the much-targetted Single Sign On.</p>
<h3>Client Certificates</h3>
<p>Firefox 2.0:</p>
<p><img src="http://img.skitch.com/20080221-cf2nn6qtgt2qdqp8pxhpq4ygdm.jpg" alt="no-certificates"/></p>
<p>Or on Safari/KeyChain:</p>
<p><img src="http://img.skitch.com/20080221-fk3y222sb89awjjsht1n1annbm.jpg" alt="Keychain Access - no certificates"/></p>
<p>Small problem: no website I&#8217;ve ever used has ever offered them, so I never knew they existed. I didn&#8217;t know what they did, nor as a web developer that I could create them for users <em>who&#8217;d never need to login again</em>.</p>
<p><a href="http://dataconstellation.com/blog/">Clifford Heath</a> showed me the light. On #roro irc channel, we were exploring how &#8220;Zero Sign On&#8221; might be implemented using ssh-keygen, and browser plugins etc. Clifford mentioned client certificates and then someone else mentioned that <a href="http://myopenid.com">MyOpenID</a> already supported them. [someone = <a href="http://here.the.ycros.be/">Michael Kedzierski</a>]</p>
<p>I already had an myopenid account, so raced over to explore the new world of certificates.</p>
<p>Under &#8220;Authentication Settings&#8221;:</p>
<p><img src="http://img.skitch.com/20080221-be27aeq3w3iuft9ut3ei16xse9.jpg" alt="myopenid-create-certificate"/></p>
<p>After submit:</p>
<p><img src="http://img.skitch.com/20080221-f7wdf319gafd2gq811nrdh91a5.jpg" alt="myopenid-creating-certificate-dialog"/></p>
<p>And then:</p>
<p><img src="http://img.skitch.com/20080221-i3bxh8fqt8wbgmjktuy4hkhda.jpg" alt="myopenid-certificate-creation-finished"/></p>
<p>Then feedback:</p>
<p><img src="http://img.skitch.com/20080221-fn12hy727es2htja6i4pgnpgd9.jpg" alt="SSL Client Certificates"/></p>
<p>So I thought to test out if &#8220;Zero Sign On&#8221; actually worked. Normally, after logging out you&#8217;d need to submit username/password or if a site supported OpenID (yes myopenid.com is an OpenID provider which is a bit circular but bear with me) you login by entering your OpenID url and pressing Enter. Either way, you&#8217;ve got work to do.</p>
<p>Instead, I clicked &#8220;Login&#8221; link on the home page, and was redirected immediately to:</p>
<p><img src="http://img.skitch.com/20080221-kg8ytqkj6qcjyysp4k81g1ae9x.jpg" alt="myopenid-login-uses-alternate-url"/></p>
<p><img src="http://img.skitch.com/20080221-k1xpmx26h6ik1sumbqfr45axat.jpg" alt="myopenid-signin-with-certificate-form"/></p>
<p>So it was still using cookies so that it could log me in immediately next time without clicking &#8220;login&#8221;, but either way, there is no username/password nor any other &#8220;type something here&#8221; login form. Just a &#8220;Remember Me&#8221; checkbox.</p>
<p>Finally, myopenid.com shows a log of your sign-in attempts:</p>
<p><img src="http://img.skitch.com/20080222-m9335axkxm76mpg9mbkcsnyjat.jpg" alt="recent activity"/></p>
<h3>Your sites and the future</h3>
<p>As a web developer, you can do one of two things to get some leverage of Client Certificates.</p>
<ol>
<li>Support OpenID as a login mechanism. Users with myopenid.com accounts (or other openid providers that support client certificates) will benefit from automatic login to their openid page and instant redirection to your site. You&#8217;ll also be able to help new users import their profile data to get them started quickly.</li>
<li>Implement Client Certificates yourself. I would have liked to have had a crack at this before posting about Client Certificates and all their sweet loveliness, but I didn&#8217;t. My bad. Instead, I found a nice step-by-step (plus comments with updates) on <a href="http://blogs.ittoolbox.com/security/investigator/archives/howto-securing-a-website-with-client-ssl-certificates-11500">implementing Client Certificates</a></li>
</ol>
<p>If you have/do implement Client Certificates in Ruby/Rails world, you&#8217;ll get a 1000 Happy Points from me if you open source it/blog about it. Happy Points are redeemable for Happiness in all countries.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2007/09/11/myopenid-goes-down-multiple-openids-useful/' rel='bookmark' title='Permanent Link: Why supporting multiple OpenIDs per User is useful for users&#8230;'>Why supporting multiple OpenIDs per User is useful for users&#8230;</a> <small>Web apps/services go down for maintenance (expected or erroneously) all...</small></li><li><a href='http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/' rel='bookmark' title='Permanent Link: One year on the InterTubes'>One year on the InterTubes</a> <small>Dumping thoughts onto the InterTubes, aka blogging, is fun. And...</small></li><li><a href='http://drnicwilliams.com/2007/07/26/sample-app-rails-multiple-openids-per-user/' rel='bookmark' title='Permanent Link: Sample Rails app: multi-OpenIDs per user'>Sample Rails app: multi-OpenIDs per user</a> <small>Last time, on &#8220;Dr Nic loves OpenID&#8221;&#8230; Dr Nic had...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/feed/</wfw:commentRss>
		<slash:comments>71</slash:comments>
		</item>
		<item>
		<title>Ruby.NET goes Open Source &#8230; too late?</title>
		<link>http://drnicwilliams.com/2007/10/13/rubynet-goes-open-source/</link>
		<comments>http://drnicwilliams.com/2007/10/13/rubynet-goes-open-source/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 23:48:09 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2007/10/13/rubynet-goes-open-source/</guid>
		<description><![CDATA[Once upon a time there were two Ruby on .NET projects &#8211; one by John Lam, created in his spare time (RubyCLR) and ultimately he and his code was absorbed by Microsoft (now IronRuby). The other &#8211; Ruby.NET &#8211; was created by Wayne Kelly, at the Queensland University of Technology (QUT), in Brisbane, Australia. My [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2010/06/01/validate-and-save-your-ruby-in-textmate-with-secret-rubinus-superpowers/' rel='bookmark' title='Permanent Link: Validate and Save your Ruby in TextMate &#8211; with secret Rubinus superpowers'>Validate and Save your Ruby in TextMate &#8211; with secret Rubinus superpowers</a> <small>In some TextMate bundles, if you save a file it...</small></li><li><a href='http://drnicwilliams.com/2008/12/11/future-proofing-your-ruby-code/' rel='bookmark' title='Permanent Link: Future proofing your Ruby code. Ruby 1.9.1 is coming.'>Future proofing your Ruby code. Ruby 1.9.1 is coming.</a> <small> Bugger. I&#8217;m a Ruby monogamist. I use the Ruby...</small></li><li><a href='http://drnicwilliams.com/2008/07/04/unit-testing-iphone-apps-with-ruby-rbiphonetest/' rel='bookmark' title='Permanent Link: Unit Testing iPhone apps with Ruby: rbiphonetest'>Unit Testing iPhone apps with Ruby: rbiphonetest</a> <small> Everything to love about Ruby: the concise, powerful language;...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Once upon a time there were two Ruby on .NET projects &#8211; one by <a href="http://www.iunknown.com/">John Lam</a>, created in his spare time (<a href="http://rubyforge.org/projects/rubyclr/">RubyCLR</a>) and ultimately he and his code was absorbed by Microsoft (now <a href="http://www.ironruby.net/">IronRuby</a>). </p>
<p>The other &#8211; <a href="http://plas2003.fit.qut.edu.au/Ruby.NET/">Ruby.NET</a> &#8211; was created by Wayne Kelly, at the Queensland University of Technology (QUT), in Brisbane, Australia. My city. Where I live. Which is great, because Wayne is going to talk about Ruby.NET on Monday night.</p>
<p><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com.au/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;ll=-25.335448,135.745076&amp;spn=38.161973,47.373047&amp;t=h&amp;om=1&amp;msid=112014365174759082032.00043c53835b337ff4125&amp;output=embed&amp;s=AARTsJot7TeKmohG8W3npLmw8fsJG3apwA"></iframe><br /><small><a href="http://maps.google.com.au/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;ll=-25.335448,135.745076&amp;spn=38.161973,47.373047&amp;t=h&amp;om=1&amp;msid=112014365174759082032.00043c53835b337ff4125&amp;source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>
<caption>Above: pointless map to the HQ of Ruby.NET in Brisbane; NOT the location of the meeting. Its just here to space out the text a bit and help you want to read the whole thing.</caption>
<p>This Monday 15th Oct, Wayne will be talking at the <a href="http://ruby.meetup.com/74/calendar/6477297/?gj=ej22">Brisbane Ruby + Rails Brigade</a> about Ruby.NET, and to reiterate that it has/is to be <a href="http://groups.google.com/group/ruby-talk-google/browse_thread/thread/20832f624ed9b978">open sourced</a>.</p>
<p>[/end infommercial for Ruby meetup]</p>
<p>[start of critique on why the hell I don't know tickitty-boo about Ruby.NET, and the perils of Open Sourcing something that no one knows anything about]</p>
<p>RubyCLR/IronRuby and Ruby.NET have the same aim &#8211; to allow Ruby to be used to write .NET apps, in addition to the other languages you can run on the .NET CLR (common language runtime) &#8211; C#, C++, J# and VB.</p>
<p>So if RubyCLR is now Microsoft IronRuby, and is being shipped with Silverlight and thus/probably with Visual Studio 2008, does this mean RubyCLR won and Ruby.NET lost?</p>
<p>Hint: refer to &#8220;I don&#8217;t know tickitty-boo about Ruby.NET&#8221; above and Microsoft&#8217;s $X trillian market cap and pervasive promotion of Silverlight lately.</p>
<p>I can&#8217;t compare the two projects technically, but I can compare them from a marketing/community perspective, and with a healthy dose of sarcasm. I also want to ask you for help &#8211; even if you haven&#8217;t used Ruby.NET nor ever will. Its an anti-Microsoft thing. Read on&#8230;</p>
<p>From the get-go, John Lam has talked and blogged about RubyCLR/IronRuby. It even had a fancy website back in its RubyCLR days, with a logo and everything. John will be at RubyConf in Charlotte NC in November, talking about IronRuby.</p>
<p>Ruby.NET doesn&#8217;t have its own website &#8211; its just a page somewhere on the QUT domain &#8211; <a href="http://plas2003.fit.qut.edu.au/Ruby.NET/">http://plas2003.fit.qut.edu.au/Ruby.NET/</a>, with updates that aren&#8217;t available via RSS.</p>
<p>Ruby.NET doesn&#8217;t have a blog, nor does Wayne. Oooh, I found Wayne has a 1995-compliant &#8220;<a href="http://sky.fit.qut.edu.au/~kellyw/">who am I?</a>&#8221; page, including the 1995-edition yellow balls <IMG SRC="http://sky.fit.qut.edu.au/~kellyw/Ball_Yellow.gif" ALT="*" HEIGHT="15" WIDTH="20">.</p>
<p>But, he did do this <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=295197">video with the Ch9 MSDN site</a>.</p>
<p>This isn&#8217;t a dig at Wayne entirely &#8211; I haven&#8217;t met him yet and hopefully he finds the above funny enough that he&#8217;ll still talk to me <img src='http://drnicwilliams.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Rather, this is a call for help for getting Ruby onto .NET in a safe, friendly, Microsoft-free, open source way. Its about World Peace.</p>
<p>Ruby.NET maybe open sourced, but as a project and a movement, <a href="http://groups.google.com/group/ruby-talk-google/browse_thread/thread/20832f624ed9b978">it needs help</a>: &#8220;I am inexperienced at managing this kind of open source project I need your help and advice.&#8221; [Wayne]</p>
<p>Lots and lots of Ruby developers are sitting on Windows boxes, and probably a lot of them do/have written .NET stuff. Blending Ruby into .NET means awesome WinForms loveliness with a decent language behind the scenes.</p>
<p>So, on Monday, Wayne is going to show off his wares. If you are in Brisbane, come along. For everyone else, I&#8217;ll park the video camera at the back of the room.</p>
<p>Now, before I ask you for assistance, I need to tell this story (blockquoted for dramatic effect):</p>
<blockquote><p>I was at <a href="http://www.webdirections.org/">Web Directions South conference</a> a few weeks ago, which Microsoft helped sponsor, and had a large booth at the front door promoting Silverlight.</p>
<p>I met some of the Silverlight people at drinks and got talking to one guy who was an ex-programmer-come-spruiker, and the conversation degraded as follows:</p>
<p><code>Him: IE7 was delayed for a long time because 'ajax' came out and it scared Microsoft.<br />
Me: Microsoft of f@#ked up IE7 on purpose?<br />
Him: We have shareholders.<br />
Me: So you did it on purpose?<br />
Him: Yes<br />
[Me: exits the table]<br />
</code>
</p></blockquote>
<p>This translates directly into my fears for IronRuby (similarly concerned are <a href="http://martinfowler.com/bliki/RubyMicrosoft.html">Martin Fowler</a> and <a href="http://ola-bini.blogspot.com/2007/06/there-can-be-only-one-tale-about-ruby.html">Ola Bini</a>). Microsoft was persecuted for modifying Java outside the license agreement. Shareholders first, community last, and all that.</p>
<p>Ruby.NET isn&#8217;t my project, but I envisage it to be an important project.</p>
<p>But it will be an abandoned trivial project unless it gets a community of users, the corresponding portion of patchers, and a corresponding portion of core developers.</p>
<p>To my mind, Ruby.NET needs marketing help. It needs a website + blog, logo + identity: a place for users to feel proud of, a site they can show their bosses when they are trying to convert their team from C#.NET to Ruby.NET.</p>
<p>You don&#8217;t need to use Ruby.NET to be able to help here. </p>
<p>If you can help, please contact <a href="http://sky.fit.qut.edu.au/~kellyw/">Wayne</a> directly.</p>
<p>Alternately, if you have any public thoughts on how Wayne can build a community around the project etc, go for gold below. </p>
<p>NOTE: I&#8217;ve never built a large community around any more my projects so I can&#8217;t claim any real high-ground over the Ruby.NET project. But I do know I&#8217;d rather have choice in my Ruby for .NET implementations, and Ruby.NET is only going to be a choice if it can become a self-sustaining project.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2010/06/01/validate-and-save-your-ruby-in-textmate-with-secret-rubinus-superpowers/' rel='bookmark' title='Permanent Link: Validate and Save your Ruby in TextMate &#8211; with secret Rubinus superpowers'>Validate and Save your Ruby in TextMate &#8211; with secret Rubinus superpowers</a> <small>In some TextMate bundles, if you save a file it...</small></li><li><a href='http://drnicwilliams.com/2008/12/11/future-proofing-your-ruby-code/' rel='bookmark' title='Permanent Link: Future proofing your Ruby code. Ruby 1.9.1 is coming.'>Future proofing your Ruby code. Ruby 1.9.1 is coming.</a> <small> Bugger. I&#8217;m a Ruby monogamist. I use the Ruby...</small></li><li><a href='http://drnicwilliams.com/2008/07/04/unit-testing-iphone-apps-with-ruby-rbiphonetest/' rel='bookmark' title='Permanent Link: Unit Testing iPhone apps with Ruby: rbiphonetest'>Unit Testing iPhone apps with Ruby: rbiphonetest</a> <small> Everything to love about Ruby: the concise, powerful language;...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2007/10/13/rubynet-goes-open-source/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>One year on the InterTubes</title>
		<link>http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/</link>
		<comments>http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 09:01:14 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[Wish]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/</guid>
		<description><![CDATA[Dumping thoughts onto the InterTubes, aka blogging, is fun. And I&#8217;ve been doing it 1 year now. Its also challenging. Its like inviting people over for dinner &#8211; you have to clean up your house so they get a completely false impression of how you normally live your life. Same with code &#8211; pasting it [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/' rel='bookmark' title='Permanent Link: Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?'>Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?</a> <small>This article has no code in it. There are no...</small></li><li><a href='http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/' rel='bookmark' title='Permanent Link: One App, One User Account and Multiple OpenIDs'>One App, One User Account and Multiple OpenIDs</a> <small>Summary: Its the future, and its not Facebook. Learn it....</small></li><li><a href='http://drnicwilliams.com/2007/07/03/openid-for-wordpress/' rel='bookmark' title='Permanent Link: OpenID for WordPress'>OpenID for WordPress</a> <small>This blog &#8211; nay, this InterTubes HomePage &#8211; runs on...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Dumping thoughts onto the InterTubes, aka blogging, is fun. And I&#8217;ve been doing it 1 year now.</p>
<p>Its also challenging.</p>
<p>Its like inviting people over for dinner &#8211; you have to clean up your house so they get a completely false impression of how you normally live your life. </p>
<p>Same with code &#8211; pasting it into blog articles or releasing projects makes you work harder to clean up code. </p>
<p>Same with the article &#8211; like rewriting paragraphs and sentences so they read better.</p>
<h3>Why?</h3>
<p>Remember the <a href="http://www.ihiredjeffclark.com/index2.html" title="I Hired Jeff Clark!  Jeff Clark is looking for a marketing job...">I Hired Jeff Clark</a> site from a year ago?</p>
<p>I started this blog a year ago with the idea of it being an Online CV &#8211; I&#8217;d write clever things, people would comment, and employers would pick me instead of <a href="http://www.pragmaticprogrammer.com/titles/mjwti/index.html" title="My Job Went to India">someone else</a>. </p>
<p><a class="imagelink" target="_blank" href="http://drnicwilliams.com/wp-content/maani/feedburner" title="Feedburner"><img id="image217" src="http://drnicwilliams.com/wp-content/uploads/2007/08/feedburner-drnic-12-mths.png" alt="Feedburner" /></a></p>
<caption><a target="_blank" href="http://drnicwilliams.com/wp-content/maani/feedburner">Click through</a> for fancy dynamic flash graph [<a href="#cgi-code">1</a>]</caption>
<h3>Leaving Tele2</h3>
<p>The whole time I&#8217;ve been overseas working for <a href="http://www.tele2.com">Tele2</a> &#8211; a Swedish telephone company, developing their billing systems. No Ruby code anywhere. Lots of perl, some Java, and lots of an internal proprietary language. It hurts to work on that environment.</p>
<p>And today is my last day, so now I can pursue Ruby/Rails with full-time reckless abandon. </p>
<p>Starting with <a href="http://drnicacademy.com">Dr Nic Academy</a>.</p>
<h3>What&#8217;s left to blog about?</h3>
<p>In the last 12 mths, I think I&#8217;ve covered a fair bit of (seemingly random) ground: <a href="http://drnicwilliams.com/category/ruby/ruby-on-rails/composite-keys/">composite keys</a>, <a href="http://drnicwilliams.com/category/ruby/ruby-on-rails/magic-models/">magic models</a>, <a href="http://drnicwilliams.com/category/javascript/">javascript</a>, <a href="http://drnicwilliams.com/category/radrails/">radrails fixups</a>, <a href="http://newgem.rubyforge.org">newgem</a>, and lately <a href="http://drnicwilliams.com/category/openid/">openid</a>.</p>
<p>In the future, the following stuff intrigues me, and it&#8217;d be fun to explore:</p>
<ol>
<li>Social OS &#8211; when I use flickr, I add contacts/friends/family and I add photos. When I visit <em>your</em> fancy new Web2.0 site, how can I import this profile information and automatically find all my friends or invite them to use your site? I envisage this built on OpenID, where every app is both an OpenID consumer (you login with OpenID) and possibly an OpenID provider (you can use your account page as a login to other apps).</li>
<li>Mongrel handlers &#8211; sexy integration of handlers into the Rails code base, so they are automatically picked up when the mongrel servers are started. I haven&#8217;t looked into this at all, so that sentence mightn&#8217;t make any sense.</li>
<li>Caching &#8211; nothing fancy, I just haven&#8217;t figured out how to use it yet. Anyone that used <a href="http://myconfplan.com">MyConfPlan</a> during RailsConf might have guessed this.</li>
<li>Javascript widget generator &#8211; generators get me from &#8220;idea&#8221; to &#8220;ooh that&#8217;s pretty&#8221; much faster, and avoid the &#8220;oh I can&#8217;t be bothered setting up the code base&#8221; step. I want to write a bunch of widgets for the <a href="http://rubyonrails.com.au">RoR Oceania blog</a>, to pull data from the <a href="http://faces.rubyonrails.com.au">RoR Oceania facebook</a> <a href="http://toolmantim.com/article/2007/8/3/i_can_has_faces_api">API</a>, so hopefully I can extract some base code into a generator.</li>
</ol>
<p>As always, I&#8217;m completely happy for someone else to tackle these things first. So get cracking <img src='http://drnicwilliams.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a name="cgi-code"><br />
[1] The XML for this <a href="http://www.maani.us/">Maani graph</a> is mashed from the raw feedburner API via this <a href="http://pastie.caboo.se/84602">Ruby CGI script</a>. If you want to use it, you need to turn on the Feedburner API first, and change the start date within the code (currently set to 1/8/2006)</p>
<p>That is, the data goes from <a href="http://api.feedburner.com/awareness/1.0/GetFeedData?uri=DrNic&#038;dates=2006-08-01,2007-08-01">feedburner XML</a> to <a href="http://drnicwilliams.com/cgi-bin/feedburner.cgi?url=DrNic">maani XML</a>.
<ol>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/' rel='bookmark' title='Permanent Link: Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?'>Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?</a> <small>This article has no code in it. There are no...</small></li><li><a href='http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/' rel='bookmark' title='Permanent Link: One App, One User Account and Multiple OpenIDs'>One App, One User Account and Multiple OpenIDs</a> <small>Summary: Its the future, and its not Facebook. Learn it....</small></li><li><a href='http://drnicwilliams.com/2007/07/03/openid-for-wordpress/' rel='bookmark' title='Permanent Link: OpenID for WordPress'>OpenID for WordPress</a> <small>This blog &#8211; nay, this InterTubes HomePage &#8211; runs on...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2007/08/03/one-year-on-the-intertubes/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>One App, One User Account and Multiple OpenIDs</title>
		<link>http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/</link>
		<comments>http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 20:49:54 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[SocialOS]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/</guid>
		<description><![CDATA[Summary: Its the future, and its not Facebook. Learn it. I&#8217;ve just implemented OpenID sign-ons for a client site, as a compliment for the standard signup/login process, and I choose the following association: 1 x User account &#8212;> 0 or 1 x OpenID The OpenID value is a field on my User model/table. So I [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/' rel='bookmark' title='Permanent Link: Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?'>Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?</a> <small>This article has no code in it. There are no...</small></li><li><a href='http://drnicwilliams.com/2007/09/11/myopenid-goes-down-multiple-openids-useful/' rel='bookmark' title='Permanent Link: Why supporting multiple OpenIDs per User is useful for users&#8230;'>Why supporting multiple OpenIDs per User is useful for users&#8230;</a> <small>Web apps/services go down for maintenance (expected or erroneously) all...</small></li><li><a href='http://drnicwilliams.com/2007/09/11/railsrumble-hates-openid/' rel='bookmark' title='Permanent Link: RailsRumble hates OpenID'>RailsRumble hates OpenID</a> <small>There are 146 RailsRumble entrants. %w[rubygems hpricot open-uri].each { |l|...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Summary:</strong> Its the future, and its not Facebook. Learn it.</p>
<p>I&#8217;ve just implemented OpenID sign-ons for a client site, as a compliment for the standard signup/login process, and I choose the following association:</p>
<p>1 x User account &#8212;> 0 or 1 x OpenID</p>
<p>The OpenID value is a field on my User model/table.</p>
<p>So I login with my OpenID and I get one application account. </p>
<p>Or similarly, if the User already has an account, there is a field on their User settings page for their OpenID. They can put in their LiveJournal or AOL OpenID URL (or from one of 3000+ OpenID providers) there, and they can now log into that account using either normal login, or OpenID login.</p>
<p>Great.</p>
<p>But then I was watching a <a href="http://video.google.com/videoplay?docid=2288395847791059857">GoogleTechTalk video</a> by <a href="http://simonwillison.net/">Simon Willison</a> and he gave the following Bonus Use of OpenID:</p>
<ol>
<li>User logs into a site using an AOL OpenID</li>
<li>The site can now send AOL IM messages to that user</li>
</ol>
<p>This is cool for two reasons:</p>
<ol>
<li>The site automagically derived information about the User &#8211; they are an AOL member, and their AOL username.</li>
<li>More importantly, it KNOWS the user is the owner of that AOL account. </li>
</ol>
<p>The site gets authentication of this information for free through the OpenID sign-in process &#8211; the user is redirected back to AOL&#8217;s OpenID page at which time the user has to prove they own the account thru AOL signin (or cookies).</p>
<p>So, back to my story.</p>
<p>My users can sign into my site with an AOL OpenID and prove they own an AOL IM account name.</p>
<p>What if they also have a LiveJournal account? LiveJournal URLs are all OpenID URLs too [<a href="#1-lj">1</a>]</p>
<p>If they signed in with LiveJournal OpenID then they could prove they have such an account and my site could do funky LiveJournal specific things&#8230; like&#8230; read the user&#8217;s blog for them&#8230; ok, this example is going nowhere.</p>
<p>But! What is your MSN/Live account had an OpenID associated with it? Or Google Account? Or Yahoo Account? All have IMs associated with them. OpenID login could prove ownership of that information.</p>
<p>But&#8230;</p>
<p>My user has already logged in with AOL OpenID.</p>
<p>Stupid 1-to-1 data model of User and OpenID. Bah!</p>
<p><strong>Solution</strong>: allow Users to have 0+ OpenIDs. Some quick refactoring and you&#8217;re done.</p>
<p>Your controller code (the standard Rails solutions for OpenID support use a <code>sessions</code> controller to manage the OpenID provider interactions will now have to do a small amount of extra work.</p>
<p>Small.</p>
<p>Like, you&#8217;ll need a table of known OpenIDs and a <code>belongs_to</code> foreign key to the User model/table.</p>
<p>Small.</p>
<p>But perhaps you are already doing this and I&#8217;m the only silly sausage around here.</p>
<p>Even if you don&#8217;t see the benefit of these use cases &#8211; trusting the information from the OpenID profile &#8211; here&#8217;s a more common use case I think we&#8217;ll find:</p>
<p>Users will want to sign-in with whichever OpenID makes them feel the happiest at the time.</p>
<blockquote><p>I&#8217;m feeling some AOL love today, I&#8217;ll use http://openid.aol.com/iamawesome</p></blockquote>
<blockquote><p>I&#8217;ll use iamawesome.myopenid.com here as its got my Age and Country setup already.</p></blockquote>
<p>And the poor user will instantly get 2 accounts with your application &#8211; on top of the account they already had. That&#8217;s 3 accounts.</p>
<p>Unless we do the following:</p>
<ul>
<li>Allow &#8220;new&#8221; OpenID sign-ins to select an existing application User account to connect to &#8211; don&#8217;t make the poor user feel stupid for using OpenID &#8211; help them connect it to their existing information.</li>
<li>As above, allow multiple OpenIDs to be connected to each User account</li>
</ul>
<p>OpenID allows its Providers to return additional information beyond [name, email, etc] [<a href="#2-openid">2</a>]. So different OpenID profiles might store different bonus information.</p>
<p>AOL might expose my AOL buddies list.</p>
<p>LiveJournal might expose my LiveJournal buddies.</p>
<p>A user could login to your app with both OpenIDs, connect it to one User account, and re-use all their buddies within your app.</p>
<p>Its awesome, and its the &#8220;Social OS&#8221; that everyone&#8217;s harping on about. </p>
<p>Its the future. And its not Facebook.</p>
<p><a name="1-lj" /><br />
[1] [History lesson] Live Journal &#8211; <a href="http://www.sixapart.com/about/history">now owned</a> by <strike>A List Apart</strike><a href="http://www.sixapart.com/">Six Apart</a> &#8211; invented OpenID. [/History Lesson]</p>
<p><a name="2-openid" /><br />
[2] Through a draft specification <a href="http://openid.net/specs.bml">OpenID Attribute Exchange</a>; very nifty indeed as the raw OpenID1.1 spec has very limited profile data sharing. Like none.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2008/02/22/zero-sign-on-with-client-certificates/' rel='bookmark' title='Permanent Link: Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?'>Zero Sign On &#8211; 1 better or Infinitely better than Single Sign On?</a> <small>This article has no code in it. There are no...</small></li><li><a href='http://drnicwilliams.com/2007/09/11/myopenid-goes-down-multiple-openids-useful/' rel='bookmark' title='Permanent Link: Why supporting multiple OpenIDs per User is useful for users&#8230;'>Why supporting multiple OpenIDs per User is useful for users&#8230;</a> <small>Web apps/services go down for maintenance (expected or erroneously) all...</small></li><li><a href='http://drnicwilliams.com/2007/09/11/railsrumble-hates-openid/' rel='bookmark' title='Permanent Link: RailsRumble hates OpenID'>RailsRumble hates OpenID</a> <small>There are 146 RailsRumble entrants. %w[rubygems hpricot open-uri].each { |l|...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2007/07/20/one-app-one-user-account-and-multiple-openids/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Want a new $$$ stream for your Rails consulting business?</title>
		<link>http://drnicwilliams.com/2007/06/18/want-a-new-revenue-stream-for-rails-business/</link>
		<comments>http://drnicwilliams.com/2007/06/18/want-a-new-revenue-stream-for-rails-business/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 07:06:29 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2007/06/18/want-a-new-revenue-stream-for-rails-business/</guid>
		<description><![CDATA[Summary: click to select Ruby on Rails started in the DHH&#8217;s &#8220;basement&#8221; and was picked up by alpha geeks around the world over the last few years. Now, beta geeks and business people are picking it up. This is a good thing &#8211; it means you can get a job in Rails, or do Rails [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2010/03/15/using-coffeescript-in-rails-and-even-on-heroku/' rel='bookmark' title='Permanent Link: Using CoffeeScript in Rails and even on Heroku'>Using CoffeeScript in Rails and even on Heroku</a> <small>I&#8217;m pretty excited about CoffeeScript as a clean-syntax replacement for...</small></li><li><a href='http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre/' rel='bookmark' title='Permanent Link: First look at rails 3.0.pre'>First look at rails 3.0.pre</a> <small> This article is out of date in some aspects....</small></li><li><a href='http://drnicwilliams.com/2009/10/07/rails-themes-can-remember-things/' rel='bookmark' title='Permanent Link: Rails themes can remember things'>Rails themes can remember things</a> <small>I was getting annoyed at having to remember all the...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p id="bk_summary_194" name="bk_summary_194" class="bk_summary"><strong>Summary: </strong> <span class="help">click to select</span></p>
<input id="bk_summary_input_194" value="Offer businesses/developers Code Reviews and Code Audits as a service" style="width:100%"  onClick="javascript:var summary = document.getElementById('bk_summary_input_194'); summary.focus();summary.select();" readonly="true" /></span></p>
<p>Ruby on Rails started in the DHH&#8217;s &#8220;basement&#8221; and was picked up by alpha geeks around the world over the last few years. Now, beta geeks and business people are picking it up. This is a good thing &#8211; it means you can get a job in Rails, or do Rails consulting/freelancing and have clients who know what Rails is and what it can do for them.</p>
<p>But they don&#8217;t know code. They don&#8217;t know good code, and they don&#8217;t know good developers. </p>
<p>Aha! You are a good developer; perhaps you can help?</p>
<p>Start offering &#8220;code audits&#8221; and &#8220;code reviews&#8221; to companies/teams/other freelancers, as <a href="http://www.robbyonrails.com/articles/2007/06/17/audit-your-rails-development-team">recently offered</a> by Robby Russell&#8217;s <a href="http://planetargon.com/">Planet Argon</a> company. </p>
<p>Its an awesome opportunity for you to help other developers with feedback, help business owners know what&#8217;s going on with their development teams, and make $$$. </p>
<p>$$$ is good and making it should make you happy.</p>
<p>Should you be in a situation where you have gaps of time between consulting projects, or your a full-time employee looking to start into the consulting world, perhaps start offering Code Reviews and Code Audits as a service.</p>
<p>Its also a nice service to offer companies that <em>didn&#8217;t</em> hire you for a job, but went with someone else instead. </p>
<blockquote><p>Thank you for considering us for your project. Although you did not select our company for the development, we know you&#8217;ve chosen someone competent. You may be interested in our complimentary service &#8211; code audits and code reviews. If its ok, we&#8217;ll contact you in a month or so to offer you this service so you know that your developers are on track and doing an excellent job!</p></blockquote>
<p>Ok, that&#8217;s a crappy sales letter, but you get the gist.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2010/03/15/using-coffeescript-in-rails-and-even-on-heroku/' rel='bookmark' title='Permanent Link: Using CoffeeScript in Rails and even on Heroku'>Using CoffeeScript in Rails and even on Heroku</a> <small>I&#8217;m pretty excited about CoffeeScript as a clean-syntax replacement for...</small></li><li><a href='http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre/' rel='bookmark' title='Permanent Link: First look at rails 3.0.pre'>First look at rails 3.0.pre</a> <small> This article is out of date in some aspects....</small></li><li><a href='http://drnicwilliams.com/2009/10/07/rails-themes-can-remember-things/' rel='bookmark' title='Permanent Link: Rails themes can remember things'>Rails themes can remember things</a> <small>I was getting annoyed at having to remember all the...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2007/06/18/want-a-new-revenue-stream-for-rails-business/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>[Story] The teacher&#8217;s job is simple: Ask the right questions</title>
		<link>http://drnicwilliams.com/2006/10/03/story-the-teachers-job-is-simple-ask-the-right-questions/</link>
		<comments>http://drnicwilliams.com/2006/10/03/story-the-teachers-job-is-simple-ask-the-right-questions/#comments</comments>
		<pubDate>Tue, 03 Oct 2006 06:34:59 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Link]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2006/10/03/story-the-teachers-job-is-simple-ask-the-right-questions/</guid>
		<description><![CDATA[I&#8217;ve lived in India and one thing is immediately apparent: they&#8217;ve got more people than you do. And most of them are poor, by our standards. Poor people don&#8217;t get to use computers, do they? One very interesting experiment showed what happens when you install computers connected to the Internet in &#8220;holes in the wall&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve lived in India and one thing is immediately apparent: they&#8217;ve got more people than you do. And most of them are poor, by our standards. Poor people don&#8217;t get to use computers, do they? </p>
<p>One very <a href="http://www.greenstar.org/butterflies/Hole-in-the-Wall.htm">interesting experiment</a> showed what happens when you install computers connected to the Internet in &#8220;holes in the wall&#8221;, and observed what they did. The article is an interview with the man who setup the experiment, and covers subsequent experiments he ran, such as &#8220;<span class=pullquote>Can year 9 students answer questions from the year 10 exam if you give them 2 hours and the internet?</span>&#8221;</p>
<p>It leads the introduction of the term &#8220;minimally invasive education&#8221;. For the most part, this is just how you learnt Ruby, Javascript or anything else since you left school. I bet you are a better student now than you were then too. That&#8217;s not the case for most adults &#8211; see the last quote below.</p>
<p>It is a <a href="http://www.greenstar.org/butterflies/Hole-in-the-Wall.htm">fascinating article</a> on learning, on how children learn, and on the consequences of 1.2 billions Indians &#8220;going online&#8221;.</p>
<h3>Interesting quotes</h3>
<blockquote><p>the most avid users of the machine were ghetto kids aged 6 to 12, most of whom have only the most rudimentary education and little knowledge of English. Yet within days, the kids had taught themselves to draw on the computer and to browse the Net.</p></blockquote>
<blockquote><p>If the adult was simply underestimating the child&#8217;s ability to cope with a computer, then that should happen with any child. And I asked myself, &#8220;Why then would we want to use the same teaching methods for children as we use for teaching adults?&#8221;</p></blockquote>
<blockquote><p>I went to a middle-class school and chose some ninth graders, two girls and two boys. I called their physics teacher in and asked him, &#8220;What are you going to teach these children next year at this time?&#8221; He mentioned viscosity. I asked him to write down five possible exam questions on the subject. I then took the four children and said, &#8220;Look here guys. I have a little problem for you.&#8221; They read the questions and said they didn&#8217;t understand them, it was Greek to them. So I said, &#8220;Here&#8217;s a terminal. I&#8217;ll give you two hours to find the answers.&#8221; &#8230; They answered all five questions in two hours.</p></blockquote>
<blockquote><p>What is important is infrastructure and access &#8230; The teacher&#8217;s job is very simple. It&#8217;s to help the children ask the right questions.</p></blockquote>
<blockquote><p>you can multiply the effectiveness of 10 teachers by 100 &#8211; or 1,000 &#8211; fold if you give children access to the Internet.</p></blockquote>
<blockquote><p>There are 50 or 60 million cable-TV connections in India at this point in time. The guys who set up the meters, splice the coaxial cables, make the connection to the house, etc., are very similar to these kids. They don&#8217;t know what they&#8217;re doing.</p></blockquote>
<blockquote><p>The only reaction we got from adults was, &#8220;What on earth is this for? Why is there no one here to teach us something? How are we ever going to use this?&#8221; I contend that by the time we are 16, we are taught to want teachers, taught that we cannot learn anything without teachers.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2006/10/03/story-the-teachers-job-is-simple-ask-the-right-questions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Wish] Spam filter by Language</title>
		<link>http://drnicwilliams.com/2006/10/01/spam-flter-by-language/</link>
		<comments>http://drnicwilliams.com/2006/10/01/spam-flter-by-language/#comments</comments>
		<pubDate>Sun, 01 Oct 2006 08:15:09 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wish]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2006/10/01/spam-flter-by-language/</guid>
		<description><![CDATA[Does anyone know to whom I address and send this letter? Dear Gmail, Thank you for Gmail. I love it and would hug it if it were a teddy bear and no one was looking. Recently, some Asian-origin spammers have included me in their lists. A while back, it was some Russian spammers, or thereabouts. [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2006/08/09/hosted-gmail/' rel='bookmark' title='Permanent Link: Hosted Gmail'>Hosted Gmail</a> <small>First there was email. Time passed. Then there was Gmail....</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Does anyone know to whom I address and send this letter?</p>
<blockquote><p>Dear Gmail,</p>
<p>Thank you for Gmail. I love it and would hug it if it were a teddy bear and no one was looking.</p>
<p>Recently, some Asian-origin spammers have included me in their lists. A while back, it was some Russian spammers, or thereabouts.</p>
<p>If the contents of my emails don&#8217;t fit into the basic English ASCII set of characters, plus some of those European characters with the cute accents on the tops, then the email probably isn&#8217;t one I can read, thus spam or not, I&#8217;m just not that interested.</p>
<p>I doubt I&#8217;m alone in my mono-linguistic capabilities either.</p>
<p>Either help me filter out foreign language spam, or let me translate it and then with confidence I can say &#8220;No I don&#8217;t want a chinese nor russian penis enlarger, but thanks for asking&#8221;.</p>
<p>Yours sincerely,<br />
Dr Nic</p></blockquote>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2006/08/09/hosted-gmail/' rel='bookmark' title='Permanent Link: Hosted Gmail'>Hosted Gmail</a> <small>First there was email. Time passed. Then there was Gmail....</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2006/10/01/spam-flter-by-language/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Do you write code and smile?</title>
		<link>http://drnicwilliams.com/2006/08/31/do-you-write-code-and-smile/</link>
		<comments>http://drnicwilliams.com/2006/08/31/do-you-write-code-and-smile/#comments</comments>
		<pubDate>Thu, 31 Aug 2006 11:21:58 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2006/08/31/do-you-write-code-and-smile/</guid>
		<description><![CDATA[Do you write code and smile? Do spend two hours on a hack to save yourself one hour of time? Is being a great coder important to you, even if you don&#8217;t know why its important? Do you derive a sense of pride from a few lines of code you wrote? I thought of all [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2008/12/11/future-proofing-your-ruby-code/' rel='bookmark' title='Permanent Link: Future proofing your Ruby code. Ruby 1.9.1 is coming.'>Future proofing your Ruby code. Ruby 1.9.1 is coming.</a> <small> Bugger. I&#8217;m a Ruby monogamist. I use the Ruby...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Do you write code and smile?</p>
<p>Do spend two hours on a hack to save yourself one hour of time?</p>
<p>Is being a great coder important to you, even if you don&#8217;t know why its important?</p>
<p>Do you derive a sense of pride from a few lines of code you wrote?</p>
<p>I thought of all these questions whilst watching a <a href="http://www.youtube.com/watch?v=QjA5faZF1A8">great guitar clip</a>&#8230; he&#8217;s gone beyond learning <a href="http://en.wikipedia.org/wiki/Pachelbel's_canon">Pachelbel&#8217;s Canon in D Major</a>, and overlayed <em>his own code</em>. Underneath the hat, I&#8217;m sure he&#8217;s smiling.</p>
<p>His pride for his guitar work makes me happy for my coding. <strong>You?</strong></p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/QjA5faZF1A8"></param><embed src="http://www.youtube.com/v/QjA5faZF1A8" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2008/12/11/future-proofing-your-ruby-code/' rel='bookmark' title='Permanent Link: Future proofing your Ruby code. Ruby 1.9.1 is coming.'>Future proofing your Ruby code. Ruby 1.9.1 is coming.</a> <small> Bugger. I&#8217;m a Ruby monogamist. I use the Ruby...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2006/08/31/do-you-write-code-and-smile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax on Rails &#8211; Prototype vs JQuery</title>
		<link>http://drnicwilliams.com/2006/08/23/ajax-on-rails-prototype-vs-jquery/</link>
		<comments>http://drnicwilliams.com/2006/08/23/ajax-on-rails-prototype-vs-jquery/#comments</comments>
		<pubDate>Wed, 23 Aug 2006 02:35:39 +0000</pubDate>
		<dc:creator>Dr Nic</dc:creator>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://drnicwilliams.com/2006/08/23/ajax-on-rails-prototype-vs-jquery/</guid>
		<description><![CDATA[[Original article published on DevLounge - please post comments there] When you unpack your shiny new version of Rails and generate your first Ajax link, you are using the Prototype library. It&#8217;s beautiful to use. It adds many Rails-like constructs into the Javajscript language, e.g. the each method to iterate a closure over an array. [...]


Related posts:<ol><li><a href='http://drnicwilliams.com/2010/03/15/using-coffeescript-in-rails-and-even-on-heroku/' rel='bookmark' title='Permanent Link: Using CoffeeScript in Rails and even on Heroku'>Using CoffeeScript in Rails and even on Heroku</a> <small>I&#8217;m pretty excited about CoffeeScript as a clean-syntax replacement for...</small></li><li><a href='http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre/' rel='bookmark' title='Permanent Link: First look at rails 3.0.pre'>First look at rails 3.0.pre</a> <small> This article is out of date in some aspects....</small></li><li><a href='http://drnicwilliams.com/2009/10/07/rails-themes-can-remember-things/' rel='bookmark' title='Permanent Link: Rails themes can remember things'>Rails themes can remember things</a> <small>I was getting annoyed at having to remember all the...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>[Original article published on <a href="http://www.devlounge.net/articles/ajax-on-rails-prototype-vs-jquery">DevLounge</a> - please post comments there]</p>
<p>When you unpack your shiny new version of Rails and generate your first Ajax link, you are using the <a href="http://prototype.conio.net/">Prototype</a> library. It&#8217;s beautiful to use. It adds many Rails-like constructs into the Javajscript language, e.g. the each method to iterate a closure over an array. Sexy stuff.</p>
<p>But the following effect isn&#8217;t done using Prototype:</p>
<div><img class=demo src="http://drnicwilliams.com/wp-content/uploads/2006/08/hover-demo.png" /><script src="http://drnicwilliams.com/wp-content/uploads/2006/08/hoverdemo.js"></script></div>
<p>It was done in a few lines of Javascript using the <a href="http://www.jquery.com">jQuery</a> library <a href="#a1">[1]</a>.</p>
<pre>
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">".tick"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">hover</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  $<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">removeClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"tick-off"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"tick-on"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">announceButton</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  $<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">removeClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"tick-on"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"tick-off"</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
</pre>
<p>Prototype provides a comprehensive library of base classes, such as Element and Hash, where as jQuery is fundamentally different. It provides just one entity &#8211; the jQuery object. This is created using the familiar $ function and represents a collection of DOM nodes, rather than just one.</p>
<p>The jQuery object is then extended and extended and extended with all the functionality you need &#8211; scriptaculous-like effects, Ajax calls, prototype-like manipulations, etc. JQuery plugins </p>
<p>Yehuda Katz &#8211; author of <a href="http://trac.visualjquery.com/admin_console">autoDB</a> &#8211; the dynamic admin console for Rails apps &#8211; has his feet deep in jQuery land as well. He manages the <a href="http://www.visualjquery.com/">Visual JQuery</a> documentation, and recently <a href="http://jquery.com/blog/2006/08/20/why-jquerys-philosophy-is-better/">wrote an article</a> comparing the philosophies of Prototype and JQuery, to help people understand how they are different.</p>
<p>The core problem for Rails developers who might like to try out jQuery is that it eventually conflicts with the prototype library when you start to use Rail&#8217;s &#8220;in-built&#8221; helpers for prototype.</p>
<p>But perhaps you do not need to use these helpers, as an increasing number of jQuery plugins start to provide more and more elegant client-side functionality. For example, an <a href="http://www.mail-archive.com/discuss@jquery.com/msg00085.html">InPlaceEditor</a> extension, and <a href="http://proj.jquery.com/plugins/">many</a> <a href="http://www.google.com/search?q=jquery+plugins">others</a>.</p>
<p>Want something truly pretty developed using jQuery &#8211; how about the <a href="http://www.willjessup.com/sandbox/jquery/solar_system/rotator.html">planets revolving around the sun</a>?</p>
<p>Work is also underway to integrate <a href="http://trac.visualjquery.com/jQueryRails/browser/jquery-on-rails/lib/jquery_on_rails.rb">jQuery into Rails</a>, including its own set of helpers, code named JQuails.</p>
<p>Many Rails developers might not be familiar with the abilities of alternative Javascript libraries as they get prototype/scriptaculous embedded for free. Yet it would be wise for all developers to be aware and competent in multiple frameworks, so that the best tools for each job can be selected. There is certainly some momentum behind jQuery in the wider development community. To Rails developers I say, Keep a Look Out!</p>
<p><a name="a1">[1]</a> The <a href="http://drnicwilliams.com/wp-content/uploads/2006/08/hoverdemo.js">Hover Demo Script</a> was written as pure Javascript to make it easy to download. Firstly it disables the static image (for RSS feed and non-JS environments), and then creates the DIVs for the effect. The hover effect is then setup by applying the <code>hover</code> function to all elements of the class <code>tick</code>. The two functions we pass it perform the CSS class manipulation that gives the effect. Note the use of chain calls that make the syntax so attractive.</p>
<p>Note also that we&#8217;ve added a custom function to the jQuery object &#8211; announceButton. It assumes that only one button is active at a time, uses <code>this[0]</code> to determine which one it is. The function then returns the jQuery object (stored as <code>this</code>) to allow the standard method chaining to continue.</p>


<p>Related posts:<ol><li><a href='http://drnicwilliams.com/2010/03/15/using-coffeescript-in-rails-and-even-on-heroku/' rel='bookmark' title='Permanent Link: Using CoffeeScript in Rails and even on Heroku'>Using CoffeeScript in Rails and even on Heroku</a> <small>I&#8217;m pretty excited about CoffeeScript as a clean-syntax replacement for...</small></li><li><a href='http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre/' rel='bookmark' title='Permanent Link: First look at rails 3.0.pre'>First look at rails 3.0.pre</a> <small> This article is out of date in some aspects....</small></li><li><a href='http://drnicwilliams.com/2009/10/07/rails-themes-can-remember-things/' rel='bookmark' title='Permanent Link: Rails themes can remember things'>Rails themes can remember things</a> <small>I was getting annoyed at having to remember all the...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://drnicwilliams.com/2006/08/23/ajax-on-rails-prototype-vs-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
