<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Gen X Design | Ian Selby</title>
	
	<link>http://www.gen-x-design.com</link>
	<description>All Things Web 2.0</description>
	<pubDate>Thu, 10 Jul 2008 03:41:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<geo:lat>26.309657</geo:lat><geo:long>-80.095414</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/genxdesign" type="application/rss+xml" /><feedburner:emailServiceId>372132</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item><title>Prince of Persia: Next Gen - E3 2008: Exclusive Trailer [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/336844073/36271.html</link><dc:creator>iselby</dc:creator><pubDate>Wed, 16 Jul 2008 02:16:08 -0500</pubDate><guid isPermaLink="false">http://www.gametrailers.com/player/36271.html</guid><description>Another title I cannot wait to get my hands on</description><feedburner:origLink>http://www.gametrailers.com/player/36271.html</feedburner:origLink></item><item><title>Moleskine Wallet Hack - a set on Flickr [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/335247297/</link><category>GTD</category><dc:creator>iselby</dc:creator><pubDate>Mon, 14 Jul 2008 11:51:27 -0500</pubDate><guid isPermaLink="false">http://www.flickr.com/photos/operationorange/sets/72157605517462686/</guid><description>Flickr is almost certainly the best online photo management and sharing application in the world. Show off your favorite photos and videos to the world, securely and privately show content to your friends and family, or blog the photos and videos you take</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/iselby/GTD" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.flickr.com/photos/operationorange/sets/72157605517462686/</feedburner:origLink></item><item><title>Carousel.us [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/335236256/</link><dc:creator>iselby</dc:creator><pubDate>Mon, 14 Jul 2008 11:22:17 -0500</pubDate><guid isPermaLink="false">http://www.piksite.com/carousel.us/</guid><description>Still needs a little work, but this is a damned cool JS widget</description><feedburner:origLink>http://www.piksite.com/carousel.us/</feedburner:origLink></item><item><title>VMWare Fusion and network bridging | Fine Malt Techr [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/334324459/</link><dc:creator>iselby</dc:creator><pubDate>Sun, 13 Jul 2008 10:21:54 -0500</pubDate><guid isPermaLink="false">http://blog.maccarocks.com/2007/12/13/vmware-fusion-and-network-bridging/</guid><description>I&amp;#039;ve had VMWare Fusion running an image of my work laptop, on my Macbook, for nearly three weeks now. I&amp;#039;ve had no problems at all, running over both NAT and</description><feedburner:origLink>http://blog.maccarocks.com/2007/12/13/vmware-fusion-and-network-bridging/</feedburner:origLink></item><item>
		<title>BgPatterns.com - Cool Background Image Generator</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/331370906/</link>
		<comments>http://www.gen-x-design.com/archives/bgpatternscom-cool-background-image-generator/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 03:41:33 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/bgpatternscom-cool-background-image-generator/</guid>
		<description><![CDATA[While its generally not my style, I would have loved to have something like this several times in the past.  Slick, easy, classy, fun, and actually worthwhile.  Check it out:
www.bgpatterns.com
]]></description>
			<content:encoded><![CDATA[<p>While its generally not my style, I would have loved to have something like this several times in the past.  Slick, easy, classy, fun, and actually worthwhile.  Check it out:<br />
<a href="http://bgpatterns.com" target="_blank">www.bgpatterns.com</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=GuQg5J"><img src="http://feeds.feedburner.com/~f/genxdesign?i=GuQg5J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=mtuLij"><img src="http://feeds.feedburner.com/~f/genxdesign?i=mtuLij" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/bgpatternscom-cool-background-image-generator/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/bgpatternscom-cool-background-image-generator/</feedburner:origLink></item>
		<item>
		<title>savethedevlopers.org - Save a Developer. Upgrade Your Browser</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/323528305/</link>
		<comments>http://www.gen-x-design.com/archives/savethedevlopersorg-save-a-developer-upgrade-your-browser/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 21:01:45 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/savethedevlopersorg-save-a-developer-upgrade-your-browser/</guid>
		<description><![CDATA[&#8220;Say No To IE 6!
Our current campaign focuses on assisting users in upgrading their Internet Explorer 6 web browser. This campaign will result in former IE 6 users having a more enjoyable experience on the web while (hopefully) creating a less stressful and complicated environment for web developers by hastening the retirement of an outdated [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Say No To IE 6!<br />
Our current campaign focuses on assisting users in upgrading their Internet Explorer 6 web browser. This campaign will result in former IE 6 users having a more enjoyable experience on the web while (hopefully) creating a less stressful and complicated environment for web developers by hastening the retirement of an outdated browser.&#8221;<br />
<br /><a href="http://www.savethedevelopers.org/" target="_blank">http://www.savethedevelopers.org/</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=2NNVwI"><img src="http://feeds.feedburner.com/~f/genxdesign?i=2NNVwI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=8GiOhi"><img src="http://feeds.feedburner.com/~f/genxdesign?i=8GiOhi" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/savethedevlopersorg-save-a-developer-upgrade-your-browser/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/savethedevlopersorg-save-a-developer-upgrade-your-browser/</feedburner:origLink></item>
		<item>
		<title>Evernote - Awesome Note Capturing Software</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/319002475/</link>
		<comments>http://www.gen-x-design.com/archives/evernote-awesome-note-capturing-software/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 16:27:29 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/evernote-awesome-note-capturing-software/</guid>
		<description><![CDATA[I know, yet another note capture / organize program&#8230; but this one&#8217;s different.  It&#8217;s got really powerful OCR software (it will pull text from images, even handwriting) that automatically finds words in your images and indexes them, making it easier to find later.  Works on the web, your mobile phone, and PC or [...]]]></description>
			<content:encoded><![CDATA[<p>I know, yet another note capture / organize program&#8230; but this one&#8217;s different.  It&#8217;s got really powerful OCR software (it will pull text from images, even handwriting) that automatically finds words in your images and indexes them, making it easier to find later.  Works on the web, your mobile phone, and PC or Mac.  Best of all, it&#8217;s free!<br />
<a href="http://www.evernote.com/" target="_blank">Evernote - Capture. Sync. Find</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=lWxlXI"><img src="http://feeds.feedburner.com/~f/genxdesign?i=lWxlXI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=zeEtDi"><img src="http://feeds.feedburner.com/~f/genxdesign?i=zeEtDi" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/evernote-awesome-note-capturing-software/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/evernote-awesome-note-capturing-software/</feedburner:origLink></item>
		<item><title>Griffin Playing in Alamo Square [Flickr]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/317825752/</link><dc:creator>ianrselby</dc:creator><pubDate>Sun, 22 Jun 2008 23:07:15 -0500</pubDate><guid isPermaLink="false">tag:flickr.com,2005:/photo/2602476359</guid><creativeCommons:license>deed.en</creativeCommons:license><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/ianrselby/"&gt;ianrselby&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ianrselby/2602476359/" title="Griffin Playing in Alamo Square"&gt;&lt;img src="http://farm4.static.flickr.com/3173/2602476359_6274947faf_m.jpg" width="192" height="240" alt="Griffin Playing in Alamo Square" /&gt;&lt;/a&gt;&lt;/p&gt;

</description><enclosure url="http://farm4.static.flickr.com/3173/2602476359_fbb89f7c84_o.jpg" length="0" type="image/jpeg" /><dc:date.Taken>2008-06-22T17:43:00-08:00</dc:date.Taken><feedburner:origLink>http://www.flickr.com/photos/ianrselby/2602476359/</feedburner:origLink></item><item><title>The Painted Ladies, and the City in the Background [Flickr]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/317825753/</link><dc:creator>ianrselby</dc:creator><pubDate>Sun, 22 Jun 2008 23:06:53 -0500</pubDate><guid isPermaLink="false">tag:flickr.com,2005:/photo/2603304716</guid><creativeCommons:license>deed.en</creativeCommons:license><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/ianrselby/"&gt;ianrselby&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ianrselby/2603304716/" title="The Painted Ladies, and the City in the Background"&gt;&lt;img src="http://farm4.static.flickr.com/3160/2603304716_90e32625e8_m.jpg" width="240" height="192" alt="The Painted Ladies, and the City in the Background" /&gt;&lt;/a&gt;&lt;/p&gt;

</description><enclosure url="http://farm4.static.flickr.com/3160/2603304716_49bbbd4625_o.jpg" length="0" type="image/jpeg" /><dc:date.Taken>2008-06-22T17:40:20-08:00</dc:date.Taken><feedburner:origLink>http://www.flickr.com/photos/ianrselby/2603304716/</feedburner:origLink></item><item><title>The Painted Ladies [Flickr]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/317825754/</link><dc:creator>ianrselby</dc:creator><pubDate>Sun, 22 Jun 2008 23:06:34 -0500</pubDate><guid isPermaLink="false">tag:flickr.com,2005:/photo/2602474299</guid><creativeCommons:license>deed.en</creativeCommons:license><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/ianrselby/"&gt;ianrselby&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ianrselby/2602474299/" title="The Painted Ladies"&gt;&lt;img src="http://farm4.static.flickr.com/3185/2602474299_10222b044d_m.jpg" width="240" height="192" alt="The Painted Ladies" /&gt;&lt;/a&gt;&lt;/p&gt;

</description><enclosure url="http://farm4.static.flickr.com/3185/2602474299_b158646a69_o.jpg" length="0" type="image/jpeg" /><dc:date.Taken>2008-06-22T17:38:57-08:00</dc:date.Taken><feedburner:origLink>http://www.flickr.com/photos/ianrselby/2602474299/</feedburner:origLink></item><item><title>More Golden Gate Bridge Goodness [Flickr]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/317825755/</link><dc:creator>ianrselby</dc:creator><pubDate>Sun, 22 Jun 2008 23:06:15 -0500</pubDate><guid isPermaLink="false">tag:flickr.com,2005:/photo/2603302750</guid><creativeCommons:license>deed.en</creativeCommons:license><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/ianrselby/"&gt;ianrselby&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ianrselby/2603302750/" title="More Golden Gate Bridge Goodness"&gt;&lt;img src="http://farm4.static.flickr.com/3125/2603302750_8f54249a9d_m.jpg" width="240" height="192" alt="More Golden Gate Bridge Goodness" /&gt;&lt;/a&gt;&lt;/p&gt;

</description><enclosure url="http://farm4.static.flickr.com/3125/2603302750_309d54d25c_o.jpg" length="0" type="image/jpeg" /><dc:date.Taken>2008-06-22T16:32:19-08:00</dc:date.Taken><feedburner:origLink>http://www.flickr.com/photos/ianrselby/2603302750/</feedburner:origLink></item><item><title>Alcatraz Island [Flickr]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/317825756/</link><dc:creator>ianrselby</dc:creator><pubDate>Sun, 22 Jun 2008 23:05:56 -0500</pubDate><guid isPermaLink="false">tag:flickr.com,2005:/photo/2602472451</guid><creativeCommons:license>deed.en</creativeCommons:license><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/ianrselby/"&gt;ianrselby&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ianrselby/2602472451/" title="Alcatraz Island"&gt;&lt;img src="http://farm4.static.flickr.com/3183/2602472451_7afc1fd960_m.jpg" width="240" height="192" alt="Alcatraz Island" /&gt;&lt;/a&gt;&lt;/p&gt;

</description><enclosure url="http://farm4.static.flickr.com/3183/2602472451_a173bb1c6d_o.jpg" length="0" type="image/jpeg" /><dc:date.Taken>2008-06-22T16:27:17-08:00</dc:date.Taken><feedburner:origLink>http://www.flickr.com/photos/ianrselby/2602472451/</feedburner:origLink></item><item><title>LEGO Star Wars Diorama Is Legit, 3,800 Pieces, $400, Now On My Birthday List - Geekologie [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/316535009/lego_star_wars_diorama_is_legi.php</link><dc:creator>iselby</dc:creator><pubDate>Fri, 20 Jun 2008 17:58:04 -0500</pubDate><guid isPermaLink="false">http://www.geekologie.com/2008/06/lego_star_wars_diorama_is_legi.php</guid><description>Ahhh, my inner geek is going nuts!  This is a must-have!</description><feedburner:origLink>http://www.geekologie.com/2008/06/lego_star_wars_diorama_is_legi.php</feedburner:origLink></item><item>
		<title>Magic Toolbox - High Quality JS Tools</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/316527635/</link>
		<comments>http://www.gen-x-design.com/archives/magic-toolbox-high-quality-js-tools/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 22:55:49 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/magic-toolbox-high-quality-js-tools/</guid>
		<description><![CDATA[Nice little suite of JS tools&#8230; they&#8217;re commercial, but reasonably priced.  The names kinda imply what they do: Magic Zoom, Magnify, and Thumbs.  Definitely worth a look:
Magic Toolbox
]]></description>
			<content:encoded><![CDATA[<p>Nice little suite of JS tools&#8230; they&#8217;re commercial, but reasonably priced.  The names kinda imply what they do: Magic Zoom, Magnify, and Thumbs.  Definitely worth a look:<br />
<a href="http://www.magictoolbox.com/" target="_blank">Magic Toolbox</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=dLIFBI"><img src="http://feeds.feedburner.com/~f/genxdesign?i=dLIFBI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=lUTZSi"><img src="http://feeds.feedburner.com/~f/genxdesign?i=lUTZSi" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/magic-toolbox-high-quality-js-tools/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/magic-toolbox-high-quality-js-tools/</feedburner:origLink></item>
		<item>
		<title>Is “finally” the answer to all IE6 memory leak issues?</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/308203911/</link>
		<comments>http://www.gen-x-design.com/archives/is-%e2%80%9cfinally%e2%80%9d-the-answer-to-all-ie6-memory-leak-issues/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 18:12:18 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/is-%e2%80%9cfinally%e2%80%9d-the-answer-to-all-ie6-memory-leak-issues/</guid>
		<description><![CDATA[Via Ajaxian:
Hedger Wang has been scanning a lot of Chinese blogs lately for solutions to IE6 and memory leak issues. One of the things he stumbled upon is a pretty nifty way of nulling the objects to stop memory leaks by using the try &#8230; finally construct.
Read the article ad Hedger&#8217;s Site
]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://ajaxian.com" target="_blank">Ajaxian</a>:<br />
Hedger Wang has been scanning a lot of Chinese blogs lately for solutions to IE6 and memory leak issues. One of the things he stumbled upon is a pretty nifty way of nulling the objects to stop memory leaks by using the try &#8230; finally construct.<br />
<a href="http://www.hedgerwow.com/360/dhtml/ie6_memory_leak_fix/" target="_blank">Read the article ad Hedger&#8217;s Site</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=NAqEnI"><img src="http://feeds.feedburner.com/~f/genxdesign?i=NAqEnI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=BJRmni"><img src="http://feeds.feedburner.com/~f/genxdesign?i=BJRmni" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/is-%e2%80%9cfinally%e2%80%9d-the-answer-to-all-ie6-memory-leak-issues/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/is-%e2%80%9cfinally%e2%80%9d-the-answer-to-all-ie6-memory-leak-issues/</feedburner:origLink></item>
		<item>
		<title>Server-Side JavaScript - All the Cool Kids Are Doing It!</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/306458513/</link>
		<comments>http://www.gen-x-design.com/archives/server-side-javascript-all-the-cool-kids-are-doing-it/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 23:30:42 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Jaxer]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/?p=53</guid>
		<description><![CDATA[That&#8217;s right kids, I&#8217;m speaking at the 6th International AJAX World RIA Conference &#038; Expo!  I&#8217;ll be giving a session on server-side javascript, and how it will make your life better, your apps cooler, and your friends jealous!
Read the full entry for details on the session, but here&#8217;s a little introductory overview (for the [...]]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right kids, I&#8217;m speaking at the 6th International AJAX World RIA Conference &#038; Expo!  I&#8217;ll be giving a session on server-side javascript, and how it will make your life better, your apps cooler, and your friends jealous!</p>
<p>Read the full entry for details on the session, but here&#8217;s a little introductory overview (for the sake of not re-writing everything, I have just copied and pasted the announcement)&#8230;</p>
<blockquote><p>Server-side JavaScript (SSJS) is growing in popularity fast since developers realize it can drastically simplify Web app creation by letting you use using the same technology stack on both the client and the server. While server-side JavaScript is not new - it was a part of Netscape’s vision 10 years ago - times have significantly changed with 10x faster hardware and networks, making that original vision for the Web now a reality.</p>
<p>In this session delegates will learn how to:</p>
<ul>
<li>Overcome common hurdles and pitfalls of client-side only JavaScript development.</li>
<li>Speed up development time by cutting out extra server-side code and processing scripts that are no longer necessary.</li>
<li>Clean up your code base by reducing (or even eliminating) the number of languages needed to leverage to accomplish common tasks (i.e. Why bother with server-side PHP scripts to fetch database results when you can do it all in JavaScript on the server? Why mess with Curl to fetch content that your JavaScript code can grab in one line?)</li>
</ul>
</blockquote>
<p><span id="more-53"></span><br />
Selby will also get hands-on with a live demonstration of how to:</p>
<ul>
<li>Create JSON data services for your Ajax, Flash, Flex and Silverlight apps</li>
<li>Implement JavaScript RMI</li>
<li>Use your favorite Ajax libraries server-side.</li>
<li>Manipulate the DOM server-side</li>
<li>Talk to databases, file systems, networks, and remote sites or services (cross-domain XHRs are now a possibility!</li>
</ul>
<p>The session will show Web developers how they can put their JavaScript skills to work on the server side using technologies like Mozilla Rhino and <a href="http://www.aptana.com/jaxer" target="_blank">Aptana Jaxer</a>, which embeds the entire Mozilla browser on the server side.</p>
<h2>About AjaxWorld&#8230;</h2>
<p>AJAXWorld RIA Conference &#038; Expo 2008 West<br />
The days when AJAX is the only game in town are over, and the 6th International AJAXWorld RIA Conference &#038; Expo in San Jose, CA, on October 20-22, 2008 is your chance to come and see it and hear it for yourself.</p>
<p>Because it&#8217;s easy to misjudge priorities and invest in the wrong technology, AJAXWorld will help you invest in the right one for your particular business. It will help you find the optimal balance between business needs, technology potential, and enhanced user experience. AJAXWorld RIA Conference &#038; Expo 2008 West is where you can find what you&#8217;re going to need for business survival and Web success in 2008, 2009 and beyond.</p>
<p>AJAXWorld&#8217;s 80+ technical sessions, Keynotes, Power Panels and General Session Demos will help you determine which Rich Internet Technology will provide the most meaningful impact in your business, organization or service. The conference program aims to inform and inspire you toward the detailed implementation plan that you&#8217;re going to need in the next 12 months in your own initiative whether that&#8217;s SaaS, financial services, healthcare, enterprise portals, ISV applications, or whatever.</p>
<p>The Expo floor additionally will allow you to follow up on the premier solutions already available and to choose which best suits your needs.</p>
<p><a href="http://www.ajaxworld.com/" target="_blank">http://www.ajaxworld.com/</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=YkiZFI"><img src="http://feeds.feedburner.com/~f/genxdesign?i=YkiZFI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=YEMcWi"><img src="http://feeds.feedburner.com/~f/genxdesign?i=YEMcWi" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/server-side-javascript-all-the-cool-kids-are-doing-it/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/server-side-javascript-all-the-cool-kids-are-doing-it/</feedburner:origLink></item>
		<item>
		<title>Make Your JavaScript Data Model Smarter - With Object.Event</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/306458514/</link>
		<comments>http://www.gen-x-design.com/archives/make-your-data-javascript-data-model-smarter/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 17:26:26 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/?p=50</guid>
		<description><![CDATA[As today&#8217;s web applications continue to evolve and get more complex, it has become a lot more commonplace to keep a data model present inside of your javascript.  You would then write various widgets, modules, or whatever that would get their data from the model, rather than querying some other web service independently (and [...]]]></description>
			<content:encoded><![CDATA[<p>As today&#8217;s web applications continue to evolve and get more complex, it has become a lot more commonplace to keep a data model present inside of your javascript.  You would then write various widgets, modules, or whatever that would get their data from the model, rather than querying some other web service independently (and if you aren&#8217;t doing this, you should!).  While centralizing all your data into a nice, organized model that different parts of your code can access, it&#8217;s often a challenge to integrate an efficient way to notify the code that depends on these models when the stored data is updated.  Lucky for us, <a href="http://livepipe.net/" target="_blank">Ryan Johnson</a> has created a  surprisingly small library that will allow our data model to notify anything that depends on it that it has updated (or loaded, or whatever you&#8217;d like in fact).</p>
<p>Before we dig in to the notifications, let&#8217;s do a little work to set up an example and some assumptions we&#8217;ll be operating under for the sake of this article.  First, as <a href="http://prototypejs.org" target="_blank">prototype</a> is my weapon of choice, that&#8217;s what we&#8217;ll be using.  We&#8217;ll also be using prototype as Object.Event uses it as well!  Now, let&#8217;s pretend that we have a website that has some social networking aspect of some kind.  We want to display a short list of who&#8217;s currently online (say the 6 most recently active people) in some sort of side bar, and perhaps a count of the total members online in a footer element.  Rather than having both these elements poll the server at some interval to update their information, let&#8217;s create a little data model that these areas can use instead.<br />
<span id="more-50"></span></p>
<h2>Step 1 - Create a Data Model</h2>
<p>For the sake of brevity, this will be stubbed out in a lot of places, but we&#8217;ll create enough functionality to get the concepts across.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> WhosOnlineSummary = <span style="color: #003366; font-weight: bold;">Class</span>.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span>
<span style="color: #66cc66;">&#123;</span>
    initialize: <span style="color: #003366; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">totalOnlineUsers</span>   = <span style="color: #CC0000;">0</span>;
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">whosOnline</span>         = <span style="color: #003366; font-weight: bold;">new</span> Hash<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span>            = <span style="color: #003366; font-weight: bold;">true</span>;
&nbsp;
        <span style="color: #009900; font-style: italic;">// do our initial fetch</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">fetchUsers</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #009900; font-style: italic;">// set this up to poll for new data every thirty seconds...</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">dataPoller</span> = <span style="color: #003366; font-weight: bold;">new</span> PeriodicalExecuter<span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>pe<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">fetchUsers</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</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: #CC0000;">30</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>,
&nbsp;
    fetchUsers: <span style="color: #003366; font-weight: bold;">function</span> fetchUsers<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// this would probably do some other stuff too</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #006600;">Request</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'/your/data/service'</span>, 
        <span style="color: #66cc66;">&#123;</span>
            onComplete: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>response<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">update</span><span style="color: #66cc66;">&#40;</span>response.<span style="color: #006600;">responseText</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</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: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#125;</span>,
&nbsp;
    update: <span style="color: #003366; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// and you'd have some sort of logic</span>
        <span style="color: #009900; font-style: italic;">// here to update the data... here's a stub..</span>
&nbsp;
&nbsp;
        <span style="color: #009900; font-style: italic;">// I'm assuming the data returned is a JSON object here...</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'totalOnlineUsers'</span> <span style="color: #000066; font-weight: bold;">in</span> data<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">totalOnlineUsers</span> = data.<span style="color: #006600;">totalOnlineUsers</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">// and update our &quot;who's online&quot; stuff...</span>
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'onlineUsers'</span> <span style="color: #000066; font-weight: bold;">in</span> data<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #009900; font-style: italic;">// simple way to refresh, just kill the current list :)</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">whosOnline</span> = <span style="color: #003366; font-weight: bold;">new</span> Hash<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
            <span style="color: #009900; font-style: italic;">// pretend online users is an array of json objects here...</span>
            <span style="color: #009900; font-style: italic;">// [ { id: userId, name: username, etc.}, {...}, ... ]</span>
            data.<span style="color: #006600;">onlineUsers</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>user<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">whosOnline</span>.<span style="color: #006600;">set</span><span style="color: #66cc66;">&#40;</span>user.<span style="color: #006600;">id</span>, user<span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</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;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span> = <span style="color: #003366; font-weight: bold;">false</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">// get this globally namespaced... we'll just declare it here for</span>
<span style="color: #009900; font-style: italic;">// the sake of keeping things easy... you probably shouldn't do </span>
<span style="color: #009900; font-style: italic;">// this in real life ;)</span>
<span style="color: #003366; font-weight: bold;">var</span> whosOnline = <span style="color: #3366CC;">''</span>;
&nbsp;
Event.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span>window, <span style="color: #3366CC;">'load'</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>
    whosOnline = <span style="color: #003366; font-weight: bold;">new</span> WhosOnlineSummary<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>OK, as you can see, we&#8217;ve got a very simple data model that updates itself every thirty seconds, and that our other &#8220;widgets&#8221; can easily tap into for their information.  I&#8217;m not going to write these widgets out to any great extent, but I will create a small stub for the total online users functionality to help us out here.</p>
<h2>Step 2 - Create Some Widgets</h2>
<p>Now that we have a model, let&#8217;s start leveraging it to do something meaningful.  As I just mentioned, this is only a stub, but it should give you a nice idea of where we&#8217;re going&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> TotalOnlineUsers = <span style="color: #003366; font-weight: bold;">Class</span>.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span>
<span style="color: #66cc66;">&#123;</span>
    initialize: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">domElement</span> = element;
&nbsp;
        <span style="color: #009900; font-style: italic;">// any other useful variables could go here...</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">parseOnlineUsers</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>,
&nbsp;
    parseOnlineUsers: <span style="color: #003366; font-weight: bold;">function</span> parseOnlineUsers<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// nice and simple ;)</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">domElement</span>.<span style="color: #006600;">update</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'Currently '</span> + whosOnline.<span style="color: #006600;">totalOnlineUsers</span> + <span style="color: #3366CC;">' users online'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>And now we&#8217;re essentially ready to do some fun stuff.  As you can see, all this looks nice, but our TotalOnlineUsers widget has no way of knowing when it needs to update the display, as there&#8217;s no way to know when the data model has changed.  Enter Object.Event&#8230;</p>
<h2>Step 3 - Make Your Data Model Smart</h2>
<p>So, we need to get our data model publishing events that our widgets can listen for.  This is actually pretty darn simple since all the heavy lifting has been done for us.  Let&#8217;s go ahead and leverage the power of Object.Event (I&#8217;ll provide download links at the end of this article).  The first thing we need to do is provide the data model with the &#8220;event&#8221; functionality.  This is a simple one-liner that we can put right after our class declaration.  It looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript">...
 <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span> = <span style="color: #003366; font-weight: bold;">false</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
Object.<span style="color: #006600;">Event</span>.<span style="color: #006600;">extend</span><span style="color: #66cc66;">&#40;</span>WhosOnlineSummary<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>That&#8217;s it!  Now, all that remains for us to do is to create events inside this object that can be observed (we&#8217;ll cover the actual observing shortly).  This is done through simple additions of &#8220;notify&#8221; functions.  Since we&#8217;ve extended our data model class, this is also a cinch.  I&#8217;ll modify the update function to include two &#8220;events&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript">...
    <span style="color: #006600;">update</span>: <span style="color: #003366; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// and you'd have some sort of logic</span>
        <span style="color: #009900; font-style: italic;">// here to update the data... here's a stub..</span>
&nbsp;
&nbsp;
        <span style="color: #009900; font-style: italic;">// I'm assuming the data returned is a JSON object here...</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'totalOnlineUsers'</span> <span style="color: #000066; font-weight: bold;">in</span> data<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">totalOnlineUsers</span> = data.<span style="color: #006600;">totalOnlineUsers</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">// and update our &quot;who's online&quot; stuff...</span>
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'onlineUsers'</span> <span style="color: #000066; font-weight: bold;">in</span> data<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #009900; font-style: italic;">// simple way to refresh, just kill the current list :)</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">whosOnline</span> = <span style="color: #003366; font-weight: bold;">new</span> Hash<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
            <span style="color: #009900; font-style: italic;">// pretend online users is an array of json objects here...</span>
            <span style="color: #009900; font-style: italic;">// [ { id: userId, name: username, etc.}, {...}, ... ]</span>
            data.<span style="color: #006600;">onlineUsers</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>user<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">whosOnline</span>.<span style="color: #006600;">set</span><span style="color: #66cc66;">&#40;</span>user.<span style="color: #006600;">id</span>, user<span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</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;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">loading</span> = <span style="color: #003366; font-weight: bold;">false</span>;
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">notify</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'whosOnlineLoaded'</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">notify</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'whosOnlineUpdate'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
...</pre></div></div>

<p>As you can see, we can create any custom events that we want, and we can name them whatever we want.  Pretty cool stuff, huh?  So, there&#8217;s only one thing that remains, and that&#8217;s making our widget listen for these events.</p>
<h2>Step 4 - Make our Widgets Listen for Events</h2>
<p>You&#8217;ll notice I created two events in our data model, but we&#8217;re only going to use one for this example.  Let&#8217;s get right to it, as there&#8217;s no real need for explanation here&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> TotalOnlineUsers = <span style="color: #003366; font-weight: bold;">Class</span>.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span>
<span style="color: #66cc66;">&#123;</span>
    initialize: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">domElement</span> = element;
&nbsp;
        <span style="color: #009900; font-style: italic;">// any other useful variables could go here...</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">// watch for updates from the data model</span>
        whoseOnline.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'whosOnlineUpdate'</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: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">parseOnlineUsers</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</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;">&#41;</span>;
&nbsp;
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">parseOnlineUsers</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>,
&nbsp;
    parseOnlineUsers: <span style="color: #003366; font-weight: bold;">function</span> parseOnlineUsers<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// nice and simple ;)</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">domElement</span>.<span style="color: #006600;">update</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'Currently '</span> + whosOnline.<span style="color: #006600;">totalOnlineUsers</span> + <span style="color: #3366CC;">' users online'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Done.  It&#8217;s really that easy!</p>
<h2>Wrapping Up</h2>
<p>Hopefully, you can see the huge benefit of approaching your apps this way, and integrating Object.Event.  If you&#8217;ll remember, our so-called page also has a who&#8217;s online list.  You could create a widget that also observes the &#8220;whosOnlineUpdate&#8221; event, so it will update whenever the model changes as well.  We&#8217;ve effectively made the load on the server smaller, since we&#8217;ve only got one thing calling our data service, instead of 2 (in this case, but I&#8217;m sure there are many practical applications that would have many more somewhat redundant calls).  We also know that our presentation will be in sync across all the different elements on this page, which leads to a much slicker user experience.  The best part of all this? We&#8217;ve made very, very small tweaks to our code, and they were very unobtrusive as well.  Enjoy, and thank Ryan for his bad-ass javascript kung-fu if you&#8217;ve got a moment!</p>
<p>As promised, here are your links to all the required libraries:</p>
<ul>
<li><a href="http://livepipe.net/projects/object_event/" target="_blank">Object.Event - Created by Ryan Johnson</a></li>
<li><a href="http://prototypejs.org" target="_blank">Prototype Framework</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=oTbw1I"><img src="http://feeds.feedburner.com/~f/genxdesign?i=oTbw1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=QBGITi"><img src="http://feeds.feedburner.com/~f/genxdesign?i=QBGITi" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/make-your-data-javascript-data-model-smarter/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/make-your-data-javascript-data-model-smarter/</feedburner:origLink></item>
		<item><title>Autocompleter.Local — scriptaculous — GitHub [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458515/autocompleter-local</link><dc:creator>iselby</dc:creator><pubDate>Mon, 02 Jun 2008 18:13:23 -0500</pubDate><guid isPermaLink="false">http://github.com/madrobby/scriptaculous/wikis/autocompleter-local</guid><description>My little contribution to the cause... I documented this as I just used it today (and it was missing from the new wiki)</description><feedburner:origLink>http://github.com/madrobby/scriptaculous/wikis/autocompleter-local</feedburner:origLink></item><item><title>Deziner Folio» Kick Your Photos Up a Notch [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458516/</link><dc:creator>iselby</dc:creator><pubDate>Mon, 02 Jun 2008 14:50:54 -0500</pubDate><guid isPermaLink="false">http://www.dezinerfolio.com/2008/06/03/kick-your-photos-up-a-notch/</guid><description>A nice collection of post-production photography tips for photoshop</description><feedburner:origLink>http://www.dezinerfolio.com/2008/06/03/kick-your-photos-up-a-notch/</feedburner:origLink></item><item><title>Design Stencils - Yahoo! Design Pattern Library [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458517/</link><dc:creator>iselby</dc:creator><pubDate>Sun, 01 Jun 2008 11:54:23 -0500</pubDate><guid isPermaLink="false">http://developer.yahoo.com/ypatterns/wireframes/</guid><description>Quite happy I found this actually.... check it out</description><feedburner:origLink>http://developer.yahoo.com/ypatterns/wireframes/</feedburner:origLink></item><item><title>Sarah Jessica Parker Looks Like A Horse [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458518/</link><dc:creator>iselby</dc:creator><pubDate>Sun, 01 Jun 2008 01:18:13 -0500</pubDate><guid isPermaLink="false">http://www.sarahjessicaparkerlookslikeahorse.com/</guid><description>A Loving Tribute to New York&amp;#039;s Self-Proclaimed Aging Fashion Icon!</description><feedburner:origLink>http://www.sarahjessicaparkerlookslikeahorse.com/</feedburner:origLink></item><item><title>Craft for China Auction! [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458519/5290.html</link><dc:creator>iselby</dc:creator><pubDate>Sun, 01 Jun 2008 00:15:36 -0500</pubDate><guid isPermaLink="false">http://gryffindormom.livejournal.com/5290.html</guid><description>Always a good cause, but after the horrible earthquakes, there are even more orphans that need our help.  Seriously, take some time to do something good this weekend</description><feedburner:origLink>http://gryffindormom.livejournal.com/5290.html</feedburner:origLink></item><item>
		<title>Nice Tutorial: CSS Decorative Gallery</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/306458520/</link>
		<comments>http://www.gen-x-design.com/archives/nice-tutorial-css-decorative-gallery/#comments</comments>
		<pubDate>Thu, 29 May 2008 21:11:52 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/nice-tutorial-css-decorative-gallery/</guid>
		<description><![CDATA[Stumbled across this in my pile &#8216;o feeds&#8230; nice collection of css-based image decorations for galleries (or whatever you want).  Check out the tutorial over at Web Designer Wall:
CSS Decorative Gallery
]]></description>
			<content:encoded><![CDATA[<p>Stumbled across this in my pile &#8216;o feeds&#8230; nice collection of css-based image decorations for galleries (or whatever you want).  Check out the tutorial over at Web Designer Wall:<br />
<a href="http://www.webdesignerwall.com/tutorials/css-decorative-gallery/" target="_blank">CSS Decorative Gallery</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=aFDpIH"><img src="http://feeds.feedburner.com/~f/genxdesign?i=aFDpIH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=GvMhph"><img src="http://feeds.feedburner.com/~f/genxdesign?i=GvMhph" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/nice-tutorial-css-decorative-gallery/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/nice-tutorial-css-decorative-gallery/</feedburner:origLink></item>
		<item>
		<title>A Peek Into Yahoo! BrowserPlus</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/306458521/</link>
		<comments>http://www.gen-x-design.com/archives/a-peek-into-yahoo-browserplus/#comments</comments>
		<pubDate>Wed, 28 May 2008 20:02:43 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/a-peek-into-yahoo-browserplus/</guid>
		<description><![CDATA[This looks like it has a lot of promise&#8230; BrowserPlus is a platform for extending the Web: an end-user installs it and a developer uses its features through a small JavaScript library. Some of the features that exist in the platform today include:

Drag-and-drop from the desktop
Client-side image manipulation (cropping, rotation &#038; filters)
Desktop notifications

Check out the [...]]]></description>
			<content:encoded><![CDATA[<p>This looks like it has a lot of promise&#8230; BrowserPlus is a platform for extending the Web: an end-user installs it and a developer uses its features through a small JavaScript library. Some of the features that exist in the platform today include:</p>
<ul>
<li>Drag-and-drop from the desktop</li>
<li>Client-side image manipulation (cropping, rotation &#038; filters)</li>
<li>Desktop notifications</li>
</ul>
<p>Check out the full article:<br />
<a href="http://developer.yahoo.net/blog/archives/2008/05/browserplus.html" target="_blank">A Peek Into Yahoo! BrowserPlus</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=xDzBTH"><img src="http://feeds.feedburner.com/~f/genxdesign?i=xDzBTH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=QoqnHh"><img src="http://feeds.feedburner.com/~f/genxdesign?i=QoqnHh" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/a-peek-into-yahoo-browserplus/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/a-peek-into-yahoo-browserplus/</feedburner:origLink></item>
		<item>
		<title>Announcing AJAX Libraries API: Speed up your Ajax apps with Google’s infrastructure</title>
		<link>http://feeds.feedburner.com/~r/genxdesign/~3/306458522/</link>
		<comments>http://www.gen-x-design.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-google%e2%80%99s-infrastructure/#comments</comments>
		<pubDate>Tue, 27 May 2008 19:18:23 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.gen-x-design.com/archives/untitledannouncing-ajax-libraries-api-speed-up-your-ajax-apps-with-google%e2%80%99s-infrastructure/</guid>
		<description><![CDATA[Very simply put, it&#8217;s about damn time!  Check out the announcement article over at Ajaxian:
Google AJAX Libraries API
]]></description>
			<content:encoded><![CDATA[<p>Very simply put, it&#8217;s about damn time!  Check out the announcement article over at Ajaxian:<br />
<a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure" target="_blank">Google AJAX Libraries API</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/genxdesign?a=3H6QcH"><img src="http://feeds.feedburner.com/~f/genxdesign?i=3H6QcH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/genxdesign?a=2JMhqh"><img src="http://feeds.feedburner.com/~f/genxdesign?i=2JMhqh" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.gen-x-design.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-google%e2%80%99s-infrastructure/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><feedburner:origLink>http://www.gen-x-design.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-google%e2%80%99s-infrastructure/</feedburner:origLink></item>
	<lastBuildDate>Wed, 16 Jul 2008 02:16:08 -0500</lastBuildDate><item><title>Awesomeness!: Weezer's New Music Video Features A Bunch Of Youtube All-Stars! - Geekologie [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458523/awesomeness_weezers_new_music.php</link><dc:creator>iselby</dc:creator><pubDate>Fri, 23 May 2008 17:32:19 -0500</pubDate><guid isPermaLink="false">http://www.geekologie.com/2008/05/awesomeness_weezers_new_music.php</guid><description>Awesomeness!: Weezer&amp;#039;s New Music Video Features A Bunch Of Youtube All-Stars!</description><feedburner:origLink>http://www.geekologie.com/2008/05/awesomeness_weezers_new_music.php</feedburner:origLink></item><item><title>Who's looking forward to the 'Prince of Persia' movie? | PopWatch Blog | EW.com [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458524/gyllenhaa-persi.html</link><dc:creator>iselby</dc:creator><pubDate>Fri, 23 May 2008 14:03:35 -0500</pubDate><guid isPermaLink="false">http://popwatch.ew.com/popwatch/2008/05/gyllenhaa-persi.html</guid><description>One of the most hilarious slip-ups I have ever seen... the write did NO research whatsoever, and I would recommend reading the comments in this as well.

Priceless.</description><feedburner:origLink>http://popwatch.ew.com/popwatch/2008/05/gyllenhaa-persi.html</feedburner:origLink></item><item><title>Louie Mantia - Desktops [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458525/desktops.htm</link><dc:creator>iselby</dc:creator><pubDate>Fri, 23 May 2008 13:19:00 -0500</pubDate><guid isPermaLink="false">http://louiemantia.com/desktops.htm</guid><description>REALLY nice wallpapers for &amp;#039;ya... check em out</description><feedburner:origLink>http://louiemantia.com/desktops.htm</feedburner:origLink></item><item><title>First Rule of Usability? Don't Listen to Users (Alertbox) [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458528/20010805.html</link><dc:creator>iselby</dc:creator><pubDate>Wed, 21 May 2008 11:13:05 -0500</pubDate><guid isPermaLink="false">http://www.useit.com/alertbox/20010805.html</guid><description>To design an easy-to-use interface, pay attention to what users do, not what they say. Self-reported claims are unreliable, as are user speculations about future behavior.</description><feedburner:origLink>http://www.useit.com/alertbox/20010805.html</feedburner:origLink></item><item><title>Microsoft Live Labs: Photosynth [del.icio.us]</title><link>http://feeds.feedburner.com/~r/genxdesign/~3/306458529/default.html</link><dc:creator>iselby</dc:creator><pubDate>Tue, 20 May 2008 02:09:15 -0500</pubDate><guid isPermaLink="false">http://labs.live.com/photosynth/default.html</guid><description>The Photosynth Technology Preview is a taste of the newest - and, we hope, most exciting - way to view photos on a computer. Our software takes a large collection of photos of a place or an object, analyzes them for similarities, and then displays the pho</description><feedburner:origLink>http://labs.live.com/photosynth/default.html</feedburner:origLink></item></channel>
</rss>
