<?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; Showcase</title>
	<atom:link href="http://ajaxian.com/by/topic/showcase/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>PicsEngine: The latest great Cappuccino sample</title>
		<link>http://ajaxian.com/archives/picsengine-the-latest-great-cappuccino-sample</link>
		<comments>http://ajaxian.com/archives/picsengine-the-latest-great-cappuccino-sample#comments</comments>
		<pubDate>Thu, 07 Oct 2010 07:40:12 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10421</guid>
		<description><![CDATA[The Cappuccino community loves to build rich and beautiful applications. The latest example of this is PicsEngine 4.0 by Michael Villar. The application features a clean UI and nice drag and drop support.]]></description>
			<content:encoded><![CDATA[<p><a href="http://cappuccino.org/discuss/2010/10/04/app-spotlight-picsengine/"><img src="http://cappuccino.org/discuss/wp-content/uploads/2010/10/screen_1_large.png" width="460"/></a></p>
<p>The Cappuccino community loves to build rich and beautiful applications. The latest example of this is <a href="http://cappuccino.org/discuss/2010/10/04/app-spotlight-picsengine/">PicsEngine 4.0</a> by <a href="http://twitter.com/michaelvillar">Michael Villar</a>.</p>
<p>The application features a clean UI and nice <a href="http://github.com/davidcann/deepDropUpload">drag and drop support</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/picsengine-the-latest-great-cappuccino-sample/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtensionFM: A case study on a sexy app, turn extension</title>
		<link>http://ajaxian.com/archives/extensionfm-a-case-study-on-a-sexy-app-turn-extension</link>
		<comments>http://ajaxian.com/archives/extensionfm-a-case-study-on-a-sexy-app-turn-extension#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:07:22 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9709</guid>
		<description><![CDATA[Editor&#8217;s note: Dan Kantor is the CEO behind the awesome ExtensionFM project. It really pushes the boundaries on what the Web can do, so I asked Dan to give us a mini case study on the project. What follows is his words on the matter. Thanks for taking the time Dan! Dion recently posted about <a href="http://ajaxian.com/archives/extensionfm-a-case-study-on-a-sexy-app-turn-extension">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><em>Editor&#8217;s note: Dan Kantor is the CEO behind the awesome ExtensionFM project. It really pushes the boundaries on what the Web can do, so I asked Dan to give us a mini case study on the project. What follows is his words on the matter. Thanks for taking the time Dan!</em></p>
<p><a href="http://ajaxian.com/wp-content/images/screen_allsongs_grid.png"><img src="http://ajaxian.com/wp-content/images/screen_allsongs_grid.png" alt="" title="full size image" width="460" class="alignnone size-full wp-image-9710" /></a></p>
<p>Dion <a href="http://ajaxian.com/archives/the-march-to-a-more-client-centric-web-will-the-mobile-web-html5-and-chrome-web-apps-be-the-tipping-point">recently posted</a> about the march to a more client-centric web. The post hit home with me as the founder of a web-based application that is as much &#8216;app-like&#8217; as it is &#8216;web-like&#8217;. The promise of the web, and HTML5 in particular, is that we will finally reach the write-once, run-anywhere dream we have all been in search of that neither Java nor Flash could fully deliver. Dion poses this question (and answer) towards the end of the post &#8211; <em>&#8216;As a developer, do you want to port experiences between incredibly varied platforms such as Web, iPhone, Android, WinPho 7, RIM, Kindle SDK, [insert many others!]? No.&#8217;</em>.  I don&#8217;t think many developers would argue with Dion&#8217;s answer. The real question is &#8211; &#8216;Are we there yet?&#8217;</p>
<p>My company is developing a client-centric web-based music player that cuts no corners in its attempt to look, feel and run like a native application. We threw progressive enhancement out the door, pushed the pedal to the HTML5 metal and created something that most people would be hard-pressed to believe is not a native application if they didn&#8217;t already see it running inside the browser. However, there is a catch. Our application only runs inside Chrome. This was of course by design. We built it as a Chrome extension. We didn&#8217;t choose to do this because we wanted to restrict it to Chrome. We did this because a large part of the functionality of our application needs the extra APIs and permissions an extension gives you. A nice side-effect of that is we know 100% of our users are using an HTML5 capable browser. Chrome extensions are 100% HTML(5), CSS(3) and Javascript. Extensions provide extra Javascript APIs that give you access to functionality that you otherwise would not have running as a website such as removing security restrictions on cross-domain xhr and requiring permission to display desktop notifications. Of the thousands of lines of code in our extension, only 5% of it is Chrome specific. In theory, this should make porting to other browsers and OS&#8217;s easy. Let&#8217;s see what it looks like in practice.</p>
<p>A few months ago, we decided to see what our application would look like on the iPad. After just four hours, we had a working prototype of our music player that looked and felt native but more importantly looked and felt exactly like our Chrome extension. This was possible because Chrome and Safari share the same rendering engine &#8211; Webkit. Mobile Safari has already implemented many of the HTML5 features we needed such as HTML5 Audio, Web Database and Local Storage and many of the CSS3 features we needed such as Background Gradients, Rounded Corners and Box-Shadows. We were able to re-use most of our Javascript code and since we used a lot of CSS in place of images, we were able to resize elements with ease. But a prototype is just a prototype. Could our web-application actually be a viable shipping product on the iPad?</p>
<p>At this point, the answer is no. Mobile Safari has two quirks that seriously hamper its ability to act as a web platform. The first is it&#8217;s lack of fixed positioning. If there was one feature that defined native applications vs. web applications it would be that native applications almost always frame content with a top and bottom layer of buttons or displays. Think about iPhone apps. Almost every one of them (minus games) has a navigation layer on top and a series of buttons on the bottom. To pull this off as a web-application, you need fixed positioning. Unfortunately, Mobile Safari (as well as Android&#8217;s browser) do not provide this feature. There are many hacks to emulate it though. Apple has even developed a Javascript/CSS framework to get around this themselves. For our iPad web-app, we used a library called <a href="http://github.com/davidaurelio/TouchScroll">TouchScroll</a> that uses Javascript and CSS animations to emulate scrolling. Overall, the lack of fixed positioning is not a game-ender, as hacks are available, but it certainly adds a layer of complexity to building a client-centric web-app that will make many developers&#8217; lives more difficult. The next quirk may just be a game-ender. Mobile Safari on the iPhone and iPad has an annoying ability to refresh windows once you open up a few. So say you have a few windows open including our music player. The music player is not the active window however. When you click back on it to make it active, it refreshes. I&#8217;m not sure why this happens although my guess is it has something to do with memory management. Either way, most apps (especially music or video ones) cannot be taken seriously if the application is constantly refreshing. Sure, in theory applications could maintain their state between refreshes. But in practice, this never works quite as well as we&#8217;d like it to. Of course, music stopping and starting constantly will be a game-ender. I am hoping that the iPhone 4 with its 512MB RAM does not have this issue. Android does not seem to suffer from this but Android does not support HTML5 Audio or Video so it certainly has drawbacks of its own. </p>
<p>A couple of weeks ago, Safari 5 was introduced with support for extensions. We spent a few hours reading the documentation to see what it would take to port our extension from Chrome to Safari. Unlike Firefox, where extensions are a bit more than just HTML/CSS/JS and support for HTML5 features are lagging, Safari extensions are theoretically similar to Chrome. Other than different Javascript APIs, the functionality offered is almost exactly the same. We determined that it would not be too difficult to port. Of course, business decisions are not always just about technology, so we are waiting a bit before we do just that. It will however, be very interesting to see if Apple brings extension support to Mobile Safari on iOS. </p>
<p><a href="http://ajaxian.com/wp-content/images/screen_popover.png"><img src="http://ajaxian.com/wp-content/images/screen_popover.png" alt="" title="full size image" width="460" class="alignnone size-full wp-image-9711" /></a></p>
<p>Coming back to Dion&#8217;s original post, it seems like we are closer to write-once, run-anywhere using client-centric web-based applications than we have ever been. With a few modifications, we can basically re-use 80% of our code to deploy on the desktop and mobile. Unfortunately, not all browsers are there yet though. The issues I listed above seem like minor ones that can be fixed easily however. It would not surprise me if in the second half of 2010, Mobile Safari fixes the refreshing issue and Android adds support for HTML5 Audio/Video. As more frameworks are released that deal with the fixed positioning problem, I expect more developers to look seriously at the web as their platform of choice for deploying mobile applications. As for the desktop, Firefox 4 and IE9 should finally add the HTML5 and CSS3 feature support that Chrome and Safari have had for a while now. Of course, not all users will have the latest and greatest browser. Progressive enhancement will be the only way to support those users. But by pushing the envelope of what&#8217;s possible, we will hopefully push those users towards upgrading to a modern browser.</p>
<p>For a 60 second run through of ExtensionFM, check out the video below:</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/-6EtraV_TIQ&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-6EtraV_TIQ&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/extensionfm-a-case-study-on-a-sexy-app-turn-extension/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Amazing Audio API JavaScript Demos</title>
		<link>http://ajaxian.com/archives/amazing-audio-api-javascript-demos</link>
		<comments>http://ajaxian.com/archives/amazing-audio-api-javascript-demos#comments</comments>
		<pubDate>Fri, 28 May 2010 12:01:21 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9416</guid>
		<description><![CDATA[David Humphrey and the hit squad of audio gurus have some new amazing demos for us. Perfect for a Friday. This is all through the rich Mozilla Audio API work which will hopefully be pushed into other browsers at some point in the not so distant future. Charles Cliffe has some awesome WebGL visualizations from <a href="http://ajaxian.com/archives/amazing-audio-api-javascript-demos">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>David Humphrey and the hit squad of audio gurus <a href="http://vocamus.net/dave/?p=1092">have some new amazing demos</a> for us. Perfect for a Friday. This is all through the <a href="http://vocamus.net/dave/?cat=25">rich Mozilla Audio API work</a> which will hopefully be pushed into other browsers at some point in the not so distant future.</p>
<p>Charles Cliffe has some awesome WebGL visualizations from Audio. David narrates:</p>
<blockquote><p>
What I like most about these (other than the fact that he&#8217;s written the music, js libs, and demo) is that these combine a whole bunch of JavaScript libraries: <a href="http://github.com/corbanbrook/dsp.js/">dsp.js</a>, <a href="http://www.cubicvr.org/index.php?option=com_content&amp;view=article&amp;id=73&amp;Itemid=88">cubicvr.js and beatdetection.js</a>, and <a href="http://processingjs.org/">processing.js</a>.  Some people will tell you that doing anything complex in a browser is going to be slow; but Charles is masterfully proving that you can do many, many things at once and the browser can keep pace.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/OxoFcyKYwr0&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/OxoFcyKYwr0&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object></p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/dym4DqpJuDk&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/dym4DqpJuDk&#038;color1=0xb1b1b1&#038;color2=0xd0d0d0&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object></p>
<p>Corban and Ricard Marxer have been busy exploring how far we can push audio write, and managed to also produce some amazing demos.  The first is by Ricard, and is a <a href="http://www.ricardmarxer.com/blog/2010/05/26/graphical-eq-in-javascript/">graphic equalizer</a> (<a href="http://vimeo.com/12038405">video is here</a>):</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12038405&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12038405&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>The second is by Corban, and shows a <a href="http://weare.buildingsky.net/processing/dsp.js/examples/sampler.html">JavaScript based audio sampler</a>.  His code can loop forward or backward, change playback speed, etc. (<a href="http://vimeo.com/12039823">video is here</a>):</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12039823&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12039823&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>Chris McCormick has been working on <a href="http://mccormick.cx/dev/webpd/">porting Pure Data to JavaScript</a>, and already has some basic components built.  Here&#8217;s one that combines <a href="http://mccormick.cx/dev/webpd/demos/processingjs-basic-example-with-audio/index.html">processing.js and webpd</a> (<a href="http://vimeo.com/12050606">video is here</a>):</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12050606&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12050606&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>I think that my favourite demo by far this time around is one that I&#8217;ve been waiting to see since we first began these experiments.  I&#8217;ve written in the past that our work could be used to solve many web accessibility problems.  A few weeks ago I mentioned on irc that someone should take a shot at building a text to speech engine in JavaScript, now that we have typed arrays.  Yury quietly went off and built one based on the <a href="http://www.speech.cs.cmu.edu/flite/">flite engine</a>.  When you run this, remember that you&#8217;re watching a browser speak with no plugins of any kind.  This is all done in JavaScript (<a href="http://scotland.proximity.on.ca/dxr/tmp/audio/tts/">demo is here</a>, <a href="http://vimeo.com/12039415">video is here</a>):</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12039415&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12039415&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>In order to do this he had to overcome some interesting problems, for example, how to load large binary voice databases into the page.  The straightforward approach of using a JS array was brittle, with JS sometimes running out of stack space trying to initialize the array.  After trying various obvious ways, Yury decided to use the web to his advantage, and pushed the binary data into a PNG, then loaded it into a canvas, where getImageData allows him to access the bytes very quickly, using another typed array.  The browser takes care of downloading and re-inflating the data automatically.  Here&#8217;s what the database looks like:</p>
<p><a href="http://scotland.proximity.on.ca/dxr/tmp/audio/tts/phonems_db.png"><img src="http://scotland.proximity.on.ca/dxr/tmp/audio/tts/phonems_db.png" width="400" height="300" border="0"/></a></p>
</blockquote>
<p>My favourite line is:</p>
<blockquote><p>
What began as a series of experiments by a small group of strangers, has now turned into something much larger.
</p></blockquote>
<p>What an awesome community you guys have&#8230; and we are all benefitting. Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/amazing-audio-api-javascript-demos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 and CSS3 Readiness Visualization</title>
		<link>http://ajaxian.com/archives/html5-and-css3-readiness-visualization</link>
		<comments>http://ajaxian.com/archives/html5-and-css3-readiness-visualization#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:57:33 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9005</guid>
		<description><![CDATA[Paul Irish and Divya Manian have created a fun visualization on readiness of HTML5 and CSS3 standards in various browsers. It uses a bunch of the usual CSS cool-suspects: -webkit-gradient, -webkit-transition, -webkit-border-radius, and the like (and -moz/-o too). The added feature is.... do a mouse scroll on the page: PLAIN TEXT JAVASCRIPT: &#160; jQuery&#40;document&#41;.bind&#40;'DOMMouseScroll mousewheel', <a href="http://ajaxian.com/archives/html5-and-css3-readiness-visualization">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://html5readiness.com/"><img src="http://ajaxian.com/wp-content/images/html5cssreadiness.png" alt="html5cssreadiness" title="html5cssreadiness" width="480" height="275" class="alignnone size-full wp-image-9006"/></a></p>
<p><a href="http://paulirish.com/">Paul Irish</a> and <a href="http://nimbupani.com/">Divya Manian</a> have created a fun visualization on readiness of HTML5 and CSS3 standards in various browsers.</p>
<p>It uses a bunch of the usual CSS cool-suspects: <code>-webkit-gradient</code>, <code>-webkit-transition</code>, <code>-webkit-border-radius</code>, and the like (and -moz/-o too).</p>
<p>The added feature is.... do a mouse scroll on the page:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-2">
<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;">jQuery<span style="color:#006600; font-weight:bold;">&#40;</span>document<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">bind</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'DOMMouseScroll mousewheel'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>e, delta<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> newval,</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; num = $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'div.css-chart p'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">css</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'padding-left'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; delta = delta || e.<span style="color: #006600;">detail</span> || e.<span style="color: #006600;">wheelDelta</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: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>delta&gt; <span style="color:#800000;">0</span> || e.<span style="color: #006600;">which</span> == <span style="color:#800000;">38</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; &nbsp; &nbsp; newval = parseFloat<span style="color:#006600; font-weight:bold;">&#40;</span>num<span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#800000;">10</span> * <span style="color:#006600; font-weight:bold;">&#40;</span>e.<span style="color: #006600;">shiftKey</span> ? .<span style="color:#800000;">1</span> : <span style="color:#800000;">1</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;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>delta &lt;<span style="color:#800000;">0</span> || e.<span style="color: #006600;">which</span> == <span style="color:#800000;">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; &nbsp; &nbsp; newval = parseFloat<span style="color:#006600; font-weight:bold;">&#40;</span>num<span style="color:#006600; font-weight:bold;">&#41;</span> - <span style="color:#800000;">10</span> * <span style="color:#006600; font-weight:bold;">&#40;</span>e.<span style="color: #006600;">shiftKey</span> ? .<span style="color:#800000;">1</span> : <span style="color:#800000;">1</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;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</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; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</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; </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;">&#40;</span><span style="color: #3366CC;">'style.padleft'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">remove</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'&lt;style class=&quot;padleft&quot;&gt; div.css-chart p { padding-left : '</span>+newval+<span style="color: #3366CC;">'px; }'</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; &nbsp; &nbsp; .<span style="color: #006600;">appendTo</span><span style="color:#006600; font-weight:bold;">&#40;</span>document.<span style="color: #006600;">body</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; e.<span style="color: #006600;">preventDefault</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/html5-and-css3-readiness-visualization/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Facebook&#8217;s Javascript Speed-Up</title>
		<link>http://ajaxian.com/archives/facebook-javascript-jsconf</link>
		<comments>http://ajaxian.com/archives/facebook-javascript-jsconf#comments</comments>
		<pubDate>Sun, 18 Apr 2010 15:56:58 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9023</guid>
		<description><![CDATA[(Live blogging notes.) Makinde Adeagbo is describing Facebook's Javascript performance optimisation efforts at JSConf. By 2009, it became clear something had to be done, as the trend was towards longer and longer page loads. Back in 2006, the objective had been super fast page loading: "If any page loads in under 100ms, it takes way <a href="http://ajaxian.com/archives/facebook-javascript-jsconf">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/images/facebook_logo1.jpg" alt="facebook_logo" title="facebook_logo" width="150" height="56" class="alignnone size-full wp-image-9022" /></p>
<p>(Live blogging notes.)</p>
<p>Makinde Adeagbo is describing Facebook's Javascript performance optimisation efforts at JSConf. By 2009, it became clear something had to be done, as the trend was towards longer and longer page loads. Back in 2006, the objective had been super fast page loading: "If any page loads in under 100ms, it takes way too long". By 2008, given all the new interactive features on the page, the 100 millisecond target had expanded to 1 second, and by mid-2009, pages were taking 5 seconds to load. Even HipHop, the PHP compiler, was smaller than the Javascript code base. And when Steve Souders called out Facebook in his book numerous times, it only adding to the team's sense of fun and joy ;).</p>
<p>In June 2009, the team quickly chose a target by year's end by simply checking the load time without Javascript: 2.5 seconds. Thus, dropping load time from 5 seconds to 2.5 seconds was the goal for end of 2009.</p>
<p>The first initiative was to include the Javascript at the bottom of the page. Great, it's faster, but at what cost? A big one: Users try to click on controls, and nothing happens. Back to the drawing board, and the team refined the setup so that the actionable stuff was initialised on the top of the page. But how to minimise all this code at the top of the page?  Here, the team exploited the observation that most controls work the same way:</p>
<p>* User clicks<br />
* Sends ASync request<br />
* Insert/Replace some content</p>
<p>So the team set up elements like this:</p>
<p>&lt;a href="/ring.php rel="dialog"&gt;...&lt;/a&gt;</p>
<p>... And then <a href="http://www.domscripting.com/blog/display/41">hijacked</a> them with a standard listener routine, one that would work for most of the controls. (Most, not all; 80/20 principle is in effect here.) This way, they could have one small listener routine to handle most of the controls on the page. Once the user clicks, the server gets called and outputs a new snippet of Javascript:</p>
<p>The Javascript:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">new</span> Dialog<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">setTitle</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">setBody</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">show</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>would be output by a PHP script, and then evaluated in the browser:</p>
<div class="igBar"><a href="javascript:showCodeTxt('php-7');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">PHP:</span>
<div id="php-7">
<div class="php">
<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:#0000FF;">$response</span> = <span style="color:#000000; font-weight:bold;">new</span> DialogResponse<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$response</span>-&gt;<span style="color:#006600;">setTitle</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">setBody</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>(A form of On-Demand Javascript.)</p>
<p>In fact, the team has a whole PHP library for outputting Javascript. For example, when a request comes in to expand a new story:</p>
<div class="igBar"><a href="javascript:showCodeTxt('php-8');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">PHP:</span>
<div id="php-8">
<div class="php">
<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:#0000FF;">$response</span> = <span style="color:#000000; font-weight:bold;">new</span> AsyncResponse<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$response</span>-&gt;<span style="color:#006600;">setContent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"#elem_id"</span>, <span style="color:#0000FF;">$new_content</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$response</span>-&gt;<span style="color:#006600;">appendContent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"#content .stories"</span>, <span style="color:#0000FF;">$new_story</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:#0000FF;">$response</span>-&gt;<span style="color:#006600;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And they are using a convention: "ajaxify=1" on an element indicates it's ... Ajaxified.</p>
<p>At this point, the team had now Ajaxified a bunch of features, but people were still skeptical about more complicated features. For example, would setting status be too hard with the same techniques. So after some research, Makinde came back with an epiphany: the humble form. Whereas the previous async requests were effectively information-less - just a simple directive and maybe an ID - the requests would now include content too. And of course, most of these things look nothing like forms due to styling. But underneath, they're still forms, e.g. the entire comments block is a single form.</p>
<p>Nowadays, most of Facebook runs without complete page refreshes, by dynamically flipping the content and the fragment ID. (What Facebook calls page transitions.)</p>
<p>Ongoing, Makinde says performance optimisation requires ongoing vigilance. Every engineer has their special case, but in the scheme of things, it's better to say no to new features unless they can be strongly justified. For example, we can live with user submitting a form that hasn't yet been hijacked; a complete page refresh is fine on occasion. We don't like it, but we don't want to make it a special case just for the sake of it.</p>
<p>The Gantt charts tell a great tale: users now see content much earlier, and it's interactive. So how did they fare with that 2.5 second goal for year's end? Achieved by December 23. And Makinde wants people to know Facebook is hiring as they have more Javascript to write...and delete.</p>
<p>UPDATE: And here are the slides ...</p>
<div style="width:425px" id="__ss_3769022"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/makinde/javascript-primer" title="Javascript Primer">Javascript Primer</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsconfprimertalk-100418161633-phpapp02&#038;stripped_title=javascript-primer" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsconfprimertalk-100418161633-phpapp02&#038;stripped_title=javascript-primer" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/makinde">makinde</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/facebook-javascript-jsconf/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Every Time Zone; Why the Web rocks, and so do Thomas and Amy</title>
		<link>http://ajaxian.com/archives/every-time-zone-why-the-web-rocks-and-so-do-thomas-and-amy</link>
		<comments>http://ajaxian.com/archives/every-time-zone-why-the-web-rocks-and-so-do-thomas-and-amy#comments</comments>
		<pubDate>Fri, 16 Apr 2010 22:19:07 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8996</guid>
		<description><![CDATA[Every Time Zone is a great new Web app by Thomas Fuchs and Amy Hoy that shows how the Web platform is ready to create fantastic visual experiences. In the spirit of "do one thing, but do it well" the application shows you what time it is in various parts of the world. Now when <a href="http://ajaxian.com/archives/every-time-zone-why-the-web-rocks-and-so-do-thomas-and-amy">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/images/everytimezonecrop.png" alt="everytimezonecrop" title="everytimezonecrop" width="323" height="238" class="alignnone size-full wp-image-8998" style="float:right; padding:8px"/></p>
<p><a href="http://everytimezone.com/">Every Time Zone</a> is a great new Web app by Thomas Fuchs and Amy Hoy that shows how the Web platform is ready to create fantastic visual experiences. In the spirit of "do one thing, but do it well" the application shows you what time it is in various parts of the world. Now when I call folks back in blighty, or bug Rob Castaneda while in Australia, I can get a quick view of the time.</p>
<p>If you take a peak on the iPad and add it to your home screen, you will see that it runs very nicely offline indeed. The rich UI effects are top quality, and make use of CSS gradients and the like to power a desktop class utility.</p>
<p>I always enjoy looking at their code too. Nice and clean:</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;">w<span style="color:#006600; font-weight:bold;">&#91;</span>supportsTouch ? <span style="color: #3366CC;">'ontouchstart'</span> : <span style="color: #3366CC;">'onmousedown'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>event<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'orientation'</span> <span style="color: #000066; font-weight: bold;">in</span> window<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;">Function</span>.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">delay</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>s<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span> setTimeout<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>, s*<span style="color:#800000;">1000</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Date.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">addDays</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>days<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> Date<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getTime</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;">&#40;</span>days*<span style="color:#800000;">1000</span>*<span style="color:#800000;">60</span>*<span style="color:#800000;">60</span>*<span style="color:#800000;">24</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#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>It also works on iPhone, Android, webOS and the like.... and I think the pair are working on scaling it nicely for that form factor.</p>
<p><img src="http://ajaxian.com/wp-content/images/everytimezone.png" alt="everytimezone" title="everytimezone" width="480" height="360" class="alignnone size-full wp-image-8997"/></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/every-time-zone-why-the-web-rocks-and-so-do-thomas-and-amy/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CSSDesk: A playground for CSS</title>
		<link>http://ajaxian.com/archives/cssdesk-a-playground-for-css</link>
		<comments>http://ajaxian.com/archives/cssdesk-a-playground-for-css#comments</comments>
		<pubDate>Thu, 15 Apr 2010 11:14:32 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8981</guid>
		<description><![CDATA[We have seen a lot of playgrounds out there with JS Fiddle being the most recent. The latest is CSS Desk. It is an incredibly simple playground where you put in HTML and CSS, and see a live preview. That is it. However, Pixel Matrix Design... the folks behind it... show that they design very <a href="http://ajaxian.com/archives/cssdesk-a-playground-for-css">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>We have seen a lot of playgrounds out there with <a href="http://jsfiddle.net">JS Fiddle</a> being the most recent. The latest is <a href="http://cssdesk.com/">CSS Desk</a>. It is an incredibly simple playground where you put in HTML and CSS, and see a live preview. That is it.</p>
<p>However, <a href="http://pixelmatrixdesign.com/">Pixel Matrix Design</a>... the folks behind it... show that they design very clean and beautiful web apps.</p>
<p><img src="http://ajaxian.com/wp-content/images/cssdesk.png" alt="cssdesk" title="cssdesk" width="480" height="435" class="alignnone size-full wp-image-8982"/></p>
<p>It looks and feels SproutCore/Cappuccino-esque, but it is actually simple markup with sprinkling of jQuery. Nice animations and drop over effects. Click on the toggle buttons. Click on the arrows for drop downs and panel show/hide. Very nice.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/cssdesk-a-playground-for-css/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Web prototype of Mail.app using UKI</title>
		<link>http://ajaxian.com/archives/web-prototype-of-mail-app</link>
		<comments>http://ajaxian.com/archives/web-prototype-of-mail-app#comments</comments>
		<pubDate>Fri, 09 Apr 2010 15:50:10 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8918</guid>
		<description><![CDATA[Watch the video above by Volodya Kolesnikov, the developer behind the Mail.app prototype that uses the UKI framework. ukijs matured and I put it to the test. The idea for the test was to replicate Mac Mail.app core experience in the browser. With as much attention to details as possible and acceptable performance. The whole <a href="http://ajaxian.com/archives/web-prototype-of-mail-app">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<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=10677818&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=10677818&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>Watch the video above by Volodya Kolesnikov, the developer behind the <a href="http://blog.ukijs.org/2010/04/08/mail-app-on-the-web/">Mail.app prototype</a> that uses the <a href="http://ukijs.org/">UKI</a> framework.</p>
<blockquote><p>
ukijs matured and I put it to the test. The idea for the test was to replicate Mac Mail.app core experience in the browser. With as much attention to details as possible and acceptable performance. The <a href="http://ukijs.org/mail/index.html">whole thing</a> took me about 15 hours and 65kb of gziped code.
</p></blockquote>
<p>Nice work Volodya!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/web-prototype-of-mail-app/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Amberjack 2.0: On page tutorials</title>
		<link>http://ajaxian.com/archives/amberjack-2-0-on-page-tutorials</link>
		<comments>http://ajaxian.com/archives/amberjack-2-0-on-page-tutorials#comments</comments>
		<pubDate>Tue, 06 Apr 2010 11:22:29 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8854</guid>
		<description><![CDATA[We covered the original Amberjack library that offers on-page demos. Arash Yalpani is back with Amberjack 2, which groks DOM node highlighting. The main page shows how you embed a tour right into the page: PLAIN TEXT HTML: &#160; &#60;div class="ajTourDef" id="defaultTour" style="display:none" title="http://amberjack2.org/"&#62; &#160; &#60;div title="http://amberjack2.org/"&#62; &#160; &#160; &#60;div title="{id:'logo',padding:15,trbl:'brr'}"&#62; &#160; &#160; &#160; &#60;p <a href="http://ajaxian.com/archives/amberjack-2-0-on-page-tutorials">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>We covered the <a href="http://ajaxian.com/archives/amberjack-javascript-site-tour-creator">original Amberjack library</a> that offers on-page demos.</p>
<p>Arash Yalpani is back with <a href="http://amberjack2.org/">Amberjack 2</a>, which groks DOM node highlighting.</p>
<p>The main page shows how you embed a tour right into the page:</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;">&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;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"ajTourDef"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"defaultTour"</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">"display:none"</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"http://amberjack2.org/"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"http://amberjack2.org/"</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; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'logo',padding:15,trbl:'brr'}"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Amberjack allows easy creation of On-Page Tutorials<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">&lt;br</span></a> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></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; Navigate with bubble arrows, keyboard right/left or mouse click left/right</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;/div&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'tryDemo',padding:0,trbl:'brl'}"</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; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Text bubbles explain page elements to your visitors.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">&lt;br</span></a> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Use your <span style="color: #009900;"><a href="http://december.com/html/4/element/button.html"><span style="color: #000000; font-weight: bold;">&lt;button&gt;</span></a></span>HTML<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/button&gt;</span></span> and <span style="color: #009900;"><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">&lt;span</span></a> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">"color:#ff0;background:#000"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>CSS<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span&gt;</span></span> knowledge to customize the bubbles as you like!</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;/div&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'tryDemo',padding:0,trbl:'brl'}"</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; &nbsp; Embed a Youtube Tutorial for example</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: #009900;"><a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">&lt;br</span></a> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">&lt;br</span></a> /<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; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/object.html"><span style="color: #000000; font-weight: bold;">&lt;object</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"application/x-shockwave-flash"</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">"width:330px; height:205px"</span> <span style="color: #000066;">data</span>=<span style="color: #ff0000;">"http://www.youtube.com/v/xlroni8b6GU"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/param.html"><span style="color: #000000; font-weight: bold;">&lt;param</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"movie"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"http://www.youtube.com/v/xlroni8b6GU"</span> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/object&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></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;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'markerBasics',padding:-2,trbl:'blr'}"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Jump DOM elements with their unique DOM ID<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></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;/div&gt;</span></span>&nbsp; &nbsp; &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: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'markerPositioning',padding:-2,trbl:'ltb'}"</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; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Place multiple tours ...<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span>&nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'markerColor',padding:-2,trbl:'ltb'}"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>... on your page<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></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;/div&gt;</span></span>&nbsp; &nbsp; &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: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'techcrunch',padding:5,trbl:'tlr'}"</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; &nbsp; Amberjack was covered on Techcrunch...</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;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></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;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'ajaxian',padding:5,trbl:'tlr'}"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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; ... Ajaxian ...</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;/div&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'digg',padding:5,trbl:'tlr'}"</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; &nbsp; ... and even got Digged</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;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></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;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'delicious',padding:5,trbl:'trl'}"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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; Please add Amberjack to your bookmarks</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;/div&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"{id:'uservoice-feedback-tab',padding:0,trbl:'rmb',position:'fixed'}"</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; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">&lt;p</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"title"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>That's it, please leave Feedback<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">&lt;br</span></a> /<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; &nbsp; Close tutorial by clicking the cross (X) above or hit ESC on your keyboard.</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;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></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;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></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 can check out the <a href="http://amberjack2.org/src/v2/">source</a> and more tutorials and documentation is coming.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/amberjack-2-0-on-page-tutorials/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Are browsers Quake-ing in their boots?</title>
		<link>http://ajaxian.com/archives/gwt-quake</link>
		<comments>http://ajaxian.com/archives/gwt-quake#comments</comments>
		<pubDate>Thu, 01 Apr 2010 21:19:42 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Showcase]]></category>

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

		<guid isPermaLink="false">http://ajaxian.com/?p=8837</guid>
		<description><![CDATA[David Friedman calls is "silly", but he has created something simple and fun in his new form of volume control that moves from whisper to shout as you change the volume. The code (which works on Firefox and Opera right now) uses different tracks for each level: PLAIN TEXT HTML: &#160; &#60;audio id="apA" autobuffer="true" onTimeUpdate="update();"&#62; <a href="http://ajaxian.com/archives/from-whisper-to-shout-a-new-form-of-volume-control">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/ironicsans">David Friedman</a> calls is "silly", but he has created something simple and fun in his <a href="http://www.ironicsans.com/2010/03/idea_a_new_kind_of_volume_cont.html">new form of volume control</a> that moves from whisper to shout as you change the volume.</p>
<p><a href="http://www.ironicsans.com/volumething/"><img src="http://ajaxian.com/wp-content/images/whispershout.png" alt="whispershout" title="whispershout" width="480" height="311" class="alignnone size-full wp-image-8838"/></a></p>
<p>The code (which works on Firefox and Opera right now) uses different tracks for each level:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-15');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-15">
<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;audio <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"apA"</span> autobuffer=<span style="color: #ff0000;">"true"</span> onTimeUpdate=<span style="color: #ff0000;">"update();"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"ogg/Volume1.ogg"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"audio/ogg; codecs=vorbis"</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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/source&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&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;">&lt;audio <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"apB"</span> autobuffer=<span style="color: #ff0000;">"true"</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; &nbsp; &nbsp; <span style="color: #009900;">&lt;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"ogg/Volume2.ogg"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"audio/ogg; codecs=vorbis"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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>/source&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;audio <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"apC"</span> autobuffer=<span style="color: #ff0000;">"true"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"ogg/Volume3.ogg"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"audio/ogg; codecs=vorbis"</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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/source&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&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;">&lt;audio <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"apD"</span> autobuffer=<span style="color: #ff0000;">"true"</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; &nbsp; &nbsp; <span style="color: #009900;">&lt;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"ogg/Volume4.ogg"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"audio/ogg; codecs=vorbis"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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>/source&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;audio <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"apE"</span> autobuffer=<span style="color: #ff0000;">"true"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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;source <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"ogg/Volume5.ogg"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"audio/ogg; codecs=vorbis"</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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/source&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/audio&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And it keeps track of the timing so it can seamlessly play with code such as:</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: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">apA</span>.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"timeupdate"</span>, timeUpdate, <span style="color: #003366; font-weight: bold;">true</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;">function</span> timeUpdate<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; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//get the duration of the player</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; dur = audio_player.<span style="color: #006600;">duration</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; time = audio_player.<span style="color: #006600;">currentTime</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; fraction = time/dur;</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; percent = <span style="color:#006600; font-weight:bold;">&#40;</span>fraction*<span style="color:#800000;">100</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; &nbsp; &nbsp; wrapper = document.<span style="color: #006600;">getElementById</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"duration_background"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; new_width = wrapper.<span style="color: #006600;">offsetWidth</span>*fraction;</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; document.<span style="color: #006600;">getElementById</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"duration_bar"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">style</span>.<span style="color: #006600;">width</span>=new_width+<span style="color: #3366CC;">"px"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><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/from-whisper-to-shout-a-new-form-of-volume-control/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>text/x-artwork with some coffee and graphics</title>
		<link>http://ajaxian.com/archives/textx-artwork-with-some-coffee-and-graphics</link>
		<comments>http://ajaxian.com/archives/textx-artwork-with-some-coffee-and-graphics#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:26:47 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8811</guid>
		<description><![CDATA[Chris Lloyd has a fun demo that randomly shows off some art using CoffeeScript and Raphael in an interesting way. There is some choice coffee in there: PLAIN TEXT JAVASCRIPT: &#160; for tag in document.getElementsByTagName&#40;'script'&#41; when tag.type is 'text/x-artwork' &#160; &#160; &#160; &#160; eval&#40;CoffeeScript.compile&#40;tag.innerHTML&#41;&#41; &#160; The coffee creates some Art which is encapsulated as: PLAIN <a href="http://ajaxian.com/archives/textx-artwork-with-some-coffee-and-graphics">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/chrislloyd">Chris Lloyd</a> has <a href="http://thelincolnshirepoacher.com/">a fun demo</a> that randomly shows off some art using CoffeeScript and Raphael in an interesting way.</p>
<p><img src="http://ajaxian.com/wp-content/images/lincolnshire.png" alt="lincolnshire" title="lincolnshire" width="480" height="198" class="alignnone size-full wp-image-8812"/></p>
<p>There is some choice coffee in there:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-19');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-19">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">for</span> tag <span style="color: #000066; font-weight: bold;">in</span> document.<span style="color: #006600;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color:#006600; font-weight:bold;">&#41;</span> when tag.<span style="color: #006600;">type</span> <span style="color: #000066; font-weight: bold;">is</span> <span style="color: #3366CC;">'text/x-artwork'</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;">eval</span><span style="color:#006600; font-weight:bold;">&#40;</span>CoffeeScript.<span style="color: #006600;">compile</span><span style="color:#006600; font-weight:bold;">&#40;</span>tag.<span style="color: #006600;">innerHTML</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The coffee creates some Art which is encapsulated as:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-20');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-20">
<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;">&nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'text/x-artwork'</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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; Art.add (color, focus) -&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; min: 20</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; max: 300</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; for i in [0..rand(6)]</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; @circle(focus.x - max*0.5 + rand(max),</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; &nbsp; &nbsp; &nbsp; focus.y - max*0.5 + rand(max), min + rand(max - min)).attr({</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; &nbsp; &nbsp; &nbsp; &nbsp; stroke: color</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; &nbsp; &nbsp; &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: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></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;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">'text/x-artwork'</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></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; Art.add (color, focus) -&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; size: 50+rand(150)</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; s: @set()</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; </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; for dir in [{x:0,y:1},{x:1,y:0},{x:0,y: -1},{x: -1,y:0}]</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; x: focus.x - size*0.5 + size*dir.x</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; y: focus.y - size*0.5 + size*dir.y</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; s.push @rect(x, y, size, size).attr({fill: color, stroke: 'none'})</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; s.rotate(45, focus.x, focus.y)</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;/script&gt;</span></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/textx-artwork-with-some-coffee-and-graphics/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ext Designer 1.0: WYSIWYG application design tool for the Web</title>
		<link>http://ajaxian.com/archives/ext-designer-1-0-wysiwyg-application-design-tool-for-the-web</link>
		<comments>http://ajaxian.com/archives/ext-designer-1-0-wysiwyg-application-design-tool-for-the-web#comments</comments>
		<pubDate>Tue, 30 Mar 2010 06:02:21 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8819</guid>
		<description><![CDATA[The long awaited Ext Designer is out. "Our developers write in Ext." This has been said because Ext is a very high level language for Web development. It is almost DSL like versus offering low level functions that you can sprinkle in your code. If you buy into the Ext way then you can build <a href="http://ajaxian.com/archives/ext-designer-1-0-wysiwyg-application-design-tool-for-the-web">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/images/extdesigner.png" alt="extdesigner" title="extdesigner" width="480" height="293" class="alignnone size-full wp-image-8820" /></p>
<p>The long awaited <a href="http://www.extjs.com/products/designer/">Ext Designer is out</a>. </p>
<blockquote><p>
"Our developers write in Ext."
</p></blockquote>
<p>This has been said because Ext is a very high level language for Web development. It is almost DSL like versus offering low level functions that you can sprinkle in your code. If you buy into the Ext way then you can build UIs in a very simple manner through JSON. This is all perfectly setup for a design tool, and with Ext Designer, they have it.</p>
<p><b>Feature Highlights</b></p>
<ul>
<li>Fast prototyping of the look and feel of an application. Ext Designer enables developers and designers to assemble robust layouts by dragging and dropping their components together.
</li>
<li>Fine-tuning without hand coding. Easily change the layout of a specific component, or use the inspector to fine-tune detailed properties.
</li>
<li>User client-side data stores. Ext Designer includes several new ways to incorporate and configure data stores, which can then be bound to components like DataGrids and Trees. Whether your data is in JSON, XML, a simple JavaScript array, or an Ext Direct connection, Ext Designer can help you build a data store for it faster than ever.
</li>
<li>Compatible with other development tools. Once the application design is finished, code can be exported on a component-by-component basis, as either JSON or JavaScript classes. Ext Designer creates tight JavaScript that can be imported into any popular IDE.
</li>
</ul>
<p>Interestingly, the took is a desktop application versus a Web app like Bespin, CodeMirror, or Ares. Some will be happy with this, as it gets the benefits of a desktop tool.... but I am a fan of where Ares in particular innovates (it lets you easily integrate your desktop files with the cloud.... via a Java applet).</p>
<p>If you already develop on Ext, it is a no brainer to give the designer a good walk through. At $219, if it saves you a couple of hours of work it is probably worth it :) The fact that Ext offers layout, rich components, and service integration, means that you can get an app up and running in short order.</p>
<p>What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ext-designer-1-0-wysiwyg-application-design-tool-for-the-web/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Harmony: Canvas Drawing Tool</title>
		<link>http://ajaxian.com/archives/harmony-canvas-drawing-tool</link>
		<comments>http://ajaxian.com/archives/harmony-canvas-drawing-tool#comments</comments>
		<pubDate>Wed, 10 Mar 2010 09:50:44 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8702</guid>
		<description><![CDATA[Harmony is a new drawing tool, a HTML5/Canvas experiment with great potential. It provides some unique brush styles, and can produce some great-looking charcoal pencil style sketches, among other things. Better to try it out than explain it in words. Creator Mr. Doob (Richard Cabello) explains how he used Canvas to make it darker the <a href="http://ajaxian.com/archives/harmony-canvas-drawing-tool">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/To1A-EPz79w&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/To1A-EPz79w&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p><a href="http://mrdoob.com/lab/javascript/harmony/">Harmony</a> is a new drawing tool, a HTML5/Canvas experiment with great potential. It provides some unique brush styles, and can produce some great-looking charcoal pencil style sketches, among other things. Better to <a href="http://mrdoob.com/lab/javascript/harmony/">try it out</a> than explain it in words.</p>
<p>Creator Mr. Doob  (Richard Cabello) <a href="http://mrdoob.com/blog/post/689">explains</a> how he used Canvas to make it darker the more you draw over it:</p>
<blockquote><p>
The whole thing is quite modular so I can keep adding more brush styles whenever I get inspired. During the process I found out that, for some reason (apparently lack of hardware acceleration), Firefox and Opera do not support context.globalCompositeOperation = 'darker'. This was on the HTML5 spec before but got removed. Just so you know what I'm talking about, this is like the "multiply" blending in Photoshop. Webkit does support it tho. I hope they put it back on the specs and all browsers support it.
</p></blockquote>
<p>You can also save images using data URI encoding.</p>
<p>As it works on webkit, he made sure it worked on the mobile Android and iPhone browsers. No multi-touch as yet, but the touch UI still makes a nice input mechanism.</p>
<p><a href="http://mrdoob.com/lab/javascript/harmony/"><img src="http://ajaxian.com/wp-content/images/harmony.jpg" alt="harmony" title="harmony" width="320" height="480" class="alignnone size-full wp-image-8703" /></a></p>
<p>(Thanks <a href="http://twitter.com/FND">FND</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/harmony-canvas-drawing-tool/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ZooTool by MooTool(s)</title>
		<link>http://ajaxian.com/archives/zootool-by-mootools</link>
		<comments>http://ajaxian.com/archives/zootool-by-mootools#comments</comments>
		<pubDate>Fri, 26 Feb 2010 11:25:12 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8656</guid>
		<description><![CDATA[Bastian Allgeier has developed a beautiful, native looking web application called ZooTool. Zootool is a visual bookmark tool for images, videos, documents and links. It is completely based on Mootools, even though it looks more like a Cappuccino app! Play with it. Enjoy it.]]></description>
			<content:encoded><![CDATA[<p>Bastian Allgeier has developed a beautiful, native looking web application called <a href="http://zootool.com/">ZooTool</a>.</p>
<p>Zootool is a visual bookmark tool for images, videos, documents and links. It is completely based on Mootools, even though it looks more like a Cappuccino app!</p>
<p>Play with it. Enjoy it.</p>
<p><img src="http://ajaxian.com/wp-content/images/zootool.jpg" alt="zootool" title="zootool" width="480" height="306" class="alignnone size-full wp-image-8657"/></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/zootool-by-mootools/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Javascript ePub Readers</title>
		<link>http://ajaxian.com/archives/javascript-epub-readers</link>
		<comments>http://ajaxian.com/archives/javascript-epub-readers#comments</comments>
		<pubDate>Tue, 09 Feb 2010 08:34:33 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[eBooks]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8572</guid>
		<description><![CDATA[eBooks have gone mainstream, and right now the open ePub format is getting a lot of attention, being the iPad's book format of choice. Often overlooked in gadget-centric media is the fact that ePub is based on web standards, and therefore amenable to being rendered in the browser, sans plugins. Pure Javascript ePub readers are <a href="http://ajaxian.com/archives/javascript-epub-readers">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://romeda.org/republish"><img src="http://ajaxian.com/wp-content/images/republish2.png" alt="republish2" title="republish2" width="470" height="330" class="alignnone size-full wp-image-8574" /></a></p>
<p>eBooks have gone mainstream, and right now the open ePub format is getting a lot of attention, being the iPad's book format of choice. Often overlooked in gadget-centric media is the fact that ePub is based on web standards, and therefore amenable to being rendered in the browser, sans plugins. Pure Javascript ePub readers are starting to crop up, and Keith Fahlgren has written about <a href="http://blog.threepress.org/2010/02/06/three-javascript-epub-readers/">several of them</a>:</p>
<blockquote>
<p>Just in the last few days, details emerged of two new JavaScript ePub readers, <a href="http://romeda.org/rePublish/">rePublish</a> from <a href="http://twitter.com/blaine/status/8733522914">Blaine Cook (@blaine)</a> and <a href="http://github.com/augustl/js-epub">JSEpub</a> (<a href="http://s3.amazonaws.com/augustl-stuff/epub-is-getting-there-95.png">screenshot</a>) from <a href="http://twitter.com/augustl/status/8700582603">August Lilleaas (@augustl)</a>. These two new readers join <a href="http://twitter.com/liza">@liza</a>’s <a href="http://blog.threepress.org/2009/02/09/introducing-epubjs/">epubjs</a>, which will be a year old on Tuesday. An improved version of epubjs powers the <a href="http://epubzengarden.com">ePub Zen Garden</a>, which helps “dispel the myth that digital books can&#8217;t also be crafted works of visual design.”</p>
</blockquote>
<p>All are open source, and as Keith notes in the comments, there's also the commercial <a href="http://www.bookglutton.com/reader/unbound?group_id=0&#038;id=3160&#038;view=ub#href(cover.html#!0p:0)">BookGlutton project</a>. BookGlutton (which we <a href="http://ajaxian.com/archives/bookglutton">covered earlier</a>) shows the promise of browser-based eBooks: it lets you embed books as lightbox-powered widgets, and supports annotation.</p>
<p>The underlying structure of ePub is <a href="http://en.wikipedia.org/wiki/EPUB">described on wikipedia</a>:</p>
<blockquote><p>
EPUB consists of three specifications:<br />
Open Publication Structure (OPS) 2.0, contains the formatting of its content.[5]<br />
Open Packaging Format (OPF) 2.0, describes the structure of the .epub file in XML.[6]<br />
OEBPS Container Format (OCF) 1.0, collects all files as a ZIP archive.[7]<br />
Basically, EPUB internally uses XHTML or DTBook (an XML standard provided by the DAISY Consortium) to represent the text and structure of the content document, and a subset of CSS to provide layout and formatting. XML is used to create the document manifest, table of contents, and EPUB metadata. Finally, the files are bundled in a zip file as a packaging format.
</p></blockquote>
<p>In the case of unzipping, Keith points out the <a href="http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt">inflate library</a> has been around since 1999. One can imagine other applications for zip too; for example, it's often used as a format for bundling code (Java JARs, Python Eggs, Firefox and Chrome extensions), so reliable unzipping makes it possible to build browser-based IDEs and exploration tools against such archives.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/javascript-epub-readers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rolling a coke can around with pure CSS</title>
		<link>http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css</link>
		<comments>http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:33:58 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8496</guid>
		<description><![CDATA[Román Cortés is having a lot of fun with CSS tricks these days. He just built an example rolling CSS coke can that uses background-attachment, background-position, and a few other tricks to get the effect. No fancy CSS3 needed here! The key pieces used: PLAIN TEXT CSS: &#160; p &#123; &#160; &#160; &#160; &#160; background-image: <a href="http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Román Cortés is having a lot of fun with CSS tricks these days. He just built an example <a href="http://www.romancortes.com/blog/pure-css-coke-can/">rolling CSS coke can</a> that uses background-attachment, background-position, and a few other tricks to get the effect. No fancy CSS3 needed here!</p>
<p><a href="http://www.romancortes.com/blog/pure-css-coke-can/"><img src="http://ajaxian.com/wp-content/images/Pure-CSS-Coke-Can-by-Román-Cortés.png" alt="Pure CSS Coke Can by Román Cortés" title="Pure CSS Coke Can by Román Cortés" width="509" height="400" class="aligncenter size-full wp-image-8508" /></a></p>
<p>The key pieces used:</p>
<div class="igBar"><a href="javascript:showCodeTxt('css-22');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">CSS:</span>
<div id="css-22">
<div class="css">
<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;">p <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: #000000; font-weight: bold;">background-image</span>: <span style="color: #993333;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span>coke-label.jpg<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; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background-attachment</span>: <span style="color: #993333;">fixed</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: #000000; font-weight: bold;">background-repeat</span>: <span style="color: #993333;">repeat-x</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: #000000; font-weight: bold;">width</span>: 1px;</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: #cc00cc;">#x1 <span style="color:#006600; font-weight:bold;">&#123;</span></span>background-<span style="color: #000000; font-weight: bold;">position</span>: 5px 30px;<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: #cc00cc;">#x2 <span style="color:#006600; font-weight:bold;">&#123;</span></span>background-<span style="color: #000000; font-weight: bold;">position</span>: 0px 30px;<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: #cc00cc;">#x3 <span style="color:#006600; font-weight:bold;">&#123;</span></span>background-<span style="color: #000000; font-weight: bold;">position</span>: -3px 30px;<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: #cc00cc;">#x4 <span style="color:#006600; font-weight:bold;">&#123;</span></span>background-<span style="color: #000000; font-weight: bold;">position</span>: -6px 30px;<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: #cc00cc;">#x5 <span style="color:#006600; font-weight:bold;">&#123;</span></span>background-<span style="color: #000000; font-weight: bold;">position</span>: -8px 30px;<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>It helps to see the can and the wrapper that is placed around it.</p>
<p><img src="http://ajaxian.com/wp-content/images/coke-can.png" alt="coke-can" title="coke-can" width="194" height="336" class="aligncenter size-full wp-image-8509" /></p>
<p><img src="http://ajaxian.com/wp-content/images/coke-label.jpg" alt="coke-label" title="coke-label" width="537" height="280" class="aligncenter size-full wp-image-8510" /></p>
<p>[Edit: Fixed the hotlinking - well played Román - he <a href="http://www.flickr.com/photos/codepo8/4313258909/">Rick-rolled us</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>YouTube and Vimeo turn on HTML5 video tag</title>
		<link>http://ajaxian.com/archives/youtube-html5-video</link>
		<comments>http://ajaxian.com/archives/youtube-html5-video#comments</comments>
		<pubDate>Fri, 22 Jan 2010 11:21:18 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8471</guid>
		<description><![CDATA[At Google I/O the team showed a demo of YouTube running video right in the browser, instead of in the rectangle of Flash. Now, that URL takes you to the beta, which you can opt-in too. I am torn on what to write on this showcase though.... so, especially since it is Friday, here are <a href="http://ajaxian.com/archives/youtube-html5-video">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/images/youtubehtml5.png" alt="youtubehtml5" title="youtubehtml5" width="668" height="481" class="alignnone size-full wp-image-8472" /></p>
<p>At Google I/O the team showed a demo of <a href="http://www.youtube.com/html5">YouTube</a> running video right in the browser, instead of in the rectangle of Flash.</p>
<p>Now, that URL takes you to the beta, which you can opt-in too. I am torn on what to write on this showcase though.... so, especially since it is Friday, here are two takes:</p>
<p><b>Open Web Advocate</b></p>
<p>It is fantastic to see a massive site - the poster child of Flash video - implement HTML5 video. If you want to piss of an Adobean ask them "how do you feel about YouTube folks making millions off of the back of your work. Surely you got a bunch of license money... oh wait."</p>
<p>This is the first step for YouTube, and now that video is a native experience in the browser they can innovate in really interesting ways.</p>
<p>One bonus feature for trying the beta: "Videos with ads are not supported" :)</p>
<p><b>The Other Guy</b></p>
<p>It is great to see YouTube showing off HTML5 support, however you will notice that it only works in the Safari/Chrome world (saying it works in IE via ChromeFrame is cheating) due to the fact that YouTube only supports H.264 and hasn't done Ogg. Sure it would take a lot to get Ogg support at that scale, but it would also help the cause a lot.</p>
<p>When you test it at this early stage you also see that there isn't HD support or much of the other features of the Flash player, so instead of showing off how the experience can be better..... it is in catch up mode. Features such as full screen aren't even an option yet of course. We need to move faster.</p>
<p>I am looking forward how things play out over time. What guy are you today?</p>
<p><b>NOTE:</b> <a href="http://news.cnet.com/8301-27076_3-10439048-248.html">Vimeo are turning on support too</a>, also H.264 only.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/youtube-html5-video/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>A live video tool tip showcase of HTML5 video, canvas, and Ext</title>
		<link>http://ajaxian.com/archives/live-video-tooltip</link>
		<comments>http://ajaxian.com/archives/live-video-tooltip#comments</comments>
		<pubDate>Fri, 15 Jan 2010 11:26:51 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8449</guid>
		<description><![CDATA[David Davis of Ext doesn't just have a cool name. He does cool stuff :) His latest post explains a showcase of melding HTML5 video and canvas support as he creates a live video tooltip. The example uses Ext JS web desktop and the code created delivers a special Panel that is able to deliver <a href="http://ajaxian.com/archives/live-video-tooltip">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.extjs.com/blog/wp-content/uploads/2010/01/HTML5-video-screen-shot-desktop5.png"/></p>
<p>David Davis of Ext doesn't just have a cool name. He does cool stuff :) His latest post explains <a href="http://www.extjs.com/blog/2010/01/14/html5-video-canvas-extjs/">a showcase of melding HTML5 video and canvas support</a> as he creates a live video tooltip.</p>
<p>The <a href="http://xant.us/ext-ux/lib/ext-3.0.0/examples/desktop/desktop.html">example uses Ext JS web desktop</a> and the code created delivers a special Panel that is able to deliver video, and then the simple act of grabbing a video frame and scaling it down for the tooltip:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-24');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-24">
<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;">win.<span style="color: #006600;">ctx</span>.<span style="color: #006600;">drawImage</span><span style="color:#006600; font-weight:bold;">&#40;</span>win.<span style="color: #006600;">videoEl</span>, <span style="color:#800000;">0</span>, <span style="color:#800000;">0</span>, win.<span style="color: #006600;">tip</span>.<span style="color: #006600;">width</span>, win.<span style="color: #006600;">tip</span>.<span style="color: #006600;">height</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>Very nicely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/live-video-tooltip/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Side by side diffs that look great, all in the browser</title>
		<link>http://ajaxian.com/archives/side-by-side-diffs-that-look-great-all-in-the-browser</link>
		<comments>http://ajaxian.com/archives/side-by-side-diffs-that-look-great-all-in-the-browser#comments</comments>
		<pubDate>Mon, 21 Dec 2009 15:10:17 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8332</guid>
		<description><![CDATA[We knew that we needed VCS support for Bespin. We also knew that we wanted to have support that is richer than just having command line access. Since we are in a rich UI environment we can do more, and one of the features I was excited to play with was diff visualization. Well, the <a href="http://ajaxian.com/archives/side-by-side-diffs-that-look-great-all-in-the-browser">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>We knew that we needed VCS support for Bespin. We also knew that we wanted to have support that is richer than just having command line access. Since we are in a rich UI environment we can do more, and one of the features I was excited to play with was diff visualization.</p>
<p>Well, the Atlassian FishEye crew just popped up with a preview of <a href="http://blogs.atlassian.com/devtools/2009/12/sneak-peek-sexy-sidebyside-diffs.html">side by side diffs in the browser</a> and the looks great, similar to FileMerge and the like. Pete Moore takes us on a walk through:</p>
<p><object id="ep_player" name="ep_player" height="391" width="640" data="http://cdn.episodic.com/player/EpisodicPlayer.swf?config=http%3A%2F%2Fcdn.episodic.com%2Fshows%2Fofyeqkca6vpf%2Fog10ec9nipfw%2Fconfig.xml" type="application/x-shockwave-flash"><param name="movie" value="http://cdn.episodic.com/player/EpisodicPlayer.swf?config=http%3A%2F%2Fcdn.episodic.com%2Fshows%2Fofyeqkca6vpf%2Fog10ec9nipfw%2Fconfig.xml"/><param name="AllowScriptAccess" value="always"/><param name="allowfullscreen" value="true"/><embed src="http://cdn.episodic.com/player/EpisodicPlayer.swf?config=http%3A%2F%2Fcdn.episodic.com%2Fshows%2Fofyeqkca6vpf%2Fog10ec9nipfw%2Fconfig.xml" type="application/x-shockwave-flash" allowfullscreen="true" AllowScriptAccess="always" width="640" height="391" id="ep_player" name="ep_player"/><a href="http://analytics.episodic.com/download/eog10ec9nipfw/f20/side-by-side-diff-sneak-preview.mp4"><img src="http://cdn.episodic.com/shows/assets/480/a103882.jpg" height="360" width="640" border="0"/></a></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/side-by-side-diffs-that-look-great-all-in-the-browser/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://analytics.episodic.com/download/eog10ec9nipfw/f20/side-by-side-diff-sneak-preview.mp4" length="1" type="video/vnd.objectvideo" />
		</item>
	</channel>
</rss>

