<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Domino Rss Sezione- IT</title>
    <link>http://www.domino.it</link>
    <description>Ecco le news selezionate per voi da Domino -</description>
    <language>it</language>
    <copyright>Domino s.r.l (c) www.domino.it</copyright>
    <lastBuildDate>Wed, 18 Jan 2012 19:59:39 +0100</lastBuildDate>
    <item>
      <title>iPhone Web Goodies: Drag and Drop with Touch, Resize and Rotate with Gestures</title>
      <description><![CDATA[<p><object type="application/x-shockwave-flash" data="http://www.flickr.com/apps/video/stewart.swf?v=55430" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" height="300" width="400">
<param name="flashvars" value="intl_lang=en-us&amp;photo_secret=e2d7c047f4&amp;photo_id=2657744586"></param>
<param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=55430"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=55430" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;photo_secret=e2d7c047f4&amp;photo_id=2657744586" height="300" width="400"></embed></param></object></p>
<p>The video above shows a <a href="http://tinyurl.com/sp-iphone">simple showcase application</a> that Neil Roberts of SitePen created and <a href="http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/">wrote about</a>.</p>
<p>He testing out the new APIs such as the touch API where he worked with drag and drop:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-3');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-3">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">node.<span style="color: #006600;">ontouchmove</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span>e.<span style="color: #006600;">touches</span>.<span style="color: #006600;">length</span> == <span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #009900; font-style: italic;">// Only deal with one finger</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> touch = e.<span style="color: #006600;">touches</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>; <span style="color: #009900; font-style: italic;">// Get the information for finger #1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> node = touch.<span style="color: #006600;">target</span>; <span style="color: #009900; font-style: italic;">// Find the node the drag started from</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">position</span> = <span style="color: #3366CC;">"absolute"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">left</span> = touch.<span style="color: #006600;">pageX</span> + <span style="color: #3366CC;">"px"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">top</span> = touch.<span style="color: #006600;">pageY</span> + <span style="color: #3366CC;">"px"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And resizing and rotation with the Gestures API:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> width = <span style="color:#800000;">100</span>, height = <span style="color:#800000;">200</span>, rotation = ;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">node.<span style="color: #006600;">ongesturechange</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> node = e.<span style="color: #006600;">target</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// scale and rotation are relative values,</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// so we wait to change our variables until the gesture ends</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">width</span> = <span style="color:#006600; font-weight:bold;">&#40;</span>width * e.<span style="color: #006600;">scale</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color: #3366CC;">"px"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">height</span> = <span style="color:#006600; font-weight:bold;">&#40;</span>height * e.<span style="color: #006600;">scale</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color: #3366CC;">"px"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; node.<span style="color: #006600;">style</span>.<span style="color: #006600;">webkitTransform</span> = <span style="color: #3366CC;">"rotate("</span> + <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span>rotation + e.<span style="color: #006600;">rotation</span><span style="color:#006600; font-weight:bold;">&#41;</span> % <span style="color:#800000;">360</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color: #3366CC;">"deg)"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">node.<span style="color: #006600;">ongestureend</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// Update the values for the next time a gesture happens</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; width *= e.<span style="color: #006600;">scale</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; height *= e.<span style="color: #006600;">scale</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; rotation = <span style="color:#006600; font-weight:bold;">&#40;</span>rotation + e.<span style="color: #006600;">rotation</span><span style="color:#006600; font-weight:bold;">&#41;</span> % <span style="color:#800000;">360</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<blockquote><p>
Some readers might have noticed that a gesture is just a prettier way of looking at touch events. It?s completely true, and if you don?t handle things properly, you can end up with some odd behavior. Remember to keep track of what?s currently happening in a page, as you?ll probably want to let one of these two operations ?win? when they come in conflict.
</p></blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=mDQZGJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=mDQZGJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=b9lv8J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=b9lv8J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=PMcFNj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=PMcFNj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/332913712/iphone-web-goodies-drag-and-drop-with-touch-resize-and-rotate-with-gestures</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/332913712/iphone-web-goodies-drag-and-drop-with-touch-resize-and-rotate-with-gestures</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 17:16:33 +0200</pubDate>
    </item>
    <item>
      <title>Remember the Web Apps; Don&#x2019;t forget the first iPhone baby today</title>
      <description><![CDATA[<p>We see the birth of the second baby when it comes to building and running apps on the iPhone. People have already <a href="http://www.techcrunch.com/2008/07/10/before-the-app-store-%e2%80%9copens%e2%80%9d-it-has-already-made-apple-55000/">spent almost $100k in the first few hours</a> of the AppStore not being open, so tomorrow is likely to be a great day for Apple, and developers, as people run around clicking on buy without thinking of the price.</p>
<p>I spent some time running the applications, and thinking about how different they are to Web versions. For example, when I launch Twitterific vs. a web based Twitter it actually was faster for the Web page to load Safari up with everything. Twitterific also had a strange feature for loading images. As I moved up and down the list the images looked like they were being pushed out of cache which made for a weird experience.</p>
<p>What if the iPhone offered the ability to aggressively cache "applications". When you open the application it opens its own instance of Safari instead of just linking over to Safari. What if it had access to local storage APIs in WebKit?</p>
<p>The native applications do have benefits. They have access to the camera, addressbook, ... well wait, those could be JavaScript APIs too.</p>
<p>There is the tool chain. You can have fine grained performance knowledge of your application with the Objective-C tools, but with SquirrelFish Apple is getting better and better there too. Other nice tooling could work well when constraining the Web interfaces to the iPhone form factor.</p>
<p>What about games? You couldn't do super monkey ball, or could you if you had a really solid Flash, or feature complete <code>canvas.</p>
<p>The native apps are great, but I am still betting on the Web as a great platform for mobile applications too.</code></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=eIrBDJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=eIrBDJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=r6awYJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=r6awYJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=7h0snj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=7h0snj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/332746640/remember-the-web-apps-dont-forget-the-first-iphone-baby-today</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/332746640/remember-the-web-apps-dont-forget-the-first-iphone-baby-today</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 17:01:32 +0200</pubDate>
    </item>
    <item>
      <title>YPulse: Fades and Pulsations Library</title>
      <description><![CDATA[<p>Kent Johnson has released <a href="http://blog.trendics.com/development/yui/using-yui-to-pulse-elements-on-web-pages-to-improve-usability/">YPulse</a> a simple open source wrapper for the YUI Animation library that makes creating highlight fades and pulsing button glows a bit easier.</p>
<p>You pulse away with something like:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> pulser = <span style="color: #003366; font-weight: bold;">new</span> YAHOO.<span style="color: #006600;">squarebits</span>.<span style="color: #006600;">YPulse</span><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ?my-div?,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ?backgroundColor?,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ?#FFFFFF?, <span style="color: #009900; font-style: italic;">// starting</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ?#FFFF00?, <span style="color: #009900; font-style: italic;">// ending</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">0</span>.<span style="color:#800000;">75</span>, <span style="color: #009900; font-style: italic;">// The number of seconds for the start-end transition</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">0</span>.<span style="color:#800000;">10</span>, <span style="color: #009900; font-style: italic;">// The number of seconds to wait after completing the start-end transition</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">0</span>.<span style="color:#800000;">75</span>, <span style="color: #009900; font-style: italic;">// The number of seconds for the end-start transition</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">0</span>.<span style="color:#800000;">75</span>, <span style="color: #009900; font-style: italic;">// The number of seconds to wait after completing the end-start transition</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; YAHOO.<span style="color: #006600;">util</span>.<span style="color: #006600;">Easing</span>.<span style="color: #006600;">easeBoth</span>, <span style="color: #009900; font-style: italic;">// The YAHOO easing method to use for the start-end transition</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; YAHOO.<span style="color: #006600;">util</span>.<span style="color: #006600;">Easing</span>.<span style="color: #006600;">easeBoth</span> <span style="color: #009900; font-style: italic;">// The YAHOO easing method to use for the end-start transition</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=JqWDxJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=JqWDxJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=0aJfKJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=0aJfKJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=ws8j5j"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ws8j5j" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/332689621/ypulse-fades-and-pulsations-library</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/332689621/ypulse-fades-and-pulsations-library</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 15:42:30 +0200</pubDate>
    </item>
    <item>
      <title>A safety fence for your property lookups</title>
      <description><![CDATA[<p>Michal Till posted a little JavaScript tip that he uses to create a <a href="http://gtc.motiveshq.com/2008/05/safety-fence-for-accessing-properties/">safety fence for accessing properties</a>:</p>
<blockquote><p>
As we all know, null not only does not have any properties, but their existence also can not be tested. So null.property retuns error instead of undefined.</p>
<p>You can end up with something like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-9');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-9">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span>node.<span style="color: #006600;">nextSibling</span><span style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span>node.<span style="color: #006600;">nextSibling</span>.<span style="color: #006600;">className</span> == ...<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">... <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>There is a neat trick that can simplify the boolean expression. We might supply an empty object {} or zero (0) as an alternative:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-10">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> next = <span style="color:#006600; font-weight:bold;">&#40;</span>node || <span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">nextSibling</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
</blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=9AIUKJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=9AIUKJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=R0hivJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=R0hivJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=XSFFoj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=XSFFoj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/332610284/a-safety-fence-for-your-property-lookups</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/332610284/a-safety-fence-for-your-property-lookups</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 13:39:19 +0200</pubDate>
    </item>
    <item>
      <title>First Release of Nuxeo WebEngine</title>
      <description><![CDATA[WebEngine is a lightweight, versatile, content-centric, open source web framework to quickly build and deliver next generation content-oriented web applications.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=w1LzIq"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=w1LzIq" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=yXLMyJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=yXLMyJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=7YdbPJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=7YdbPJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=SwB5Sj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=SwB5Sj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/332656546" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656546/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656546/thread.tss</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 11:59:50 +0200</pubDate>
    </item>
    <item>
      <title>Model-based data exporting with Jailer</title>
      <description><![CDATA[Version 2.4.0 of Jailer has been released. Jailer is a tool for model-based data exporting, schema browsing, and rendering.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=b5KUwa"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=b5KUwa" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=Q8yWcJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=Q8yWcJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=27Y4EJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=27Y4EJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=8WnFAj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=8WnFAj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/332656547" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656547/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656547/thread.tss</guid>
      <category>IT</category>
      <pubDate>Fri, 11 Jul 2008 08:45:18 +0200</pubDate>
    </item>
    <item>
      <title>Cypal Lite, new Weblogic console, is available as Tech Preview.</title>
      <description><![CDATA[Cypal Lite, the light weight console for Weblogic, is available&lt;br&gt;as Tech Preview version
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=Eb7Uzm"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=Eb7Uzm" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=x2KO1J"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=x2KO1J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=EfnSWJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=EfnSWJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=3Z0SJj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=3Z0SJj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/332656548" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656548/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332656548/thread.tss</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 19:45:14 +0200</pubDate>
    </item>
    <item>
      <title>Apache ODE 1.2 Release</title>
      <description><![CDATA[Apache ODE is a WS-BPEL compliant web services orchestration engine. This new release relase introduces innovative features like external variables as well as important enhancements like POX HTTP invocation.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=EL0kVx"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=EL0kVx" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=i2N8BJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=i2N8BJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=MzrkWJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=MzrkWJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=7PK2fj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=7PK2fj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/332058835" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332058835/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/332058835/thread.tss</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 18:13:28 +0200</pubDate>
    </item>
    <item>
      <title>Ojay 0.2: easy keyboarding, a validation DSL, and two new UI widgets</title>
      <description><![CDATA[<p>James Coglan has updated Ojay, the <a href="http://ajaxian.com/archives/ojay-a-chaining-wrapper-for-the-yui">chaining wrapper for YUI</a> that we posted on a few months back.</p>
<p>The new release features really simple keyboard and form scripting and couple of new UI widgets, a new event system and a stack of other improvements:</p>
<blockquote><p>
<b>Ojay.Forms</b>. By far the biggest new package, Ojay.Forms sorts out a real pain point for me in terms of app development. It does two things: it provides unobtrusive replacements for the YAHOO.widget.Button family of classes, and it provides a DSL for handling form validation and Ajax submission.</p>
<p><b>Ojay.Keyboard.</b> The new keyboard package is an abstraction over <tt>YAHOO.util.KeyListener</tt> that lets you say what mean without worrying about character codes, for example:</p>
<pre><code>Ojay.Keyboard.listen(document, 'ALT SHIFT S', function() {
    // handle key press
});</code></pre>
<p>It lets you group sets of keyboard commands together so you can make context-sensitive keyboard controls, and gives you easy access to enable/disable key events and their default browser responses. Not much more to say except that you should <a href="http://ojay.othermedia.org/articles/keyboard.html">check out the documentation</a>.</p>
<p>We have two new UI packages, <a href="http://ojay.othermedia.org/articles/overlays.html"><b>Ojay.Overlay</b></a> and <a href="http://ojay.othermedia.org/articles/paginator.html"><b>Ojay.Paginator</b></a>. Overlay gives you a bunch of classes for positioning content on top of the document, producing lightbox effects and the like, and Paginator implements the content slider effect that?s got a lot of attention recently, including the ability to lazy-load pages of content via Ajax, and easy integration with <a href="http://ojay.othermedia.org/articles/history.html">Ojay.History</a>. Both packages come with a collection of events to allow your code to react to changes to the components, just like you would for DOM elements.</p>
<p>Speaking of events, this release introduces <a href="http://ojay.othermedia.org/articles/observable.html"><b>Ojay.Observable</b></a>, a JS.Class module that allows any class to support the <tt>on()</tt> method used for listening to events. This module underlies the custom events published by all the Ojay components. More information and examples are <a href="http://ojay.othermedia.org/articles/observable.html">in the documentation</a>.</p>
</blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=4vYRNJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=4vYRNJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=DDHoEJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=DDHoEJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=lezTtj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=lezTtj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/331835814/ojay-02-easy-keyboarding-a-validation-dsl-and-two-new-ui-widgets</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/331835814/ojay-02-easy-keyboarding-a-validation-dsl-and-two-new-ui-widgets</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 17:41:50 +0200</pubDate>
    </item>
    <item>
      <title>Code specialization; Namespaces again; Parasitic inheritance</title>
      <description><![CDATA[<p>Karl Krukow has a new blog that has some interesting Ajax content. Rather than pick at one, we have a synopsis of a few of his recent posts:</p>
<p><a href="http://higher-order.blogspot.com/2008/07/manual-code-specialization-poor-mans.html">Manual code specialization</a></p>
<p>A technique is presented (in terms of examples) which can give performance boosts in certain situations. The technique relies on higher-order functions, and sharing variables in closures.</p>
<p><a href="http://higher-order.blogspot.com/2008/02/designing-clientserver-web-applications.html#Namespacing">Namespacing again</a></p>
<p>Namespacing has been generally accepted (in one form or another) as a good thing. In this posting, a pair of functions: 'namespace' and 'using' are presented. The former ensures the existence of a namespace, similar to what is offered in common JavaScript libraries. However, it accepts more general forms of namespace declarations:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-13');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-13">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">namespace</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;com: <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;trifork: <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tribook: <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">'model'</span>,<span style="color: #3366CC;">'view'</span>,<span style="color: #3366CC;">'controller'</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The latter function 'using' complements the namespace function. It brings a namespace into scope.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-14');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-14">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">using<span style="color:#006600; font-weight:bold;">&#40;</span>com.<span style="color: #006600;">trifork</span>.<span style="color: #006600;">tribook</span>.<span style="color: #006600;">model</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">run</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>m<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;m.<span style="color: #006600;">Reservation</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>start,end<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">//...</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;<span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p><a href="http://higher-order.blogspot.com/2008/02/javascript-parasitic-inheritance-super.html">Parasitic inheritance &#038; instanceof</a></p>
<p>The object function advocated by Crockford in his work on parasitic inheritance makes a new object which has the input object as it's prototype. However 'instanceof' doesn't work with this function. A technique for combining these two is presented.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=UHiwlJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=UHiwlJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=6mWPjJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=6mWPjJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=8IdADj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=8IdADj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/331824685/code-specialization-namespaces-again-parasitic-inheritance</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/331824685/code-specialization-namespaces-again-parasitic-inheritance</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 17:37:17 +0200</pubDate>
    </item>
    <item>
      <title>Reverse Autocomplete; The details matter</title>
      <description><![CDATA[<p><img src='http://ajaxian.com/wp-content/images/reverseautocomplete.png' alt='Reverse Autocomplete' /></p>
<p>Autocomplete was one of the first Ajax patterns to come about. We often talk about how it looks, but the how it works part is what really matters. How smart is the algorithm to work out what you are completing against? How long do you go before you kick in to see a result? Does it narrow enough?</p>
<p>László Kozma wrote up his thoughts on <a href="http://www.lkozma.net/autocomplete.html">Reverse Autocomplete</a> which talks about helping the user as they change their mind during autocomplete, and being away of what they are doing, instead of just using <code>field.value</code> as an absolute. He acknowledges that he isn't the first to think about this, but there are some good ideas.</p>
<p>First, he shares a couple of use cases of the problem, such as:</p>
<blockquote><p>
I enter "German football team" in Google Suggest, then I change my mind and go back to change the query to "Italian football team". Autocomplete doesn't help me with this. Even when I entered "Italia| football team", (the | sign shows the cursor location), autocomplete doesn't do anything, as it doesn't look to the right from the cursor. For the record, "Italian football team" is a frequent query, if I type it normally from the beginning, as soon as I get to "f", Google Suggest knows what I want. Google Suggest seems to look at the text as a whole, trying to autocomplete to the right, ignoring the cursor.</p>
<p>In the browser I typed "mail.yahoo.com". Then I want to go to "mail.google.com" next. Even though "mail.google.com" appears in the history, when I correct the middle part, such as to "mail.g|.com" or even "mail.googl|.com", the autocomplete is clueless. Again, the same behaviour as before. </p>
<p>I typed "jenny@fictivecompany.com" in the e-mail To: field. Now I go back to change it to "jennifer@fictivecompany.com". Even though this address is in the address book, "jen|@fictivecompany.com" does not activate the autocomplete. This problem is similar to the previous one, but in this case space and the comma can both be considered a separator, as the boundary for autocompletions.
</p></blockquote>
<p>And his solution:</p>
<blockquote><p>
The solution is to simply take whatever method there was to search for the text before the cursor, and use it to match the text after the cursor as well. If a prefix tree is used, it is convenient to store the text to the right in reversed form for easier search. Most of the time the text after the cursor will be empty, so there won't be much overhead. When the cursor moves back, simply match the text both before and after the cursor, and only do autocomplete if something matches with both sides.</p>
<p>This example implementation in javascript is based on <a href="http://gadgetopia.com/autosuggest/">AutoSuggest v1.0</a>.<br />
I modified the code to perform the reverse search as well. Both the original and the modified version are under <a href="http://www.gnu.org/licenses/lgpl.txt">LGPL</a>. For the cursor location code I modified <a href="http://javascript.nwbox.com/cursor_position/">this script</a>. As this is just a user interface proof-of-concept, I don't recommend using the javascript code as such, as it is not more than a quick hack.</p>
<p>Text left and right of the cursor is shown for more clarity. Note that I didn't use any of the complex data structures mentioned, all we have is a simple array, as can be seen from the source.
</p></blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=yW4APJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=yW4APJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=1G7uqJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=1G7uqJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=rm0mHj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=rm0mHj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/331814206/reverse-autocomplete-the-details-matter</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/331814206/reverse-autocomplete-the-details-matter</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 17:23:10 +0200</pubDate>
    </item>
    <item>
      <title>Power, Authority, and Blame</title>
      <description><![CDATA[<p>Alex Russell has another one of his insightful posts titled <a href="http://alex.dojotoolkit.org/?p=687">Power and Authority</a>. He talks about the core tenets and then ties it to the W3C, and who we should be "blaming" for the slow upgrade of the Web, and it requires a look in the mirror:</p>
<blockquote>
<p>As a case study in putting your faith in the wrong idols, you can?t do better than <a href="http://pseudosavant.com/blog/2008/07/08/a-proprietary-web-blame-the-w3c/">posts like this which ?blame the W3C?</a> (<a href="http://www.molly.com/2008/07/09/a-proprietary-web-indeed-and-fact/">via Molly</a>). Blaming the W3C for not pushing the web forward is both humorously off-target and distressingly common. I?ve <a href="http://alex.dojotoolkit.org/?p=642">written about this before</a>, but fundamentally you can?t blame the W3C for failing to act because <em>it?s not the W3C?s job to act</em>. <a href="http://pseudosavant.com/blog/about/">An MBA</a> should be able to tease this out a bit more effectively ? any decision only requires that you have answers for five questions: why? what? how? when? who? </p>
<p>Answering these for pushing the web forward is straightforward, even on a simplistic level:</p>
<ul>
<li><b>Why?:</b> it?s too hard to build reasonably sophisticated interactions with current web technology</li>
<li><b>What?:</b> new tags, JS and DOM APIs, CSS syntax, and renderer support for all of the above. Eventually, a spec or five reflecting these new technologies.</li>
<li><b>How?:</b> we <em>could</em> try asking the W3C to do it, but they don?t have any power. When they?ve been left to their own devices, the <a href="http://www.w3.org/TR/xhtml2/">W3C has failed</a>. <a href="http://www.w3.org/2001/sw/">Miserably</a>. <a href="http://www.w3.org/2002/mmi/">Over</a> and <a href="http://www.w3.org/Style/CSS/current-work">over</a> and <a href="http://www.w3.org/TR/WCAG20/">over</a> again. Instead, browser makers should introduce new stuff and then agree to agree on it (via the W3C or similar organizations).</li>
<li><b>When?:</b> introducing new features in any given browser seems doable in short-order. In the case of Open Source browsers, the answer is ?as soon as someone decides to invest in them?. Competition has even spurred Microsoft to some level of action. The likely time-scale for new features over all, though, appears to be on the order of 5+ years. That?s clearly not soon enough. <br /><em>TODO</em>: investigate ways to speed this up.</li>
<li><b>Who?:</b> browser makers and others in a position to affect the code that goes into the renderers we use.</li>
</ul>
<p>Figuring out ?how? leads you directly to ?who? in this case. The action we all want is the sole purview and responsibility of the browser vendors and they alone have the power to push the web forward. The ?web standards community? has made it clear that they?ll need the imprimatur of <em>some</em> authoritative body where agreement can be forced, but that hasn?t kept the browser vendors from <a href="http://www.whatwg.org/">taking the initiative there, either</a>. The big, open questions then center around how the ?web standards community? can make enough room for renderer vendors to try out new stuff, since that?s how we get new things. Demanding agreement on what to do before trying it out demonstrably doesn?t work, so it?s then imperative that there be a mechanism for the web to iterate prior to standardization. In fact, I?ll argue that this is now the biggest reason that Paul Ellis isn?t getting the improvements he wants out of the web: there?s no mechanism in place by which any browser vendor can take significant risks without incurring the wrath of a swarm of <a href="http://webstandards.org/">WaSPs</a>, or worse. Attempts to even begin to lay the groundwork for such a mechanism <a href="http://alex.dojotoolkit.org/?p=685">have been shot down forcefully</a> by may folks who, like Paul, view ?fixing the web? as the W3C?s job.</p>
<p>Standards bodies are animated only by the needs of industry to reduce costs by forcing vendors to agree on things. Like Open Source, they can act as a back-stop to the monopoly-creating power of network effects by ensuring that the price of software commodities eventually does reach zero. In this context, then, the W3C?s only effective function is to drive consensus when visions for how to go forward diverge or lead down proprietary ratholes. Asking the W3C for more is the fast path to continued disappointment.</p>
<p>The W3C is just a sail and all sails need the wind to function. You can?t blame the sail for the wind not blowing.</p>
</blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=1C6oCJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=1C6oCJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=mrLYxJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=mrLYxJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=VPL2jj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=VPL2jj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/331805354/power-authority-and-blame</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/331805354/power-authority-and-blame</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 17:10:39 +0200</pubDate>
    </item>
    <item>
      <title>TSS Security Issue Resolved</title>
      <description><![CDATA[We've fixed the problem of exposing an admin console when logging in, and see no evidence of tampering.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=GR5nmv"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=GR5nmv" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=48lscJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=48lscJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=c2sPJJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=c2sPJJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=5i9uQj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=5i9uQj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/331782590" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331782590/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331782590/thread.tss</guid>
      <category>IT</category>
      <pubDate>Thu, 10 Jul 2008 16:24:06 +0200</pubDate>
    </item>
    <item>
      <title>Security issue on TSS today</title>
      <description><![CDATA[We had a security issue on TSS today.  It was not a hack, but rather appears possibly a misconfiguration on our part.  It exposed an administration console to all users signing in with their account.  We are currently examining server logs to better characterize the event.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=yKVDm9"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=yKVDm9" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=V7gxJJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=V7gxJJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=VAZO9J"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=VAZO9J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=0zeNDj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=0zeNDj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/331669879" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331669879/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331669879/thread.tss</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 22:50:41 +0200</pubDate>
    </item>
    <item>
      <title>Passpack releases Host-Proof Hosting Library</title>
      <description><![CDATA[<p><a href="http://passpack.com"><img src='http://ajaxian.com/wp-content/images/passpack.jpg' alt='passpack' /></a></p>
<p>Passpack notified me about their <a href="http://code.google.com/p/passpack/">new library</a> to support <a href="http://ajaxpatterns.org/Host-Proof_Hosting">Host-Proof Hosting (HPH)</a> development (<a href="http://ajaxian.com/archives/w3c-event-debugging-gears-and-air-not-versus-host-proof-hosting-library">touched on earlier</a>). The library allows anyone to set up HPH on their own infrastructure. It's mostly a browser-side library powered by JQuery, focused on transferring encrypted data, and there's also some sample server-side PHP code.</p>
<blockquote><p>
I think the most important part of HPH is that it provides users with real-world data privacy, it's not just a theory, it works now. I'd love to see the pattern get some traction with SaaS providers, but it's not the most obvious system to implement. To this avail, we've just released an MIT/LGPL library for creating Host-Proof Hosting applications: http://code.google.com/p/passpack/
</p></blockquote>
<p>Host-Proof Hosting is the pattern whereby the server knows nothing about the user's data, because the browser ensures it's kept encrypted each time it goes over the wire. It's been practiced in the real world for a couple of years now, but has received some extra attention lately. <a href="http://www.clipperz.com">Clipperz</a>, a Passpack competitor, recently  <a href="http://www.clipperz.com/users/marco/blog/2008/05/30/freedom_and_privacy_cloud_call_action">mentioned interest from Richard Stallman</a> in its advocacy for "zero knowledge web applications".</p>
<p>In their response to Clipperz, <a href="http://passpack.wordpress.com/2008/07/08/the-trust-fallacy-in-zero-knowledge-web-application/">Passpack expressed a more pragmatic view</a>:</p>
<blockquote><p>
The Zero Knowledge Web Application as-is, is a theory. This is not to say that there couldn?t be a future where it might become a credible solution for privacy, but until that happens, it is inappropriate to ask people to trust a theory with just too many inconsistencies.
</p></blockquote>
<p><em>Updated after clarification from Passpack - the library is for any server infrastructure, not an API to communicate specifically with Passpack's servers. They say such an API is on the radar.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=jOC1nJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=jOC1nJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=1EZMhJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=1EZMhJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=f0c0Mj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=f0c0Mj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/331014928/passpack-releases-host-proof-hosting-library</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/331014928/passpack-releases-host-proof-hosting-library</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 20:45:10 +0200</pubDate>
    </item>
    <item>
      <title>EclipseLink 1.0 Released</title>
      <description><![CDATA[The &lt;a href=&quot;http://www.eclipse.org/eclipselink&quot;&gt;Eclipse Persistence Services project (EclipseLink)&lt;/a&gt; has completed its incubation phase and the 1.0 release is available for &lt;a href=&quot;http://www.eclipse.org/eclipselink/downloads/&quot;&gt;download&lt;/a&gt;.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=Y6sgLb"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=Y6sgLb" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=nKxbzJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=nKxbzJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=uQ6PLJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=uQ6PLJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=yo5tIj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=yo5tIj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/331791949" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331791949/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331791949/thread.tss</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 20:26:54 +0200</pubDate>
    </item>
    <item>
      <title>Version 2.2 of Allatori Java Obfuscator is released.</title>
      <description><![CDATA[The 2.2 version can encrypt absolutely all strings using 'maximum' configuration option, introduces new string encryption algorithm - there are now two options for string encryption: 'fast' and 'strong', adds new options to keep names of methods' parameters.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=SXvPXN"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=SXvPXN" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=9ems6J"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=9ems6J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=2DaKOJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=2DaKOJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=CNgrcj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=CNgrcj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/331791950" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331791950/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/331791950/thread.tss</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 19:54:45 +0200</pubDate>
    </item>
    <item>
      <title>Extending Firebug Tutorials</title>
      <description><![CDATA[<p>Jan Odvarko, a member of the Firebug Working Group, has kicked out a set of tutorials on <a href="http://www.softwareishard.com/blog/firebug-tutorial/extending-firebug-hello-world-part-i/">extending Firebug</a>.</p>
<p>If you have some functionality that fits into the performance world, instead of creating a new plugin, you can embrace and extend Firebug as other great tools such as YSlow have done.</p>
<p>To learn more, read up on:</p>
<ul>
<li><a href="http://www.softwareishard.com/blog/?p=3">Part I. Hello World!</a></li>
<li><a href="http://www.softwareishard.com/blog/?p=4">Part II. Toolbar</a></li>
<li><a href="http://www.softwareishard.com/blog/?p=7">Part III. Options</a></li>
<li><a href="http://www.softwareishard.com/blog/?p=10">Part IV. Localization</a></li>
<li><a href="http://www.softwareishard.com/blog/firebug-tutorial/extending-firebug-domplate-part-v/">Part V. Domplate</a></li>
<li><a href="http://www.softwareishard.com/blog/firebug-tutorial/extending-firebug-yahoo-search-part-vi/">Part VI. Yahoo! Search</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=emDHjJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=emDHjJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=eIoslJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=eIoslJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=pT9Xjj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=pT9Xjj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/330787739/extending-firebug-tutorials</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/330787739/extending-firebug-tutorials</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 15:43:03 +0200</pubDate>
    </item>
    <item>
      <title>Unobtrusive DOM 2 Event implementation for IE; Uniform Event Model revisited</title>
      <description><![CDATA[<p>Tavs Dokkedahl sent in a great email about work that he and Allan Jacobs have done on bringing DOM event implementations to IE. Here it is in full:</p>
<p>About a year ago or so I put out the Uniform Event Model (UEM) script which<br />
was an implementation of the W3C DOM 2 Event Interface for IE. As it turned<br />
out that release was very premature - the script was simply incomplete and<br />
definitely not ready for production use.</p>
<p>The design ideas however were good enough. Since then Allan Jacobs has<br />
joined the JSLab team and together we have written a new version of UEM<br />
which is much more stable and modular.</p>
<p>This first release includes support for:</p>
<ul>
<li>DOM 2 Event Interface in IE</li>
<li>DOM 2 UIEvent Interface in IE</li>
<li>DOM 2 MouseEvent Interface in IE</li>
<li>DOM 2 Legacy keyboard handling in IE (fancy way of saying "handle it like<br />
Firefox")</li>
</ul>
<p>The code is unobtrusive - no special syntax or semantics are needed. A lot<br />
of <a href="http://www.jslab.dk/projects.php">documentation is available</a></p>
<p>There still exists issues with some types of events but at large the code is<br />
stable and is performing well enough to be released to the public. Hopefully<br />
we can get some feedback on how to improve it and catch some early errors.</p>
<p>The size of the script is about 32Kb (when minified) it its basic form but<br />
additional modules are available for inclusion. The download page can be<br />
found at <a href="http://www.jslab.dk/jdc.download.php">http://www.jslab.dk/jdc.download.php</a></p>
<p>We are currently working on finishing the DOM 3 KeyboardEvent and DOM 3<br />
textInput interfaces (for IE, Firefox, Opera and Safari) besides various DOM<br />
corrections for other browsers than IE.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=W2ZVNJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=W2ZVNJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=U6kMHJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=U6kMHJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=SJxD9j"><img src="http://feeds.feedburner.com/~f/ajaxian?i=SJxD9j" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/330745846/unobtrusive-dom-2-event-implementation-for-ie-uniform-event-model-revisited</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/330745846/unobtrusive-dom-2-event-implementation-for-ie-uniform-event-model-revisited</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 14:32:15 +0200</pubDate>
    </item>
    <item>
      <title>Webslug: The hot or not of website performance tools</title>
      <description><![CDATA[<p>Kimble Young has created <a href="http://www.webslug.info/">Webslug</a>, the "hot or not of website performance."</p>
<p>It was inspired by webwait but lets you compare the load times of sites and records every performance test for later analysis like browser used, country of origin, top competitors etc.</p>
<p>For example, comparing reddit to Digg:</p>
<p><a href='www.webslug.info/' title='Webslug'><img src='http://ajaxian.com/wp-content/images/webslug.png' alt='Webslug' /></a></p>
<p>It is useful to compare versions of your own site, too.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=h0bf2J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=h0bf2J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=0iVw7J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=0iVw7J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=l0pDTj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=l0pDTj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/330736395/webslug-the-hot-or-not-of-website-performance-tools</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/330736395/webslug-the-hot-or-not-of-website-performance-tools</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Jul 2008 14:26:47 +0200</pubDate>
    </item>
    <item>
      <title>Spacius - Nintendo meets JavaScript - again!</title>
      <description><![CDATA[<p>Fellow Yahoo Matt Hackett took a leaf out of <a href="http://blog.nihilogic.dk/">Jacob Seidelin's book</a> and started converting old school arcade games to JavaScript. Instead of using Canvas his only "non JavaScript" solution is playing the music with <a href="http://www.schillmania.com/projects/soundmanager2/">Scott Schiller's Sound Manager</a> (which, as we know, uses Flash under the hood).</p>
<p>You can come down with 8 bit shoot-em-up fever by clicking the screenshot.</p>
<p><a href="http://scriptnode.com/lab/spacius/"><img src="http://farm4.static.flickr.com/3055/2650269607_f23a024de0_o.gif" width="400" height="300" alt="Spacius by Matt Hackett" /></a></p>
<p>Matt also shows you what the score is and give some more game info <a href="http://scriptnode.com/article/spacius-a-space-adventure/">on his blog</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=ol7q4J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ol7q4J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=FEAvYJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=FEAvYJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=Lj8W5j"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Lj8W5j" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/330205831/spacius-nintendo-meets-javascript-again</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/330205831/spacius-nintendo-meets-javascript-again</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 23:41:31 +0200</pubDate>
    </item>
    <item>
      <title>New Article: Scaling Your Java EE Applications - Part 2</title>
      <description><![CDATA[Getting Java applications to scale requires an intimate understanding of the application, the JVM, and the underlying hardware. In part two of this series, Wang Yu presents some surprising results of Java application scalability based on his experiences in a performance laboratory.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=qf7KG1"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=qf7KG1" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=UtRDYJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=UtRDYJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=6LtN2J"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=6LtN2J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=7xOoSj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=7xOoSj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/329978186" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/329978186/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/329978186/thread.tss</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 18:11:02 +0200</pubDate>
    </item>
    <item>
      <title>Offline Access to Dojo Resources</title>
      <description><![CDATA[<p>Ever had a situation where you've desperately needed to get API information for your favorite toolkit only to find that the site is offline for some reason?<a href="http://sitepen.com/labs/toolbox/"> The Dojo Toolbox</a> aims to tackle this through the use of Adobe's AIR runtime. Built using the <a href="http://dojotoolkit.org/">Dojo framework</a>, the Dojo Toolbox allows for offline viewing of Dojo's API making it easy to have immediate access to the information, internet connection or not.</p>
<blockquote><p>From search to easy navigation and cross-referencing, the Dojo Toolkit source code documentation can now be viewed everywhere you go. When future versions of the Dojo Toolkit are released, you will have the power to view multiple versions of the API within the Dojo Toolbox. We're also working on allowing you to view documentation for your own source code in a future release!</p></blockquote>
<p>In addition, the Dojo Toolbox allows you to do custom builds of the Dojo framework as well as get a comprehensive list of learning resources all within the same application. This is a "must-have" for Dojo developers.</p>
<p><a href="http://sitepen.com/labs/toolbox/"><img src="http://ajaxian.com/wp-content/images/rb_dojotoolboox1.gif" alt="" border="0" width="181" height="340"/></a></p>
<p><a href="http://sitepen.com/labs/toolbox/"><img src="http://ajaxian.com/wp-content/images/rb_dojotoolboox2.gif" alt="" border="0" width="400" height="305"/></a></p>
<p><a href="http://sitepen.com/labs/toolbox/"><img src="http://ajaxian.com/wp-content/images/rb_dojotoolboox3.gif" alt="" border="0" width="400" height="335"/></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=T96HUJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=T96HUJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=6KG4hJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=6KG4hJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=fFklrj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=fFklrj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/329915653/offline-access-to-dojo-resources</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/329915653/offline-access-to-dojo-resources</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 15:44:34 +0200</pubDate>
    </item>
    <item>
      <title>Ext GWT 1.0: GWT 1.5 support, new APIs, performance, and docs</title>
      <description><![CDATA[<p>Darrell Meyer has announced <a href="http://extjs.com/blog/2008/07/07/ext-gwt-v10-released/">Ext GWT 1.0</a>. This is the first fully stable release of the product and it includes a lot of goodies including:</p>
<ul>
<li>Documentation: new <a href="http://extjs.com/helpcenter/topic/com.extjs.gxt.help/html/gettingstarted/gettingstarted.html">screencasts</a> of the various steps</li>
<li>GWT 1.5 support: "Ext GWT is a 100% native GWT application written in Java. Ext GWT does not wrap any 3rd party JavaScript and does not use any external JavaScript files. Ext GWT fully leverages the GWT API including the widget lifecylce, events, listeners, messaging, and RPC."</li>
<li>"Performance was a high priority item for the Ext GWT 1.0 release.  Many changes were made since the first beta releases.  Initial rendering times are quicker and the new layout code reacts quicker to window resizing. Improvements can easily be seen in the <a href="http://extjs.com/explorer">Explorer</a> demo."</li>
<li>Advanced Form Layouts</li>
<li>Improved Data Loading, Store, Binder, and Field API</li>
</ul>
<p>Looks like a very solid release indeed. Congrats to the team.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=C2jCDJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=C2jCDJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=1wgOEJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=1wgOEJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=JAfNZj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=JAfNZj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/329806354/ext-gwt-10-gwt-15-support-new-apis-performance-and-docs</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/329806354/ext-gwt-10-gwt-15-support-new-apis-performance-and-docs</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 15:15:47 +0200</pubDate>
    </item>
    <item>
      <title>Legitimizing Comet with HTML 5 WebSocket</title>
      <description><![CDATA[<div class="igBar"><a href="javascript:showCodeTxt('javascript-16');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-16">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> conn = <span style="color: #003366; font-weight: bold;">new</span> WebSocket<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"ws://www.example.com/livedemo"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">conn.<span style="color: #006600;">onopen</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Conn opened"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">conn.<span style="color: #006600;">onread</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Read: "</span> + evt.<span style="color: #006600;">data</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">conn.<span style="color: #006600;">onclose</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Conn closed"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">conn.<span style="color: #006600;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Hello World"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>What if that code was part of an HTML standard? Would that make you feel better about Comet-style applications? Well, Michael Carter <a href="http://cometdaily.com/2008/07/04/html5-websocket/">has pointed us to</a> the <a href="http://www.mail-archive.com/whatwg@lists.whatwg.org/msg10222.html">HTML 5 discussions</a> that give us WebSocket:</p>
<blockquote><p>
The HTML5 specification now offers <a href="http://www.whatwg.org/specs/web-apps/current-work/#network">WebSocket</a>, a full-duplex communications channel that operates over a single socket. I have been listening closely, and in some cases contributing, to the process of ensuring that WebSocket will:</p>
<ul>
<li>Seamlessly traverse firewalls and routers</li>
<li>Allow duly authorized cross-domain communication</li>
<li>Integrate well with cookie-based authentication</li>
<li>Integrate with existing HTTP load balancers</li>
<li>Be compatible with binary data </li>
</ul>
</blockquote>
<p>He goes on to discuss how WebSocket is not the same as a TCP socket itself, and what that means as we develop real-time applications.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=Mzba4J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Mzba4J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=KYfoRJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=KYfoRJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=TmOFoj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=TmOFoj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/329722506/legitimizing-comet-with-html-5-websocket</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/329722506/legitimizing-comet-with-html-5-websocket</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 13:09:39 +0200</pubDate>
    </item>
    <item>
      <title>The Pencil Project</title>
      <description><![CDATA[<p><a href="http://www.evolus.vn/Pencil/Home.html"><img src="http://ajaxian.com/wp-content/images/pencilproject.png" alt="Pencil Project" border="0" width="432" height="307"/></a></p>
<p>José Jeria pointed us to a great looking XUL application that allows you to sketch GUI's and then export them to PNG:</p>
<blockquote><p>
With the power of the underlying Mozilla Gecko engine, Pencil turns your excellent Firefox 3 browser into a sketching tool with just a 400-kilobyte installation package.</p>
<p>Pencil will always be free and can run on virtually all platforms that Firefox 3 supports.
</p></blockquote>
<p>Always good to see people using the power of XUL that still has features that I hope to see HTML get.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=fg3irJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=fg3irJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=pkN0ZJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=pkN0ZJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=JiuSGj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=JiuSGj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/329714177/the-pencil-project</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/329714177/the-pencil-project</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 12:40:14 +0200</pubDate>
    </item>
    <item>
      <title>Java GUI Testing Tool Squish Supports New Eclipse "Ganymede" 3.4</title>
      <description><![CDATA[The automated Java GUI testing tool Squish now supports the recently released Eclipse &quot;Ganymede&quot; 3.4 RCP framework.
<p><a href="http://feeds.feedburner.com/~a/techtarget/tsscom/home?a=CpJfdE"><img src="http://feeds.feedburner.com/~a/techtarget/tsscom/home?i=CpJfdE" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=jSCJFJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=jSCJFJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=tWcAjJ"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=tWcAjJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/techtarget/tsscom/home?a=255Foj"><img src="http://feeds.feedburner.com/~f/techtarget/tsscom/home?i=255Foj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/techtarget/tsscom/home/~4/329757022" height="1" width="1"/>]]></description>
      <link>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/329757022/thread.tss</link>
      <guid>http://feeds.feedburner.com/~r/techtarget/tsscom/home/~3/329757022/thread.tss</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 10:39:37 +0200</pubDate>
    </item>
    <item>
      <title>Programming Brain Teaser</title>
      <description><![CDATA[<p>I&#8217;ve titled this post as a &#8220;Programming&#8221; brain teaser because ideally you could solve it in any language. For the sake of the exercise, I&#8217;m going to show sample code in JavaScript, but feel free to use your language of choice.<br />
But first and foremost, the reason I&#8217;m writing about this is because I ran into a logic problem last week which I thought I would be able to solve in two seconds. Sadly it wasn&#8217;t the case so I&#8217;d like to share that same problem (in obfuscated form) with you, the readers. I know what you&#8217;re thinking. You&#8217;re at work, and you&#8217;ve got a few minutes to whip up a simple answer. Cool then, go for it. Be sure to share your answer with the rest of us by linking to it offsite, but do not share code in the comments directly as others will most likely want to solve it themselves. </p>
<h3>The problem is simple</h3>
<p>First, you have an array. It looks like this:</p>
<h3 class="code">The array</h3>
<pre><code>
var arr = ['a', 'b', 'c', 'c', 'd','e', 'e',
'e', 'e', 'e', 'f', 'e', 'f', 'e',
'f', 'a', 'a', 'a', 'f', 'f', 'f'];
</code></pre>
<p>Be sure to use the array above in your example. You can iterate through an array easily with a batch function like forEach.</p>
<h3 class="code">using forEach</h3>
<pre><code>arr.forEach(funciton(item, index, ar) {
  // do stuff here
});</code></pre>
<p>In the end, we&#8217;d like to have an output that looks like the following:</p>
<h3 class="code">The final output</h3>
<pre><code>
a b c c d e e &lt;span&gt;e e e&lt;/span&gt; f e f e f a a &lt;span&gt;a&lt;/span&gt; f f &lt;span&gt;f&lt;/span&gt;</code></pre>
<p>You can use basic string concatenation while looping through the items to build your final output. Be sure to test and compare your output results with the actual results. And last but not least, the rule.</p>
<h3>So the rule is this</h3>
<p>In English: <strong>Group together all duplicate items that occur anytime beyond twice by wrapping them with a tag, naturally &#8220;bookending&#8221; them.</strong><br />
Simple, right? No, really. Tease your brain for a few minutes, you can fix that bug after lunch.</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=NDdLeJ"><img src="http://feeds.feedburner.com/~a/WSwI?i=NDdLeJ" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/programming-brain-teaser/</link>
      <guid>http://www.dustindiaz.com/programming-brain-teaser/</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 08:01:40 +0200</pubDate>
    </item>
    <item>
      <title>JavaScript, Rebranded&#x2026;.. Check.</title>
      <description><![CDATA[<p>Michael Mahemoff has a nice little post on the <a href="http://softwareas.com/javascript-rebranded">rebranding of JavaScript</a>. It kicked off when he was listening to <a href="http://blip.tv/file/319044/">Steve Yegge on rebranding</a>:</p>
<blockquote><p>
He talks about how languages are branded, e.g. ?Java? is enterprise. One of his main points is that brands are ?const identifiers?, i.e. it takes an entire generation to change brand perception, so it?s often more effective to simply re-brand. e.g. GTE had a poor brand, so they tried a self-deprecating ad campaign, which backfired, and subsequently re-branded to Verizon.</p>
<p>He then mentions Javascript has a branding problem, because it represents ?browser? and ?toy language? and ?damnit, I gotta learn Javascript? and it?s the language no-one wants to use. He also notes the name itself isn?t great either, nor the rhino imagery. (I?m not sure why Steve assumed many programmers would associate Javascript with rhinos; the Rhino product and O?Reilly cover weren?t really promiment enough to do that; rhino ain?t camel!).
</p></blockquote>
<p>But, wait a minute, didn't we already have a rebranding?</p>
<blockquote><p>
Javascript has already been rebranded. In fact, I?d go so far as to say ?Ajax? was one of the most successful rebrandings in software history.
</p></blockquote>
<p>Although technically Ajax != JavaScript, and the rebranding is really DHTML, he is right. Ajax rebranded the Web, and we have all benefited from it.</p>
<p>I also think that this is just the beginning, and we haven't seen the best of the Ajax revolution yet.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=vtbaDJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=vtbaDJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=y5ujFJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=y5ujFJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=oaf3Hj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=oaf3Hj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/329512658/javascript-rebranded-check</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/329512658/javascript-rebranded-check</guid>
      <category>IT</category>
      <pubDate>Tue, 08 Jul 2008 07:02:05 +0200</pubDate>
    </item>
    <item>
      <title>LLVM and running C as well as Python in the browser</title>
      <description><![CDATA[<p>Dan Morrill <a href="http://blog.morrildl.net/2008/07/why-i-dont-like-javascript-2.html">doesn't like JavaScript 2</a>. His reasoning is a little like the folks who don't want Java.Next to try to copy features from every other language, but to just be the best static language, and let other languages like Scala, Groovy, JRuby (and the hundreds of others like Fan) go in different directions on the same Java platform.</p>
<p>You could argue the same for the browser platform. Why push JavaScript 2 further than cleaning it up, and instead allow other languages to augment it.</p>
<p>This is where technology such as IronMonkey come in, as well as the work that Scott Peterson is doing, <a href="http://www.toolness.com/wp/?p=52">written up here</a>:</p>
<blockquote><p>
Scott Petersen from Adobe gave a talk at Mozilla on a toolchain he?s been creating?soon to be open-sourced?that allows C code to be targeted to the Tamarin virtual machine. Aside from being a really interesting piece of technology, I thought its implications for the web were pretty impressive.</p>
<p>If I followed his presentation right, Petersen?s toolchain works something like this:</p>
<ol>
<li>A special version of the GNU C Compiler?possibly <a href="http://llvm.org/cmds/llvmgcc.html">llvm-gcc</a>?compiles C code into instructions for the <a href="http://en.wikipedia.org/wiki/Llvm">Low Level Virtual Machine</a>.</li>
<li>The LLVM instructions are converted into opcodes for a custom Virtual Machine that runs in <a href="http://en.wikipedia.org/wiki/Actionscript">ActionScript</a>, a variant of ECMAScript and sibling of JavaScript.</li>
<li>The ActionScript is automatically compiled into Tamarin bytecode by Adobe Flash, which may be further compiled into native machine language by Tamarin?s Just-in-Time (JIT) compiler.</li>
</ol>
<p>The toolchain includes lots of other details, such as a custom POSIX system call API and a C multimedia library that provides access to Flash.  And there?s some things that Petersen had to add to Tamarin, such as a native byte array that maps directly to RAM, thereby allowing the VM?s ?emulation? of memory to have only a minor overhead over the real thing.</p>
<p>The end result is the ability to run a wide variety of existing C code in Flash at acceptable speeds.  Petersen demonstrated a version of Quake running in a Flash app, as well as a C-based Nintendo emulator running Zelda; both were eminently playable, and included sound effects and music.</p>
</blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=VB3koJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=VB3koJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=nDaE4J"><img src="http://feeds.feedburner.com/~f/ajaxian?i=nDaE4J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=uAGOMj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=uAGOMj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/328895888/llvm-and-running-c-as-well-as-python-in-the-browser</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/328895888/llvm-and-running-c-as-well-as-python-in-the-browser</guid>
      <category>IT</category>
      <pubDate>Mon, 07 Jul 2008 15:50:43 +0200</pubDate>
    </item>
    <item>
      <title>W3C Event Debugging; Gears and AIR, not versus; Host-Proof Hosting library</title>
      <description><![CDATA[<p>A couple of posts from my <a href="http://almaer.com/blog/">personal land</a> that are related to the Ajax world:</p>
<p>First up, I am building an application that uses some <code>canvas</code> and <a href="http://almaer.com/blog/dealing-with-w3c-events-a-story-of-running-around-in-circles">ran into an issue handling events which sent me down a merry path</a> that took me through: initMouseEvent, error fun <code>(Component returned failure code: 0×80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent?..] )</code>, <code>tabindex=0</code> (thanks Alex), and finally <code>Event.stop(e)</code>.</p>
<p>It reminded me of how much I have forgotten, and how debugging can be too hard for Ajax applications. The good news, was that the solution was simple, and the event system does have some very nice properties.</p>
<p>Secondly, some folks tried to make a story out of Passpack adding an AIR application, but we quickly saw how they ended up with both an AIR app, and Gears support in their browser based application. I <a href="http://almaer.com/blog/passpack-gears-air-why-choose">talk about how this is a valid choice</a>:</p>
<blockquote><p>
I also expect to see more joint applications. Gears functionality is working into HTML5 the standard, which will end up in WebKit (as Apple is great in that regard), and AIR uses?. WebKit as its renderer!</p>
<p>I really hope that AIR will be able to bridge to those APIs, and you get the best of all worlds. I would love to use the Workerpool API from within an AIR application that is doing a lot of JavaScript work for example.
</p></blockquote>
<p>The Passpack team also <a href="http://passpack.wordpress.com/2008/07/04/passpack-host-proof-hosting-open-source-library/">announced</a> a new <a href="http://code.google.com/p/passpack/">open source Host-Proof Hosting Library</a> that has a lot of nice encryption routines <a href="http://code.google.com/p/passpack/wiki/LibraryReference">packaged up</a> allowing you to:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-18">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Passpack.<span style="color: #006600;">encode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"AES"</span>,str,mykey<span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Passpack.<span style="color: #006600;">decode</span><span style="color:#006600; font-weight:bold;">&#40;</span>algorithm,plaintext<span style="color:#006600; font-weight:bold;">&#91;</span>,key,optionalPars<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Passpack.<span style="color: #006600;">utils</span>.<span style="color: #006600;">getBits</span><span style="color:#006600; font-weight:bold;">&#40;</span>password<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Passpack.<span style="color: #006600;">utils</span>.<span style="color: #006600;">genRandomKey</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>size,salt<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Passpack.<span style="color: #006600;">utils</span>.<span style="color: #006600;">hashx</span><span style="color:#006600; font-weight:bold;">&#40;</span>str<span style="color:#006600; font-weight:bold;">&#91;</span>,nohex,full<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ajaxian?a=WJYIiJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=WJYIiJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=MJGbUJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=MJGbUJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=7cJuZj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=7cJuZj" border="0"></img></a>
</div>]]></description>
      <link>http://feeds.feedburner.com/~r/ajaxian/~3/328858632/w3c-event-debugging-gears-and-air-not-versus-host-proof-hosting-library</link>
      <guid>http://feeds.feedburner.com/~r/ajaxian/~3/328858632/w3c-event-debugging-gears-and-air-not-versus-host-proof-hosting-library</guid>
      <category>IT</category>
      <pubDate>Mon, 07 Jul 2008 15:06:35 +0200</pubDate>
    </item>
    <item>
      <title>Google Reader shorts now available on this here website</title>
      <description><![CDATA[<p>This past week I&#8217;ve implemented &#8220;Reader Shorts&#8221; onto <a href="http://www.dustindiaz.com">DustinDiaz.com</a>(a website that once talked about JavaScript on a regular basis) as a way to include updates on my website on a more frequent basis. These &#8220;shorts&#8221; are also <a href="http://feeds.feedburner.com/ReaderShorts" title="My Google Reader shared items">available as an xml feed</a> and can be commented on (en route to a discussion) using <a href="http://friendfeed.com/polvero">Friend Feed</a>.<br />
One funny thing that dawned on me this week is that after including my Twitter updates, and now my Reader Shorts, I&#8217;ve come to the conclusion that there is no need to ever come up with your own database backend and that you can fully run a website off of other free web services. That&#8217;s right. No <a href="http://wordpress.org">Wordpress</a>, <a href="http://postnuke.com">PostNuke</a>, or <a href="http://movabletype.org">MovableType</a>. Instead, simple services like <a href="http://friendfeed.com/polvero">FriendFeed&#8217;s</a> <a href="http://friendfeed.com/api">API</a>, or <a href="http://google.com/reader">Google Reader</a> (as we&#8217;ve already seen), <a href="http://twitter.com/ded">Twitter</a>, <a href="http://flickr.com/photos/polvero/">Flickr</a>, or better yet, <a href="http://tinypaste.com/535f8">TinyPaste</a> (which is actually kind of a stretch).</p>
<h3>Needless to say</h3>
<p>I&#8217;ve caved in on trying to maintain this website and using Social Web Services to keep my <a href="http://feeds.feedburner.com/WSwI">7,000+</a> subscribers seems like a good idea.</p>
<h3>On another note</h3>
<p>Google has been keeping me busy these last few months on <a href="http://mail.google.com/mail/">Gmail</a> where we&#8217;ve been diving into some exciting stuff. I recently moved to San Francisco so I now have ample time to add content to my Reader stream while shuttling to work in Mountain View. Wifi on a bus is super rad! And on that note, my stop is coming up which concludes this post. Cheers</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=e10fdL"><img src="http://feeds.feedburner.com/~a/WSwI?i=e10fdL" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/reader-shorts/</link>
      <guid>http://www.dustindiaz.com/reader-shorts/</guid>
      <category>IT</category>
      <pubDate>Thu, 03 Jul 2008 04:39:11 +0200</pubDate>
    </item>
    <item>
      <title>Useful Feeds</title>
      <description><![CDATA[<p>How many blog posts start with the words "<em>Sorry I've not been blogging much recently, but I resolve to post more often from now</em>". Such a post may be followed by some actual substance, before the silence re-starts.</p>

<p>This is not one of those posts.</p>

<p>Getahead used to be the only place I blogged, but I've infected a few other feeds. I generally don't spend ages linking from one blog to another - I figure you can subscribe to the others if you want that content, however you can't do that if you don't know they exist.</p>

<p>I'm not closing this blog down, however I expect to blog less here. The good news, however, is that I hope that means that the subject-to-noise ratio will go up and not down. Stay tuned.</p>

<p>Both of these blogs are multi-author, 'professional' blogs. By professional, I mean peer-reviewed posts and no cat pictures - you can get those <a href="http://icanhascheezburger.com/">elsewhere</a>.</p>

<a href="http://cometdaily.com/"><img src="http://cometdaily.com/wp-content/themes/cometdaily/images/cometDailyLogo.gif" style="border:0;padding-top:20px;"/></a>

<p><a href="http://cometdaily.com/">CometDaily</a> is written by the people that have spent the most time working on Comet. I've been busy this week so:...</p>

<p><strong><a href="http://cometdaily.com/2008/05/22/on-board-vs-off-board-comet/">On-board vs. Off-board Comet</a></strong> is about 2 architectural styles around how to deploy comet. DWR typifies one style. It's taken (in part) from the Comet BOF that Alex and I did at JavaOne.</p>

<p><strong><a href="http://cometdaily.com/2008/05/20/comet-and-cross-site-scripting/">Comet and Cross-Site Scripting</a></strong> is about how comet could supercharge a web worm so it becomes more virulent than a Warhol Worm. Samy took MySpace down with a web worm in 23 hours. I think it might be possible to reduce this time to about 6 seconds.</p>

<a href="http://www.sitepen.com/blog"><img src="http://getahead.org/images/sitepen-logo.png" style="border:0;padding-top:20px;"/></a>

<p>I work for <a href="http://www.sitepen.com/">SitePen</a> along with a long list of similar techies. <a href="http://www.sitepen.com/blog">Our blog</a> generally one post per day, about Ajax, Dojo, DWR and Comet.</p>

<p><strong><a href="http://www.sitepen.com/blog/2008/05/22/comet-and-java/">Servlet Spec, Comet and Java</a></strong> is about how to work around Java's servlet spec to avoid needlessly chewing up threads. It looks at the options provided by Jetty, Grizzy, Tomcat and the new Servlet Spec.</p>

<a href="http://twitter.com/joewalker"><img src="http://assets2.twitter.com/images/twitter.png" style="border:0;padding-top:20px;"/></a>

<p>And clearly, like everyone else, I <a href="http://twitter.com/joewalker">tweet from time to time</a>. In between tweeting, like everyone else, I mostly complain about how I can't tweet because Twitter is so unreliable.</p>

<p>Still no cat pictures, but I don't get peer reviews on my tweets.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/05/23/useful_feeds.html</link>
      <guid>http://getahead.org/blog/joe/2008/05/23/useful_feeds.html</guid>
      <category>IT</category>
      <pubDate>Fri, 23 May 2008 13:59:17 +0200</pubDate>
    </item>
    <item>
      <title>Big Question for Sun</title>
      <description><![CDATA[<p>It looks from the outside as though every spare resource that Sun has is going into JavaFX. JavaFX may or may not win against Flash/Flex/Air/Silverlight/Android/Ajax, but while Sun is concentrating on FX, it doesn't appear to be giving the Java language the updates it badly needs.</p>

<p>Maybe Sun sees Java as 'done'. OK, but the Java language has one of the largest developer communities in the world, and they'd like some direction. Where do Sun recommend they go for their server-side development needs in 5 years time?</p>

<p>Maybe Sun think we should change to JRuby, Scala or Groovy. Maybe there are updates to Java that I don't know about. If none of the above are the case, the community will eventually disappear into mish-mash of languages that doesn't have the strength of numbers.</p>

<p><small>3:19pm Update: tweaked last paragraph to make the point clearer.</small></p>]]></description>
      <link>http://getahead.org/blog/joe/2008/05/19/big_question_for_sun.html</link>
      <guid>http://getahead.org/blog/joe/2008/05/19/big_question_for_sun.html</guid>
      <category>IT</category>
      <pubDate>Mon, 19 May 2008 14:35:45 +0200</pubDate>
    </item>
    <item>
      <title>Scoping anonymous functions</title>
      <description><![CDATA[<p>This is obviously a no-brainer in that knowing something like this works in JavaScript, but it never really occurred to me to even do such a thing until today. Take the following example which &#8216;calls&#8217; the anonymous function within a unique scope:</p>
<h3 class="code">Scoping anonymous funcitons</h3>
<pre><code>var o = 'hello world';

(function() {
  alert(this);
}).call(o);</code></pre>
<p>It seems ridiculous (in a good way), but it works!</p>
<h3>So what&#8217;s this mean?</h3>
<p>It&#8217;s actually a big deal. Think about how many times you&#8217;ve lost your desired scope due to being inside the scope of another function. Confused? How many times have you done the following:</p>
<h3 class="code">Pitfalls anonymous functions</h3>
<pre><code>// timeout functions
function Constructor() {
  this.foo = 'bar';
  var that = this;
  this.timerId = window.setTimeout(function() {
    alert(that.foo);
  }, 10000);
}

// local functions
Constructor.prototype.getFoo = function() {
  var that = this;
  var getInternalFoo = function() {
    return DED.isString(that.foo) ? that.foo : 'new foo';
  }();
};</code></pre>
<p>Ok, still not a huge deal, but we can clean up the code a bit, and I would sway from using this on non-anonymous functions where scope should be explicitly defined by the author. Here&#8217;s how we can rewrite the code above without using the silly old <code>this = that</code> convention.</p>
<h3 class="code">Rewritten with proper scope</h3>
<pre><code>
// local functions
Constructor.prototype.getFoo = function() {
  var getInternalFoo = function() {
    return (DED.isString(this.foo) ? this.foo : 'new foo';
  }.call(this);
};</code></pre>
<h3>Ok, what about function callbacks that need scope inducing</h3>
<p>(Hehe. Scope inducing, that sounds funny&#8230; (anyway)) As you noticed above in the first example with the setTimeout, the first argument takes in a function <strong>callback</strong> which is different than simply immediately invoking a function. Funny enough, the work around for this is to&#8230;. (yeah you guessed it), add another closure! Note the two following snippets of code. The first immediately executes and alerts &#8220;hello world&#8221;, the second waits for five seconds, and does likewise:</p>
<h3 class="code">Scoping it up</h3>
<pre><code>var o = 'hello world';

// first snippet
(function() {
  alert(this);
}).call(o);

// second snippet
window.setTimeout(function() {
  (function() {
    alert(this);
  }).call(o);
}, 5000);</code></pre>
<p>Pretty fun, huh? Yeah, I thought so too. Cheers.</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=QpLOGJ"><img src="http://feeds.feedburner.com/~a/WSwI?i=QpLOGJ" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/scoping-anonymous-functions/</link>
      <guid>http://www.dustindiaz.com/scoping-anonymous-functions/</guid>
      <category>IT</category>
      <pubDate>Tue, 06 May 2008 21:32:13 +0200</pubDate>
    </item>
    <item>
      <title>Maximize your browser window on a Mac</title>
      <description><![CDATA[<p>There are very few things I don&#8217;t like on a Mac. One of them is the ability to maximize your application windows like the way you can on Microsoft Windows (Yes, the irony (no, actually that&#8217;s not irony, it makes complete sense)). What a Mac will do when you hit the green &#8220;+&#8221; maximize button is size your application window to the contents that your window contains. Not helpful. What MS Windows will do is actually size your window to the size of your screen blocking out all other applications. To me this is helpful since I don&#8217;t like these distractions in the background, and I enjoy the full realestate that I&#8217;m working in. <a href="http://forevergeek.com/apple/mac_vs_windows_its_all_about_the_maximize_button.php">Others seem to disagree</a> saying that this Mac version of maximized space allows users to multi-task better. The fact is, I don&#8217;t want to think about multi-tasking when I don&#8217;t have to. Furthermore, there is no keyboard shortcut on a Mac to trigger this maximization. On Windows you can hit &#8220;alt + space + x&#8221;.</p>
<h3>Fixing it</h3>
<p>Actually, there is no real fix (unless Apple builds it into the OS), but I&#8217;ve come up with a hack (work around) for my browser. First thing to do is to create a text file and call it &#8220;maximize.html&#8221; (you can call it what ever you want, it&#8217;s only temporary). Then populate it with the following contents.</p>
<h3 class="code">Maximize code</h3>
<pre><code>&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;maximize&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;a href="javascript:moveTo(0,0);resizeTo(3000,3000);"&gt;
      Maximize
    &lt;/a&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>It should look like this:</p>
<p><img width="610" src="http://www.dustindiaz.com/img/articles/maximize.png" alt="Maximization code screenshot" /></p>
<p>Next you want to open up this page in Firefox:</p>
<p><img width="610" src="http://www.dustindiaz.com/img/articles/maximize-open-ff.jpg" alt="Open page in Firefox" /></p>
<p>You should see a simple page with a link. What you want to do now is bookmark it. You can do this by control + clicking the link to bring up your context menu. Then choose &#8220;Bookmark This Link&#8230;&#8221;</p>
<p><img width="610" src="http://www.dustindiaz.com/img/articles/maximize-bookmark.jpg" alt="Bookmark this link" /></p>
<h3>Add a keyword shortcut</h3>
<p>Obviously, this has been <a href="http://macosx.com/tech-support/mac/maximize-window-shortcut/5473.html">discussed before</a>. If you&#8217;re using <a href="http://getfirefox.com">Firefox</a>, you can add a keyword shortcut to make it even easier to use this functionality. Since afterall, this is usually the kind of setting you just want to trigger on the fly without having to use your mouse. To do this, simply track down your bookmark, load up the context menu by control + clicking the bookmark, then choose &#8220;Properties&#8221;</p>
<p><img width="610" src="http://www.dustindiaz.com/img/articles/maximize-bookmark-properties.jpg" alt="Properties in Bookmarks" /></p>
<p>Then type in a short letter into the keyword input box&#8230; like &#8220;m&#8221; (the actual keyword is up to you).</p>
<p><img width="610" src="http://www.dustindiaz.com/img/articles/maximize-keyword.png" alt="Keyword box" /></p>
<h3>That&#8217;s it</h3>
<p>Try it out. It&#8217;s not optimal, but it does what I need when browsing the web in full maximum real estate.</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=IbYf2W"><img src="http://feeds.feedburner.com/~a/WSwI?i=IbYf2W" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/maximize-on-a-mac/</link>
      <guid>http://www.dustindiaz.com/maximize-on-a-mac/</guid>
      <category>IT</category>
      <pubDate>Wed, 16 Apr 2008 23:24:26 +0200</pubDate>
    </item>
    <item>
      <title>App Engine and Java</title>
      <description><![CDATA[<p>The world is now split into Python programmers, making funny 'Goo' noises over <a href="http://code.google.com/appengine/">App Engine</a>, and everyone else who are wondering when/if this will be available in their language or if they are going to have to change their spots.</p>

<p>Of all the languages to support, I guess Java must be one of the hardest because of the heavyweight runtime and the difficulty in separating code. But it also makes sense because supporting Java might give you quick access to Ruby/JavaScript/etc.</p>

<p>I have no knowledge of if Google are going to support Java in App Engine, however there are some tea-leaves that can be stretched and rearranged to form a vague picture.</p>

<p>Some time ago Google <a href="http://www.infoq.com/news/jsr-284-early-draft">hired Greg Czajkowski</a> the lead of <a href="http://research.sun.com/projects/barcelona/index.html">Project Barcelona</a> from Sun. Project Barcelona was where <a href="http://bitser.net/isolate-interest/">Isolates</a> (<a href="http://jcp.org/en/jsr/detail?id=121">JSR-121</a>) came from and the Resource Consumption API (<a href="http://jcp.org/en/jsr/detail?id=284">JSR 284</a>), both of which would help you do this sort of thing. And both of which are now in Final Draft stage.</p>

<p>I have no idea if this does mean that Google are working on App Engine for Java, but if they do I'm going to claim bragging rights for having <a href="http://getahead.org/blog/joe/2006/08/31/google_hosting_java_webapps_for_customers.html">blogged about this 18 months ago</a>.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/04/09/app_engine_and_java.html</link>
      <guid>http://getahead.org/blog/joe/2008/04/09/app_engine_and_java.html</guid>
      <category>IT</category>
      <pubDate>Wed, 09 Apr 2008 21:49:56 +0200</pubDate>
    </item>
    <item>
      <title>Naked &#x2018;08</title>
      <description><![CDATA[<p>The third annual <a href="http://naked.dustindiaz.com/">CSS Naked Day</a> is back in full swing. Sign ups have began for the event that will bring the web back to the nude on <strong>April 9th</strong>, 2008. Please take special note that the date is different (reason explained on the official site). If you want to sign up, please use the sign up form on the <a href="http://naked.dustindiaz.com/#signup">official website</a>.</p>
<p>As a reminder, CSS Naked Day is a world-wide event that lasts for one international day (48 hours) where webmasters around the globe strip CSS from their websites to promote Web Standards with layered semantic markup, and a clear separation between content, and presentation to enhance accessbility.</p>
<p>Cheers!</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=3rfkdz"><img src="http://feeds.feedburner.com/~a/WSwI?i=3rfkdz" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/naked-08/</link>
      <guid>http://www.dustindiaz.com/naked-08/</guid>
      <category>IT</category>
      <pubDate>Thu, 03 Apr 2008 21:37:31 +0200</pubDate>
    </item>
    <item>
      <title>Commercial Support for DWR</title>
      <description><![CDATA[<a href="http://sitepen.com/"><img src="http://getahead.org/images/sitepen-logo.png" align="right" style="margin:0px 10px" border="0" alt="sitepen logo"/></a>

<p>Short version: <a href="http://sitepen.com/services/support.php">Commercial support and development assistance</a> is <a href="http://www.sitepen.com/blog/2008/03/13/commercial-support-now-available-from-the-co-creators-and-contributors-of-the-dojo-toolkit-dwr-and-cometd/"/>now available</a> for <a href="http://getahead.org/dwr">DWR</a>.</p>

<p>Long version: <a href="http://sitepen.com/">SitePen</a> has been offering support packages for a while, but you've had to ask. But it's now an advertised service, if you want help with Dojo, DWR or Cometd, <a href="http://sitepen.com/services/support.php?packages">packages start from $995</a>. The <a href="http://getahead.org/dwr/support">DWR mailing lists</a> are not going away and is still going to be a good solution for many problems, but if you need a bit more care and attention, we can now do that too.</p>

<p>The team of people that I'm working with at SitePen are awesome. Aside from the obvious <a href="http://getahead.org/dwr">DWR</a>, <a href="http://dojotoolkit.org/">Dojo</a> and <a href="http://cometd.com/">Cometd</a> projects, SitePen people have also created <a href="http://turbogears.org/">TurboGears</a>, <a href="http://code.google.com/p/persevere-framework/">Persevere</a> and <a href="http://www.jspon.org/">JSPON</a>, are working specs for <a href="http://svn.xantus.org/shortbus/trunk/bayeux/bayeux.html">Bayeux</a>, <a href="http://www.json.com/json-schema-proposal/">JSON schema</a> and <a href="http://jcp.org/en/jsr/detail?id=315">Servlet 3.0</a>, and author <a href="http://www.json.com/">json.com</a> and <a href="http://cometdaily.com/">cometdaily.com</a>.</p>

<p>If you need to know more check-out <a href="http://sitepen.com/services/support.php">the summary over on the SitePen site</a>.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/03/14/commercial_support_for_dwr.html</link>
      <guid>http://getahead.org/blog/joe/2008/03/14/commercial_support_for_dwr.html</guid>
      <category>IT</category>
      <pubDate>Fri, 14 Mar 2008 12:25:36 +0100</pubDate>
    </item>
    <item>
      <title>Breakfast with Dustin 2008</title>
      <description><![CDATA[<p>This is your annual post to remind you SouthBy-goers in Texas that &#8220;Breakfast with Dustin&#8221; will continue on the final night at <a href="http://ihop.com">IHOP</a> which is just a <a href="http://maps.google.com/maps?f=d&#038;hl=en&#038;geocode=&#038;saddr=500+E+4th+St,+Austin,+TX&#038;daddr=707+E+Cesar+Chavez+St,+Austin,+TX,+US&#038;sll=37.424464,-122.197327&#038;sspn=0.010957,0.023518&#038;ie=UTF8&#038;z=17">half mile away from the conference center</a> beginning sometime around Tuesday at midnight ~ Wednesday 1am and surely to go on until about 4am for people looking for something to take up their time before their flight back home or just want to go to an &#8220;after the after the after-party.&#8221; This was once upon a time an event that I paid for, but now people find that paying six dollars for a few hot cakes, eggs, and orange is just fine coming out of their own pockets. I too, am fine with this. Nevertheless, <a href="http://www.flickr.com/search/?w=all&#038;q=dustinbreakfast&#038;m=text">let the tradition continue</a> and I hope to see some of you there.<br />
In the meantime, I will be <a href="http://twitter.com/ded">twittering</a> where I&#8217;m at and where I&#8217;m headed as well as posting to <a href="http://flickr.com/photos/polvero">flickr</a>. I&#8217;ve so far posted the <a href="http://www.flickr.com/search/?w=all&#038;q=dustinbreakfast&#038;m=text">Karaoke night at Buffalo Billiards</a>, the <a href="http://www.flickr.com/photos/polvero/sets/72157604079105861/">respect panel</a> with <a href="http://zeldman.com">Zeldman</a> moderating, and of course, <a href="http://www.flickr.com/photos/polvero/sets/72157604079157683/">the keynote</a> which was a conversation between <a href="http://www.henryjenkins.org/">Henry Jenkins</a> and <a href="http://www.stevenberlinjohnson.com/">Steven Johnson</a>.<br />
Cheers and see more of you later!</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=j3ow4N"><img src="http://feeds.feedburner.com/~a/WSwI?i=j3ow4N" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/breakfast-with-dustin-2008/</link>
      <guid>http://www.dustindiaz.com/breakfast-with-dustin-2008/</guid>
      <category>IT</category>
      <pubDate>Sun, 09 Mar 2008 17:39:39 +0100</pubDate>
    </item>
    <item>
      <title>IE8 Review</title>
      <description><![CDATA[<p>I've been playing with IE8 beta 1, and I've got some thoughts ...</p>

<p>In terms of user visible HTML rendering features, I think IE 8 beta 1 is possibly the biggest release of IE in nearly 11 years since April 1997 when IE 4.0 alpha 1 was released. <a href="http://en.wikipedia.org/wiki/History_of_Internet_Explorer">The history</a> shows mostly bug fixes, and chrome changes since then. Maybe transparent PNG or Bidi text are bigger than <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/DevelopersNew.htm">Activities</a>? It <a href="http://ajaxian.com/archives/medium-shows-off-new-ie-8-features">looks like</a> that's going to be the feature that most people talk about, so I'm going to talk about some of the other stuff. There are 3 big things I'm interested in, and a few smaller features:</p>

<h2>6 Connection Limit</h2>

<p>I've been testing the new 6 connection limit. It works perfectly in my testing, Without any cookie or window.name hacks, DWR can do reverse ajax using comet to more than 2 browser windows:</p>

<img src="http://getahead.org/images/ie8_connection_limit.png"/>

<h2>DOM Storage</h2>

<p>IE is way behind everyone else in implementing HTML5 features. So this is catching up to everyone else. It will be interesting to hear from the Dojo guys on this.</p>

<pre>
// sessionStorage also available
var store = window.globalStorage["http://www.example.com"];
store.setItem("key", "value");
var value = storage.getItem("key"); // == "value"
store.removeItem("key");
</pre>

<h2>JavaScript Debugger</h2>

<p>Firebug has been a stick that's been used to beat up IE for a while, and they've got an answer now. Unlike the other features, there isn't a screenshot in the release notes...</p>

<img src="http://getahead.org/images/ie8_debugger.png"/>

<p>Firebug is still much better, in my opinion so far. But this is certainly a huge step forward compared to fighting with Script [Editor|Debugger] or Visual WebDev.</p>

<h2>Acid 3</h2>

<div style="float:right;margin:10px;">
<script type="text/javascript"><!--
google_ad_client = "pub-1699539174292679";
google_ad_width = 250;
google_ad_height = 250;
google_ad_format = "250x250_as";
google_ad_type = "text_image";
//2006-10-31: high rank posts
google_ad_channel = "1218320012";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000000";
google_color_text = "555555";
google_color_url = "000066";
//--></script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<p>IE 8 does very badly on <a href="http://acid3.acidtests.org/">Acid 3</a> (17/100). However given that it's so new it's probably not fair to ding it too much. However it does need to improve big time:</p>

<ul>
<li>WebKit Nightly: 87%</li>
<li>Opera 9.5b: 64%</li>
<li>Firefox 3.0b3: 61%</li>
<li>IE 8b1: 17%</li>
</ul>

<p>For comparison, the released versions:</p>

<ul>
<li>Firefox 2.0.0.12: 50%</li>
<li>Opera 9.26: 46%</li>
<li>Safari 3.0.4: 39%</li>
<li>IE 7: 11%</li>
</ul>

<p>Given that they are innovating, I'm prepared to give them time to get the number up.</p>

<h2>URL Bar Goodness</h2>

<p>I didn't see this in the <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/NewFeatures.htm">release notes</a> anywhere. On Firefox I've got an add-on called <a href="https://addons.mozilla.org/en-US/firefox/addon/4014">LocationBar 2</a> that does some nice widgetry with the URL Bar:</p>

<img src="http://getahead.org/images/ie8_ff_urlbar.png"/>

<p>Well it looks like IE8 has something similar built in too:</p>

<img src="http://getahead.org/images/ie8_urlbar.png"/>

<h2>Cross-Domain XHR</h2>

<p>The standards are still evolving on this one, but somewhat annoyingly IE8 seems to be going in a different direction from everyone else:</p>

<pre>
var xdr = new XDomainRequest(); 
xdr.open("POST", "http://www.example.com/xdr.txt");
xdr.send("Data for post body");
</pre>

<h2>What is missing?</h2>

<p><strong>Lots</strong>. Still. No SVG/Canvas. No updates to the JScript implementation at a language level (it looks like there have been some performance increases though).</p>

<p>Let's not forget that Microsoft have more resources to get this right than almost anyone. If Opera can manage to create a first class browser, so should Microsoft.</p>

<h2>And Finally ...</h2>

<p>I loved the irony of the download recommendation. If you're downloading IE8, you might also like to download - IE6!:</p>

<img src="http://getahead.org/images/ie8_download_funny.png"/>]]></description>
      <link>http://getahead.org/blog/joe/2008/03/05/ie8_review.html</link>
      <guid>http://getahead.org/blog/joe/2008/03/05/ie8_review.html</guid>
      <category>IT</category>
      <pubDate>Wed, 05 Mar 2008 20:53:58 +0100</pubDate>
    </item>
    <item>
      <title>InfoQ Interview</title>
      <description><![CDATA[<p>InfoQ interviewed me, <a href="http://www.infoq.com/news/2008/03/dwr_3.0">and asked</a>:</p>

<ul>
<li>What are some of the major features planned for [DWR] version 3.0?</li>
<li>When is 3.0 slated for release? Is it still sometime in June?</li>
<li>What does the incremental release schedule look like before the final 3.0 release?</li>
<li>What are the top small features or fixes in 3.0 that a developer will be thankful for?</li>
<li>For someone who might have looked at DWR 2.0 and decided the time wasn't right, what might 3.0 provide to help "make the deal"?</li>
<li>What happened to 2.1, why the jump to 3.0?</li>
<li>What sort of impact will Tibco's role play in the future of DWR?</li>
<li>What are the next major milestones for DWR after 3.0?</li>
</ul>

<p style="float:right;"><a href="http://qcon.infoq.com/london/conference/"><img src="http://www.infoq.com/styles/i/qcon/qcon3_speaker11.jpg" style="border:0;"></a></p>

<p>InfoQ is <a href="http://www.infoq.com/about.jsp">built using DWR</a>, so it would be great if they could take advantage of features like automatic offline when 3.0 comes out.</p>

<p>Taking of things <strong>Q</strong>. Next week, I'm <a href="http://qcon.infoq.com/london/presentation/Interactive+websites%3A+Comet+and+DWR">talking on DWR and Comet</a> at <a href="http://qcon.infoq.com">QCon</a>.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/03/05/infoq_interview.html</link>
      <guid>http://getahead.org/blog/joe/2008/03/05/infoq_interview.html</guid>
      <category>IT</category>
      <pubDate>Wed, 05 Mar 2008 10:13:43 +0100</pubDate>
    </item>
    <item>
      <title>DWR + Aptana Jaxer</title>
      <description><![CDATA[<p>I've been working with the guys from <a href="http://www.aptana.com/">Aptana</a> for the past week or so on adapting <a href="http://getahead.org/dwr">DWR</a> to be a remoting layer for <a href="http://www.aptana.com/jaxer/">Jaxer</a>.</p>

<p style="float:right"><a href="http://www.aptana.com/jaxer/"><img src="http://getahead.org/images/jaxer-pageflow.png" alt="jaxer page flow" title="Jaxer" border="0"></a></p>

<p>Jaxer is a way to run JavaScript on the server. But it's not just JavaScript as an alternative to Java/Ruby/PHP/etc. Jaxer is Mozilla, on the server, with it's face ripped off and replaced by a snorkel to serialize the DOM to a web browser. <a href="http://ejohn.org/blog/server-side-javascript-with-jaxer/">John has a great introduction</a>, or there's the <a href="http://ajaxian.com/archives/audible-ajax-episode-24-aptana-jaxer-talk">podcast that Ajaxian did</a>.</p>

<p>The vision with DWR was always to say: We've got Javascript in the browser, and Java on the server - lets connect them in the best possible way. This leads to the migration of view logic from the server to the client. But it's not safe to move it all; Validation is part of view logic, but that needs to be done on the server. With Jaxer you can specify scripts to be <code>runat="server"</code> or <code>runat="both"</code> to allow validation or other logic to be run in both places.</p>

<p>Some of the changes that we've made to DWR will only help you if you are using DWR inside Jaxer, but others could be generally useful.</p>

<p>There are 2 basic changes. DWR on the Internet needs to make sure that the Internet only touches the code that you want it to touch. DWR in Jaxer doesn't have this problem because it's not accessible from the Internet, so we can do away with almost all configuration. Secondly latency inside a server-room is tiny compared with the net, which makes synchronous XHR viable.</p>

<p>So as it stands at the moment in development, you can use DWR inside Jaxer like this (clearly this is subject to change):</p>

<pre>
&lt;<span style='color:#800;'>script</span> <span style='color:#880;'>type</span>=<span style='color:#080;'>'text/javascript'</span> <span style='color:#880;'>runat</span>=<span style='color:#080;'>"server"</span>&gt;
Jaxer.dwr.pathToDwrServlet = <span style='color:#080;'>"http://localhost:8080/demoServer/dwr"</span>;
Jaxer.dwr.require(<span style='color:#080;'>"util"</span>, <span style='color:#080;'>"new/org.example.Demo"</span>);

<span style='color:#00A;'>function</span> loadServer() {
  <span style='color:#00A;'>var</span> data = Demo.getData();
  dwr.util.setValue(<span style='color:#080;'>'fillFromServer'</span>, data);
}
&lt;/<span style='color:#800;'>script</span>&gt;
</pre>

<p>There are a number of benefits that come out of this even if you're not using Jaxer:</p>
<ul>
<li>In dwr.xml you needed to specify javascript='ScriptName'. If (as is common) ScriptName == Class.getShortName then you can just drop the attribute, it will default properly.</li>
<li>Cross domain remoting is now automatically detected, and scriptTag remoting is used if needed.</li>
<li>There is a new init-param 'useAbsolutePaths' which might help people with trouble remapping DWR's location.</li>
<li>All URLs are now reconfigurable.</li>
<li>If you are using DWR in synchronous mode (which I don't recommend on the Internet) then you can use returned data in the normal way without needing a callback.</li>
</ul>]]></description>
      <link>http://getahead.org/blog/joe/2008/03/04/dwr_aptana_jaxer.html</link>
      <guid>http://getahead.org/blog/joe/2008/03/04/dwr_aptana_jaxer.html</guid>
      <category>IT</category>
      <pubDate>Tue, 04 Mar 2008 15:29:07 +0100</pubDate>
    </item>
    <item>
      <title>IWebMvc Preview</title>
      <description><![CDATA[<p>Jose Noheda has released a preview of a <a href="http://code.google.com/p/internna/">library that glues together</a> DWR, Dojo, Spring and Hibernate/JPA. It's a 0.1 release and he's <a href="http://internna.blogspot.com/2008/03/iwebmvc-first-preview-version-available.html">looking for feedback</a>.</p>

<img src="http://getahead.org/images/iwebmvc-screenshot.png"/>

<p>Despite the name, it's not really another Web MVC framework, but more along the lines of AppFuse or Grails, as a way to kick-start a project and provide some sensible defaults without needing to learn everything from scratch.</p>

<p>The source and release notes say it needs 1.6, so Mac heads will need to get the Apple Java6 preview.</p>

<p>Jose's aims:</p>

<p class="quote">In my mind what I really needed was a platform that:
<ul>
<li><b>Is based on Java</b>
<br>Although supporting Groovy / JRuby is a plus</li><li><b>Helps me to kick start a project</b>
<br>But simplifying the process by giving me the best (and this can be tricky) set of frameworks for each task</li><li><b>Integrates both server and client sides</b>
<br>And it's lightweight, robust and extensible. Read <i>enterprise quality</i>.</li>
<li><b>Supports all the common tasks a web app has to handle</b>
<br>I include here: User Management, CRUD operations, i18n support (both framework &amp; data), AJAX and astounding visuals</li>
</ul>
</p>

<p>Jose has done some brilliant work on DWR. He created a large chunk of our binary file support, and is currently the Spring integration maintainer, so it might be worth a <a href="http://code.google.com/p/internna/downloads/list">download</a> to see if it can help you.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/03/04/iwebmvc_preview.html</link>
      <guid>http://getahead.org/blog/joe/2008/03/04/iwebmvc_preview.html</guid>
      <category>IT</category>
      <pubDate>Tue, 04 Mar 2008 14:16:21 +0100</pubDate>
    </item>
    <item>
      <title>Randoms Log 1</title>
      <description><![CDATA[<p>It occurred to me that I&#8217;m a person who likes ramble. Lucky for you, I&#8217;ve kept that to a minimum here on this blog. On the other hand, this blog has been lacking some character lately so I thought I would incorporate a few ramblings into single posts every so often. Feel free to comment on any given ramble, or completely ignore them and wait until I post something worth your while. Cheers.</p>
<h3>Hair</h3>
<p>My hair appears to have reached a max-length. It&#8217;s grown <a href="http://www.flickr.com/photos/polvero/2283463634/">longer than I&#8217;ve ever really had it</a>. But now in the shower I&#8217;m starting to notice that hairs from my head seem to be clogging up the drain. I have a feeling I&#8217;m going to be losing my hair quicker than I think.</p>
<h3>Driving</h3>
<p>I can&#8217;t stand slow drivers. I understand folks driving moving vans or big rigs or it&#8217;s somehow obvious that you&#8217;ve got a motor problem where I can see smoke coming out of our hood. But besides those people, everyone should be driving fast. The speed limit should really be 85 MPH on all highways that are currently 65 MPH. And what&#8217;s with three lane roads that have 35 MPH speed limits. Have you ever driven that slow? Really, try it. It&#8217;s hard.</p>
<h3>Canadian Beer</h3>
<p>In all honesty, wasn&#8217;t as great as I thought it was going to be. After trying a dozen Hefeweizen beers in Vancouver, my conclusion is that America still makes better Hef&#8217;s (yes, even better than Belgium). People generally say American beer is crap, but it&#8217;s not true. It&#8217;s just that the only &#8220;American beer&#8221; people can think of is Budweiser, Miller, or Coors. Go out and try a <a href="http://widmerbrothers.com">Widmer Brother</a>, a Blue Moon, a Sierra Nevada, or a Gordon Bierch. You know what I&#8217;m talking about.</p>
<h3>The Portland Airport has free wifi</h3>
<p>I think all airports should have free wifi. <a href="http://googleblog.blogspot.com/2005/11/wi-fi-in-mountain-view.html">Just like the city of Mountain View</a>.</p>
<h3>Playing songs on repeat</h3>
<p>I am creature of the &#8220;repeat song&#8221; feature that media players include. When I hear a song I like, I play it to death; over and over and over again. I amaze myself though that even when I&#8217;ve played a song 50 times over, I still won&#8217;t know the words. It doesn&#8217;t mean I&#8217;m not listening, it just means I&#8217;m listening to their voices, not their words. I consider a song successful if I feel the way the artist had intended, even if I didn&#8217;t understand the words.</p>
<h3>Canon vs Nikon</h3>
<p>This age old debate still seems to populate forums and mailing lists. I personally shoot with Nikon, and I have my own reasons why that I&#8217;m not going to into. But really, if you&#8217;re one of those people that still complains about this, you&#8217;re not taking enough pictures. The only thing that Canon and Nikon users can both agree on, is that they&#8217;re both better than Sony and Pentax.</p>
<h3>Twitter</h3>
<p><a href="http://twitter.com/ded">I&#8217;ve been using Twitter</a> for almost a year now and it&#8217;s hard to say why I keep using it. There&#8217;s a funny paradox that runs across my mind every time I send a message to Twitter. You see, I do it as a personal benefit to myself. Like keeping a little journal of snippets of what I&#8217;m doing as I live. I figure that one day it will actually be interesting to go back and read. On the other hand, I keep my Twitters public and I have &#8220;friends&#8221; on Twitter. With that in mind I always think to myself &#8220;people are going to read this, so I should be clever.&#8221; Often times, that keeps me from twittering anything at all. Every twitter I make, I think it&#8217;s going to be the last; until I send another.</p>
<h3>Facebook</h3>
<p>Seriously. Still?</p>
<h3>Camping</h3>
<p>I have always said, and will always say &#8220;Camping without a camp fire is pointless.&#8221; If you didn&#8217;t have a camp fire, then you didn&#8217;t go camping. Period.</p>
<h3>Bike to work day</h3>
<p>About ten months ago it was Bike to work Day. Kind of like an Earth Day. You know, keep the car at home and pollute the earth a little less than you normally do. I took on this feat, however, I didn&#8217;t bike back home (I got a ride back). To this day, my bike has been <a href="http://www.flickr.com/photos/polvero/721097637/">sitting next to my desk</a>. Perhaps the next Bike to work Day that rolls around, I&#8217;ll return home with my bike.</p>
<h3>Sushi</h3>
<p>About a week ago <a href="http://www.flickr.com/photos/polvero/2287396079/">I tried Sushi</a> for the first time, probably ever, and it wasn&#8217;t bad.</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=CRnvdO"><img src="http://feeds.feedburner.com/~a/WSwI?i=CRnvdO" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/randoms-log-1/</link>
      <guid>http://www.dustindiaz.com/randoms-log-1/</guid>
      <category>IT</category>
      <pubDate>Sun, 02 Mar 2008 07:57:27 +0100</pubDate>
    </item>
    <item>
      <title>2 Wrongs Making a Right: (false &amp;&amp; false) = true</title>
      <description><![CDATA[<p>I just had one of those times when I thought I totally lost the ability to do simple logic. Take a look at this screenshot:</p>

<img src="http://getahead.org/images/firebug-bug.png"/>

<p>I'll break it down: <code>req.readyState = 4</code>, and <code>batch.async = false</code>.</p>

<p>Last time I checked <code>4 = 4</code>. So blatantly <code>(4 != 4)</code> is <code>false</code>. And <code>false && false</code> is blatantly <code>uber false</code>, as true as Alice Cooper covering Barbie Girl.</p>

<p>So seeing firebug step through <code>if (false)</code> and onto the return statement made about as much sense as trying to raise Schrodinger's cat in a séance.</p>

<p>I think it's another <a href="http://alex.dojotoolkit.org/?p=651">quirk in Firebug</a>. This time it's simply something funky going on with "step over".</p>

<p>The moral is: Firebug sometimes lies to you about where the current line is.</p>

<p>This is all part of me adapting DWR so that it can be used as a connector between <a href="http://www.aptana.com/jaxer">Jaxer</a> and some Java server. More on that in a bit.</p>]]></description>
      <link>http://getahead.org/blog/joe/2008/02/28/2_wrongs_making_a_right_false_false_true.html</link>
      <guid>http://getahead.org/blog/joe/2008/02/28/2_wrongs_making_a_right_false_false_true.html</guid>
      <category>IT</category>
      <pubDate>Fri, 29 Feb 2008 00:43:33 +0100</pubDate>
    </item>
    <item>
      <title>Photography</title>
      <description><![CDATA[<p>With all due respect, this site has mostly become a JavaScript weblog, but within the last two years I&#8217;ve really started to dive into photography. I own a Nikon <a href="http://www.google.com/search?q=nikon+D40">D40</a> and <a href="http://www.google.com/search?q=nikon+D300">D300</a> and read sites like <a href="http://kenrockwell.com">Ken Rockwell</a>. If you haven&#8217;t noticed, my <a href="http://www.flickr.com/photos/polvero/">Flickr stream</a> has almost reached five thousand photos. I&#8217;ve made it a regular habit to bring my camera everywhere I go. Yes, this includes <a href="http://www.flickr.com/search/?q=google&#038;m=tags&#038;w=38687875%40N00&#038;s=int">work</a> where I&#8217;ve been stopped on a few occasions by a security guard only to show them my badge that every photo I take is fairly legitimate. </p>
<p>Nevertheless, the point being is that I&#8217;ve been getting a bit more serious into photography which makes it slightly more complicated to maintain a JavaScript blog. I DO in fact maintain this blog on a daily basis. My <a href="http://delicious.com/polvero">delicious feed</a> is updated quite regularly, my <a href="http://www.dustindiaz.com/prototypes/">prototype submissions</a> seem to come in when people feel like submitting them, and of course my site pulls in my own flickr photos tagged <a href="http://www.flickr.com/photos/polvero/tags/dustindiazcom/">dustindiazcom</a>, effectively showing off my personal favs. However for those of you following my blog because of its original purpose, I apologize, the posts have really come to a minimum. If you haven&#8217;t done so already, take a gander at my <a href="http://dustindiaz.com/archives/">archives</a> or listen to some old <a href="http://feeds.feedburner.com/WSwIPodcasts">podcasts</a>, or perhaps if you&#8217;re motivated sit down and feast your eyes on a classic <a href="http://feeds.feedburner.com/WSwIScreencasts">screencast</a>.</p>
<h3>Back to the point</h3>
<p>So yeah, I&#8217;ve been walking around the planet capturing life with a little black machine in the palm of my hands known as a camera. If you&#8217;ve been enjoying what you&#8217;ve been seeing on Flickr, please do leave a comment. I&#8217;m sure most of you have added me as a friend by now. </p>
<h3>I&#8217;ve been reading</h3>
<p>Like I said before, I&#8217;ve been reading pretty much everything on <a href="http://kenrockwell.com">Rockwell</a> as well a few books that have caught my attention like <a href="http://www.amazon.com/Take-Your-Photography-Next-Level/dp/1933952210">Taking your photography to the next level</a> by George Barr and <a href="http://www.amazon.com/Designing-Photograph-Visual-Techniques-Photographs/dp/0817437789">Designing a photograph</a> by Bill Smith. Both books that go beyond the mechanics of a camera and talk about framing and composition more so than messing around with apertures, white balances, ISO&#8217;s, and megapixels. I leave the mechanics to Ken Rockwell since he&#8217;s one of the few nerds that actually goes into <a href="http://kenrockwell.com/tech/iso-comparisons/2007-10/index.htm">high ISO comparisons</a> (which by the way, is pretty cool too) but also believes that <a href="http://www.kenrockwell.com/tech/notcamera.htm">your camera doesn&#8217;t matter</a> (also true (but of course, my opinion as well)).</p>
<h3>Depth of Field</h3>
<p>Somehow I became a <a href="http://en.wikipedia.org/wiki/Depth_of_field">depth of field</a> junky and everything I captured had to do with the fine details. Take for example, this photo:</p>
<p><img src="http://farm2.static.flickr.com/1094/766076350_58fa53f6d3.jpg" alt="My favorite beer. A Hefeweizen" /></p>
<p>You can see my favorite beer (Hefeweizen) just coming into focus, which demonstrates a <em>shallow depth of field</em>. As a novice I thought the only way to achieve this was to buy a new lens that stops down with a low number (which is what I did). As it turns out, there&#8217;s three ways you can affect depth of field as learned through this <a href="http://smad.jmu.edu/dof/index2.html">interactive depth of field tutorial</a>. After knowing such knowledge I then grabbed one of my older lenses and started taking photographs that revealed close-up details like this maple leaf just by getting up close and zooming in close:</p>
<p><img src="http://farm3.static.flickr.com/2094/1751162889_b54f65f826.jpg?v=0" /></p>
<p><a href="http://www.flickr.com/search/?w=38687875%40N00&#038;q=bokeh&#038;m=text">I was instantly hooked</a> to this art-form known as &#8220;bokeh&#8221; disregarding good color or composition. I figured if it had good bokeh then it was instantly a good photograph.</p>
<h3>Good color</h3>
<p>Bokeh alone is not good enough, and getting good color is often difficult. To this day I still haven&#8217;t mastered the art of white balancing. I know only a little of the science behind it, but it&#8217;s hard to tell what&#8217;s going on inside my Nikon when I set it to auto mode vs. cloudy mode (which happens to make my photos look warmer (even when it&#8217;s not cloudy)). I&#8217;m also a sucker for saturated photos, but sadly enough, over-saturating your photos can make them look very amateurish. I know, I have a lot of bad over-saturated photos that I thought were cool. </p>
<h3>Good Composition</h3>
<p>This is where &#8220;your camera doesn&#8217;t matter&#8221; really comes into play. Composition is really either about capturing the moment or simply lining up angles. Simply centering is the natural instinct of every point-n-shooter. But I&#8217;ve found that throwing subjects to the side adds a nice dramatic effect to the composition. Take for instance this fire hydrant I shot near my usual parking spot at Google.</p>
<p><img src="http://farm3.static.flickr.com/2113/2214011458_4a6981851c.jpg?v=0" /></p>
<p>Centering the image would have boring, but throwing it slightly off-centered makes it feel <em>dramatic</em>. Who knows why, but don&#8217;t you feel it? It&#8217;s as if there was a disturbance in the force and you can see it visually.</p>
<h3>Making the perfect photograph</h3>
<p>To this day I don&#8217;t know what makes the perfect photograph. It is of course an art form just like paintings or music. Art is in the eye of the beholder. But try locking yourself in a small room and take five hundred pictures. Surely you&#8217;re going to come out with a picture that is better than one of the other ones. </p>
<h3>Photography is like JavaScript</h3>
<p>As if you didn&#8217;t know it was coming to this. But let me be the first to put it into words. Photography is like JavaScript, and JavaScript is like photography. They are both expressive and beautiful. They can be done bad or good. They are both load and go. Pick up a camera and start shooting or simply grab a code editor, write code, and load it into a browser. Both are fun to compose. Both can view things from several angles. Both can detailed and complicated. Both can be simple. They are both <strong>object-oriented</strong>.</p>
<h3>Conclusion</h3>
<p>There is no conclusion. I will keep taking photos, capturing life as I see it. This was more or less an excuse to blog about something since I haven&#8217;t done so in over a month. I hope you&#8217;ve found it entertaining in the meantime.</p>
<p>Sincerely,<br />
Your Blogmaster<br />
<img src="http://farm3.static.flickr.com/2325/2276410800_1c7ed99649.jpg?v=0" /></p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=gkn8S6"><img src="http://feeds.feedburner.com/~a/WSwI?i=gkn8S6" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/photography/</link>
      <guid>http://www.dustindiaz.com/photography/</guid>
      <category>IT</category>
      <pubDate>Tue, 19 Feb 2008 10:29:17 +0100</pubDate>
    </item>
    <item>
      <title>Add and Remove Elements with JavaScript (reprise)</title>
      <description><![CDATA[<p>A long time ago (February 28th, 2005 to be exact), I wrote a post titled <a href="http://www.dustindiaz.com/add-and-remove-html-elements-dynamically-with-javascript/">Add and Remove HTML elements dynamically with JavaScript</a>. To this day, it continues to be the most highly traffic page on my website. However there is a number of things I&#8217;d like to point out that we can improve upon that implementation (since it is very outdated), and for the record, retract my three year old statement where I said &#8220;I hate JavaScript.&#8221; That simply isn&#8217;t true anymore, and it hasn&#8217;t been true for a while now. Nevertheless, let&#8217;s move onto business. Here&#8217;s how you can simply add and remove HTML elements.</p>
<h3>The basics</h3>
<p>When it comes down right to it, the bottom line is this. You need three ingredients. Event attachment; the ability create and append elements, and the ability to remove them. For example:</p>
<h3 class="code">attach event / add / remove</h3>
<pre><code>* element.addEventListener(el, type, fn);
* parent.appendChild(element);
* parent.removeChild(element);</code></pre>
<p>Yeah. That&#8217;s it. But this wouldn&#8217;t be much of a post if there wasn&#8217;t a demonstration of how to wrap this up in a easy to use interface. For this basic task, consider using two singleton&#8217;s as a skeleton to act as your API which will appropriately wrap your Dom object, and an Event object.</p>
<h3 class="code">Dom and Event</h3>
<pre><code>var Dom = {
  get: function(el) { },
  add: function(el, dest) { },
  remove: function(el)
};

Event = {
  add: function(el, type, fn) { }
};</code></pre>
<p>Your implementation code can live in a closure wrapper when we add this behavior to the window&#8217;s &#8216;load&#8217; event.</p>
<h3 class="code">implementation</h3>
<pre><code>Event.add(window, 'load', function() {
  // enclosed implementation here
});</code></pre>
<h3>Filling in the gaps</h3>
<p>We can now essentially drop in our interface to do our heavy lifting.</p>
<h3 class="code">Interface</h3>
<pre><code>var Dom = {
  get: function(el) {
    if (typeof el === 'string') {
      return document.getElementById(el);
    } else {
      return el;
    }
  },
  add: function(el, dest) {
    var el = this.get(el);
    var dest = this.get(dest);
    dest.appendChild(el);
  },
  remove: function(el) {
    var el = this.get(el);
    el.parentNode.removeChild(el);
  }
  };
  var Event = {
  add: function() {
    if (window.addEventListener) {
      return function(el, type, fn) {
        Dom.get(el).addEventListener(type, fn, false);
      };
    } else if (window.attachEvent) {
      return function(el, type, fn) {
        var f = function() {
          fn.call(Dom.get(el), window.event);
        };
        Dom.get(el).attachEvent('on' + type, f);
      };
    }
  }()
 };</code></pre>
<p>Then simply use it to our convenience.</p>
<h3 class="code">implementation</h3>
<pre><code>Event.add(window, 'load', function() {
  var i = 0;
  Event.add('add-element', 'click', function() {
    var el = document.createElement('p');
    el.innerHTML = 'Remove This Element (' + ++i + ')';
    Dom.add(el, 'content');
    Event.add(el, 'click', function(e) {
      Dom.remove(this);
    });
  });
});</code></pre>
<p>You now have something that&#8217;s easy as Pie! <a href="http://www.dustindiaz.com/basement/add-remove.html">View the demonstration</a>. Cheers and happy new year!</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=w6XI5g"><img src="http://feeds.feedburner.com/~a/WSwI?i=w6XI5g" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/add-remove-elements-reprise/</link>
      <guid>http://www.dustindiaz.com/add-remove-elements-reprise/</guid>
      <category>IT</category>
      <pubDate>Thu, 03 Jan 2008 01:42:13 +0100</pubDate>
    </item>
    <item>
      <title>JS Design Patterns Sample Chapter available on YUI Blog</title>
      <description><![CDATA[<p>Right now chapter nine of our book <a href="http://jsdesignpatterns.com">Pro JavaScript Design Patterns</a> is available on the YUI Blog, <a href="http://yuiblog.com/blog/2007/12/17/projsdesignpatterns/">The Flyweight Pattern</a>. Go ahead and have a look see and check it out. Feel free to leave comments on the YUI Blog website.</p>

<p><a href="http://feeds.feedburner.com/~a/WSwI?a=X4tML9"><img src="http://feeds.feedburner.com/~a/WSwI?i=X4tML9" border="0"></img></a></p>]]></description>
      <link>http://www.dustindiaz.com/js-design-pattern-sample-chapter/</link>
      <guid>http://www.dustindiaz.com/js-design-pattern-sample-chapter/</guid>
      <category>IT</category>
      <pubDate>Mon, 17 Dec 2007 21:01:38 +0100</pubDate>
    </item>
    <item>
      <title>L'Open Source alla conquista dei Social Networks</title>
      <description><![CDATA[In questi giorni si viene a sapere che sia Facebook sia MySpace stanno aprendosi al mondo del software libero. Un'analisi sulle motivazioni di una tale scelta sembra doverosa per noi di Job, e per la comunitŕ del software libero nel suo complesso.]]></description>
      <link>http://www.javaopenbusiness.it:80/JobEditorial/newsCategoryViewProcess.jsp?editorialID=7041</link>
      <guid>http://www.javaopenbusiness.it:80/JobEditorial/newsCategoryViewProcess.jsp?editorialID=7041</guid>
      <category>IT</category>
      <pubDate>Fri, 01 Dec 2000 00:00:00 +0100</pubDate>
    </item>
  </channel>
</rss>


