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

<channel>
	<title>Pathfinder Development &#187; Dietrich Kappe</title>
	<atom:link href="http://www.pathf.com/blogs/author/dietrich-kappe/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pathf.com/blogs</link>
	<description>Running commentary about agile development, user experience design and Ajax.</description>
	<pubDate>Wed, 19 Nov 2008 15:24:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>GWT, Gadgets and OpenSocial, Part 2</title>
		<link>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/</link>
		<comments>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 23:15:03 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Google Gadgets]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[iGoogle]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1262</guid>
		<description><![CDATA[Note: It is assumed that you know your way around GWT and Eclipse for purposes of this tutorial.
While developing OpenSocial applications can be a bit tricky, getting set up to develop can be a real pain in the neck. For this installment of OpenSocial and GWT, I'm going to go through the basics of setting [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.pathf.com/blogs/wp-content/uploads/2008/11/hellogadget.png'><img src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/hellogadget.png" alt="" title="hellogadget" width="300" height="286" class="alignright size-medium wp-image-1264" style="float:right;padding:10px" /></a><strong>Note:</strong> It is assumed that you know your way around GWT and Eclipse for purposes of this tutorial.</p>
<p>While developing OpenSocial applications can be a bit tricky, getting set up to develop can be a real pain in the neck. For this installment of OpenSocial and GWT, I'm going to go through the basics of setting up a simple Hello World gadget with iGoogle. We'll get into the details of signing up for other OpenSocial containers, testing, and so on, later. Right now we're just going to do the basics.</p>
<p>So, what do you need to build a Google Gadget with GWT for iGoogle? You need the following:</p>
<ol>
<li> The <a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a></li>
<li>The <a href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=GadgetsGettingStarted" target="_blank">GWT Google Gadget API</a></li>
<li>An account on <a href="http://www.google.com/ig" target="_blank">iGoogle</a></li>
<li>Access to the <a href="http://www.google.com/ig/sandbox" target="_blank">iGoogle sandbox</a></li>
<li>Some public server space so you can serve up your gadget to iGoogle</li>
</ol>
<p><span id="more-1262"></span></p>
<p>Pretty much everything else is self explanatory, but the sandbox can be a little bit confusing. Let's talk a little bit about the iGoogle sandbox. It's an experimental space where you can test things out without polluting your regular iGoogle account. Eventually you'll want several accounts in order to test. But every journey starts with a single step.</p>
<p>First, you need to sign up for iGoogle. I'll assume this isn't your first rodeo and you've done this before. Once you've got your iGoogle access, you'll want to go over to <a href="http://code.google.com/apis/igoogle/docs/gs.html" target="_blank">this page</a> to sign up for the developer sandbox and add the developer tools to your space.</p>
<p>When developing, make sure that there's a message towards the top left of the page that says "Welcome to the iGoogle Developer sandbox." If you don't see that message, you're not in the sandbox. If you have to, navigate to <a href="http://www.google.com/ig/sandbox" target="_blank">http://www.google.com/ig/sandbox</a>. You may have to "sign up" again to drop into the sandbox.</p>
<p>Once there, you can add those developer tools. Just clicking <a href="http://www.google.com/ig/sharetab?atr=Developer%20Tools&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/107532026754505494237/updates.xml&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/105542374478112771668/sandbox-friends.xml&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/107532026754505494237/sandboxProfileEditor.xml&amp;n_32=url%3Ddeveloper.xml" target="_blank">this link</a> will get you started.</p>
<p>The developer widgets are:</p>
<ul>
<li>My Gadgets: let's you set inlining and caching on the Gadgets on your page from a handy interface</li>
<li>Sandbox Profile Editor: let's you modify your profile in the sandbox so you can test a few things out.</li>
<li>Sadbox Friends: lets you view and edit who your friends are. Important for OpenSocial applications.</li>
<li>Updates:shows activities posted to your friends while interacting with the gadget.</li>
</ul>
<p><strong>The Hello World Gadget</strong></p>
<p>In this part we're not doing anything OpenSocial related. We're just setting up a Google Gadget. That's a necessary first step for the OpenSocial stuff.</p>
<p>Let's get started. In my example I'll be working in <code>~/src/HelloGadget</code>. Create a <code>lib</code> directory and put the <code>gwt-gadgets.jar</code> library file from the GWT Gadgets API project in it. Next, we run the GWT <code>projectCreator</code> to create our ant and Eclipse files:</p>
<pre>./projectCreator -ant HelloGadget -eclipse HelloGadget -out ~/src/HelloGadget/ -addToClassPath ~/src/HelloGadget/lib/gwt-gadgets.jar
Created directory /Users/dkappe/src/HelloGadget/src
Created directory /Users/dkappe/src/HelloGadget/test
Created file /Users/dkappe/src/HelloGadget/HelloGadget.ant.xml
Created file /Users/dkappe/src/HelloGadget/.project
Created file /Users/dkappe/src/HelloGadget/.classpath</pre>
<p>Now we create a simple sample application using the <code>applicationCreator</code> tool:</p>
<pre>./applicationCreator -eclipse HelloGadget -out ~/src/HelloGadget/ -addToClassPath ~/src/HelloGadget/lib/gwt-gadgets.jar com.pathf.demo.app.gwt.client.HelloGadget
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/client
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/HelloGadget.gwt.xml
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public/HelloGadget.html
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public/HelloGadget.css
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/client/HelloGadget.java
Created file /Users/dkappe/src/HelloGadget/HelloGadget.launch
Created file /Users/dkappe/src/HelloGadget/HelloGadget-shell
Created file /Users/dkappe/src/HelloGadget/HelloGadget-compile</pre>
<p>You now have a nice little application that you can run using the hosted mode script <code>HelloGadget-shell</code> in the <code>src/HelloGadget</code> directory. Congratulations, you have a sample GWT application.</p>
<p>But we want a Google Gadget. In order to make it a gadget, we have to change the code a bit. First, import the project into Eclipse. Then open the <code>HelloGadget.gwt.xml</code> and add the following inherit statement.</p>
<pre class="xml"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Other module inherits                                      --&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Inherit Google Gadgets API --&gt;</span></span>
	  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;inherits</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;com.google.gwt.gadgets.Gadgets&quot;</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></pre>
<p>Now let's open up the <code>HelloGadget.java</code> file. We're going to change it around a bit so it can be a gadget. The critical part of the original looks like this.</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloGadget <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/**
   * This is the entry point method.
   */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onModuleLoad<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></pre>
<p>We change our class to extend <code>Gadget</code> and change the <code>onModuleLoad</code> method to <code>init</code>.</p>
<pre class="java5">@ModulePrefs<span style="color: #66cc66;">&#40;</span>title = <span style="color: #ff0000;">&quot;HelloGadget&quot;</span>, author = <span style="color: #ff0000;">&quot;Dietrich Kappe&quot;</span>, author_email = <span style="color: #ff0000;">&quot;dkappe@gmail.com&quot;</span>, height = <span style="color: #cc66cc;">300</span>, description = <span style="color: #ff0000;">&quot;A simple gadget.&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloGadget <span style="color: #000000; font-weight: bold;">extends</span> Gadget&lt;UserPreferences&gt; <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * This is the entry point method.
	 */</span>
	@<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html"><span style="color: #aaaadd; font-weight: bold;">Override</span></a>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">void</span> init<span style="color: #66cc66;">&#40;</span>UserPreferences preferences<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></pre>
<p>You have to also import the following three classes:</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">Gadget</span>;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">UserPreferences</span>;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">Gadget</span>.<span style="color: #006600;">ModulePrefs</span>;</pre>
<p><strong>Running the Darned Thing</strong></p>
<p>Done! Well, not quite. While changing the <code>EntryPoint</code> to a <code>Gadget</code> was pretty straightforward, we now need a container to run the thing. Mind you, it will still run in it's current form in hosted mode, but all of those things it's expecting from iGoogle are not going to happen. So it's time to inject it into iGoogle.</p>
<p>Go ahead and compile the code using the shell command <code>HelloGadget-compile</code>. The resulting compiled JavaScript and sundries is under the <code>www</code> directory in your projects home. If you take a look, you'll see a new file that you likely haven't seen before, namely <code>com.pathf.demo.app.gwt.client.HelloGadget.gadget.xml</code>. This is the gadget manifest. Essentially, this is what your gadget container needs to load to display the app. Many of the parameters are set by the parameters to the <code>@ModulePrefs</code> annotation.</p>
<p>Bundle this app up and upload it to your publicly available server. In my case, I've uploaded the app <a href="http://www.pathf.com/sites/pfd/test/HelloGadget/com.pathf.demo.app.gwt.client.HelloGadget.gadget.xml">here</a>. This is the link to the XML file. You can now go to the sandbox and, using the My Gadgets gadget, add it to your sandbox.</p>
<p><a href='http://www.pathf.com/blogs/wp-content/uploads/2008/11/mygadgets.png'><img src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/mygadgets.png" alt="" title="mygadgets" width="300" height="230" class="alignnone size-medium wp-image-1265" /></a></p>
<p>You can tweak some of the settings having to do with caching of he Gadget resources with the MyGadgets gadgets, but more on that later. Next time we'll set up our simple Gadget in various other containers and perform something a little bit more useful with it (but only a little).</p>
<p>As always, comments and questions are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Hidden Power of Canvas</title>
		<link>http://www.pathf.com/blogs/2008/11/the-hidden-power-of-canvas/</link>
		<comments>http://www.pathf.com/blogs/2008/11/the-hidden-power-of-canvas/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 04:19:54 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Canvas]]></category>

		<category><![CDATA[DHTML]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1257</guid>
		<description><![CDATA[Whenever we have Flash versus DHTML discussions in the office, someone usually utters the words "you probably can't do it, unless you used Canvas and some fancy JavaScript..."
At times that can seem like a cop out, an admission of defeat in the face of the Flash arsenal of graphic effects. Somtimes, like today, it seems [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;padding:10px" src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/projective-transform.png" alt="Projective Transform" />Whenever we have Flash versus DHTML discussions in the office, someone usually utters the words "you probably can't do it, unless you used Canvas and some fancy JavaScript..."</p>
<p>At times that can seem like a cop out, an admission of defeat in the face of the Flash arsenal of graphic effects. Somtimes, like today, it seems more like a visionary declaration of the power of Canvas. Check out <a href="http://acko.net/blog/projective-texturing-with-canvas" target="_blank">Steven Wittens'</a> use of <a href="http://ajaxian.com/archives/projective-texturing-using-canvas" target="_blank">Canvas for projective texturing</a>. Maybe there is a little bit more coolness left in these Ajax bones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/11/the-hidden-power-of-canvas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Chess Game Viewer in GWT</title>
		<link>http://www.pathf.com/blogs/2008/11/chess-game-viewer-in-gwt/</link>
		<comments>http://www.pathf.com/blogs/2008/11/chess-game-viewer-in-gwt/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 23:14:35 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[chess]]></category>

		<category><![CDATA[Chesspresso]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[PGN]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1255</guid>
		<description><![CDATA[It's not quite done (the game notation looks like crap in IE), but I thought I'd give a taste of my latest labor of love, a chess game viewer in GWT. This is the sort of thing that is usually implemented as a Java Applet. A few others have already built chess viewers in GWT, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/11/chessviewer.png"><img class="alignnone size-medium wp-image-1256" style="float:right;padding:10px" title="chessviewer" src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/chessviewer.png" alt="" width="300" height="177" /></a>It's not quite done (the game notation looks like crap in IE), but I thought I'd give a taste of my latest labor of love, a <a href="http://www.pathf.com/sites/pfd/test/ChessBoard/" target="_blank">chess game viewer in GWT</a>. This is the sort of thing that is usually implemented as a Java Applet. A few others have already built chess viewers in GWT, but as they say in Full Metal Jacket, "this one is mine." <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>As I blogged <a href="http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/" target="_blank">a few weeks ago</a>, I ported the Java chess library <a href="http://www.chesspresso.org/" target="_blank">ChessPresso</a> into GWT, which was a blast and an example of how you can leverage existing Java libraries to write browser-based apps.</p>
<p>In the example, I've pulled the eleven games of the recently completed world championship between Anand and Kramnik in a single page. The GWT app identifies all of the relevant tags, reads the PGN (Portable Game Notation) in those tags, then inserts a game viewer widget into the page.</p>
<p>What isn't working yet:</p>
<ul>
<li>Doesn't look so good in IE (a little CSS work)</li>
<li>The notation pane isn't hooked in so you can click on a move and jump to the position</li>
</ul>
<p>Anyhow, have a look and let me know what you think.</p>
<p><strong>Update:</strong> OK, the notation panel is hooked up to allow clicking on moves to navigate aroung the game. Still looks like crap in IE, though.</p>
<p><strong>Update:</strong> for those interested in some of my very few games that make me look good, see <a href="http://www.pathf.com/sites/pfd/test/ChessBoard/dkappe.html" target="_blank">here</a>.</p>
<p><strong>Update:</strong> Another set of tweaks to display a collection of games, one 41 games PGN chunk and a 250 or so chunk. See <a href="http://www.pathf.com/sites/pfd/test/ChessBoard/other.html" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/11/chess-game-viewer-in-gwt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Everything&#8217;s Coming Up Windows</title>
		<link>http://www.pathf.com/blogs/2008/10/everythings-coming-up-windows/</link>
		<comments>http://www.pathf.com/blogs/2008/10/everythings-coming-up-windows/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 00:07:28 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Disruption]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[Azure]]></category>

		<category><![CDATA[Cloud Computing]]></category>

		<category><![CDATA[EC2]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1226</guid>
		<description><![CDATA[I've been beating the drum of cloud computing and the advantage that it gives to companies building solutions on Linux. Microsoft needed to respond. Well, now we have two solutions for Windows on demand:

Amazon EC2 is offering Windows on EC2, with the pricing at $0.125 per hour for a small instance running Windows Server (as [...]]]></description>
			<content:encoded><![CDATA[<p>I've been beating the <a href="http://www.pathf.com/blogs/2008/05/agile-business/" target="_blank">drum of cloud computing</a> and the advantage that it gives to companies building solutions on Linux. Microsoft needed to <a href="http://www.pathf.com/blogs/2008/10/microsoft-to-jump-on-board-ec2/" target="_blank">respond</a>. Well, now we have two solutions for Windows on demand:</p>
<ul>
<li>Amazon EC2 is offering <a href="http://aws.amazon.com/ec2/" target="_blank">Windows on EC2</a>, with the pricing at $0.125 per hour for a small instance running Windows Server (as compared to $0.10 for a Linux instance). You can run SQL Server Express at no extra charge. The SQL Server Standard smallest instance (Stadard Large) rings in at $1.10 per hour, however, which ain't such a good deal.</li>
<li>Microsoft's <a href="http://www.microsoft.com/azure/default.mspx" target="_blank">Azure Services Platform</a>. It's still in community evaluation mode, but there is one thing that is already clear about it: it's as confusing as all git out. One of the advantages of Amazon's services like S3 and EC2 is that they are simple and can form the building blocks for other applications and services.</li>
</ul>
<p>If I'm provisioning a web application, I'm pretty comfortable thinking in terms of virtual servers or instances. Not sure how to think about scaling and cost with Azure. I think MS would have done better to start out with a KISS approach to drive adoption. Time will tell if their "it can cure cancer" approach will work out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/everythings-coming-up-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GWT, Gadgets and OpenSocial</title>
		<link>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/</link>
		<comments>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 22:26:48 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Google Gadgets]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1219</guid>
		<description><![CDATA[I've been developing with GWT, OpenSocial and Orkut, using the gwt-google-apis project on Google Code (specifically the gadgets subproject). It's a nice enough api that makes it relatively painless to build gadgets in GWT.
This is a bit different from Didier's gOpenSocial library, which was an early success at building OpenSocial gadgets with GWT. But the [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.opensocial.org/_/rsrc/1206063575764/config/app/images/customLogo/customLogo.gif?revision=7' alt='' style="float:right; padding:10px" />I've been developing with GWT, <a href="http://code.google.com/apis/opensocial/" target="_blank">OpenSocial</a> and <a href="http://www.orkut.com/" target="_blank">Orkut</a>, using the <a href="http://code.google.com/p/gwt-google-apis/" target="_blank">gwt-google-apis</a> project on Google Code (specifically the gadgets subproject). It's a nice enough api that makes it relatively painless to build gadgets in GWT.</p>
<p>This is a bit different from <a href="http://code.google.com/p/gopensocial/" target="_blank">Didier's gOpenSocial library</a>, which was an early success at building OpenSocial gadgets with GWT. But the google gadget library isn't really quite ready for OpenSocial. I've skinned my knee here and there, so I thought I'd give others the benefit of my experience.</p>
<p>So, first thing, how the heck do I get GWT to generate the</p>
<pre class="xml">&nbsp;
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Require</span> <span style="color: #000066;">feature</span>=<span style="color: #ff0000;">&quot;opensocial-0.7&quot;</span> <span style="font-weight: bold; color: black;">/&gt;</span></span>
&nbsp;</pre>
<p>line into my manifest?</p>
<p><span id="more-1219"></span><br />
Is it a parameter to the <code>@ModulePrefs</code> annotation? No. It's not. The way the GWT gadgets API deals with required features is by defining an interface that the Gadget class then implements.</p>
<pre class="java5">&nbsp;
<span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006600;">pathf</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">simplegadget</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">api</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">GadgetFeature</span>.<span style="color: #006600;">FeatureName</span>;
&nbsp;
@FeatureName<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;opensocial-0.7&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> OpenSocial <span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">void</span> initializeFeature<span style="color: #66cc66;">&#40;</span>OpenSocialFeature feature<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>The feature itself extends <cdoe>com.google.gwt.gadgets.client.GadgetFeature</code> and looks like this.</p>
<pre class="java5">&nbsp;
<span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006600;">pathf</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">simplegadget</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">api</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">GadgetFeature</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> OpenSocialFeature <span style="color: #000000; font-weight: bold;">implements</span> GadgetFeature <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> OpenSocialFeature<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>The class declaration for my simple gadget then looks something like this:</p>
<pre class="java5">&nbsp;
@ModulePrefs<span style="color: #66cc66;">&#40;</span>title = <span style="color: #ff0000;">&quot;SimpleGadget&quot;</span>, author = <span style="color: #ff0000;">&quot;Me&quot;</span>, author_email = <span style="color: #ff0000;">&quot;me@gmail.com&quot;</span>, height = <span style="color: #cc66cc;">300</span>, description = <span style="color: #ff0000;">&quot;A simple gadget.&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SimpleGadget <span style="color: #000000; font-weight: bold;">extends</span> Gadget&lt;UserPreferences&gt; <span style="color: #000000; font-weight: bold;">implements</span> OpenSocial <span style="color: #66cc66;">&#123;</span>
&nbsp;</pre>
<p>There are some drawbacks to this particular approach, specifically that the version of OpenSocial is hardcoded into the interface. Future versions of the GWT gadgets API should probably approach this in a different way.</p>
<p>Anyhow, I hope I've saved some folks the trouble of figuring out how to write the OpenSocial requires into the manifest. I'll show how to overcome a few of the other stumbling blocks on the way to building a full featured OpenSocial gadget.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JSONWrapper now on Google Code</title>
		<link>http://www.pathf.com/blogs/2008/10/jsonwrapper-now-on-google-code/</link>
		<comments>http://www.pathf.com/blogs/2008/10/jsonwrapper-now-on-google-code/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 17:23:33 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1214</guid>
		<description><![CDATA[The JSON utility library for GWT that I blogged about last week is now up on google code.
To recap, the idea is that you can write code like this
&#160;
JSONValue root = JSONParser.parse&#40;json&#41;;
JSONWrapper obj = new JSONWrapper&#40;root&#41;;
String result = obj.get&#40;&#34;map&#34;&#41;.get&#40;1&#41;.stringValue&#40;&#41;;
&#160;
when dealing with JSONValue objects.
As it's only one class, you could just include it in your source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png"><img class="alignright size-full wp-image-952" style="float: right;" title="gwt" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png" alt="" width="130" height="125" /></a>The <a href="http://www.pathf.com/blogs/2008/10/making-gwt-json-not-quite-so-painful/" target="_blank">JSON utility library for GWT</a> that I blogged about last week is now up on <a href="http://code.google.com/p/gwt-jsonwrapper/" target="_blank">google code</a>.</p>
<p>To recap, the idea is that you can write code like this</p>
<pre class="java5">&nbsp;
JSONValue root = JSONParser.<span style="color: #006600;">parse</span><span style="color: #66cc66;">&#40;</span>json<span style="color: #66cc66;">&#41;</span>;
JSONWrapper obj = <span style="color: #000000; font-weight: bold;">new</span> JSONWrapper<span style="color: #66cc66;">&#40;</span>root<span style="color: #66cc66;">&#41;</span>;
<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"><span style="color: #aaaadd; font-weight: bold;">String</span></a> result = obj.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;map&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">stringValue</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>when dealing with <code>JSONValue</code> objects.</p>
<p>As it's only one class, you could just include it in your source tree as code instead of using the jar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/jsonwrapper-now-on-google-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Making GWT JSON not Quite so Painful</title>
		<link>http://www.pathf.com/blogs/2008/10/making-gwt-json-not-quite-so-painful/</link>
		<comments>http://www.pathf.com/blogs/2008/10/making-gwt-json-not-quite-so-painful/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 22:25:41 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1189</guid>
		<description><![CDATA[I've been using GWT to resurface interfaces of a variety of legacy applications -- J2EE, PHP, Rails -- and more often than not that means working with JSON returned from the server. One thing that I've found is that GWT's JSON support is kind of chatty. That is, you have to write a bunch of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png"><img class="alignright size-full wp-image-952" style="float: right;" title="gwt" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png" alt="" width="130" height="125" /></a>I've been using GWT to resurface interfaces of a variety of legacy applications -- J2EE, PHP, Rails -- and more often than not that means working with JSON returned from the server. One thing that I've found is that GWT's JSON support is kind of chatty. That is, you have to write a bunch of code like this:</p>
<pre class="java5">JSONValue root = JSONParser.<span style="color: #006600;">parse</span><span style="color: #66cc66;">&#40;</span>json<span style="color: #66cc66;">&#41;</span>;
JSONObject obj = root.<span style="color: #006600;">isObject</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>obj != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    JSONValue map = obj.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;map&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>map != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        JSONArray arr = map.<span style="color: #006600;">isArray</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>arr != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>arr.<span style="color: #006600;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> &gt; <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                JSONValue strval = arr.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
                <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>strval != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                    JSONString str = strval.<span style="color: #006600;">isString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
                    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>str != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                        <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"><span style="color: #aaaadd; font-weight: bold;">String</span></a> s = str.<span style="color: #006600;">stringValue</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
                        <span style="color: #808080; font-style: italic;">// do something with the string</span>
                    <span style="color: #66cc66;">&#125;</span>
                <span style="color: #66cc66;">&#125;</span>
            <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>Yikes! Just to get the string in the second array item in the "map" key of the top level object. Truth is, most of the JSON I'm getting back is fairly predictable. And if it's not in that predictable form, it's an error that the client code can't recover from. I'd like to be able to write something like <code>String result = obj.get("map").get(1).stringValue()</code> without having to worry about <code>NullPointerException</code>'s cropping up all over the place.</p>
<p><span id="more-1189"></span></p>
<p>One option is to do what other developers have done, which is to use JNSI to roll out own JSON handling code. But that defeats the purpose of a framework like GWT. I'd rather leverage what's already there than come up with my own code which I'll then have to support.</p>
<p>So I've written up a little helper class called <code>JSONWrapper</code> that lets you do the above style code. It's pretty simple. As it's name suggests, it wraps a <code>JSONValue</code> object and lets you perform selections on it that return other <code>JSONWrapper</code> objects. Thus you can string together the method calls with method chaining (ala JQuery).</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JSONWrapper <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> JSONValue value;
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> JSONWrapper<span style="color: #66cc66;">&#40;</span>JSONValue value<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">value</span> = value;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> JSONValue getValue<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> value;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> JSONWrapper NULL = <span style="color: #000000; font-weight: bold;">new</span> JSONWrapper<span style="color: #66cc66;">&#40;</span><span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">boolean</span> isValid<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>value != <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>If at any point a request results in an invalid value, such as requesting an array index from a non-array, we return a <code>JSONWrapper</code> with <code>null</code> as its value. We reuse the <code>NULL</code> constant to save on some memory.</p>
<pre class="java5">    <span style="color: #000000; font-weight: bold;">public</span> JSONWrapper get<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> index<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>index &lt; <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> NULL;
        <span style="color: #66cc66;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>value == <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> NULL;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        JSONArray arr = value.<span style="color: #006600;">isArray</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>arr == <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> NULL;
        <span style="color: #66cc66;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>index &gt;= arr.<span style="color: #006600;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> NULL;
        <span style="color: #66cc66;">&#125;</span>
        JSONValue retval = arr.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span>index<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>retval == <span style="color: #b13366;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> NULL;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> JSONWrapper<span style="color: #66cc66;">&#40;</span>retval<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span></pre>
<p>We want to distinguish between <code>JSONNull</code> and our <code>null</code> values, since sometimes the backend will really want to pass a JSON null.</p>
<p>I'll put this up on google code in a day or two. It's just one class (though one I find really useful). Perhaps this shouldn't be a module but rather find a home in another library.</p>
<p>Some other things I've been working on: <code>StringReader</code> for GWT and a simple model Observer/Observable library.</p>
<p><strong>Update:</strong> The lib is now available on <a href="http://code.google.com/p/gwt-jsonwrapper/" target="_blank">Google Code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/making-gwt-json-not-quite-so-painful/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft to Jump on Board EC2</title>
		<link>http://www.pathf.com/blogs/2008/10/microsoft-to-jump-on-board-ec2/</link>
		<comments>http://www.pathf.com/blogs/2008/10/microsoft-to-jump-on-board-ec2/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 17:57:36 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Disruption]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[Cloud Computing]]></category>

		<category><![CDATA[EC2]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1179</guid>
		<description><![CDATA[Hold on to your hats; Microsoft has just made a radical change in business model. A couple of months ago I wrote about the competitive advantage that firms using Linux and Amazon's EC2 cloud computing had over their competitors.
Server-on-demand providers like Amazon's EC2, Joyent,
and others have reduced the capital necessary to launch scalable,
server intensive businesses. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/10/screaming.jpg"><img class="alignright size-medium wp-image-1180" style="float: right;" title="screaming" src="http://www.pathf.com/blogs/wp-content/uploads/2008/10/screaming.jpg" alt="" width="199" height="300" /></a>Hold on to your hats; Microsoft has just made a radical change in business model. A couple of months ago I wrote about the <a href="http://www.pathf.com/blogs/2008/05/agile-business/" target="_blank">competitive advantage</a> that firms using Linux and Amazon's EC2 cloud computing had over their competitors.</p>
<blockquote><p>Server-on-demand providers like Amazon's EC2, Joyent,<br />
and others have reduced the capital necessary to launch scalable,<br />
server intensive businesses. Google has just launched a similar<br />
on-demand service, and companies like RightScale and CohesiveFT are building mature businesses around managing EC2 configurations.</p>
<p>...</p>
<p>Facebook applications are just the most extreme example of business initiatives that can be scaled on demand from $70/month on one EC2 server to $10,000/month on many dozens of servers running web, application and database server clusters and farms. Compare that with the old school of investing in a large data center with a significant fraction of the hardware and bandwidth that you might need if your business is a success. What used to cost $100k in capital can now be done with just a few hundreds of dollars.</p>
<p>...</p>
<p>And it's all possible as long as you are using a unix variant - Linux for the most part - to power your apps. So there is a whole class of companies out there using Linux that can out compete their Windows-using rivals - again, the capital they need to launch is much smaller because of cloud computing. That means Linux will win among the class of young entrepreneurial businesses that are so vital to the US economy.</p></blockquote>
<p><span id="more-1179"></span></p>
<p>It seems that Microsoft has spotted this gaping vulnerability and is seeking to close it. From the Amazon <a href="http://aws.amazon.com/windows/">announcement on support for Windows</a> on EC2:</p>
<blockquote><p>Starting later this Fall, Amazon Elastic Compute Cloud (Amazon <span class="caps">EC2</span>) will offer you the ability to run Microsoft Windows Server or Microsoft <span class="caps">SQL</span> Server.</p>
<p>...</p>
<p>Customers <strong>will only pay for as much or little as they actually use</strong>; of course the actual price will be higher than Linux-based instances, due to the cost of Windows licenses. We’ll announce specific pricing when we make the service broadly available later this Fall.</p></blockquote>
<p>Combine this with the announcement earlier this month that you could <a href="http://aws.amazon.com/solutions/featured-partners/oracle/" target="_blank">officially run Oracle on EC2</a> (though you still have to license it rather than pay as you go), and it's clear that commercial software vendors are feeling the preasure of SaaCS (Software as a Commodity Service).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/microsoft-to-jump-on-board-ec2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TAE Boston 2008: The Unsexy Presentations</title>
		<link>http://www.pathf.com/blogs/2008/10/tae-boston-2008-the-unsexy-presentations/</link>
		<comments>http://www.pathf.com/blogs/2008/10/tae-boston-2008-the-unsexy-presentations/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 19:07:15 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[CruiseControl]]></category>

		<category><![CDATA[Hudson]]></category>

		<category><![CDATA[JsUnit]]></category>

		<category><![CDATA[Test Driven Development]]></category>

		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1178</guid>
		<description><![CDATA[Lets face it, most people come to Ajax conference for the eye candy. TAE Boston 2008 is no different, and the jQuery, Dojo and other sessions are packed. That's great. I love good eyecandy. But the shame is that many folks skip the less sexy presentations, such as today's presentation by Ted Husted entitle Ajax [...]]]></description>
			<content:encoded><![CDATA[<p>Lets face it, most people come to Ajax conference for the eye candy. TAE Boston 2008 is no different, and the jQuery, Dojo and other sessions are packed. That's great. I love good eyecandy. But the shame is that many folks skip the less sexy presentations, such as today's presentation by Ted Husted entitle <em>Ajax Testing Tool Review</em>. Talks like these and the tools and methods they discuss is what is leading to the "professionalisation" of front end development, as my colleague Brian Dillard likes to say.</p>
<p>Some of the highlights from Ted's talk:</p>
<ul>
<li>If you like CruiseControl, but it's too fiddly for you, you'll love <a href="https://hudson.dev.java.net/" target="_blank">Hudson</a>, a much more user friendly continuous integration engine.</li>
<li>The Selenium IDE is great for getting started or smoke testing, but use the API's (in Java, C#, Ruby, etc.) to get real, supportable unit tests done.</li>
<li>YUI Test is intrusive, but it overcomes some of the shortcomings for testing asynchronous events that are present in JsUnit and Selenium. See Ted's post on <a href="http://sites.google.com/site/tedhusted/posts/yui-test---the-new-kid-on-block" target="_blank">YUI Test</a>.</li>
</ul>
<p>OK, not sexy, but if you want to develop quality software, you have to keep an eye on the non-sexy bits.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/tae-boston-2008-the-unsexy-presentations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Betting Your Business on the iPhone</title>
		<link>http://www.pathf.com/blogs/2008/09/betting-your-business-on-the-iphone/</link>
		<comments>http://www.pathf.com/blogs/2008/09/betting-your-business-on-the-iphone/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 17:35:45 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Disruption]]></category>

		<category><![CDATA[Business]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1148</guid>
		<description><![CDATA[Monopsony - the market condition that exists when there is only one buyer.
We all have heard the term "monopoly" and even know a little bit of what it means - a market where there is only one seller. But the related term "monopsony," a market where there is only one buyer, is not as well [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><span class="dicColor">Monopsony - </span>the market condition that exists when there is only one buyer.</p></blockquote>
<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/iphone_in_dock.jpg"><img class="alignright alignnone size-medium wp-image-1016" style="float: right;" title="iPhone in Dock" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/iphone_in_dock.jpg" alt="iPhone in Dock" width="160" height="240" /></a>We all have heard the term "monopoly" and even know a little bit of what it means - a market where there is only one seller. But the related term "monopsony," a market where there is only one buyer, is not as well known and it's dangers not as well understood.</p>
<p>Certainly both monopolies and monopsonies will reduce competition, innovation and consumer choice, but they further constitute a big risk for the sellers. For businesses on the seller side a monopsony can be the kiss of death. Just ask <a href="http://walmartwatch.com/blog/archives/harpers_magazine_break_up_wal_mart/" target="_blank">Walmart's suppliers</a> how good it's been for them.</p>
<p>Not all monopsonies are as obvious or as overtly damaging to suppliers as that of Walmart, but Apple's iPhone and iTunes appstore looks like a benign monopsony. A monopsony in that although the iphone consumer is the ultimate buyer, Apple determines what is permitted in it's appstore, and benign in the fact that Apple hasn't flexed that restrictive muscle more than a few times.</p>
<p><span id="more-1148"></span></p>
<p>But for the business launching an iPhone app this monopsony - benign or not - presents a real concern, a real business risk. What happens if Apple decides to compete in your space? The evidence on what happens right now is not encouraging. Take the recent example of the <a href="http://almerica.blogspot.com/2008/09/podcaster-rejeceted-because-it.html" target="_blank">podcasting application that was excluded from the AppStore</a>. The reason for it's exclusion?</p>
<blockquote><p><span style="font-style: italic;">Since <span id="SPELLING_ERROR_1" class="blsp-spelling-error">Podcaster</span> assists in the distribution of <span id="SPELLING_ERROR_2" class="blsp-spelling-error">podcasts</span>, it duplicates the functionality of the Podcast section of <span id="SPELLING_ERROR_3" class="blsp-spelling-error">iTunes</span>. </span></p></blockquote>
<p>That's the desktop version of iTunes versus an application on the iPhone that you can use without a PC or Mac. Presumably, if people don't have to use iTunes to get their podcasts, then there's less reason to use iTunes and consequently less chance that they'll actually spend money with Apple.</p>
<p>Since you only find out whether your application will be approved in the last step, i.e. after all of the hard development work has been done, that's a lot of risk to take. How to minimize it? One approach to minimizing risk might go as follows:</p>
<ul>
<li>Distribute an application with an initial pretty minimal set of functionality. Quick to produce and get the yes/no appstore answer.</li>
<li>Design your application so that it supports and embedded language runtime, such as Ruby or JavaScript, and a capability to push additional modules of functionality to the application independent of the appstore.</li>
<li>Extend your application using the above distribution mechanism. The only time you'll have to push a new version of the app is when the underlying iPhone platform changes and you'd like your embedded layer to take advantage of new features.</li>
</ul>
<p>Of course Apple is known to have a <a href="http://www.businessweek.com/technology/content/aug2008/tc20080818_266301.htm?campaign_id=rss_daily" target="_blank">"kill switch"</a> to turn off apps that have already been downloaded to a phone, so even the above approach may not insulate you from risk. So, if you are developing for the iPhone, have a care on whether your application will run into competition from Apple. You may find your application unceremoniously rejected or killed.</p>
<p><strong>Update: </strong>Looks like Apple has  banned another application, <a href="http://angelo.dinardi.name/2008/09/20/mailwrangler-and-the-apple-app-store/" target="_blank">MailWrangler</a>, that competes with it's own email application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/betting-your-business-on-the-iphone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GWT Tutorial - Building A Model</title>
		<link>http://www.pathf.com/blogs/2008/09/gwt-tutorial-building-a-model/</link>
		<comments>http://www.pathf.com/blogs/2008/09/gwt-tutorial-building-a-model/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 17:05:29 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1157</guid>
		<description><![CDATA[Shalk Neethling has written up a nice, streamlined tutorial on how to build a model in GWT using the GWTx project's support for java.beans.PropertyChangeSupport.
The basic idea here is that while the browser is the View and the server side is the Model and Controller in MVC, you really should structure your browser side code as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png"><img class="alignright alignnone size-medium wp-image-952" style="float: right;" title="gwt" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/gwt.png" alt="" width="260" height="250" /></a>Shalk Neethling has written up a <a href="http://css.dzone.com/news/gwt-building-a-model" target="_blank">nice, streamlined tutorial</a> on how to build a model in GWT using the <a href="http://code.google.com/p/gwtx/" target="_blank">GWTx</a> project's support for <code>java.beans.PropertyChangeSupport</code>.</p>
<p>The basic idea here is that while the browser is the View and the server side is the Model and Controller in MVC, you really should structure your browser side code as an MVC itself where only the Model interacts with the server.</p>
<p>Well worth a read.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/gwt-tutorial-building-a-model/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ZK 3.5 Released with Comet Support</title>
		<link>http://www.pathf.com/blogs/2008/09/zk-35-released-with-comet-support/</link>
		<comments>http://www.pathf.com/blogs/2008/09/zk-35-released-with-comet-support/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 20:27:56 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Ajax Frameworks]]></category>

		<category><![CDATA[Announcement]]></category>

		<category><![CDATA[ZK]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1154</guid>
		<description><![CDATA[ZK 3.5, the latest version of the server-side Ajax framework, is out with a raft of new features. Three of those features really stand out for me:

Comet server push
Customization of look and feel
Performance monitoring

Server push via polling has been available in ZK for a while, and Comet in the ZK "Enterprise Edition," but now it [...]]]></description>
			<content:encoded><![CDATA[<p>ZK 3.5, the latest version of the server-side Ajax framework, is out with a <a href="http://zkoss.org/smalltalks/zk3.5/" target="_blank">raft of new features</a>. Three of those features really stand out for me:</p>
<ul>
<li>Comet server push</li>
<li>Customization of look and feel</li>
<li>Performance monitoring</li>
</ul>
<p>Server push via polling has been available in ZK for a while, and Comet in the ZK "Enterprise Edition," but now it is available to everyone. And it is pretty easy to use: "The implementation of server push is transparent to developers.  ZK chooses which implementation to use according to the edition of ZK automatically, but it is configurable."</p>
<p>Customization of look and feel has gotten much easier. ZK has followed the example of a number of other frameworks in styling its widgets with predictably named CSS styles. Changing the look and feel of an application is now as easy as changing the ZK widget style sheet. Styles can further be overridden on a widget <a href="http://zkoss.org/smalltalks/zk3.5/#all" target="_blank">instance-by-instance basis</a>.</p>
<p>Performance monitoring is perhaps the most exciting new feature. Client-side tools such as <a href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a> can guide optimization efforts and give you point in time performance snapshots. But critical applications need to be monitored and tracked end to end over their lifespan. With ZK 3.5, you now have the plumbing to instrument your application to capture five data points for each request:</p>
<ul>
<li>T1, the time browser sends a request to server</li>
<li>T2, the time server receives a request</li>
<li>T3, the time server sends a request to browser</li>
<li>T4, the time browser receives a request from server</li>
<li>T5, the time the browser finishes processing a request</li>
</ul>
<p><strong>ZKStudio 0.8.2</strong></p>
<p>There's also a <a href="http://www.zkoss.org/smalltalks/zkstudioins/" target="_blank">new version of ZKStudio</a> for Eclipse out. The major change is that it now supports auto update via <a href="http://studioupdate.zkoss.org/studio/update">http://studioupdate.zkoss.org/studio/update</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/zk-35-released-with-comet-support/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Porting Java Libraries - Jazzed About GWT</title>
		<link>http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/</link>
		<comments>http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 22:26:49 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[chess]]></category>

		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1150</guid>
		<description><![CDATA[I've been building GWT interfaces for a while now, and it's been pretty cool. My attrophied Swing skills are slowly coming back and the kinds of stuff I've written has been leagues beyond my early Ajax stuff. So far so good.
Throughout it all, I've been trying to obey my own principle of avoiding leaky business [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/09/chess.jpg"><img class="alignnone size-full wp-image-1151" style="float:right;padding:10px;" title="chess" src="http://www.pathf.com/blogs/wp-content/uploads/2008/09/chess.jpg" alt="" width="180" height="240" /></a>I've been building GWT interfaces for a while now, and it's been pretty cool. My attrophied Swing skills are slowly coming back and the kinds of stuff I've written has been leagues beyond my early Ajax stuff. So far so good.</p>
<p>Throughout it all, I've been trying to obey my own <a href="http://www.pathf.com/blogs/2007/08/leaky-business-/" target="_blank">principle of avoiding leaky business logic and sensitive data</a>. That means that most of the heavy lifting, business logic wise, happens on the server side.</p>
<p>This past weekend, however, I got a rare chance to do some programming for myself. One of my hobbies is chess, and I've written a few programs over the years to help me study and analyze the game. Right now I'm putting the plumbing together for a web/iphone application site. I've got all the stuff that handles <a href="http://en.wikipedia.org/wiki/Forsyth-Edwards_Notation" target="_blank">FEN</a>, move generation, <a href="http://en.wikipedia.org/wiki/Portable_Game_Notation" target="_blank">PGN</a> and <a href="http://en.wikipedia.org/wiki/Universal_Chess_Interface" target="_blank">UCI</a> (interfacing to chess engines) on the server side, and the application side is mostly concerned with board displays.</p>
<p><span id="more-1150"></span></p>
<p>It seemed kind of inefficient to make a round trip for every FEN or move generation operation, so I thought I'd write a simple bit of chess code in Java and compile it as a library using GWT. After all, this isn't proprietary or high security business logic that can't sit in the browser. Before I did that, though, I took another look at my favorite chess library, <a href="http://www.chesspresso.org/" target="_blank">Chesspresso</a>. It's a sort of swiss army knife chess utility library that was originally developed for a chess database application. Big, sophisticated, nice.</p>
<p>An hour later after stripping out all of the <code>java.io.*</code> specific code, I had a nice GWT library that did FEN, move generation and position state for me, all in a pretty svelt 50k of JavaScript code. I had an "aha" moment very similar to the one I had on seeing "write once, run anywhere" actually work with Java on Windows and Solaris back in 1998. Here I could port this non-trivial Java library to run in the browser in literaly a matter of minutes. I was jazzed about GWT all over again.</p>
<p>The idea isn't to write a high performance chess playing program. Even with all of the performance improvements in <a href="http://www.pathf.com/blogs/2008/08/faster-javascript-for-firefox-31-thru-jit/" target="_blank">TraceMonkey</a>, you're not going to be able to get that kind of speed out of current JavaScript engines. But to avoid having to make a round trip for every chess specific bit of logic, this is certainly a good way to go.</p>
<p>I'll have an iPhone version of my analysis app up by the end of October, depending on how many free weekends I get.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/porting-java-libraries-jazzed-about-gwt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Startups, Software and the Vision Thing</title>
		<link>http://www.pathf.com/blogs/2008/09/startups-software-and-the-vision-thing/</link>
		<comments>http://www.pathf.com/blogs/2008/09/startups-software-and-the-vision-thing/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 21:44:51 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Disruption]]></category>

		<category><![CDATA[Agile Development]]></category>

		<category><![CDATA[Product Definition]]></category>

		<category><![CDATA[Software Processes]]></category>

		<category><![CDATA[Startups]]></category>

		<category><![CDATA[Venture Capital]]></category>

		<category><![CDATA[Vision]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1140</guid>
		<description><![CDATA[If you can dream it, you can do it.
-- Walt Disney
You have a great idea, an idea that is going to transform an industry. You've turned a venture capitalist's head with your presentation and now you just need a software development firm to translate your vision into reality. This is where the trouble starts.
If you [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>If you can dream it, you can do it.</p>
<p>-- Walt Disney</p></blockquote>
<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/09/vision2.jpg"><img class="alignnone size-full wp-image-1142" title="vision2" src="http://www.pathf.com/blogs/wp-content/uploads/2008/09/vision2.jpg" alt="" width="240" height="152" style="float:right;padding:10px" /></a>You have a great idea, an idea that is going to transform an industry. You've turned a venture capitalist's head with your presentation and now you just need a software development firm to translate your vision into reality. This is where the trouble starts.</p>
<p>If you move in startup VC circles, you see enough of these deals go sideways or never get off the dime. Investors see hundreds of thousands or millions of dollars plowed into software development without a usable product or service coming to light. Fingers are pointed; tears are shed. For every success there are a half dozen failures. Why is that?</p>
<p>In my experience it all comes back to that word, "vision" as in "translate your vision into reality." What the heck is vision? If you've ever cracked a book on software project management (or just general project management), there's usually a section about having a project charter and a vision statement. As a young developer I would wince and turn to the next chapter. After all, I thought, isn't vision the same thing as what you're going to build? Isn't scope or, more basically, a list of things your are going to build, the same thing as "vision?" Why blather on in consultant speak about vision statements when a more concrete and practical project description could be had?</p>
<p><span id="more-1140"></span></p>
<p>And this is where the trouble starts. If you don't have a clear idea of what you are building but have a bright and effective development team, you may still come up with a plausible list of things to build. You'll crank along, iteration after iteration, turning out software -- that is, after all, what a good development team does -- but you are likely not developing the right software.</p>
<p><strong>Poor Vision: Are We Building a Spreadsheet or a Word Processor?</strong></p>
<p>Poor vision is not the same thing as bad vision. You may have a very clear idea of what you want to build but it may suck, like the company that wanted to build a laptop software management suite based on <a href="http://en.wikipedia.org/wiki/Cc:Mail" target="_blank">cc:Mail</a> in the face of the burgeoning web. No, poor vision means that you have a poor or incorrect notion of what you want to build.</p>
<p>Hopefully most of these ambiguities have  been cleared up by the heartless venture capitalists, but just in case, let's do an exercise. Answer the following questions about your proposed software:</p>
<ul>
<li>Do you know who your customers are? Not just traders, but day traders above a certain trading volume in options and futures.</li>
<li>What is your value proposition? Why would someone actually use your software? Don't use "wonderful" or "joy" in your description.</li>
<li>What specifically will your users be doing with your application? Don't use abstract verbs like "collaborate" to describe their actions.</li>
</ul>
<p>If you can't put together a one or two paragraph description of your software that answers these questions, you just have a cool idea, not a vision. As a friend of mine likes to say, "that's crap...it's not something you can develop software from."</p>
<p>At this point you may be scratching your head and wondering what kind of idiot would launch into development without a good vision. It seems so obvious. The truth is that coming up with game changing business ideas is hard work, and in conceptualizing the business opportunity, you may fail to articulate a precise vision. Whatever the reason, software project launching with poor vision is all too common.</p>
<p><strong>Poor Vision: The Version 2 Problem</strong></p>
<p>There are other types of vision problems beyond a lack of clarity and focus. One common case is the "version 2 problem." This is where the stakeholder just focuses on the "new" things that are to be present in version 2 and ignores all the hard work that has to be recapitulated just to get them to where version 1 was. Asking the question "what are we building?" should lead you to realize that what the stakeholder is expecting is enhancements to version 1, not a complete rewrite or redesign. The why are they talking about a "version 2?" Ideally this should lead to a discussion that clarifies vision and expectations.</p>
<p><strong>Poor Vision: Integrating the Wrong Systems</strong></p>
<p>Poor vision isn't just limited to custom software development. Sometime the job calls for customization or integration of existing software packages. The vision problem here is that sometimes stakeholders will look at the feature list of an application and the fact that it has an API and conclude that tweaking the beast into your ideal solution is a piece of cake.</p>
<p>Here the solution is simple: make the stakeholders get their hands dirty. Force them to use the system in question -- no, vendor demos are not enough -- to accomplish some non-trivial tasks. This exercise, combined with an analysis of the power and expressiveness of the API, should resolve any vision dissonance.</p>
<p><strong>The Perils of Agile Development</strong></p>
<p>Poor vision is a problem that can strike any project and any method ("methodology" is the study of methods, right?). Agile development, however, is especially susceptible to it's chaotic effects. Why is that? The great strength of Agile development is that teams start developing and delivering software right away so that the client-developer feedback loop can operate early and often. If that feedback is useless -- as it is when you have poor vision -- the Agile development process can turn into a meandering mess, with features being scrapped, redeveloped and re-redeveloped.</p>
<p>How do you avoid this trouble? Simple: <em><strong>if your vision is poor, don't develop software.</strong></em></p>
<p>Software development is a surprisingly expensive way to do product definition.</p>
<p>Waterfall, by comparison, is marginally better in this regard (but worse in most others), since the right thing to do in the face of poor vision is to not develop software until that vision has been clarified, and waterfall is excellent at not developing software until pretty late in the project.</p>
<p>That's not to say that you can't get stung by poor vision in waterfall projects (and stung by a number of waterfall's other shortcomings), but you've got more of a chance to catch the problem before expensive developer teams are deployed.</p>
<p><strong>Fixing Poor Vision: Product Definition</strong></p>
<p>The best way we've found of fixing poor vision is by going through a product definition phase. It can still be iterative and agile, so don't worry that you're slipping into a waterfall requirements phase. Just do some of the user research and product conceptualization up front. Use wire-frames and the like rather than code to spitball ideas and narrow in on a definitive product concept.</p>
<p>I'll have more to say on product definition in subsequent posts. For now, I hope I've convinced you of the importance of having a clear vision if you expect to succeed with software product development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/startups-software-and-the-vision-thing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IE8 Beta 2 Released</title>
		<link>http://www.pathf.com/blogs/2008/08/ie8-beta-2-released/</link>
		<comments>http://www.pathf.com/blogs/2008/08/ie8-beta-2-released/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 02:08:51 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[IE8]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1119</guid>
		<description><![CDATA[I like it. Give me more browser improvements! With the news of Firefox 3.1's JIT JavaScript beasty TraceMonkey, is it too much to hope that IE8 Beta 2 has some similar improvements under the hood?
First you have to find the appropriate page among the 300 or so flogging IE8 Beta 2 in the MS redundaverse. [...]]]></description>
			<content:encoded><![CDATA[<p>I like it. Give me more browser improvements! With the news of <a href="http://www.pathf.com/blogs/2008/08/faster-javascript-for-firefox-31-thru-jit/" target="_blank">Firefox 3.1's JIT JavaScript beasty TraceMonkey</a>, is it too much to hope that IE8 Beta 2 has some similar improvements under the hood?</p>
<p>First you have to <a href="http://www.microsoft.com/windows/ie/ie8/welcome/us-en/tour.html" target="_blank">find the appropriate page</a> among the 300 or so flogging IE8 Beta 2 in the MS redundaverse. Drilling down into performance, you find the terse:</p>
<blockquote><p>...the script engine in Internet Explorer 8 is significantly faster than in previous versions, minimizing the load time for webpages based on JavaScript or Asynchronous JavaScript and XML (AJAX).</p></blockquote>
<p>OK. Faster. Faster how? How much faster?</p>
<p>It used to be that JavaScript engines were so slow that benchmarks served mostly to show that they weren't suitable for anything serious (slow and slower). It's time for some head-to-head benchmarks. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/08/ie8-beta-2-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Faster JavaScript for Firefox 3.1 Thru JIT</title>
		<link>http://www.pathf.com/blogs/2008/08/faster-javascript-for-firefox-31-thru-jit/</link>
		<comments>http://www.pathf.com/blogs/2008/08/faster-javascript-for-firefox-31-thru-jit/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 05:25:30 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[JIT]]></category>

		<category><![CDATA[SpiderMonkey]]></category>

		<category><![CDATA[Tamarin]]></category>

		<category><![CDATA[TraceMonkey]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1117</guid>
		<description><![CDATA[I was expecting the next major advance in JavaScript for Firefox to come from replacing SpiderMonkey with Tamarin, Adobe's donated VM for ECMAScript 4. In fact, Tamarin can already do some JIT.
Now surprise, surprise -- SpiderMonkey can do JIT as well, as Brendan Eich, Mozilla's CTO describes in his blog. The technique used in both [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/08/firefox.jpg"><img class="alignnone size-full wp-image-1118" style="float:right;padding:10px" title="firefox" src="http://www.pathf.com/blogs/wp-content/uploads/2008/08/firefox.jpg" alt="" width="50" height="50" /></a>I was expecting the next major advance in JavaScript for Firefox to come from replacing <a href="http://developer.mozilla.org/en/SpiderMonkey" target="_blank">SpiderMonkey</a> with <a href="http://www.mozilla.org/projects/tamarin/" target="_blank">Tamarin</a>, Adobe's donated VM for ECMAScript 4. In fact, <a href="http://ajaxian.com/archives/adobe-tamarin-tracing-jit-for-javascript" target="_blank">Tamarin can already do some JIT</a>.</p>
<p>Now surprise, surprise -- <a href="http://weblogs.mozillazine.org/roadmap/archives/2008/08/tracemonkey_javascript_lightsp.html" target="_blank">SpiderMonkey can do JIT as well</a>, as Brendan Eich, Mozilla's CTO describes in his blog. The technique used in both Tamarin and SpiderMonkey is called tracing, where during code execution, each hotspot (code that is executed a whole lot) is traced and compiled, so the next time it is executed, the compiled version is used. The beasty is called <a href="https://wiki.mozilla.org/JavaScript:TraceMonkey" target="_blank">TraceMonkey</a> and boasts several orders of magnitude improvements over the old SpiderMonkey.</p>
<p>Since this JIT involved actual compilation, you have to look at which architectures TraceMonkey supports. Again from Brendan's blog:</p>
<blockquote><p>We have, right now, x86, x86-64, and ARM support in TraceMonkey. This     means we are ready for mobile and desktop target platforms out of the box.</p></blockquote>
<p>Sweet. I guess that means the Intel Macs are supported.</p>
<p>There are <a href="http://groups.google.com/group/mozilla.dev.accessibility/browse_thread/thread/4e83822b65cfd46c" target="_blank">still some bugs</a>, of course, but this is great news for sophisticated Ajax apps on Firefox. Will Microsoft respond? Is a JavaScript JIT upgrade in the works for IE? This is an arms race I can get excited about.</p>
<p><strong>Update:</strong> John Resig of JQuery has some <a href="http://ejohn.org/blog/tracemonkey/" target="_blank">more details and demos about TraceMonkey</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/08/faster-javascript-for-firefox-31-thru-jit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why Chicago is Rails-town, USA</title>
		<link>http://www.pathf.com/blogs/2008/08/why-chicago-is-rails-town-usa/</link>
		<comments>http://www.pathf.com/blogs/2008/08/why-chicago-is-rails-town-usa/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 03:42:12 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Chicago]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1083</guid>
		<description><![CDATA[It's rare that dowdy old Chicago can pull rank on Silicon Valley, but with the red hot Ruby on Rails technology, Chicago leads the pack. How can I make such a claim? After all, everyone knows that SF and San Jose and points in between attract the best developers. There are 7 (and counting) reasons [...]]]></description>
			<content:encoded><![CDATA[<p>It's rare that dowdy old Chicago can pull rank on Silicon Valley, but with the red hot Ruby on Rails technology, Chicago leads the pack. How can I make such a claim? After all, everyone knows that SF and San Jose and points in between attract the best developers. There are 7 (and counting) reasons why I can say this:</p>
<ol>
<li><a href="http://www.37signals.com/" target="_blank">37Signals</a> - yes, the company where it all started is headquartered in Chicago. They're out of the professional services business and selling software built in RoR, but we used to see them as a competitor and have tried to emulate some of their business plans.</li>
<li><a href="http://www.pathf.com///" target="_blank">Pathfinder Development</a> - yes, the small but growing RoR powerhouse is also headquartered in downtown Chicago. They combine Agile development, User Experience Design (UXD) and RoR to develop "extraordinary applications," as it says in the tag line to the right. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Watch for our Rails-based competitor to Mingle, Tasker, in the next few months. Of course we also have Noel Rappin, author of <a href="http://www.amazon.com/Professional-Ruby-Rails-Programmer/dp/047022388X" target="_blank">Professional Ruby on Rails</a>.</li>
<li><a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a> - global IT consultancy, but an OO and Agile Rails development shop at heart. Their Agile project management product, Mingle, is implemented in Rails.</li>
<li><a href="http://www.centro.net/" target="_blank">Centro</a> - they're all Rails, all the time. Their core business is "providing the most comprehensive platform and services to help agencies easily and effectively buy local online media," but they have an impressive team of Rails developers powering their development. Heck, they're just a handful of blocks from us. We may have more Rails developers per square mile than any other neighborhood in America!</li>
<li><a title="Windy City Rails, Chicago Ruby on Rails Conference" href="http://www.windycityrails.org/" target="_blank">WindyCityRails</a> - our own local Rails conference (yes, we sponsor it).</li>
<li>Two, count'em, two active Ruby groups, <a href="http://www.chicagoruby.org/" target="_blank">ChicagoRuby.org</a> and the <a href="http://chirb.org/" target="_blank">Chicago Area Ruby Group</a>.</li>
<li><a href="http://obtiva.com/" target="_blank">Obtiva</a> - another Agile and Rails shop, this one in the suburbs.</li>
</ol>
<p>Think your town deserves the title of Rails-town USA? Bring it on!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/08/why-chicago-is-rails-town-usa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Restlet Ported to GWT</title>
		<link>http://www.pathf.com/blogs/2008/07/restlet-ported-to-gwt/</link>
		<comments>http://www.pathf.com/blogs/2008/07/restlet-ported-to-gwt/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 02:03:51 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[Restlet]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1077</guid>
		<description><![CDATA[If you want to communicate with the server in GWT, you have GWT-RPC and you have JSON (and in fact a few different flavors of JSON). If, however, you pine for the elegance of a RESTful interface, you've had to roll your own.
Now the folks at the Restlet project have ported the Restlet API to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/restlet.gif"><img class="alignnone size-full wp-image-1078" style="float:right; padding:10px" title="restlet" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/restlet.gif" alt="" width="150" height="53" /></a>If you want to communicate with the server in GWT, you have GWT-RPC and you have JSON (and in fact a few different flavors of JSON). If, however, you pine for the elegance of a RESTful interface, you've had to roll your own.</p>
<p>Now the folks at the Restlet project have <a href="http://blog.noelios.com/2008/07/25/restlet-ported-to-gwt/" target="_blank">ported the Restlet API to GWT</a>.</p>
<blockquote><p>Thanks to the support for generics in GWT 1.5 RC1, we were able to achieve this port with reduced efforts and limited troubles. We had to get rid of the server-side features that don’t make sense in a browser, and of the APIs like NIO and logging that aren’t emulated by GWT. The major impact was the adaptation of the API to the asynchronous communication imposed by AJAX and GWT.</p></blockquote>
<p>So now you can make much easier use of RESTful back ends. If you've been working with Rails or Grails, you won't have to ask why RESTful backends are good. If you want a quick intro to Restlets, see <a href="http://www.restlet.org/documentation/1.0/firstSteps" target="_blank">this quickstart</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/07/restlet-ported-to-gwt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MetaWidget - Convention over Configuration UI</title>
		<link>http://www.pathf.com/blogs/2008/07/metawidget-convention-over-configuration-ui/</link>
		<comments>http://www.pathf.com/blogs/2008/07/metawidget-convention-over-configuration-ui/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 23:09:08 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Android]]></category>

		<category><![CDATA[GWT]]></category>

		<category><![CDATA[JSF]]></category>

		<category><![CDATA[MetaWidget]]></category>

		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1040</guid>
		<description><![CDATA[I already know that I'm not going to do MetaWidget justice as I describe it. What the heck is it? According to the MetaWidget site, it is...
Metawidget takes your domain objects and automatically creates User Interface widgets for them, saving you handcoding your UIs and leaving you to concentrate on stitching together your application.
Think of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/logo.jpg"><img class="alignnone size-small wp-image-1042" style="float:left;padding:10px" title="logo" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/logo.jpg" alt="" width="104" height="104" /></a>I already know that I'm not going to do MetaWidget justice as I describe it. What the heck is it? According to the<a href="http://www.metawidget.org/" target="_blank"> MetaWidget</a> site, it is...</p>
<blockquote><p>Metawidget takes your domain objects and automatically creates User Interface widgets for them, saving you handcoding your UIs and leaving you to concentrate on stitching together your application.</p></blockquote>
<p>Think of a configurable form widget driven off of your beans through runtime inspection of properties, getters and setters, annotations, etc.</p>
<p>But wait, there's more. It automatically detects your backend at runtime and makes friends with Hibernate, Spring, Seam, Groovy, etc.<br />
<span id="more-1040"></span><br />
But that's not all you get. MetaWidget will work with JSF, Swing, GWT, Android, Struts, and on and on. I'm just scratching the surface here, including how it will work with IDE GUI Builders and such.</p>
<p>Definitely check out the <a href="http://metawidget.sourceforge.net/doc/reference/en/html/ch01s02.html" target="_blank">MetaWidget tutorial</a>.</p>
<p>Just a little taste of MetaWidget code from the tutorial:</p>
<pre class="java5">&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Person <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"><span style="color: #aaaadd; font-weight: bold;">String</span></a> name;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">int</span> age;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">boolean</span> retired;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> javax.<span style="color: #006600;">swing</span>.<span style="color: #006600;">*</span>;
<span style="color: #000000; font-weight: bold;">import</span> org.<span style="color: #006600;">metawidget</span>.<span style="color: #006600;">inspector</span>.<span style="color: #006600;">propertytype</span>.<span style="color: #006600;">*</span>;
<span style="color: #000000; font-weight: bold;">import</span> org.<span style="color: #006600;">metawidget</span>.<span style="color: #006600;">swing</span>.<span style="color: #006600;">*</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span> <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		Person person = <span style="color: #000000; font-weight: bold;">new</span> Person<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		SwingMetawidget metawidget = <span style="color: #000000; font-weight: bold;">new</span> SwingMetawidget<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		metawidget.<span style="color: #006600;">setInspector</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> PropertyTypeInspector<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		metawidget.<span style="color: #006600;">setToInspect</span><span style="color: #66cc66;">&#40;</span> person <span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html"><span style="color: #aaaadd; font-weight: bold;">JFrame</span></a> frame = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html"><span style="color: #aaaadd; font-weight: bold;">JFrame</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Metawidget Tutorial&quot;</span><span style="color: #66cc66;">&#41;</span>;
		frame.<span style="color: #006600;">setDefaultCloseOperation</span><span style="color: #66cc66;">&#40;</span><a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html"><span style="color: #aaaadd; font-weight: bold;">JFrame</span></a>.<span style="color: #006600;">EXIT_ON_CLOSE</span><span style="color: #66cc66;">&#41;</span>;
		frame.<span style="color: #006600;">getContentPane</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span>metawidget<span style="color: #66cc66;">&#41;</span>;
		frame.<span style="color: #006600;">setSize</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">220</span><span style="color: #66cc66;">&#41;</span>;
		frame.<span style="color: #006600;">setVisible</span><span style="color: #66cc66;">&#40;</span><span style="color: #b13366;">true</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>I have a couple of tedious GWT/Swing apps with lots of forms that are going to see and application of MetaWidget.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/07/metawidget-convention-over-configuration-ui/feed/</wfw:commentRss>
		</item>
		<item>
		<title>That&#8217;s &#8220;Tyre&#8221; with a &#8220;Y&#8221;</title>
		<link>http://www.pathf.com/blogs/2008/07/thats-tyre-with-a-y/</link>
		<comments>http://www.pathf.com/blogs/2008/07/thats-tyre-with-a-y/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 22:13:41 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
		
		<category><![CDATA[Agile Ajax]]></category>

		<category><![CDATA[Disruption]]></category>

		<category><![CDATA[awards]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1039</guid>
		<description><![CDATA[
inTechnical Blogs

The self licking ice cream cone that is blog awards has dripped on Agile Ajax. We've gotten a nod from Computer Weekly for the IT Blog Awards 08 as one of the best programming and development blogs. Funny thing, it's a list for the UK, and we've got offices in Chicago and New York.
To [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right; padding:10px">
<!--START OF VOTE FOR ME --><DIV id=cwBadge><TABLE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 0px; PADDING-TOP: 0px" cellSpacing=0 cellPadding=0 width=121 border=0><TBODY><TR><TD><img id="I#;D#http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_top.gif;http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_top.gif"  style="BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px" height=146 alt="VOTE FOR ME" src="http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_top.gif" width=121 border=0></TD></TR><TR><TD style="PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FONT-SIZE: 12px; BACKGROUND: url(http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_bg.gif) repeat-y; PADDING-BOTTOM: 0px; LINE-HEIGHT: 16px; PADDING-TOP: 4px; FONT-FAMILY: Arial, Helvetica, verdana" align=middle>in<BR><A  style="FONT-WEIGHT: bold; COLOR: #000000; TEXT-DECORATION: underline" href=http://www.computerweekly.com/blogawards.htm>Technical Blogs</A></TD></TR><TR><TD><img id="I#;D#http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_bot.gif;http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_bot.gif"  style="BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px" height=8 alt="" src="http://anon.doubleclick.edgesuite.net/anon.doubleclick/RBI/creative/118590_images/voteme_bot.gif" width=121 border=0></TD></TR></TBODY></TABLE></DIV><!--END OF VOTE FOR ME -->
</div>
<p>The self licking ice cream cone that is blog awards has dripped on Agile Ajax. We've gotten a nod from <a href="http://www.computerweekly.com/Articles/2008/06/30/230439/programming-and-development-blogs-computerweekly.com-it-blog-awards.htm" target="_blank">Computer Weekly for the IT Blog Awards 08</a> as one of the best programming and development blogs. Funny thing, it's a list for the UK, and we've got offices in Chicago and New York.</p>
<p>To curry favor with the voters, we'll start blogging about tyre's and setting colour in CSS. What is it they say? Two peoples divided by a common language?</p>
<p>Anyhow, the self licking ice cream cone part. Go and vote for your favorite. Unfortunately, since we didn't make the short list, you can't stuff the ballot box for us.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/07/thats-tyre-with-a-y/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
