<?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; Utility</title>
	<atom:link href="http://ajaxian.com/by/topic/utility/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 02 Feb 2012 22:23:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>See beauty in the Kaleidoscope</title>
		<link>http://ajaxian.com/archives/see-beauty-in-the-kaleidoscope</link>
		<comments>http://ajaxian.com/archives/see-beauty-in-the-kaleidoscope#comments</comments>
		<pubDate>Wed, 02 Jun 2010 19:17:54 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9464</guid>
		<description><![CDATA[Sofa love to create beautiful things. They worked on Aristo, the the open source theme that came from Cappuccino, but has also been picked up by jQuery UI and others. This time around Sofa has created a simple purpose Mac application called Kaleidoscope that allows you to visualize diffs for both text docs and images. <a href="http://ajaxian.com/archives/see-beauty-in-the-kaleidoscope">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kaleidoscopeapp.com/"><img src="http://ajaxian.com/wp-content/images/kaleidoscope.png" alt="" title="kaleidoscope" width="480" height="292" class="alignnone size-full wp-image-9465" /></a></p>
<p><a href="http://www.madebysofa.com/">Sofa</a> love to create beautiful things. They worked on <a href="http://ajaxian.com/archives/big-news-from-cappuccino-aristo-and-atlas">Aristo</a>, the the open source theme that came from Cappuccino, but has also been picked up by jQuery UI and others.</p>
<p>This time around Sofa has created a simple purpose Mac application called <a href="http://www.kaleidoscopeapp.com/">Kaleidoscope</a> that allows you to visualize diffs for both text docs and images.</p>
<p>The Website for this tool is so well done, that I feel compelled to click buy even before downloading the free 30 day demo :)</p>
<p>With Image Scope, you get a tool that can enable some BrowserLab-esque work, as well as diffing any old images.</p>
<p>With Text Scope, you get a nice looking diff viewer that integrates with your VCS workflow.</p>
<p>Nice work on creating something that you *want* to use guys.</p>
<p><img src="http://ajaxian.com/wp-content/images/kaleidoscopeapp.png" alt="" title="kaleidoscopeapp" width="480" height="395" class="alignnone size-full wp-image-9467" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/see-beauty-in-the-kaleidoscope/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Great win for WebGL and standards; O3D becomes JS library</title>
		<link>http://ajaxian.com/archives/great-win-for-webgl-and-standards-o3d-becomes-js-library</link>
		<comments>http://ajaxian.com/archives/great-win-for-webgl-and-standards-o3d-becomes-js-library#comments</comments>
		<pubDate>Fri, 07 May 2010 17:56:40 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Toolkit]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[WebGL]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9242</guid>
		<description><![CDATA[This is fantastic news. A lot of people were claiming that O3D was going to beat WebGL because of performance. Then the O3D team showed that the two could be complimentary, and they have taken the next step on that journey. As of today, O3D will stop being a plugin, and will become a JS <a href="http://ajaxian.com/archives/great-win-for-webgl-and-standards-o3d-becomes-js-library">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/uofWfXOzX-g&#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/uofWfXOzX-g&#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>This is fantastic news. A lot of people were claiming that O3D was going to beat WebGL because of performance. Then the O3D team showed that the two could be complimentary, and they have taken the next step on that journey. As of today, <a href="http://blog.chromium.org/2010/05/future-of-o3d.html">O3D will stop being a plugin</a>, and will become a JS library on top of WebGL. This is fantastic, as we need a nice API on top of the OpenGL-y WebGL library.</p>
<p>Here are their thoughts. Congrats to the O3D team, to the WebGL folk, and to the future:</p>
<blockquote><p>
We launched the O3D API about a year ago to start a discussion within the web community about establishing a new standard for 3D graphics on the web. Since then, we’ve also helped develop WebGL, a 3D graphics API based on OpenGL ES 2.0 that has gradually emerged as a standard, and is supported by other browser and hardware vendors like Mozilla, Apple and Opera. </p>
<p>At Google, we’re deeply committed to implementing and advancing standards, so as of today, the O3D project is changing direction, evolving from its current plug-in implementation into a JavaScript library that runs on top of WebGL. Users and developers will still be able to download the O3D plug-in and source code for at least one year, but other than a maintenance release, we plan to stop developing O3D as a plug-in and focus on improving WebGL and O3D as a JavaScript library.</p>
<p>We did not take this decision lightly. In initial discussions we had about WebGL, we were concerned that JavaScript would be too slow to drive a low-level API like OpenGL and we were convinced that a higher level approach like the O3D scene graph would yield better results. We were also cognizant of the lack of installed OpenGL drivers on many Windows machines, and that this could hamper WebGL’s adoption. </p>
<p>Since then, JavaScript has become a lot faster. We&#8217;ve been very impressed by the demos that developers have created with WebGL, and with the ANGLE project, we believe that Chromium will be able to run WebGL content on Windows computers without having to rely on installed OpenGL drivers.</p>
<p>The JavaScript implementation of O3D is still in its infancy, but you <a href="http://code.google.com/p/o3d/">can find a copy of it on the O3D project site</a> and see it running some of the O3D samples from a WebGL enabled browser (alas, no Beach Demo yet). Because browsers lack some requisite functionality like compressed asset loading, not all the features of O3D can be implemented purely in JavaScript. We plan to work to give the browser this functionality, and all capabilities necessary for delivering high-quality 3D content.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/great-win-for-webgl-and-standards-o3d-becomes-js-library/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ares 1.0: The easy to use, browser-based, powerful mobile touch UI app creator goes final</title>
		<link>http://ajaxian.com/archives/ares-10-released</link>
		<comments>http://ajaxian.com/archives/ares-10-released#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:37:55 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[WebOS]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9063</guid>
		<description><![CDATA[A few months back we announced an early build of Ares the full mobile development environment from Palm that runs entirely in the browser. I was really excited to be at JSConf at the weekend where Matt McNulty announced Ares going 1.0 in our session. He promptly went on to do demos that show how <a href="http://ajaxian.com/archives/ares-10-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>A few months back we <a href="http://ajaxian.com/archives/project-ares-full-mobile-development-environment-from-palm-all-in-the-browser">announced an early build of Ares</a> the full mobile development environment from Palm that runs entirely in the browser.</p>
<p>I was really excited to be at JSConf at the weekend where Matt McNulty announced <a href="http://ares.palm.com/Ares/about.html">Ares going 1.0</a> in our session. He promptly went on to do demos that show how easy it is to create mobile Web applications in the tool. You can <a href="http://ares.palm.com/Ares/docstemp/tutorial10.html">follow one of these tutorials</a> and Matt kindly put together a walkthrough of how easy it is to build a GPS enabled app in a few lines of code:</p>
<p><object width="480" height="336"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11091702&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=11091702&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="336"></embed></object></p>
<p>(<a href="http://vimeo.com/11091702">Click here to see it larger</a>).</p>
<p>If you tried Ares first time around, take another look. There are a lot of new features, and you can catch up all of <a href="http://ares.palm.com/Ares/about.html">what&#8217;s new</a>. Really glad to see the flushing out of components and sensors, and after enjoying CSS layout for many years, I love what the Ares crew have done with <a href="http://ares.palm.com/Ares/docstemp/layout.html">layout</a>.</p>
<blockquote><p>
<b>Components:</b> </p>
<ul>
<li>Ares now has Components, which are widgets that provide functionality, but without any user interface. The palette now contains the service calls, sensors, etc that are in the webOS SDK. </li>
<li>Components can be drag-and-dropped onto the canvas, where they will show up as icons across the bottom of the screen. They can be selected and configured in the property inspector, and then called in a single line of code.</li>
<li>Inline help &#8211; When a component is selected on the canvas or view tree, the last tab of the property inspector will show jsdoc-style inline help for that component, so you can see what you can call on each component.</li>
<li>For example, you can drag out a camera component, and in the ontap handler of a button, type this.$.camera1.execute(); to launch the camera in your app!</li>
<li>See the 1.0 tutorial to see how easy it is to create an app that connects to phone services using components.</li>
</ul>
<p><b>Designer Ergonomics</b> </p>
<ul>
<li>Undo and Redo in the interface builder!</li>
<li>Cut, Copy, Paste in the interface builder!</li>
<li>New shortcut buttons to swap between the designer and code assistant for a given scene</li>
<li>Improved support for drag and drop between panels and at the top and bottom of the canvas</li>
</ul>
<p><b>Find and Replace</b> </p>
<ul>
<li>Find and replace within a file</li>
<li>Find and replace within multiple projects, complete with filters for which projects</li>
</ul>
<p><b>JSLint Integration</b></p>
<ul>
<li>JSLint feedback is now integrated into the code editor</li>
<li>New JSLint &quot;Monitor&quot; feature will provide feedback on your code as you type continuously</li>
</ul>
<p><b>And lots more&#8230;</b></p>
<ul>
<li>New FeedList widget for RSS feeds</li>
<li>Google Maps v3 wrapper widget for including multi-touch enabled maps in your applications</li>
<li>Left and right panels can be hidden/shown with a single click on their arrows</li>
<li>Unified spot in the UI for Find and Replace, JSLint, Debugger, and Log Viewer</li>
<li>Improved Debugger functionality, including viewing all variables in scope in a tree control, updated as you step through your code</li>
<li>Code beautification in the code editor</li>
<li>Lots of bug fixes</li>
</ul>
</blockquote>
<p>My favourite Tweet about Ares showed up yesterday:</p>
<p><a href="http://twitter.com/mando511/status/12456423322"><img src="http://ajaxian.com/wp-content/images/ares-bmpcounter.png" alt="ares-bmpcounter" title="ares-bmpcounter" width="480" height="296" class="alignnone size-full wp-image-9064"/></a></p>
<p>What would you like to see in a tool that helps you build great mobile Web applications?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ares-10-released/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ExceptionHub: Catch your site errors online or in email</title>
		<link>http://ajaxian.com/archives/exceptionhub</link>
		<comments>http://ajaxian.com/archives/exceptionhub#comments</comments>
		<pubDate>Fri, 09 Apr 2010 06:12:54 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8909</guid>
		<description><![CDATA[Ryan Stout (of BustaName fame) has created ExceptionHub, a place that holds JavaScript exceptions from your apps, for you to peruse. In an attempt to make error tracking easier in JavaScript, we are releasing exceptionhub.com into beta. ExceptionHub lets you drop a few lines of code into your site and it will track all errors <a href="http://ajaxian.com/archives/exceptionhub">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/WKVPsm7pxuU&#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/WKVPsm7pxuU&#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>Ryan Stout (of <a href="http://www.bustaname.com/">BustaName</a> fame) has created <a href="http://exceptionhub.com/">ExceptionHub</a>, a place that holds JavaScript exceptions from your apps, for you to peruse.</p>
<blockquote><p>
In an attempt to make error tracking easier in JavaScript, we are releasing exceptionhub.com into beta.  ExceptionHub lets you drop a few lines of code into your site and it will track all errors that occur on your page and provides you with a clean web interface to view the exceptions from.  Similar exceptions are grouped together and you can see what browser and operating systems the errors occur on, as well as the page where it was triggered.  Perhaps most useful of all, ExceptionHub gives you a full stack-trace of where the error happened and the functions leading up to the error.</p>
<p>ExceptionHub is designed to be run both in development and on a live site.  Running ExceptionHub on a live site can keep informed of any broken features or browsers that don&#8217;t handle your JavaScript correctly.  While it doesn&#8217;t replace testing, it does help bring peace of mind that your site is running correctly.
</p></blockquote>
<p>As the video above shows you, a snippet of code will trap exceptions and send them to exception hub, which can show you information on the error, as well as info on the user agent that caused it.</p>
<p>Great stuff, and a great beta. What else would you like to see?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/exceptionhub/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Firefox Heads Up Display for Developers</title>
		<link>http://ajaxian.com/archives/firefox-heads-up-display-for-developers</link>
		<comments>http://ajaxian.com/archives/firefox-heads-up-display-for-developers#comments</comments>
		<pubDate>Mon, 05 Apr 2010 17:57:58 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8861</guid>
		<description><![CDATA[Firefox was the Web runtime that gave us the best Web developer tools&#8230; some built-in, and then the likes of Firebug. We are seeing more, newer tools coming out of Mozilla. David Dahl, Firefox engineer, is working on a fun new console heads up display: Create an interactive Console to help web developers understand everything <a href="http://ajaxian.com/archives/firefox-heads-up-display-for-developers">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Firefox was the Web runtime that gave us the best Web developer tools&#8230; some built-in, and then the likes of Firebug. We are seeing more, newer tools coming out of Mozilla. <a href="http://ddahl.com/">David Dahl</a>, Firefox engineer, is working on <a href="https://wiki.mozilla.org/Firefox/Projects/Console">a fun new console heads up display</a>:</p>
<blockquote><p>
Create an interactive Console to help web developers understand everything that happens during the creation of a web-page. Console entries will be time-stamped objects representing errors, network traffic, javascript events, DOM/HTML mutation and logging output. The Console will also have an interactive command line for evaluating javascript against the current webpage and an interactive Workspace window for entering and evaluating larger blocks of code.</p>
<p>For web-developers, the Console should include a logging API and a richer interactive environment for executing live javascript against the active webpage.</p>
<p>The Console should fully-replace the existing Error Console window.
</p></blockquote>
<p><img src="http://ajaxian.com/wp-content/images/firefoxhud.png" alt="firefoxhud" title="firefoxhud" width="480" height="669" class="alignnone size-full wp-image-8862"/></p>
<p>Check out the milestone releases to see some of the fun stuff coming.</p>
<ul>
<li>HTTP traffic observation and logging
</li>
<li>DOM Mutation event logging
</li>
<li>W3C Timing Spec
</li>
</ul>
<p>Nice work!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/firefox-heads-up-display-for-developers/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Border Image Generator Tool</title>
		<link>http://ajaxian.com/archives/border-image-generator-tool</link>
		<comments>http://ajaxian.com/archives/border-image-generator-tool#comments</comments>
		<pubDate>Mon, 05 Apr 2010 11:11:29 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8858</guid>
		<description><![CDATA[Working on mobile Web apps such as the Facebook app on webOS offers one huge advantage over standard desktop development. You can code to a single runtime (in our case, WebKit). This means that crazy hacks can go away as you use functionality such as border-image. Kevin Decker is an engineer on my team, and <a href="http://ajaxian.com/archives/border-image-generator-tool">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Working on mobile Web apps such as the Facebook app on webOS offers one huge advantage over standard desktop development. You can code to a single runtime (in our case, WebKit). This means that crazy hacks can go away as you use functionality such as <code>border-image</code>.</p>
<p>Kevin Decker is an engineer on my team, and has worked with border image in this context, as well as on Firebug (another place that you get this luxury&#8230;. extensions). Border image is fantastic compared with the slew of images hacks that we have had to do in the past, but it can be hard to visualize what you are doing.</p>
<p>This is what Kevin felt too, and to solve it he hacked up <a href="http://www.incaseofstairs.com/2010/04/border-image-generator/">a border-image generator tool</a> that gives you a WYSIWYG editing experience that generates the cross browser CSS for you. Take <a href="http://www.incaseofstairs.com/border-image-generator/#%7B%22src%22%3A%22http%3A%2F%2Fwww.w3.org%2FTR%2Fcss3-background%2Fborder.png%22%2C%22linkBorder%22%3Atrue%2C%22borderWidth%22%3A%5B8%2C0%2C0%2C0%5D%2C%22imageOffset%22%3A%5B26%2C27%2C27%2C27%5D%2C%22scaleFactor%22%3A3.689655172413793%7D">an example</a> and start to tweak the offsets and see the live image change on the fly.<br />
<img src="http://ajaxian.com/wp-content/images/border-image-preview.png" alt="border-image-preview" title="border-image-preview" width="480" height="289" class="alignnone size-full wp-image-8859" /></p>
<p>You can also <a href="http://github.com/kpdecker/border-image-generator">check out the project on GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/border-image-generator-tool/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jsFiddle: a Web playground</title>
		<link>http://ajaxian.com/archives/jsfiddle</link>
		<comments>http://ajaxian.com/archives/jsfiddle#comments</comments>
		<pubDate>Tue, 23 Feb 2010 11:57:15 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8630</guid>
		<description><![CDATA[Piotr Zalewa has created a really great playground, jsFiddle, for testing sample code and playing with the Web. With an area for the holy trinity of the Web (HTML, CSS, JS) and an output region, you can get right to hacking. It goes beyond this though. You can also add resources, an Ajax echo backend, <a href="http://ajaxian.com/archives/jsfiddle">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/images/jsfiddle.png" alt="jsfiddle" title="jsfiddle" width="480" height="306" class="alignnone size-full wp-image-8631"/></p>
<p>Piotr Zalewa has created a really great playground, <a href="http://jsfiddle.net">jsFiddle</a>, for testing sample code and playing with the Web. With an area for the holy trinity of the Web (HTML, CSS, JS) and an output region, you can get right to hacking.</p>
<p>It goes beyond this though. You can also add resources, an Ajax echo backend, and auto load from a slew of JavaScript frameworks.</p>
<p>You can also check out the examples and see great stuff such as <a href="http://jsfiddle.net/zalun/FZqZN/">Processing in action</a>.</p>
<p>And the finishing touch, share and embed.</p>
<p>Piotr wrote all of this using CodeMirror and MooTools. Nice! Having worked on Bespin, and developed a playground like this (looking forward to show a new mobile one soon!) I appreciate the work!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jsfiddle/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Zen Coding: Generating HTML from selectors</title>
		<link>http://ajaxian.com/archives/zen-coding-generating-html-from-selectors</link>
		<comments>http://ajaxian.com/archives/zen-coding-generating-html-from-selectors#comments</comments>
		<pubDate>Mon, 23 Nov 2009 11:45:42 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8013</guid>
		<description><![CDATA[Normally we use CSS selectors to find and tear apart HTML. Sergey Chikuyonok's jujitsu move is to do the opposite. With Zen Coding you take a CSS selector like this: PLAIN TEXT HTML: &#160; html:xt&#62;div#header&#62;div#logo+ul#nav&#62;li.item-$*5&#62;a &#160; and it generates an HTML structure like this: PLAIN TEXT HTML: &#160; &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; <a href="http://ajaxian.com/archives/zen-coding-generating-html-from-selectors">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Normally we use CSS selectors to find and tear apart HTML. Sergey Chikuyonok's jujitsu move is to do the opposite. With <a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/">Zen Coding</a> you take a CSS selector like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-3');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-3">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">html:xt&gt;div#header&gt;div#logo+ul#nav&gt;li.item-$*5&gt;a</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 generates an HTML structure like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-4">
<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: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&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;"><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">&lt;html</span></a> xmlns=<span style="color: #ff0000;">"http://www.w3.org/1999/xhtml"</span> xml:<span style="color: #000066;">lang</span>=<span style="color: #ff0000;">"en"</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;"><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">&lt;head&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;"><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">&lt;title&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title&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; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">&lt;meta</span></a> <span style="color: #000066;">http-equiv</span>=<span style="color: #ff0000;">"Content-Type"</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">"text/html;charset=UTF-8"</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;/head&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;"><span style="color: #009900;"><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">&lt;body&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;"><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;">id</span>=<span style="color: #ff0000;">"header"</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; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"logo"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/ul.html"><span style="color: #000000; font-weight: bold;">&lt;ul</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"nav"</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"item-1"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"item-2"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"item-3"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"item-4"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">&lt;li</span></a> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"item-5"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">""</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li&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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul&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; &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;/body&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;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html&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>
<p><object width="400" height="275"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7405114&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=7405114&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="275"></embed></object></p>
<p>You can check out a <a href="http://zen-coding.ru/demo/">demo</a> or try out support in various editors (<a href="http://code.google.com/p/zen-coding/downloads/detail?name=Zen.Coding-Aptana.v0.5.zip">Aptana</a> to <a href="http://code.google.com/p/zen-coding/downloads/detail?name=Zen%20Coding%20for%20TextMate%20v0.3.1.zip">TextMate</a>).</p>
<p>Now I want to create a Bespin plugin to do this too!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/zen-coding-generating-html-from-selectors/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Web Inspector gets major improvements</title>
		<link>http://ajaxian.com/archives/web-inspector-gets-major-improvements</link>
		<comments>http://ajaxian.com/archives/web-inspector-gets-major-improvements#comments</comments>
		<pubDate>Tue, 03 Nov 2009 11:21:14 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7794</guid>
		<description><![CDATA[Joseph Pecoraro has made some major improvements to Web Inspector. It is now much easier to create and much around with the content. Create new CSS selectors with ease; Add content in-line with elements; see color representations of any value. And, there is more: DOM Storage The DOM Storage DataGrids now displays live updates. You <a href="http://ajaxian.com/archives/web-inspector-gets-major-improvements">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.bogojoker.com/wp-content/uploads/2009/10/colors.png"/></p>
<p>Joseph Pecoraro has made <a href="http://blog.bogojoker.com/2009/10/improving-the-web-inspector/">some major improvements to Web Inspector</a>.</p>
<p>It is now much easier to create and much around with the content. Create new CSS selectors with ease; Add content in-line with elements; see color representations of any value.</p>
<p>And, there is more:</p>
<blockquote>
<p><b>DOM Storage</b><br />
The DOM Storage DataGrids now displays live updates. You don’t need to manually refresh every time something changes. Also you can create, edit, and tab through the keys/values. Double click any open space to start creating a new value. Catching on to a theme with my updates? Overall this makes working with DOM Storage just a little more developer friendly.</p>
<p><b>Cookies</b><br />
This was the first feature that required me really digging into WebKit’s source, including touching all platforms. With the help of WebKit developers I eventually added support for viewing all cookie information (secure, httpOnly, etc) and deleting cookies for the Mac. All other platforms were able to display basic cookie information available through document.cookie.</p>
<p><b>Event Listeners</b><br />
Not having the ability to enumerate the Event Listeners via JavaScript has plagued me, and most likely plenty of other developers, for a very long time. This made viewing Event Listeners an excellent candidate for an Inspector feature.</p>
<p>The implementation as it stands now has some great functionality. There is a new sidebar pane when you inspect an element in the Elements Tree Hierarchy. If the current Node has registered event listeners there is a separate section for each type of event registered (click, mouseover, etc). Within each of these lists is a display of all of the event listeners in the entire event flow for that type. That means you see all the Capturing Event Listeners followed by the Bubbling Event Listeners in the exact order that they execute and on which nodes they are registered.</p>
<p><b>Natural Sorting of Properties</b><br />
Who counts “1?, “11?, “12?, “2?, “3?, etc. Certainly nobody I know! So, I implemented a variant of the alphanumerical sorting algorithm for properties when they are displayed in the console. Now you get a much more natural ordering!</p>
<p><b>Syntax Highlighting</b></p>
<p>JSON and CSS syntax highlighting is now there.</p>
<p>These are not nearly all of the new features in the Web Inspector. These are just the ones that I worked on and contributed to. To name some other features there are Scope Bars for the Console and Resources Panel, the ability to view Request and Response HTTP Parameters for Resources (great for debugging AJAX), Resource Status Code indicators, complete Serialization between the inspected page and the inspector, and more.
</p></blockquote>
<p>Thanks Joe!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/web-inspector-gets-major-improvements/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The State of Developer Tools</title>
		<link>http://ajaxian.com/archives/the-state-of-developer-tools</link>
		<comments>http://ajaxian.com/archives/the-state-of-developer-tools#comments</comments>
		<pubDate>Wed, 21 Oct 2009 11:27:11 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7699</guid>
		<description><![CDATA[Our very own Ben Galbraith took a dip down under to talk about the state of developer tools. The session description is: For many years, developing for the web left quite a bit to be desired when it came to the tools at developers disposal, particularly in comparison with the sorts of development environments available <a href="http://ajaxian.com/archives/the-state-of-developer-tools">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Our very own Ben Galbraith took a dip down under to talk about the <a href="http://www.webdirections.org/resources/ben-galbraith-the-state-of-developer-tools">state of developer tools</a>.</p>
<p>The session description is:</p>
<blockquote><p>
For many years, developing for the web left quite a bit to be desired when it came to the tools at developers disposal, particularly in comparison with the sorts of development environments available for desktop applications.</p>
<p>But the rise of browser native tools, in Safari, Internet Explorer and Opera, browser based add-ons like Firebug, web based tools and more mean that developers have a vast array of powerful tools to help develop, debug, profile and otherwise improve their applications. But, just what’s out there? And what can be done with them?</p>
<p>In this session, co-founder of Ajaxian.com, and The Ajax Experience conferences, and now head of Mozilla Foundation’s new Tools team Ben Galbraith will take us on an expedition through the developer tools landscape. Learn what’s out there, and what they can do to make you more productive, your sites and applications better and faster, and your life as a developer more enjoyable.
</p></blockquote>
<p><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009webdirectionstools-091013010538-phpapp02&#038;stripped_title=state-of-developer-tools-wds09" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009webdirectionstools-091013010538-phpapp02&#038;stripped_title=state-of-developer-tools-wds09" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<p>Listen in to <a href="http://webdirections.org/podcasts/WD09/WDS09-Ben-Galbraith.mp3">the audio recording of session</a>, and check out the <a href="http://www.webdirections.org/resources/">other talks from the event</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/the-state-of-developer-tools/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://webdirections.org/podcasts/WD09/WDS09-Ben-Galbraith.mp3" length="20209723" type="audio/mpeg" />
		</item>
		<item>
		<title>Ext JS Designer Preview</title>
		<link>http://ajaxian.com/archives/extjs-designer</link>
		<comments>http://ajaxian.com/archives/extjs-designer#comments</comments>
		<pubDate>Wed, 14 Oct 2009 12:15:58 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7632</guid>
		<description><![CDATA[Aaron Conran has published a new preview of Ext JS Designer which includes the new features: Duplicating Components Transforming Components Undo/Redo Configuration Searching Auto Updating Screenshots It is a great time for new tools popping out with Atlas coming along nicely too.... and a couple more being hacked on. Open Web Tools FTW! :)]]></description>
			<content:encoded><![CDATA[<p><object id="csSWF" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="500" height="390"><param name="src" value="http://www.extjs.com/api/xds/screencasts/designer_controller.swf"></param><param name="bgcolor" value="#1a1a1a"></param><param name="quality" value="best"></param><param name="allowScriptAccess" value="always"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="flashVars" value="autostart=false"><embed name="csSWF" src="http://www.extjs.com/api/xds/screencasts/designer_controller.swf" bgcolor="#1a1a1a" quality="best" allowscriptaccess="always" allowfullscreen="true" scale="showall" flashvars="autostart=false&amp;thumb=http://www.extjs.com/api/xds/screencasts/FirstFrame.png&amp;thumbscale=60&amp;color=0xFFFFFF,0xDCDCDC" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" width="500" height="390"></embed></param></object></p>
<p>Aaron Conran has published a new preview of <a href="http://www.extjs.com/blog/2009/10/08/ext-js-designer-preview/">Ext JS Designer</a> which includes the new features:</p>
<ul>
<li>Duplicating Components
</li>
<li>Transforming Components
</li>
<li>Undo/Redo
</li>
<li>Configuration Searching
</li>
<li>Auto Updating
</li>
<li>Screenshots
</li>
</ul>
<p>It is a great time for new tools popping out with Atlas coming along nicely too.... and a couple more being hacked on. Open Web Tools FTW! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/extjs-designer/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Opacity: Fancy a design tool with &#8220;Save as Canvas&#8221;?</title>
		<link>http://ajaxian.com/archives/opacity-fancy-a-design-tool-with-save-as-canvas</link>
		<comments>http://ajaxian.com/archives/opacity-fancy-a-design-tool-with-save-as-canvas#comments</comments>
		<pubDate>Fri, 25 Sep 2009 11:25:44 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7443</guid>
		<description><![CDATA[Our Webmonkey friends have featured Opacity, a vector image manipulation tool that has a couple of features that are interesting for Web developers wanting to do HTML5-y things: To use the new source code feature in Opacity, simply design your vector-based graphic or animation sequence and, once you’re happy with it, head to the Inspector <a href="http://ajaxian.com/archives/opacity-fancy-a-design-tool-with-save-as-canvas">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://likethought.com/opacity/images/screenshots/screenshot1.png" width="480"/></p>
<p>Our Webmonkey friends have <a href="http://www.webmonkey.com/blog/Turn_Your_Vector_Art_Into_Canvas-based_Animations_With_Opacity">featured</a> <a href="http://likethought.com/opacity/">Opacity</a>, a vector image manipulation tool that has a couple of features that are interesting for Web developers wanting to do HTML5-y things:</p>
<p><img src="http://www.wired.com/images_blogs/epicenter/2009/09/opacity-export.jpg" style="float:right; padding:8px"/></p>
<blockquote><p>
To use the new source code feature in Opacity, simply design your vector-based graphic or animation sequence and, once you’re happy with it, head to the Inspector menu where you can use what Opacity refers to as “Factories” to export your image in various formats. To get Canvas-based source code, chose Source Code for the format and Canvas (JavaScript) as the language.</p>
<p>We should note that there are other tools around that can do similar things with just an image file — such as Alistair MacDonald’s <a href="http://hyper-metrix.com/#Burst">Burst engine</a>, which can take SVG animations and convert them to JavaScript objects that are rendered inside of a &lt;canvas&gt; tag.<br />
Opacity is a Mac OS X application and costs $90 — not cheap, but cheaper than than Adobe Illustrator. There’s also a lighter version known as Opacity Express, which still has the code export option, but lacks some other features and retails for $40.
</p></blockquote>
<p>Nice to see tools embracing the new technology. Of course, the devil is often in the details... specifically how good the code is (We all remember the old Frontpage days!) <a href="http://www.inkscape.org/">Inkscape</a> is another example, that embraces SVG.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opacity-fancy-a-design-tool-with-save-as-canvas/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>FireCrystal: Observe and roll back interactions</title>
		<link>http://ajaxian.com/archives/firecrystal-observe-and-roll-back-interactions</link>
		<comments>http://ajaxian.com/archives/firecrystal-observe-and-roll-back-interactions#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:52:18 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Tip]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7312</guid>
		<description><![CDATA[FireCrystal is a Firefox extension that helps designers and programmers alike figure out how interactive behaviors on the web work. FireCrystal allows users to record and rewind their interactions with web pages while showing the relevant code.]]></description>
			<content:encoded><![CDATA[<p><a href="http://stephenoney.com/images/firecrystal_nyt.png"></p>
<p></a><a href="http://stephenoney.com/firecrystal.php">FireCrystal</a> is a Firefox extension that helps designers and programmers alike figure out how interactive behaviors on the web work. FireCrystal allows users to record and rewind their interactions with web pages while showing the relevant code.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/firecrystal-observe-and-roll-back-interactions/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>punypng: crushing your images even more</title>
		<link>http://ajaxian.com/archives/punypng</link>
		<comments>http://ajaxian.com/archives/punypng#comments</comments>
		<pubDate>Mon, 17 Aug 2009 11:19:43 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7257</guid>
		<description><![CDATA[Conrad Chu, Design Director at Ask.com, thought he needed an image compression tool better suited for designers and front-end developers (compared to smush.it) and scratched the itch with punypng. punypng is serious about image compression -- it handles 8-bit PNGs, 24-bit PNGs, JPEGs, GIFs and animated GIFs. It also leverages dirty transparency techniques to further <a href="http://ajaxian.com/archives/punypng">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Conrad Chu, Design Director at Ask.com, thought he needed an image compression tool better suited for designers and front-end developers (compared to smush.it) and scratched the itch with <a href="http://www.gracepointafterfive.com/punypng-making-the-web-a-more-puny-place">punypng</a>.</p>
<blockquote><p>
punypng is serious about image compression -- it handles 8-bit PNGs, 24-bit PNGs, JPEGs, GIFs and animated GIFs.  It also leverages dirty transparency techniques to further optimize transparent images beyond what typical compressors like pngcrush can handle.
</p></blockquote>
<p><b>Features</b></p>
<ul>
<li>Fully supports for PNG, .GIF, .JPG</li>
<li>Clear affordances for # of bytes saved (as well as being pretty bar graphs)</li>
<li>JPEG Compression — punypng doesn’t leave JPEGs out in the cold. &nbsp;JPEGs are analyzed to see if a compressed PNG format is better (ex: JPEGs with heavy solid areas benefit from this). &nbsp;But if not, don’t despair, punypng is backed with <a href="http://jpegclub.org/">jpeg-tran</a> and <a href="http://freshmeat.net/projects/jpegoptim/">jpegoptim</a> for further JPEG optimzation.</li>
<li>“Fire-and-forget” batch processing: You can upload up to 50 files in a single session. &nbsp;Optimized versions are clearly labeled, and if no further optimization can be made to the uploaded file, you get the original back untouched. &nbsp;After you upload a batch, you can go ahead and upload another batch without having to reload the page.</li>
<li>Download batch jobs as a single time-stamped ZIP.</li>
<li><a href="http://www.gracepointafterfive.com/punypng-changelog">See the changelog</a> for future updates</li>
</ul>
<p><b>More info</b></p>
<ul>
<li><a href="http://www.gracepointafterfive.com/punypng-making-the-web-a-more-puny-place">Blog post on launch</a>
</li>
<li><a href="http://www.gracepointafterfive.com/punypng-benchmarks">Side-by-side comparison</a>
</li>
<li><a href="http://www.gracepointafterfive.com/punypng-now-supports-dirty-transparency">Dirty Transparency Support</a>
</li>
</ul>
<p><img src="http://ajaxian.com/wp-content/uploads/punypng.png" alt="" title="punypng" width="493" height="379" class="alignnone size-full wp-image-7258" /></p>
<p>Ray Cromwell had an informative note (as per usual):</p>
<blockquote><p>
Also add <a href="http://www.raymond.cc/blog/archives/2009/03/19/4-free-tools-to-optimize-and-compress-png-images-without-loosing-quality/">AdvancedCOMP's superior-than-zlib/gzip compression</a> which they don't appear to be using.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/punypng/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Detecting globals with a bookmarklet</title>
		<link>http://ajaxian.com/archives/detecting-globals-with-a-bookmarklet</link>
		<comments>http://ajaxian.com/archives/detecting-globals-with-a-bookmarklet#comments</comments>
		<pubDate>Fri, 14 Aug 2009 11:04:37 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7223</guid>
		<description><![CDATA[Kangax stumbled upon a blog post by Remy Sharp on detecting global variable leaks. He took that work and updated it a little to filter out Prototype, Script.aculo.us, Google and Mozilla globals. If you want to add sets it is easy to do so... go fork away. The bookmarklet itself is here. Of course: It’s <a href="http://ajaxian.com/archives/detecting-globals-with-a-bookmarklet">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinkweb2.com/projects/prototype/detecting-global-variable-leaks/"><img src="http://yura.thinkweb2.com/detect_global.png" border="0"/></a></p>
<p>Kangax stumbled upon a <a href="http://remysharp.com/2007/11/01/detect-global-variables/">blog post by Remy Sharp</a> on detecting global variable leaks. He took that work and <a href="http://thinkweb2.com/projects/prototype/detecting-global-variable-leaks/">updated it a little</a> to filter out Prototype, Script.aculo.us, Google and Mozilla globals.</p>
<p>If you want to add sets it is easy to do so... go <a href="http://github.com/kangax/detect-global/tree/master">fork away</a>. The bookmarklet itself is <a href="http://github.com/kangax/detect-global/raw/a4f0af3df94d2b5f7970fac8f8e2fd30bf2b384d/detect-global.js">here</a>.</p>
<p>Of course:</p>
<blockquote><p>
It’s worth mentioning that <a href="http://www.jslint.com/">JSLint</a> already allows detecting undeclared assignments, but JSLint can hurt feelings so we won’t use it. Well, actually JSLint performs so many validations, that it’s not always possible to detect undeclared assignments in huge scripts of legacy applications (like the one I wanted to examine). Running a test such as in this bookmarklet can be “applied on” any script.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/detecting-globals-with-a-bookmarklet/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Curve Explorer: Visualize with Ease</title>
		<link>http://ajaxian.com/archives/curve-explorer-visualize-with-ease</link>
		<comments>http://ajaxian.com/archives/curve-explorer-visualize-with-ease#comments</comments>
		<pubDate>Tue, 04 Aug 2009 11:43:10 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7176</guid>
		<description><![CDATA[Chris Vanrensburg has created a curve explorer that gives you a nice visualization of curve functions which are used for animations (easing and the like). Chris has more: I looked at the work of Robert Penner, since it seems to have become the gold standard for motion curves. Nice stuff, and it inspired me. I <a href="http://ajaxian.com/archives/curve-explorer-visualize-with-ease">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Chris Vanrensburg has created a <a href="http://www.uize.com/tools/curve-explorer.html">curve explorer</a> that gives you a nice visualization of curve functions which are used for animations (easing and the like).</p>
<p><img src="http://ajaxian.com/wp-content/uploads/curveexplorer.png" alt="" title="curveexplorer" width="500" height="248" class="alignnone size-full wp-image-7177" /></p>
<p>Chris has more:</p>
<blockquote><p>
I looked at the work of Robert Penner, since it seems to have become the gold standard for motion curves. Nice stuff, and it inspired me. I wanted to see if I could take things a step further – ratchet it up a notch. What I ended up with is something I’m quite pleased with for a first pass at approaching this problem.</p>
<p>My work deviated from Robert Penner’s in a number of respects:</p>
<ol>
<li>It became clear to me quite early on that I didn’t want to implemented the resolved ease-out and ease-in-out versions of the easing equations for all the different types of curves, so that got me going down the path of creating curve function modifiers, in this case to take an ease-in curve function and spit back out the ease-out and ease-in-out variations.
</li>
<li>While I was at it, I decided, what the hay, let’s make an alternate version of the ease-in-out – I call it the ease-in-the-middle variation, because it swaps the ease-in and ease-out phases around so that the easing is in the middle of the curve. It was cheap, and the ease-in-the-middle curves may be compelling in some use case.
</li>
<li>And then, what the hay, why should you only get quadratic, cubic, quartic, and quintic easing – why not have arbitrary power curves. So I did it! Say hi to easeInPow, easeOutPow, easeInOutPow, and powRightInTheKisser (ok, the last one’s a joke for Family Guy fans – you know who you are).
</li>
<li>It became clear that I didn’t want curve functions to be value interpolators – merely 0-to-1 value remappers. You can do a lot with values in the range of 0 to 1, in terms of using them as blend ratios, or scaling factors. This alleviated the burden from every curve function to have to do the interpolation calculations. More importantly, though, it improves performance when you’re using multiple curve functions together to compose new curve functions (we’ll get to that in a moment), since they aren’t all redundantly re-performing the same interpolation many times over.
</li>
<li>I wanted to be able to use curve functions as units, to be easily recombined to form new curve functions – treating them almost like simple values and involving them in operations with function operator methods. So, I introduced the concept of curve function modifiers. This got my juices flowing, and I was soon conjuring up interesting things you could do when you can operate on curve functions – like mixing two of them together in equal amounts, or bending them horizontally or vertically, or repeating them, or quantizing them, or redrawing them, or multiplying them, or just generally doing unspeakable things to them.
</li>
<li>I liked a lot of what Robert Penner did, but I wasn’t thrilled with his bounce curve. I wanted more bounce. And more bounces. And crazy sh*t, like controlling the shape of individual bounces (because I can get downright insane when JavaScript inspires me). So, I started with a fresh slate and implemented a parameterized bounce curve function generator, where you can control number of bounces, bounce peak curve, bounce width ratio, and bounce curve. Needless to say, I needed plenty of coffee to stimulate my math gland.
</li>
</ol>
<p>So, back to the Curve Explorer tool. As it turns out, it’s fun to play with curves – especially if you can see them plotted as you tweak parameters, or see how they affect motion with an animation, or what they look like as a color gradient. From the tool you’ll see what I mean as you peruse the list of preset curve expressions that I threw in there. My particular favorites are some of the bounce curves, like “third time’s a charm”, “super bouncy”, “fast thud”, “jumping bean”, and then some of the complex curves that use curve modifiers, like “wobbly easeInOutPow”, “pull and release elastic”, “coin settle effect”, “bounce down the stairs”, and “shutters slamming”. But they’re all fun, really.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/curve-explorer-visualize-with-ease/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Open Web Tools Directory</title>
		<link>http://ajaxian.com/archives/open-web-tools-directory</link>
		<comments>http://ajaxian.com/archives/open-web-tools-directory#comments</comments>
		<pubDate>Tue, 07 Jul 2009 07:46:24 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7060</guid>
		<description><![CDATA[Over at the Mozilla Labs blog, we just launched an "Open Web Tools Directory". Running Ajaxian for the past few years, we've discussed a legion of developer tools of all shapes and sizes, but there are so many we've quickly lost track of all that's available. With the Tools Directory, we hope to provide a <a href="http://ajaxian.com/archives/open-web-tools-directory">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://tools.mozilla.com/"><img src="http://ajaxian.com/wp-content/uploads/tooldir.png" alt="" title="Open Web Tools Directory" width="470" height="338" class="alignnone size-full wp-image-7063" /></a></p>
<p>Over at the <a href="https://labs.mozilla.com/2009/07/open-web-tools-directory/">Mozilla Labs blog, we just launched an "Open Web Tools Directory"</a>. Running Ajaxian for the past few years, we've discussed a legion of developer tools of all shapes and sizes, but there are so many we've quickly lost track of all that's available.</p>
<p>With the <a href="http://tools.mozilla.com/">Tools Directory</a>, we hope to provide a central location where the community can track what's happening in the tools space. At Mozilla, we release early and often in the open-source tradition, so what we've launched is the first step in the journey. We'd love to get your feedback in this early stage as we evolve the directory.</p>
<p>We've got nearly 70 tools in the database so far, but that's just a small fraction of the hundreds of tools out there. Would you help us out and <a href="http://spreadsheets.google.com/viewform?formkey=cjJTMzFrOGUtcXRYRm9rcUQtTDd4UkE6MA..">tell us about your favorite tool(s)</a>? (We're still working out infrastructure, but eventually we'll have a way to own a tool and keep its metadata up-to-date. And our sincere thanks to <a href="http://www.laurathomson.com/">Laura Thomson</a> who worked very hard to help us get the infrastructure and back-end for the directory ready.)</p>
<p>Dion and I both have some corporate IT experience under the belt, and because of that we just couldn't bring ourselves to write yet another typical table-based database CRUD app; hence, the space theme and gratuitous canvas-based UI. So the Tools Directory is our second canvas-centric web application released this year, but we promise to use the DOM API more for the next one. ;-)</p>
<h3>Implementation Details</h3>
<p>We knew we wanted to do some kind of space-themed design for the directory involving images for the tools flying around, but we weren't sure how much performance we could get out of canvas. Some of our previous experiments have shown that we can repaint a large canvas many times per second, but how many individual images could we paint per frame full-screen and still get decent perf? <a href="http://galbraiths.org/benchmarks/small_images.html">This experiment</a>, representative of several we whipped up, was somewhat promising: we're able to draw <em>and scale</em> about 700 images about 20 times per second.</p>
<p><a href="http://galbraiths.org/benchmarks/small_images.html"><img src="http://ajaxian.com/wp-content/uploads/imagetest.png" alt="" title="Canvas Image Test" width="470" height="322" class="alignnone size-full wp-image-7064" /></a></p>
<p>Based on these results, we thought we could get away with a "warp-in" effect flying in maybe one or two hundred images and get decent frame rates. To make the effect somewhat predictable, we based the animation effect on clock time with the result that it drops frames rather than alters the speed of animation when the browser can't keep up with the requested workload.</p>
<p>Unfortunately, once we implemented the effect, we discovered that we started to get choppy performance with only forty or so images (all of our tests are using recent-model MacBook Pros running OS X and Firefox 3.5 or Safari 4). Our test images were 32x32, but once we switched to 128x128 images, performance suffered dramatically. We haven't looked into it further, but the degradation may be linear according to image size.</p>
<p>We had always planned on caching aggressively, but these results indicated just how much caching we'd have to do: lots.</p>
<p>So we implemented the directory in such a way that at any time, we can cache the state of the canvas animation and exclude arbitrary elements from the cache. This is how we implement various features like selecting a subset of the items and moving them to the center of the screen when you search the directory, for example:</p>
<p><img src="http://ajaxian.com/wp-content/uploads/grid.png" alt="" title="Search Results" width="470" height="278" class="alignnone size-full wp-image-7065" /></p>
<p>We also added a staged introductory fly-in effect where only a subset of the tools fly in and we cache the screen state and then fly in others, keeping the overall number of items to animate low--but the effect is presently disabled. Look for it in a future release as we expand the catalog of tools further. We'll have to work something out because flying just 70 items at once produces choppy animations on the fastest hardware using the fastest browsers available.</p>
<p>For the time-based animations, we implemented a simple timing framework. We wanted to grab an off-the-shelf library, but of the half-dozen JS animation frameworks we analyzed, all of them assumed we were animating DOM nodes or changing single object properties, which made their use somewhat obtuse. We really just wanted a simple callback for each frame in the animation. (We also grabbed the <a href="http://gx.riccardodegni.net/">GX framework</a>'s easy-to-grab ports of <a href="http://www.robertpenner.com/easing/">Robert Penner's easing equations</a>.) We'd love to replace our timing framework with something more sophisticated and actively maintained; let us know if you've got something we can use. In particular, we'd like a framework that intelligently reports the minimum resolution required by all currently scheduled timing jobs.</p>
<p>On that note, the other interesting bit for us was working out how often to repaint the canvas. After experimentation, we settled on using setInterval to repaint the scene every 20 ms. This has the unfortunate side effect of hitting the CPU rather hard during the animations and so forth.</p>
<h3>Future</h3>
<p>We're really excited to add a bunch of community features to the directory. We want folks to vote on tools, comment on them, submit and maintain them, and so forth. But in addition to that, we want to enable <em>sub-universes</em>; e.g., we want to track plug-ins for tools like Prototype, jQuery or Firebug so you can explore those universes within the framework of the overall directory. And if there's interest, we'd love to make it even more general and release the "universe browser" framework for anyone that wants to use this interface to explore taxonomies.</p>
<p>On a technical note, we're really keen to see how the DOM would perform relative to canvas, and how 3D approaches (e.g., using Mozilla Firefox and Google Chrome's 3D support) work out. Oh, and we're going to release an accessible, non-graphical version of the directory soon as well.</p>
<p>Please tell us what you think, and we hope all of us will be able to make use of this framework to help keep track of the exploding universe of web developer tools. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/open-web-tools-directory/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>More than you ever want to see about encoding</title>
		<link>http://ajaxian.com/archives/encoding</link>
		<comments>http://ajaxian.com/archives/encoding#comments</comments>
		<pubDate>Thu, 02 Jul 2009 10:03:19 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Tip]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=7043</guid>
		<description><![CDATA[Paul Baukaus linked to jsescape, a little form that shows escaping and unescaping across a number of encodings. Andrea Giammarchi had his own post on encodings in a different way.... as he talked about en-code which you can check out in action here on the page that lets you do simple encodings, especially for source <a href="http://ajaxian.com/archives/encoding">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Paul Baukaus linked to <a href="http://0xcc.net/jsescape/">jsescape</a>, a little form that shows escaping and unescaping across a number of encodings.</p>
<p><img src="http://ajaxian.com/wp-content/uploads/encodings.png" alt="" title="encodings" width="488" height="802" class="alignnone size-full wp-image-7044" /></p>
<p>Andrea Giammarchi had his own post on encodings in a different way.... as he talked about<br />
<a href="http://webreflection.blogspot.com/2009/05/en-code-quickest-way-to-encode-your.html">en-code</a> which you can <a href="http://www.3site.eu/encode/">check out in action here</a> on the page that lets you do simple encodings, especially for source code, in short order.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/encoding/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Web Developer Collection: Packaged up Firefox extensions</title>
		<link>http://ajaxian.com/archives/web-developer-collection-packaged-up-firefox-extensions</link>
		<comments>http://ajaxian.com/archives/web-developer-collection-packaged-up-firefox-extensions#comments</comments>
		<pubDate>Wed, 10 Jun 2009 10:22:15 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6926</guid>
		<description><![CDATA[Over the years we are have mentioned many Firefox, and Firebug plugins to aid us Web developers. Wouldn't it be nice to subscribe to a bundle of these tools? The Firefox Add On team has now given us that ability with Add On Collections: Today, we’re excited to introduce a new feature to our website <a href="http://ajaxian.com/archives/web-developer-collection-packaged-up-firefox-extensions">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/addons.png" alt="" title="addons" width="500" height="133" class="alignnone size-full wp-image-6927" /></p>
<p>Over the years we are have mentioned many Firefox, and Firebug plugins to aid us Web developers. Wouldn't it be nice to subscribe to a bundle of these tools? The Firefox Add On team has now given us that ability with <a href="http://blog.mozilla.com/addons/2009/06/10/introducing-add-on-collections/">Add On Collections</a>:</p>
<blockquote><p>
Today, we’re excited to introduce a new feature to our website that will expose the niche add-ons that can be hard to find, and gives users a more active role in helping outstanding add-ons bubble to the top. One thing we’ve learned as add-ons have grown in popularity over the years is that once a user finds an add-on they love, they become a fan for life. We see this all the time as people recommend add-ons to their friends and write great reviews.
</p></blockquote>
<p>You will notice the <a href="https://addons.mozilla.org/en-US/firefox/collection/webdeveloper">Web Developer</a> collection that features:</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/966">Tamper Data</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/5369">YSlow</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/539">MeasureIt</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/271">ColorZilla</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/590">ShowIP</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/684">FireFTP</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/7943">Pixel Perfect</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/3829">Live HTTP Headers</a>
</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/2464">FoxyProxy</a>
</li>
</ul>
<p>What is missing? What should be on the list?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/web-developer-collection-packaged-up-firefox-extensions/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Firefogg: Ogg Theora Encoding Plugin</title>
		<link>http://ajaxian.com/archives/firefogg-ogg-theora-encoding-plugin</link>
		<comments>http://ajaxian.com/archives/firefogg-ogg-theora-encoding-plugin#comments</comments>
		<pubDate>Mon, 08 Jun 2009 12:04:43 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6898</guid>
		<description><![CDATA[Test Drive the latest Thusnelda theora encoder with in-browser Video Encoder Firefogg. Firefogg is an open source extension written by xiph hacker Jan Gerber that lets web developers request ogg video from their users. Since Firefogg is a Firefox extension it allows users to stay up to date with the latest and greatest theora encoder <a href="http://ajaxian.com/archives/firefogg-ogg-theora-encoding-plugin">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.firefogg.org/png/firefogg.png" style="float: right; padding: 4px;"/></p>
<p>Test Drive the latest <a href="http://web.mit.edu/xiphmont/Public/theora/demo7.html ">Thusnelda</a> theora encoder with in-browser Video Encoder Firefogg.</p>
<p>Firefogg <http ://www.firefogg.org/> is an open source extension written by xiph hacker Jan Gerber that lets web developers request ogg video from their users. Since Firefogg is a Firefox extension  it allows users to stay up to date with the latest and greatest theora encoder improvements. Firefogg supports a <a href="http://www.firefogg.org/dev/">rich api</a> for enabling web applications to drive in-browser transcoding from any source footage to ogg theora video (and possibly other free formats in the future). Firefogg supports simultaneously uploading while its transcoding via resumable one meg post chunks. It also supports fall-back to HTTP POST all-at-once. Both methods include progress indicators.</p>
<p>Firefogg can also encode to a local file and an <a href="http://www.firefogg.org/make/advanced.html">example local transcoding application</a> is on the site. The sample application builds on jQuery UI so it supports custom themes. Integration for firefogg with wikimedia commons are <a href="http://techblog.wikimedia.org/2009/03/add-media-wizard-and-firefogg-on-testwikipediaorg/">in testing</a>. With Firefoxs video tag support this should be a helpful extension for converting video to ogg theora or supporting ogg theora video contributions in your website.</p>
<p>Firefogg can minimize the need for costly server side transocding infrastructure. It also helps avoid the extra transcode problem that plagues net video where a user saves to a compressed format locally to save time uploading; then the server re-transcodes the video so others can view it with a flash plugin. With Fireofogg we can go strait from the high quality source to the format distributed on the web site.</p>
<p>Here is an example of using the API yourself to convert video:</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: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color:#006600; font-weight:bold;">&#40;</span>Firefogg<span style="color:#006600; font-weight:bold;">&#41;</span> == <span style="color: #3366CC;">'undefined'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'You dont have Firefogg, please go to http://firefogg.org to install it'</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; window.<span style="color: #006600;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'http://firefogg.org'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> ogg = <span style="color: #003366; font-weight: bold;">new</span> Firefogg<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;"><span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span>ogg.<span style="color: #006600;">selectVideo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> options = JSON.<span style="color: #006600;">stringify</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color: #3366CC;">'maxSize'</span>: <span style="color:#800000;">320</span>, <span style="color: #3366CC;">'videoBitrate'</span>: <span style="color:#800000;">500</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> data = JSON.<span style="color: #006600;">stringify</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color: #3366CC;">'title'</span>: <span style="color: #3366CC;">'example video'</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ogg.<span style="color: #006600;">upload</span><span style="color:#006600; font-weight:bold;">&#40;</span>options, <span style="color: #3366CC;">'http://example.com/addvideo'</span>, data<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; <span style="color: #003366; font-weight: bold;">var</span> updateStatus = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></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> <span style="color: #000066;">status</span> = ogg.<span style="color: #006600;">status</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> progress = ogg.<span style="color: #006600;">progress</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;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//do something with status and progress, i.e. set progressbar width:</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> progressbar = document.<span style="color: #006600;">getElementById</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'progressbar'</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; progressbar.<span style="color: #006600;">style</span>.<span style="color: #006600;">width</span>= parseInt<span style="color:#006600; font-weight:bold;">&#40;</span>progress*<span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span> +<span style="color: #3366CC;">'px'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; progressbar.<span style="color: #006600;">innerHTML</span> = parseInt<span style="color:#006600; font-weight:bold;">&#40;</span>progress*<span style="color:#800000;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color: #3366CC;">'% - '</span> + <span style="color: #000066;">status</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//loop to get new status if still encoding or uploading</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span>ogg.<span style="color: #006600;">state</span> == <span style="color: #3366CC;">'encoding'</span> || ogg.<span style="color: #006600;">state</span> == <span style="color: #3366CC;">'uploading'</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; setTimeout<span style="color:#006600; font-weight:bold;">&#40;</span>updateStatus, <span style="color:#800000;">500</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></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//encoding sucessfull, state can also be 'encoding failed'</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>ogg.<span style="color: #006600;">state</span> == <span style="color: #3366CC;">'done'</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; progressbar.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">'Upload done. You can close this window now'</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; <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; updateStatus<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/firefogg-ogg-theora-encoding-plugin/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

