<?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; Framework</title>
	<atom:link href="http://ajaxian.com/by/topic/framework/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 02 Feb 2012 22:23:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Yo Yo, develop killer cross platform mobile Web apps with Jo</title>
		<link>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo</link>
		<comments>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo#comments</comments>
		<pubDate>Thu, 07 Oct 2010 06:33:25 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10415</guid>
		<description><![CDATA[Dave Balmer (formerly YUI, currently working with me on webOS) has created a fantastic cross platform mobile Web framework called Jo. What do I mean by cross platform? webOS, iOS, Android, Symbian, Safari, Chrome, and even Dashboard Widgets. It's philosophy is: If you want to jam an existing web page into an application framework, jo <a href="http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://joapp.com/"><img src="http://ajaxian.com/wp-content/images/joapp.png"/></a></p>
<p>Dave Balmer (formerly YUI, currently working with me on webOS) has created a fantastic cross platform mobile Web framework called <a href="http://joapp.com/">Jo</a>. What do I mean by cross platform? webOS, iOS, Android, Symbian, Safari, Chrome, and even Dashboard Widgets. It's philosophy is:</p>
<blockquote><p>
If you want to jam an existing web page into an application framework, jo probably isn't for you. jo is designed to create applications. While it will play nicely with a mixture of new and old web development techniques, it uses HTML5 as a development stack and does not require direct DOM manipulation.
</p></blockquote>
<p>You can setup your views in JavaScript, or also declaratively using special tags:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-2">
<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;jodialog&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; <span style="color: #009900;">&lt;jofieldset&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; &nbsp; <span style="color: #009900;">&lt;joinput&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/joinput&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;jobutton&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jobutton&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; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jofieldset&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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jodialog&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;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Take a look at the code and how it plays in action:</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/wOjfKA23Of8?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wOjfKA23Of8?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raphaël 1.5 Released</title>
		<link>http://ajaxian.com/archives/raphael-1-5-released</link>
		<comments>http://ajaxian.com/archives/raphael-1-5-released#comments</comments>
		<pubDate>Tue, 31 Aug 2010 10:30:55 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10119</guid>
		<description><![CDATA[Dmitry Baranovskiy and team have released another version of Raphaël, an excellent drawing and animation library backed by SVG (VML on Internet Explorer). New features in Raphaël 1.5 include custom attributes and keyframes. Keyframes can be defined similar to CSS3 Animations: PLAIN TEXT JAVASCRIPT: &#160; el.animate&#40;&#123; &#160; &#160; "20%": &#123;cy: 200, easing: "&#62;"&#125;, &#160; &#160; <a href="http://ajaxian.com/archives/raphael-1-5-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><center><a href="http://raphaeljs.com/"><img src="http://ajaxian.com/wp-content/images/raphael_logo.png" alt="" title="raphael_logo" width="131" height="116" class="aligncenter size-full wp-image-10120" /></a></center><br />
<a href="http://dmitry.baranovskiy.com/post/raphael-1.5">Dmitry Baranovskiy and team have released</a> another version of <a href="http://raphaeljs.com/">Raphaël</a>, an excellent drawing and animation library backed by SVG (VML on Internet Explorer). New features in Raphaël 1.5 include custom attributes and keyframes. Keyframes can be defined similar to CSS3 Animations:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">el.<span style="color: #006600;">animate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #3366CC;">"20%"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>cy: <span style="color:#800000;">200</span>, easing: <span style="color: #3366CC;">"&gt;"</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; &nbsp; <span style="color: #3366CC;">"40%"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>cy: <span style="color:#800000;">100</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; <span style="color: #3366CC;">"60%"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>cy: <span style="color:#800000;">200</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; &nbsp; <span style="color: #3366CC;">"80%"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>cy: <span style="color:#800000;">300</span>, callback: <span style="color: #003366; font-weight: bold;">function</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;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</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; <span style="color: #3366CC;">"100%"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>cy: <span style="color:#800000;">200</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;"><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#800000;">5000</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><a href="http://raphaeljs.com/bounce.html">Check out a demo</a> of the new keyframe animation.</p>
<p><object type="text/html" data="http://raphaeljs.com/bounce.html" style="width: 500px; height: 400px; overflow: hidden;"></object></p>
<p>Custom attributes is also a new feature that makes it easier to do things like animating a portion of an attribute segment (<a href="http://raphaeljs.com/growing-pie.html">demo</a>).</p>
<p><object type="text/html" data="http://raphaeljs.com/growing-pie.html" style="width: 500px; height: 400px; overflow: hidden;"></object></p>
<p>Full release notes:</p>
<ul>
<li>fixed IE8 issue with the HTML element named Raphael
</li>
<li>fixed precision for arcs in IE
</li>
<li>added caching to getPointAtSegmentLength function
</li>
<li>added ability to do more than one animation of an element at the same time
</li>
<li>added "cubic-bezier()" as an easing method
</li>
<li>added new syntax for animation (keyframes)
</li>
<li>hsl2rgb now accept h as degree (0..360), s and b as % (0..100)
</li>
<li>show="new" instead of target="blank" for SVG
</li>
<li>added angle method
</li>
<li>added snapTo method
</li>
<li>cached popup || activeX for IE
</li>
<li>fixed insertAfter
</li>
<li>fixed timeouts for animation
</li>
<li>added customAttributes
</li>
</ul>
<p>BTW I just noticed that Dmitry is now at <a href="http://sencha.com/">Sencha</a>; they're assembling quite the team! Congrats Dmitry!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/raphael-1-5-released/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2010: Web Fonts Are Here and Ready to Use</title>
		<link>http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use</link>
		<comments>http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use#comments</comments>
		<pubDate>Wed, 19 May 2010 18:12:56 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Typography]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9338</guid>
		<description><![CDATA[There's an old saying: "It took me ten years to be an overnight success." We've been waiting for web fonts for at least a decade, and 2010 will finally be the year that web fonts go mainstream. This is in no small part to the work both Typekit and Google have been doing. Today they <a href="http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a style="display: block;" href="http://ajaxian.com/wp-content/images/Tangerine.png"><img class="aligncenter size-full wp-image-9339" style="text-align: center;" title="Tangerine" src="http://ajaxian.com/wp-content/images/Tangerine.png" alt="" width="412" height="73" /></a><br />
There's an old saying: "It took me ten years to be an overnight success." We've been waiting for web fonts for at least a decade, and 2010 will finally be the year that web fonts go mainstream.</p>
<p>This is in no small part to the work  both <a href="http://typekit.com/">Typekit</a> and Google have been doing. Today they both <a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html">announced</a> <a href="http://googlecode.blogspot.com/2010/05/introducing-webfont-loader-in.html">some very cool</a> things in this area.</p>
<p>First up, Google announced that they are releasing high quality open source fonts in the <a href="http://code.google.com/webfonts">Google Font Directory</a>. Since these are open source you can even download the original font files yourself at the <a href="http://code.google.com/p/googlefontdirectory/">font code.google.com project</a>.</p>
<p style="text-align: center;"><a href="http://code.google.com/webfonts"><img class="aligncenter size-full wp-image-9340" title="fontdirectory" src="http://ajaxian.com/wp-content/images/fontdirectory.png" alt="" width="442" height="375" /></a></p>
<p>Next, Google has made it very easy to include these fonts into your page using the new <a href="http://code.google.com/apis/webfonts/">Google Font API</a>. To use a font you simply drop some HTML into your page similar to the following, specifying the font you want to use:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-6">
<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;"><span style="color: #009900;"><a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">&lt;link</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">'http://fonts.googleapis.com/css?family=Tangerine'</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: #000066;">rel</span>=<span style="color: #ff0000;">'stylesheet'</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; <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'text/css'</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;</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;">body { font-family: 'Tangerine', serif; } </div>
</li>
</ol>
</div>
</div>
</div>
<p>Doesn't get simpler than that. The new API does alot of things for you <a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html">behind the scenes</a>:</p>
<blockquote><p>Google’s serving infrastructure takes care of converting the font into a  format compatible with any modern browser (including Internet Explorer 6  and up), sends just the styles and weights you select, and the font  files and CSS are tuned and optimized for web serving. For example,  cache headers are set to maximize the likelihood that the fonts will be  served from the browser’s cache with no need for a network roundtrip,  even when the same font is linked from different websites.</p>
<p>These  fonts also work well with CSS3 and HTML5 styling, including drop  shadows, rotation, etc. In addition, selecting these fonts in your CSS  works just the same as for locally installed fonts, facilitating clean  separation of content and presentation.</p></blockquote>
<p>On a related front, <a href="http://typekit.com/">Typekit</a> and Google <a href="http://googlecode.blogspot.com/2010/05/introducing-webfont-loader-in.html">announced</a> a new <a href="http://code.google.com/apis/webfonts/docs/webfont_loader.html">Web Font Loader</a> that smooths over many of the differences around loading web fonts on a page:</p>
<blockquote><p>The WebFont Loader puts the developer in control of how web fonts are  handled by various browsers. The API fires JavaScript events at certain  points, for example when the web font completes downloading. With these  events, developers can control how web fonts behave on a site so that  they download consistently across all browsers. In addition, developers  can set the fallback font's size to more closely match the web font, so  content doesn't reflow after loading.</p>
<p>Furthermore, the WebFont  Loader is designed to make it easy to switch between different providers  of web fonts, including Google, Typekit, and others. The code is  modular, and we expect to add modules for other major web font providers  in coming weeks.</p></blockquote>
<p>It's great to see <a href="http://typekit.com/">Typekit</a> involved in this; they are a real pioneer in this area and have helped make fonts on the web a reality.</p>
<p><a href="http://typekit.com/"><img class="aligncenter size-full wp-image-9341" title="typekit-site-logo" src="http://ajaxian.com/wp-content/images/typekit-site-logo.gif" alt="" width="95" height="25" /></a></p>
<p>To see all these pieces together navigate over to <a href="http://www.smashingmagazine.com/">Smashing Magazine</a> which relaunched their site using these technologies.</p>
<p>Congrats to the Google Web Fonts and Themes team, including <a href="http://www.advogato.org/person/raph/">Raph Levien</a>, Jeremie Lenfant-Engelmann, <a href="http://mindgarden.de/">Marc Tobias Kunisch</a>, <a href="http://www.ming-ling.net/wfatf/">Meslissa Louie</a>, and David Kuettel.</p>
<p><em>[Disclosure: I work for Google and know the Web Fonts team. However, even if I didn't, I would still be excited about this since I've been waiting for web fonts to happen <a href="http://www.crazyfads.com/90s.htm">since the 90s</a>!]</em></link>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>LunaScript: A new language and platform to take your Web 2.0 apps to the moon?</title>
		<link>http://ajaxian.com/archives/lunascript-a-new-language-and-platform-to-take-your-web-2-0-apps-to-the-moon</link>
		<comments>http://ajaxian.com/archives/lunascript-a-new-language-and-platform-to-take-your-web-2-0-apps-to-the-moon#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:46:05 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8524</guid>
		<description><![CDATA[A Googler and a Facebooker were in a pub discussing the complexities of building out a rich modern Web application. There are a ton of dependencies, and you need to be proficient in multiple languages and tools (JavaScript, HTML, CSS, SQL/NoSQL, backend languages, build tools, etc). Well, they may not have been in a pub.... <a href="http://ajaxian.com/archives/lunascript-a-new-language-and-platform-to-take-your-web-2-0-apps-to-the-moon">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>A Googler and a Facebooker were in a pub discussing the complexities of building out a rich modern Web application. There are a ton of dependencies, and you need to be proficient in multiple languages and tools (JavaScript, HTML, CSS, SQL/NoSQL, backend languages, build tools, etc).</p>
<p>Well, they may not have been in a pub.... but a deadly duo did get together to try to solve this problem.</p>
<p>Dustin Moskovitz (Facebook co-founder and former CTO) and former-Googler/Facebooker Justin Rosenstein decided to try something different when they started to implement a Collaborative Information Manager tool at their new startup <a href="http://asana.com/">Asana</a>. They have created a new high level language that is part JavaScript, part Protocol Buffers. The language is <a href="http://asana.com/luna">LunaScript</a>.</p>
<p>What was their motivation?</p>
<blockquote><p>
 All of us on the Asana team have deep backgrounds writing rich web applications at companies like Google and Facebook. We've been continually frustrated by how long it takes to write software, and by a nagging feeling that in some deep sense we've been writing the same code over and over. Even when using the latest and greatest frameworks and disciplines, writing fast, highly interacting web applications involves a lot of accidental complexity:</p>
<p>First you need server code to figure out what data the browser needs. Hopefully you have an ORM layer, but you still need to carefully structure your code to minimize your backend dispatches, and you need to carefully keep that in sync with your front-end code lest you don't fetch enough data or hurt performance by fetching too much. If it's a Web 2.0-style app, you re-implement a ton of that server-side code in JavaScript, once for creating the page and then again as controller code for keeping it up to date and consistent. And when the user changes something, you bottle that up -- typically in a custom over-the-wire format -- and send it as an XHR to the server. The server has to de-serialize it into different data structures in a different language, notify the persistence store, figure out what other clients care about the change, and send them a notification over your Comet pipe, which is handled by yet more JavaScript controller code. Offline support? More code.</p>
<p>This is not a one-off task: it's rote work that adds complexity to every feature that you build in every application. By the time that you are done with all this, the important and novel parts of your application are only around 10% of your code. We wondered whether we could build a programming system in which we just wrote that 10% -- the essential complexity -- and a compiler handled the other 90%.
</p></blockquote>
<p>And this lead them to their solution:</p>
<blockquote><p>
Inspired by <a href="http://en.wikipedia.org/wiki/Incremental_computing">incremental computing</a>, we're building Lunascript as a simple way to write modern web applications.  Lunascript has a syntax and easy of use reminiscent of JavaScript, but a powerful pure-functional lazily-evaluated semantics historically confined to academic languages.</p>
<p>
A Lunascript application specifes a data model and a function from the model to the view or user interface, annotated with handler functions from user inputs to model mutations. From this the Lunascript compiler produces a functioning Web2.0 application -- the client-side JavaScript, the server-side SQL, and everything in between -- complete with real-time bidirectional data synchronization.  There's no need to write separate code to help the server figure out which values need to be sent to the client: the server can do this by simulating the UI. Because a LunaScript application only specifies how the UI should look given the current data (rather than how the UI should be updated as changes happen) it's impossible to write a UI that loads correctly but does not stay correct as changes are made.
</p>
</blockquote>
<p>"What does it look like?" I hear you cry. Time for a hello world, and since Comet is in the mix, that means a chat server:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-8');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-8">
<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: #009900; font-style: italic;">// Some of our currently implemented syntax isn't quite this clean, but it's</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: #009900; font-style: italic;">// fairly close and this is the direction we're going.</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: #003366; font-weight: bold;">class</span> World <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// &quot;1.&quot; serves the same purpose as &quot;= 1&quot; does in Google protocol buffer syntax.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">1</span>. <span style="color: #006600;">ChatMessage</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span> messages;</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>
<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;">class</span> ChatMessage <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:#800000;">1</span>. <span style="color: #006600;">User</span> user;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">2</span>. <span style="color: #006600;">string</span> text;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">class</span> Session <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">1</span>. <span style="color: #006600;">User</span> user;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#800000;">2</span>. <span style="color: #006600;">String</span> new_comment;</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>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">return</span> fn<span style="color:#006600; font-weight:bold;">&#40;</span>world, browser, session<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> renderMessage = fn<span style="color:#006600; font-weight:bold;">&#40;</span>message<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: #009900; font-style: italic;">// Most style information omitted to improve readability.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> bubble_style = <span style="color:#006600; font-weight:bold;">&#123;</span> background: <span style="color: #3366CC;">'#b7e0ff'</span>, padding: <span style="color:#800000;">7</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;</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: #000066; font-weight: bold;">return</span> &lt;div&gt;&nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// XML literals are first-class primitives.</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; &lt;img src=message.<span style="color: #006600;">user</span>.<span style="color: #006600;">small_pic_url</span> /&gt;</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; &lt;div style=bubble_style&gt;</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; &lt;b&gt; message.<span style="color: #006600;">user</span>.<span style="color: #006600;">name</span>, <span style="color: #3366CC;">': '</span> &lt;/b&gt;</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; &lt;div&gt; message.<span style="color: #006600;">text</span> &lt;/div&gt;</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; &lt;/div&gt;</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; &lt;/div&gt;;</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: #003366; font-weight: bold;">var</span> postMessage = fn<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: #009900; font-style: italic;">// Only handler functions can request data mutations.</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; messages += ChatMessage <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; &nbsp; user: session.<span style="color: #006600;">user</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; text: session.<span style="color: #006600;">new_comment</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; &nbsp; session.<span style="color: #006600;">new_comment</span> := <span style="color: #3366CC;">''</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: #000066; font-weight: bold;">return</span> &lt;table&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &lt;tr&gt;&lt;td&gt;</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; messages.<span style="color: #006600;">map</span><span style="color:#006600; font-weight:bold;">&#40;</span>renderMessage<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; &lt;<span style="color: #0066FF;">/td&gt;&lt;/</span>tr&gt;</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; &lt;tr&gt;&lt;td&gt;</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; &lt;img src=<span style="color:#006600; font-weight:bold;">&#40;</span>session.<span style="color: #006600;">user</span>.<span style="color: #006600;">small_pic_url</span><span style="color:#006600; font-weight:bold;">&#41;</span> /&gt;</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; &lt;div&gt;</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; &lt;input data=session.<span style="color: #006600;">user</span>.<span style="color: #006600;">name</span> /&gt; &lt;b&gt;<span style="color: #3366CC;">' (your nickname)'</span>&lt;/b&gt;</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; &lt;form onsubmit=postMessage&gt;</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; &nbsp; &lt;input data=session.<span style="color: #006600;">new_comment</span> hasFocus=<span style="color: #003366; font-weight: bold;">true</span> /&gt;</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; &lt;/form&gt;</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; &lt;/div&gt;</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; &lt;<span style="color: #0066FF;">/td&gt;&lt;/</span>tr&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &lt;/table&gt;;</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>You will notice the protobufferness at the top, and the <code>fn</code> of less characters, and E4X-like.</p>
<p>To learn more, let's listen in to Dustin as he gives us a walk through the world of LunaScript:</p>
<p><object id="csSWF" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="374" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0"><param name="src" value="http://asana.com/luna/demo/demo_controller.swf"/><param name="bgcolor" value="#1a1a1a"/><param name="quality" value="best"/><param name="allowScriptAccess" value="always"/><param name="allowFullScreen" value="true"/><param name="scale" value="showall"/><param name="flashVars" value="autostart=false"/><embed name="csSWF" src="http://asana.com/luna/demo/demo_controller.swf" width="480" height="374" bgcolor="#1a1a1a" quality="best" allowScriptAccess="always" allowFullScreen="true" scale="showall" flashVars="autostart=false&#038;thumb=FirstFrame.png&#038;thumbscale=45&#038;color=0x000000,0x000000" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object></p>
<p>I talked to the guys and asked a few questions which they answered..... what questions do you have for them though? Are you excited about what a higher level abstraction could give you? Or do you like to be close to the metal?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/lunascript-a-new-language-and-platform-to-take-your-web-2-0-apps-to-the-moon/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Wouldn&#8217;t it be Swell to be able to drag and drop between Web and desktop</title>
		<link>http://ajaxian.com/archives/wouldnt-it-be-swell-to-be-able-to-drag-and-drop-between-web-and-desktop</link>
		<comments>http://ajaxian.com/archives/wouldnt-it-be-swell-to-be-able-to-drag-and-drop-between-web-and-desktop#comments</comments>
		<pubDate>Tue, 21 Jul 2009 11:06:52 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7128</guid>
		<description><![CDATA[Christophe Eblé has kindly written a guest post on Swell JS and his drag and drop manager that works with your desktop. Here he tells us more: At Swell we were about to create a Drag &#038; Drop Manager just like in other Javascript libraries such as Jquery, YUI, Mootools, Scriptaculous, but we were not <a href="http://ajaxian.com/archives/wouldnt-it-be-swell-to-be-able-to-drag-and-drop-between-web-and-desktop">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/swelljs.png" alt="" title="swelljs" width="500" height="192" class="alignnone size-full wp-image-7129" /></p>
<p><em>Christophe Eblé has kindly written a guest post on <a href="http://justswell.org/">Swell JS</a> and his drag and drop manager that works with your desktop. Here he tells us more:</em></p>
<p>At Swell we were about to create a Drag &#038; Drop Manager just like in other Javascript libraries such as Jquery, YUI, Mootools, Scriptaculous, but we were not really satisfied with this decision.</p>
<p>What motivated us to adopt another strategy is that we didn't want to provide yet another simulated solution but instead a drag &#038; drop library that would use the real power of the web browser.</p>
<p>We've been faced to a lot of problems and we are still struggling with API differences. The Pros and cons of using system drag&#038;drop over simulated solutions:</p>
<p><b>Pros</b></p>
<ul>
<li>Accuracy and performance, mouse move tricks to position an element under the pointer and detect target collision are things of the past, system DD is wicked fast!
</li>
<li>system DD can be anything you like (simple images or complex dom nodes) and can interact within your browser window, the chrome (search field, address bar...) or tabs (if the browser allows it, FF 3.5 does it right) and even your OS.
</li>
<li>system DD through the dataTransfer object can carry powerful meta information that are not necessary the dragged object itself, this can be arbitrary text (JSON data for ex.), urls and for the latest browsers complex data types see <a href="https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types">this</a>
</li>
<li>system DD has true DOM Events
</li>
</ul>
<p><b>Cons</b></p>
<ul>
<li>Browser differences in this subject are a real pain, I couldn't list all the oddities here :)
</li>
</ul>
<p>The drag &#038; drop implementation in Swell is still at an early stage, and not officially released but here's some details on what we're working on.</p>
<ul>
<li>Provide a single way to create native drag &#038; drop objects in every possible browser
</li>
<li>Provide setDragImage method on browsers that don't support it yet
</li>
<li>Provide a DD Manager that acts as a container for all drag and drop events on which you can place your handlers, cancel events, or quickly batch all the DD objects on the page. (useful when you deal with dozens of DD Objects)
</li>
<li>Provide a way to associate complex metadata with each DD objects
</li>
<li>Provide a way to easily create visual feedback for your DD Objects
</li>
<li>Tight integration with our <a href="http://trac.justswell.org/browser/trunk/Core/Event.js">event</a> <a href="http://trac.justswell.org/browser/trunk/Core/CustomEvent.js">library</a>
</li>
<li>and much more...
</li>
</ul>
<p>There's a TRAC available on the project with a roadmap and release dates, a blog, and even a SVN repo that you can check out. Be careful, as I said above the library is still in heavy development and is missing docs! We are looking for any kind of help and just hope to receive massive feedback ;).</p>
<p>See some examples in action:</p>
<p><object width="480" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5637267&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5637267&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="300"></embed></object></p>
<p>In the video, we are providing a simple yet powerful application to import a RSS feed in your webpage. The classical way is to type in the feed URL  and then getting redirected to it, which commonly takes 3 to 5 steps.  With this implementation you just have to drop the RSS icon onto an appropriate target and that’s all folks!</p>
<p>We use YQL and JSONP to transform RSS into JSON and of course a Swell Element to dynamically attach the behavior to the webpage:</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;">var</span> dd2 = <span style="color: #003366; font-weight: bold;">new</span> Swell.<span style="color: #006600;">Lib</span>.<span style="color: #006600;">DD</span>.<span style="color: #006600;">Droppable</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'moo'</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;">dd2.<span style="color: #006600;">ondrop</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> file = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getData</span><span style="color:#006600; font-weight:bold;">&#40;</span>e, <span style="color: #3366CC;">'DD_URL'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color:#006600; font-weight:bold;">&#41;</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; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #0066FF;">/^http\:\/</span>\<span style="color: #009900; font-style: italic;">//i.test(file) !== true) {</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: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></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;">&#40;</span><span style="color: #3366CC;">'debug'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">setHTML</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'loading…'</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; e.<span style="color: #006600;">target</span>.<span style="color: #006600;">className</span> = <span style="color: #3366CC;">''</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; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> yqlRequest = <span style="color: #3366CC;">'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20rss%20where%20url=%22'</span>+file+<span style="color: #3366CC;">'%22&amp;amp;format=json&amp;amp;callback=moo'</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; html.<span style="color: #006600;">script</span><span style="color:#006600; font-weight:bold;">&#40;</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; <span style="color: #3366CC;">'type'</span> : <span style="color: #3366CC;">'text/javascript'</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: #3366CC;">'src'</span>&nbsp; : yqlRequest</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color:#006600; font-weight:bold;">&#40;</span>document.<span style="color: #006600;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'head'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#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>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/wouldnt-it-be-swell-to-be-able-to-drag-and-drop-between-web-and-desktop/feed</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>Ample SDK: Browser-in-a-Browser</title>
		<link>http://ajaxian.com/archives/ample-sdk-browser-in-a-browser</link>
		<comments>http://ajaxian.com/archives/ample-sdk-browser-in-a-browser#comments</comments>
		<pubDate>Wed, 10 Jun 2009 11:00:31 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6909</guid>
		<description><![CDATA[Sergey Ilinsky, formerly of Ajax pioneer Backbase, has created a new Ajax toolkit called Ample SDK. The best way to describe Ample SDK is that it's a browser-within-a-browser, but not in the visual sense. Rather, it aims to implement in JavaScript the stack of rendering technologies typically delegated to the browser. For example, Ample currently <a href="http://ajaxian.com/archives/ample-sdk-browser-in-a-browser">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/ample.png" alt="" title="Ample SDK" width="470" height="187" class="alignnone size-full wp-image-6911" /></p>
<p>Sergey Ilinsky, formerly of Ajax pioneer Backbase, has created a new Ajax toolkit called <a href="http://www.amplesdk.com/">Ample SDK</a>. The best way to describe Ample SDK is that it's a browser-within-a-browser, but not in the visual sense. Rather, it aims to implement in JavaScript the stack of rendering technologies typically delegated to the browser. For example, Ample currently lets you use Mozilla's <a href="http://www.mozilla.org/projects/xul/">XUL</a> to create cross-browser applications.</p>
<p>Here's an example of how you could use Ample SDK to render a XUL interface in the browser:</p>
<pre>&lt;body&gt;
    &lt;!-- other HTML code --&gt;
    &lt;script type="text/javascript"&gt;ample.open()&lt;/script&gt;
&lt;xul:menulist xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;
    &lt;xul:menupopup id="items-popup"&gt;
        &lt;xul:menuitem label="Item 0" value="0"/&gt;
        &lt;xul:menuitem label="Item 1" value="1"/&gt;
        &lt;xul:menuitem label="Item 2" value="2"/&gt;
    &lt;/xul:menupopup&gt;
&lt;/xul:menulist&gt;
    &lt;script type="text/javascript"&gt;ample.close()&lt;/script&gt;
    &lt;!-- other HTML code --&gt;
&lt;/body&gt;</pre>
<p>(Sorry for the old-school, ugly &lt;pre&gt; above--our code formatter chokes on XML namespaces, used in the XUL elements above.)</p>
<p><img src="http://ajaxian.com/wp-content/uploads/compatibility.png" alt="" title="Compatibility Table" width="470" height="117" class="alignnone size-full wp-image-6910" /></p>
<p>The Ample SDK <a href="http://www.amplesdk.com/ample/compatibility/">compatibility table</a>, shown above, gives you a sense of the scope of the project: to implement technologies like XUL, SVG, HTML 5, XHTML, and so forth, all in JavaScript--and render them across modern and legacy browsers like IE 5.5.</p>
<p>Ample even takes over CSS parsing:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-12');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-12">
<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;"><span style="color: #009900;"><a href="http://december.com/html/4/element/style.html"><span style="color: #000000; font-weight: bold;">&lt;style</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/ample+css"</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; &nbsp; @namespace &quot;http://www.w3.org/1999/xhtml&quot;;</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; b {</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; color: red;</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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/style&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>Check out the <a href="http://www.amplesdk.com/examples/">examples</a> and <a href="http://www.amplesdk.com/reference/">documentation</a> at the site. Note that <a href="http://www.amplesdk.com/licensing/">Ample is not (yet) open-source</a> but is free for non-commercial projects.</p>
<p>When Brendan Eich first hinted several years ago that the browsers would get <em>fast</em>, it spurred a lot of folks to wondering whether the future of feature innovation would be primarily in the JavaScript library space, and the browsers would focus on being JavaScript run-times and graphics abstract layers.</p>
<p>Ample SDK raises the question anew. Should we push the rendering layer to JavaScript libraries? What do you think?</p>
<p>And, what do you think of Ample?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ample-sdk-browser-in-a-browser/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Cappuccino 0.7: Aristo UI, Theme Engine, nib2cib, and more</title>
		<link>http://ajaxian.com/archives/cappuccino-07-aristo-ui-theme-engine-nib2cib-and-more</link>
		<comments>http://ajaxian.com/archives/cappuccino-07-aristo-ui-theme-engine-nib2cib-and-more#comments</comments>
		<pubDate>Wed, 20 May 2009 17:02:44 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6827</guid>
		<description><![CDATA[The Cappuccino team has announced Cappuccino 0.7. There are some fairly big improvements: Aristo New Look Open Sourced Sofa has been working on a new look, and Aristo has been released to the world via PSD. It is very cool that the look and feel has been open sourced. All the controls have been updated <a href="http://ajaxian.com/archives/cappuccino-07-aristo-ui-theme-engine-nib2cib-and-more">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The Cappuccino team has announced <a href="http://cappuccino.org/discuss/2009/05/20/cappuccino-07-now-available/">Cappuccino 0.7</a>.</p>
<p>There are some fairly big improvements:</p>
<p><b>Aristo New Look Open Sourced</b></p>
<p><img src="http://cappuccino.org/discuss/wp-content/uploads/2009/05/aristo.png"/></p>
<p>Sofa has been working on a new look, and <a href="http://github.com/280north/aristo/tree/master">Aristo</a> has been released to the world via PSD. It is very cool that the look and feel has been open sourced.</p>
<blockquote><p>
All the controls have been updated to use the new style, and we’ve added a few new controls as well, like checkboxes, radio buttons, and segmented controls.
</p></blockquote>
<p><b>Theming</b></p>
<blockquote><p>
We didn’t just build one new look for Cappuccino, though. Instead, we built an entirely new theme engine which will let anyone create a theme for Cappuccino. All the properties of the standard controls are fully themeable in all the different “theme states” (like “pushed”, “disabled”, “normal”, etc.). In the coming months, we’ll be sharing new themes with the community, and building a site for users to post their own themes for others to download and use.
</p></blockquote>
<p><b>Interface Builder</b></p>
<blockquote><p>
Those of you who come from a Cocoa background are used to using Apple’s <a href="http://developer.apple.com/tools/interfacebuilder.html">Interface Builder</a> tool to layout your Cocoa applications. Thanks to a technology in 0.7 called <a href="http://wiki.github.com/280north/cappuccino/nib2cib">nib2cib</a>, you can use Interface Builder to layout Cappuccino applications too. All of the classes supported in Cappuccino 0.7 that have Cocoa analogues are included. So, you can drag checkboxes, sliders, text fields, buttons, and lots more. You can even instantiate custom top level objects, or custom view subclasses, which will be converted to the right class in Cappuccino by the nib2cib tool. Once you’re done laying out the UI of your application with Interace Builder, you can use it’s target-action and outlet technology to build up its logic as well.
</p></blockquote>
<p><img src="http://cappuccino.org/discuss/wp-content/uploads/2009/05/temp-image_1_72.png"/></p>
<p>It is also cool that <a href="http://github.com/tlrobinson/narwhal/tree/master">Narwhal</a> an early implementation of the ServerJS work has made it in there. Great work guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/cappuccino-07-aristo-ui-theme-engine-nib2cib-and-more/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A peek under the hood of YUI3 &#8211; Satyen Desai on library architecture</title>
		<link>http://ajaxian.com/archives/a-peek-under-the-hood-of-yui3-satyen-desai-on-library-architecture</link>
		<comments>http://ajaxian.com/archives/a-peek-under-the-hood-of-yui3-satyen-desai-on-library-architecture#comments</comments>
		<pubDate>Fri, 15 May 2009 22:41:16 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6802</guid>
		<description><![CDATA[Talks about JavaScript are not a rare occasion any more, everybody has something to say about this wonderfully versatile language. Douglas Crockford taught us a lot about the language itself, John Resig and Peter Paul Koch taught us how browsers deal (and fail dealing) with it and there are dozens of screencasts of how to <a href="http://ajaxian.com/archives/a-peek-under-the-hood-of-yui3-satyen-desai-on-library-architecture">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Talks about JavaScript are not a rare occasion any more, everybody has something to say about this wonderfully versatile language. Douglas Crockford taught us a lot about the language itself, John Resig and Peter Paul Koch taught us how browsers deal (and fail dealing) with it and there are dozens of screencasts of how to use this or that language. </p>
<p>What most of these talks and videos have in common is application of JavaScript and how to deal with issues that will occur. Information about designing and architecting large JavaScript solutions on the other hand are rare. Satyen Desai now broke the silence and gave a great talk on the architecture and design decisions of the the <a href="http://developer.yahoo.com/yui/3/">third generation of the Yahoo User Interface library</a>:</p>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=13406817&#038;vid=5044557&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8818/85299985.jpeg&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=13406817&#038;vid=5044557&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8818/85299985.jpeg&#038;embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/5044557/13406817">Satyen Desai: &quot;YUI 3: Design Goals and Architecture&quot;</a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
<ul>
<li><a href="http://developer.yahoo.com/yui/theater/desai-yui3.html">Watch a larger resolution version and read the transcripts</a></li>
<li><a href="http://yuiblog.com/assets/desai-yui3.zip">download the slides</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/a-peek-under-the-hood-of-yui3-satyen-desai-on-library-architecture/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>Big News from Cappuccino: Aristo and Atlas</title>
		<link>http://ajaxian.com/archives/big-news-from-cappuccino-aristo-and-atlas</link>
		<comments>http://ajaxian.com/archives/big-news-from-cappuccino-aristo-and-atlas#comments</comments>
		<pubDate>Tue, 24 Feb 2009 22:20:12 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Toolkit]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6091</guid>
		<description><![CDATA[As it turns out, the Cappuccino team has been busy hacking away on some very impressive stuff. Today at the Future of Web Apps Miami, they announced Aristo and Atlas. Aristo Cappuccino worked with the popular design firm Sofa to create Aristo, a new open-source look-and-feel that will be freely available, including the source PSD <a href="http://ajaxian.com/archives/big-news-from-cappuccino-aristo-and-atlas">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/atlas.png" alt="" title="atlas" width="470" height="216" class="alignnone size-full wp-image-6092" /></p>
<p>As it turns out, the Cappuccino team has been busy hacking away on some very impressive stuff. Today at the <a href="http://events.carsonified.com/fowa/2009/miami">Future of Web Apps Miami</a>, they announced Aristo and <a href="http://280atlas.com">Atlas</a>.</p>
<h3>Aristo</h3>
<p>Cappuccino worked with the popular design firm Sofa to create Aristo, a new open-source look-and-feel that will be freely available, including the source PSD files complete with all layers intact. Anyone may use the look in their own projects. I didn't get a close look at the theme, but it seemed quite nice.</p>
<h3>Atlas</h3>
<p>Atlas continues Cappuccino's efforts to essentially port Apple's Cocoa stack to the Web. Atlas itself looks like a mash-up of Flex Builder and Interface Builder, all running in a browser, but continues to hew very closely to Interface Builder's approach. For example, just as with Interface Builder, you can bind properties on components to other components or to code through visual drag-and-drop operations (complete with the same blue connector line).</p>
<p>What's more, Atlas introduces the equivalent of Interface Builder's "nib" file (though I forget what their version is called).</p>
<p>In a live demo, Francisco Tolmasky built an RSS reader using an entirely visual approach. Francisco made it clear that he doesn't think code will go away, but instead, he feels the amount of code required to create a web application will dramatically decrease.</p>
<p>They also released a screencast:</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="293" id="viddler"><param name="movie" value="http://www.viddler.com/simple_on_site/1db9bf4d" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><embed src="http://www.viddler.com/simple_on_site/1db9bf4d" width="437" height="293" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>
<h3>Multi-platform Support, including iPhone JavaScript Wrappers</h3>
<p>Atlas also supports targeting multiple platforms, letting you create different interface files that bind to the same back-end code. They've even <em>bridged native APIs</em> and exposed them to the JavaScript environment and provide a PhoneGap-like way to run such applications as native iPhone applications. Wow.</p>
<p>It's hard to overstate how impressive the Atlas demo was; the release should be coming at some point in summer 2009.</p>
<p>Great job guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/big-news-from-cappuccino-aristo-and-atlas/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Xopus Application Framework: Objective-J Done Different</title>
		<link>http://ajaxian.com/archives/xopus-application-framework-objective-j-done-different</link>
		<comments>http://ajaxian.com/archives/xopus-application-framework-objective-j-done-different#comments</comments>
		<pubDate>Tue, 17 Feb 2009 16:00:34 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5981</guid>
		<description><![CDATA[The good folks at Xopus (the really cool browser-based XML editor) have been working largely in silence on a new version of their application. They've recently posted a presentation that talks about the framework behind this new version of Xopus. In the linked PDF, the framework is revealed to be an "object-oriented 'extended subset' of <a href="http://ajaxian.com/archives/xopus-application-framework-objective-j-done-different">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The good folks at <a href="http://xopus.com/">Xopus</a> (the really cool browser-based XML editor) have been working largely in silence on a new version of their application. They've recently posted a presentation that talks about the <a href="http://xopus.com/devblog/2009/inside-the-xopus-application-framework.html">framework behind this new version of Xopus</a>.</p>
<p>In the <a href="http://xopus.com/files/blog/xopus-application-framework.pdf">linked PDF</a>, the framework is revealed to be an "object-oriented 'extended subset' of JavaScript", much like Objective-J, but while Objective-J brings a syntax very similar to an existing language (Objective-C), the Xopus framework brings its own syntax to the game:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-15');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JavaScript:</span>
<div id="javascript-15">
<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;">Package</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"com.xopus.code"</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;"><span style="color: #003366; font-weight: bold;">Import</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"com.xopus.code.Food"</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: #003366; font-weight: bold;">Extends</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"com.xopus.code.Animal"</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;"><span style="color: #003366; font-weight: bold;">Class</span><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; <span style="color: #003366; font-weight: bold;">function</span> Monkey <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066;">name</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">name</span> = <span style="color: #000066;">name</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; <span style="color: #003366; font-weight: bold;">function</span> getName <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: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">name</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; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> favorite <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: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> Food<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"banana"</span> <span style="color:#006600; font-weight:bold;">&#41;</span> ; <span style="color:#006600; font-weight:bold;">&#125;</span>, </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Static, <span style="color: #003366; font-weight: bold;">function</span> kind <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">"chimp"</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;"><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>Among the features of the Xopus framework are:</p>
<ol>
<li>Hierarchically structuring programs into packages</li>
<li>Some forms of program veri?cation</li>
<li>Making dependencies explicit</li>
<li>Dependency resolution</li>
<li>Consistent ?le-system layout</li>
<li>Server side compilation to ?attened form</li>
<li>Serving the client efficient and possibly obfuscated code</li>
<li>Preserved stack trace for easier client-side debugging</li>
<li>Inheritance</li>
<li>Annotations, including visibility (public, private, protected), static, continuation, test, deprecated, API--they are used for documentation and compilation and stick around at run-time for reflective access
</li>
</ol>
<p>The server-side compiler is presently based on SpiderMonkey; the compiler is entirely written in JavaScript and includes "extensions for profiling, coverage, and dependency visualization."</p>
<p><b>Unit Tests</b></p>
<p>Unit testing is baked into the class format, as in:</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;">Class</span><span style="color:#006600; font-weight:bold;">&#40;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> ArrayUtilTest<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: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">TestCase</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;">&#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; &nbsp; Static, <span style="color: #003366; font-weight: bold;">function</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;">&#123;</span> <span style="color: #003366; font-weight: bold;">new</span> ArrayUtilTest<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">start</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;">&#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; Test, <span style="color: #003366; font-weight: bold;">function</span> last<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; <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; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> obj = <span style="color:#006600; font-weight:bold;">&#123;</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; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> arr = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">1</span>, <span style="color:#800000;">2</span>, <span style="color:#800000;">3</span>, obj<span style="color:#006600; font-weight:bold;">&#93;</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: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">assertTrue</span><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; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">"last() should return the last value in the array"</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; &nbsp; &nbsp; arr.<span style="color: #006600;">last</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> === obj<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; <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;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p><img src="http://ajaxian.com/wp-content/uploads/xopus.jpg" alt="" title="Xopus Test Runner" width="470" height="346" class="alignnone size-full wp-image-5982" /></p>
<p>The PDF also shows screenshots from the framework's unit test runner as well as a continuous integration server.</p>
<p>While the bits aren't yet available (that we can tell), forgive us for posting about it anyway--it sounds really interesting.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/xopus-application-framework-objective-j-done-different/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cappuccino 0.6 Released</title>
		<link>http://ajaxian.com/archives/cappuccino-06-released</link>
		<comments>http://ajaxian.com/archives/cappuccino-06-released#comments</comments>
		<pubDate>Fri, 12 Dec 2008 12:06:34 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5376</guid>
		<description><![CDATA[The Cappucinno team has a new release, 0.6 that include: New language addition to Objective-J: The @accessors keyword to eliminate the boiler plate code of writing setters and getters. Read more about it here. Support for more classes like CPTimer. Performance improvements all around, but especially in Objective-J thanks to a major rewrite of the <a href="http://ajaxian.com/archives/cappuccino-06-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The Cappucinno team has <a href="http://cappuccino.org/discuss/2008/12/11/cappuccino-06-available-today/">a new release, 0.6</a> that include:</p>
<ul>
<li>New language addition to Objective-J: The @accessors keyword to eliminate the boiler plate code of writing setters and getters.  Read more about it <a href="http://cappuccino.org/discuss/2008/10/26/synthesizing-accessor-methods/">here</a>.</li>
<li>Support for more classes like CPTimer.</li>
<li>Performance improvements all around, but especially in Objective-J thanks to a major rewrite of the parser.</li>
<li>Improved debugging tools and a new debugging “mode”.</li>
</ul>
<p><a href="http://cappuccino.org/learn/tutorials/">Take a walk through</a> and <a href="http://cappuccino.org/download">download away</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/cappuccino-06-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI3 PR2 now available &#8211; extendable with own widgets and plugins</title>
		<link>http://ajaxian.com/archives/yui3-pr2-now-available-extendable-with-own-widgets-and-plugins</link>
		<comments>http://ajaxian.com/archives/yui3-pr2-now-available-extendable-with-own-widgets-and-plugins#comments</comments>
		<pubDate>Wed, 10 Dec 2008 08:53:16 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Section]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[yui3]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5352</guid>
		<description><![CDATA[Over at the YUI blog Satyen Desai just announced the release of YUI3 PR2. The main changes are that the widgets from YUI2 are now all getting ported over to the new, leaner YUI3 architecture and that the team made it much easier to write your own YUI widgets and plugins extending the existing ones. <a href="http://ajaxian.com/archives/yui3-pr2-now-available-extendable-with-own-widgets-and-plugins">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Over at the <a href="http://yuiblog.com/blog/2008/12/09/yui3pr2-2/">YUI blog</a> Satyen Desai just announced the release of <a href="http://yuilibrary.com/downloads/">YUI3 PR2</a>. The main changes are that the widgets from YUI2 are now all getting ported over to the new, leaner YUI3 architecture and that the team made it much easier to write your own YUI widgets and plugins extending the existing ones.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/terms-yui3-20081209-142330.png" alt="YUI3 widget architecture" title="terms-yui3-20081209-142330" width="189" height="300" class="aligncenter size-medium wp-image-5353" /></p>
<p>Those who played with the YUI2 Rich Text Editor already got a flavour of how that works. If you are interested in the overall direction of YUI3, <a href="http://video.yahoo.com/watch/3711767/10207432">check out the video explaining YUI3's ideas and plans</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/yui3-pr2-now-available-extendable-with-own-widgets-and-plugins/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mozilla, Zazzle, and UIZE</title>
		<link>http://ajaxian.com/archives/mozilla-zazzle-and-uize</link>
		<comments>http://ajaxian.com/archives/mozilla-zazzle-and-uize#comments</comments>
		<pubDate>Fri, 05 Dec 2008 18:01:11 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Examples]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5307</guid>
		<description><![CDATA[Mozilla is big on tinkering--making things your own. They recently released a marketplace for their community to upload its own shirt designs. But because they based it on the Ajax-heavy Zazzle platform, consumers can customize the shirts in a variety of ways. We thought this made for a good opportunity to take a closer look <a href="http://ajaxian.com/archives/mozilla-zazzle-and-uize">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/moz.jpg" alt="Moz Community Store" title="Storezilla" width="422" height="188" class="size-full wp-image-5308" /></p>
<p>Mozilla is big on tinkering--making things your own. They recently released a <a href="http://communitystore.mozilla.org/">marketplace for their community to upload its own shirt designs</a>. But because they based it on the Ajax-heavy <a href="http://www.zazzle.com/">Zazzle</a> platform, consumers can customize the shirts in a variety of ways. We thought this made for a good opportunity to take a closer look at Zazzle.</p>
<p><b>Easy Zooming</b></p>
<p>In the overview page showing different shirt designs, simply mousing over a shirt lets you zoom in on it in a smooth, easy motion.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/zaz1.jpg" alt="" title="Mouse-over shirt" width="470" height="216" class="alignnone size-full wp-image-5309" /></p>
<p>Clicking into a shirt gives more Ajax goodness, like an alternate zooming interface showing the full-view and the detail simultaneously:</p>
<p><img src="http://ajaxian.com/wp-content/uploads/zaz2.jpg" alt="" title="Zazzle Zooming" width="470" height="256" class="alignnone size-full wp-image-5310" /></p>
<p>And finally, it has a shirt manipulation interface, though most of the design manipulation occurs on the server, it is sent back without a page reload, as we would expect:</p>
<p><img src="http://ajaxian.com/wp-content/uploads/zaz3.jpg" alt="" title="Zazzle Design Manipulator" width="470" height="305" class="alignnone size-full wp-image-5311" /></p>
<p><img src="http://ajaxian.com/wp-content/uploads/uize.png" alt="" title="UIZE" width="233" height="38" class="alignnone size-full wp-image-5312" /></p>
<p>Zazzle is built on the <a href="http://www.uize.com/">UIZE</a> (pronounced "you-eyes") Ajax framework which we <a href="http://ajaxian.com/archives/uize-javascript-ui-toolkit">covered briefly in 2006</a> and have yet to revisit. We're not sure if UIZE is used by anyone but Zazzle, but it's got a pretty nice website, docs, widgets, basic effects, an event system, and an inheritance system. We'll have to give it a closer look!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/mozilla-zazzle-and-uize/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Memberkit: Another Shot at VB for the Web</title>
		<link>http://ajaxian.com/archives/memberkit-another-shot-at-vb-for-the-web</link>
		<comments>http://ajaxian.com/archives/memberkit-another-shot-at-vb-for-the-web#comments</comments>
		<pubDate>Fri, 21 Nov 2008 13:00:17 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5163</guid>
		<description><![CDATA[Two years ago we covered JotForm, a Ajax-based web form builder. The folks behind it have been busy in the intervening time and have now released a more general tool: Memberkit. Three years in development, Memberkit lets you use the drag and drop tools to create listing pages, display pages or search forms. You can <a href="http://ajaxian.com/archives/memberkit-another-shot-at-vb-for-the-web">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Two years ago <a href="http://ajaxian.com/archives/attack-of-the-ajax-form-builders">we covered JotForm</a>, a Ajax-based web form builder. The folks behind it have been busy in the intervening time and have now released a more general tool: Memberkit.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/memberkit.jpg" alt="" title="Memberkit" width="470" height="320" class="alignnone size-full wp-image-5167" /></p>
<p>Three years in development, Memberkit lets you</p>
<blockquote><p>
use the drag and drop tools to create listing pages, display pages or search forms. You can create multiple forms and create relationships between them... without writing any code.
</p></blockquote>
<p>While at present Memberkit targets a particular niche, it has ambitious plans.</p>
<blockquote><p>
We have released this first version specifically for membership and<br />
social sites. Our plan is to first make it perfect for these specific<br />
taks before turning it into a complete web framework.
</p></blockquote>
<p>The interface seems quite polished and responsive, and I like the narrow focus. You can check out a <a href="http://demo3.memberkit.com/memberkit/admin.php">demo of the framework</a>, view a <a href="http://www.memberkit.com/tour/">screenshot tour</a>, or <a href="http://www.memberkit.com/memberkit_applications_high_quality.mov">watch a video</a>.</p>
<p>What do you think? Do these VB-for-the-Web frameworks have a shot at any mainstream success?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/memberkit-another-shot-at-vb-for-the-web/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
<enclosure url="http://www.memberkit.com/memberkit_applications_high_quality.mov" length="64083845" type="video/quicktime" />
		</item>
		<item>
		<title>Widgetplus: Server side Ajax widgets</title>
		<link>http://ajaxian.com/archives/widgetplus-server-side-ajax-widgets</link>
		<comments>http://ajaxian.com/archives/widgetplus-server-side-ajax-widgets#comments</comments>
		<pubDate>Thu, 30 Oct 2008 07:30:12 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4930</guid>
		<description><![CDATA[Mikael Bergkvist has created Widgetplus, a gadget platform. He told us about it. XML Runtime The structure of an application is defined in XML. It’s loaded into the serverside runtime like this: javascript:xin.app(' http://www.naltabyte.se/desktop/xin/demo/programs/basics.xml '); We get this as a result. (the ‘test this’ link) Changes to the app remain persistent because on the server, <a href="http://ajaxian.com/archives/widgetplus-server-side-ajax-widgets">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/widgetpluslayout.png" alt="" title="Widgetplus Layout" width="298" height="342" class="alignnone size-full wp-image-4931" /></p>
<p>Mikael Bergkvist has created <a href="http://www.widgetplus.com/">Widgetplus</a>, a gadget platform. He told us about it.</p>
<p><b>XML Runtime</b></p>
<p>The structure of an application is <a href="http://www.widgetplus.com/testbed0.htm">defined in XML</a>.</p>
<p>It’s loaded into the serverside runtime like this: <code>javascript:xin.app(' http://www.naltabyte.se/desktop/xin/demo/programs/basics.xml ');</code></p>
<p>We <a href="http://www.widgetplus.com/prefs.htm">get this as a result</a>. (the ‘test this’ link)</p>
<p>Changes to the app remain persistent because on the server, the xml object has changed.</p>
<p>Of course, different users gets different versions of the same widget, because they have their own xml runtimes.</p>
<p>A widget can contain any amount of javascript to execute clientside, and also include any css to style it, like <a href="http://www.naltabyte.se/widgets/calendar.xml">this calendar application</a>.</p>
<p>A  widget can also split itself into subsets, <a href="http://www.widgetplus.com/testbed4.htm">this example</a> opens a new widget as a dialog, which is really a part of the same widget, and saves data back to itself from it.</p>
<p>XML objects can access each other on the server within the boundaries of the same account.</p>
<p>It means that widgets can access other widgets and send/recieve data from them.</p>
<p>Data can <a href="http://www.widgetplus.com/service.htm">also be sent / retrieved cross domain</a>, without opening the widget on the client at all.</p>
<p>The xml for this app in this example, which is behaving much like a webservice, is <a href="http://www.naltabyte.se/widgets/chatty.xml">here</a>.</p>
<p><b>File system access</b></p>
<p>Widgetplus allows complete filesystem access for a widget, but only within the user account.</p>
<p>By default, widgets always access the demo account, but when logged in, they access the users home account, it’s files and folders, and other settings.</p>
<p>This is crossdomain by default, like <a href="http://xinteleport.blogspot.com">this example on Blogger</a>, which accesses all files on the demo account. </p>
<p>There are several more ways this can play out:</p>
<ul>
<li><a href="http://www.widgetplus.com/filemenu.htm">File Menu</a></li>
<li><a href="http://www.widgetplus.com/filetree.htm">File Tree</a></li>
</ul>
<p>The API lets anyone build their <a href="http://www.widgetplus.com/testbed172.htm">own solutions/variations of this</a>.</p>
<p><b>Conclusion</b></p>
<p>These two parts, together, define what widgetplus is.</p>
<p>It’s a serverside xml runtime for widgets, which can access and manipulate files and folders that belong to the free user account.</p>
<p>Users can always sign up / log in to any widget (by default), the developer wont have to bother about that.</p>
<p>Widgetplus clones all widgets as soon as someone signs up, and also automatically creates a webspace directory for the new user with the default folders in place.</p>
<p>Otherwise, whenever someone logs in, it simply serves the requested xml object(s) associated with that user.</p>
<p>It’s important to note that widgetplus isn’t a BOX.net service, the webspace is for widgets - and whatever they do with it – it’s not for uploading your entire music collection. We will move to a server network in about two months, after which we plan to offer unlimited file storage, but for now, we need to keep a tight leach.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/widgetplus-server-side-ajax-widgets/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ZK 3.5 Released with Comet Support</title>
		<link>http://ajaxian.com/archives/zk-35-released-with-comet-support</link>
		<comments>http://ajaxian.com/archives/zk-35-released-with-comet-support#comments</comments>
		<pubDate>Thu, 18 Sep 2008 20:31:05 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[ZK]]></category>

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

		<guid isPermaLink="false">http://ajaxian.com/?p=4354</guid>
		<description><![CDATA[One of the reasons Dion is such an effective editor here at Ajaxian is his sense for filtering all of the available news from the Ajax community down to about three stories a day. Truth-be-told, with all the submissions we get and what we find on our own, we could easily post 10 stories a <a href="http://ajaxian.com/archives/the-javascript-framework-long-tail">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>One of the reasons Dion is such an effective editor here at Ajaxian is his sense for filtering all of the available news from the Ajax community down to about three stories a day. Truth-be-told, with all the submissions we get and what we find on our own, we could easily post 10 stories a day. But in today's saturated environment, we find three stories is about the right number to keep from overwhelming our readership with too much noise. We hope you agree, and we're interested in hearing if you feel otherwise.</p>
<p>A consequence of this arbitrary filtering is that some of the lesser known frameworks and libraries simply don't get covered. We never try to be king-makers, nor do we have that kind of clout--we simply can't cover everything.</p>
<p>We enjoyed Six Revisions' <a href="http://sixrevisions.com/javascript/promising_javascript_frameworks/">recent round-up of 10 new/up-and-coming JavaScript frameworks</a>, many of which we've never covered, like Midori, Archetype, JUNE, UIZE, Simple.js, and fleegix.js.</p>
<p> The adventurous among you should take a look! Not too long ago, an up-start named jQuery shook up the existing players... some of these may be next.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/the-javascript-framework-long-tail/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Making creating DOM-based applications less of a hassle</title>
		<link>http://ajaxian.com/archives/making-creating-dom-based-applications-less-of-a-hassle</link>
		<comments>http://ajaxian.com/archives/making-creating-dom-based-applications-less-of-a-hassle#comments</comments>
		<pubDate>Wed, 20 Aug 2008 16:13:21 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Section]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[progressiveenhancement]]></category>
		<category><![CDATA[templating]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4150</guid>
		<description><![CDATA[Creating a lot of HTML using DOM methods can be a real pain. This is what students of the Juku training course that I held two weeks ago found out quite quickly and complained about the verbosity of it all. I listened to their concerns and came up with a framework for JavaScript applications called <a href="http://ajaxian.com/archives/making-creating-dom-based-applications-less-of-a-hassle">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Creating a lot of HTML using DOM methods can be a real pain. This is what students of the <a href="http://yuiblog.com/blog/2007/12/06/juku/">Juku training course</a> that I held two weeks ago found out quite quickly and complained about the verbosity of it all. I listened to their concerns and came up with a framework for JavaScript applications called<br />
<a href="http://icant.co.uk/sandbox/viewshandler/">ViewsHandler</a>. </p>
<p>One of the tasks I had given the class is to create a thumbnail show with image information from a link pointing to Flickr using the JSON API. The following is a solution using and showing the options of ViewsHandler:</p>
<div id="attachment_4140" class="wp-caption aligncenter" style="width: 310px"><a href="http://icant.co.uk/sandbox/viewshandler/flickrshow.html"><img src="http://ajaxian.com/wp-content/uploads/viewshandlerdemo.jpg" alt="A flickr show created with ViewsHandler" title="ViewsHandler Demo" width="300" height="279" class="size-medium wp-image-4140" /></a><p class="wp-caption-text">A flickr show created with ViewsHandler</p></div>
<p>ViewsHandler is not another JavaScript templating solution but works on the assumption that in most cases you'll have to create a lot of HTML initially but you'll only have to change the content of some elements dynamically as new information gets loaded or users interact with the app. So instead of creating a lot of HTML over and over again all I wanted to provide is a way to create all the needed HTML upfront and then have easy access to the parts of the HTML that need updating.</p>
<p>The first thing you'll need to do to define your application is to create an object with the different views and pointers to the methods that populate the views:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-18">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> views = <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; index:<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; create:createIndex</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; &nbsp; detail:<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; &nbsp; create:createDetail</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</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;info:<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; create:createInfo</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>ViewsHandler then creates DIV elements for each of these views and hides them for you. In your methods you create all the HTML the different views need to have and apply it with an add() method. You then  define the parts of the HTML that should change later on as fields using the define() method and you can use the set() method to change the content of these fields and the view() method to change between views.</p>
<p>The benefit is that for setting the data you don't need to access the DOM any longer or use innerHTML or nodeValue. ViewsHandler created a pointer to the element all of this is cached. The set() method also allows you to either add a new node as the value or a string. In the latter case it'll create a text node for you.</p>
<p>One convenience method is linkto() which creates links pointing to the different views for you. None of this is rocket science, but it helped the class to create large applications with complex views without losing track of what they are doing. Maybe it can help you, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/making-creating-dom-based-applications-less-of-a-hassle/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Adobe AMF Support in Zend Framework</title>
		<link>http://ajaxian.com/archives/adobe-amf-support-in-zend-framework</link>
		<comments>http://ajaxian.com/archives/adobe-amf-support-in-zend-framework#comments</comments>
		<pubDate>Thu, 31 Jul 2008 12:43:38 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3977</guid>
		<description><![CDATA[Andi Gutmans of Zend has posted on a proposal for AMF support in the Zend Framework, which is being lead by the AMFPHP project leader, Wade Arnold. This ZF component will allow for client-side applications built with Flex and Adobe AIR to communicate easily and efficiently with PHP on the server-side. We are excited about <a href="http://ajaxian.com/archives/adobe-amf-support-in-zend-framework">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Andi Gutmans of Zend has <a href="http://andigutmans.blogspot.com/2008/07/adobe-to-contribute-amf-support-to-zend.html">posted on a proposal for AMF support in the Zend Framework</a>, which is being lead by the AMFPHP project leader, Wade Arnold.</p>
<blockquote><p>
This ZF component will allow for client-side applications built with Flex and Adobe AIR to communicate easily and efficiently with PHP on the server-side.</p>
<p>We are excited about this proposal as it is consistent with our emphasis to be a heterogeneous “use-at-will” framework and as it substantially strengthens Zend Framework’s RIA story. It is also another industry heavyweight joining as an official ZF contributor and joining the likes of IBM, Google and Microsoft in doing so.</p>
<p>Now that we have the Dojo integration ready for ZF 1.6 as a great Ajax story, AMF will complement that with more of an Enterprise oriented solution. We are currently planning to have AMF support aligned with the ZF 1.7 release but we will know better once the proposal has made it through the proposal process.
</p></blockquote>
<p>The <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf">proposal itself is here</a> and its overview is:</p>
<blockquote><p>
Zend_Amf_Server provides Action Message Format (AMF3) support for the Zend Framework that is compatible with the Flash Player 9 and above. The Adobe Integrated Runtime (AIR) and Flash Player uses AMF to communicate between an application and a remote server. AMF encodes remote procedure calls (RPC) into a compact binary representation that can be transferred over HTTP/HTTPS protocol. Objects and data values are serialized into this binary format, which increases performance as the AMF serialization is a highly optimized procedure in the Flash Player. Zend_Amf_Server will act as an AMF gateway to the Zend Framework by exposing through introspection custom class objects and functions that will respond as callbacks through the Zend_Amf_Server gateway.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/adobe-amf-support-in-zend-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

