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

<channel>
	<title>Ajaxian &#187; GWT</title>
	<atom:link href="http://ajaxian.com/by/topic/gwt/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Smart GWT 2.4 Released</title>
		<link>http://ajaxian.com/archives/smart-gwt-2-4-released</link>
		<comments>http://ajaxian.com/archives/smart-gwt-2-4-released#comments</comments>
		<pubDate>Thu, 13 Jan 2011 17:12:38 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10512</guid>
		<description><![CDATA[Smart GWT 2.4 has been released and, as expected, they are jumping on the HTML5 and iOS/Touch bandwagon. The fact that the touch support doesn&#8217;t require code changes for existing apps is most welcome. Also, the mention of the upcoming Smart GWT Mobile with &#8220;pixel perfect iOS look and feel&#8221; sounds intriguing. Many have tried, <a href="http://ajaxian.com/archives/smart-gwt-2-4-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://code.google.com/p/smartgwt/logo?cct=1291427501" alt="Smart GWT Logo" style="align:right;padding:10px;" /></p>
<p><a href="http://code.google.com/p/smartgwt/">Smart GWT 2.4</a> has been released and, as expected, they are jumping on the HTML5 and iOS/Touch bandwagon. The fact that the touch support doesn&#8217;t require code changes for existing apps is most welcome. Also, the mention of the upcoming Smart GWT Mobile with &#8220;pixel perfect iOS look and feel&#8221; sounds intriguing. Many have tried, few have succeeded.</p>
<p>From the <a href="http://www.jroller.com/sjivan/entry/smart_gwt_2_4_released">release announcement</a>: </p>
<ul>
<li>GWT 2.1.1 Compatible</li>
<li>Smart GWT QuickStart Guide</li>
<li>Touch &#038; Mobile support : Support for iPhone, iPad and iPod touch devices with no code changes required.</li>
<li>Offline support : The Offline subsystem provides features for storing and retrieving values in persistent browser storage. It is also seamlessly integrated into the normal DataSource request/response cycle. With a single property DataSource.useOfflineStorage you can enable automatic offline caching of recently fetched data so that if a user goes offline they still have access to last data they viewed.</li>
<li>User Defined data highlighting allows users to highlight important or unusual data values in a ListGrid or TreeGrid based on dynamic user defined rules instead of hard coding such logic for background and foreground cell colors within code. A Highlight Editor allows end users to fully configure such highlight rules to customize their view of the data.</li>
<li>Advanced Hover components allows any UI component to be added as a hover, such as a grid, chart or even a layout combining several components when hovering over a ListGrid or TreeGrid row.</li>
<li>Simplicity theme : A new ultralight skin that is easily customizable and virtually image free. This can be viewed by selecting the &#8220;Simplicity&#8221; theme from the dropdown in the Showcase explorer.</li>
<li>IE Performance improvements : Performance improvements have been made across the board but some IE specific performance enhancements have been made and users can expect a significant improvement in responsiveness in IE.</li>
<li>24 hour Calendar support : The Calendar component now supports 24 hour time formatting.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/smart-gwt-2-4-released/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are browsers Quake-ing in their boots?</title>
		<link>http://ajaxian.com/archives/gwt-quake</link>
		<comments>http://ajaxian.com/archives/gwt-quake#comments</comments>
		<pubDate>Thu, 01 Apr 2010 21:19:42 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8840</guid>
		<description><![CDATA[Ben and I are often touting the fact that we are about to see amazing Web applications as browsers support more and more of &#8220;HTML5&#8243; and the engines under the hood have become world class. The GWT team has developed something that truly shows off this engine in their port of Quake2 to GWT. Seeing <a href="http://ajaxian.com/archives/gwt-quake">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Ben and I are often touting the fact that we are about to see amazing Web applications as browsers support more and more of &#8220;HTML5&#8243; and the engines under the hood have become world class.</p>
<p>The GWT team has developed something that truly shows off this engine in <a href="http://code.google.com/p/quake2-gwt-port/">their port of Quake2 to GWT</a>.  Seeing the game run with amazing fps in a browser, with online multiplayer network support via <a href="http://dev.w3.org/html5/websockets/">WebSockets</a>, is something to truly behold.</p>
<p>Give it a watch:</p>
<p><object width="480" height="288"><param name="movie" value="http://www.youtube.com/v/fyfu4OwjUEI&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/fyfu4OwjUEI&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="288"></embed></object></p>
<p>And <a href="http://code.google.com/p/quake2-gwt-port/wiki/BuildingAndRunning">build it and run it yourself!</a></p>
<p>How did the team create the port?</p>
<p><a href="http://stefan-haustein.com/">Stefan Haustein</a>, <a href="http://timepedia.blogspot.com/">Ray Cromwell</a> and <a href="http://blog.j15r.com">Joel Webber</a> were at a GWT summit and happened upon <a href="http://bytonic.de/html/jake2.html">Jake2</a> the Java port of Quake2 that runs on top of JOGL for OpenGL. Ray could see that Joel had a glint in his eye, and the porting began!</p>
<p>To get the rich 3D graphics they went for WebGL using a GWT wrapper library that Stefan had built. Jake2&#8242;s heavy use of <a href="http://www.javamex.com/tutorials/io/nio_buffers.shtml">java.nio.Buffers</a> were handled by implementing JRE classes that mapped those to WebGL typed arrays. File system code that used RandomAccessFile was emulated by using HTML5 LocalStorage. The <a href="https://joal.dev.java.net/">OpenAL audio system</a> was implemented using HTML5 audio.</p>
<p>The various team members got varying fps depending on their machines. A Linux notebook managed 60fps, a Mac Pro got 45fps, and a Macbook Pro got 25fps. WebKit was able to perform the best of the browsers right now because it doesn&#8217;t have the multi-process per tab tax that means a lot of OpenGL buffer copying.</p>
<p>I think this is a big deal in a couple of ways:</p>
<ul>
<li>You can build fantastic games that use rich 3D engines and fast network access right on the Web. How do you &#8220;join a game&#8221;? You just share a URL! Tweet away! Now you can have these rich games just a URL a way. No install required.
</li>
<li>Game engines push a platform. Although we are talking about building an older game engine (doubt that the latest and greatest engines would run like this!) this is PLENTY for building rich effects and applications. Take some of this richness and look at something like Google Docs. How much smoother and nicer can it be? We can create beautiful applications with effects like butter right now.
</li>
</ul>
<p><b>Credit</b></p>
<p>Ray Cromwell (<a href="http://timepedia.blogspot.com/2010/04/gwtquake-taking-web-to-next-level.html">who posted on this here</a>) contributed audio/mouse/keyboard and localstorage for prefs, plus some minor GL shader debugging. Joel Webber and Stefan Haustein did the other 80% (Joel did the majority of the original code surgery to get the multiplayer game running under GWT minus graphics, Stefan did the heavy lifting on WebGL and singlehandedly ported the single-player game logic)</p>
<p>People still claim that &#8220;the browser is slow&#8221; and &#8220;JavaScript is slow&#8221;. Not in 2010 my friends!</p>
<p>Who needs <a href="http://code.google.com/p/nativeclient/">Native Client</a> now when you can build apps and games like this! Well, to be fair, there is a niche of folks who want to use C libraries and frankly prefer that world&#8230; so NaCl is for them.</p>
<p>For the rest of us though? Our world keeps getting better, almost daily!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gwt-quake/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Smart GWT 2.0 turns a year old and get a blue skin for its birthday</title>
		<link>http://ajaxian.com/archives/smart-gwt-2-0-turns-a-year-old-and-get-a-blue-skin-for-its-birthday</link>
		<comments>http://ajaxian.com/archives/smart-gwt-2-0-turns-a-year-old-and-get-a-blue-skin-for-its-birthday#comments</comments>
		<pubDate>Thu, 17 Dec 2009 11:00:17 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8301</guid>
		<description><![CDATA[Sanjiv Jivan has released Smart GWT 2.0, a big release for the project. The core updates are: GWT 2.0 support Smart GWT supports GWT 2.0 and continues to remain compatible with GWT 1.5, 1.6 and 1.7. This release is a drop-in upgrade for users of earlier versions of Smart GWT. The API&#8217;s of Smart GWT <a href="http://ajaxian.com/archives/smart-gwt-2-0-turns-a-year-old-and-get-a-blue-skin-for-its-birthday">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.jroller.com/sjivan/resource/enterprise-blue.png"/></p>
<p>Sanjiv Jivan has <a href="http://www.jroller.com/sjivan/entry/smart_gwt_2_0_released">released Smart GWT 2.0</a>, a big release for the project.</p>
<p>The core updates are:</p>
<p><b>GWT 2.0 support</b></p>
<p>Smart GWT supports GWT 2.0 and continues to remain compatible with GWT 1.5, 1.6 and 1.7. This release is a drop-in upgrade for users of earlier versions of Smart GWT. The API&#8217;s of Smart GWT have been very stable and as a result there will be no upgrade cost or migration effort for users upgrading to Smart GWT 2.0</p>
<p><b>New Enterprise Blue theme and significantly improved Enterprise Gray theme</b> </p>
<p>These themes now closely follow the Vista UI specification and guidelines. Incorporating the new theme is as simple as inheriting the new EnterpriseBlue theme module and does not require any other changes. </p>
<p>And other features include:</p>
<ul>
<li>Drop-in upgrade with no upgrade or migration effort</li>
<li>Multi-Column sort support</li>
<li>Grid Row Expansion support for
<ul>
<li>memo rows</li>
<li>detail views</li>
<li>nested editable form</li>
<li>nested editable grid (useful for representing 1-many relationships)</li>
<li>any custom embedded component</li>
</ul>
</li>
<li>Collection of standard Window icons, picker icons and transfer buttons as part of every theme</li>
<li>Improved Showcase demo with ability to search for samples by keyword. Added several new samples</li>
<li>Various other enhancements like Date field masks, improved IE 8 and Safari strict mode support.</li>
</ul>
<p>To see the breadth of the project, make sure to <a href="http://www.smartclient.com/smartgwt/showcase/#main">check out the showcase</a> which is very deep indeed. Nice work guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/smart-gwt-2-0-turns-a-year-old-and-get-a-blue-skin-for-its-birthday/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Speed Tracer: Google announces new tools and more thanks to the GWT team</title>
		<link>http://ajaxian.com/archives/google-announces-new-tools-and-more-thanks-to-the-gwt-team</link>
		<comments>http://ajaxian.com/archives/google-announces-new-tools-and-more-thanks-to-the-gwt-team#comments</comments>
		<pubDate>Wed, 09 Dec 2009 02:08:13 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8160</guid>
		<description><![CDATA[Here is Speed Tracer, the new tool to aid us Web developers in our quest for great applications: Ben and I are at Google Campfire One with a Who's Who from the Web developer space. When I first met the GWT team they were talking about revolutionary new Web tools that they wanted to create, <a href="http://ajaxian.com/archives/google-announces-new-tools-and-more-thanks-to-the-gwt-team">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Here is Speed Tracer, the new tool to aid us Web developers in our quest for great applications:</p>
<p><img src="http://code.google.com/webtoolkit/speedtracer/images/SpeedTracer-Sluggishness.png"/></p>
<p>Ben and I are at Google Campfire One with a Who's Who from the Web developer space. When I first met the GWT team they were talking about revolutionary new Web tools that they wanted to create, and I have a feeling that they will be talking about what they have come up with.</p>
<p>David Glazer (Engineering Director) and Andrew Bowers (GWT PM) are kicking off the build up with the obligatory ra-ra for HTML5 and the great new browsers we have to build "modern Web applications". </p>
<p>Next, Andrew gets into the world of development and deployment of Web apps and the productivity and performance improvements.</p>
<p>First up, productivity. Andrew is discussing AdWords which uses GWT in places. AdWords uses a <code>UiBinder</code> a declarative approach to building GUIs:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-3');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-3">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;ui :UiBinder ... ugly xml ns ...&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;">&lt;ui :<span style="color: #000066;">style</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;">&lt;g :HTMLPanel&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;... insert HTML or widgets ...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> ....&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&lt;g :Button ui:field=<span style="color: #ff0000;">"closeWidget"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Close<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/g&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/g&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/ui&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>AboutDialog.java:</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-4">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">@UiHandler<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"closeWidget"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> onClick<span style="color:#006600; font-weight:bold;">&#40;</span>ClickEvent e<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; hide<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>After the demo he talks about the Developer Plugin and support for multiple browsers.</p>
<p>Matt Mastracci, founder of Dotspots, is now "by the fire" ready to talk to us about how they use GWT. First up he shows a GWT application that compiles down and uses it as a Firefox add-on. They have also used the same code that they incorporate in a Chrome Extension and other areas. GWT 2.0 contains a new "developer mode" and Matt shows it in action as he hits Eclipse from the browser to quickly iterate. No need to recompile.... (since GWT is a compiler). Of course, using JS itself allows you to make a change and reload :)</p>
<p>Bruce Johnson, co-creator of GWT, is now "fired up" to talk about the deployment stage. How does the GWT compiler do its job? It can Prune dead code, Devirtualize, Inline, Eval, and Obfuscate.</p>
<p>Developer guided <a href="http://code.google.com/p/google-web-toolkit/wiki/CodeSplitting">code splitting</a> is next up which cuts down the initial download and only grabs what it needs.</p>
<p>Someone from <a href="http://mediabeacon.com/">MediaBeacon</a> shows a rich app (which looks exactly like how I envision a GWT app ;) as a demo of code splitting.... going from 1.5MB to 100k in 16 lines of code.</p>
<p>Now Kelly Norton (awesome guy) is up on stage with a "Web Workers" ice hockey jersey. He has the new tool, Speed Tracer! It monitors apps in real time, shows hidden browser events, and gives advice through hints.</p>
<p>Kelly has fired up Google Calendar to show a demo. I love the "Sluggishness" activity bar showing work in real time. The graph view is nice, and seeing the events is fantastic. E.g. script eval, script parse, paints, parse HTML, DOM layout, CSS style calculation. You can see it!</p>
<p>Speed Tracer itself is a Web application deployed as a Chrome Extension. One nice feature is that you can export a trace and send it over to someone via email and they can manipulate and play with the view on that data. It is a GWT app itself, and it looks not-like you think of a GWT app. Very nice indeed.</p>
<p>That's a wrap, thanks for the new tool Kelly, Bruce, Andrew and team!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/google-announces-new-tools-and-more-thanks-to-the-gwt-team/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Be your company MVP with GWT!</title>
		<link>http://ajaxian.com/archives/be-your-company-mvp-with-gwt</link>
		<comments>http://ajaxian.com/archives/be-your-company-mvp-with-gwt#comments</comments>
		<pubDate>Tue, 25 Aug 2009 11:14:40 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7287</guid>
		<description><![CDATA[Sorry about the cheesy title, I couldn't resist. In one of those moods I guess. Chris Lowe has posted a detailed example of a new-age GWT application that uses lots of cool tech based on Ray Ryans talk on]]></description>
			<content:encoded><![CDATA[<p>Sorry about the cheesy title, I couldn't resist. In one of those moods I guess. Chris Lowe has posted a <a href="http://blog.hivedevelopment.co.uk/2009/08/google-web-toolkit-gwt-mvp-example.html">detailed example of a new-age GWT application</a> that uses lots of cool tech based on Ray Ryans talk on <a href="http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html>GWT best practices</a>:</p>
<blockquote>
<p>This excellent talk laid out several best practice approaches for architecting your GWT application based on the team's experiences while developing the new AdWords interface. Some of the key recommendations were:</p>
<ul>
<li>Use an <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Model-view-presenter">MVP pattern</a>;</li>
<li>Use a <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Command_pattern">command pattern</a>;</li>
<li>Use an Event Bus (a.k.a <a rel="nofollow" target="_blank" href="http://martinfowler.com/eaaDev/EventCollaboration.html">Event Collaboration</a>);</li>
<li>Use <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Dependency_injection">Dependency Injection</a>.</li>
</ul>
</blockquote>
<p>Chris takes these ideas and applies them to the starter project created by the <a href="http://code.google.com/eclipse/">Google plugin for Eclipse</a>. To get this done, he uses a slew of libraries:</p>
<table>
<tr>
<td><a rel="nofollow" target="_blank" href="http://code.google.com/p/gwt-presenter/">GWT-Presenter</a></td>
<td class="table-descr">An implementation of the MVP pattern;</td>
</tr>
<tr>
<td><a rel="nofollow" target="_blank" href="http://code.google.com/p/gwt-dispatch/">GWT-Dispatch</a></td>
<td class="table-descr">An implementation of the command pattern;</td>
</tr>
<tr>
<td><a rel="nofollow" target="_blank" href="http://code.google.com/p/google-gin/">Google Gin</a></td>
<td class="table-descr">Dependency Injection based on Google's Guice;</td>
</tr>
<tr>
<td><a rel="nofollow" target="_blank" href="http://code.google.com/p/gwt-log/">GWT-Log</a></td>
<td class="table-descr">A log4j-style logger for GWT.</td>
</tr>
</table>
<p>NOTE: currently GIN needs to be built from source using SVN/Ant.</p>
<p>You'll also need the following libraries at the server:</p>
<table>
<tbody>
<tr>
<td><a rel="nofollow" target="_blank" href="http://logging.apache.org/log4j/1.2/index.html">log4j</a></td>
<td class="table-descr">A logging framework;</td>
</tr>
<tr>
<td><a rel="nofollow" target="_blank" href="http://code.google.com/p/google-guice/">Google Guice 2.0</a></td>
<td class="table-descr">A dependency injection framework for Java.</td>
</tr>
</tbody>
</table>
<p>Then, the tutorial walks you through setting up your views, presenters, and events. It is Java, so you will notice a fair amount of source code (but at least the GuiceServlet gets rid of most of the XML). Just joshing with ya!</p>
<p><em>It was cool to see my buddy Rob's <a href="http://customware.net/">Customware</a> being the place that created some of the key libraries. Good on ya mate!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/be-your-company-mvp-with-gwt/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>GChart 2.5: Faster, sharper, canvas-rendered, pie, line, and area charts</title>
		<link>http://ajaxian.com/archives/gchart-25-faster-sharper-canvas-rendered-pie-line-and-area-charts</link>
		<comments>http://ajaxian.com/archives/gchart-25-faster-sharper-canvas-rendered-pie-line-and-area-charts#comments</comments>
		<pubDate>Thu, 02 Jul 2009 11:44:30 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7038</guid>
		<description><![CDATA[John Gunther has released GChart 2.5, a client-side library that adds a new canvas-rendering option for sharper, better looking, alpha-transparent, pie, line, and area charts. John told us: Canvas-rendering corrects GChart's most serious visual quality limitations (including the most often mentioned problem by its users: the banded-filled pie slice). Coupled with its existing feature set <a href="http://ajaxian.com/archives/gchart-25-faster-sharper-canvas-rendered-pie-line-and-area-charts">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>John Gunther has <a href="http://gchart.googlecode.com/svn/trunk/doc/com/googlecode/gchart/client/doc-files/gchart2p5features.html">released GChart 2.5</a>, a client-side library that adds a new canvas-rendering option for sharper, better looking, alpha-transparent, pie, line, and area charts.</p>
<p><a href="http://gchart.googlecode.com/svn/trunk/live-demo/v2_5/com.googlecode.gchart.gchartdemoapp.GChartDemoApp/GChartDemoApp.html"><img src="http://ajaxian.com/wp-content/uploads/gchart25.png" alt="" title="gchart25" width="500" height="514" class="alignnone size-full wp-image-7039" /></a></p>
<p>John told us:</p>
<blockquote><p>
Canvas-rendering corrects GChart's most serious visual quality limitations (including the most often mentioned problem by its users: the banded-filled pie slice).</p>
<p>Coupled with its existing feature set and ease of GWT integration, the canvas-rendering option makes GChart an excellent choice for those who want to add basic charts to a GWT application without a lot of fuss.</p>
<p>To access these features, you'll need to plug an external canvas library into GChart (GWTCanvas in the gwt-incubator is reccommended) as described in detail in the setCanvasFactory method.</p>
<p>With the external canvas in place, the next step is to tell GChart you want a curve to be "continuously filled" by invoking setFillSpacing(0).</p>
<p>With each such continuously filled curve, GChart automatically exploits your external canvas library to improved the quality and speed of that curve's rendering. Specifically, banded-filled pie slices become solid filled, dotted connecting lines become continuously connected, and (the biggest stretch) bar charts become area charts. See the setFillSpacing method's javadocs for a detailed description of how each existing symbol type implements this new "continuously-filled", canvas-powered, rendering option.</p>
<p>Note that GChart's previous HTML-only rendering is still available, and is the default rendering mode if you don't bother to plug in an external canvas.
</p></blockquote>
<p>Check out the <a href="http://gchart.googlecode.com/svn/trunk/live-demo/v2_5/com.googlecode.gchart.gchartdemoapp.GChartDemoApp/GChartDemoApp.html">demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gchart-25-faster-sharper-canvas-rendered-pie-line-and-area-charts/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IT Mill Toolkit 5 out of Beta</title>
		<link>http://ajaxian.com/archives/it-mill-toolkit-5-out-of-beta</link>
		<comments>http://ajaxian.com/archives/it-mill-toolkit-5-out-of-beta#comments</comments>
		<pubDate>Tue, 10 Mar 2009 22:24:26 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6280</guid>
		<description><![CDATA[With the release of IT Mill Toolkit 5.3.0, the server-side RIA framework is now ready for production. I announced the initial release of 5.0 back in December of 2007. Since that time, IT Mill 5 has gone through several revisions and the release of GWT 1.5 (which means you can use Java 5 now on <a href="http://ajaxian.com/archives/it-mill-toolkit-5-out-of-beta">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ajaxian.com/wp-content/uploads/itmill_logo.gif"><img src="http://ajaxian.com/wp-content/uploads/itmill_logo.gif" alt="" title="itmill_logo" width="168" height="28" class="alignright size-full wp-image-6281" /></a>With the release of <a href="http://www.itmill.com/news/2009-03-04_Server-driven_Rich_Web_Applications_in_Pure_Java_-_IT_Mill_Toolkit_5_3_0_Now_Ready_for_Production.htm" target="_blank">IT Mill Toolkit 5.3.0</a>, the server-side RIA framework is now ready for production. I announced the initial release of 5.0 back in <a href="http://ajaxian.com/archives/server-side-ajax-framework-it-mill-toolkit-5-now-with-gwt" target="_blank">December of 2007</a>. Since that time, IT Mill 5 has gone through several revisions and the release of GWT 1.5 (which means you can use Java 5 now on both the client and the server). As a reminder, server-side RIA frameworks let you write your app completely in the server and uses a client-side Ajax engine to render the interface. The nice wrinkle with IT Mill is that both the server side and the client side are written in Java, so if you want to add a component, you don't have to break out the JavaScript (see the extensive and high quality reference manual for <a href="http://www.itmill.com/documentation/itmill-toolkit-5-reference-manual/gwt.html" target="_blank">details on how to develop your own custom components in GWT</a>). If you're a Java shop, that's got to be a good thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/it-mill-toolkit-5-out-of-beta/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Piano Etudes: Garage Band, Piano Style</title>
		<link>http://ajaxian.com/archives/piano-etudes-garage-band-piano-style</link>
		<comments>http://ajaxian.com/archives/piano-etudes-garage-band-piano-style#comments</comments>
		<pubDate>Tue, 10 Feb 2009 10:12:14 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5914</guid>
		<description><![CDATA[What would a fun Ajax interface to piano composition look like? Jason Freeman, a prof in the music department of the Georgia Institute of Technology has created an interface using GWT called Piano Etudes. His project lets users create and share their own versions of short piano pieces (and print them out as musical scores <a href="http://ajaxian.com/archives/piano-etudes-garage-band-piano-style">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>What would a fun Ajax interface to piano composition look like? Jason Freeman, a prof in the music department of the Georgia Institute of Technology has created an interface using GWT called <a href="http://www.jasonfreeman.net/pianoetudes/">Piano Etudes</a>.</p>
<p>His project lets users create and share their own versions of short piano pieces (and print them out as musical scores for use in live concert performances). It was built using GWT and, among other things, it shows that it's relatively easy to put together a simple GarageBand-style music editing interface using Ajax.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/pianoetudes.png" alt="" title="pianoetudes" width="500" height="306" class="alignnone size-full wp-image-5915" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/piano-etudes-garage-band-piano-style/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Timescope: to mobile and beyond</title>
		<link>http://ajaxian.com/archives/timescope</link>
		<comments>http://ajaxian.com/archives/timescope#comments</comments>
		<pubDate>Wed, 28 Jan 2009 13:08:49 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5817</guid>
		<description><![CDATA[Ray Cromwell has the ability to do amazing things in the browser. We have often linked to his work on Chronoscope and more, and this time he has a screencast showing of Timescope "our charting engine, written in GWT, runnable as Servlet or Android native application, renders huge numbers of points at interactive rates, scriptable, <a href="http://ajaxian.com/archives/timescope">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Ray Cromwell has the ability to do amazing things in the browser. We have often linked to his work on Chronoscope and more, and this time he has a <a href="http://vimeo.com/2983154">screencast showing of Timescope</a> "our charting engine, written in GWT, runnable as Servlet or Android native application, renders huge numbers of points at interactive rates, scriptable, annotatable like Google Maps, and stylable via CSS-like stylesheet mechanism."</p>
<blockquote><p>
For those who know of Chronoscope, this is the commercial version, big changes include more accurate multiresolution filtering algorithm, Android native version, Chart Server, iPhone integration, synthetic datasets, a number of other things. We eventually hope to include a subset of complete implementation of R in GWT, to allow statistical work to be done totally in browser.</p>
<p>At the 7:20 mark, you can see GSS, which is an implementation of a CSS parsing and cascade engine in GWT, to support our totally custom set of properties, elements, and pseudo-classes.
</p></blockquote>
<p>Very cool indeed Ray.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/timescope/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>SendMeHome with GWT</title>
		<link>http://ajaxian.com/archives/sendmehome-with-gwt</link>
		<comments>http://ajaxian.com/archives/sendmehome-with-gwt#comments</comments>
		<pubDate>Tue, 06 Jan 2009 16:37:11 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5572</guid>
		<description><![CDATA[SendMeHome lets you to assign a unique code, called a SendMeHome ID, to any physical item. We are launching our newest feature, Stories, which connects a group of people through an item as it travels the globe. Social networks such as Facebook mainly involve users communicating with their ‘friends’, SendMeHome is unique because it uses <a href="http://ajaxian.com/archives/sendmehome-with-gwt">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
SendMeHome lets you to assign a unique code, called a SendMeHome ID, to any physical item. We are launching our newest feature, Stories, which connects a group of people through an item as it travels the globe. Social networks such as Facebook mainly involve users communicating with their ‘friends’, SendMeHome is unique because it uses a real-world object to tell a story that enables interaction between new and like-minded people who may otherwise have never known of each other’s existence.</p>
<p>Our beta users have already created stories to write a collaborative novel, share cooking tips, discuss political events, and even transport a statue to Easter Island.
</p></blockquote>
<p>The site uses GWT components and integrates with services such as good ole Google Maps. You can <a href="http://sendmehome.com/#stories&#038;1-SRB">check out a story</a>. Having a code associated to items is a lot of fun (read: Webkinz) and seems to be something that can be useful.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/sendmehome.png" alt="" title="sendmehome" width="500" height="395" class="alignnone size-full wp-image-5573" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/sendmehome-with-gwt/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SmartGWT 1.0: Huge open source widget set and more</title>
		<link>http://ajaxian.com/archives/smartgwt</link>
		<comments>http://ajaxian.com/archives/smartgwt#comments</comments>
		<pubDate>Wed, 03 Dec 2008 05:52:35 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Toolkit]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5282</guid>
		<description><![CDATA[You may remember Sanjiv Jivan as the GWT-Ext developer that changed over the debacle. He then went on to start work on a GWT version of SmartClient libraries and has now released SmartGWT 1.0. It is a tour de force of not only a huge widget library, but he explains how it is much more: <a href="http://ajaxian.com/archives/smartgwt">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>You may remember Sanjiv Jivan as the GWT-Ext developer that <a href="http://www.jroller.com/comments/sjivan/Weblog/update_on_future_direction_of1">changed over the debacle</a>. He then went on to start work on a GWT version of SmartClient libraries and has now <a href="http://www.jroller.com/sjivan/entry/smartgwt_1_0_released">released SmartGWT 1.0</a>.</p>
<p>It is a tour de force of not only a huge widget library, but he explains how it is much more:</p>
<blockquote><p>
So what's so smart about SmartGWT? Let me try to explain. SmartGWT is not just another Widget library. While most Ajax frameworks focus primarily on presentation and displaying mostly read-only data, either local or via XML / JSON, SmartClient was built with server side integration in mind. Most enterprise applications are not just about about data presentation, but about being able to propagate data changes made by the user to the backend. So while its tempting to use library X that has a cool tree widget, it's not until you actually try to use it your application that you encounter the real world hard problems. For example, how do you take data from your business objects on the server to not only display in a tree widget, but also be able to update your data model when, say, the user reorders the tree nodes or make edits / deletes in the UI. How do you display hierarchical data where nodes may have hundreds of children? And so on..</p>
<p>Most Ajax frameworks stop short and leave it up to the user to manage state on the client side and propagating the changes to the server. This is not a trivial problem! Over the past few years UI widget libraries have improved significantly and there are now various options available to users. Simply put, having good looking widgets is not the hard problem today. In addition to having good looking widgets, having end-to-end integration of the UI components with the backend is the hard problem. It's this 20% of the functionality that takes 80% of the time in building most enterprise applications.
</p></blockquote>
<p>The <a href="http://www.smartclient.com/smartgwt/showcase/">showcase</a> will give you a good feel for what is out there, and it contains some interesting items including:</p>
<ul>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_miller_columns">Miller Columns</a>: The ColumnTree provides an alternate navigation paradigm for Tree data, sometimes called "Miller Columns" and seen in iTunes</li>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_nested_grid">Nested Grid</a>: A convenient way to display 1-n relationships</li>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_print_grid">Printable Views</a>: SmartGWT supports printable views of its components.</li>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_filter_builder_grid">Advanced Filter Builder</a>: a databound filter builder. </li>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_dropdown_grid_category">Tile View</a>: Representation of data as "tiles". Again, TileGrid supports data binding so sort / filter and edits can be easily performed.</li>
<li>Calendars : A Google Calendar like widget that supports databinding so edits and drag drop changes can easily be propgated to the server for persisting.</li>
<li>TreeGrid : Supports multiple columns, editing, column locking, lazy loading and more. </li>
<li><a href="http://www.smartclient.com/smartgwt/showcase/#featured_grid_live">Live Grid / Tree</a>: Grid / Tree virtual scrolling or live grid</li>
</ul>
<p><img src="http://ajaxian.com/wp-content/uploads/smartgwt.png" alt="" title="smartgwt" width="500" height="415" class="alignnone size-full wp-image-5283" /></p>
<p>Really amazing work. Sanjiv recently had a <a href="http://www.infoq.com/news/2008/11/smartgwt ">Q&#038;A session with InfoQ</a> where he talks about the approach taken in developing SmartGWT and the his thoughts on the differences between SmartClient and Ext. </p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/smartgwt/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AbstractCanvas: HTML Canvas and Java2D in one fell swoop</title>
		<link>http://ajaxian.com/archives/abstractcanvas</link>
		<comments>http://ajaxian.com/archives/abstractcanvas#comments</comments>
		<pubDate>Mon, 01 Dec 2008 12:09:34 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5262</guid>
		<description><![CDATA[Rodrigo Reyes has announced a new project called AbstractCanvas, a GWT project that sits on top of HTML Canvas and Java2D. The same code can thus run in the browser, or on the server. You can then write code such as: PLAIN TEXT JAVA: &#160; &#160;VerticalPanel vPanel = new VerticalPanel&#40;&#41;; &#160; &#160;CanvasPanelExt canvas1 = new <a href="http://ajaxian.com/archives/abstractcanvas">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://kornr.net/abstractcanvas/net.kornr.canvaschart.Demo/Demo.html"><img src="http://ajaxian.com/wp-content/uploads/abstractcanvas.png" alt="" title="Abstract Canvas" width="500" height="300" class="alignnone size-full wp-image-5263" /></a></p>
<p>Rodrigo Reyes has <a href="http://blog.kornr.net/index.php/2008/11/27/gwt-one-step-above-the-html-canvas">announced</a> a new project called <a href="http://code.google.com/p/abstractcanvas/">AbstractCanvas</a>, a GWT project that sits on top of HTML Canvas and Java2D.</p>
<p>The same code can thus run in the browser, or on the server.</p>
<p>You can then write code such as:</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-6">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;VerticalPanel vPanel = <span style="color: #000000; font-weight: bold;">new</span> VerticalPanel<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;CanvasPanelExt canvas1 = <span style="color: #000000; font-weight: bold;">new</span> CanvasPanelExt<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">300</span>,<span style="color:#800000;">150</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;canvas1.<span style="color: #006600;">setFillStyle</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AColor+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Color</span></a>.<span style="color: #006600;">WHITE</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;canvas1.<span style="color: #006600;">setGlobalAlpha</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">1</span>.<span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;canvas1.<span style="color: #006600;">fillRect</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>, <span style="color:#800000;">0</span>, canvas1.<span style="color: #006600;">getCoordWidth</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>, canvas1.<span style="color: #006600;">getCoordHeight</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;canvas1.<span style="color: #006600;">addCanvasPainter</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ColorTest<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color: #808080; font-style: italic;">// &lt;- Note the use of CanvasPainter here</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;canvas1.<span style="color: #006600;">addCanvasPainter</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PathTest<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;&nbsp; &nbsp; &nbsp;&lt;- and here</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;vPanel.<span style="color: #006600;">add</span><span style="color:#006600; font-weight:bold;">&#40;</span>canvas1<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/abstractcanvas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chess Diagram Builder and Maps Library via GWT</title>
		<link>http://ajaxian.com/archives/chess-diagram-builder-and-maps-library-via-gwt</link>
		<comments>http://ajaxian.com/archives/chess-diagram-builder-and-maps-library-via-gwt#comments</comments>
		<pubDate>Mon, 03 Nov 2008 11:26:26 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Mapping]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4948</guid>
		<description><![CDATA[Alexander (aka Sasha) Maryanovsky has been hacking away with GWT, and has some come up with a couple of interesting project. The first, is a fun chess diagram builder that lets you build out a chess diagram and export it out: Also, he has created Sasha Maps, an API that abstracts mapping implementations allowing you <a href="http://ajaxian.com/archives/chess-diagram-builder-and-maps-library-via-gwt">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Alexander (aka Sasha) Maryanovsky has been hacking away with GWT, and has some come up with a couple of interesting project.</p>
<p>The first, is a fun <a href="http://www.jinchess.com/chessboard/composer/">chess diagram builder</a> that lets you build out a chess diagram and export it out:</p>
<p><a href="http://www.jinchess.com/chessboard/composer/"><img src="http://ajaxian.com/wp-content/uploads/chessdiagrambuilder.png" alt="" title="chess diagram builder" width="337" height="407" class="alignnone size-full wp-image-4949" border="0" /></a></p>
<p>Also, he has created <a href="http://www.maryanovsky.com/sasha/maps/">Sasha Maps</a>, an API that abstracts mapping implementations allowing you to plugin your own system (but Google Maps and WMS are implemented).</p>
<p>The appropriate Hello World could look something like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-8');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-8">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">package com.<span style="color: #006600;">maryanovsky</span>.<span style="color: #006600;">mapdemo</span>.<span style="color: #006600;">client</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import java.util.Arrays; </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import java.util.List; </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.google.gwt.core.client.EntryPoint; </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.google.gwt.user.client.ui.RootPanel; </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.maryanovsky.gwtutils.client.UiUtils; </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.maryanovsky.gwtutils.client.UserEventManager; </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.maryanovsky.map.client.*; </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #a1a100;">import com.maryanovsky.map.client.impl.Google; </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">/** </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;"> * The entry point of the Map demo. </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;"> */</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TutorialDemo <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">/** </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">&nbsp; &nbsp;* Starts the map demo. </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">&nbsp; &nbsp;*/</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onModuleLoad<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AList+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">List</span></a> tileLayers = <a href="http://www.google.com/search?q=allinurl%3AArrays+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Arrays</span></a>.<span style="color: #006600;">asList</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TileLayer<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#123;</span>Google.<span style="color: #006600;">NORMAL_TILE_LAYER</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Map</span></a> map = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Map</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>Google.<span style="color: #006600;">MERCATOR_PROJECTION</span>, tileLayers, <span style="color:#800000;">0</span>, <span style="color:#800000;">17</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; LatLng initialLocation = <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">60</span>.<span style="color:#800000;">050317</span>, <span style="color:#800000;">30</span>.<span style="color:#800000;">350161</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #993333;">int</span> initialZoom = <span style="color:#800000;">13</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; MapWidget mapWidget = <span style="color: #000000; font-weight: bold;">new</span> MapWidget<span style="color:#006600; font-weight:bold;">&#40;</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> MapLocationModel<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>, <span style="color:#800000;">17</span>, initialLocation, initialZoom<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; mapWidget.<span style="color: #006600;">setMap</span><span style="color:#006600; font-weight:bold;">&#40;</span>map<span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; UserEventManager eventManager = mapWidget.<span style="color: #006600;">getUserEventManager</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; eventManager.<span style="color: #006600;">setDragAction</span><span style="color:#006600; font-weight:bold;">&#40;</span>MapWidget.<span style="color: #006600;">DRAG_MAP_ACTION</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; eventManager.<span style="color: #006600;">setDoubleClickAction</span><span style="color:#006600; font-weight:bold;">&#40;</span>MapWidget.<span style="color: #006600;">ANIMATED_ZOOM_IN_ACTION</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; eventManager.<span style="color: #006600;">setWheelAction</span><span style="color:#006600; font-weight:bold;">&#40;</span>MapWidget.<span style="color: #006600;">ANIMATED_ZOOM_ACTION</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; eventManager.<span style="color: #006600;">setRightClickAction</span><span style="color:#006600; font-weight:bold;">&#40;</span>MapWidget.<span style="color: #006600;">ANIMATED_PAN_MAP_ACTION</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; UiUtils.<span style="color: #006600;">disableContextMenu</span><span style="color:#006600; font-weight:bold;">&#40;</span>mapWidget.<span style="color: #006600;">getElement</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; UiUtils.<span style="color: #006600;">addFullSize</span><span style="color:#006600; font-weight:bold;">&#40;</span>RootPanel.<span style="color: #006600;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>, mapWidget<span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The API gives you interfaces to setup custom maps, actions, overlays, map widgets, and more.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/chess-diagram-builder-and-maps-library-via-gwt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pyjamas: GWT for Python</title>
		<link>http://ajaxian.com/archives/pyjamas-gwt-for-python</link>
		<comments>http://ajaxian.com/archives/pyjamas-gwt-for-python#comments</comments>
		<pubDate>Tue, 07 Oct 2008 13:00:58 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4689</guid>
		<description><![CDATA[Last week, we posted a story about deploying GWT to PHP back-ends. We've got another GWT-ish post this week: Pyjamas, a sort of GWT for Python. The SourceForge project page has a brief overview and pointers to a tutorial, a widget showcase, and more.]]></description>
			<content:encoded><![CDATA[<p>Last week, we posted a story about deploying GWT to PHP back-ends. We've got another GWT-ish post this week: Pyjamas, a sort of GWT for Python.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/py.png" alt="" title="py" width="348" height="315" class="alignnone size-full wp-image-4692" /></p>
<p>The <a href="http://pyjamas.sourceforge.net/">SourceForge project page</a> has a brief overview and pointers to a <a href="http://pyjd.sf.net/controls_tutorial.html">tutorial</a>, a <a href="http://pyjamas.sourceforge.net/showcase/Showcase.html">widget showcase</a>, and more.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/pyjamas-gwt-for-python/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vista / OS X Mash-up Created with GWT on PHP</title>
		<link>http://ajaxian.com/archives/vista-os-x-mash-up-created-with-gwt-on-php</link>
		<comments>http://ajaxian.com/archives/vista-os-x-mash-up-created-with-gwt-on-php#comments</comments>
		<pubDate>Fri, 03 Oct 2008 15:51:35 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4674</guid>
		<description><![CDATA[Here's an interesting link for a Friday. Viktor Zeman on Quality Unit sent us a link to "PostAffiliateXpress", some boring IT application with an interesting interface and an even more intriguing back-end. The UI combines a Vista-like "Start" menu along with an OS X-like dock (using everyone's favorite fish-eye widget). It also has a built-in <a href="http://ajaxian.com/archives/vista-os-x-mash-up-created-with-gwt-on-php">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Here's an interesting link for a Friday. Viktor Zeman on Quality Unit sent us a link to "<a href="http://samples.gwtphp.com/pax4/merchants/">PostAffiliateXpress</a>", some boring IT application with an interesting interface and an even more intriguing back-end.</p>
<p><a href="http://samples.gwtphp.com/pax4/merchants/"><img src="http://ajaxian.com/wp-content/uploads/sample.jpg" alt="" title="Vista / OS X Mash-up" width="470" height="320" class="alignnone size-full wp-image-4675" /></a></p>
<p>The UI combines a Vista-like "Start" menu along with an OS X-like dock (using everyone's favorite fish-eye widget). It also has a built-in widget system that leverages Google Widgets. Overall, it's a pretty nice implementation of a desktop and windowing in Ajax.</p>
<p>The framework itself is "<a href="http://www.gwtphp.com/">GwtPHP</a>" which attempts to take all the advantages of GWT and deploy them to PHP backends in an attempt to solve the problem of limited Java-friendly hosting services. Unfortunately, the framework isn't available for use until sometime in early November.</p>
<p><b>Dual-License</b></p>
<p>The developers intend to use the familiar "free for hobbyists, pay up for commercial use" licensing model (what their <a href="http://www.gwtphp.com/licensing/">licensing page</a> calls a "what for what" model).</p>
<p><b>Give some feedback</b></p>
<p>Viktor says that they are quite keen to <a href="http://www.gwtphp.com/contact-us/">get feedback</a> from folks on the project, so interested folks should get in touch, let them know what you think about the licensing model, and perhaps get early access, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/vista-os-x-mash-up-created-with-gwt-on-php/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ext GWT 1.1 Released</title>
		<link>http://ajaxian.com/archives/ext-gwt-11</link>
		<comments>http://ajaxian.com/archives/ext-gwt-11#comments</comments>
		<pubDate>Thu, 18 Sep 2008 12:25:02 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4525</guid>
		<description><![CDATA[Darrell Meyer has announced the release of Ext GWT 1.1 which is said to "shortens the feature set gap between Ext JS." New Features The Grid component wraps the Ext JS grid, and it includes support for grid plugins which fit into component lifecycles. You can also use a subclass, EditableGrid which.... allows you to <a href="http://ajaxian.com/archives/ext-gwt-11">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://extjs.com/examples/images/thumbs/advancedlistview.gif" border="0" style="float: right; padding: 8px;" /></p>
<p>Darrell Meyer has announced the release of <a href="http://extjs.com/blog/2008/09/18/ext-gwt-11-released/">Ext GWT 1.1</a> which is said to "shortens the feature set gap between Ext JS."</p>
<p><b>New Features</b></p>
<p>The <a href="http://extjs.com/examples/grid/grid.html">Grid</a> component wraps the Ext JS grid, and it includes support for <a href="http://extjs.com/examples/grid/plugins.html">grid plugins</a> which fit into component lifecycles. You can also use a subclass, <a href="http://extjs.com/examples/grid/editable.html">EditableGrid</a> which.... allows you to edit content on the fly.</p>
<p>Auto complete has been added to the <a href="http://extjs.com/examples/forms/combos.html">combo boxes</a> a la Google Suggest.</p>
<p><a href="http://extjs.com/examples/portal/portal.html">Portal</a> is a custom layout container that uses a multi-column layout on contains Portlets. Each Porlet can be drag and dropped to change order or move to another column. Each Portlet can contain any content and supports icons to expand / collapse, close, etc.</p>
<p>The <a href="http://extjs.com/deploy/gxt-1.1/samples/desktop/www/com.extjs.gxt.samples.desktop.DesktopApp/">desktop</a> mimics the behavior of the operating system look at feel. It is now possible to create multi-window applications with support for a task bar and start menu. Windows support normal, maximize, and minimize states. The start menu is a custom menu that allows new menu items. In addition, there is support for a “task” area for adding additional items.</p>
<p><b>Java Bean Support with BeanModel</b></p>
<blockquote><p>
The Ext GWT Store and Binder API work with ModelData instances. The primary goal of ModelData is to provide a type of “introspection” as GWT does not allow runtime inspection of Java objects. You can query ModelData for a list of properties it contains, and these properties can be retrieved and set using the parameter name with the get and set methods.</p>
<p>Although this approach works, it forces you to either implement the ModelData interface in your Java Beans or extend the Ext GWT base classes that implement the ModelData interface. What is missing is a way to use your Java Beans as is, without having to extend the Ext GWT base classes or implement an “invasive” interface.
</p></blockquote>
<p>There are also new examples:</p>
<ul>
<li><a href="http://extjs.com/examples/forms/forumsearch.html">Forum search</a> is an example of a combo box, using a custom XTemplate, and remote data. The data can be paged with built-in support for a paging toolbar.</li>
<li><a href="http://extjs.com/examples/view/chooser.html">Image Chooser</a> shows loading a ListView in a Window. Each item has a linked details view, and the ListView supports custom sorting and filtering.</li>
<li>This example shows a Dialog using an <a href="http://extjs.com/examples/layouts/anchorlayout.html">AnchorLayout</a> to “anchor” the form fields to the dialog dimensions. When resized, the fields will adjust their size to match the dimensions of the dialog.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ext-gwt-11/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>GWT 1.5 final release is shipped and out the door</title>
		<link>http://ajaxian.com/archives/gwt-15-final-release-is-shipped-and-out-the-door</link>
		<comments>http://ajaxian.com/archives/gwt-15-final-release-is-shipped-and-out-the-door#comments</comments>
		<pubDate>Fri, 29 Aug 2008 15:51:50 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4287</guid>
		<description><![CDATA[I have seen the GWT team working very hard indeed on GWT 1.5, and they must be very happy to see the final release shipped and complete: GWT 1.5 delivers what we think are an impressive number of improvements, about four hundred issues if you're counting. We're also happy that one of those is issue <a href="http://ajaxian.com/archives/gwt-15-final-release-is-shipped-and-out-the-door">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/gajaxianlextable.png" alt="" title="GWT Flex Table" width="500" height="296" class="alignnone size-full wp-image-4288" /></p>
<p>I have seen the GWT team working very hard indeed on GWT 1.5, and they must be very happy to see the final release <a href="http://googlewebtoolkit.blogspot.com/2008/08/gwt-15-now-available.html">shipped and complete</a>:</p>
<blockquote><p>
GWT 1.5 delivers what we think are an impressive number of improvements, about four hundred issues if you're counting. We're also happy that one of those is issue 168, our most-requested feature, Support for Java 5.
</p></blockquote>
<p>The high level new feature sets are:</p>
<ul>
<li>Java 5 language support and enhanced JRE emulation</li>
<li>Performance optimizations and easier JavaScript interop</li>
<li>Prettier widgets, better DOM, accessibility, and bi-di</li>
</ul>
<p>You can see a lot of this at work in the <a href="http://gwt.google.com/samples/Showcase/Showcase.html">showcase area</a>. There you will see all of the widgets and examples that come out of the box, and the community has developed even more for you. In particular, Ray Cromwell has some <a href="http://sites.google.com/site/io/gwt-extreme">great real world examples that he shares in his book and talk</a>.</p>
<p><a href="http://code.google.com/webtoolkit/">Download GWT</a> and take a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gwt-15-final-release-is-shipped-and-out-the-door/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>GALGWT 1.0&#8230; it isn&#8217;t a land next to Mordor</title>
		<link>http://ajaxian.com/archives/galgwt-10-it-isnt-a-land-next-to-mordor</link>
		<comments>http://ajaxian.com/archives/galgwt-10-it-isnt-a-land-next-to-mordor#comments</comments>
		<pubDate>Thu, 28 Aug 2008 10:45:06 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[galgwt]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4240</guid>
		<description><![CDATA[GWT has long had a project that aimed to give rich support for Google APIs called GALGWT, or "Google API Libraries for Google Web Toolkit". This project has stepped up to higher gear recently, and we have seen the GALGWT 1.0 release candidate appear. What is in GALGWT? The project is a collection of libraries <a href="http://ajaxian.com/archives/galgwt-10-it-isnt-a-land-next-to-mordor">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>GWT has long had a project that aimed to give rich support for Google APIs called <a href="http://code.google.com/p/gwt-google-apis/">GALGWT</a>, or "Google API Libraries for Google Web Toolkit".</p>
<p>This project has stepped up to higher gear recently, and we have seen the <a href="http://groups.google.com/group/Google-Web-Toolkit-Contributors/browse_thread/thread/323f4fb0e6608ad7">GALGWT 1.0 release candidate appear</a>.</p>
<p><b>What is in GALGWT?</b></p>
<blockquote><p>
The project is a collection of libraries that provide Java language bindings<br />
and API specific 'plumbing' for some Google JavaScript APIs. The goal is to<br />
make it easy for developers to use these JavaScript APIs with GWT. Libraries<br />
available at this time include a new version of Gears, as well as new<br />
libraries for Gadgets and the Google AJAX Search API.</p>
<p><b>Gears 1.1 Library</b></p>
<p>A new version of the Gears library is available. In addition to the earlier<br />
version's support for the Gears LocalServer, Database, and WorkerPool, 1.1<br />
adds integrated support for offline applications and updated sample<br />
applications. The bindings have also been refactored to use GWT 1.5<br />
JavaScript overlay types and a new package hierarchy.</p>
<p><b>Gadgets 1.0 Library</b></p>
<p>The Gadgets library simplifies gadget development with GWT by automatically<br />
generating a Gadget specification from Java source and inserting a selection<br />
script in the specification much like a regular GWT project. After compiling<br />
your gadget with GWT, all files are in place to publish your gadget. This<br />
version currently supports the legacy Gadgets API based on the _IG_...<br />
 namespace.</p>
<p><b>Google AJAX Search 1.0 Library</b></p>
<p>The Google AJAX Search API lets you put Google Search in your web pages,<br />
including Web, Local, and Multimedia searches. This library allows you to<br />
access the API from Java code compiled with the GWT compiler without having<br />
to write additional JavaScript code.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/galgwt-10-it-isnt-a-land-next-to-mordor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SmartGWT: LGPL GWT wrapper on SmartClient</title>
		<link>http://ajaxian.com/archives/smartgwt-lgpl-gwt-wrapper-on-smartclient</link>
		<comments>http://ajaxian.com/archives/smartgwt-lgpl-gwt-wrapper-on-smartclient#comments</comments>
		<pubDate>Tue, 19 Aug 2008 13:36:55 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[SmartClient]]></category>
		<category><![CDATA[SmartGWT]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4126</guid>
		<description><![CDATA[Sanjiv Jivan, original creator of GWT-Ext, posted on SmartGWT, a new wrapper on top of SmartClient. Charles Kendrick of Isomorphic, creator of SmartClient, announced the new project as well as the approach they have taken: we’ve taken an approach of generating GWT code from SmartClient’s documentation, combined with hand-coding portions that can’t feasibly be generated. <a href="http://ajaxian.com/archives/smartgwt-lgpl-gwt-wrapper-on-smartclient">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jroller.com/sjivan/entry/smartgwt_gwt_api_s_for"><img src="http://www.jroller.com/sjivan/resource/grid-frozen-col.jpg" border="0" style="float: right; padding: 8px;" /></a></p>
<p>Sanjiv Jivan, original creator of GWT-Ext, posted on <a href="http://www.jroller.com/sjivan/entry/smartgwt_gwt_api_s_for">SmartGWT</a>, a new wrapper on top of <a href="http://www.smartclient.com/index.jsp#_Welcome">SmartClient</a>.</p>
<p>Charles Kendrick of Isomorphic, creator of SmartClient, <a href="http://www.isomorphic.dreamhosters.com/?p=51">announced the new project</a> as well as the approach they have taken:</p>
<blockquote><p>
we’ve taken an approach of generating GWT code from SmartClient’s documentation, combined with hand-coding portions that can’t feasibly be generated. By tweaking our documentation set to contain additional metadata (some of it GWT-specific), we’ve been able to generate code you might not otherwise expect, including things like enumerated constants and convenience constructors.</p>
<p>What this means is that the first release of SmartGWT will provide the complete SmartClient API, fully documented.
</p></blockquote>
<p>You can now write code such as:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-10">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">import</span> org.<span style="color: #006600;">smartgwt</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">import</span> org.<span style="color: #006600;">smartgwt</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">widgets</span>.<span style="color: #006600;">Button</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #006600;">Button</span> button = <span style="color: #003366; font-weight: bold;">new</span> Button<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"myButton"</span>, <span style="color: #3366CC;">"Click me"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">button.<span style="color: #006600;">addClickListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> ClickListener<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color:#006600; font-weight:bold;">&#40;</span>ClickEvent event<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; ISC.<span style="color: #006600;">say</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"Hello World!"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Sanjiv Jivan joined the project under the terms that Isomorphic sign a document that said:</p>
<blockquote><p>
The founders of Isomorphic Software are committed to keeping a complete, up-to-date version of SmartClient available under an LGPL license.</p>
<p>We continue to invest heavily in building new features, skins, tutorials, and tools for SmartClient LGPL.</p>
<p>We think it's normal and expected that some people receive great benefit from LGPL software and do not pay. The spirit of open source, in a nutshell, is that releasing free software creates so much wealth that the portion that flows back to you is more than enough.</p>
<p>Sincerely,<br />
    Charles Kendrick<br />
    Alex Shvedoff
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/smartgwt-lgpl-gwt-wrapper-on-smartclient/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaScript Overlay Types in GWT</title>
		<link>http://ajaxian.com/archives/javascript-overlay-types-in-gwt</link>
		<comments>http://ajaxian.com/archives/javascript-overlay-types-in-gwt#comments</comments>
		<pubDate>Tue, 05 Aug 2008 13:10:48 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4012</guid>
		<description><![CDATA[Bruce Johnson of the GWT team has continued the deep dive into GWT with a posting on a new GWT 1.5 feature: JavaScript overlay types. This feature goes beyond the JNSI technique to "make it easy to integrate entire families of JavaScript objects into your GWT project. There are many benefits of this technique, including <a href="http://ajaxian.com/archives/javascript-overlay-types-in-gwt">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Bruce Johnson of the GWT team has continued the <a href="http://googlewebtoolkit.blogspot.com/2008/08/getting-to-really-know-gwt-part-2.html">deep dive into GWT</a> with a posting on a new GWT 1.5 feature: JavaScript overlay types. This feature goes beyond the JNSI technique to "make it easy to integrate entire families of JavaScript objects into your GWT project. There are many benefits of this technique, including the ability to use your Java IDE's code completion and refactoring capabilities even as you're working with untyped JavaScript objects."</p>
<p>The first example that Bruce gives is to mix JSON objects with Java:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-16');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-16">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> jsonData = <span style="color:#006600; font-weight:bold;">&#91;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #3366CC;">"FirstName"</span> : <span style="color: #3366CC;">"Jimmy"</span>, <span style="color: #3366CC;">"LastName"</span> : <span style="color: #3366CC;">"Webber"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #3366CC;">"FirstName"</span> : <span style="color: #3366CC;">"Alan"</span>,&nbsp; <span style="color: #3366CC;">"LastName"</span> : <span style="color: #3366CC;">"Dayal"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #3366CC;">"FirstName"</span> : <span style="color: #3366CC;">"Keanu"</span>, <span style="color: #3366CC;">"LastName"</span> : <span style="color: #3366CC;">"Spoon"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #3366CC;">"FirstName"</span> : <span style="color: #3366CC;">"Emily"</span>, <span style="color: #3366CC;">"LastName"</span> : <span style="color: #3366CC;">"Rudnick"</span> <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<div class="igBar"><a href="javascript:showCodeTxt('java-17');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-17">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">// An overlay type</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">class</span> Customer <span style="color: #000000; font-weight: bold;">extends</span> JavaScriptObject <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// Overlay types always have protected, zero-arg ctors</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">protected</span> Customer<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// Typically, methods on overlay types are JSNI</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">native</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> getFirstName<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #808080; font-style: italic;">/*-{ return this.FirstName; }-*/</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">native</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> getLastName<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; <span style="color: #808080; font-style: italic;">/*-{ return this.LastName;&nbsp; }-*/</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// Note, though, that methods aren't required to be JSNI</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> getFullName<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> getFirstName<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color: #ff0000;">" "</span> + getLastName<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<div class="igBar"><a href="javascript:showCodeTxt('java-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-18">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">// the glue</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">class</span> MyModuleEntryPoint <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onModuleLoad<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Customer c = getFirstCustomer<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// Yay! Now I have a JS object that appears to be a Customer</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AWindow+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Window</span></a>.<span style="color: #006600;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"Hello, "</span> + c.<span style="color: #006600;">getFirstName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// Use JSNI to grab the JSON object we care about</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// The JSON object gets its Java type implicitly based on the method's return type</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">native</span> Customer getFirstCustomer<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// Get a reference to the first customer in the JSON array from earlier</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> $wnd.<span style="color: #006600;">jsonData</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Bruce then shows us some performance wins that you get, as GWT gets to do a lot of inlining:</p>
<blockquote><p>
A quick digression for compiler geeks. Another neat thing about overlay types is that you can augment the Java type without disturbing the underlying JavaScript object. In the example above, notice that we added the getFullName() method. It's purely Java code — it doesn't exist on the underlying JavaScript object — and yet the method is written in terms of the underlying JavaScript object. In other words, the Java view of the JavaScript object can be richer in functionality than the JavaScript view of the same object but without having to modify the underlying JS object, neither the instance nor its prototype.</p>
<p>(This is still part of the digression.) This cool wackiness of adding new methods to overlay types is possible because the rules for overlay types by design disallow polymorphic calls; all methods must be final and/or private. Consequently, every method on an overlay type is statically resolvable by the compiler, so there is never a need for dynamic dispatch at runtime. That's why we don't have to muck about with an object's function pointers; the compiler can generate a direct call to the method as if it were a global function, external to the object itself. It's easy to see that a direct function call is faster than an indirect one. Better still, since calls to methods on overlay types can be statically resolved, they are all candidates for automatic inlining, which is a Very Good Thing when you're fighting for performance in a scripting language.
</p></blockquote>
<p>From this Java code:</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-19');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-19">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">class</span> MyModuleEntryPoint <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onModuleLoad<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; JsArray&lt;customer&gt; cs = getCustomers<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #993333;">int</span> i = <span style="color:#800000;">0</span>, n = cs.<span style="color: #006600;">length</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; i &lt;n; ++i<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AWindow+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Window</span></a>.<span style="color: #006600;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"Hello, "</span> + cs.<span style="color: #006600;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">getFullName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #808080; font-style: italic;">// Return the whole JSON array, as is</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">native</span> JsArray&lt;Customer&gt; getCustomers<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #808080; font-style: italic;">/*-{</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">&nbsp; &nbsp; return $wnd.jsonData;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">&nbsp; }-*/</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The compiler inlines away to get to the followinig (not obfuscated to see):</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-20');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-20">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">function</span> $onModuleLoad<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> cs, i, n;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; cs = $wnd.<span style="color: #006600;">jsonData</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color:#006600; font-weight:bold;">&#40;</span>i = <span style="color:#800000;">0</span>, n = cs.<span style="color: #006600;">length</span>; i &lt;n; ++i<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $wnd.<span style="color: #006600;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'Hello, '</span> + <span style="color:#006600; font-weight:bold;">&#40;</span>cs<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color: #006600;">FirstName</span> + <span style="color: #3366CC;">' '</span> + cs<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color: #006600;">LastName</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p></customer></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/javascript-overlay-types-in-gwt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

