<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://aptana.com" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
 <title>Aptana Blog</title>
 <link>http://aptana.com/blog</link>
 <description>Aptana Blog</description>
 <language>en</language>
<item>
 <title>When will Aptana Studio go from 3,999,999 to 4,000,000?</title>
 <link>http://aptana.com/blog/khakman/when_will_aptana_studio_downloads_pass_4_million</link>
 <description>&lt;h3&gt;Let&#039;s play a game:&lt;/h3&gt;
&lt;p&gt;
If you&#039;ve been to the &lt;a href=&quot;http://www.aptana.com&quot; target=&quot;_window&quot;&gt;www.aptana.com homepage&lt;/a&gt; recently, you&#039;ve probably noticed that Aptana Studio is on the verge of its 4 millionth download!  It a huge milestone and we&#039;re pleased so many people have loved working with Aptana Studio.  (And it&#039;s just going to get even better with some releases this Summer).  But before the download ticker rolls form 3,999,999 to 4,000,000, let&#039;s have some fun...
&lt;/p&gt;
&lt;p&gt;
Match your skills to others in the Aptana community to predict when Aptana Studio will get it&#039;s 4 millions download ... more precisely... exactly when the &lt;a href=&quot;http://www.aptana.com&quot; target=&quot;_window&quot;&gt;download ticker on the Aptana homepage will display 4,000,000&lt;/a&gt;?  &lt;i&gt; It&#039;s likely to happen sometime between June 15th and June 25th.  So stake your claim and announce your answer now.&lt;/i&gt;
&lt;p&gt;
&lt;h3&gt;How to publish and lay claim to your answer:&lt;/h3&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a href=&quot;http://twitter.com&quot; target=&quot;_window&quot;&gt;Twitter.com&lt;/a&gt; to tweet your answer. &lt;/li&gt;
&lt;li&gt;Use the Pacific Time Zone please.  You can specify down to the milliseconds if you like.&lt;/li&gt;
&lt;li&gt;Do not forget the AM or PM!  (We&#039;ll assume AM if you do.)&lt;/li&gt;
&lt;li&gt;In your tweet you &lt;b&gt;must include&lt;/b&gt; @Aptana and #apt4mil to that we can find your prediction on Twitter.&lt;/li&gt;
&lt;/ul&gt;  
&lt;dd&gt;For example:&lt;br /&gt;
&lt;textarea cols=60 rows=3&gt;
I predict @Aptana Studio will hit it&#039;s 4 millionth download on:
June 16, 2009 at 12:00:00 AM (Pacific Time Zone) #apt4mil
&lt;/textarea&gt;
&lt;/dd&gt;
&lt;h3&gt;Who wins?&lt;/h3&gt;
&lt;p&gt;
This is just for fun to see who gets it right and earns bragging rights for their predictive skills.  We&#039;ll announce the winner on our blog and Tweet it too and kick in an Aptana t-shirt and a year&#039;s license to Aptana Studio Pro as well.  The Aptana staff who maintains the ticker will run their own calculation for the 4 millionth download event and who ever is the closest without going over will be the winner.  In the event of a tie, the first person who tweeted will be the winner.  So announce your prediction soon.  
&lt;/p&gt;

&lt;h3&gt;Hint&lt;/h3&gt;
&lt;p&gt;
The download ticker on the Aptana homepage is driven by an algorithm that&#039;s kicked off by the startCount()
javascript function in the www.aptana.com homepage source (use the view source in your browser to see it).  When the page loads it gets the number of actual downloads from the day before and then uses that as the basis for the current day&#039;s rate of downloads, assumed to be evenly spread throughout the day.  So... we may not really know exactly when the 4 millionth download happens.  This is more about calculating when the ticker will roll form 3,999,999 to 4,000,000.
&lt;/p&gt;</description>
 <content:encoded>&lt;h3&gt;Let&#039;s play a game:&lt;/h3&gt;
&lt;p&gt;
If you&#039;ve been to the &lt;a href=&quot;http://www.aptana.com&quot; target=&quot;_window&quot;&gt;www.aptana.com homepage&lt;/a&gt; recently, you&#039;ve probably noticed that Aptana Studio is on the verge of its 4 millionth download!  It a huge milestone and we&#039;re pleased so many people have loved working with Aptana Studio.  (And it&#039;s just going to get even better with some releases this Summer).  But before the download ticker rolls form 3,999,999 to 4,000,000, let&#039;s have some fun...
&lt;/p&gt;
&lt;p&gt;
Match your skills to others in the Aptana community to predict when Aptana Studio will get it&#039;s 4 millions download ... more precisely... exactly when the &lt;a href=&quot;http://www.aptana.com&quot; target=&quot;_window&quot;&gt;download ticker on the Aptana homepage will display 4,000,000&lt;/a&gt;?  &lt;i&gt; It&#039;s likely to happen sometime between June 15th and June 25th.  So stake your claim and announce your answer now.&lt;/i&gt;
&lt;p&gt;
&lt;h3&gt;How to publish and lay claim to your answer:&lt;/h3&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a href=&quot;http://twitter.com&quot; target=&quot;_window&quot;&gt;Twitter.com&lt;/a&gt; to tweet your answer. &lt;/li&gt;
&lt;li&gt;Use the Pacific Time Zone please.  You can specify down to the milliseconds if you like.&lt;/li&gt;
&lt;li&gt;Do not forget the AM or PM!  (We&#039;ll assume AM if you do.)&lt;/li&gt;
&lt;li&gt;In your tweet you &lt;b&gt;must include&lt;/b&gt; @Aptana and #apt4mil to that we can find your prediction on Twitter.&lt;/li&gt;
&lt;/ul&gt;  
&lt;dd&gt;For example:&lt;br /&gt;
&lt;textarea cols=60 rows=3&gt;
I predict @Aptana Studio will hit it&#039;s 4 millionth download on:
June 16, 2009 at 12:00:00 AM (Pacific Time Zone) #apt4mil
&lt;/textarea&gt;
&lt;/dd&gt;
&lt;h3&gt;Who wins?&lt;/h3&gt;
&lt;p&gt;
This is just for fun to see who gets it right and earns bragging rights for their predictive skills.  We&#039;ll announce the winner on our blog and Tweet it too and kick in an Aptana t-shirt and a year&#039;s license to Aptana Studio Pro as well.  The Aptana staff who maintains the ticker will run their own calculation for the 4 millionth download event and who ever is the closest without going over will be the winner.  In the event of a tie, the first person who tweeted will be the winner.  So announce your prediction soon.  
&lt;/p&gt;

&lt;h3&gt;Hint&lt;/h3&gt;
&lt;p&gt;
The download ticker on the Aptana homepage is driven by an algorithm that&#039;s kicked off by the startCount()
javascript function in the www.aptana.com homepage source (use the view source in your browser to see it).  When the page loads it gets the number of actual downloads from the day before and then uses that as the basis for the current day&#039;s rate of downloads, assumed to be evenly spread throughout the day.  So... we may not really know exactly when the 4 millionth download happens.  This is more about calculating when the ticker will roll form 3,999,999 to 4,000,000.
&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 15 Jun 2009 12:30:44 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">582 at http://aptana.com</guid>
</item>
<item>
 <title>New Web Runtime and Tools for Web Apps on Nokia Phones</title>
 <link>http://aptana.com/blog/khakman/new_nokia_wrt_and_tools_beta_available</link>
 <description>&lt;p&gt;
Today at the Nokia Developer Conference in Monaco, Nokia showed off a slick new version of the Nokia WRT and it&#039;s tooling: The Nokia WRT Plugin for Aptana Studio.  The Nokia WRT is the web runtime on Nokia&#039;s current generation of phones that lets you use your HTML and JavaScript skills to create instantly installable mobile apps that run on Nokia phones.  Like so many mobile runtimes today, Nokia WRT uses WebKit as its core, but it also does more.  This latest version packs in a new set of powerful JavaScript APIs that let you &lt;b&gt;incorporate the mobile device&#039;s contact list and calendar data, geographical location, SMS messaging, and device sensors, such as an accelerometer, right into your mobile web apps&lt;/b&gt;.  This is a great step forward enabling millions upon millions of web developers to do the kinds of things that historically only C or Java developers could do.&lt;!--break--&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img hspace=12 align=right src=&quot;http://www.aptana.com/system/files/images/nokia_wrt_app_and_code.preview.gif&quot; width=640 height=276 alt=&quot;Nokia WRT and Nokia WRT Plugin for Aptana Studio lets web developers create feature-rich mobile web applications.&quot;/&gt;
&lt;h3&gt;What&#039;s new?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript API&#039;s for Contacts, Calendar, Location, Landmarks, Sensors (e.g. Accelerometer)
&lt;li&gt;Homescreen widget development, preview and debugging 
&lt;li&gt;Support for Touch during development and debugging
&lt;li&gt;Support for both Macintosh and Windows platforms
&lt;li&gt;New Device Previews during development
&lt;/ul&gt;
The latest Nokia WRT on Nokia N97 platform also lets users personalize their device&#039;s homescreen by adding &quot;mini-apps&quot; to them.  Imagine being able to track stock positions through Bloomberg, keep up to date on Facebook chatter or tweets on Twitter, or get sports scores and highlights -- all in real-time on the device home screen.  With this the device owner can keep current with the information they want and then launch the &quot;parent&quot; applications for more details if desired.   
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.eweek.com/c/a/Mobile-and-Wireless/Nokia-Ovi-Store-to-Launch-with-Thousands-of-Applications-174355/&quot; target=&quot;_window&quot;&gt;Nokia also has announced it&#039;s Ovi Store&lt;/a&gt; -- a mobile device accessible service to which software developers can publish their applications and on which mobile devices owners can find, download and purchase mobile apps for Nokia devices.&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Download and Resources&lt;/h3&gt;
You can &lt;b&gt;download the beta&lt;/b&gt; versions of the latest Nokia WRT and Nokia WRT Plugin &lt;a href=&quot;http://tools.ext.nokia.com/wrt/beta/aptana/v2.0/&quot; target=&quot;_window&quot;&gt;by following these instructions at Forum Nokia&lt;/a&gt;.  You&#039;ll also find a &lt;b&gt;Quick Start Guide&lt;/b&gt; and &lt;b&gt;Release Notes&lt;/b&gt; there as well.  (If you want the &lt;a href=&quot;http://www.aptana.com/nokia&quot; target=&quot;_window&quot;&gt;non-beta 1.0 release&lt;/a&gt; without this latest set of features, install Aptana Studio, then install the Nokia WRT Plugin form the My Aptana &amp;gt; Plugins area.
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;
Today at the Nokia Developer Conference in Monaco, Nokia showed off a slick new version of the Nokia WRT and it&#039;s tooling: The Nokia WRT Plugin for Aptana Studio.  The Nokia WRT is the web runtime on Nokia&#039;s current generation of phones that lets you use your HTML and JavaScript skills to create instantly installable mobile apps that run on Nokia phones.  Like so many mobile runtimes today, Nokia WRT uses WebKit as its core, but it also does more.  This latest version packs in a new set of powerful JavaScript APIs that let you &lt;b&gt;incorporate the mobile device&#039;s contact list and calendar data, geographical location, SMS messaging, and device sensors, such as an accelerometer, right into your mobile web apps&lt;/b&gt;.  This is a great step forward enabling millions upon millions of web developers to do the kinds of things that historically only C or Java developers could do.&lt;!--break--&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img hspace=12 align=right src=&quot;http://www.aptana.com/system/files/images/nokia_wrt_app_and_code.preview.gif&quot; width=640 height=276 alt=&quot;Nokia WRT and Nokia WRT Plugin for Aptana Studio lets web developers create feature-rich mobile web applications.&quot;/&gt;
&lt;h3&gt;What&#039;s new?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript API&#039;s for Contacts, Calendar, Location, Landmarks, Sensors (e.g. Accelerometer)
&lt;li&gt;Homescreen widget development, preview and debugging 
&lt;li&gt;Support for Touch during development and debugging
&lt;li&gt;Support for both Macintosh and Windows platforms
&lt;li&gt;New Device Previews during development
&lt;/ul&gt;
The latest Nokia WRT on Nokia N97 platform also lets users personalize their device&#039;s homescreen by adding &quot;mini-apps&quot; to them.  Imagine being able to track stock positions through Bloomberg, keep up to date on Facebook chatter or tweets on Twitter, or get sports scores and highlights -- all in real-time on the device home screen.  With this the device owner can keep current with the information they want and then launch the &quot;parent&quot; applications for more details if desired.   
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.eweek.com/c/a/Mobile-and-Wireless/Nokia-Ovi-Store-to-Launch-with-Thousands-of-Applications-174355/&quot; target=&quot;_window&quot;&gt;Nokia also has announced it&#039;s Ovi Store&lt;/a&gt; -- a mobile device accessible service to which software developers can publish their applications and on which mobile devices owners can find, download and purchase mobile apps for Nokia devices.&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Download and Resources&lt;/h3&gt;
You can &lt;b&gt;download the beta&lt;/b&gt; versions of the latest Nokia WRT and Nokia WRT Plugin &lt;a href=&quot;http://tools.ext.nokia.com/wrt/beta/aptana/v2.0/&quot; target=&quot;_window&quot;&gt;by following these instructions at Forum Nokia&lt;/a&gt;.  You&#039;ll also find a &lt;b&gt;Quick Start Guide&lt;/b&gt; and &lt;b&gt;Release Notes&lt;/b&gt; there as well.  (If you want the &lt;a href=&quot;http://www.aptana.com/nokia&quot; target=&quot;_window&quot;&gt;non-beta 1.0 release&lt;/a&gt; without this latest set of features, install Aptana Studio, then install the Nokia WRT Plugin form the My Aptana &amp;gt; Plugins area.
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 27 Apr 2009 16:35:44 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">564 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana RadRails 1.2 has been released!</title>
 <link>http://aptana.com/blog/cwilliams/aptana_radrails_1.2_released</link>
 <description>&lt;p&gt;
Aptana RadRails 1.2 is now available.  In addition to making it even easier to get your Rails environment set up and configured, for new and expert users alike this release makes deploying and updating your Rails apps to scalable servers via Aptana Cloud Connect as easy as a few clicks.  &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;Watch this 4 minute screencast&lt;/a&gt;.&lt;!--break--&gt;
&lt;/p&gt;

&lt;h3&gt;What&#039;s new in Aptana RadRails 1.2?&lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Easier to get Rails set up and configured (especially on Windows).&lt;/b&gt;&lt;br /&gt;
Since setting up Rails can be confusing to new users (and time consuming even for the most experienced), we’ve added a wizard that helps you get standard Ruby installed as well as RubyGems.  For Windows users, the wizard will even get and run the Standard Ruby One-Click installer for Windows for you.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Streamlined Rails app deployment and updates via Aptana Cloud Connect.&lt;/b&gt;&lt;br /&gt;
Pick a Rails project, then choose Deploy to a New Site, Deploy to Staging, or Deploy to Public.  Then RadRails and Aptana Cloud Connect do the rest for you.  RadRails 1.2 automates setting up all the integration points, installs the necessary gems, and executes the proper deployment commands for you.  And as always shows you in the console all the commands so that you can do them manually or use them in your scripts.  Checkout the &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;screencast&lt;/a&gt; to see for yourself: &lt;br/&gt;

&lt;div style=&quot;width:600px; height:375px; border:solid 1px #000&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;&lt;/div&gt;

&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Preparing for Eclipse 3.4 compatibility.&lt;/b&gt;&lt;br /&gt;
The release also lays some plumbing that will be useful as we move towards using Eclipse 3.4 as the platform for future releases. This primarily means that some debugging functionality that only worked in Studio 1.2 (based on Eclipse 3.2) will now work in Eclipse 3.3+ and in the next major release of Studio when that comes out.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;And more...&lt;/b&gt;&lt;br /&gt;
To view the full changelog for the release, go to &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10082&quot; target=&quot;_window&quot;&gt;http://support.aptana.com/asap/browse/ROR/fixforversion/10082&lt;/a&gt;.  Note that this is for 1.2.0. In fact, we just pushed a 1.2.1 bugfix release which fixed one major and two minor bugs introduced in 1.2.0.
&lt;/p&gt;

&lt;p&gt;
Enjoy!
&lt;/p&gt;

&lt;p&gt;
-- Chris
&lt;/p&gt;













</description>
 <content:encoded>&lt;p&gt;
Aptana RadRails 1.2 is now available.  In addition to making it even easier to get your Rails environment set up and configured, for new and expert users alike this release makes deploying and updating your Rails apps to scalable servers via Aptana Cloud Connect as easy as a few clicks.  &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;Watch this 4 minute screencast&lt;/a&gt;.&lt;!--break--&gt;
&lt;/p&gt;

&lt;h3&gt;What&#039;s new in Aptana RadRails 1.2?&lt;/h3&gt;

&lt;p&gt;
&lt;b&gt;Easier to get Rails set up and configured (especially on Windows).&lt;/b&gt;&lt;br /&gt;
Since setting up Rails can be confusing to new users (and time consuming even for the most experienced), we’ve added a wizard that helps you get standard Ruby installed as well as RubyGems.  For Windows users, the wizard will even get and run the Standard Ruby One-Click installer for Windows for you.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Streamlined Rails app deployment and updates via Aptana Cloud Connect.&lt;/b&gt;&lt;br /&gt;
Pick a Rails project, then choose Deploy to a New Site, Deploy to Staging, or Deploy to Public.  Then RadRails and Aptana Cloud Connect do the rest for you.  RadRails 1.2 automates setting up all the integration points, installs the necessary gems, and executes the proper deployment commands for you.  And as always shows you in the console all the commands so that you can do them manually or use them in your scripts.  Checkout the &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;screencast&lt;/a&gt; to see for yourself: &lt;br/&gt;

&lt;div style=&quot;width:600px; height:375px; border:solid 1px #000&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;&lt;/div&gt;

&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Preparing for Eclipse 3.4 compatibility.&lt;/b&gt;&lt;br /&gt;
The release also lays some plumbing that will be useful as we move towards using Eclipse 3.4 as the platform for future releases. This primarily means that some debugging functionality that only worked in Studio 1.2 (based on Eclipse 3.2) will now work in Eclipse 3.3+ and in the next major release of Studio when that comes out.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;And more...&lt;/b&gt;&lt;br /&gt;
To view the full changelog for the release, go to &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10082&quot; target=&quot;_window&quot;&gt;http://support.aptana.com/asap/browse/ROR/fixforversion/10082&lt;/a&gt;.  Note that this is for 1.2.0. In fact, we just pushed a 1.2.1 bugfix release which fixed one major and two minor bugs introduced in 1.2.0.
&lt;/p&gt;

&lt;p&gt;
Enjoy!
&lt;/p&gt;

&lt;p&gt;
-- Chris
&lt;/p&gt;













</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 03 Apr 2009 11:59:02 -0500</pubDate>
 <dc:creator>cwilliams</dc:creator>
 <guid isPermaLink="false">562 at http://aptana.com</guid>
</item>
<item>
 <title>Java support added to Aptana Cloud</title>
 <link>http://aptana.com/blog/jlam/java_now_in_aptana_cloud</link>
 <description>&lt;p&gt;
As of today, March 24, 2009, anyone using &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt; as a plugin to Eclipse can deploy Java apps to the Cloud via Aptana Cloud Connect.   &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud Connect&lt;/a&gt; integrates Aptana Studio/Eclipse with your cloud hosted Java apps.  It lets you instantly put Java projects and apps into to the Cloud, then manage those apps though development, staging/testing and production cycles.  Right now, you can also &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;try the Java service for free&lt;/a&gt;.&lt;!--break--&gt; 
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://www.aptana.com/images/thumbs/java.png&quot; align=left hspace=9 vspace=8 &gt;Java developers and teams can easily get started with new new projects without the headaches of setting up hardware, installing software, or configuring networks (or waiting in line for the IT department to get around to your request).  &lt;a href=&quot;http://tv.aptana.com/videos/java-on-the-cloud&quot; target=&quot;_window&quot;&gt;As this short screencast shows&lt;/a&gt;, you just click the &quot;Deploy to Cloud...&quot; button and in about 2 minutes you&#039;ve got resources provisioned, complete with Tomcat, mySQL, source control and more all ready to use and integrated right into the IDE.  This makes Aptana Cloud Connect ideal for web projects that use Servlets, JSP, JSF, Spring, or other Java web technologies that can be packaged as .war files.  And once an app is deployed, allocating more RAM or storage to scale the app is as easy as dragging and dropping a slider.  For apps architected to run across multiple machines, private IP addresses in the data center provide for speedy network connections.
&lt;/p&gt;

&lt;div style=&quot;width:600px; height:375px; border:solid 1px #000&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fjava-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fjava-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;&lt;/div&gt;

&lt;p&gt;
The combination of Aptana Studio&#039;s popular HTML, JavaScript, CSS and Ajax development capabilities, Eclipse for JavaEE development, and Aptana Cloud Connect for integration with application hosting and life-cycle management services accelerates time to use for new application, reduces costs, and makes the development process much more efficient.  Since we released Aptana Studio several years ago we&#039;ve seen more and more Eclipse users adding Aptana as a plugin to their IDE and using Aptana Studio&#039;s HTML, CSS, JavaScript and Ajax capabilities in concert with their Java projects.  Now those same Java web projects can go right into a cloud data center and be managed through the development, staging/testing and production life-cycle via Aptana Cloud Connect.
&lt;/p&gt;

&lt;p&gt;In addition to Java, Aptana Cloud Connect provides application hosting and life-cycle integration for Ruby on Rails, PHP, and Jaxer (the open source Ajax and JavaScript server based on the Mozilla Firefox browser engine).&lt;/p&gt;

&lt;h3&gt;How to get started?&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;There&#039;s a free trial&lt;/a&gt; so that you can check it out at no cost.  All you need is Aptana Studio 1.2.5 (free, open source software) or later plugged into Eclipse.
&lt;/p&gt;

&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;p&gt;Here&#039;s a few of the key features of Aptana Studio and Aptana Cloud Connect for Java Developers
&lt;ul&gt;
&lt;li&gt;Instantly provision servers running Tomcat and MySQL
&lt;li&gt;Work with their remote environments directly from their Aptana Studio perspective in Eclipse
&lt;li&gt;Get full root access, SSH and SFTP
&lt;li&gt;Collaborate with other team members on projects
&lt;li&gt;Tap into integrated Subversion or Git source control
&lt;li&gt;Migrate projects from development, to staging to production contexts
&lt;li&gt;Scale computational and storage resources up and down at will
&lt;/ul&gt;
&lt;/p&gt;

&lt;h3&gt;What does it cost?&lt;/h3&gt;
&lt;p&gt;
Pricing starts at $20 per month -- which includes all your hosting fees and bandwidth (unless you exceed 10 terabytes -- yeah...that&#039;s terabytes!).  You can upgrade, downgrade or cancel at any time.  Fees are prorated to the hour so that you only pay for what you use.  Aptana Studio is free, open source software.
&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;
As of today, March 24, 2009, anyone using &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt; as a plugin to Eclipse can deploy Java apps to the Cloud via Aptana Cloud Connect.   &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud Connect&lt;/a&gt; integrates Aptana Studio/Eclipse with your cloud hosted Java apps.  It lets you instantly put Java projects and apps into to the Cloud, then manage those apps though development, staging/testing and production cycles.  Right now, you can also &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;try the Java service for free&lt;/a&gt;.&lt;!--break--&gt; 
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://www.aptana.com/images/thumbs/java.png&quot; align=left hspace=9 vspace=8 &gt;Java developers and teams can easily get started with new new projects without the headaches of setting up hardware, installing software, or configuring networks (or waiting in line for the IT department to get around to your request).  &lt;a href=&quot;http://tv.aptana.com/videos/java-on-the-cloud&quot; target=&quot;_window&quot;&gt;As this short screencast shows&lt;/a&gt;, you just click the &quot;Deploy to Cloud...&quot; button and in about 2 minutes you&#039;ve got resources provisioned, complete with Tomcat, mySQL, source control and more all ready to use and integrated right into the IDE.  This makes Aptana Cloud Connect ideal for web projects that use Servlets, JSP, JSF, Spring, or other Java web technologies that can be packaged as .war files.  And once an app is deployed, allocating more RAM or storage to scale the app is as easy as dragging and dropping a slider.  For apps architected to run across multiple machines, private IP addresses in the data center provide for speedy network connections.
&lt;/p&gt;

&lt;div style=&quot;width:600px; height:375px; border:solid 1px #000&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fjava-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fjava-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;&lt;/div&gt;

&lt;p&gt;
The combination of Aptana Studio&#039;s popular HTML, JavaScript, CSS and Ajax development capabilities, Eclipse for JavaEE development, and Aptana Cloud Connect for integration with application hosting and life-cycle management services accelerates time to use for new application, reduces costs, and makes the development process much more efficient.  Since we released Aptana Studio several years ago we&#039;ve seen more and more Eclipse users adding Aptana as a plugin to their IDE and using Aptana Studio&#039;s HTML, CSS, JavaScript and Ajax capabilities in concert with their Java projects.  Now those same Java web projects can go right into a cloud data center and be managed through the development, staging/testing and production life-cycle via Aptana Cloud Connect.
&lt;/p&gt;

&lt;p&gt;In addition to Java, Aptana Cloud Connect provides application hosting and life-cycle integration for Ruby on Rails, PHP, and Jaxer (the open source Ajax and JavaScript server based on the Mozilla Firefox browser engine).&lt;/p&gt;

&lt;h3&gt;How to get started?&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;There&#039;s a free trial&lt;/a&gt; so that you can check it out at no cost.  All you need is Aptana Studio 1.2.5 (free, open source software) or later plugged into Eclipse.
&lt;/p&gt;

&lt;h3&gt;Highlights&lt;/h3&gt;
&lt;p&gt;Here&#039;s a few of the key features of Aptana Studio and Aptana Cloud Connect for Java Developers
&lt;ul&gt;
&lt;li&gt;Instantly provision servers running Tomcat and MySQL
&lt;li&gt;Work with their remote environments directly from their Aptana Studio perspective in Eclipse
&lt;li&gt;Get full root access, SSH and SFTP
&lt;li&gt;Collaborate with other team members on projects
&lt;li&gt;Tap into integrated Subversion or Git source control
&lt;li&gt;Migrate projects from development, to staging to production contexts
&lt;li&gt;Scale computational and storage resources up and down at will
&lt;/ul&gt;
&lt;/p&gt;

&lt;h3&gt;What does it cost?&lt;/h3&gt;
&lt;p&gt;
Pricing starts at $20 per month -- which includes all your hosting fees and bandwidth (unless you exceed 10 terabytes -- yeah...that&#039;s terabytes!).  You can upgrade, downgrade or cancel at any time.  Fees are prorated to the hour so that you only pay for what you use.  Aptana Studio is free, open source software.
&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 24 Mar 2009 17:12:49 -0500</pubDate>
 <dc:creator>jlam</dc:creator>
 <guid isPermaLink="false">557 at http://aptana.com</guid>
</item>
<item>
 <title>Adobe AIR Development Update for Aptana Studio</title>
 <link>http://aptana.com/blog/khakman/adobe_air_update_for_aptana_studio</link>
 <description>&lt;p&gt;
A new version of the Adobe AIR Development Plugin for Aptana Studio has been released.  Use this plugin to create HTML and Ajax apps for Adobe AIR.  There&#039;s lots of great new things, but the highlight is the JavaScript Debugger integration with the Adobe AIR runtime.  Now you can set breakpoints, step through code, watch variables, and simplify the whole debug process for the JavaScript apps you create for AIR using Aptana Studio.  &lt;!--break--&gt; 
Check out the Debugging JavaScript for Adobe AIR screencast and the related &lt;a href=&quot;http://www.adobe.com/devnet/air/ajax/articles/aptana_air_js_debugging.html&quot; target=&quot;_window&quot;&gt;article at the Adobe Developer Center&lt;/a&gt;.
&lt;/p&gt;

&lt;div style=&quot;height:375px; width:600px; border:1px solid #000;&quot;&gt;
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fdebug-javascript-in-adobe-air-apps&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fdebug-javascript-in-adobe-air-apps&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;h3&gt;What&#039;s new in this release?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Support for Adobe AIR 1.5
&lt;li&gt;Integrated JavaScript Debugger
&lt;li&gt;Additional frameworks, JavaScript APIs and code assist for those
&lt;li&gt;Automated badge generation
&lt;/ul&gt;
Of course there&#039;s &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;lots of very useful capabilities&lt;/a&gt; from the prior releases as well.  We also want to say thank you to all the beta testers for this release.  We&#039;ve incorporated much of your feedback into this release and look forward to doing more in the future.
&lt;/p&gt;

&lt;p&gt;
&lt;h3&gt;How to get it?&lt;/h3&gt;
After you download Aptana Studio 1.2.4 (or update to it), &lt;a href=&quot;http://aptana.com/docs/index.php/Installing_a_plug-in &quot; target=&quot;_window&quot;&gt;follow these instructions&lt;/a&gt; to add the Adobe AIR Development Plugin for Aptana Studio.  
&lt;/p&gt;

&lt;p&gt;
&lt;h3&gt;More resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR Development Plugin for Aptana Studio&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://www.adobe.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR homepage at Adobe.com&lt;/a&gt;
&lt;/ul&gt;
&lt;/p&gt;

</description>
 <content:encoded>&lt;p&gt;
A new version of the Adobe AIR Development Plugin for Aptana Studio has been released.  Use this plugin to create HTML and Ajax apps for Adobe AIR.  There&#039;s lots of great new things, but the highlight is the JavaScript Debugger integration with the Adobe AIR runtime.  Now you can set breakpoints, step through code, watch variables, and simplify the whole debug process for the JavaScript apps you create for AIR using Aptana Studio.  &lt;!--break--&gt; 
Check out the Debugging JavaScript for Adobe AIR screencast and the related &lt;a href=&quot;http://www.adobe.com/devnet/air/ajax/articles/aptana_air_js_debugging.html&quot; target=&quot;_window&quot;&gt;article at the Adobe Developer Center&lt;/a&gt;.
&lt;/p&gt;

&lt;div style=&quot;height:375px; width:600px; border:1px solid #000;&quot;&gt;
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fdebug-javascript-in-adobe-air-apps&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Fdebug-javascript-in-adobe-air-apps&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;h3&gt;What&#039;s new in this release?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Support for Adobe AIR 1.5
&lt;li&gt;Integrated JavaScript Debugger
&lt;li&gt;Additional frameworks, JavaScript APIs and code assist for those
&lt;li&gt;Automated badge generation
&lt;/ul&gt;
Of course there&#039;s &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;lots of very useful capabilities&lt;/a&gt; from the prior releases as well.  We also want to say thank you to all the beta testers for this release.  We&#039;ve incorporated much of your feedback into this release and look forward to doing more in the future.
&lt;/p&gt;

&lt;p&gt;
&lt;h3&gt;How to get it?&lt;/h3&gt;
After you download Aptana Studio 1.2.4 (or update to it), &lt;a href=&quot;http://aptana.com/docs/index.php/Installing_a_plug-in &quot; target=&quot;_window&quot;&gt;follow these instructions&lt;/a&gt; to add the Adobe AIR Development Plugin for Aptana Studio.  
&lt;/p&gt;

&lt;p&gt;
&lt;h3&gt;More resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR Development Plugin for Aptana Studio&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://www.adobe.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR homepage at Adobe.com&lt;/a&gt;
&lt;/ul&gt;
&lt;/p&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 13 Mar 2009 15:17:03 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">555 at http://aptana.com</guid>
</item>
<item>
 <title>Ruby on Rails now supported in Aptana Cloud</title>
 <link>http://aptana.com/blog/krasmussen/announcing_rails_in_aptana_cloud</link>
 <description>&lt;p&gt;We are excited to announce that you can now deploy your Ruby on Rails apps to Aptana Cloud&#039;s scalable servers using the latest version of Aptana Studio (version 1.2.3 or later).  It takes just a few minutes to go live on &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt;.   There&#039;s a &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;free trial&lt;/a&gt; 
&lt;!--break--&gt; to  help you get started or just check it out.&lt;/p&gt; 

&lt;p&gt;&lt;div style=&quot;width:600px; height:375px; border:1px solid #000;&quot;&gt;
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;Rails on the Cloud video&lt;/a&gt; shows just how easy it is to get a complete database driven application running on your desktop and deployed to Aptana Cloud&#039;s scalable servers.&lt;/p&gt;

&lt;p&gt;Because we wanted the deployment processes to be scriptable, we based our solution on the popular Ruby deployment tool Capistrano. We wrapped Capistrano with our own Aptana Cloud gem to simplify the process of configuring Capistrano to work with your site, and plan on integrating the process more closely with the Rails utilities in &lt;a href=&quot;http://www.aptana.com/radrails&quot; target=&quot;_window&quot;&gt;Aptana RadRails&lt;/a&gt; soon.&lt;/p&gt;

&lt;p&gt;We&#039;re here to help.  If you need assistance or have feedback for us, visit our new &lt;a href=&quot;http://forums.aptana.com/viewforum.php?f=57&quot;&gt;Rails in the Cloud forum&lt;/a&gt;.  We are especially looking forward to talking with new users about their experience and how we can continue to improve the service for their needs.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;How to get started?&lt;/h3&gt; &lt;br /&gt;
(1) &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;Download&lt;/a&gt; or update to Aptana Studio 1.2.3 or later, and install the RadRails plugin.&lt;br /&gt;
(2) While you&#039;re doing that watch the intro &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;video for Rails on the Cloud&lt;/a&gt; for an overview of the set up and configuration process.&lt;br /&gt;
(3) Next, create a new Rails site to Aptana Cloud via Studio. To do this right-click on your Rails project and select &quot;Deploy to Aptana Cloud ...&quot;. The deployment wizard will lead you through the steps to set up your new hosted server. &lt;br /&gt;
(4) Set up your Rails environment &lt;a href=&quot;http://www.aptana.com/docs/index.php/Rails_Cloud_Deployment&quot; target=&quot;_window&quot;&gt;using this guide&lt;/a&gt;. &lt;br /&gt;
(5) Deploy your Rails project to your new server. &lt;br /&gt;
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;We are excited to announce that you can now deploy your Ruby on Rails apps to Aptana Cloud&#039;s scalable servers using the latest version of Aptana Studio (version 1.2.3 or later).  It takes just a few minutes to go live on &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt;.   There&#039;s a &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;free trial&lt;/a&gt; 
&lt;!--break--&gt; to  help you get started or just check it out.&lt;/p&gt; 

&lt;p&gt;&lt;div style=&quot;width:600px; height:375px; border:1px solid #000;&quot;&gt;
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; width=&quot;600&quot; height=&quot;375&quot; id=&quot;player_600&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://tv.aptana.com/images_flash/player_600.swf&quot; FlashVars=&quot;context=embed&amp;base=http://tv.aptana.com/&amp;movie=http%3A%2F%2Ftv.aptana.com%2Fvideos%2Frails-on-the-cloud&quot; quality=&quot;high&quot; bgcolor=&quot;#000000&quot; width=&quot;600&quot; height=&quot;375&quot; name=&quot;player_600&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; /&gt;&lt;/object&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;Rails on the Cloud video&lt;/a&gt; shows just how easy it is to get a complete database driven application running on your desktop and deployed to Aptana Cloud&#039;s scalable servers.&lt;/p&gt;

&lt;p&gt;Because we wanted the deployment processes to be scriptable, we based our solution on the popular Ruby deployment tool Capistrano. We wrapped Capistrano with our own Aptana Cloud gem to simplify the process of configuring Capistrano to work with your site, and plan on integrating the process more closely with the Rails utilities in &lt;a href=&quot;http://www.aptana.com/radrails&quot; target=&quot;_window&quot;&gt;Aptana RadRails&lt;/a&gt; soon.&lt;/p&gt;

&lt;p&gt;We&#039;re here to help.  If you need assistance or have feedback for us, visit our new &lt;a href=&quot;http://forums.aptana.com/viewforum.php?f=57&quot;&gt;Rails in the Cloud forum&lt;/a&gt;.  We are especially looking forward to talking with new users about their experience and how we can continue to improve the service for their needs.&lt;/p&gt;

&lt;p&gt;&lt;h3&gt;How to get started?&lt;/h3&gt; &lt;br /&gt;
(1) &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;Download&lt;/a&gt; or update to Aptana Studio 1.2.3 or later, and install the RadRails plugin.&lt;br /&gt;
(2) While you&#039;re doing that watch the intro &lt;a href=&quot;http://tv.aptana.com/videos/rails-on-the-cloud&quot; target=&quot;_window&quot;&gt;video for Rails on the Cloud&lt;/a&gt; for an overview of the set up and configuration process.&lt;br /&gt;
(3) Next, create a new Rails site to Aptana Cloud via Studio. To do this right-click on your Rails project and select &quot;Deploy to Aptana Cloud ...&quot;. The deployment wizard will lead you through the steps to set up your new hosted server. &lt;br /&gt;
(4) Set up your Rails environment &lt;a href=&quot;http://www.aptana.com/docs/index.php/Rails_Cloud_Deployment&quot; target=&quot;_window&quot;&gt;using this guide&lt;/a&gt;. &lt;br /&gt;
(5) Deploy your Rails project to your new server. &lt;br /&gt;
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <pubDate>Thu, 05 Mar 2009 19:03:17 -0600</pubDate>
 <dc:creator>krasmussen</dc:creator>
 <guid isPermaLink="false">553 at http://aptana.com</guid>
</item>
<item>
 <title>Mobile Web: Nokia WRT Plugin for Aptana Studio now in 1.0 release</title>
 <link>http://aptana.com/node/552</link>
 <description>&lt;p&gt;We are excited to announce that the Nokia WRT Plugin for Aptana Studio is available in its 1.0 release.  If you&#039;ve not seen the Nokia WRT and the new Aptana Studio development tools for this environment, they are very cool indeed.  They let you use your HTML, JavaScript, CSS, and Ajax skills to create installable apps for mobile devices and thus tap into GPS, accelerometer, contact list, dialing and other native device capabilities (securely managed through user-granted permissions).&lt;/p&gt;&lt;!--break--&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/images/screenshots/nokiascreen.gif&quot; align=right hspace=8 vspace=8 /&gt;Nokia WRT has been out for a while and is today running on millions upon millions of Nokia S60 phones.  The apps can be distributed through simple web download, bluetooth sharing, or even as email attachments making them ideal for both public and private use.&lt;/p&gt;

&lt;h3&gt;What&#039;s New?&lt;/h3&gt;
&lt;p&gt;What&#039;s new is the 1.0 release of the Nokia WRT Plugin for Aptana Studio.  This plugin lets you create, test, preview and package feature rich mobile apps and widgets for Nokia S60 devices in the context of Aptana Studio&#039;s great code editing, code assist, Ajax library support, debugging and more.  Whether you&#039;ve been creating mobile apps already or are just starting out, the Nokia WRT plugin for Aptana Studio gets you productive fast.&lt;/p&gt;

&lt;p&gt;Nokia WRT also lets you access network data when the device is online.  Aptana Studio makes it easy to create such data services in a range of languages and even host them on leading providers via &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Nokia WRT plugin for Aptana Studio adds:
&lt;ul&gt;
&lt;li&gt;Library of ready to use Ajax controls (and you can use other Ajax libraries as well)&lt;/li&gt;
&lt;li&gt;Support for Adobe Flash lite&lt;/li&gt;  
&lt;li&gt;One click app previews in context of various device profiles and aspect ratios&lt;/li&gt;
&lt;li&gt;Automated deployment packaging into .wgz files&lt;/li&gt;
&lt;li&gt;Deployment to devices for testing (via bluetooth) or Nokia&#039;s S60 device emulator for Windows.&lt;/li&gt;
&lt;li&gt;Sample applications with full source&lt;/li&gt;
&lt;li&gt;Code assist and docs for the Nokia WRT JavaScript APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=NokiaDemo&amp;width=960&amp;height=600&amp;startWith=flash&quot; target=&quot;_window&quot;&gt; This 8 minute screencast&lt;/a&gt; gives you the grand tour.
&lt;/p&gt;
&lt;p&gt;
More information and resources can be found at &lt;a href=&quot;http://www.aptana.com/nokia&quot; target=&quot;_window&quot;&gt;http://www.aptana.com/nokia&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;Download&lt;/a&gt; or update to Aptana Studio 1.2.1 or later, then open Aptana &amp;gt; My Aptana &amp;gt; Plugins, find the Nokia WRT Plugin in the list and click &quot;Get It&quot;
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;We are excited to announce that the Nokia WRT Plugin for Aptana Studio is available in its 1.0 release.  If you&#039;ve not seen the Nokia WRT and the new Aptana Studio development tools for this environment, they are very cool indeed.  They let you use your HTML, JavaScript, CSS, and Ajax skills to create installable apps for mobile devices and thus tap into GPS, accelerometer, contact list, dialing and other native device capabilities (securely managed through user-granted permissions).&lt;/p&gt;&lt;!--break--&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/images/screenshots/nokiascreen.gif&quot; align=right hspace=8 vspace=8 /&gt;Nokia WRT has been out for a while and is today running on millions upon millions of Nokia S60 phones.  The apps can be distributed through simple web download, bluetooth sharing, or even as email attachments making them ideal for both public and private use.&lt;/p&gt;

&lt;h3&gt;What&#039;s New?&lt;/h3&gt;
&lt;p&gt;What&#039;s new is the 1.0 release of the Nokia WRT Plugin for Aptana Studio.  This plugin lets you create, test, preview and package feature rich mobile apps and widgets for Nokia S60 devices in the context of Aptana Studio&#039;s great code editing, code assist, Ajax library support, debugging and more.  Whether you&#039;ve been creating mobile apps already or are just starting out, the Nokia WRT plugin for Aptana Studio gets you productive fast.&lt;/p&gt;

&lt;p&gt;Nokia WRT also lets you access network data when the device is online.  Aptana Studio makes it easy to create such data services in a range of languages and even host them on leading providers via &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Nokia WRT plugin for Aptana Studio adds:
&lt;ul&gt;
&lt;li&gt;Library of ready to use Ajax controls (and you can use other Ajax libraries as well)&lt;/li&gt;
&lt;li&gt;Support for Adobe Flash lite&lt;/li&gt;  
&lt;li&gt;One click app previews in context of various device profiles and aspect ratios&lt;/li&gt;
&lt;li&gt;Automated deployment packaging into .wgz files&lt;/li&gt;
&lt;li&gt;Deployment to devices for testing (via bluetooth) or Nokia&#039;s S60 device emulator for Windows.&lt;/li&gt;
&lt;li&gt;Sample applications with full source&lt;/li&gt;
&lt;li&gt;Code assist and docs for the Nokia WRT JavaScript APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=NokiaDemo&amp;width=960&amp;height=600&amp;startWith=flash&quot; target=&quot;_window&quot;&gt; This 8 minute screencast&lt;/a&gt; gives you the grand tour.
&lt;/p&gt;
&lt;p&gt;
More information and resources can be found at &lt;a href=&quot;http://www.aptana.com/nokia&quot; target=&quot;_window&quot;&gt;http://www.aptana.com/nokia&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;Download&lt;/a&gt; or update to Aptana Studio 1.2.1 or later, then open Aptana &amp;gt; My Aptana &amp;gt; Plugins, find the Nokia WRT Plugin in the list and click &quot;Get It&quot;
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/18">iphone</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 16 Feb 2009 00:05:01 -0600</pubDate>
 <dc:creator>iselby</dc:creator>
 <guid isPermaLink="false">552 at http://aptana.com</guid>
</item>
<item>
 <title>jQuery 1.3.1 Support Arrives in Aptana Studio</title>
 <link>http://aptana.com/blog/lorihc/jquery1.3.1_now_in_studio</link>
 <description>&lt;p&gt;
jQuery 1.3 is out, with a brand new selector engine (Sizzle), Live Events, simplified event handling, faster appending of HTML and calculation of position, and a switch from browser sniffing to feature detection. All that goodness&amp;#8212;plus the 30 bug fixes that went into jQuery 1.3.1&amp;#8212;is now available in Aptana Studio.&lt;!--break--&gt;  For developers using &lt;a href=&quot;http://www.jquery.com/studio&quot; target=&quot;_window&quot;&gt;jQuery&lt;/a&gt; this means code assist, completion and inline reference for jQuery APIs plus searchable docs right there in the IDE (and of course JavaScript debugging and all the other capabilities of &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif&quot; alt=&quot;Ext JS&quot; width=&quot;215&quot; height=&quot;53&quot; style=&quot;background-color:#000; padding:10px;&quot; align=&quot;right&quot; hspace=&quot;20&quot;/&gt;

&lt;strong&gt;To get the jQuery 1.3.1 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Aptana &amp;gt; View &amp;gt; Plugins Manager (or Window &gt; Show View &gt; Other... &gt; Aptana Standard Views &gt; Plugins Manager). &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select jQuery Support version 1.3.1 and click the green + icon to install.&lt;br /&gt;
  &lt;img src=&quot;http://www.aptana.com/system/files/images/jquery1.3.1_pluginsManager.png&quot; alt=&quot;Install jQuery 1.3.1 Support&quot; width=&quot;657&quot; height=&quot;213&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the three jQuery plugins. Select &lt;strong&gt;Aptana Support for jQuery 1.3.1.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/jquery1.3.1_install.png&quot; alt=&quot;Select jQuery 1.3.1 from the tree&quot; width=&quot;600&quot; height=&quot;498&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the jQuery 1.3.1 plugin. Click Yes when you&#039;re prompted to restart, and the features of the new plugin will be available in Studio.&lt;/li&gt;
&lt;/ol&gt;</description>
 <content:encoded>&lt;p&gt;
jQuery 1.3 is out, with a brand new selector engine (Sizzle), Live Events, simplified event handling, faster appending of HTML and calculation of position, and a switch from browser sniffing to feature detection. All that goodness&amp;#8212;plus the 30 bug fixes that went into jQuery 1.3.1&amp;#8212;is now available in Aptana Studio.&lt;!--break--&gt;  For developers using &lt;a href=&quot;http://www.jquery.com/studio&quot; target=&quot;_window&quot;&gt;jQuery&lt;/a&gt; this means code assist, completion and inline reference for jQuery APIs plus searchable docs right there in the IDE (and of course JavaScript debugging and all the other capabilities of &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif&quot; alt=&quot;Ext JS&quot; width=&quot;215&quot; height=&quot;53&quot; style=&quot;background-color:#000; padding:10px;&quot; align=&quot;right&quot; hspace=&quot;20&quot;/&gt;

&lt;strong&gt;To get the jQuery 1.3.1 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Aptana &amp;gt; View &amp;gt; Plugins Manager (or Window &gt; Show View &gt; Other... &gt; Aptana Standard Views &gt; Plugins Manager). &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select jQuery Support version 1.3.1 and click the green + icon to install.&lt;br /&gt;
  &lt;img src=&quot;http://www.aptana.com/system/files/images/jquery1.3.1_pluginsManager.png&quot; alt=&quot;Install jQuery 1.3.1 Support&quot; width=&quot;657&quot; height=&quot;213&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the three jQuery plugins. Select &lt;strong&gt;Aptana Support for jQuery 1.3.1.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/jquery1.3.1_install.png&quot; alt=&quot;Select jQuery 1.3.1 from the tree&quot; width=&quot;600&quot; height=&quot;498&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the jQuery 1.3.1 plugin. Click Yes when you&#039;re prompted to restart, and the features of the new plugin will be available in Studio.&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 23 Jan 2009 10:22:08 -0600</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">550 at http://aptana.com</guid>
</item>
<item>
 <title>ActiveRecord.js Released as Beta: Adds Object Relational Mapping to JavaScript</title>
 <link>http://aptana.com/blog/rjohnson/activerecord_js_released_as_beta</link>
 <description>&lt;p&gt;I am pleased to announce ActiveRecord.js, an open source object relational mapper (ORM) that supports multiple JavaScript environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gears (client-side persistence)&lt;/li&gt;
&lt;li&gt;In Memory (if no SQL server is available on the client)&lt;/li&gt;
&lt;li&gt;Adobe AIR (client-side persistence)&lt;/li&gt;
&lt;li&gt;SQLite and MySQL (via Aptana Jaxer, the open source Ajax server)&lt;/li&gt;
&lt;li&gt;additional environments (like HTML5) expected to come through working with the community on the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ActiveRecord.js abstracts away underlying SQL commands so that JavaScript developers can have a unified API for storing, finding, selecting and retrieving objects and their data &lt;!--break--&gt; 
using the &lt;a href=&quot;http://en.wikipedia.org/wiki/ActiveRecord&quot;&gt;ActiveRecord pattern&lt;/a&gt; popularized by the Ruby on Rails community.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://activerecordjs.org/active_record.png&quot; align=left hspace=50 vspace=20&gt;Whereas other projects have sought to directly port Rails&#039; implementation of ActiveRecord to JavaScript, the approach here is different.  Existing ActiveRecord aficionados who are used to the ultra succinct vocabulary of Rails&#039; ActiveRecord implementation will instead find something well suited for JavaScript developers adapting the patterns refined by the Rails community (and some influences from Django) into powerful, easy to use APIs.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example:&lt;/b&gt;&lt;/p&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;

var User = ActiveRecord.define(&#039;users&#039;,{
    username: &#039;&#039;,
    email: &#039;&#039;
});
User.hasMany(&#039;articles&#039;);

var ryan = User.create({
    username: &#039;ryan&#039;,
    email: &#039;rjohnson@aptana.com&#039;
});

var Article = ActiveRecord.define(&#039;articles&#039;,{
    name: &#039;&#039;,
    body: &#039;&#039;,
    user_id: 0
});
Article.belongsTo(&#039;user&#039;);

var a = Article.create({
    name: &#039;Announcing ActiveRecord.js&#039;,
    user_id: ryan.id
});
a.set(&#039;name&#039;,&#039;Announcing ActiveRecord.js!!!&#039;);
a.save();

a.getUser() == ryan;
ryan.getArticleList()[0] == a;
 
 
&lt;/textarea&gt;

&lt;p&gt;The library ships in a single file, has no external dependencies, and runs client side in all major browsers with or without access to a SQL database and can be used server side with mySQL and SQLite databases via Aptana Jaxer, the open source Ajax server with support for server-side JavaScript.  All of the basic features you&#039;d expect are present in this beta release: data validations, life-cycle callbacks, schema creation / migrations and relationships between models. As a beta it&#039;s quite stable, and we look forward to your use and feedback to make refinements before calling it 1.0.  We&#039;re also working with some folks at Google, Mozilla, and Adobe to best achieve the support for JavaScript environments in the browser, on mobile devices, on the desktop and on the server.&lt;/p&gt;

&lt;p&gt;Since one target use of this library is for client side stateful applications (using HTML, HTML5, Gears, Adobe AIR, etc...) we have some features that server side only libraries (Aptana Jaxer) don&#039;t need to support. One of the features I am most excited about is data synchronization. Although it is nascent, using the current implementation, you can find records or entire result sets and have those found objects automatically receive updates if the data they contain is changed by other queries, or records that should be contained in the result set are created or destroyed. This is marginally useful on its own, but when building user interfaces that depend on data being up to date, I&#039;ve found it quickly becomes hard to imagine life without it. Synchronization between the client and server is not in the scope of this library yet, but it is on the radar.&lt;/p&gt;

&lt;p&gt;If you look in GitHub you will see there is more than just ActiveRecord on the way. ActiveRecord.js is the first part of ActiveJS, a robust MVC framework that&#039;s being created explicitly for JavaScript and Ajax apps (and works with other Ajax libraries).  I&#039;ll be blogging again on these other parts of ActiveJS when they are ready for a public beta, but for those who can&#039;t wait, you can find sneak peeks of them in the repo.&lt;/p&gt;

&lt;p&gt;For now, enjoy the simplicity of ActiveRecord.js:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs/raw/master/releases/1.0b1/active_record.js&quot;&gt;Download ActiveRecord.js 1.0b1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://activerecordjs.org&quot;&gt;ActiveRecord.js Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://activerecordjs.org/docs&quot;&gt;API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs&quot;&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&#039;d also like to make a couple of notes that might preempt a FAQ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not all unit tests pass in IE right now (yes we all complain about IE but MAN do they make it hard!)&lt;/li&gt;
&lt;li&gt;Some sort of IE friendly persistence hack will be built in soon (cookies / form / etc)&lt;/li&gt;
&lt;li&gt;Many to many relationships have yet to be implemented&lt;/li&gt;
&lt;li&gt;All of the built in validations that ship with Rails will be ported (as will ActsAsList and ActsAsTree)&lt;/li&gt;
&lt;li&gt;Synchronization of data between the client and server is still an open question. Send us your ideas and problems!&lt;/li&gt;
&lt;li&gt;We are actively advocating that the HTML 5 spec change to support synchronous SQL queries inside of asynchronous Web Workers, we will not support asynchronous SQL queries unless that part of the spec is ratified. We have experimental support for the current HTML 5 SQL spec as implemented by Safari, but it is currently very difficult to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to ask questions in the &lt;a href=&quot;http://groups.google.com/group/activejs/&quot;&gt;ActiveJS Google group&lt;/a&gt;. We also welcome pull requests in our &lt;a href=&quot;http://github.com/aptana/activejs&quot;&gt;GitHub repository&lt;/a&gt; if you have forked the project.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;-- Ryan Johnson and Aptana&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;I am pleased to announce ActiveRecord.js, an open source object relational mapper (ORM) that supports multiple JavaScript environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gears (client-side persistence)&lt;/li&gt;
&lt;li&gt;In Memory (if no SQL server is available on the client)&lt;/li&gt;
&lt;li&gt;Adobe AIR (client-side persistence)&lt;/li&gt;
&lt;li&gt;SQLite and MySQL (via Aptana Jaxer, the open source Ajax server)&lt;/li&gt;
&lt;li&gt;additional environments (like HTML5) expected to come through working with the community on the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ActiveRecord.js abstracts away underlying SQL commands so that JavaScript developers can have a unified API for storing, finding, selecting and retrieving objects and their data &lt;!--break--&gt; 
using the &lt;a href=&quot;http://en.wikipedia.org/wiki/ActiveRecord&quot;&gt;ActiveRecord pattern&lt;/a&gt; popularized by the Ruby on Rails community.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://activerecordjs.org/active_record.png&quot; align=left hspace=50 vspace=20&gt;Whereas other projects have sought to directly port Rails&#039; implementation of ActiveRecord to JavaScript, the approach here is different.  Existing ActiveRecord aficionados who are used to the ultra succinct vocabulary of Rails&#039; ActiveRecord implementation will instead find something well suited for JavaScript developers adapting the patterns refined by the Rails community (and some influences from Django) into powerful, easy to use APIs.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example:&lt;/b&gt;&lt;/p&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;

var User = ActiveRecord.define(&#039;users&#039;,{
    username: &#039;&#039;,
    email: &#039;&#039;
});
User.hasMany(&#039;articles&#039;);

var ryan = User.create({
    username: &#039;ryan&#039;,
    email: &#039;rjohnson@aptana.com&#039;
});

var Article = ActiveRecord.define(&#039;articles&#039;,{
    name: &#039;&#039;,
    body: &#039;&#039;,
    user_id: 0
});
Article.belongsTo(&#039;user&#039;);

var a = Article.create({
    name: &#039;Announcing ActiveRecord.js&#039;,
    user_id: ryan.id
});
a.set(&#039;name&#039;,&#039;Announcing ActiveRecord.js!!!&#039;);
a.save();

a.getUser() == ryan;
ryan.getArticleList()[0] == a;
 
 
&lt;/textarea&gt;

&lt;p&gt;The library ships in a single file, has no external dependencies, and runs client side in all major browsers with or without access to a SQL database and can be used server side with mySQL and SQLite databases via Aptana Jaxer, the open source Ajax server with support for server-side JavaScript.  All of the basic features you&#039;d expect are present in this beta release: data validations, life-cycle callbacks, schema creation / migrations and relationships between models. As a beta it&#039;s quite stable, and we look forward to your use and feedback to make refinements before calling it 1.0.  We&#039;re also working with some folks at Google, Mozilla, and Adobe to best achieve the support for JavaScript environments in the browser, on mobile devices, on the desktop and on the server.&lt;/p&gt;

&lt;p&gt;Since one target use of this library is for client side stateful applications (using HTML, HTML5, Gears, Adobe AIR, etc...) we have some features that server side only libraries (Aptana Jaxer) don&#039;t need to support. One of the features I am most excited about is data synchronization. Although it is nascent, using the current implementation, you can find records or entire result sets and have those found objects automatically receive updates if the data they contain is changed by other queries, or records that should be contained in the result set are created or destroyed. This is marginally useful on its own, but when building user interfaces that depend on data being up to date, I&#039;ve found it quickly becomes hard to imagine life without it. Synchronization between the client and server is not in the scope of this library yet, but it is on the radar.&lt;/p&gt;

&lt;p&gt;If you look in GitHub you will see there is more than just ActiveRecord on the way. ActiveRecord.js is the first part of ActiveJS, a robust MVC framework that&#039;s being created explicitly for JavaScript and Ajax apps (and works with other Ajax libraries).  I&#039;ll be blogging again on these other parts of ActiveJS when they are ready for a public beta, but for those who can&#039;t wait, you can find sneak peeks of them in the repo.&lt;/p&gt;

&lt;p&gt;For now, enjoy the simplicity of ActiveRecord.js:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs/raw/master/releases/1.0b1/active_record.js&quot;&gt;Download ActiveRecord.js 1.0b1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://activerecordjs.org&quot;&gt;ActiveRecord.js Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://activerecordjs.org/docs&quot;&gt;API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs&quot;&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&#039;d also like to make a couple of notes that might preempt a FAQ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not all unit tests pass in IE right now (yes we all complain about IE but MAN do they make it hard!)&lt;/li&gt;
&lt;li&gt;Some sort of IE friendly persistence hack will be built in soon (cookies / form / etc)&lt;/li&gt;
&lt;li&gt;Many to many relationships have yet to be implemented&lt;/li&gt;
&lt;li&gt;All of the built in validations that ship with Rails will be ported (as will ActsAsList and ActsAsTree)&lt;/li&gt;
&lt;li&gt;Synchronization of data between the client and server is still an open question. Send us your ideas and problems!&lt;/li&gt;
&lt;li&gt;We are actively advocating that the HTML 5 spec change to support synchronous SQL queries inside of asynchronous Web Workers, we will not support asynchronous SQL queries unless that part of the spec is ratified. We have experimental support for the current HTML 5 SQL spec as implemented by Safari, but it is currently very difficult to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to ask questions in the &lt;a href=&quot;http://groups.google.com/group/activejs/&quot;&gt;ActiveJS Google group&lt;/a&gt;. We also welcome pull requests in our &lt;a href=&quot;http://github.com/aptana/activejs&quot;&gt;GitHub repository&lt;/a&gt; if you have forked the project.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;-- Ryan Johnson and Aptana&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Tue, 13 Jan 2009 13:40:00 -0600</pubDate>
 <dc:creator>rjohnson</dc:creator>
 <guid isPermaLink="false">547 at http://aptana.com</guid>
</item>
<item>
 <title>MooTools 1.2.1 Support Now Available in Aptana Studio</title>
 <link>http://aptana.com/blog/lorihc/mootools1.2.1_in_aptana_studio</link>
 <description>&lt;p&gt;
One of the things we noticed as we started reviewing preliminary data from our 2009 User Survey is that the popularity of the MooTools JavaScript framework appears to be growing. &lt;!--break--&gt;Many of you say you&#039;re using it now or plan to in the future, and some of you even called out MooTools 1.2 support as the feature you most need right now. &lt;img src=&quot;http://www.aptana.com/system/files/images/mootools.png&quot; alt=&quot;Ext JS&quot; align=&quot;right&quot; style=&quot;margin: 4px 8px&quot; /&gt; 
&lt;/p&gt;

&lt;p&gt;
Luckily, getting support for MooTools 1.2.1 into Aptana Studio was already in the works, and it went live at the end of December. The new MooTools 1.2.1 plugin includes both the mootools-core and mootools-more library files in all the various compression formats; updated documentation; updated samples; and more.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;To get the MooTools 1.2.1 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;If you don&#039;t already have the latest version of Aptana Studio, &lt;a href=&quot;http://www.aptana.com/studio&quot;&gt;get it&lt;/a&gt;! It&#039;s free, open-source software.&lt;br /&gt;
    As an added bonus, if you&#039;re updating to the latest version from a version prior to 1.2, you may be done after this step. If you see MooTools 1.2 Samples in the Samples view after relaunching Studio, you&#039;re all set.
  &lt;/li&gt;
  &lt;li&gt;If you already have version 1.2 or later of Aptana Studio, open the Plugins Manager by choosing Aptana &amp;gt; View &amp;gt; Plugins Manager.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select MooTools 1.2.1 and click the green + icon ( &lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin_button.png&quot; alt=&quot;install plugin&quot; width=&quot;14&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt; ) to install.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the available &amp;quot;Aptana Support for MooTools&amp;quot; plugins. Select &lt;strong&gt;Aptana Support for MooTools 1.2.1.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the MooTools 1.2.1 plugin. Click Yes when you&#039;re prompted to restart.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;To get started using MooTools in Aptana Studio, do one of the following:
&lt;/strong&gt;
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Click the New Project button ( &lt;img src=&quot;http://www.aptana.com/system/files/images/new_project_button_0.png&quot; alt=&quot;new project button&quot; width=&quot;15&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt;) on the toolbar.
&lt;ol&gt;
  &lt;li&gt;Choose Default Web Project in the dialog that appears and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/default_web_project_clip_0.png&quot; width=&quot;359&quot; height=&quot;291&quot; style=&quot;margin: 4px 0&quot;/&gt;  &lt;/li&gt;
  &lt;li&gt;Give your project a name and click Next.&lt;/li&gt;
  &lt;li&gt;Check the MooTools 1.2 box and continue clicking Next until you see a Finish button.&lt;/li&gt;
  &lt;li&gt;In the Project view, expand the lib folder in your MooTools project and drag one of the -core or -more .js files to the Default Profile folder in the File References view. This will turn code completion on for MooTools by default. (NB: &amp;quot;jm&amp;quot; stands for JSMin, &amp;quot;nc&amp;quot; stands for no compression, and &amp;quot;yc&amp;quot; stands for YUI Compressor.)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Expand the MooTools 1.2 Samples node in the Samples view, right-click on one of the folders, and choose Import sample as project.&lt;br /&gt;
  The samples files, as well as the library   files they depend on, will appear in your project, and the index.html file will open in the HTML editor. The -core and/or -more .js files, as well as any .js files specific to the sample, will automatically appear under the index.html folder in the File References panel, and code completion will be available for all the functions defined in those files.&lt;/li&gt;
&lt;/ul&gt;
</description>
 <content:encoded>&lt;p&gt;
One of the things we noticed as we started reviewing preliminary data from our 2009 User Survey is that the popularity of the MooTools JavaScript framework appears to be growing. &lt;!--break--&gt;Many of you say you&#039;re using it now or plan to in the future, and some of you even called out MooTools 1.2 support as the feature you most need right now. &lt;img src=&quot;http://www.aptana.com/system/files/images/mootools.png&quot; alt=&quot;Ext JS&quot; align=&quot;right&quot; style=&quot;margin: 4px 8px&quot; /&gt; 
&lt;/p&gt;

&lt;p&gt;
Luckily, getting support for MooTools 1.2.1 into Aptana Studio was already in the works, and it went live at the end of December. The new MooTools 1.2.1 plugin includes both the mootools-core and mootools-more library files in all the various compression formats; updated documentation; updated samples; and more.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;To get the MooTools 1.2.1 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;If you don&#039;t already have the latest version of Aptana Studio, &lt;a href=&quot;http://www.aptana.com/studio&quot;&gt;get it&lt;/a&gt;! It&#039;s free, open-source software.&lt;br /&gt;
    As an added bonus, if you&#039;re updating to the latest version from a version prior to 1.2, you may be done after this step. If you see MooTools 1.2 Samples in the Samples view after relaunching Studio, you&#039;re all set.
  &lt;/li&gt;
  &lt;li&gt;If you already have version 1.2 or later of Aptana Studio, open the Plugins Manager by choosing Aptana &amp;gt; View &amp;gt; Plugins Manager.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select MooTools 1.2.1 and click the green + icon ( &lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin_button.png&quot; alt=&quot;install plugin&quot; width=&quot;14&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt; ) to install.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the available &amp;quot;Aptana Support for MooTools&amp;quot; plugins. Select &lt;strong&gt;Aptana Support for MooTools 1.2.1.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the MooTools 1.2.1 plugin. Click Yes when you&#039;re prompted to restart.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;To get started using MooTools in Aptana Studio, do one of the following:
&lt;/strong&gt;
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Click the New Project button ( &lt;img src=&quot;http://www.aptana.com/system/files/images/new_project_button_0.png&quot; alt=&quot;new project button&quot; width=&quot;15&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt;) on the toolbar.
&lt;ol&gt;
  &lt;li&gt;Choose Default Web Project in the dialog that appears and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/default_web_project_clip_0.png&quot; width=&quot;359&quot; height=&quot;291&quot; style=&quot;margin: 4px 0&quot;/&gt;  &lt;/li&gt;
  &lt;li&gt;Give your project a name and click Next.&lt;/li&gt;
  &lt;li&gt;Check the MooTools 1.2 box and continue clicking Next until you see a Finish button.&lt;/li&gt;
  &lt;li&gt;In the Project view, expand the lib folder in your MooTools project and drag one of the -core or -more .js files to the Default Profile folder in the File References view. This will turn code completion on for MooTools by default. (NB: &amp;quot;jm&amp;quot; stands for JSMin, &amp;quot;nc&amp;quot; stands for no compression, and &amp;quot;yc&amp;quot; stands for YUI Compressor.)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Expand the MooTools 1.2 Samples node in the Samples view, right-click on one of the folders, and choose Import sample as project.&lt;br /&gt;
  The samples files, as well as the library   files they depend on, will appear in your project, and the index.html file will open in the HTML editor. The -core and/or -more .js files, as well as any .js files specific to the sample, will automatically appear under the index.html folder in the File References panel, and code completion will be available for all the functions defined in those files.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <pubDate>Wed, 07 Jan 2009 14:31:53 -0600</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">545 at http://aptana.com</guid>
</item>
<item>
 <title>Announcing Team Aptana and the Forums Upgrade</title>
 <link>http://aptana.com/blog/blazar/forum_upgrade_and_team_aptana</link>
 <description>&lt;p&gt;I&#039;m very happy to announce Team Aptana, a new initiative from Aptana. Team Aptana is a group of highly engaged members of the Aptana community who will be providing assistance to other customers and partners in the forums as well as providing constructive input to our engineering team. &lt;!--break--&gt;  You&#039;ll be able to identify them through the badge on their posts: 
&lt;/p&gt;
&lt;img src=&quot;http://forums.aptana.com/images/avatars/team-aptana.png&quot; style=&quot;border: none;&quot; hspace=20 /&gt;
&lt;p&gt;
&lt;b&gt;Charter members of Team Aptana:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=monaro&quot; title=&quot;Steven&#039;s posts&quot;&gt;Steven Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=stevewalker&quot; title=&quot;Steve&#039;s posts&quot;&gt;Steve Walker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=IceBox&quot; title=&quot;Alberto&#039;s posts&quot;&gt;Alberto Santini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=sjonnet19&quot; title=&quot;Shawn&#039;s posts&quot;&gt;Shawn Jonnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=lewiscunningham&quot; title=&quot;Lewis&#039;s posts&quot;&gt;Lewis Cunningham&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=nlsmith&quot; title=&quot;Nathan&#039;s posts&quot;&gt;Nathan Smith&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
As time goes on we will definitely be looking to add new participants, so if you want to be considered feel free to let me know (blazar at aptana.com). 
&lt;/p&gt;
&lt;h2&gt;Forum Upgrade&lt;/h2&gt;
&lt;p&gt;
The other big change today is that the forums have been integrated with the Aptana ID system, restructured to fit current needs and updated to phpBB3 (3.0.4, to be precise).
&lt;/p&gt;
&lt;p&gt;And it runs on Aptana Cloud!&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Integration with the Aptana ID system&lt;/b&gt; means that you can now sign in to the Forums with the same username and password you use for Cloud, ASAP and Studio. This also means that usernames must meet the &lt;a href=&quot;http://www.aptana.com/aptana_id&quot;&gt;Aptana ID username criteria&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;If you used the same email address when registering for your forum and Aptana ID/ASAP accounts but a different username, the username on your forum account and posts will change to your Aptana ID username.&lt;/li&gt;

&lt;li&gt;If you used the same username but a different email address when registering for your forum and Aptana ID/ASAP accounts, a new Aptana ID account has been created for you.&lt;/li&gt;

&lt;li&gt;If you have not had an Aptana ID/ASAP account before one has been created for you.&lt;/li&gt;

&lt;li&gt;For the latter two cases: If your current forums username doesn&#039;t meet the new criteria, the username on your forum posts has changed to your newly created Aptana ID.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
&lt;b&gt;We&#039;ve restructured the set of forums&lt;/b&gt; on the board to better reflect the current requirements of our community and our growing list of products and plugins.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href=&quot;http://www.phpbb.com&quot;&gt;phpBB&lt;/a&gt; has been updated to version 3.0.4&lt;/b&gt; and there are now RSS feeds available for each forum, the entire board and individual threads. If you don&#039;t see the orange RSS icon on a page, just look for the icon in the URL bar and click it to see the RSS options for the page.
&lt;/p&gt;
&lt;p&gt;
Overall we hope Team Aptana and the forum upgrade give you a big improvement in your Aptana community experience. If you have more ideas for enhancements, please send them in.
&lt;/p&gt;
&lt;p&gt;Bill Lazar&lt;br /&gt;
   Manager, Customer Success&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;I&#039;m very happy to announce Team Aptana, a new initiative from Aptana. Team Aptana is a group of highly engaged members of the Aptana community who will be providing assistance to other customers and partners in the forums as well as providing constructive input to our engineering team. &lt;!--break--&gt;  You&#039;ll be able to identify them through the badge on their posts: 
&lt;/p&gt;
&lt;img src=&quot;http://forums.aptana.com/images/avatars/team-aptana.png&quot; style=&quot;border: none;&quot; hspace=20 /&gt;
&lt;p&gt;
&lt;b&gt;Charter members of Team Aptana:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=monaro&quot; title=&quot;Steven&#039;s posts&quot;&gt;Steven Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=stevewalker&quot; title=&quot;Steve&#039;s posts&quot;&gt;Steve Walker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=IceBox&quot; title=&quot;Alberto&#039;s posts&quot;&gt;Alberto Santini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=sjonnet19&quot; title=&quot;Shawn&#039;s posts&quot;&gt;Shawn Jonnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=lewiscunningham&quot; title=&quot;Lewis&#039;s posts&quot;&gt;Lewis Cunningham&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.aptana.com/search.php?author=nlsmith&quot; title=&quot;Nathan&#039;s posts&quot;&gt;Nathan Smith&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
As time goes on we will definitely be looking to add new participants, so if you want to be considered feel free to let me know (blazar at aptana.com). 
&lt;/p&gt;
&lt;h2&gt;Forum Upgrade&lt;/h2&gt;
&lt;p&gt;
The other big change today is that the forums have been integrated with the Aptana ID system, restructured to fit current needs and updated to phpBB3 (3.0.4, to be precise).
&lt;/p&gt;
&lt;p&gt;And it runs on Aptana Cloud!&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Integration with the Aptana ID system&lt;/b&gt; means that you can now sign in to the Forums with the same username and password you use for Cloud, ASAP and Studio. This also means that usernames must meet the &lt;a href=&quot;http://www.aptana.com/aptana_id&quot;&gt;Aptana ID username criteria&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;If you used the same email address when registering for your forum and Aptana ID/ASAP accounts but a different username, the username on your forum account and posts will change to your Aptana ID username.&lt;/li&gt;

&lt;li&gt;If you used the same username but a different email address when registering for your forum and Aptana ID/ASAP accounts, a new Aptana ID account has been created for you.&lt;/li&gt;

&lt;li&gt;If you have not had an Aptana ID/ASAP account before one has been created for you.&lt;/li&gt;

&lt;li&gt;For the latter two cases: If your current forums username doesn&#039;t meet the new criteria, the username on your forum posts has changed to your newly created Aptana ID.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
&lt;b&gt;We&#039;ve restructured the set of forums&lt;/b&gt; on the board to better reflect the current requirements of our community and our growing list of products and plugins.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href=&quot;http://www.phpbb.com&quot;&gt;phpBB&lt;/a&gt; has been updated to version 3.0.4&lt;/b&gt; and there are now RSS feeds available for each forum, the entire board and individual threads. If you don&#039;t see the orange RSS icon on a page, just look for the icon in the URL bar and click it to see the RSS options for the page.
&lt;/p&gt;
&lt;p&gt;
Overall we hope Team Aptana and the forum upgrade give you a big improvement in your Aptana community experience. If you have more ideas for enhancements, please send them in.
&lt;/p&gt;
&lt;p&gt;Bill Lazar&lt;br /&gt;
   Manager, Customer Success&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Mon, 05 Jan 2009 13:53:39 -0600</pubDate>
 <dc:creator>blazar</dc:creator>
 <guid isPermaLink="false">543 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana RadRails 1.1.0 and 1.1.1 Released</title>
 <link>http://aptana.com/blog/cwillians/radrails11_released</link>
 <description>&lt;p&gt;Whether or not you got the Aptana RadRails 1.1 release last month, Aptana RadRails 1.1.1 is now available too.  Here&#039;s the highlights for both:&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;RadRails 1.1&lt;/b&gt; included a few new features, a host of bug fixes, and provided compatiaiblity for Aptana Studio 1.2+:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fixes broken compatibility between the YML/ERB editors and Studio 1.2+&lt;/li&gt;
&lt;li&gt;provides compatibility with RubyGems 1.2 and 1.3+&lt;/li&gt;
&lt;li&gt;includes the HAML and SASS editor plugins from Brad Wilson of &lt;a href=&quot;http://blog.lucky-dip.net/&quot; target=&quot;_window&quot;&gt;http://blog.lucky-dip.net/&lt;/a&gt;. Thanks Brad!&lt;/li&gt;
&lt;li&gt;bundles newer versions of JRuby, which brings with it its own &lt;a href=&quot;http://jruby.codehaus.org/&quot;  target=&quot;_window&quot;&gt;list of bugfixes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


&lt;p&gt;&lt;b&gt;RadRails 1.1.1&lt;/b&gt; became available last week.  This is a bugfix release that contains a handful of high priority bugfixes. See the &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10150&quot;  target=&quot;_window&quot;&gt;full changelog&lt;/a&gt; for full details.&lt;/p&gt;

For the best experience with RadRails, we recommend &lt;a href=&quot;http://aptana.com/docs/index.php/Updating_your_version_of_Aptana_Studio&quot;  target=&quot;_window&quot;&gt;updating&lt;/a&gt; to, or &lt;a href=&quot;http://update.aptana.com/install/rails/3.2&quot;  target=&quot;_window&quot;&gt;download&lt;/a&gt;, Aptana RadRails 1.1.1 now.
</description>
 <content:encoded>&lt;p&gt;Whether or not you got the Aptana RadRails 1.1 release last month, Aptana RadRails 1.1.1 is now available too.  Here&#039;s the highlights for both:&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;RadRails 1.1&lt;/b&gt; included a few new features, a host of bug fixes, and provided compatiaiblity for Aptana Studio 1.2+:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fixes broken compatibility between the YML/ERB editors and Studio 1.2+&lt;/li&gt;
&lt;li&gt;provides compatibility with RubyGems 1.2 and 1.3+&lt;/li&gt;
&lt;li&gt;includes the HAML and SASS editor plugins from Brad Wilson of &lt;a href=&quot;http://blog.lucky-dip.net/&quot; target=&quot;_window&quot;&gt;http://blog.lucky-dip.net/&lt;/a&gt;. Thanks Brad!&lt;/li&gt;
&lt;li&gt;bundles newer versions of JRuby, which brings with it its own &lt;a href=&quot;http://jruby.codehaus.org/&quot;  target=&quot;_window&quot;&gt;list of bugfixes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


&lt;p&gt;&lt;b&gt;RadRails 1.1.1&lt;/b&gt; became available last week.  This is a bugfix release that contains a handful of high priority bugfixes. See the &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10150&quot;  target=&quot;_window&quot;&gt;full changelog&lt;/a&gt; for full details.&lt;/p&gt;

For the best experience with RadRails, we recommend &lt;a href=&quot;http://aptana.com/docs/index.php/Updating_your_version_of_Aptana_Studio&quot;  target=&quot;_window&quot;&gt;updating&lt;/a&gt; to, or &lt;a href=&quot;http://update.aptana.com/install/rails/3.2&quot;  target=&quot;_window&quot;&gt;download&lt;/a&gt;, Aptana RadRails 1.1.1 now.
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 05 Jan 2009 13:27:40 -0600</pubDate>
 <dc:creator>cwilliams</dc:creator>
 <guid isPermaLink="false">542 at http://aptana.com</guid>
</item>
<item>
 <title>Nokia Web Development Plugin for Aptana Studio Released</title>
 <link>http://aptana.com/blog/khakman/nokia_wrt_plugin_beta</link>
 <description>&lt;p&gt;
Nokia and Aptana this week started shipping the beta release of &lt;a href=&quot;http://www.aptana.com/nokia&quot;&gt;Nokia WRT Plugin for Aptana Studio&lt;/a&gt;. Nokia WRT (Web Runtime) lets you build native apps and widgets for Nokia S60 phones using your JavaScript, Ajax, HTML, and CSS skills -- the stuff standard web pages are  made from, but installable on the phone &lt;!--break--&gt; for increased performance, less bandwidth consumption, and more capabilities. We are pleased to be expanding Aptana&#039;s support for mobile devices adding Nokia to the growing list of tools for mobile web development using Aptana Studio. 
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.aptana.tv/movies/jaxer/PlayQTFlash.html?movie=NokiaDemo&amp;width=960&amp;height=600&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;&lt;img src=&quot;http://www.aptana.com/images/screenshots/nokiascreen_preview.gif&quot; width=&quot;510&quot; height=&quot;352&quot; alt=&quot;Nokia WRT Plug-In for Aptana Studio&quot;&gt;&lt;br /&gt;&lt;br /&gt;
Watch Screencast&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Open Standards&lt;/h4&gt;
The &lt;a href=&quot;http://www.forum.nokia.com/Resources_and_Information/Explore/Web_Technologies/Web_Runtime/&quot;&gt;Nokia WRT&lt;/a&gt; is based on WebKit.  So there&#039;s lots of sound, open web technology there as a foundation upon which to build.  Despite the &quot;duh factor&quot; of this, it&#039;s kind of revolutionary since mobile devices historically have required specialized runtimes, libraries and tools resulting in a highly fractious eco-system for mobile app development.  WebKit&#039;s adoption by many leading mobile device manufacturers, including Apple for its iPhone, lays a great foundation at last for a mobile standard: JavaScript, HTML, &amp;amp; CSS -- Duh!
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Extending Aptana Studio and Eclipse&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio is free software built on the Eclipse Plugin model.  Nokia WRT Plugin for Aptana Studio extends Aptana Studio&#039;s core support for Ajax libraries, HTML, CSS and JavaScript and leverages its JavaScript debugging and other features.  Aptana Studio can run standalone, or you can also plug Aptana Studio into Eclipse, or other Eclipse-based IDEs.
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Nokia WRT Component Library&lt;/h4&gt;
To get you started fast, Nokia WRT SDK (and its development plugin for Aptana Studio) include a library of Ajax components, optimized for the Nokia WRT.  These controls include form elements, navigational controls, and other goodies that are pre-integrated with the capabilities of the Nokia WRT.  There&#039;s also support for Flash .swf in Nokia WRT.
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Nokia Preview and Nokia WRT API Emulation&lt;/h4&gt;
A Nokia device preview is added to the generic Firefox, Safari and IE previews that are standard in Studio. One click lets you see what your app will look like on a phone at different screen dimensions for different devices. In addition, the preview supports the emulation of the Nokia WRT 1.0 APIs so that you can actually click on stuff and make it work. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Automated Project Creation and Test Deployment&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio helps you create ,test, and deploy projects too. The project creation wizard includes and sets up all the resource files you need, including the Nokia WRT components if you want them. Add other Ajax library support via Aptana Studio. The *.wgz packages needed for deployment can be generated by the plugin, and deployed via Bluetooth connections for testing. On Windows operating systems you can also download and install Nokia’s in the S60 3rd Edition, Feature Pack 2 and S60 5th Edition SDKs  and deploy widgets to the emulator for testing. The plugin is also supported for MacOS, but without the Emulator deployment. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;How to get it?&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio was developed by Nokia, but is being shipped by Aptana.  If you already have Aptana Studio, update to Aptana Studio 1.2.1, then go to Aptana &amp;gt; My Aptana &amp;gt; Plugins &amp;gt; Nokia WRT Plugin &amp;gt; Get It.  Otherwise &lt;a href=&quot;http://www.aptana.com/studio/download&quot;&gt;download and install Aptana Studio&lt;/a&gt;, then do the above. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;It&#039;s a BETA so, give us and Nokia your feedback!&lt;/h4&gt;
&lt;a href=&quot;http://www.aptana.com/nokia&quot;&gt;Aptana&#039;s Nokia mobile device support page&lt;/a&gt; has links to the discussion forums for feedback during this beta period. Let us know what you think, where we can improve, likes, dislikes, and new ideas so that we can continue to refine it for you. 
&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;
Nokia and Aptana this week started shipping the beta release of &lt;a href=&quot;http://www.aptana.com/nokia&quot;&gt;Nokia WRT Plugin for Aptana Studio&lt;/a&gt;. Nokia WRT (Web Runtime) lets you build native apps and widgets for Nokia S60 phones using your JavaScript, Ajax, HTML, and CSS skills -- the stuff standard web pages are  made from, but installable on the phone &lt;!--break--&gt; for increased performance, less bandwidth consumption, and more capabilities. We are pleased to be expanding Aptana&#039;s support for mobile devices adding Nokia to the growing list of tools for mobile web development using Aptana Studio. 
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.aptana.tv/movies/jaxer/PlayQTFlash.html?movie=NokiaDemo&amp;width=960&amp;height=600&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;&lt;img src=&quot;http://www.aptana.com/images/screenshots/nokiascreen_preview.gif&quot; width=&quot;510&quot; height=&quot;352&quot; alt=&quot;Nokia WRT Plug-In for Aptana Studio&quot;&gt;&lt;br /&gt;&lt;br /&gt;
Watch Screencast&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Open Standards&lt;/h4&gt;
The &lt;a href=&quot;http://www.forum.nokia.com/Resources_and_Information/Explore/Web_Technologies/Web_Runtime/&quot;&gt;Nokia WRT&lt;/a&gt; is based on WebKit.  So there&#039;s lots of sound, open web technology there as a foundation upon which to build.  Despite the &quot;duh factor&quot; of this, it&#039;s kind of revolutionary since mobile devices historically have required specialized runtimes, libraries and tools resulting in a highly fractious eco-system for mobile app development.  WebKit&#039;s adoption by many leading mobile device manufacturers, including Apple for its iPhone, lays a great foundation at last for a mobile standard: JavaScript, HTML, &amp;amp; CSS -- Duh!
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Extending Aptana Studio and Eclipse&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio is free software built on the Eclipse Plugin model.  Nokia WRT Plugin for Aptana Studio extends Aptana Studio&#039;s core support for Ajax libraries, HTML, CSS and JavaScript and leverages its JavaScript debugging and other features.  Aptana Studio can run standalone, or you can also plug Aptana Studio into Eclipse, or other Eclipse-based IDEs.
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Nokia WRT Component Library&lt;/h4&gt;
To get you started fast, Nokia WRT SDK (and its development plugin for Aptana Studio) include a library of Ajax components, optimized for the Nokia WRT.  These controls include form elements, navigational controls, and other goodies that are pre-integrated with the capabilities of the Nokia WRT.  There&#039;s also support for Flash .swf in Nokia WRT.
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Nokia Preview and Nokia WRT API Emulation&lt;/h4&gt;
A Nokia device preview is added to the generic Firefox, Safari and IE previews that are standard in Studio. One click lets you see what your app will look like on a phone at different screen dimensions for different devices. In addition, the preview supports the emulation of the Nokia WRT 1.0 APIs so that you can actually click on stuff and make it work. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;Automated Project Creation and Test Deployment&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio helps you create ,test, and deploy projects too. The project creation wizard includes and sets up all the resource files you need, including the Nokia WRT components if you want them. Add other Ajax library support via Aptana Studio. The *.wgz packages needed for deployment can be generated by the plugin, and deployed via Bluetooth connections for testing. On Windows operating systems you can also download and install Nokia’s in the S60 3rd Edition, Feature Pack 2 and S60 5th Edition SDKs  and deploy widgets to the emulator for testing. The plugin is also supported for MacOS, but without the Emulator deployment. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;How to get it?&lt;/h4&gt;
The Nokia WRT Plugin for Aptana Studio was developed by Nokia, but is being shipped by Aptana.  If you already have Aptana Studio, update to Aptana Studio 1.2.1, then go to Aptana &amp;gt; My Aptana &amp;gt; Plugins &amp;gt; Nokia WRT Plugin &amp;gt; Get It.  Otherwise &lt;a href=&quot;http://www.aptana.com/studio/download&quot;&gt;download and install Aptana Studio&lt;/a&gt;, then do the above. 
&lt;/p&gt;

&lt;p&gt;
&lt;h4&gt;It&#039;s a BETA so, give us and Nokia your feedback!&lt;/h4&gt;
&lt;a href=&quot;http://www.aptana.com/nokia&quot;&gt;Aptana&#039;s Nokia mobile device support page&lt;/a&gt; has links to the discussion forums for feedback during this beta period. Let us know what you think, where we can improve, likes, dislikes, and new ideas so that we can continue to refine it for you. 
&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/18">iphone</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <pubDate>Mon, 22 Dec 2008 16:01:51 -0600</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">540 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana PHP Development Environment Released</title>
 <link>http://aptana.com/blog/pcolton/aptana_php_tools_released</link>
 <description>&lt;p&gt;PHP development and deployment just got way easier. Today, we&#039;re pleased to announce the 1.0 availability of the Aptana PHP development environment.  It&#039;s got all the things you&#039;d expect from a PHP IDE, plus all the Ajax tooling and other power tools from Aptana Studio. Combine that with the integrated PHP app hosting, staging and management features in Aptana Cloud and you&#039;ve got an end-to-end PHP development and deployment environment with unprecedented ease of use.&lt;!--break--&gt;
&lt;/p&gt;
 
&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/themes/aptana/stylesheets/img_icon_php.png&quot; align=&quot;left&quot; hspace=&quot;8&quot;&gt;&lt;a href=&quot;http://www.aptana.com/php&quot; target=&quot;_window&quot;&gt;Learn more&lt;/a&gt; at our updated PHP section on aptana.com, or &lt;a href=&quot;http://www.aptana.com/docs/index.php/Installing_a_Studio_plugin&quot; target=&quot;_window&quot;&gt;get the Aptana PHP plugin for Aptana Studio now&lt;/a&gt; and start using the full 1.0 release.
&lt;/p&gt;

&lt;p&gt;Thank you to all who participated in the betas for both Aptana PHP and Aptana Cloud.  Your feedback helps us make the best possible solutions for you.  Keep that feedback coming because we&#039;re gearing up for the next versions of these already. 
&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/images/thumbs/php/video_editor.png&quot; align=&quot;right&quot; hspace=&quot;8&quot;&gt;We&#039;ve also started a PHP screencast library.  Get insights to working with Aptana PHP and PHP in Aptana Cloud from the engineers who created the software.  As of today, you&#039;ll find a collection of these screencasts at the new &lt;a href=&quot;http://www.aptana.com/php&quot; target=&quot;_window&quot;&gt;www.aptana.com/php&lt;/a&gt; page along with other resources to rapidly get up to speed with Aptana PHP.  We&#039;ll also be adding to that screencast library over-time with more insights and tips from our team.  Just subscribe to this RSS feed to get notified of when new screencasts are available.
 &lt;/p&gt;

&lt;p&gt;I thought you&#039;d also be interested in what some people are saying about Aptana&#039;s PHP support in Studio and in Cloud:
 &lt;/p&gt;

&lt;blockquote&gt;&quot;My team and I have used Zend, PHPEdit, and Aptana Studio, all for extended periods of time.   All packages &#039;do the job&#039;, but Aptana’s tools actually help you to code more efficiently, and in many different arenas.  Today&#039;s web developer needs to understand more than one language, and Aptana understands that, with tools for PHP, MySQL, CSS, JavaScript, Ajax, AIR, and others.&quot;
&lt;br /&gt;-- Greg Ervin, IT director for Aurora WDC, a competitive intelligence research firm.  
&lt;/blockquote&gt;
 &lt;blockquote&gt;
&quot;[IntelliJ] was my editor of choice … But Aptana Studio has delivered a game-changer: the IDE provides integrated deployment to cloud servers.&quot;
&lt;br /&gt;-- Benjamin Shine, Web developer
 &lt;/blockquote&gt;

&lt;blockquote&gt;
&quot;If you&#039;re looking to host a PHP application with minimum fuss and the option of scaling up/down then Aptana Cloud is a great choice and certainly by far the easiest way I’ve ever seen to getting an app up and running in the cloud.&quot;
&lt;br /&gt;-- John Beynon, Web developer with the firm Monochrome
 &lt;/blockquote&gt;
&lt;p&gt;
Even with all that&#039;s in this release, we want to make Aptana PHP even better for you.  So, please be vocal in the forums with your likes or dislikes and report bugs or request feature enhancements through &lt;a href=&quot;http://support.aptana.com&quot; target=&quot;_window&quot;&gt;http://support.aptana.com&lt;/a&gt;. 
 &lt;/p&gt;

&lt;p&gt;Thanks!
 &lt;/p&gt;

&lt;p&gt;-Paul
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;PHP development and deployment just got way easier. Today, we&#039;re pleased to announce the 1.0 availability of the Aptana PHP development environment.  It&#039;s got all the things you&#039;d expect from a PHP IDE, plus all the Ajax tooling and other power tools from Aptana Studio. Combine that with the integrated PHP app hosting, staging and management features in Aptana Cloud and you&#039;ve got an end-to-end PHP development and deployment environment with unprecedented ease of use.&lt;!--break--&gt;
&lt;/p&gt;
 
&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/themes/aptana/stylesheets/img_icon_php.png&quot; align=&quot;left&quot; hspace=&quot;8&quot;&gt;&lt;a href=&quot;http://www.aptana.com/php&quot; target=&quot;_window&quot;&gt;Learn more&lt;/a&gt; at our updated PHP section on aptana.com, or &lt;a href=&quot;http://www.aptana.com/docs/index.php/Installing_a_Studio_plugin&quot; target=&quot;_window&quot;&gt;get the Aptana PHP plugin for Aptana Studio now&lt;/a&gt; and start using the full 1.0 release.
&lt;/p&gt;

&lt;p&gt;Thank you to all who participated in the betas for both Aptana PHP and Aptana Cloud.  Your feedback helps us make the best possible solutions for you.  Keep that feedback coming because we&#039;re gearing up for the next versions of these already. 
&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/images/thumbs/php/video_editor.png&quot; align=&quot;right&quot; hspace=&quot;8&quot;&gt;We&#039;ve also started a PHP screencast library.  Get insights to working with Aptana PHP and PHP in Aptana Cloud from the engineers who created the software.  As of today, you&#039;ll find a collection of these screencasts at the new &lt;a href=&quot;http://www.aptana.com/php&quot; target=&quot;_window&quot;&gt;www.aptana.com/php&lt;/a&gt; page along with other resources to rapidly get up to speed with Aptana PHP.  We&#039;ll also be adding to that screencast library over-time with more insights and tips from our team.  Just subscribe to this RSS feed to get notified of when new screencasts are available.
 &lt;/p&gt;

&lt;p&gt;I thought you&#039;d also be interested in what some people are saying about Aptana&#039;s PHP support in Studio and in Cloud:
 &lt;/p&gt;

&lt;blockquote&gt;&quot;My team and I have used Zend, PHPEdit, and Aptana Studio, all for extended periods of time.   All packages &#039;do the job&#039;, but Aptana’s tools actually help you to code more efficiently, and in many different arenas.  Today&#039;s web developer needs to understand more than one language, and Aptana understands that, with tools for PHP, MySQL, CSS, JavaScript, Ajax, AIR, and others.&quot;
&lt;br /&gt;-- Greg Ervin, IT director for Aurora WDC, a competitive intelligence research firm.  
&lt;/blockquote&gt;
 &lt;blockquote&gt;
&quot;[IntelliJ] was my editor of choice … But Aptana Studio has delivered a game-changer: the IDE provides integrated deployment to cloud servers.&quot;
&lt;br /&gt;-- Benjamin Shine, Web developer
 &lt;/blockquote&gt;

&lt;blockquote&gt;
&quot;If you&#039;re looking to host a PHP application with minimum fuss and the option of scaling up/down then Aptana Cloud is a great choice and certainly by far the easiest way I’ve ever seen to getting an app up and running in the cloud.&quot;
&lt;br /&gt;-- John Beynon, Web developer with the firm Monochrome
 &lt;/blockquote&gt;
&lt;p&gt;
Even with all that&#039;s in this release, we want to make Aptana PHP even better for you.  So, please be vocal in the forums with your likes or dislikes and report bugs or request feature enhancements through &lt;a href=&quot;http://support.aptana.com&quot; target=&quot;_window&quot;&gt;http://support.aptana.com&lt;/a&gt;. 
 &lt;/p&gt;

&lt;p&gt;Thanks!
 &lt;/p&gt;

&lt;p&gt;-Paul
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/34">php</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Thu, 11 Dec 2008 17:00:12 -0600</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">534 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Studio 1.2.1 Update Now Available</title>
 <link>http://aptana.com/node/531</link>
 <description>&lt;p&gt;Aptana Studio 1.2.1 is now available. This update contains several new features and improvements...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Aptana Menu&lt;/b&gt;. Find all the Aptana tools and views in a single menu.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSH (Secure Shell)&lt;/b&gt;. SSH (Secure Shell) into your Cloud sites using your OS&#039;s SSH client (putty in case of Windows)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SmartSync Dialog&lt;/b&gt;. The SmartSync has several GUI improvements. It is now possible to sync only parts (selected files and/or folder) of your project and to specify the file permissions for newly uploaded remote files.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bundled Subclipse Client&lt;/b&gt;. The bundled Subclipse client has been updated to 1.4.2.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adobe AIR 1.5 Support&lt;/b&gt;. Add the Adobe AIR 1.5 Development Plug-In to Studio 1.2.1.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Numerous bug fixes&lt;/b&gt; as described in the &lt;a href=&quot;http://www.aptana.com/docs/index.php/ReleaseNotes&quot; target=&quot;_window&quot;&gt;release notes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://aptana.com/docs/index.php/Updating_your_version_of_Aptana_Studio&quot; target=&quot;_window&quot;&gt;Update&lt;/a&gt; to or &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;download&lt;/a&gt; Aptana Studio 1.2.1 now.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Aptana Studio 1.2.1 is now available. This update contains several new features and improvements...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Aptana Menu&lt;/b&gt;. Find all the Aptana tools and views in a single menu.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSH (Secure Shell)&lt;/b&gt;. SSH (Secure Shell) into your Cloud sites using your OS&#039;s SSH client (putty in case of Windows)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SmartSync Dialog&lt;/b&gt;. The SmartSync has several GUI improvements. It is now possible to sync only parts (selected files and/or folder) of your project and to specify the file permissions for newly uploaded remote files.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bundled Subclipse Client&lt;/b&gt;. The bundled Subclipse client has been updated to 1.4.2.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adobe AIR 1.5 Support&lt;/b&gt;. Add the Adobe AIR 1.5 Development Plug-In to Studio 1.2.1.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Numerous bug fixes&lt;/b&gt; as described in the &lt;a href=&quot;http://www.aptana.com/docs/index.php/ReleaseNotes&quot; target=&quot;_window&quot;&gt;release notes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://aptana.com/docs/index.php/Updating_your_version_of_Aptana_Studio&quot; target=&quot;_window&quot;&gt;Update&lt;/a&gt; to or &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;download&lt;/a&gt; Aptana Studio 1.2.1 now.&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 05 Dec 2008 18:25:58 -0600</pubDate>
 <dc:creator>schitale</dc:creator>
 <guid isPermaLink="false">531 at http://aptana.com</guid>
</item>
<item>
 <title>Debug JavaScript in Adobe AIR apps using Aptana Studio 1.2.1</title>
 <link>http://aptana.com/blog/pcolton/debug_javascript_in_adobe_air_apps</link>
 <description>&lt;p&gt;
JavaScript is pretty much everywhere you look these days, reaching far beyond your desktop browser.  Adobe AIR lets you use JavaScript to create desktop installed HTML and Ajax apps. Apple uses it &lt;!--break--&gt; in its gadgets and in the iPhone&#039;s browser.  And Nokia recently announced support for installed, local JavaScript apps on its phones with APIs to the camera, GPS, etc...  (Anyone spotting a WebKit trend here?)  You can even use JavaScript to create extensions for Aptana Studio and Dreamweaver too!  Anyways, with all this JavaScript out there powering so many things we use every day, having great JavaScript debugging capabilities is paramount to development.
&lt;/p&gt;

&lt;p&gt;
That&#039;s why today we&#039;re pleased to announce a huge step forward in the ease of creating Ajax and HTML apps for Adobe AIR:  Today&#039;s release of the &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR Development Plug-in for Aptana Studio (beta)&lt;/a&gt; features, you guessed it &amp;mdash; &lt;b&gt;JavaScript debugging for Adobe AIR apps&lt;/b&gt; along with support for Adobe AIR 1.5 which Adobe announced earlier this week.
&lt;/p&gt;

&lt;p&gt;
We previewed the JavaScript debugger for Adobe AIR apps yesterday to a group at Adobe MAX in San Francisco and got applauded for providing this critical utility to the AIR community.  Like with other debugging environments you’re familiar with, just click to set a break point in the gutter, then step through, into and out of lines of code while viewing variables and introspecting objects.  We think you&#039;ll find it quite useful.  Did I mention it was free too?
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=AirDebug&amp;width=1152&amp;height=864&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;&lt;img src=&quot;http://www.aptana.com/images/screencast/air_debug.jpg&quot; align=&quot;middle&quot;&gt;&lt;/a&gt;
&amp;nbsp;&amp;nbsp
Check out this &lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=AirDebug&amp;width=1152&amp;height=864&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;short screencast&lt;/a&gt; for a preview.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
Or, if you can&#039;t wait here&#039;s how to get your hands on it now:
&lt;/p&gt;


&lt;ol&gt;
 &lt;li&gt;     Get Aptana Studio 1.2.0  &lt;/li&gt;
  &lt;ul&gt;      
   &lt;li&gt;     New to Aptana Studio? &lt;a href=&quot;/studio/download&quot; target=&quot;_window&quot;&gt;Download and install Aptana Studio 1.2.0.&lt;/a&gt; &lt;/li&gt;
   &lt;li&gt;     Already have Aptana Studio? Open it and select Help &gt; Check for Aptana Updates Now... &lt;/li&gt;
  &lt;/ul&gt;
 &lt;li&gt;     With Studio 1.2.0 and open, select Window &gt; Preferences, then &gt; Install / Update. &lt;/li&gt;
 &lt;li&gt;     Set the Policy URL field to: &lt;b&gt;http://update.aptana.com/update/studio/1.2.1beta/3.2/policy.xml&lt;/b&gt; &lt;/li&gt;
 &lt;li&gt;     Apply the changes and Close the preferences screen. &lt;/li&gt;
 &lt;li&gt;     Next, select Help &gt; Check for Aptana Updates Now... &lt;/li&gt;
 &lt;li&gt;     Download and install Aptana Studio 1.2.1 Beta, and restart Studio. &lt;/li&gt;
 &lt;li&gt;     Select Help &gt; My Aptana and click on the Plug-ins area.&lt;/li&gt;
 &lt;li&gt;     Select the Adobe AIR Development Plug-in from the list and follow the steps.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
As I mentioned it&#039;s a beta, so we&#039;re eager to get feedback now so that we can make final changes as well as start to add enhancement requests for future functionality.
&lt;/p&gt;

&lt;p&gt;
Visit &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;www.aptana.com/air&lt;/a&gt; for more info, links to forums, bug reporting, enhancement requests, docs and more resources.
&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;
JavaScript is pretty much everywhere you look these days, reaching far beyond your desktop browser.  Adobe AIR lets you use JavaScript to create desktop installed HTML and Ajax apps. Apple uses it &lt;!--break--&gt; in its gadgets and in the iPhone&#039;s browser.  And Nokia recently announced support for installed, local JavaScript apps on its phones with APIs to the camera, GPS, etc...  (Anyone spotting a WebKit trend here?)  You can even use JavaScript to create extensions for Aptana Studio and Dreamweaver too!  Anyways, with all this JavaScript out there powering so many things we use every day, having great JavaScript debugging capabilities is paramount to development.
&lt;/p&gt;

&lt;p&gt;
That&#039;s why today we&#039;re pleased to announce a huge step forward in the ease of creating Ajax and HTML apps for Adobe AIR:  Today&#039;s release of the &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;Adobe AIR Development Plug-in for Aptana Studio (beta)&lt;/a&gt; features, you guessed it &amp;mdash; &lt;b&gt;JavaScript debugging for Adobe AIR apps&lt;/b&gt; along with support for Adobe AIR 1.5 which Adobe announced earlier this week.
&lt;/p&gt;

&lt;p&gt;
We previewed the JavaScript debugger for Adobe AIR apps yesterday to a group at Adobe MAX in San Francisco and got applauded for providing this critical utility to the AIR community.  Like with other debugging environments you’re familiar with, just click to set a break point in the gutter, then step through, into and out of lines of code while viewing variables and introspecting objects.  We think you&#039;ll find it quite useful.  Did I mention it was free too?
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=AirDebug&amp;width=1152&amp;height=864&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;&lt;img src=&quot;http://www.aptana.com/images/screencast/air_debug.jpg&quot; align=&quot;middle&quot;&gt;&lt;/a&gt;
&amp;nbsp;&amp;nbsp
Check out this &lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=AirDebug&amp;width=1152&amp;height=864&amp;startWith=flash&quot; target=&quot;_window&quot;&gt;short screencast&lt;/a&gt; for a preview.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
Or, if you can&#039;t wait here&#039;s how to get your hands on it now:
&lt;/p&gt;


&lt;ol&gt;
 &lt;li&gt;     Get Aptana Studio 1.2.0  &lt;/li&gt;
  &lt;ul&gt;      
   &lt;li&gt;     New to Aptana Studio? &lt;a href=&quot;/studio/download&quot; target=&quot;_window&quot;&gt;Download and install Aptana Studio 1.2.0.&lt;/a&gt; &lt;/li&gt;
   &lt;li&gt;     Already have Aptana Studio? Open it and select Help &gt; Check for Aptana Updates Now... &lt;/li&gt;
  &lt;/ul&gt;
 &lt;li&gt;     With Studio 1.2.0 and open, select Window &gt; Preferences, then &gt; Install / Update. &lt;/li&gt;
 &lt;li&gt;     Set the Policy URL field to: &lt;b&gt;http://update.aptana.com/update/studio/1.2.1beta/3.2/policy.xml&lt;/b&gt; &lt;/li&gt;
 &lt;li&gt;     Apply the changes and Close the preferences screen. &lt;/li&gt;
 &lt;li&gt;     Next, select Help &gt; Check for Aptana Updates Now... &lt;/li&gt;
 &lt;li&gt;     Download and install Aptana Studio 1.2.1 Beta, and restart Studio. &lt;/li&gt;
 &lt;li&gt;     Select Help &gt; My Aptana and click on the Plug-ins area.&lt;/li&gt;
 &lt;li&gt;     Select the Adobe AIR Development Plug-in from the list and follow the steps.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
As I mentioned it&#039;s a beta, so we&#039;re eager to get feedback now so that we can make final changes as well as start to add enhancement requests for future functionality.
&lt;/p&gt;

&lt;p&gt;
Visit &lt;a href=&quot;http://www.aptana.com/air&quot; target=&quot;_window&quot;&gt;www.aptana.com/air&lt;/a&gt; for more info, links to forums, bug reporting, enhancement requests, docs and more resources.
&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 18 Nov 2008 12:48:45 -0600</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">527 at http://aptana.com</guid>
</item>
<item>
 <title>Digging deeper into Aptana Cloud</title>
 <link>http://aptana.com/blog/khakman/digging_deeper_into_aptana_cloud</link>
 <description>&lt;p&gt;
&amp;quot;I discovered Aptana Cloud and to say I’m impressed is an understatement,&amp;quot; says John Beynon in &lt;a href=&quot;http://john.beynon.org.uk/2008/11/11/digging-deeper-into-aptana-cloud/&quot; target=&quot;_window&quot;&gt;his blog post regarding Aptana Cloud&lt;/a&gt;. &amp;quot;Without any code changes, I right clicked the project containing my blogs WordPress installation and choose to deploy it to the cloud. After a brief sign up for a trial (no credit card required) and selection of my required service I was good to go and was presented with a synchronise view to send my project up to their servers and a few minutes later my code was all in the ‘cloud’.&amp;quot;&lt;/p&gt;
&lt;!--break--&gt;

&lt;img src=&quot;http://john.beynon.org.uk/wp-content/uploads/2008/11/aptana2-thumb.jpg&quot;&gt;

&lt;p&gt;Aptana Cloud: 
&lt;a href=&quot;http://www.aptana.com/cloud&quot;&gt;Learn More&lt;/a&gt; |
&lt;a href=&quot;http://www.aptana.com/cloud?video&quot;&gt;Watch Screencast&lt;/a&gt;&lt;/p&gt;

</description>
 <content:encoded>&lt;p&gt;
&amp;quot;I discovered Aptana Cloud and to say I’m impressed is an understatement,&amp;quot; says John Beynon in &lt;a href=&quot;http://john.beynon.org.uk/2008/11/11/digging-deeper-into-aptana-cloud/&quot; target=&quot;_window&quot;&gt;his blog post regarding Aptana Cloud&lt;/a&gt;. &amp;quot;Without any code changes, I right clicked the project containing my blogs WordPress installation and choose to deploy it to the cloud. After a brief sign up for a trial (no credit card required) and selection of my required service I was good to go and was presented with a synchronise view to send my project up to their servers and a few minutes later my code was all in the ‘cloud’.&amp;quot;&lt;/p&gt;
&lt;!--break--&gt;

&lt;img src=&quot;http://john.beynon.org.uk/wp-content/uploads/2008/11/aptana2-thumb.jpg&quot;&gt;

&lt;p&gt;Aptana Cloud: 
&lt;a href=&quot;http://www.aptana.com/cloud&quot;&gt;Learn More&lt;/a&gt; |
&lt;a href=&quot;http://www.aptana.com/cloud?video&quot;&gt;Watch Screencast&lt;/a&gt;&lt;/p&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/34">php</category>
 <pubDate>Thu, 13 Nov 2008 17:33:39 -0600</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">524 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer 1.0 released. Jaxer Pro 1.0 also available.</title>
 <link>http://aptana.com/blog/pcolton/jaxer10_released</link>
 <description>&lt;p&gt;
I am excited to announce that the 1.0 version of Jaxer, the free, open source Ajax server, has been released.  If you like working with JavaScript and Ajax, you&#039;re going to love Jaxer!  This 1.0 release of Jaxer is the culmination of three years of work to deliver this first-of-a-kind Ajax server that embeds the Mozilla Firefox browser engine within a server and full JavaScript application framework so that you can use your JavaScript and Ajax skills not just to create web pages but also to create full web applications on the server as well.  &lt;!--break--&gt;
&lt;/p&gt;
&lt;p&gt;
If you can&#039;t wait, &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot; target=&quot;_window&quot;  &gt;download&lt;/a&gt; it now or &lt;a href=&quot;http://www.aptana.com/jaxer&quot;  target=&quot;_window&quot; &gt;learn more&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt; 
&lt;img src=&quot;http://www.aptana.com/images/jaxer_logo_whitebg.jpg&quot; width=204 height=234 align=&quot;right&quot; alt=&quot;Aptana Jaxer Logo&quot;&gt; While Jaxer is the brainchild of members of the Aptana team who have been advancing it since Aptana was founded, kudos must also go to the developer community who has actively participated in Jaxer betas since early 2008 and provided much feedback that&#039;s guided Jaxer development.  Thus in many ways Jaxer is an Ajax server built by web developers for web developers.   Jaxer was also created with guidance from members of our technical advisory board including Brendan Eich, creator of JavaScript and Mozilla CTO, who helped us with insights to tune things and deliver initial performance benchmarks for Jaxer in the range of PHP and Ruby on Rails.  
&lt;/p&gt;
&lt;p&gt;  
If you&#039;ve already been using Jaxer you&#039;re likely familiar with its database, file system and socket APIs and its ability to not only run JavaScript and process the HTML DOM at the server, but also to expose server-side functions to the Web such that a HTML page can call back to those functions directly from the Web page.  Thus Ajax communications could not be any easier with Jaxer: You just write a server-side function, &quot;proxy it&quot; with one line of code, then call it from the Web browser as if that function were part of the web page.  Jaxer handles the client/server communications, data transformations, and provides the client-side function with its return value (either synchronously or asynchronously).
&lt;/p&gt;
&lt;p&gt; 
Recently we&#039;ve added even more capabilities based on community feedback.  These including support for RESTful APIs as well as native support for JSON to supplement the E4X (XML for JavaScript) support that&#039;s been there all along (thank you Mozilla!).  The combination of these means you can easily create RESTful services that can be consumed by a wide array of Ajax applications, Web gadgets, Facebook or OpenSocial apps, and even Adobe Flash or Microsoft Silverlight based apps since those support JavaScript too. Plus mobile devices like the Apple iPhone and phones from other manufacturers are nearly all supporting JavaScript and Ajax.  As you can imagine we&#039;re excited to see JavaScript become more and more the lingua franca of Web applications.  It&#039;s already ubiquitous on the client side and now you can use it confidently on the server side.
&lt;/p&gt;
&lt;p&gt; 
&lt;img src=&quot;http://aptana.com/themes/aptana/stylesheets/screencasts/jaxer.jpg&quot; align=left style=&quot;margin-right:8px;&quot;&gt;This &lt;a href=&quot;http://www.aptana.com/jaxer?video&quot;  target=&quot;_window&quot; &gt;introduction to Jaxer screencast&lt;/a&gt; shows you the Jaxer basics with some examples of using Jaxer&#039;s &lt;br /&gt; &amp;lt;script runat=&quot;server | both | server-proxy&quot; &amp;gt; settings.
&lt;/p&gt;
&lt;br clear=left /&gt;
&lt;br clear=left /&gt;
&lt;p&gt; 
Here are more examples of Jaxer in action:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://beavercreekconsulting.com/blog/2008/08/jaxer-crud/&quot;  target=&quot;_window&quot; &gt;Integrating with a database and calling server-side JS functions from the browser&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/blog/paul/dom_scraping_with_jaxer&quot;  target=&quot;_window&quot; &gt;Using Jaxer to securely communicate across domains and mashup information&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/blog/uri/restful_jaxer&quot;  target=&quot;_window&quot; &gt;Creating RESTful data services with Jaxer&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.codegobbler.com/one-form-many-uses-server-side-jquery-jaxer&quot;  target=&quot;_window&quot; &gt;Using Ajax libraries server-side to mutate HTML pages before they are served&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&quot;  target=&quot;_window&quot; &gt;Using Jaxer to interact with the server operating system&lt;/a&gt;&lt;/li&gt;
 
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/323&quot;  target=&quot;_window&quot; &gt;Easy file uploading&lt;/a&gt;&lt;/li&gt;
	 
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/266&quot;  target=&quot;_window&quot; &gt;Creating Server-Side images with Jaxer&lt;/a&gt;&lt;/li&gt;
	 
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt; 
Jaxer 1.0 is dual licensed.  It&#039;s available to all for free under an open source license or in its Jaxer Pro edition under a commercial license and support agreement from Aptana.  Jaxer is available to try in various ways: It is included in Aptana Studio 1.2, can be downloaded standalone, and can be tried for free via Aptana Cloud, our elastically scalable hosting and application lifecycle management service.  See &lt;a href=&quot;http://www.aptana.com/cloud&quot;  target=&quot;_window&quot; &gt;http://www.aptana.com/cloud&lt;/a&gt; for details.
&lt;/p&gt;

</description>
 <content:encoded>&lt;p&gt;
I am excited to announce that the 1.0 version of Jaxer, the free, open source Ajax server, has been released.  If you like working with JavaScript and Ajax, you&#039;re going to love Jaxer!  This 1.0 release of Jaxer is the culmination of three years of work to deliver this first-of-a-kind Ajax server that embeds the Mozilla Firefox browser engine within a server and full JavaScript application framework so that you can use your JavaScript and Ajax skills not just to create web pages but also to create full web applications on the server as well.  &lt;!--break--&gt;
&lt;/p&gt;
&lt;p&gt;
If you can&#039;t wait, &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot; target=&quot;_window&quot;  &gt;download&lt;/a&gt; it now or &lt;a href=&quot;http://www.aptana.com/jaxer&quot;  target=&quot;_window&quot; &gt;learn more&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt; 
&lt;img src=&quot;http://www.aptana.com/images/jaxer_logo_whitebg.jpg&quot; width=204 height=234 align=&quot;right&quot; alt=&quot;Aptana Jaxer Logo&quot;&gt; While Jaxer is the brainchild of members of the Aptana team who have been advancing it since Aptana was founded, kudos must also go to the developer community who has actively participated in Jaxer betas since early 2008 and provided much feedback that&#039;s guided Jaxer development.  Thus in many ways Jaxer is an Ajax server built by web developers for web developers.   Jaxer was also created with guidance from members of our technical advisory board including Brendan Eich, creator of JavaScript and Mozilla CTO, who helped us with insights to tune things and deliver initial performance benchmarks for Jaxer in the range of PHP and Ruby on Rails.  
&lt;/p&gt;
&lt;p&gt;  
If you&#039;ve already been using Jaxer you&#039;re likely familiar with its database, file system and socket APIs and its ability to not only run JavaScript and process the HTML DOM at the server, but also to expose server-side functions to the Web such that a HTML page can call back to those functions directly from the Web page.  Thus Ajax communications could not be any easier with Jaxer: You just write a server-side function, &quot;proxy it&quot; with one line of code, then call it from the Web browser as if that function were part of the web page.  Jaxer handles the client/server communications, data transformations, and provides the client-side function with its return value (either synchronously or asynchronously).
&lt;/p&gt;
&lt;p&gt; 
Recently we&#039;ve added even more capabilities based on community feedback.  These including support for RESTful APIs as well as native support for JSON to supplement the E4X (XML for JavaScript) support that&#039;s been there all along (thank you Mozilla!).  The combination of these means you can easily create RESTful services that can be consumed by a wide array of Ajax applications, Web gadgets, Facebook or OpenSocial apps, and even Adobe Flash or Microsoft Silverlight based apps since those support JavaScript too. Plus mobile devices like the Apple iPhone and phones from other manufacturers are nearly all supporting JavaScript and Ajax.  As you can imagine we&#039;re excited to see JavaScript become more and more the lingua franca of Web applications.  It&#039;s already ubiquitous on the client side and now you can use it confidently on the server side.
&lt;/p&gt;
&lt;p&gt; 
&lt;img src=&quot;http://aptana.com/themes/aptana/stylesheets/screencasts/jaxer.jpg&quot; align=left style=&quot;margin-right:8px;&quot;&gt;This &lt;a href=&quot;http://www.aptana.com/jaxer?video&quot;  target=&quot;_window&quot; &gt;introduction to Jaxer screencast&lt;/a&gt; shows you the Jaxer basics with some examples of using Jaxer&#039;s &lt;br /&gt; &amp;lt;script runat=&quot;server | both | server-proxy&quot; &amp;gt; settings.
&lt;/p&gt;
&lt;br clear=left /&gt;
&lt;br clear=left /&gt;
&lt;p&gt; 
Here are more examples of Jaxer in action:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://beavercreekconsulting.com/blog/2008/08/jaxer-crud/&quot;  target=&quot;_window&quot; &gt;Integrating with a database and calling server-side JS functions from the browser&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/blog/paul/dom_scraping_with_jaxer&quot;  target=&quot;_window&quot; &gt;Using Jaxer to securely communicate across domains and mashup information&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/blog/uri/restful_jaxer&quot;  target=&quot;_window&quot; &gt;Creating RESTful data services with Jaxer&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.codegobbler.com/one-form-many-uses-server-side-jquery-jaxer&quot;  target=&quot;_window&quot; &gt;Using Ajax libraries server-side to mutate HTML pages before they are served&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&quot;  target=&quot;_window&quot; &gt;Using Jaxer to interact with the server operating system&lt;/a&gt;&lt;/li&gt;
 
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/323&quot;  target=&quot;_window&quot; &gt;Easy file uploading&lt;/a&gt;&lt;/li&gt;
	 
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/266&quot;  target=&quot;_window&quot; &gt;Creating Server-Side images with Jaxer&lt;/a&gt;&lt;/li&gt;
	 
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt; 
Jaxer 1.0 is dual licensed.  It&#039;s available to all for free under an open source license or in its Jaxer Pro edition under a commercial license and support agreement from Aptana.  Jaxer is available to try in various ways: It is included in Aptana Studio 1.2, can be downloaded standalone, and can be tried for free via Aptana Cloud, our elastically scalable hosting and application lifecycle management service.  See &lt;a href=&quot;http://www.aptana.com/cloud&quot;  target=&quot;_window&quot; &gt;http://www.aptana.com/cloud&lt;/a&gt; for details.
&lt;/p&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Thu, 30 Oct 2008 08:15:39 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">521 at http://aptana.com</guid>
</item>
<item>
 <title>RESTful Jaxer</title>
 <link>http://aptana.com/blog/uri/restful_jaxer</link>
 <description>&lt;p&gt;Jaxer, the Ajax server, can do a lot more than &quot;just&quot; serve pages and handle callbacks (function calls from your browser back to Jaxer). With Jaxer 1.0, you can easily create a variety of web services: RESTful, RPC-based, and almost anything else you can imagine. Hooks are already in place for a generic web service and for automatic RPC-based services. Here I&#039;ll demonstrate a simple RESTful service based on the generic web service hook.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;You&#039;ll need &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot;&gt;the latest Jaxer&lt;/a&gt; (currently release 1.0) and the local_jaxer/conf folder contents that ship with it. If you&#039;ve upgraded from a previous version of Jaxer or Aptana Studio (which has Jaxer built in) take a look at the Guide page for instructions on &lt;a href=&quot;http://www.aptana.com/jaxer/guide/develop_basics.html#jaxerConf&quot;&gt;updating your local_jaxer configuration to 1.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;div style=&quot;border: 1px solid #33cc33; padding:4px;&quot;&gt;Here&#039;s a synopsis of all it takes to create a service (RESTful or otherwise):
&lt;ol&gt;
&lt;li&gt;create a folder called &quot;jaxer-service&quot;&lt;/li&gt;
&lt;li&gt;put your code file in that folder (or anywhere under that folder if you need more hierarchy)&lt;/li&gt;
&lt;/ol&gt;
Your code is automatically loaded and executed whenever someone calls it. So now let&#039;s see how that works.
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;To offer a service through Jaxer, rather than a page, you&#039;ll need to put your code where the web server + Jaxer will recognize it as a service. By default, that means somewhere in your docroot where the path to it will contain &quot;jaxer-service&quot; or &quot;jaxer-rpc&quot;. In a Studio project, create a folder with one of those names, and put your code in that folder or in a subfolder. For this example, I&#039;ve created a very simple folder structure, one folder with two files:&lt;br&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/REST_folder_structure_1.png&quot;&gt;&lt;br&gt;
This does two things: identifies the JavaScript code to Jaxer as a service, and prevents direct serving of your JavaScript file to a browser.
&lt;/p&gt;

&lt;p&gt;The service itself is just a JavaScript file that gets loaded (from disk or from cache) and executed every time the service is called. Your code has full access to the information in the request, and needs to set the response as you wish. Here I created a service that simply shows you much of the data available:
&lt;div style=&quot;font-weight: bold&quot;&gt;tests.js:&lt;/b&gt;&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;// pretty-print an object&#039;s properties:
function printObj(obj, indent)
{
	indent = indent || &#039;&#039;;
	var lines = [];
	for (var p in obj)
	{
		if (typeof obj[p] == &quot;function&quot;) continue;
		lines.push(indent + p + &quot;: &quot; + obj[p]);
	}
	return lines.join(&#039;\n&#039;);
}

// in this sample, the HTTP status code to return is passed in the request:
var statusCodeToReturn = Jaxer.request.data.statusCode;

// set the response contents to reflect the request information available:
Jaxer.response.setContents(
	printObj({
		&#039;action (method)&#039;: &#039;\n\t&#039; + Jaxer.request.action, 
		&#039;resource&#039;: &#039;\n\t&#039; + Jaxer.request.parsedUrl.pathParts.slice(1).join(&quot;/&quot;),
		&#039;request headers&#039;: &#039;\n&#039; + printObj(Jaxer.request.headers, &#039;\t&#039;),
		&#039;request body&#039;: &#039;\n\t&#039; + Jaxer.request.body,
		&#039;data&#039;: &#039;\n&#039; + printObj(Jaxer.request.data, &#039;\t&#039;), 
		&#039;request&#039;: &#039;\n&#039; + printObj(Jaxer.request, &#039;\t&#039;),
		&#039;environment variables&#039;: &#039;\n&#039; + printObj(Jaxer.request.env, &#039;\t&#039;)
	}), 
	statusCodeToReturn);

// the Content-Type can be anything appropriate for your service:
Jaxer.response.headers[&#039;Content-Type&#039;] = &#039;text/plain&#039;;&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;The service itself is done. (Of course you can now build an entire services layer, loading other files with Jaxer.load(...).) Now how do we call it? If e.g. the jaxer-service folder is directly under your docroot, just send a request to &lt;b&gt;/jaxer-service/tests&lt;/b&gt; (and you can append whatever extra path or query items to this path). &lt;/p&gt;

&lt;p&gt;How does this work? Jaxer ships with two default dispatchers, both in the extensions folder of the framework: serviceDispatcher.js and rpcDispatcher.js. The first one is what we&#039;ll use here (implicitly): it handles requests of the form /path/to/jaxer-service/path/to/myservice/any/additional/data that have jaxer-service in their path, and tries to find the corresponding file on disk. So it looks in your document root for /path.js, then for /path/to.js, then for /path/to/jaxer-service.js, and so on. In our case it will find /path/to/jaxer-service/path/to/myservice.js (or rather /jaxer-service/tests.js) and load it. How does the dispatcher get invoked? That&#039;s set in your configApps.js file, or in one of your other configApps-like peer files. By default Jaxer ships with services.configApps.js and that adds an app entry to Jaxer.Config.apps which knows to look for &quot;jaxer-service&quot; in the path and call Jaxer.Extensions.ServiceDispatcher.findFile(...); if it succeeds, the app entry has a &quot;handler&quot; property that returns the path to the file, which Jaxer then loads and executes. Note that this is all handled for you by the default configuration: all you have to do is follow the folder naming conventions. Of course, you can now modify this to suit your needs.&lt;/p&gt;

&lt;p&gt;To test this service, I created a simple front-end page called index.html. The source is shown below. Here&#039;s what it looks like, including the output from the service:
&lt;br&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/REST_UI_0.png&quot;&gt;&lt;br&gt;
You can change the method, see which ones support having a body and which do not, etc. Note that the calls are made using your browser&#039;s XHR (XMLHttpRequest) capabilities, wrapped in this simple example by the Jaxer client-side framework for convenience. &lt;/p&gt;

&lt;p&gt;Note: if you&#039;re trying the above in Aptana Studio, it&#039;ll work out of the box. If you&#039;re trying it with the standalone Jaxer, remove the leading &quot;/&quot; in the URL of the service: use &quot;jaxer-service/tests&quot; instead. That&#039;s because Studio needs to do some &quot;magic&quot; remapping between the effective document root and the filesystem.&lt;/p&gt;

&lt;p&gt;Here&#039;s the source for the front-end page:
&lt;div style=&quot;font-weight: bold&quot;&gt;index.html:&lt;/b&gt;&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;RESTful Jaxer&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;RESTful Jaxer&lt;/h1&gt;
		&lt;script runat=&quot;server&quot;&gt;//Nothing - just embeds the Jaxer client framework&lt;/script&gt;
		&lt;h3&gt;What to send:&lt;/h3&gt;
		&lt;form&gt;
		&lt;table&gt;
		&lt;tr&gt;&lt;td&gt;url:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;url&quot; value=&quot;/jaxer-service/tests&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;query params:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;queryParams&quot; value=&quot;a=12&amp;b=banana&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;HTTP action (method):&lt;/td&gt;
			&lt;td&gt;
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;GET&quot; checked=&quot;true&quot;&gt;GET 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;POST&quot;&gt;POST 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;PUT&quot;&gt;PUT 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;DELETE&quot;&gt;DELETE 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;HEAD&quot;&gt;HEAD 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;OPTIONS&quot;&gt;OPTIONS 
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;content type:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;contentType&quot; value=&quot;application/x-www-form-urlencoded&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;request body:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;body&quot; value=&quot;c=42&amp;d=plum&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;return code:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;statusCode&quot; value=&quot;200&quot; size=5&gt; (the response code Jaxer should return)
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;/table&gt;
		&lt;/form&gt;
		&lt;tr&gt;&lt;td colspan=2&gt;&lt;input type=&quot;button&quot; value=&quot;send&quot; onclick=&quot;send()&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;hr&gt;
		&lt;h3&gt;Response:&lt;/h3&gt;
		&lt;pre id=&quot;result&quot; style=&quot;margin: 0pt&quot;&gt;&lt;/pre&gt;
		&lt;script&gt;
			function $(id) { return document.getElementById(id); }
			function $$(id) { return $(id).value; }
			function getRadio(form, name)
			{
				var elts = form.elements[name];
				for (var i=0; i&lt;elts.length; i++)
				{
					if (elts[i].checked) return elts[i].value;
				}
			}
			function send()
			{
				var result = Jaxer.XHR.send($$(&#039;body&#039;), 
				{
					url: $$(&#039;url&#039;) + &#039;?&#039; + $$(&#039;queryParams&#039;) + &quot;&amp;statusCode=&quot; + $$(&#039;statusCode&#039;),
					method: getRadio(document.forms[0], &#039;httpAction&#039;),
					cacheBuster: false,
					async: false,
					contentType: $$(&#039;contentType&#039;)
				});
				$(&#039;result&#039;).innerHTML = result;
			}
		&lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;&lt;/textarea&gt;&lt;/p&gt;


&lt;p&gt;To summarize, all we needed to do to create the service was to create a JavaScript file somewhere in the document root where its path would contain &quot;jaxer-service&quot;. The file will be loaded and executed whenever a request is received for that path (without the &quot;.js&quot; extension). You can add other special paths by adding them to your web server configuration &amp;mdash; see the *.httpd.conf files that ship by default with the standalone Jaxer, and to configApps.js and its peers. &lt;/p&gt;

&lt;p&gt;In a future blog I&#039;ll also show an example of an RPC (Remote Procedure Call) service. Jaxer can also easily consume RESTful services server-side, using e.g. Jaxer.Web.get(...), Jaxer.Web.post(...), Jaxer.Web.put(...), Jaxer.Web.del(...), and Jaxer.Web.head(...) &amp;mdash; note that the DELETE action is not invoked via delete(...) because &quot;delete&quot; is a reserved identifier in JavaScript. &lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;Jaxer, the Ajax server, can do a lot more than &quot;just&quot; serve pages and handle callbacks (function calls from your browser back to Jaxer). With Jaxer 1.0, you can easily create a variety of web services: RESTful, RPC-based, and almost anything else you can imagine. Hooks are already in place for a generic web service and for automatic RPC-based services. Here I&#039;ll demonstrate a simple RESTful service based on the generic web service hook.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;You&#039;ll need &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot;&gt;the latest Jaxer&lt;/a&gt; (currently release 1.0) and the local_jaxer/conf folder contents that ship with it. If you&#039;ve upgraded from a previous version of Jaxer or Aptana Studio (which has Jaxer built in) take a look at the Guide page for instructions on &lt;a href=&quot;http://www.aptana.com/jaxer/guide/develop_basics.html#jaxerConf&quot;&gt;updating your local_jaxer configuration to 1.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;div style=&quot;border: 1px solid #33cc33; padding:4px;&quot;&gt;Here&#039;s a synopsis of all it takes to create a service (RESTful or otherwise):
&lt;ol&gt;
&lt;li&gt;create a folder called &quot;jaxer-service&quot;&lt;/li&gt;
&lt;li&gt;put your code file in that folder (or anywhere under that folder if you need more hierarchy)&lt;/li&gt;
&lt;/ol&gt;
Your code is automatically loaded and executed whenever someone calls it. So now let&#039;s see how that works.
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;To offer a service through Jaxer, rather than a page, you&#039;ll need to put your code where the web server + Jaxer will recognize it as a service. By default, that means somewhere in your docroot where the path to it will contain &quot;jaxer-service&quot; or &quot;jaxer-rpc&quot;. In a Studio project, create a folder with one of those names, and put your code in that folder or in a subfolder. For this example, I&#039;ve created a very simple folder structure, one folder with two files:&lt;br&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/REST_folder_structure_1.png&quot;&gt;&lt;br&gt;
This does two things: identifies the JavaScript code to Jaxer as a service, and prevents direct serving of your JavaScript file to a browser.
&lt;/p&gt;

&lt;p&gt;The service itself is just a JavaScript file that gets loaded (from disk or from cache) and executed every time the service is called. Your code has full access to the information in the request, and needs to set the response as you wish. Here I created a service that simply shows you much of the data available:
&lt;div style=&quot;font-weight: bold&quot;&gt;tests.js:&lt;/b&gt;&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;// pretty-print an object&#039;s properties:
function printObj(obj, indent)
{
	indent = indent || &#039;&#039;;
	var lines = [];
	for (var p in obj)
	{
		if (typeof obj[p] == &quot;function&quot;) continue;
		lines.push(indent + p + &quot;: &quot; + obj[p]);
	}
	return lines.join(&#039;\n&#039;);
}

// in this sample, the HTTP status code to return is passed in the request:
var statusCodeToReturn = Jaxer.request.data.statusCode;

// set the response contents to reflect the request information available:
Jaxer.response.setContents(
	printObj({
		&#039;action (method)&#039;: &#039;\n\t&#039; + Jaxer.request.action, 
		&#039;resource&#039;: &#039;\n\t&#039; + Jaxer.request.parsedUrl.pathParts.slice(1).join(&quot;/&quot;),
		&#039;request headers&#039;: &#039;\n&#039; + printObj(Jaxer.request.headers, &#039;\t&#039;),
		&#039;request body&#039;: &#039;\n\t&#039; + Jaxer.request.body,
		&#039;data&#039;: &#039;\n&#039; + printObj(Jaxer.request.data, &#039;\t&#039;), 
		&#039;request&#039;: &#039;\n&#039; + printObj(Jaxer.request, &#039;\t&#039;),
		&#039;environment variables&#039;: &#039;\n&#039; + printObj(Jaxer.request.env, &#039;\t&#039;)
	}), 
	statusCodeToReturn);

// the Content-Type can be anything appropriate for your service:
Jaxer.response.headers[&#039;Content-Type&#039;] = &#039;text/plain&#039;;&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;The service itself is done. (Of course you can now build an entire services layer, loading other files with Jaxer.load(...).) Now how do we call it? If e.g. the jaxer-service folder is directly under your docroot, just send a request to &lt;b&gt;/jaxer-service/tests&lt;/b&gt; (and you can append whatever extra path or query items to this path). &lt;/p&gt;

&lt;p&gt;How does this work? Jaxer ships with two default dispatchers, both in the extensions folder of the framework: serviceDispatcher.js and rpcDispatcher.js. The first one is what we&#039;ll use here (implicitly): it handles requests of the form /path/to/jaxer-service/path/to/myservice/any/additional/data that have jaxer-service in their path, and tries to find the corresponding file on disk. So it looks in your document root for /path.js, then for /path/to.js, then for /path/to/jaxer-service.js, and so on. In our case it will find /path/to/jaxer-service/path/to/myservice.js (or rather /jaxer-service/tests.js) and load it. How does the dispatcher get invoked? That&#039;s set in your configApps.js file, or in one of your other configApps-like peer files. By default Jaxer ships with services.configApps.js and that adds an app entry to Jaxer.Config.apps which knows to look for &quot;jaxer-service&quot; in the path and call Jaxer.Extensions.ServiceDispatcher.findFile(...); if it succeeds, the app entry has a &quot;handler&quot; property that returns the path to the file, which Jaxer then loads and executes. Note that this is all handled for you by the default configuration: all you have to do is follow the folder naming conventions. Of course, you can now modify this to suit your needs.&lt;/p&gt;

&lt;p&gt;To test this service, I created a simple front-end page called index.html. The source is shown below. Here&#039;s what it looks like, including the output from the service:
&lt;br&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/REST_UI_0.png&quot;&gt;&lt;br&gt;
You can change the method, see which ones support having a body and which do not, etc. Note that the calls are made using your browser&#039;s XHR (XMLHttpRequest) capabilities, wrapped in this simple example by the Jaxer client-side framework for convenience. &lt;/p&gt;

&lt;p&gt;Note: if you&#039;re trying the above in Aptana Studio, it&#039;ll work out of the box. If you&#039;re trying it with the standalone Jaxer, remove the leading &quot;/&quot; in the URL of the service: use &quot;jaxer-service/tests&quot; instead. That&#039;s because Studio needs to do some &quot;magic&quot; remapping between the effective document root and the filesystem.&lt;/p&gt;

&lt;p&gt;Here&#039;s the source for the front-end page:
&lt;div style=&quot;font-weight: bold&quot;&gt;index.html:&lt;/b&gt;&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;RESTful Jaxer&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;RESTful Jaxer&lt;/h1&gt;
		&lt;script runat=&quot;server&quot;&gt;//Nothing - just embeds the Jaxer client framework&lt;/script&gt;
		&lt;h3&gt;What to send:&lt;/h3&gt;
		&lt;form&gt;
		&lt;table&gt;
		&lt;tr&gt;&lt;td&gt;url:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;url&quot; value=&quot;/jaxer-service/tests&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;query params:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;queryParams&quot; value=&quot;a=12&amp;b=banana&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;HTTP action (method):&lt;/td&gt;
			&lt;td&gt;
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;GET&quot; checked=&quot;true&quot;&gt;GET 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;POST&quot;&gt;POST 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;PUT&quot;&gt;PUT 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;DELETE&quot;&gt;DELETE 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;HEAD&quot;&gt;HEAD 
				&lt;input type=&quot;radio&quot; name=&quot;httpAction&quot; value=&quot;OPTIONS&quot;&gt;OPTIONS 
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;content type:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;contentType&quot; value=&quot;application/x-www-form-urlencoded&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;request body:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;body&quot; value=&quot;c=42&amp;d=plum&quot; size=30&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;return code:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;statusCode&quot; value=&quot;200&quot; size=5&gt; (the response code Jaxer should return)
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;/table&gt;
		&lt;/form&gt;
		&lt;tr&gt;&lt;td colspan=2&gt;&lt;input type=&quot;button&quot; value=&quot;send&quot; onclick=&quot;send()&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
		&lt;hr&gt;
		&lt;h3&gt;Response:&lt;/h3&gt;
		&lt;pre id=&quot;result&quot; style=&quot;margin: 0pt&quot;&gt;&lt;/pre&gt;
		&lt;script&gt;
			function $(id) { return document.getElementById(id); }
			function $$(id) { return $(id).value; }
			function getRadio(form, name)
			{
				var elts = form.elements[name];
				for (var i=0; i&lt;elts.length; i++)
				{
					if (elts[i].checked) return elts[i].value;
				}
			}
			function send()
			{
				var result = Jaxer.XHR.send($$(&#039;body&#039;), 
				{
					url: $$(&#039;url&#039;) + &#039;?&#039; + $$(&#039;queryParams&#039;) + &quot;&amp;statusCode=&quot; + $$(&#039;statusCode&#039;),
					method: getRadio(document.forms[0], &#039;httpAction&#039;),
					cacheBuster: false,
					async: false,
					contentType: $$(&#039;contentType&#039;)
				});
				$(&#039;result&#039;).innerHTML = result;
			}
		&lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;&lt;/textarea&gt;&lt;/p&gt;


&lt;p&gt;To summarize, all we needed to do to create the service was to create a JavaScript file somewhere in the document root where its path would contain &quot;jaxer-service&quot;. The file will be loaded and executed whenever a request is received for that path (without the &quot;.js&quot; extension). You can add other special paths by adding them to your web server configuration &amp;mdash; see the *.httpd.conf files that ship by default with the standalone Jaxer, and to configApps.js and its peers. &lt;/p&gt;

&lt;p&gt;In a future blog I&#039;ll also show an example of an RPC (Remote Procedure Call) service. Jaxer can also easily consume RESTful services server-side, using e.g. Jaxer.Web.get(...), Jaxer.Web.post(...), Jaxer.Web.put(...), Jaxer.Web.del(...), and Jaxer.Web.head(...) &amp;mdash; note that the DELETE action is not invoked via delete(...) because &quot;delete&quot; is a reserved identifier in JavaScript. &lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Wed, 29 Oct 2008 10:14:37 -0500</pubDate>
 <dc:creator>uri</dc:creator>
 <guid isPermaLink="false">494 at http://aptana.com</guid>
</item>
<item>
 <title>YUI 2.6 now available for Aptana Studio</title>
 <link>http://aptana.com/blog/lorihc/yui2.6_released</link>
 <description>&lt;p&gt;
The Yahoo! User Interface Library, better known as YUI, version 2.6.0 was released earlier this month, and is now supported by Aptana Studio. YUI 2.6.0 includes numerous fixes, enhancements, and optimizations; introduces a new Carousel Control; breaks the Paginator Control out from DataTable; and makes final eight components that were previously designated beta. &lt;!--break--&gt;&lt;img src=&quot;http://www.aptana.com/system/files/images/yui_samples.png&quot; alt=&quot;Ext JS&quot; align=&quot;right&quot; style=&quot;margin: 4px 8px&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
In addition, YUI 2.6.0 also includes
a huge number of functional examples&amp;#8212;all of which are available, along with code assist, code completion, built-in API documentation, and more, when you install the YUI 2.6.0 plugin for Aptana Studio.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;To get the YUI 2.6.0 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;First, if you do not have it already, get &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt;.  It&#039;s free, open source software.&lt;/li&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Window &amp;gt; Show  View &amp;gt; Other... &amp;gt; Aptana Standard Views &amp;gt; Plugins Manager.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Yahoo! User Interface (YUI) 2.6.0 and click the green + icon ( &lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin_button.png&quot; alt=&quot;install plugin&quot; width=&quot;14&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt; ) to install.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the available &amp;quot;Aptana Support for YUI&amp;quot; plugins. Select &lt;strong&gt;Aptana Support for YUI 2.6.0.00002&lt;/strong&gt; and click Next.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the YUI 2.6.0 plugin. Click Yes when you&#039;re prompted to restart.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;To get started using YUI 2.6.0 in Aptana Studio, do one of the following:
&lt;/strong&gt;
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Click the New Project button ( &lt;img src=&quot;http://www.aptana.com/system/files/images/new_project_button_0.png&quot; alt=&quot;new project button&quot; width=&quot;15&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt;) on the toolbar.
&lt;ol&gt;
  &lt;li&gt;Choose Default Web Project in the dialog that appears and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/default_web_project_clip_0.png&quot; width=&quot;359&quot; height=&quot;291&quot; style=&quot;margin: 4px 0&quot;/&gt;  &lt;/li&gt;
  &lt;li&gt;Give your project a name and click Next.&lt;/li&gt;
  &lt;li&gt;Check the Yahoo! User Interface (YUI) 2.6 box and continue clicking Next until you see a Finish button.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Expand the YUI 2.6 Samples node in the Samples view, right-click on one of the folders, and choose Import sample as project.&lt;br /&gt;
  All of the samples for that category, as well as the library  and asset files they depend on, will appear in your project. For example, if you right-click on &lt;strong&gt;carousel&lt;/strong&gt;, you&#039;ll get a sample file that shows how to use a selection spotlight with the Carousel control, one that shows how to use a circular Carousel control, one that demonstrates partially revealing previous and next items in a Carousel, and so on.&lt;/li&gt;
&lt;/ul&gt;
</description>
 <content:encoded>&lt;p&gt;
The Yahoo! User Interface Library, better known as YUI, version 2.6.0 was released earlier this month, and is now supported by Aptana Studio. YUI 2.6.0 includes numerous fixes, enhancements, and optimizations; introduces a new Carousel Control; breaks the Paginator Control out from DataTable; and makes final eight components that were previously designated beta. &lt;!--break--&gt;&lt;img src=&quot;http://www.aptana.com/system/files/images/yui_samples.png&quot; alt=&quot;Ext JS&quot; align=&quot;right&quot; style=&quot;margin: 4px 8px&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
In addition, YUI 2.6.0 also includes
a huge number of functional examples&amp;#8212;all of which are available, along with code assist, code completion, built-in API documentation, and more, when you install the YUI 2.6.0 plugin for Aptana Studio.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;To get the YUI 2.6.0 plugin for Aptana Studio:&lt;/strong&gt;
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;First, if you do not have it already, get &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt;.  It&#039;s free, open source software.&lt;/li&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Window &amp;gt; Show  View &amp;gt; Other... &amp;gt; Aptana Standard Views &amp;gt; Plugins Manager.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Yahoo! User Interface (YUI) 2.6.0 and click the green + icon ( &lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin_button.png&quot; alt=&quot;install plugin&quot; width=&quot;14&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt; ) to install.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the available &amp;quot;Aptana Support for YUI&amp;quot; plugins. Select &lt;strong&gt;Aptana Support for YUI 2.6.0.00002&lt;/strong&gt; and click Next.&lt;br /&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the YUI 2.6.0 plugin. Click Yes when you&#039;re prompted to restart.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;To get started using YUI 2.6.0 in Aptana Studio, do one of the following:
&lt;/strong&gt;
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Click the New Project button ( &lt;img src=&quot;http://www.aptana.com/system/files/images/new_project_button_0.png&quot; alt=&quot;new project button&quot; width=&quot;15&quot; height=&quot;14&quot; align=&quot;absmiddle&quot; /&gt;) on the toolbar.
&lt;ol&gt;
  &lt;li&gt;Choose Default Web Project in the dialog that appears and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/default_web_project_clip_0.png&quot; width=&quot;359&quot; height=&quot;291&quot; style=&quot;margin: 4px 0&quot;/&gt;  &lt;/li&gt;
  &lt;li&gt;Give your project a name and click Next.&lt;/li&gt;
  &lt;li&gt;Check the Yahoo! User Interface (YUI) 2.6 box and continue clicking Next until you see a Finish button.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Expand the YUI 2.6 Samples node in the Samples view, right-click on one of the folders, and choose Import sample as project.&lt;br /&gt;
  All of the samples for that category, as well as the library  and asset files they depend on, will appear in your project. For example, if you right-click on &lt;strong&gt;carousel&lt;/strong&gt;, you&#039;ll get a sample file that shows how to use a selection spotlight with the Carousel control, one that shows how to use a circular Carousel control, one that demonstrates partially revealing previous and next items in a Carousel, and so on.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Thu, 23 Oct 2008 10:55:53 -0500</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">513 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Cloud 1.0 Released!  Studio Updated to 1.2</title>
 <link>http://aptana.com/blog/pcolton/cloud10_and_studio12_released</link>
 <description>&lt;p&gt;I&#039;m pleased to announce the release of a major new online service: Aptana Cloud.&lt;/p&gt;
 
&lt;p&gt;Aptana Cloud is the ultimate in ease and efficiency — a suite of online services integrated right into Aptana Studio 1.2 that puts the power of cloud computing to work for you.  Cloud&#039;s integrated production, staging, source control, &lt;!--break--&gt; application monitoring, threshold and key event notifications systems, stats, logs, server tail views, team management, and tons of other features, streamlines your deployment and development processes and costs far less than doing it yourself. &lt;/p&gt;
 
&lt;p&gt;Users who experienced Aptana Cloud through this summer&#039;s early access program have remarked as to how incredibly easy Aptana has made deploying, scaling, developing, and collaborating on hosted sites and applications.  It&#039;s radically more efficient than anything you&#039;ve seen or used before (and you can still use SSH and SFTP too).  Aptana Cloud currently supports both Jaxer deployments as well as PHP deployments. The short screencast below gives you a good sense of the ease, and you can learn more at &lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/cloud&quot;&gt;http://www.aptana.com/cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Aptana Studio 1.2 also includes new capabilities beyond Aptana Cloud including faster performance, database explorer, bug fixes and UI enhancements all around.&lt;/p&gt;

&lt;center&gt;
&lt;table border=&quot;0&quot; style=&quot;width: 400px&quot;&gt;&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/cloud?video&quot;&gt;&lt;img width=&quot;152&quot; height=&quot;107&quot; src=&quot;http://www.aptana.com/images/cloud_video_play.png&quot;&gt;&lt;br&gt;Watch Cloud Screencast&lt;/a&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/studio?video&quot;&gt;&lt;img src=&quot;http://aptana.com/themes/aptana/stylesheets/screencasts/studio.jpg&quot;&gt;&lt;br&gt;Watch Studio Screencast&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/center&gt;


</description>
 <content:encoded>&lt;p&gt;I&#039;m pleased to announce the release of a major new online service: Aptana Cloud.&lt;/p&gt;
 
&lt;p&gt;Aptana Cloud is the ultimate in ease and efficiency — a suite of online services integrated right into Aptana Studio 1.2 that puts the power of cloud computing to work for you.  Cloud&#039;s integrated production, staging, source control, &lt;!--break--&gt; application monitoring, threshold and key event notifications systems, stats, logs, server tail views, team management, and tons of other features, streamlines your deployment and development processes and costs far less than doing it yourself. &lt;/p&gt;
 
&lt;p&gt;Users who experienced Aptana Cloud through this summer&#039;s early access program have remarked as to how incredibly easy Aptana has made deploying, scaling, developing, and collaborating on hosted sites and applications.  It&#039;s radically more efficient than anything you&#039;ve seen or used before (and you can still use SSH and SFTP too).  Aptana Cloud currently supports both Jaxer deployments as well as PHP deployments. The short screencast below gives you a good sense of the ease, and you can learn more at &lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/cloud&quot;&gt;http://www.aptana.com/cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Aptana Studio 1.2 also includes new capabilities beyond Aptana Cloud including faster performance, database explorer, bug fixes and UI enhancements all around.&lt;/p&gt;

&lt;center&gt;
&lt;table border=&quot;0&quot; style=&quot;width: 400px&quot;&gt;&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/cloud?video&quot;&gt;&lt;img width=&quot;152&quot; height=&quot;107&quot; src=&quot;http://www.aptana.com/images/cloud_video_play.png&quot;&gt;&lt;br&gt;Watch Cloud Screencast&lt;/a&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;a target=&quot;_window&quot; href=&quot;http://www.aptana.com/studio?video&quot;&gt;&lt;img src=&quot;http://aptana.com/themes/aptana/stylesheets/screencasts/studio.jpg&quot;&gt;&lt;br&gt;Watch Studio Screencast&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/center&gt;


</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/93">screencast</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 21 Oct 2008 12:53:08 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">508 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer 1.0 Release Candidate now available.</title>
 <link>http://aptana.com/blog/khakman/jaxer10rc</link>
 <description>Aptana Jaxer, the open-source Ajax server that embeds the Mozilla browser engine server-side, is nearing its first release.  There&#039;s been lots of work on Jaxer with significant community feedback and ideas coming from the Jaxer betas over the summer.  This latest (and probably last before 1.0) release candidate packs in some great performance &lt;!--break--&gt; enhancements like native JSON as well as a brand new built-in capability for easily dispatching RESTful and RPC service requests.  And like before we&#039;re looking for feedback before we finalize and ship 1.0.  So please grab a copy of the latest...

&lt;p&gt;If you&#039;ve not yet tried &lt;a href=&quot;http://www.aptana.com/jaxer&quot;&gt;Jaxer&lt;/a&gt;, now is a great time.  &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt; provides extensive integrated tooling and samples for Jaxer, and &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt; now lets you deploy instantly to Jaxer servers running on elastic cloud computing infrastructure.  Of course you can also download Jaxer and put it on your server for free too.  It&#039;s free and open source.&lt;/p&gt;


&lt;b&gt;&lt;img src=&quot;http://www.aptana.com/images/jaxer_logo_whitebg.jpg&quot; width=204 height=234 align=&quot;right&quot; alt=&quot;Aptana Jaxer Logo&quot;&gt;If you are already using Jaxer, you&#039;ll love all the enhancements.&lt;/b&gt;

&lt;p&gt;Here a synopsis of all the new features and improvements that have gone into this latest release candidate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;	Jaxer.Sandbox: HTTP-level control; support readyState, toHTML, waitForCompletion 
&lt;li&gt;	Built-in, extensible dispatching for RESTful and RPC service requests 
&lt;li&gt;	Fast, native JSON support 
&lt;li&gt;	Improved APIs for HTTP Request and Response 
&lt;li&gt;	More flexible handling of application configuration 
&lt;li&gt;	Many bug fixes, smaller improvements, and cleanups
&lt;/ul&gt;

&lt;p&gt;
More specifics on these below...
&lt;/p&gt;
&lt;b&gt;Sandbox enhancements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;return headers and other properties about the request and the response
    &lt;li&gt;new method: waitForCompletion(maxMillis)
    &lt;li&gt;new method: toHTML
    &lt;li&gt;query the readyState
&lt;/ul&gt;
&lt;b&gt;Better HTTP request handling&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;More control over how to receive the body, useful for binary data or long posts
    &lt;li&gt;Automatic handling of the body based on Content-Type
    &lt;li&gt;Implement RFC-compliant parsing of the URL
    &lt;li&gt;Offer SSL certificate error handling on requests
&lt;/ul&gt;
&lt;b&gt;Better app management&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Automatically load configApps-like files
    &lt;li&gt;Cleaned up the default local version of configApps.js
&lt;/ul&gt;
&lt;b&gt;Support for web services&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Added default sample-level dispatchers for web service requests and RPC requests
    &lt;li&gt;Allow specifying a handler explicitly for your app
    &lt;li&gt;Support for RESTful calls (including GET, POST, PUT, DELETE, OPTIONS, HEAD)
    &lt;li&gt;Default Apache and Studio configs route URLs containing jaxer-service and jaxer-rpc to Jaxer
&lt;/ul&gt;
&lt;b&gt;JSON improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Use native JSON when available
    &lt;li&gt;Use &quot;standard&quot; JSON serialization by default
    &lt;li&gt;More explicit error message when cycles encountered
&lt;/ul&gt;
&lt;b&gt;DB improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;MySQL: Allow specifying a socket when defining connection parameters
    &lt;li&gt;MySQL: Correct handling of booleans
    &lt;li&gt;Resultset: cleaned up the data structure to make it more efficient and easily serializable
&lt;/ul&gt;
&lt;b&gt;Better HTTP Response handling&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Allow setContents to take a DOM node, a document, or an object, and &quot;do the right thing&quot;
&lt;/ul&gt;
&lt;b&gt;Misc improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Much faster start/stop/restart and more robust Jaxer process management
&lt;/ul&gt;
</description>
 <content:encoded>Aptana Jaxer, the open-source Ajax server that embeds the Mozilla browser engine server-side, is nearing its first release.  There&#039;s been lots of work on Jaxer with significant community feedback and ideas coming from the Jaxer betas over the summer.  This latest (and probably last before 1.0) release candidate packs in some great performance &lt;!--break--&gt; enhancements like native JSON as well as a brand new built-in capability for easily dispatching RESTful and RPC service requests.  And like before we&#039;re looking for feedback before we finalize and ship 1.0.  So please grab a copy of the latest...

&lt;p&gt;If you&#039;ve not yet tried &lt;a href=&quot;http://www.aptana.com/jaxer&quot;&gt;Jaxer&lt;/a&gt;, now is a great time.  &lt;a href=&quot;http://www.aptana.com/studio&quot; target=&quot;_window&quot;&gt;Aptana Studio&lt;/a&gt; provides extensive integrated tooling and samples for Jaxer, and &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_window&quot;&gt;Aptana Cloud&lt;/a&gt; now lets you deploy instantly to Jaxer servers running on elastic cloud computing infrastructure.  Of course you can also download Jaxer and put it on your server for free too.  It&#039;s free and open source.&lt;/p&gt;


&lt;b&gt;&lt;img src=&quot;http://www.aptana.com/images/jaxer_logo_whitebg.jpg&quot; width=204 height=234 align=&quot;right&quot; alt=&quot;Aptana Jaxer Logo&quot;&gt;If you are already using Jaxer, you&#039;ll love all the enhancements.&lt;/b&gt;

&lt;p&gt;Here a synopsis of all the new features and improvements that have gone into this latest release candidate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;	Jaxer.Sandbox: HTTP-level control; support readyState, toHTML, waitForCompletion 
&lt;li&gt;	Built-in, extensible dispatching for RESTful and RPC service requests 
&lt;li&gt;	Fast, native JSON support 
&lt;li&gt;	Improved APIs for HTTP Request and Response 
&lt;li&gt;	More flexible handling of application configuration 
&lt;li&gt;	Many bug fixes, smaller improvements, and cleanups
&lt;/ul&gt;

&lt;p&gt;
More specifics on these below...
&lt;/p&gt;
&lt;b&gt;Sandbox enhancements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;return headers and other properties about the request and the response
    &lt;li&gt;new method: waitForCompletion(maxMillis)
    &lt;li&gt;new method: toHTML
    &lt;li&gt;query the readyState
&lt;/ul&gt;
&lt;b&gt;Better HTTP request handling&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;More control over how to receive the body, useful for binary data or long posts
    &lt;li&gt;Automatic handling of the body based on Content-Type
    &lt;li&gt;Implement RFC-compliant parsing of the URL
    &lt;li&gt;Offer SSL certificate error handling on requests
&lt;/ul&gt;
&lt;b&gt;Better app management&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Automatically load configApps-like files
    &lt;li&gt;Cleaned up the default local version of configApps.js
&lt;/ul&gt;
&lt;b&gt;Support for web services&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Added default sample-level dispatchers for web service requests and RPC requests
    &lt;li&gt;Allow specifying a handler explicitly for your app
    &lt;li&gt;Support for RESTful calls (including GET, POST, PUT, DELETE, OPTIONS, HEAD)
    &lt;li&gt;Default Apache and Studio configs route URLs containing jaxer-service and jaxer-rpc to Jaxer
&lt;/ul&gt;
&lt;b&gt;JSON improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Use native JSON when available
    &lt;li&gt;Use &quot;standard&quot; JSON serialization by default
    &lt;li&gt;More explicit error message when cycles encountered
&lt;/ul&gt;
&lt;b&gt;DB improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;MySQL: Allow specifying a socket when defining connection parameters
    &lt;li&gt;MySQL: Correct handling of booleans
    &lt;li&gt;Resultset: cleaned up the data structure to make it more efficient and easily serializable
&lt;/ul&gt;
&lt;b&gt;Better HTTP Response handling&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Allow setContents to take a DOM node, a document, or an object, and &quot;do the right thing&quot;
&lt;/ul&gt;
&lt;b&gt;Misc improvements&lt;/b&gt;
&lt;ul&gt;
    &lt;li&gt;Much faster start/stop/restart and more robust Jaxer process management
&lt;/ul&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Tue, 07 Oct 2008 16:46:54 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">492 at http://aptana.com</guid>
</item>
<item>
 <title>Dojo 1.2 is here!</title>
 <link>http://aptana.com/blog/lorihc/dojo1.2_in_aptana_studio</link>
 <description>Dojo 1.2 was just released over at &lt;a href=&quot;http://tinyurl.com/3nz6cr&quot; target=&quot;_blank&quot;&gt;www.dojotoolkit.org&lt;/a&gt;, and it&#039;s also available in Aptana Studio! 
&lt;!--break--&gt;
&lt;img src=&quot;http://sitepen.com/images/labsDojoToolkitTitle.png&quot; align=right /&gt;The Dojo 1.2 plugin for Aptana Studio provides code completion; code assist for Dojo Core, Dijit, and DojoX; sample code; project wizards; and more to support your Dojo development efforts.
&lt;br /&gt;&lt;br /&gt;
The Dojo team is calling this their &quot;sliced bread&quot; release because each change or enhancement felt like the best thing since sliced bread. See for yourself what they&#039;ve been up to in the &lt;a href=&quot;http://dojotoolkit.org/book/dojo-1-2-release-notes&quot;&gt;release notes&lt;/a&gt;, and then get started using Dojo 1.2 in Studio!


&lt;p style=&quot;clear:both&quot;&gt;
  &lt;strong&gt;To get the Dojo 1.2 plugin for Aptana Studio:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Window &gt; Show View &gt; Other... &gt; Aptana Standard Views &gt; Plugins Manager. &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Dojo version 1.2.0 and click the green +icon to install.&lt;br /&gt;
  &lt;img src=&quot;http://www.aptana.com/system/files/images/install_dojo1.2.png&quot; alt=&quot;Install Dojo 1.2&quot; width=&quot;692&quot; height=&quot;153&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the five Dojo plugins. Select &lt;strong&gt;Aptana Support for Dojo Toolkit 1.2.0.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/site_providing_dojo.png&quot; alt=&quot;Select Dojo 1.2 from the tree&quot; width=&quot;600&quot; height=&quot;523&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the Dojo 1.2 plugin. Click Yes when you&#039;re prompted to restart, and the features of the new plugin will be available in Studio.&lt;/li&gt;
&lt;/ol&gt;</description>
 <content:encoded>Dojo 1.2 was just released over at &lt;a href=&quot;http://tinyurl.com/3nz6cr&quot; target=&quot;_blank&quot;&gt;www.dojotoolkit.org&lt;/a&gt;, and it&#039;s also available in Aptana Studio! 
&lt;!--break--&gt;
&lt;img src=&quot;http://sitepen.com/images/labsDojoToolkitTitle.png&quot; align=right /&gt;The Dojo 1.2 plugin for Aptana Studio provides code completion; code assist for Dojo Core, Dijit, and DojoX; sample code; project wizards; and more to support your Dojo development efforts.
&lt;br /&gt;&lt;br /&gt;
The Dojo team is calling this their &quot;sliced bread&quot; release because each change or enhancement felt like the best thing since sliced bread. See for yourself what they&#039;ve been up to in the &lt;a href=&quot;http://dojotoolkit.org/book/dojo-1-2-release-notes&quot;&gt;release notes&lt;/a&gt;, and then get started using Dojo 1.2 in Studio!


&lt;p style=&quot;clear:both&quot;&gt;
  &lt;strong&gt;To get the Dojo 1.2 plugin for Aptana Studio:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager by choosing Window &gt; Show View &gt; Other... &gt; Aptana Standard Views &gt; Plugins Manager. &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Dojo version 1.2.0 and click the green +icon to install.&lt;br /&gt;
  &lt;img src=&quot;http://www.aptana.com/system/files/images/install_dojo1.2.png&quot; alt=&quot;Install Dojo 1.2&quot; width=&quot;692&quot; height=&quot;153&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the five Dojo plugins. Select &lt;strong&gt;Aptana Support for Dojo Toolkit 1.2.0.00001&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/site_providing_dojo.png&quot; alt=&quot;Select Dojo 1.2 from the tree&quot; width=&quot;600&quot; height=&quot;523&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the Dojo 1.2 plugin. Click Yes when you&#039;re prompted to restart, and the features of the new plugin will be available in Studio.&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 07 Oct 2008 07:54:43 -0500</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">488 at http://aptana.com</guid>
</item>
<item>
 <title>Release Candidates of Aptana Studio, Jaxer, and Cloud Now Available</title>
 <link>http://aptana.com/blog/paul/oct2008_release_candidates</link>
 <description>&lt;p&gt;As of today you can &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;download or update&lt;/a&gt; to the latest release candidates of Aptana Studio, Jaxer and Cloud.  These are major releases for our company: we&#039;re updating Studio to a new version, we&#039;re releasing an incredible new service, Aptana Cloud, and we&#039;ve reached our 1.0 milestone of one of the world&#039;s most unique offerings, the first Ajax Server, Aptana Jaxer. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cloud 1.0 RC makes web app deployment and management almost too easy!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Aptana Cloud is a new service from Aptana that is completely integrated into Aptana Studio enabling you to more easily develop, deploy, and manage your web applications. With PHP, Apache, MySQL and Jaxer servers already running on top of an elastic computing infrastructure, Aptana Cloud is the fastest way to deploy and scale your sites and apps. Even before you go live, Cloud&#039;s hosted SVN, SFTP and staging servers combined with the remote file editing, database management, and Cloud configuration tools make site development and management a breeze.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_features&quot;&gt;see all the features&lt;/a&gt; or &lt;a href=&quot;http://www.aptana.com/cloud/?video&quot; target=&quot;_cvid&quot;&gt;watch this screencast&lt;/a&gt; to check out just how seamless Aptana has made deploying and scaling your apps in the &quot;Cloud&quot;.&lt;/p&gt;
&lt;p&gt;We wanted to push out a RC (Release Candidate) version prior to final release so that you could give it a try. It&#039;s absolutely free right now, so we&#039;d love for you to try it out. Let us know what you think. Let us know if we missed anything or if you&#039;d like to see something done differently. You can get started by &lt;a target=&quot;_dlupdate&quot; href=&quot;http://www.aptana.com/studio/download/1.2RC&quot;&gt;downloading Aptana Studio 1.2 RC&lt;/a&gt; (which comes bundled with Jaxer 1.0 RC as well as our Cloud RC support), or if you are an existing Studio user, follow &lt;a href=&quot;http://aptana.com/docs/index.php/Updating_to_Aptana_Studio_1.2RC&quot; target=&quot;_window&quot;&gt;these update instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Studio 1.2 RC adds new capabilities and improves upon many core features.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Enhancements include: Updated smart synchronization utility and a brand new set of visual database tools plus numerous bug fixes and UI enhancements with performance improvements throughout. A new Aptana ID system provides single-sign for the bug database (ASAP), Aptana Cloud, and soon the discussion forums and more. And there&#039;s a new &#039;My Aptana&#039; start page with quick links to your recent files and core features. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Jaxer 1.0 RC adds and refines more features for server-side JavaScript and Ajax.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Since Jaxer is the world&#039;s first Ajax server, this release candidate is a huge milestone. This next-to-final release of Jaxer has some great performance improvements that make it comparable to Ruby on Rails and PHP, plus includes new APIs for JSON and REST style data services.&lt;br /&gt;
If you are not yet familiar, Jaxer lets you use your JavaScript and Ajax skills server-side to create entire apps, or optimized presentation tiers that can complement other back-ends.  Aptana Studio 1.2 RC includes the Jaxer 1.0 RC.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;As of today you can &lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_window&quot;&gt;download or update&lt;/a&gt; to the latest release candidates of Aptana Studio, Jaxer and Cloud.  These are major releases for our company: we&#039;re updating Studio to a new version, we&#039;re releasing an incredible new service, Aptana Cloud, and we&#039;ve reached our 1.0 milestone of one of the world&#039;s most unique offerings, the first Ajax Server, Aptana Jaxer. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cloud 1.0 RC makes web app deployment and management almost too easy!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Aptana Cloud is a new service from Aptana that is completely integrated into Aptana Studio enabling you to more easily develop, deploy, and manage your web applications. With PHP, Apache, MySQL and Jaxer servers already running on top of an elastic computing infrastructure, Aptana Cloud is the fastest way to deploy and scale your sites and apps. Even before you go live, Cloud&#039;s hosted SVN, SFTP and staging servers combined with the remote file editing, database management, and Cloud configuration tools make site development and management a breeze.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_features&quot;&gt;see all the features&lt;/a&gt; or &lt;a href=&quot;http://www.aptana.com/cloud/?video&quot; target=&quot;_cvid&quot;&gt;watch this screencast&lt;/a&gt; to check out just how seamless Aptana has made deploying and scaling your apps in the &quot;Cloud&quot;.&lt;/p&gt;
&lt;p&gt;We wanted to push out a RC (Release Candidate) version prior to final release so that you could give it a try. It&#039;s absolutely free right now, so we&#039;d love for you to try it out. Let us know what you think. Let us know if we missed anything or if you&#039;d like to see something done differently. You can get started by &lt;a target=&quot;_dlupdate&quot; href=&quot;http://www.aptana.com/studio/download/1.2RC&quot;&gt;downloading Aptana Studio 1.2 RC&lt;/a&gt; (which comes bundled with Jaxer 1.0 RC as well as our Cloud RC support), or if you are an existing Studio user, follow &lt;a href=&quot;http://aptana.com/docs/index.php/Updating_to_Aptana_Studio_1.2RC&quot; target=&quot;_window&quot;&gt;these update instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Studio 1.2 RC adds new capabilities and improves upon many core features.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Enhancements include: Updated smart synchronization utility and a brand new set of visual database tools plus numerous bug fixes and UI enhancements with performance improvements throughout. A new Aptana ID system provides single-sign for the bug database (ASAP), Aptana Cloud, and soon the discussion forums and more. And there&#039;s a new &#039;My Aptana&#039; start page with quick links to your recent files and core features. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Jaxer 1.0 RC adds and refines more features for server-side JavaScript and Ajax.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Since Jaxer is the world&#039;s first Ajax server, this release candidate is a huge milestone. This next-to-final release of Jaxer has some great performance improvements that make it comparable to Ruby on Rails and PHP, plus includes new APIs for JSON and REST style data services.&lt;br /&gt;
If you are not yet familiar, Jaxer lets you use your JavaScript and Ajax skills server-side to create entire apps, or optimized presentation tiers that can complement other back-ends.  Aptana Studio 1.2 RC includes the Jaxer 1.0 RC.&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 06 Oct 2008 16:38:03 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">489 at http://aptana.com</guid>
</item>
<item>
 <title>First Jaxer Benchmarks</title>
 <link>http://aptana.com/jaxer/benchmarks</link>
 <description>&lt;p&gt;
As we get ready to release Jaxer 1.0, we put together a few simple benchmarks 
to see how it performs 
relative to a couple of other web platforms: PHP and Rails. &lt;img src=&quot;/system/files/jaxer_benchmarks0_individuals_2.png&quot; width=540 height=300 style=&quot;float:right; padding-left: 30px; padding: 10px;&quot;&gt; We wanted to answer a simple question: &lt;b&gt;how does Jaxer, with its server-side DOM and JavaScript, perform relative to these other popular alternatives?&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
This was not designed to be an all-encompassing shoot-out, or a detailed study of everything you might want to do in a web app. Instead, we took a few common tasks &amp;mdash; making database requests, using JSON, etc. &amp;mdash; and implemented them as you might expect in the three platforms. We made enough DB requests and JSON calls and so on to give us a reasonable number of milliseconds to measure. But we also wanted to make the repetitions representative of what you might find on somewhat intensive real-world page, so we&#039;re not making a million DB requests, just a hundred, for instance. And we included one benchmark of serving an almost-static page: the &quot;almost&quot; was to make sure we were measuring the time the platform took to really read through the page, in case it had dynamic content in it. (Otherwise, if the page were truly static, you could always arrange for the web server to serve it without involving the platform.)
&lt;br clear=left /&gt;
&lt;/p&gt;

&lt;p&gt;
The first chart shows how long each platform took to perform the task. For the &quot;static&quot; page, we measured the total time taken to serve the request, as measured by the external web client making the request (over the local network). For the other benchmarks, we measured the time taken to perform the 

specific task itself, excluding the overhead of setting up and tearing down the benchmark, 

&lt;img src=&quot;/system/files/jaxer_benchmarks0_combined_2.png&quot; height=400 width=365 style=&quot;float:right; padding-left: 30px; padding: 10px&quot;&gt;
serving the test page, etc. That allowed us to combine these tests and assess what an entire page would take to serve, if it had static content &lt;em&gt;and&lt;/em&gt; database requests &lt;em&gt;and&lt;/em&gt; some JSON manipulation and so on. Of course your mileage may vary: your app may have less DB requests, more JSON, less IO, whatever. But remember the question we&#039;re trying to answer: how does Jaxer perform relative to other accepted platforms for several common tasks? We believe these benchmarks answer that: &lt;b&gt;Jaxer performance is very much comparable to PHP and Rails&lt;/b&gt;. 
&lt;/p&gt;

&lt;p&gt;Of course, &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot;&gt;significant boosts to JavaScript performance&lt;/a&gt; are around the corner for Firefox  (see Brendan&#039;s &lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2008/09/tracemonkey_update.html&quot;&gt;TraceMonkey article&lt;/a&gt;). Since Jaxer is built on the same engine as Firefox, those same improvements will soon be in Jaxer too... With the imminent and massive improvements to JavaScript performance coming to the Mozilla engine.  
&lt;/p&gt;

&lt;p&gt;Now let&#039;s take a closer look at these tests below. All were run multiple times on a Macbook Pro (2.5 GHz Intel Core 2 Duo) with 4 GB of RAM.&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;style type=&quot;text/css&quot;&gt;.bmplatform { font-weight: bold; }&lt;/style&gt;
&lt;script language=&quot;javascript&quot; src=&quot;/themes/aptana/lib/sh/shBrushRuby.js&quot;&gt;&lt;/script&gt;

&lt;h3&gt;The &quot;Static&quot; Page&lt;/h3&gt;
&lt;p&gt;
We grabbed a copy of one of our blog pages (&lt;a href=&quot;http://www.aptana.com/node/467&quot;&gt;Aptana Acquires Pydev&lt;/a&gt;) and saved it locally. We turned it into a .php file with a smidgen of PHP in it; we threw in a short &amp;lt;script runat=&quot;server&quot;&amp;gt;...&amp;lt;script&amp;gt; for Jaxer; and created a simple view out of it for Rails. Jaxer was the slowest to serve this page, and not surprisingly: it needs to parse and create the entire DOM of the page to allow server-side manipulation. Still, under 20 ms is pretty good, and is usually dwarfed by weightier tasks such as DB queries.
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Loops&lt;/h3&gt;
&lt;p&gt;
To measure raw iteration speed we created some very simple loops with and without a bit of variable manipulation. This time Jaxer was far faster than PHP or Rails: at least for simple, common for loops, Mozilla&#039;s SpiderMonkey JavaScript engine is no slouch. 
&lt;table cellpadding=0 cellspacing=0&gt;
&lt;tr&gt;
&lt;td class=&quot;bmplatform&quot;&gt;PHP&lt;/td&gt;
&lt;td class=&quot;bmplatform&quot;&gt;Jaxer&lt;/td&gt;
&lt;td class=&quot;bmplatform&quot;&gt;Rails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	for($a = 0; $a &lt; 10000; ++$a)
	{
		// do nothing
	}

	for($a = 0; $a &lt; 10000; ++$a)
	{
		$b = $a;
	}

	for($a = 0; $a &lt; 10000; ++$a)
	{
		$b = $a;
		for($c = 0; $c &lt; 10; ++$c)
		{
			$d = $c;
		}
	}

	$a = 0;
	while($a &lt; 10000)
	{
		++$a;
	}
&lt;/textarea&gt;
&lt;/td&gt;

&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	for(var a = 0; a &lt; 10000; ++a)
	{
		// do nothing
	}
	
	for(var a = 0; a &lt; 10000; ++a)
	{
		var b = a;
	}
	
	for(var a = 0; a &lt; 10000; ++a)
	{
		var b = a;
		for(var c = 0; c &lt; 10; ++c)
		{
			var d = c;
		}
	}
	
	var a = 0;
	while(a &lt; 10000)
	{
		++a;
	}
&lt;/textarea&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      10000.times do |a|
        # do nothing        
      end
      10000.times do |a|
        b = a
      end
      10000.times do |a|
        b = a
        10.times do |c|
          d = c
        end
      end
      a = 0
      while a &lt; 10000
        a += 1
      end
&lt;/textarea&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;JSON&lt;/h3&gt;
&lt;p&gt;
Using JavaScript literals as a serialization format predates Ajax, and has become an incredibly prevalent cross-platform data format. We created a simple JSON structure and a more complex one, and measured a variety of encoding and decoding tasks. All three platforms now have native JSON support, so all three performed very well in this benchmark.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	$json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;;
	$json_data = array(
	  &#039;a&#039; =&gt; &#039;a&#039;,
	  &#039;b&#039; =&gt; array(1,2,3,4,5,6,7,8,9),
	  &#039;c&#039; =&gt; &#039;c&#039;,
	  &#039;d&#039; =&gt; array(
	    &#039;one&#039; =&gt; &#039;1&#039;,
	    &#039;two&#039; =&gt; &#039;2&#039;,
	    &#039;three&#039; =&gt; &#039;3&#039;
	  )
	);
	$complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		$decoded_a = json_decode($json_string,true);
		$decoded_b = json_decode($complex_json_string,true);
		json_encode($json_data);
		json_encode($decoded_b);
	}
	
	$output = &#039;&#039;;
	for($i = 0; $i &lt; 10; ++$i)
	{
		$decoded = json_decode($complex_json_string,true);
		foreach($decoded as $x =&gt; $item)
		{
			if($item[&#039;id&#039;] == &#039;0001&#039;)
			{
				$decoded[$x][&#039;type&#039;] = &#039;fancy donut&#039;;
				break;
			}
		}
		$output .= json_encode($decoded);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;
	
	var json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;;
	var json_data = {
		a: &#039;a&#039;,
		b: [1,2,3,4,5,6,7,8,9],
		c: &#039;c&#039;,
		d: {
			one: &#039;1&#039;,
			two: &#039;2&#039;,
			three: &#039;3&#039;
		}
	};
	var complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;
	
	for(var i = 0; i &lt; 10; ++i)
	{
		var decoded_a = Jaxer.Serialization.fromJSONString(json_string);
		var decoded_b = Jaxer.Serialization.fromJSONString(complex_json_string);
		Jaxer.Serialization.toJSONString(decoded_a);
		Jaxer.Serialization.toJSONString(decoded_b);
	}
	
	var output = &#039;&#039;;
	for(var i = 0; i &lt; 10; ++i)
	{
		var decoded = Jaxer.Serialization.fromJSONString(complex_json_string);
		for(var x = 0; x &lt; decoded.length; ++x)
		{
			if(decoded[x][&#039;id&#039;] == &#039;0001&#039;)
			{
				decoded[x][&#039;type&#039;] = &#039;fancy donut&#039;;
			}
		}
		output += Jaxer.Serialization.toJSONString(decoded);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;
      json_data = {
        :a =&gt; &#039;a&#039;,
        :b =&gt; [1,2,3,4,5,6,7,8,9],
        :c =&gt; &#039;c&#039;,
        :d =&gt; {
          :one =&gt; &#039;1&#039;,
          :two =&gt; &#039;2&#039;,
          :three =&gt; &#039;3&#039;
        }
      }
      complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;

      10.times do
        decoded_a = JSON.parse(json_string)
        decoded_b = JSON.parse(complex_json_string)
        decoded_a.to_json
        decoded_b.to_json
      end
      
      10.times do
        decoded = JSON.parse(complex_json_string)
        decoded.each_with_index do |item,x|
          if(item[&#039;id&#039;] == &#039;0001&#039;)
            decoded[x][&#039;type&#039;] = &#039;fancy donut&#039;
          end
        end
        output += decoded.to_json
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;IO&lt;/h3&gt;
&lt;p&gt;
To measure typical file I/O performance, we created a 1 KB string and wrote it to a file, then appended a 100 KB string, and read the whole thing back, and repeated it a few times. Jaxer came out somewhat slower than the other platforms: some of this may be due to the extra conversions between JavaScript&#039;s native utf8 encoding and the filesystem, but we&#039;ll need to go back and dig deeper.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	//write 1kb
	for($i = 0; $i &lt; 5; ++$i)
	{
		$handle = fopen($path.&#039;/test_&#039;.$i.&#039;.txt&#039;,&#039;w&#039;);
		fwrite($handle,$chars);
		fclose($handle);
	}
	
	//append 100kb
	for($i = 0; $i &lt; 5; ++$i)
	{
		$handle = fopen($path.&#039;/test_&#039;.$i.&#039;.txt&#039;,&#039;a&#039;);
		fwrite($handle,$chars_repeated);
		fclose($handle);

	}

	//read them all back multiple times
	for($i = 0; $i &lt; 5; ++$i)
	{
		$contents = file_get_contents($path.&#039;/test_&#039;.$i.&#039;.txt&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	//write 1kb
	for (var i = 0; i &lt; 5; ++i)
	{
		Jaxer.File.write(path + &#039;/test_&#039; + i + &#039;.txt&#039;, chars);
	}

	//append 100kb
	for (var i = 0; i &lt; 5; ++i)
	{
		Jaxer.File.append(path + &#039;/test_&#039; + i + &#039;.txt&#039;, chars_repeated);
	}

	//read them all back multiple times
	for (var i = 0; i &lt; 5; ++i)
	{
		var contents = path + Jaxer.File.read(path + &#039;/test_&#039; + i + &#039;.txt&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      #write 1kb
      5.times do |i|
        handle = File.open(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;,&#039;w&#039;)
        handle.write chars
        handle.close
      end
    
      #write 100kb
      5.times do |i|
        handle = File.open(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;,&#039;a&#039;)
        handle.write chars_repeated
        handle.close
      end
    
      5.times do |i|
        contents = File.read(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;)
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;DB&lt;/h3&gt;
&lt;p&gt;
To measure database performance, we tried to level the playing field as much as possible by coding straight SQL statements. We also emphasized SELECTs over DML queries because most apps read much more than they write. Jaxer came out somewhere between PHP and Rails, with half its time spent wrapping the raw MySQL data in easier-to-manipulate JavaScript structures. Of course in real-world apps you&#039;re likely to use prepared statements, and very often (esp. in Rails, and soon in Jaxer too) an Object-Relational Mapping such as ActiveRecord to abstract out the SQL calls.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039;.$chars.&#039;&quot;,&quot;&#039;.$chars.&#039;&quot;,&quot;&#039;.$chars_repeated.&#039;&quot;)&#039;,$connection);
	}
	
	for($i = 0; $i &lt; 100; ++$i)
	{
		mysql_query(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039;.($i + 1),$connection);
	}
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039;.$chars2.&#039;&quot;,b =&quot;&#039;.$chars2.&#039;&quot;,c=&quot;&#039;.$chars2_repeated.&#039;&quot; WHERE id = &#039;.($i + 1),$connection);
	}
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039;.($i + 1),$connection);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	for (var i=0; i&lt;10; i++)
	{
		conn.execute(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars_repeated + &#039;&quot;)&#039;);
	}

	for (var i=0; i&lt;100; ++i)
	{
		conn.execute(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039; + (i + 1));
	}

	for (var i = 0; i &lt; 10; ++i)
	{
		conn.execute(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039; + chars2 + &#039;&quot;,b =&quot;&#039; + chars2 + &#039;&quot;,c=&quot;&#039; + chars2_repeated + &#039;&quot; WHERE id = &#039; + (i + 1));

	}

	for (var i = 0; i &lt; 10; ++i)
	{
		conn.execute(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039; + (i + 1));
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars_repeated + &#039;&quot;)&#039;)
      end
    
      100.times do |i|
        ActiveRecord::Base.connection.execute(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039; + (i + 1).to_s);
      end

      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039; + chars2 + &#039;&quot;,b =&quot;&#039; + chars2 + &#039;&quot;,c=&quot;&#039; + chars2_repeated + &#039;&quot; WHERE id = &#039; + (i + 1).to_s);
      end

      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039; + (i + 1).to_s);
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Scrape&lt;/h3&gt;
&lt;p&gt;
Finally, we included some page scraping tests. Many web apps mash up other content, repurpose it, or extract data from remote sources. In our case we read in the same blog page as in the static example, and navigated it in a variety of ways. PHP was fastest here, with Jaxer slightly behind and Rails a distant third. Looking for a moment beyond performance, Jaxer is the only platform that would allow scraping of true Ajax web pages, for example pages that created their content &quot;client-side&quot; via Ajax calls.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	//find search input box
	for($i = 0; $i &lt; 5; ++$i)
	{
		$contents = file_get_contents(&#039;./static.html&#039;);
		$dom = new DOMDocument();
		@$dom-&gt;loadHTML($contents);
		
		//find by xpath
		$xpath = new DOMXPath($dom);
		$inputs = $xpath-&gt;evaluate(&quot;/html/body//form//input&quot;);
		$node = false;
		foreach($inputs as $input)
		{
			if($input-&gt;getAttribute(&#039;id&#039;) == &#039;edit-search-block-form-keys&#039;)
			{
				$node = $input;
			}
		}
		$divs = $xpath-&gt;evaluate(&#039;/html/div[@id=&quot;gbar&quot;]&#039;);
		
		//find by DOM
		$inputs = $dom-&gt;getElementsByTagName(&#039;input&#039;);
		foreach($inputs as $input)
		{
			if($input-&gt;getAttribute(&#039;id&#039;) == &#039;edit-search-block-form-keys&#039;)
			{
				$node = $input;
			}
		}
		$bar = $dom-&gt;getElementById(&#039;edit-search-block-form-keys&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	var sandbox = new Jaxer.Sandbox(null,null,{
		allowJavaScript: false,
		allowMetaRedirects: false,
		allowSubFrames: false
	});
	
	for(var i = 0; i &lt; 5; ++i)
	{
		sandbox.setContents(Jaxer.File.read(Jaxer.Dir.combine(Jaxer.request.currentFolder,&#039;static.html&#039;)));
		
		//find by xpath
		var inputs = sandbox.document.evaluate(&quot;/html/body//form//input&quot;,sandbox.document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		var search_input = null;
		
		for(var x = 0; x &lt; inputs.snapshotLength; ++x)
		{
			if(inputs.snapshotItem(x).id == &#039;edit-search-block-form-keys&#039;)
			{
				search_input = inputs.snapshotItem(x);
			}
		}
		var divs = sandbox.document.evaluate(&#039;/html/div[@id=&quot;edit-search-block-form-keys&quot;]&#039;,sandbox.document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		
		//find by DOM
		var inputs = sandbox.document.getElementsByTagName(&#039;input&#039;);
		for(var x = 0; x &lt; inputs.length; ++x)
		{
			if(inputs[x].id == &#039;edit-search-block-form-keys&#039;)
			{
				search_input = inputs[x];
			} 
		}
		var bar = sandbox.document.getElementById(&#039;edit-search-block-form-keys&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      5.times do
        #typical blog page queries
        doc = Hpricot(open(RAILS_ROOT + &#039;/public/static.html&#039;))
        inputs = doc/&quot;/html/body//form//input&quot;
        node = inputs.find{|input| input.attributes[&#039;id&#039;] &amp;&amp; input.attributes[&#039;id&#039;] == &#039;edit-search-block-form-keys&#039;}
        divs = doc/&#039;/html/div[@id=&quot;edit-search-block-form-keys&quot;]&#039;
        inputs = doc/&#039;input&#039;
        divs = doc/&#039;#edit-search-block-form-keys&#039;
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Try it yourself&lt;/h3&gt;
&lt;p&gt;
You can &lt;a href=&quot;http://aptana.com/system/files/jaxer_benchmarks0_0.zip&quot;&gt;download the complete source&lt;/a&gt; we used to generate and display these results, and try them yourself. The README file should have the instructions you need. You can grab Apache+Jaxer from &lt;a href=&quot;http://aptana.com/jaxer/download&quot;&gt;the Aptana download site&lt;/a&gt;, Apache+PHP+MySQL from several places such as &lt;a href=&quot;http://www.apachefriends.org/en/xampp.html&quot;&gt;XAMPP&lt;/a&gt;, and Ruby and Rails from &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;RubyOnRails.org&lt;/a&gt; (if it isn&#039;t already on your platform &amp;mdash; you&#039;ll need Rails 2.1.0, the json Ruby gem, and to run the tests in production mode).&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;
&lt;p&gt;If you&#039;d like to discuss these, I&#039;ve started &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=6673&quot;&gt;a forum thread for this&lt;/a&gt;.&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;
As we get ready to release Jaxer 1.0, we put together a few simple benchmarks 
to see how it performs 
relative to a couple of other web platforms: PHP and Rails. &lt;img src=&quot;/system/files/jaxer_benchmarks0_individuals_2.png&quot; width=540 height=300 style=&quot;float:right; padding-left: 30px; padding: 10px;&quot;&gt; We wanted to answer a simple question: &lt;b&gt;how does Jaxer, with its server-side DOM and JavaScript, perform relative to these other popular alternatives?&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
This was not designed to be an all-encompassing shoot-out, or a detailed study of everything you might want to do in a web app. Instead, we took a few common tasks &amp;mdash; making database requests, using JSON, etc. &amp;mdash; and implemented them as you might expect in the three platforms. We made enough DB requests and JSON calls and so on to give us a reasonable number of milliseconds to measure. But we also wanted to make the repetitions representative of what you might find on somewhat intensive real-world page, so we&#039;re not making a million DB requests, just a hundred, for instance. And we included one benchmark of serving an almost-static page: the &quot;almost&quot; was to make sure we were measuring the time the platform took to really read through the page, in case it had dynamic content in it. (Otherwise, if the page were truly static, you could always arrange for the web server to serve it without involving the platform.)
&lt;br clear=left /&gt;
&lt;/p&gt;

&lt;p&gt;
The first chart shows how long each platform took to perform the task. For the &quot;static&quot; page, we measured the total time taken to serve the request, as measured by the external web client making the request (over the local network). For the other benchmarks, we measured the time taken to perform the 

specific task itself, excluding the overhead of setting up and tearing down the benchmark, 

&lt;img src=&quot;/system/files/jaxer_benchmarks0_combined_2.png&quot; height=400 width=365 style=&quot;float:right; padding-left: 30px; padding: 10px&quot;&gt;
serving the test page, etc. That allowed us to combine these tests and assess what an entire page would take to serve, if it had static content &lt;em&gt;and&lt;/em&gt; database requests &lt;em&gt;and&lt;/em&gt; some JSON manipulation and so on. Of course your mileage may vary: your app may have less DB requests, more JSON, less IO, whatever. But remember the question we&#039;re trying to answer: how does Jaxer perform relative to other accepted platforms for several common tasks? We believe these benchmarks answer that: &lt;b&gt;Jaxer performance is very much comparable to PHP and Rails&lt;/b&gt;. 
&lt;/p&gt;

&lt;p&gt;Of course, &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot;&gt;significant boosts to JavaScript performance&lt;/a&gt; are around the corner for Firefox  (see Brendan&#039;s &lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2008/09/tracemonkey_update.html&quot;&gt;TraceMonkey article&lt;/a&gt;). Since Jaxer is built on the same engine as Firefox, those same improvements will soon be in Jaxer too... With the imminent and massive improvements to JavaScript performance coming to the Mozilla engine.  
&lt;/p&gt;

&lt;p&gt;Now let&#039;s take a closer look at these tests below. All were run multiple times on a Macbook Pro (2.5 GHz Intel Core 2 Duo) with 4 GB of RAM.&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;style type=&quot;text/css&quot;&gt;.bmplatform { font-weight: bold; }&lt;/style&gt;
&lt;script language=&quot;javascript&quot; src=&quot;/themes/aptana/lib/sh/shBrushRuby.js&quot;&gt;&lt;/script&gt;

&lt;h3&gt;The &quot;Static&quot; Page&lt;/h3&gt;
&lt;p&gt;
We grabbed a copy of one of our blog pages (&lt;a href=&quot;http://www.aptana.com/node/467&quot;&gt;Aptana Acquires Pydev&lt;/a&gt;) and saved it locally. We turned it into a .php file with a smidgen of PHP in it; we threw in a short &amp;lt;script runat=&quot;server&quot;&amp;gt;...&amp;lt;script&amp;gt; for Jaxer; and created a simple view out of it for Rails. Jaxer was the slowest to serve this page, and not surprisingly: it needs to parse and create the entire DOM of the page to allow server-side manipulation. Still, under 20 ms is pretty good, and is usually dwarfed by weightier tasks such as DB queries.
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Loops&lt;/h3&gt;
&lt;p&gt;
To measure raw iteration speed we created some very simple loops with and without a bit of variable manipulation. This time Jaxer was far faster than PHP or Rails: at least for simple, common for loops, Mozilla&#039;s SpiderMonkey JavaScript engine is no slouch. 
&lt;table cellpadding=0 cellspacing=0&gt;
&lt;tr&gt;
&lt;td class=&quot;bmplatform&quot;&gt;PHP&lt;/td&gt;
&lt;td class=&quot;bmplatform&quot;&gt;Jaxer&lt;/td&gt;
&lt;td class=&quot;bmplatform&quot;&gt;Rails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	for($a = 0; $a &lt; 10000; ++$a)
	{
		// do nothing
	}

	for($a = 0; $a &lt; 10000; ++$a)
	{
		$b = $a;
	}

	for($a = 0; $a &lt; 10000; ++$a)
	{
		$b = $a;
		for($c = 0; $c &lt; 10; ++$c)
		{
			$d = $c;
		}
	}

	$a = 0;
	while($a &lt; 10000)
	{
		++$a;
	}
&lt;/textarea&gt;
&lt;/td&gt;

&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	for(var a = 0; a &lt; 10000; ++a)
	{
		// do nothing
	}
	
	for(var a = 0; a &lt; 10000; ++a)
	{
		var b = a;
	}
	
	for(var a = 0; a &lt; 10000; ++a)
	{
		var b = a;
		for(var c = 0; c &lt; 10; ++c)
		{
			var d = c;
		}
	}
	
	var a = 0;
	while(a &lt; 10000)
	{
		++a;
	}
&lt;/textarea&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      10000.times do |a|
        # do nothing        
      end
      10000.times do |a|
        b = a
      end
      10000.times do |a|
        b = a
        10.times do |c|
          d = c
        end
      end
      a = 0
      while a &lt; 10000
        a += 1
      end
&lt;/textarea&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;JSON&lt;/h3&gt;
&lt;p&gt;
Using JavaScript literals as a serialization format predates Ajax, and has become an incredibly prevalent cross-platform data format. We created a simple JSON structure and a more complex one, and measured a variety of encoding and decoding tasks. All three platforms now have native JSON support, so all three performed very well in this benchmark.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	$json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;;
	$json_data = array(
	  &#039;a&#039; =&gt; &#039;a&#039;,
	  &#039;b&#039; =&gt; array(1,2,3,4,5,6,7,8,9),
	  &#039;c&#039; =&gt; &#039;c&#039;,
	  &#039;d&#039; =&gt; array(
	    &#039;one&#039; =&gt; &#039;1&#039;,
	    &#039;two&#039; =&gt; &#039;2&#039;,
	    &#039;three&#039; =&gt; &#039;3&#039;
	  )
	);
	$complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		$decoded_a = json_decode($json_string,true);
		$decoded_b = json_decode($complex_json_string,true);
		json_encode($json_data);
		json_encode($decoded_b);
	}
	
	$output = &#039;&#039;;
	for($i = 0; $i &lt; 10; ++$i)
	{
		$decoded = json_decode($complex_json_string,true);
		foreach($decoded as $x =&gt; $item)
		{
			if($item[&#039;id&#039;] == &#039;0001&#039;)
			{
				$decoded[$x][&#039;type&#039;] = &#039;fancy donut&#039;;
				break;
			}
		}
		$output .= json_encode($decoded);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;
	
	var json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;;
	var json_data = {
		a: &#039;a&#039;,
		b: [1,2,3,4,5,6,7,8,9],
		c: &#039;c&#039;,
		d: {
			one: &#039;1&#039;,
			two: &#039;2&#039;,
			three: &#039;3&#039;
		}
	};
	var complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;
	
	for(var i = 0; i &lt; 10; ++i)
	{
		var decoded_a = Jaxer.Serialization.fromJSONString(json_string);
		var decoded_b = Jaxer.Serialization.fromJSONString(complex_json_string);
		Jaxer.Serialization.toJSONString(decoded_a);
		Jaxer.Serialization.toJSONString(decoded_b);
	}
	
	var output = &#039;&#039;;
	for(var i = 0; i &lt; 10; ++i)
	{
		var decoded = Jaxer.Serialization.fromJSONString(complex_json_string);
		for(var x = 0; x &lt; decoded.length; ++x)
		{
			if(decoded[x][&#039;id&#039;] == &#039;0001&#039;)
			{
				decoded[x][&#039;type&#039;] = &#039;fancy donut&#039;;
			}
		}
		output += Jaxer.Serialization.toJSONString(decoded);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      json_string = &#039;{&quot;c&quot;: &quot;c&quot;, &quot;a&quot;: &quot;a&quot;, &quot;d&quot;: {&quot;three&quot;: &quot;3&quot;, &quot;one&quot;: &quot;1&quot;, &quot;two&quot;: &quot;2&quot;}, &quot;b&quot;: [1, 2, 3, 4, 5, 6, 7, 8, 9]}&#039;
      json_data = {
        :a =&gt; &#039;a&#039;,
        :b =&gt; [1,2,3,4,5,6,7,8,9],
        :c =&gt; &#039;c&#039;,
        :d =&gt; {
          :one =&gt; &#039;1&#039;,
          :two =&gt; &#039;2&#039;,
          :three =&gt; &#039;3&#039;
        }
      }
      complex_json_string = &#039;[{&quot;id&quot;: &quot;0001&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Cake&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;1003&quot;, &quot;type&quot;: &quot;Blueberry&quot; },{ &quot;id&quot;: &quot;1004&quot;, &quot;type&quot;: &quot;Devil\&#039;s Food&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5007&quot;, &quot;type&quot;: &quot;Powdered Sugar&quot; },{ &quot;id&quot;: &quot;5006&quot;, &quot;type&quot;: &quot;Chocolate with Sprinkles&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0002&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Raised&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5005&quot;, &quot;type&quot;: &quot;Sugar&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]},{&quot;id&quot;: &quot;0003&quot;,&quot;type&quot;: &quot;donut&quot;,&quot;name&quot;: &quot;Old Fashioned&quot;,&quot;ppu&quot;: 0.55,&quot;batters&quot;:{&quot;batter&quot;:[{ &quot;id&quot;: &quot;1001&quot;, &quot;type&quot;: &quot;Regular&quot; },{ &quot;id&quot;: &quot;1002&quot;, &quot;type&quot;: &quot;Chocolate&quot; }]},&quot;topping&quot;:[{ &quot;id&quot;: &quot;5001&quot;, &quot;type&quot;: &quot;None&quot; },{ &quot;id&quot;: &quot;5002&quot;, &quot;type&quot;: &quot;Glazed&quot; },{ &quot;id&quot;: &quot;5003&quot;, &quot;type&quot;: &quot;Chocolate&quot; },{ &quot;id&quot;: &quot;5004&quot;, &quot;type&quot;: &quot;Maple&quot; }]}]&#039;;

      10.times do
        decoded_a = JSON.parse(json_string)
        decoded_b = JSON.parse(complex_json_string)
        decoded_a.to_json
        decoded_b.to_json
      end
      
      10.times do
        decoded = JSON.parse(complex_json_string)
        decoded.each_with_index do |item,x|
          if(item[&#039;id&#039;] == &#039;0001&#039;)
            decoded[x][&#039;type&#039;] = &#039;fancy donut&#039;
          end
        end
        output += decoded.to_json
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;IO&lt;/h3&gt;
&lt;p&gt;
To measure typical file I/O performance, we created a 1 KB string and wrote it to a file, then appended a 100 KB string, and read the whole thing back, and repeated it a few times. Jaxer came out somewhat slower than the other platforms: some of this may be due to the extra conversions between JavaScript&#039;s native utf8 encoding and the filesystem, but we&#039;ll need to go back and dig deeper.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	//write 1kb
	for($i = 0; $i &lt; 5; ++$i)
	{
		$handle = fopen($path.&#039;/test_&#039;.$i.&#039;.txt&#039;,&#039;w&#039;);
		fwrite($handle,$chars);
		fclose($handle);
	}
	
	//append 100kb
	for($i = 0; $i &lt; 5; ++$i)
	{
		$handle = fopen($path.&#039;/test_&#039;.$i.&#039;.txt&#039;,&#039;a&#039;);
		fwrite($handle,$chars_repeated);
		fclose($handle);

	}

	//read them all back multiple times
	for($i = 0; $i &lt; 5; ++$i)
	{
		$contents = file_get_contents($path.&#039;/test_&#039;.$i.&#039;.txt&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	//write 1kb
	for (var i = 0; i &lt; 5; ++i)
	{
		Jaxer.File.write(path + &#039;/test_&#039; + i + &#039;.txt&#039;, chars);
	}

	//append 100kb
	for (var i = 0; i &lt; 5; ++i)
	{
		Jaxer.File.append(path + &#039;/test_&#039; + i + &#039;.txt&#039;, chars_repeated);
	}

	//read them all back multiple times
	for (var i = 0; i &lt; 5; ++i)
	{
		var contents = path + Jaxer.File.read(path + &#039;/test_&#039; + i + &#039;.txt&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      #write 1kb
      5.times do |i|
        handle = File.open(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;,&#039;w&#039;)
        handle.write chars
        handle.close
      end
    
      #write 100kb
      5.times do |i|
        handle = File.open(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;,&#039;a&#039;)
        handle.write chars_repeated
        handle.close
      end
    
      5.times do |i|
        contents = File.read(path + &#039;/test_&#039; + i.to_s + &#039;.txt&#039;)
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;DB&lt;/h3&gt;
&lt;p&gt;
To measure database performance, we tried to level the playing field as much as possible by coding straight SQL statements. We also emphasized SELECTs over DML queries because most apps read much more than they write. Jaxer came out somewhere between PHP and Rails, with half its time spent wrapping the raw MySQL data in easier-to-manipulate JavaScript structures. Of course in real-world apps you&#039;re likely to use prepared statements, and very often (esp. in Rails, and soon in Jaxer too) an Object-Relational Mapping such as ActiveRecord to abstract out the SQL calls.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039;.$chars.&#039;&quot;,&quot;&#039;.$chars.&#039;&quot;,&quot;&#039;.$chars_repeated.&#039;&quot;)&#039;,$connection);
	}
	
	for($i = 0; $i &lt; 100; ++$i)
	{
		mysql_query(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039;.($i + 1),$connection);
	}
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039;.$chars2.&#039;&quot;,b =&quot;&#039;.$chars2.&#039;&quot;,c=&quot;&#039;.$chars2_repeated.&#039;&quot; WHERE id = &#039;.($i + 1),$connection);
	}
	
	for($i = 0; $i &lt; 10; ++$i)
	{
		mysql_query(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039;.($i + 1),$connection);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	for (var i=0; i&lt;10; i++)
	{
		conn.execute(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars_repeated + &#039;&quot;)&#039;);
	}

	for (var i=0; i&lt;100; ++i)
	{
		conn.execute(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039; + (i + 1));
	}

	for (var i = 0; i &lt; 10; ++i)
	{
		conn.execute(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039; + chars2 + &#039;&quot;,b =&quot;&#039; + chars2 + &#039;&quot;,c=&quot;&#039; + chars2_repeated + &#039;&quot; WHERE id = &#039; + (i + 1));

	}

	for (var i = 0; i &lt; 10; ++i)
	{
		conn.execute(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039; + (i + 1));
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;INSERT INTO aptana_benchmark_test (a,b,c) VALUES(&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars + &#039;&quot;,&quot;&#039; + chars_repeated + &#039;&quot;)&#039;)
      end
    
      100.times do |i|
        ActiveRecord::Base.connection.execute(&#039;SELECT * FROM aptana_benchmark_test WHERE id = &#039; + (i + 1).to_s);
      end

      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;UPDATE aptana_benchmark_test SET a=&quot;&#039; + chars2 + &#039;&quot;,b =&quot;&#039; + chars2 + &#039;&quot;,c=&quot;&#039; + chars2_repeated + &#039;&quot; WHERE id = &#039; + (i + 1).to_s);
      end

      10.times do |i|
        ActiveRecord::Base.connection.execute(&#039;DELETE FROM aptana_benchmark_test WHERE id = &#039; + (i + 1).to_s);
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Scrape&lt;/h3&gt;
&lt;p&gt;
Finally, we included some page scraping tests. Many web apps mash up other content, repurpose it, or extract data from remote sources. In our case we read in the same blog page as in the static example, and navigated it in a variety of ways. PHP was fastest here, with Jaxer slightly behind and Rails a distant third. Looking for a moment beyond performance, Jaxer is the only platform that would allow scraping of true Ajax web pages, for example pages that created their content &quot;client-side&quot; via Ajax calls.
&lt;div class=&quot;bmplatform&quot;&gt;PHP&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;	//find search input box
	for($i = 0; $i &lt; 5; ++$i)
	{
		$contents = file_get_contents(&#039;./static.html&#039;);
		$dom = new DOMDocument();
		@$dom-&gt;loadHTML($contents);
		
		//find by xpath
		$xpath = new DOMXPath($dom);
		$inputs = $xpath-&gt;evaluate(&quot;/html/body//form//input&quot;);
		$node = false;
		foreach($inputs as $input)
		{
			if($input-&gt;getAttribute(&#039;id&#039;) == &#039;edit-search-block-form-keys&#039;)
			{
				$node = $input;
			}
		}
		$divs = $xpath-&gt;evaluate(&#039;/html/div[@id=&quot;gbar&quot;]&#039;);
		
		//find by DOM
		$inputs = $dom-&gt;getElementsByTagName(&#039;input&#039;);
		foreach($inputs as $input)
		{
			if($input-&gt;getAttribute(&#039;id&#039;) == &#039;edit-search-block-form-keys&#039;)
			{
				$node = $input;
			}
		}
		$bar = $dom-&gt;getElementById(&#039;edit-search-block-form-keys&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Jaxer&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;	var sandbox = new Jaxer.Sandbox(null,null,{
		allowJavaScript: false,
		allowMetaRedirects: false,
		allowSubFrames: false
	});
	
	for(var i = 0; i &lt; 5; ++i)
	{
		sandbox.setContents(Jaxer.File.read(Jaxer.Dir.combine(Jaxer.request.currentFolder,&#039;static.html&#039;)));
		
		//find by xpath
		var inputs = sandbox.document.evaluate(&quot;/html/body//form//input&quot;,sandbox.document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		var search_input = null;
		
		for(var x = 0; x &lt; inputs.snapshotLength; ++x)
		{
			if(inputs.snapshotItem(x).id == &#039;edit-search-block-form-keys&#039;)
			{
				search_input = inputs.snapshotItem(x);
			}
		}
		var divs = sandbox.document.evaluate(&#039;/html/div[@id=&quot;edit-search-block-form-keys&quot;]&#039;,sandbox.document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		
		//find by DOM
		var inputs = sandbox.document.getElementsByTagName(&#039;input&#039;);
		for(var x = 0; x &lt; inputs.length; ++x)
		{
			if(inputs[x].id == &#039;edit-search-block-form-keys&#039;)
			{
				search_input = inputs[x];
			} 
		}
		var bar = sandbox.document.getElementById(&#039;edit-search-block-form-keys&#039;);
	}
&lt;/textarea&gt;
&lt;div class=&quot;bmplatform&quot;&gt;Rails&lt;/div&gt;
&lt;textarea name=&quot;code&quot; class=&quot;rails&quot;&gt;      5.times do
        #typical blog page queries
        doc = Hpricot(open(RAILS_ROOT + &#039;/public/static.html&#039;))
        inputs = doc/&quot;/html/body//form//input&quot;
        node = inputs.find{|input| input.attributes[&#039;id&#039;] &amp;&amp; input.attributes[&#039;id&#039;] == &#039;edit-search-block-form-keys&#039;}
        divs = doc/&#039;/html/div[@id=&quot;edit-search-block-form-keys&quot;]&#039;
        inputs = doc/&#039;input&#039;
        divs = doc/&#039;#edit-search-block-form-keys&#039;
      end
&lt;/textarea&gt;
&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Try it yourself&lt;/h3&gt;
&lt;p&gt;
You can &lt;a href=&quot;http://aptana.com/system/files/jaxer_benchmarks0_0.zip&quot;&gt;download the complete source&lt;/a&gt; we used to generate and display these results, and try them yourself. The README file should have the instructions you need. You can grab Apache+Jaxer from &lt;a href=&quot;http://aptana.com/jaxer/download&quot;&gt;the Aptana download site&lt;/a&gt;, Apache+PHP+MySQL from several places such as &lt;a href=&quot;http://www.apachefriends.org/en/xampp.html&quot;&gt;XAMPP&lt;/a&gt;, and Ruby and Rails from &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;RubyOnRails.org&lt;/a&gt; (if it isn&#039;t already on your platform &amp;mdash; you&#039;ll need Rails 2.1.0, the json Ruby gem, and to run the tests in production mode).&lt;/p&gt;

&lt;hr&gt;&lt;br&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;
&lt;p&gt;If you&#039;d like to discuss these, I&#039;ve started &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=6673&quot;&gt;a forum thread for this&lt;/a&gt;.&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Sat, 13 Sep 2008 10:19:14 -0500</pubDate>
 <dc:creator>uri</dc:creator>
 <guid isPermaLink="false">470 at http://aptana.com</guid>
</item>
<item>
 <title>jQuery 1.2.6 support now available in Aptana Studio</title>
 <link>http://aptana.com/blog/lorihc/jquery1.2.6_now_available</link>
 <description>&lt;p&gt;
The latest update to jQuery, version 1.2.6, includes faster event handling, faster CSS selectors, an overhaul of &lt;code&gt;attr()&lt;/code&gt;, improvements to &lt;code&gt;toggle()&lt;/code&gt;, support for all the Dimensions plugin methods (the plugin is now part of the core code), and more... and now it&#039;s available in Aptana Studio as well!&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif&quot; alt=&quot;Ext JS&quot; width=&quot;215&quot; height=&quot;53&quot; style=&quot;background-color:#000; padding:10px;&quot; align=&quot;right&quot; hspace=&quot;20&quot;/&gt;


If your copy of Studio is set to automatically check for updates, you&#039;ll be prompted to install the jQuery 1.2.6 plugin with the next check. If you check manually, follow the steps below to get the updated library files, code assist, and local, searchable documentation that come with the jQuery 1.2.6 plugin:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, choose Help &amp;gt; Software Updates &amp;gt; Find and Install...&lt;/li&gt;
  &lt;li&gt; Select the &amp;quot;Search for new features to install&amp;quot; option and click Next.&lt;/li&gt;
  &lt;li&gt; Click the New Remote Site... button (top right).&lt;/li&gt;
  &lt;li&gt; In the dialog box that appears, enter Aptana jQuery Update Site as the name and &lt;strong&gt;http://update.aptana.com/update/frameworks/jquery/&lt;/strong&gt; as the URL and click OK.&lt;/li&gt;
  &lt;li&gt; Aptana jQuery Update Site will now appear in the list of update sites and be checked automatically. Click Finish.&lt;/li&gt;
  &lt;li&gt;In the next dialog box that appears, expand the nodes until you see Aptana Support for jQuery 1.2.6.00002, select that option, and click Next.&lt;/li&gt;
  &lt;li&gt; Accept the terms of the license agreement and click Next.&lt;/li&gt;
  &lt;li&gt; In the next dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt; In the Feature Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt; Click Yes when prompted to restart.
  &lt;/li&gt;
&lt;/ol&gt;</description>
 <content:encoded>&lt;p&gt;
The latest update to jQuery, version 1.2.6, includes faster event handling, faster CSS selectors, an overhaul of &lt;code&gt;attr()&lt;/code&gt;, improvements to &lt;code&gt;toggle()&lt;/code&gt;, support for all the Dimensions plugin methods (the plugin is now part of the core code), and more... and now it&#039;s available in Aptana Studio as well!&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif&quot; alt=&quot;Ext JS&quot; width=&quot;215&quot; height=&quot;53&quot; style=&quot;background-color:#000; padding:10px;&quot; align=&quot;right&quot; hspace=&quot;20&quot;/&gt;


If your copy of Studio is set to automatically check for updates, you&#039;ll be prompted to install the jQuery 1.2.6 plugin with the next check. If you check manually, follow the steps below to get the updated library files, code assist, and local, searchable documentation that come with the jQuery 1.2.6 plugin:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, choose Help &amp;gt; Software Updates &amp;gt; Find and Install...&lt;/li&gt;
  &lt;li&gt; Select the &amp;quot;Search for new features to install&amp;quot; option and click Next.&lt;/li&gt;
  &lt;li&gt; Click the New Remote Site... button (top right).&lt;/li&gt;
  &lt;li&gt; In the dialog box that appears, enter Aptana jQuery Update Site as the name and &lt;strong&gt;http://update.aptana.com/update/frameworks/jquery/&lt;/strong&gt; as the URL and click OK.&lt;/li&gt;
  &lt;li&gt; Aptana jQuery Update Site will now appear in the list of update sites and be checked automatically. Click Finish.&lt;/li&gt;
  &lt;li&gt;In the next dialog box that appears, expand the nodes until you see Aptana Support for jQuery 1.2.6.00002, select that option, and click Next.&lt;/li&gt;
  &lt;li&gt; Accept the terms of the license agreement and click Next.&lt;/li&gt;
  &lt;li&gt; In the next dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt; In the Feature Verification dialog box, click Install.&lt;/li&gt;
  &lt;li&gt; Click Yes when prompted to restart.
  &lt;/li&gt;
&lt;/ol&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 29 Aug 2008 20:08:59 -0500</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">468 at http://aptana.com</guid>
</item>
<item>
 <title>Ext JS 2.2 support now available in Aptana Studio</title>
 <link>http://aptana.com/blog/lorihc/ext2.2_support_now_available</link>
 <description>&lt;p&gt;
We&#039;re happy to announce that we&#039;ve updated our support for the Ext JS  library to the latest version, 2.2. Ext JS 2.2 contains numerous bug fixes and feature enhancements, including full Firefox 3 support, improved checkbox and radio groups, a history component, and a GMapPanel extension &lt;!--break--&gt; that packages Google Maps functionality into an Ext component. It&#039;s also &lt;a href=&quot;http://extjs.com/blog/2008/08/04/ext-22-released/&quot; target=&quot;_blank&quot;&gt;fully backwards-compatible&lt;/a&gt;, so you should be able to move to this version from 2.0 without difficulty (though you can also install 2.2 into Studio alongside 2.0 if you want).
&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.theartcompany.org/g/blog/20080411_extjs_logo.gif&quot; alt=&quot;Ext JS&quot; align=left /&gt;
The Ext JS 2.2 plugin for Aptana Studio provides code completion, code assist, Ext JS 2.2 examples, project wizards and more atop solid javascript coding and Ajax debugging utilities so that you can be as productive as possible with Ext JS.
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;To get the Ext JS 2.2 plugin for Aptana Studio:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/choose_open_plugins_view_0.png&quot; alt=&quot;Open the Plugins Manager&quot; width=&quot;342&quot; height=&quot;172&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Ext Support version 2.2.0 and click the green +icon to install.&lt;br /&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin.png&quot; alt=&quot;Install Ext JS 2.2&quot; width=&quot;708&quot; height=&quot;273&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the three available Ext JS plugins. Select &lt;strong&gt;Aptana Support for EXT 2.2.0.00002&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/select_ext_2.2.png&quot; alt=&quot;Select Ext 2.2 from the tree&quot; width=&quot;602&quot; height=&quot;500&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the Ext JS 2.2 plugin. Click Yes when you&#039;re prompted to restart, and you&#039;ll have all the features of the new plugin at your fingertips.&lt;/li&gt;
&lt;/ol&gt;</description>
 <content:encoded>&lt;p&gt;
We&#039;re happy to announce that we&#039;ve updated our support for the Ext JS  library to the latest version, 2.2. Ext JS 2.2 contains numerous bug fixes and feature enhancements, including full Firefox 3 support, improved checkbox and radio groups, a history component, and a GMapPanel extension &lt;!--break--&gt; that packages Google Maps functionality into an Ext component. It&#039;s also &lt;a href=&quot;http://extjs.com/blog/2008/08/04/ext-22-released/&quot; target=&quot;_blank&quot;&gt;fully backwards-compatible&lt;/a&gt;, so you should be able to move to this version from 2.0 without difficulty (though you can also install 2.2 into Studio alongside 2.0 if you want).
&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.theartcompany.org/g/blog/20080411_extjs_logo.gif&quot; alt=&quot;Ext JS&quot; align=left /&gt;
The Ext JS 2.2 plugin for Aptana Studio provides code completion, code assist, Ext JS 2.2 examples, project wizards and more atop solid javascript coding and Ajax debugging utilities so that you can be as productive as possible with Ext JS.
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;To get the Ext JS 2.2 plugin for Aptana Studio:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;In Aptana Studio, open the Plugins Manager.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/choose_open_plugins_view_0.png&quot; alt=&quot;Open the Plugins Manager&quot; width=&quot;342&quot; height=&quot;172&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;  &lt;/li&gt;
  &lt;li&gt;In the Plugins Manager, select Ext Support version 2.2.0 and click the green +icon to install.&lt;br /&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/images/install_plugin.png&quot; alt=&quot;Install Ext JS 2.2&quot; width=&quot;708&quot; height=&quot;273&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Updates dialog box, expand the tree until you see the three available Ext JS plugins. Select &lt;strong&gt;Aptana Support for EXT 2.2.0.00002&lt;/strong&gt; and click Next.&lt;br /&gt;
    &lt;img src=&quot;http://www.aptana.com/system/files/images/select_ext_2.2.png&quot; alt=&quot;Select Ext 2.2 from the tree&quot; width=&quot;602&quot; height=&quot;500&quot; style=&quot;margin: 10px 0 20px 0&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the Install dialog box, accept the terms of the license agreement and then click Next.&lt;/li&gt;
  &lt;li&gt;In the Verification dialog box, click Install. (The provider of this feature is Aptana.)&lt;/li&gt;
  &lt;li&gt;In the next Install dialog box, click Finish.&lt;/li&gt;
  &lt;li&gt;Aptana Studio will begin downloading the Ext JS 2.2 plugin. Click Yes when you&#039;re prompted to restart, and you&#039;ll have all the features of the new plugin at your fingertips.&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 29 Aug 2008 07:29:22 -0500</pubDate>
 <dc:creator>lorihc</dc:creator>
 <guid isPermaLink="false">460 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Acquires Pydev to add Python Support to Studio</title>
 <link>http://aptana.com/blog/pcolton/pydev_news</link>
 <description>&lt;p&gt;
We are very excited to announce that Pydev, the popular Python and Jython IDE, is now part of the Aptana product family and that Pydev creator, Fabio Zadronzy, will head up continued efforts to advance Pydev as part of the Aptana team. Like our products for Ruby on Rails, Ajax, and PHP, Pydev offers code completion, refactoring, code analysis, debugging support, and lots lots more.  Pydev&#039;s popularity in the Python community and Eclipse ecosystem made it the clear choice for Aptana.  The acquisition sets the stage for a full Python suite of products and services ranging from local development to cloud deployment.
&lt;/p&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/images/pydev_logo_whitebg.gif&quot; align=&quot;right&quot; hspace=20&gt;
&lt;p&gt;
Interest in Python has been steadily growing and earlier this year got a big boost when Google announced that Python was the language for Google App Engine.   
&lt;/p&gt;&lt;p&gt; 
Dion Almaer, Open Web Advocate for Google recently commented &quot;This has been a great year for the Python developer community with the advent of great frameworks such as Django and deployment solutions such as Google App Engine.  Now the tooling is getting better all the time. One of the great tools is Pydev, especially if you are Eclipse-minded. Having Aptana take on Pydev only means progress for that project and Python developers.&quot;  
&lt;/p&gt;&lt;p&gt;
Google is also a worldwide licensee of the commercial version of Pydev, Pydev Extensions, which includes even more high-productivity features for Python developers. 
&lt;/p&gt;&lt;p&gt;
Today you can use the products side by side, installing Pydev into Aptana Studio, or plugging both into Eclipse.  The combination gives Python developers access to all of Aptana&#039;s great tooling for Ajax and current Aptana Studio users access to one of the best Python IDEs out there, and the ease of using both together should increase as we integrate the products more closely over the coming months.
&lt;/p&gt;&lt;p&gt;
You can &lt;b&gt;learn more about Pydev and Aptana&#039;s support for Python at &lt;a href=&quot;http://www.aptana.com/python&quot; target=&quot;_new&quot;&gt;http://www.aptana.com/python&lt;/a&gt;&lt;/b&gt;, or just go straight to the &lt;a href=&quot;http://pydev.sourceforge.net&quot; target=&quot;_new&quot;&gt;Pydev&lt;/a&gt; and &lt;a href=&quot;http://www.fabioz.com/pydev/&quot; target=&quot;_new&quot;&gt;Pydev Extensions&lt;/a&gt; sites for downloads and more details.
&lt;/p&gt;&lt;p&gt;
Please start submitting your ideas for future feature enhancements and how you&#039;d like to see these products come together.
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;
We are very excited to announce that Pydev, the popular Python and Jython IDE, is now part of the Aptana product family and that Pydev creator, Fabio Zadronzy, will head up continued efforts to advance Pydev as part of the Aptana team. Like our products for Ruby on Rails, Ajax, and PHP, Pydev offers code completion, refactoring, code analysis, debugging support, and lots lots more.  Pydev&#039;s popularity in the Python community and Eclipse ecosystem made it the clear choice for Aptana.  The acquisition sets the stage for a full Python suite of products and services ranging from local development to cloud deployment.
&lt;/p&gt;
&lt;img src=&quot;http://www.aptana.com/system/files/images/pydev_logo_whitebg.gif&quot; align=&quot;right&quot; hspace=20&gt;
&lt;p&gt;
Interest in Python has been steadily growing and earlier this year got a big boost when Google announced that Python was the language for Google App Engine.   
&lt;/p&gt;&lt;p&gt; 
Dion Almaer, Open Web Advocate for Google recently commented &quot;This has been a great year for the Python developer community with the advent of great frameworks such as Django and deployment solutions such as Google App Engine.  Now the tooling is getting better all the time. One of the great tools is Pydev, especially if you are Eclipse-minded. Having Aptana take on Pydev only means progress for that project and Python developers.&quot;  
&lt;/p&gt;&lt;p&gt;
Google is also a worldwide licensee of the commercial version of Pydev, Pydev Extensions, which includes even more high-productivity features for Python developers. 
&lt;/p&gt;&lt;p&gt;
Today you can use the products side by side, installing Pydev into Aptana Studio, or plugging both into Eclipse.  The combination gives Python developers access to all of Aptana&#039;s great tooling for Ajax and current Aptana Studio users access to one of the best Python IDEs out there, and the ease of using both together should increase as we integrate the products more closely over the coming months.
&lt;/p&gt;&lt;p&gt;
You can &lt;b&gt;learn more about Pydev and Aptana&#039;s support for Python at &lt;a href=&quot;http://www.aptana.com/python&quot; target=&quot;_new&quot;&gt;http://www.aptana.com/python&lt;/a&gt;&lt;/b&gt;, or just go straight to the &lt;a href=&quot;http://pydev.sourceforge.net&quot; target=&quot;_new&quot;&gt;Pydev&lt;/a&gt; and &lt;a href=&quot;http://www.fabioz.com/pydev/&quot; target=&quot;_new&quot;&gt;Pydev Extensions&lt;/a&gt; sites for downloads and more details.
&lt;/p&gt;&lt;p&gt;
Please start submitting your ideas for future feature enhancements and how you&#039;d like to see these products come together.
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 25 Aug 2008 17:02:06 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">467 at http://aptana.com</guid>
</item>
<item>
 <title>JavaScript getting 20 to 40 times faster? How?</title>
 <link>http://aptana.com/blog/news/faster_javascript_from_mozilla</link>
 <description>&lt;p&gt;Mozilla CTO Brendan Eich, the creator of JavaScript, in &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot; target=&quot;_new&quot;&gt;this article by Ryan Paul of Ars Technica&lt;/a&gt;, discusses how Mozilla is &quot;&#039;getting ready to take JavaScript performance into the next tier&#039; with a radically innovative optimization tactic called tracing that has already produced performance improvements ranging between 20 and 40 times faster in some cases.&quot;&lt;/p&gt;
&lt;p&gt;The Mozilla JavaScript engine (SpiderMonkey) is what&#039;s inside the Firefox browser and the &lt;a href=&quot;http://www.aptana.com/jaxer&quot; target=&quot;_new&quot;&gt;Aptana Jaxer, Ajax server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&quot;Eich says that Mozilla wants to &#039;get people thinking about JavaScript as a more general-purpose language&#039; and show them that &#039;it really is a platform for writing full applications.&#039;&quot;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot; target=&quot;_new&quot;&gt;Read the full article &amp;gt;&lt;/a&gt;&lt;/p&gt;



</description>
 <content:encoded>&lt;p&gt;Mozilla CTO Brendan Eich, the creator of JavaScript, in &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot; target=&quot;_new&quot;&gt;this article by Ryan Paul of Ars Technica&lt;/a&gt;, discusses how Mozilla is &quot;&#039;getting ready to take JavaScript performance into the next tier&#039; with a radically innovative optimization tactic called tracing that has already produced performance improvements ranging between 20 and 40 times faster in some cases.&quot;&lt;/p&gt;
&lt;p&gt;The Mozilla JavaScript engine (SpiderMonkey) is what&#039;s inside the Firefox browser and the &lt;a href=&quot;http://www.aptana.com/jaxer&quot; target=&quot;_new&quot;&gt;Aptana Jaxer, Ajax server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&quot;Eich says that Mozilla wants to &#039;get people thinking about JavaScript as a more general-purpose language&#039; and show them that &#039;it really is a platform for writing full applications.&#039;&quot;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html&quot; target=&quot;_new&quot;&gt;Read the full article &amp;gt;&lt;/a&gt;&lt;/p&gt;



</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Fri, 22 Aug 2008 18:01:57 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">462 at http://aptana.com</guid>
</item>
<item>
 <title>codegobbler.com Jaxer Blog series: Jaxer.Process</title>
 <link>http://aptana.com/blog/davey/jaxer_process_api</link>
 <description>&lt;p&gt;Tom Kirkpatrick of &lt;a href=&#039;http://www.codegobbler.com/&#039;&gt;codegobbler.com&lt;/a&gt; has told us he&#039;s writing a series of articles on some of the great features in Aptana Jaxer. His &lt;a href=&#039;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&#039;&gt;most recent article&lt;a&gt; is on the new Jaxer.Process APIs that lets Jaxer interact with the operating system on the server to achieve all kinds of things.  (Yes you heard right.  That&#039;s JavaScript interacting with the operating system).&lt;/p&gt;

&lt;p&gt;Tom&#039;s &lt;a href=&#039;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&#039;&gt;simple example, complete with full source&lt;/a&gt; calls usr/bin/uptime to get the uptime, then display it in the webpage.  There&#039;s a full working demo to if you want to see the uptime of codegobbler.com&#039;s server too.&lt;/p&gt;


&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
    &lt;script runat=&quot;server-proxy&quot;&gt;
      function runUptime() {
        // run the uptime and return the output from STDOUT
        return Jaxer.Process.exec(&quot;/usr/bin/uptime&quot;);
      }
    &lt;/script&gt;
&lt;/textarea&gt;


&lt;p&gt;&lt;img src=&quot;http://www.codegobbler.com/sites/codegobbler.com/files/fckeditor/jaxer.process.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;Good work Tom! We look forward to more great stuff from codegobbler.com&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Tom Kirkpatrick of &lt;a href=&#039;http://www.codegobbler.com/&#039;&gt;codegobbler.com&lt;/a&gt; has told us he&#039;s writing a series of articles on some of the great features in Aptana Jaxer. His &lt;a href=&#039;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&#039;&gt;most recent article&lt;a&gt; is on the new Jaxer.Process APIs that lets Jaxer interact with the operating system on the server to achieve all kinds of things.  (Yes you heard right.  That&#039;s JavaScript interacting with the operating system).&lt;/p&gt;

&lt;p&gt;Tom&#039;s &lt;a href=&#039;http://www.codegobbler.com/how-execute-server-side-processes-jaxerprocess&#039;&gt;simple example, complete with full source&lt;/a&gt; calls usr/bin/uptime to get the uptime, then display it in the webpage.  There&#039;s a full working demo to if you want to see the uptime of codegobbler.com&#039;s server too.&lt;/p&gt;


&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
    &lt;script runat=&quot;server-proxy&quot;&gt;
      function runUptime() {
        // run the uptime and return the output from STDOUT
        return Jaxer.Process.exec(&quot;/usr/bin/uptime&quot;);
      }
    &lt;/script&gt;
&lt;/textarea&gt;


&lt;p&gt;&lt;img src=&quot;http://www.codegobbler.com/sites/codegobbler.com/files/fckeditor/jaxer.process.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;Good work Tom! We look forward to more great stuff from codegobbler.com&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Wed, 20 Aug 2008 12:57:06 -0500</pubDate>
 <dc:creator>davey</dc:creator>
 <guid isPermaLink="false">452 at http://aptana.com</guid>
</item>
<item>
 <title>How JavaScript is quietly taking over the world</title>
 <link>http://aptana.com/node/451</link>
 <description>&lt;p&gt;Mark Perkins, a Senior Web Developer at VGroup has summarized in &lt;a href=&quot;http://blog.vgroup.com/post/how-javascript-is-quietly-taking-over-the-world/&quot;&gt;this blog post&lt;/a&gt; the ubuiquity of JavaScript on the Web and how this dynamic language is empowering all kinds of new possibilities in applications.  From ECMAScript to ActionScript, Flash to W3C, Google and Yahoo Maps, Apple&#039;s Mobile Me, Aptana Jaxer, Rhino, Firefox, Apple Gadgets, Google Gadgets, Yahoo Gadgets, and even Vista Gadgets, and Adobe AIR, (and more), Mark highlights how JavaScript is at the core of the future of the Web not just online, but on the desktop and on mobile devices as well.
&lt;/p&gt;
&lt;p&gt;
Only thing I&#039;d add to Mark&#039;s comments is that JavaScript is set to get even faster than the already blazing improvements delivered by Mozilla Firefox and the Webkit engine that powers iPhones and Sarafi.  Projects like Tamarin and its convergence with Mozilla&#039;s SpiderMonkey (which &lt;a href=&quot;/jaxer&quot;&gt;Aptana Jaxer, the open source Ajax server&lt;/a&gt; uses) are slated to provide the equivalent of Just-In-Time (JIT) compliation of JavaScript and open even greater possibilities for greater JavaScript use.
&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Mark Perkins, a Senior Web Developer at VGroup has summarized in &lt;a href=&quot;http://blog.vgroup.com/post/how-javascript-is-quietly-taking-over-the-world/&quot;&gt;this blog post&lt;/a&gt; the ubuiquity of JavaScript on the Web and how this dynamic language is empowering all kinds of new possibilities in applications.  From ECMAScript to ActionScript, Flash to W3C, Google and Yahoo Maps, Apple&#039;s Mobile Me, Aptana Jaxer, Rhino, Firefox, Apple Gadgets, Google Gadgets, Yahoo Gadgets, and even Vista Gadgets, and Adobe AIR, (and more), Mark highlights how JavaScript is at the core of the future of the Web not just online, but on the desktop and on mobile devices as well.
&lt;/p&gt;
&lt;p&gt;
Only thing I&#039;d add to Mark&#039;s comments is that JavaScript is set to get even faster than the already blazing improvements delivered by Mozilla Firefox and the Webkit engine that powers iPhones and Sarafi.  Projects like Tamarin and its convergence with Mozilla&#039;s SpiderMonkey (which &lt;a href=&quot;/jaxer&quot;&gt;Aptana Jaxer, the open source Ajax server&lt;/a&gt; uses) are slated to provide the equivalent of Just-In-Time (JIT) compliation of JavaScript and open even greater possibilities for greater JavaScript use.
&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Thu, 14 Aug 2008 18:21:39 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">451 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer 1.0 now available in Release Candidate B</title>
 <link>http://aptana.com/blog/gmurray/jaxer_1_0_release_candidate_b</link>
 <description>&lt;p&gt;
Jaxer 1.0 is packed full of new, exciting stuff and we are proud to announce Jaxer 1.0 Release Candidate B. This is our first pre-release of Jaxer 1.0 to the general public and we are looking forward to more feedback from the Ajax community.  Jaxer 1.0 RC B has more features and capabilities than the prior Jaxer betas, and we&#039;re calling this a release candidate because the APIs are now pretty much set for what we&#039;ll have in the final 1.0 release.  So it&#039;s a great time to get started with Jaxer 1.0.  &lt;i&gt;Aptana Cloud users and nightly build users are still on Jaxer RC A until updates for those are released (soon).&lt;/i&gt;
&lt;/p&gt;
&lt;img src=&quot;/system/files/images/jaxer10serverconsole_0.jpg&quot; width=360 height=309 alt=&quot;Jaxer 1.0 Server Console&quot; align=right hspace=12&gt;
&lt;p&gt;
Jaxer 1.0 RC B is available both within Aptana Studio 1.2 (also just released) and as a standalone server.  All are open source.  The Studio download is suggested if you are new to Jaxer since Studio includes many helpful features to getting started with Jaxer including a fresh batch of Jaxer 1.0 samples. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_new&quot;&gt;&lt;b&gt;Download&lt;/b&gt; Aptana Studio with Jaxer 1.0 RC B&lt;/a&gt; &amp;mdash; or &amp;mdash; &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot; target=&quot;_new&quot;&gt;&lt;b&gt;Download&lt;/b&gt; Jaxer 1.0 RC B server&lt;/b&gt;&lt;/a&gt;.
&lt;/p&gt;



&lt;p&gt;
This release contains many new and enhanced features including:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application context settings that allowing for easier app configuration, app properties, database settings, etc...&lt;/li&gt;
&lt;li&gt;Database API enhancements with richer APIs for working with result sets. &lt;/li&gt;
&lt;li&gt;Server-side image manipulation including server-side canvas support and ability to convert to other image types.&lt;/li&gt;
&lt;li&gt;Native command execution API so that you can run system commands and handle the output from those.&lt;/li&gt;
&lt;li&gt;Asynchronous server-side JavaScript processing&lt;/b&gt; lets you implement callbacks in your server-side code too.&lt;/li&gt;
&lt;li&gt;Ability to return custom content types (e.g. json, xml, gif, html, etc...)&lt;/li&gt;
&lt;li&gt;Full control of the request/response lifecycle including setting redirects, headers, content, etc...&lt;/li&gt;
&lt;li&gt;Secure sandbox supporting cross domain calls, sandboxed JavaScript execution, META refreshes, ...&lt;/li&gt;
&lt;li&gt;Serialization support for JavaScript objects to and from XML, E4X and JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I&#039;m really excited about the ability to &lt;b&gt;return custom content types (json, gif, xml, html, etc...)&lt;/b&gt;, particularly the JSON type since the server-side is natively JavaScript.  What could be easier &amp;mdash; especially with the &lt;b&gt;enhanced serialization support for JSON&lt;/b&gt;.  And with the E4X (native XML for JavaScript) capabilities in Jaxer, returning XML types is now a piece of cake too.  This means that you can now easily use Jaxer as a JSON or XML service provider not just to Ajax clients, but also to things like Adobe Flash, Adobe Flex and Microsoft Silverlight which can consume JSON or XML and support JavaScript and XML on the client as well, a technique useful in mashups and all types of social and mobile apps.
&lt;/p&gt;

&lt;p&gt;The new &lt;b&gt;secure sandbox&lt;/b&gt; lets you load, on the server, pages from other domains and allow their JavaScript to execute without giving them access to the Jaxer API or your own server-side code, but still giving your code access to their window objects and anything inside them. While you can&#039;t see these windows (they&#039;re on the server) you can use them programmatically whether you&#039;re consuming web pages in mashups or generating them to be sent to the browser.  Uri Sarid&#039;s blog has a &lt;a href=&quot;http://www.aptana.com/blog/uri/dom_scraping_with_jaxer_part_2&quot;&gt;nice example&lt;/a&gt; using these to do &quot;DOM Scraping&quot; where you actually can execute the JS functions of the page you&#039;re consuming on the server, access its DOM and get what you need for your mashup or app.  Since Ajax is so prevalent today in web pages, being able to trigger the Ajax events server-side such that the content added via the Ajax calls is available in a server-side DOM is very handy in this case and could be applied for things like search engine optimization and accessible modes for web apps as well.
&lt;/p&gt;

&lt;p&gt;
Get all the details of what&#039;s new and what&#039;s improved in the &lt;a href=&quot;http://www.aptana.com/docs/index.php/Migrating_from_Jaxer_beta&quot; target=&quot;_new&quot;&gt;Migrating Jaxer Beta to Jaxer 1.0&lt;/a&gt; doc. 
&lt;/p&gt;
&lt;p&gt;
Jaxer 1.0 docs are in process, links to which can be found at the &lt;a href=&quot;http://www.aptana.com/jaxer&quot; target=&quot;_new&quot;&gt;Jaxer Developer Center&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
We&#039;d love your feedback on this release and your thoughts on where Jaxer should go next via the &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot; target=&quot;_new&quot;&gt;Jaxer forums&lt;/a&gt;.
&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;
Jaxer 1.0 is packed full of new, exciting stuff and we are proud to announce Jaxer 1.0 Release Candidate B. This is our first pre-release of Jaxer 1.0 to the general public and we are looking forward to more feedback from the Ajax community.  Jaxer 1.0 RC B has more features and capabilities than the prior Jaxer betas, and we&#039;re calling this a release candidate because the APIs are now pretty much set for what we&#039;ll have in the final 1.0 release.  So it&#039;s a great time to get started with Jaxer 1.0.  &lt;i&gt;Aptana Cloud users and nightly build users are still on Jaxer RC A until updates for those are released (soon).&lt;/i&gt;
&lt;/p&gt;
&lt;img src=&quot;/system/files/images/jaxer10serverconsole_0.jpg&quot; width=360 height=309 alt=&quot;Jaxer 1.0 Server Console&quot; align=right hspace=12&gt;
&lt;p&gt;
Jaxer 1.0 RC B is available both within Aptana Studio 1.2 (also just released) and as a standalone server.  All are open source.  The Studio download is suggested if you are new to Jaxer since Studio includes many helpful features to getting started with Jaxer including a fresh batch of Jaxer 1.0 samples. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.aptana.com/studio/download&quot; target=&quot;_new&quot;&gt;&lt;b&gt;Download&lt;/b&gt; Aptana Studio with Jaxer 1.0 RC B&lt;/a&gt; &amp;mdash; or &amp;mdash; &lt;a href=&quot;http://www.aptana.com/jaxer/download&quot; target=&quot;_new&quot;&gt;&lt;b&gt;Download&lt;/b&gt; Jaxer 1.0 RC B server&lt;/b&gt;&lt;/a&gt;.
&lt;/p&gt;



&lt;p&gt;
This release contains many new and enhanced features including:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application context settings that allowing for easier app configuration, app properties, database settings, etc...&lt;/li&gt;
&lt;li&gt;Database API enhancements with richer APIs for working with result sets. &lt;/li&gt;
&lt;li&gt;Server-side image manipulation including server-side canvas support and ability to convert to other image types.&lt;/li&gt;
&lt;li&gt;Native command execution API so that you can run system commands and handle the output from those.&lt;/li&gt;
&lt;li&gt;Asynchronous server-side JavaScript processing&lt;/b&gt; lets you implement callbacks in your server-side code too.&lt;/li&gt;
&lt;li&gt;Ability to return custom content types (e.g. json, xml, gif, html, etc...)&lt;/li&gt;
&lt;li&gt;Full control of the request/response lifecycle including setting redirects, headers, content, etc...&lt;/li&gt;
&lt;li&gt;Secure sandbox supporting cross domain calls, sandboxed JavaScript execution, META refreshes, ...&lt;/li&gt;
&lt;li&gt;Serialization support for JavaScript objects to and from XML, E4X and JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I&#039;m really excited about the ability to &lt;b&gt;return custom content types (json, gif, xml, html, etc...)&lt;/b&gt;, particularly the JSON type since the server-side is natively JavaScript.  What could be easier &amp;mdash; especially with the &lt;b&gt;enhanced serialization support for JSON&lt;/b&gt;.  And with the E4X (native XML for JavaScript) capabilities in Jaxer, returning XML types is now a piece of cake too.  This means that you can now easily use Jaxer as a JSON or XML service provider not just to Ajax clients, but also to things like Adobe Flash, Adobe Flex and Microsoft Silverlight which can consume JSON or XML and support JavaScript and XML on the client as well, a technique useful in mashups and all types of social and mobile apps.
&lt;/p&gt;

&lt;p&gt;The new &lt;b&gt;secure sandbox&lt;/b&gt; lets you load, on the server, pages from other domains and allow their JavaScript to execute without giving them access to the Jaxer API or your own server-side code, but still giving your code access to their window objects and anything inside them. While you can&#039;t see these windows (they&#039;re on the server) you can use them programmatically whether you&#039;re consuming web pages in mashups or generating them to be sent to the browser.  Uri Sarid&#039;s blog has a &lt;a href=&quot;http://www.aptana.com/blog/uri/dom_scraping_with_jaxer_part_2&quot;&gt;nice example&lt;/a&gt; using these to do &quot;DOM Scraping&quot; where you actually can execute the JS functions of the page you&#039;re consuming on the server, access its DOM and get what you need for your mashup or app.  Since Ajax is so prevalent today in web pages, being able to trigger the Ajax events server-side such that the content added via the Ajax calls is available in a server-side DOM is very handy in this case and could be applied for things like search engine optimization and accessible modes for web apps as well.
&lt;/p&gt;

&lt;p&gt;
Get all the details of what&#039;s new and what&#039;s improved in the &lt;a href=&quot;http://www.aptana.com/docs/index.php/Migrating_from_Jaxer_beta&quot; target=&quot;_new&quot;&gt;Migrating Jaxer Beta to Jaxer 1.0&lt;/a&gt; doc. 
&lt;/p&gt;
&lt;p&gt;
Jaxer 1.0 docs are in process, links to which can be found at the &lt;a href=&quot;http://www.aptana.com/jaxer&quot; target=&quot;_new&quot;&gt;Jaxer Developer Center&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
We&#039;d love your feedback on this release and your thoughts on where Jaxer should go next via the &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot; target=&quot;_new&quot;&gt;Jaxer forums&lt;/a&gt;.
&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 01 Aug 2008 12:23:16 -0500</pubDate>
 <dc:creator>gmurray</dc:creator>
 <guid isPermaLink="false">436 at http://aptana.com</guid>
</item>
<item>
 <title>DOM Scraping Part 2: Now with Jaxer 1.0</title>
 <link>http://aptana.com/blog/uri/dom_scraping_with_jaxer_part_2</link>
 <description>&lt;p&gt;We&#039;re finalizing our Jaxer 1.0 release, and I thought I&#039;d go back to Paul&#039;s &lt;a href=&quot;http://www.aptana.com/node/339&quot;&gt;&#039;DOM Scraping&#039; example&lt;/a&gt; and see what Jaxer 1.0 has to offer. &lt;/p&gt;

&lt;p&gt;A main new feature is Jaxer.Sandbox, which lets you open new server-side sandboxed &#039;windows&#039; and load pages into them. You can GET a page from any url, or even POST some content and load back the response. You can control whether JavaScript is executed in the window, whether it honors meta refreshes, whether it loads synchronously or asynchronously, etc. And, most important, the window and its contents have no access to Jaxer and its APIs nor to your app &amp;mdash; but your app has full access to it.&lt;/p&gt;

&lt;p&gt;There&#039;s a lot of other new goodness in Jaxer 1.0, as well as the official released version of the Mozilla engine found in Firefox 3. So for example getElementsByClassName is natively implemented (see &lt;a href=&quot;http://ejohn.org/blog/getelementsbyclassname-speed-comparison/&quot;&gt;John Resig&#039;s speed comparison&lt;/a&gt;), in addition to the other Mozilla features such as built-in &lt;a href=&quot;http://developer.mozilla.org/en/docs/XPath&quot;&gt;XPath&lt;/a&gt; functionality and a very robust &lt;a href=&quot;http://developer.mozilla.org/en/docs/Gecko_DOM_Reference&quot;&gt;DOM feature set&lt;/a&gt; &amp;mdash; just what you need for some serious &#039;screen scraping&#039;, mashups, and content repurposing.&lt;/p&gt;

&lt;p&gt;Let&#039;s see it in action. First, let&#039;s grab the same three pages Paul used and extract some choice content elements into our page before sending it to the browser. We&#039;ll reuse the same Jaxer.Sandbox instance three times, each time loading a different page into it and grabbing some content by id or by classname. The page is basically a single script block:
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;DOM Scraping 1.0&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;script runat=&quot;server&quot;&gt;
			...all code here...
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;
containing the following server-side JavaScript:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
var sandbox = new Jaxer.Sandbox();
var item, contents;
		
sandbox.open(&quot;http://www.news.com/&quot;);
contents = sandbox.document.getElementById(&quot;mostPopStories&quot;);
addToPage(&quot;News.com Popular Stories&quot;, contents);
			
sandbox.open(&quot;http://www.washingtonpost.com/&quot;);
contents = sandbox.document.getElementsByClassName(&quot;top-box-in&quot;);
addToPage(&quot;Washington Post&quot;, contents);
			
sandbox.open(&quot;http://ajaxian.com&quot;);
contents = sandbox.document.getElementsByClassName(&quot;activitystream&quot;);
addToPage(&quot;Ajaxian&quot;, contents);
&lt;/textarea&gt;
and a single helper function that adds the given contents from the sandbox to the current page:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);

	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);

	if (!(contents instanceof HTMLElement))  contents  = contents[0];
	div.appendChild(document.importNode(contents, true));

	document.body.appendChild(div);
}
&lt;/textarea&gt;
&lt;/p&gt;

&lt;p&gt;Here&#039;s the resulting page:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/system/files/DOM+Scraping+part+2+-+1.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;That&#039;s not too bad, but the timestamps on the News.com section don&#039;t look good, and there are a bunch of JavaScript errors on the browser from left-over JavaScript content that was in the original WashingtonPost.com page. We can quickly clean that up with another, tiny DOM helper function that removes any DOM NodeList you pass to it. And while we&#039;re at it we&#039;ll also remove the reference to the client-side Jaxer framework since we won&#039;t be needing it here. The script block becomes:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
var sandbox = new Jaxer.Sandbox();
var item, contents, container;

sandbox.open(&quot;http://www.news.com/&quot;);
contents = sandbox.document.getElementById(&quot;mostPopStories&quot;);
container = addToPage(&quot;News.com Popular Stories&quot;, contents);
// Remove the timestamps on each item
removeNodeList(container.getElementsByClassName(&quot;datestamp&quot;));

sandbox.open(&quot;http://www.washingtonpost.com/&quot;);
contents = sandbox.document.getElementsByClassName(&quot;top-box-in&quot;);
container = addToPage(&quot;Washington Post&quot;, contents);
// Remove the script tags so they don&#039;t appear on the client
removeNodeList(container.getElementsByTagName(&quot;script&quot;));

sandbox.open(&quot;http://ajaxian.com&quot;);
contents = sandbox.document.getElementsByClassName(&quot;activitystream&quot;);
addToPage(&quot;Ajaxian&quot;, contents);

function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);
	
	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);
	
	if (!(contents instanceof HTMLElement)) contents = contents[0];
	div.appendChild(document.importNode(contents, true));
	
	document.body.appendChild(div);
	
	return div; // return the container so it can be further manipulated
}

function removeNodeList(nodeList)
{
	while (nodeList.length &gt; 0) nodeList[0].parentNode.removeChild(nodeList[0]);
}

// We won&#039;t need Jaxer client-side:
Jaxer.response.setClientFramework(null);
&lt;/textarea&gt;
&lt;/p&gt;

&lt;p&gt;Now that&#039;s much better:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/system/files/DOM+Scraping+part+2+-+2.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;But if you run this example yourself, you&#039;ll see it&#039;s slow: each of the original servers is a bit slow to load its entire page, and you have to load all three server-side before your page is ready to be sent to the browser. We could load all three in parallel, using the Jaxer.Sandbox&#039;s async capabilities and the Jaxer.Thread.waitFor() method to wait for them to load. But even then the user would see nothing in the browser until the slowest one was done loading server-side. So let&#039;s load them asynchronously client-side, by creating a server-side function called getFragment that loads a url and returns some of its contents, and setting getFragment.proxy = true so we can call it asynchronously from the client. The page now has two script blocks, one that runs on the browser and one on the server:
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;DOM Scraping 1.0&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;script&gt;
			...all client-side code here...
		&lt;/script&gt;
		&lt;script runat=&quot;server&quot;&gt;
			...all server-side code here...
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;
The client-side code is:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
// On callback, append the results to this page
function appendHTML(html)
{
	document.body.innerHTML += html;
}
// onload is used to make sure getFragment is defined before it&#039;s called:
window.onload = function() 
{
	Jaxer.Callback.TIMEOUT = 30 * 1000;
	
	getFragment.async(appendHTML, &quot;Ajaxian Activity Stream&quot;, &quot;http://ajaxian.com&quot;, true, &quot;activitystream&quot;);

	getFragment.async(appendHTML, &quot;News.com Popular Stories&quot;, &quot;http://www.news.com/&quot;, false, &quot;mostPopStories&quot;, &quot;datestamp&quot;);

	getFragment.async(appendHTML, &quot;Washington Post&quot;, &quot;http://www.washingtonpost.com/&quot;, true, &quot;top-box-in&quot;);
}
&lt;/textarea&gt;
and the server-side code is:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
// Gets a fragment of the remote page&#039;s HTML, after some cleanup
function getFragment(title, url, isClassName, identifier, classesToRemove)
{
	var sandbox = new Jaxer.Sandbox(url);
	var contents = sandbox.document[isClassName ? &#039;getElementsByClassName&#039; : &#039;getElementById&#039;](identifier);
	var container = addToPage(title, contents);
	if (classesToRemove)
	{
		if (typeof classesToRemove == &quot;string&quot;) classesToRemove = [classesToRemove];
		classesToRemove.forEach(function(className)
		{
			removeNodeList(container.getElementsByClassName(className));
		});
	}
	return container.innerHTML;
}
getFragment.proxy = true;

function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);

	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);

	if (!(contents instanceof HTMLElement)) contents = contents[0];
	div.appendChild(document.importNode(contents, true));

	document.body.appendChild(div);
	
	return div;
}

function removeNodeList(nodeList)
{
	while (nodeList.length &gt; 0) nodeList[0].parentNode.removeChild(nodeList[0]);
}
&lt;/textarea&gt;
The result looks the same as the previous screenshot, but the order in which the sections are displayed may vary, depending on which remote server responds first.&lt;/p&gt;</description>
 <content:encoded>&lt;p&gt;We&#039;re finalizing our Jaxer 1.0 release, and I thought I&#039;d go back to Paul&#039;s &lt;a href=&quot;http://www.aptana.com/node/339&quot;&gt;&#039;DOM Scraping&#039; example&lt;/a&gt; and see what Jaxer 1.0 has to offer. &lt;/p&gt;

&lt;p&gt;A main new feature is Jaxer.Sandbox, which lets you open new server-side sandboxed &#039;windows&#039; and load pages into them. You can GET a page from any url, or even POST some content and load back the response. You can control whether JavaScript is executed in the window, whether it honors meta refreshes, whether it loads synchronously or asynchronously, etc. And, most important, the window and its contents have no access to Jaxer and its APIs nor to your app &amp;mdash; but your app has full access to it.&lt;/p&gt;

&lt;p&gt;There&#039;s a lot of other new goodness in Jaxer 1.0, as well as the official released version of the Mozilla engine found in Firefox 3. So for example getElementsByClassName is natively implemented (see &lt;a href=&quot;http://ejohn.org/blog/getelementsbyclassname-speed-comparison/&quot;&gt;John Resig&#039;s speed comparison&lt;/a&gt;), in addition to the other Mozilla features such as built-in &lt;a href=&quot;http://developer.mozilla.org/en/docs/XPath&quot;&gt;XPath&lt;/a&gt; functionality and a very robust &lt;a href=&quot;http://developer.mozilla.org/en/docs/Gecko_DOM_Reference&quot;&gt;DOM feature set&lt;/a&gt; &amp;mdash; just what you need for some serious &#039;screen scraping&#039;, mashups, and content repurposing.&lt;/p&gt;

&lt;p&gt;Let&#039;s see it in action. First, let&#039;s grab the same three pages Paul used and extract some choice content elements into our page before sending it to the browser. We&#039;ll reuse the same Jaxer.Sandbox instance three times, each time loading a different page into it and grabbing some content by id or by classname. The page is basically a single script block:
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;DOM Scraping 1.0&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;script runat=&quot;server&quot;&gt;
			...all code here...
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;
containing the following server-side JavaScript:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
var sandbox = new Jaxer.Sandbox();
var item, contents;
		
sandbox.open(&quot;http://www.news.com/&quot;);
contents = sandbox.document.getElementById(&quot;mostPopStories&quot;);
addToPage(&quot;News.com Popular Stories&quot;, contents);
			
sandbox.open(&quot;http://www.washingtonpost.com/&quot;);
contents = sandbox.document.getElementsByClassName(&quot;top-box-in&quot;);
addToPage(&quot;Washington Post&quot;, contents);
			
sandbox.open(&quot;http://ajaxian.com&quot;);
contents = sandbox.document.getElementsByClassName(&quot;activitystream&quot;);
addToPage(&quot;Ajaxian&quot;, contents);
&lt;/textarea&gt;
and a single helper function that adds the given contents from the sandbox to the current page:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);

	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);

	if (!(contents instanceof HTMLElement))  contents  = contents[0];
	div.appendChild(document.importNode(contents, true));

	document.body.appendChild(div);
}
&lt;/textarea&gt;
&lt;/p&gt;

&lt;p&gt;Here&#039;s the resulting page:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/system/files/DOM+Scraping+part+2+-+1.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;That&#039;s not too bad, but the timestamps on the News.com section don&#039;t look good, and there are a bunch of JavaScript errors on the browser from left-over JavaScript content that was in the original WashingtonPost.com page. We can quickly clean that up with another, tiny DOM helper function that removes any DOM NodeList you pass to it. And while we&#039;re at it we&#039;ll also remove the reference to the client-side Jaxer framework since we won&#039;t be needing it here. The script block becomes:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
var sandbox = new Jaxer.Sandbox();
var item, contents, container;

sandbox.open(&quot;http://www.news.com/&quot;);
contents = sandbox.document.getElementById(&quot;mostPopStories&quot;);
container = addToPage(&quot;News.com Popular Stories&quot;, contents);
// Remove the timestamps on each item
removeNodeList(container.getElementsByClassName(&quot;datestamp&quot;));

sandbox.open(&quot;http://www.washingtonpost.com/&quot;);
contents = sandbox.document.getElementsByClassName(&quot;top-box-in&quot;);
container = addToPage(&quot;Washington Post&quot;, contents);
// Remove the script tags so they don&#039;t appear on the client
removeNodeList(container.getElementsByTagName(&quot;script&quot;));

sandbox.open(&quot;http://ajaxian.com&quot;);
contents = sandbox.document.getElementsByClassName(&quot;activitystream&quot;);
addToPage(&quot;Ajaxian&quot;, contents);

function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);
	
	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);
	
	if (!(contents instanceof HTMLElement)) contents = contents[0];
	div.appendChild(document.importNode(contents, true));
	
	document.body.appendChild(div);
	
	return div; // return the container so it can be further manipulated
}

function removeNodeList(nodeList)
{
	while (nodeList.length &gt; 0) nodeList[0].parentNode.removeChild(nodeList[0]);
}

// We won&#039;t need Jaxer client-side:
Jaxer.response.setClientFramework(null);
&lt;/textarea&gt;
&lt;/p&gt;

&lt;p&gt;Now that&#039;s much better:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.aptana.com/system/files/DOM+Scraping+part+2+-+2.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;But if you run this example yourself, you&#039;ll see it&#039;s slow: each of the original servers is a bit slow to load its entire page, and you have to load all three server-side before your page is ready to be sent to the browser. We could load all three in parallel, using the Jaxer.Sandbox&#039;s async capabilities and the Jaxer.Thread.waitFor() method to wait for them to load. But even then the user would see nothing in the browser until the slowest one was done loading server-side. So let&#039;s load them asynchronously client-side, by creating a server-side function called getFragment that loads a url and returns some of its contents, and setting getFragment.proxy = true so we can call it asynchronously from the client. The page now has two script blocks, one that runs on the browser and one on the server:
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;DOM Scraping 1.0&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;script&gt;
			...all client-side code here...
		&lt;/script&gt;
		&lt;script runat=&quot;server&quot;&gt;
			...all server-side code here...
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;
The client-side code is:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
// On callback, append the results to this page
function appendHTML(html)
{
	document.body.innerHTML += html;
}
// onload is used to make sure getFragment is defined before it&#039;s called:
window.onload = function() 
{
	Jaxer.Callback.TIMEOUT = 30 * 1000;
	
	getFragment.async(appendHTML, &quot;Ajaxian Activity Stream&quot;, &quot;http://ajaxian.com&quot;, true, &quot;activitystream&quot;);

	getFragment.async(appendHTML, &quot;News.com Popular Stories&quot;, &quot;http://www.news.com/&quot;, false, &quot;mostPopStories&quot;, &quot;datestamp&quot;);

	getFragment.async(appendHTML, &quot;Washington Post&quot;, &quot;http://www.washingtonpost.com/&quot;, true, &quot;top-box-in&quot;);
}
&lt;/textarea&gt;
and the server-side code is:
&lt;textarea name=&quot;code&quot; class=&quot;JavaScript&quot;&gt;
// Gets a fragment of the remote page&#039;s HTML, after some cleanup
function getFragment(title, url, isClassName, identifier, classesToRemove)
{
	var sandbox = new Jaxer.Sandbox(url);
	var contents = sandbox.document[isClassName ? &#039;getElementsByClassName&#039; : &#039;getElementById&#039;](identifier);
	var container = addToPage(title, contents);
	if (classesToRemove)
	{
		if (typeof classesToRemove == &quot;string&quot;) classesToRemove = [classesToRemove];
		classesToRemove.forEach(function(className)
		{
			removeNodeList(container.getElementsByClassName(className));
		});
	}
	return container.innerHTML;
}
getFragment.proxy = true;

function addToPage(title, contents)
{
	var div = document.createElement(&#039;div&#039;);

	var h2 = document.createElement(&#039;h2&#039;);
	h2.innerHTML = title;
	div.appendChild(h2);

	if (!(contents instanceof HTMLElement)) contents = contents[0];
	div.appendChild(document.importNode(contents, true));

	document.body.appendChild(div);
	
	return div;
}

function removeNodeList(nodeList)
{
	while (nodeList.length &gt; 0) nodeList[0].parentNode.removeChild(nodeList[0]);
}
&lt;/textarea&gt;
The result looks the same as the previous screenshot, but the order in which the sections are displayed may vary, depending on which remote server responds first.&lt;/p&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Wed, 30 Jul 2008 01:52:07 -0500</pubDate>
 <dc:creator>uri</dc:creator>
 <guid isPermaLink="false">429 at http://aptana.com</guid>
</item>
<item>
 <title>Ajax gurus Greg Murray, Ryan Johnson join Aptana</title>
 <link>http://aptana.com/blog/pcolton/ajax_gurus_join_aptana</link>
 <description>&lt;p&gt;We are pleased to announce that Greg Murray (creator of the jMaki Ajax framework, former Ajax architect for Sun Microsystems, Sun NetBeans IDE team member and lead on the Java Servlet 2.5 specification) and Ryan Johnson (creator of the livepipe and object.event Ajax libraries) have joined the Aptana Jaxer team!&lt;/p&gt;
&lt;p&gt;Greg&#039;s primary role will be creating increasingly robust application frameworks for &lt;a href=&quot;http://www.aptana.com/jaxer&quot;&gt;Jaxer&lt;/a&gt;, Aptana&#039;s open source Ajax server product. Ryan has already been working on MVC concepts for Jaxer and will be collaborating with Greg and the rest of the Jaxer team to drive that and other great concepts for Jaxer forward.  &lt;/p&gt;
&lt;p&gt;The timing could not be better. Greg and Ryan have joined up just before we get the Jaxer 1.0 release candidate out the door to the whole community (it&#039;s just a matter of days now). This puts us in a great position to start working on some of the next things that&#039;ll be in store for Jaxer in the coming months -- and there are some great ideas brewing.  For example, Greg and Ryan have already been collaborating with the Jaxer team to create an ActiveRecord-like JavaScript ORM for Jaxer that promises to make working with JavaScript data a pleasure -- since it&#039;ll all be native JavaScript!  Dion Almaer and others in the community have been &lt;a href=&quot;http://forums.aptana.com/viewforum.php?f=42&quot;&gt;championing this idea&lt;/a&gt; as well. Now we&#039;re doing it!  Of course Greg and Ryan are both deeply involved in the Ajax community in their own ways as well:  Greg with the jMaki project and Ryan with Dynamic Reach and his active role in the Prototype community.  So be on the lookout for blog posts from Greg and Ryan to keep abreast of all the stuff they&#039;ll be up to here at Aptana.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;We are pleased to announce that Greg Murray (creator of the jMaki Ajax framework, former Ajax architect for Sun Microsystems, Sun NetBeans IDE team member and lead on the Java Servlet 2.5 specification) and Ryan Johnson (creator of the livepipe and object.event Ajax libraries) have joined the Aptana Jaxer team!&lt;/p&gt;
&lt;p&gt;Greg&#039;s primary role will be creating increasingly robust application frameworks for &lt;a href=&quot;http://www.aptana.com/jaxer&quot;&gt;Jaxer&lt;/a&gt;, Aptana&#039;s open source Ajax server product. Ryan has already been working on MVC concepts for Jaxer and will be collaborating with Greg and the rest of the Jaxer team to drive that and other great concepts for Jaxer forward.  &lt;/p&gt;
&lt;p&gt;The timing could not be better. Greg and Ryan have joined up just before we get the Jaxer 1.0 release candidate out the door to the whole community (it&#039;s just a matter of days now). This puts us in a great position to start working on some of the next things that&#039;ll be in store for Jaxer in the coming months -- and there are some great ideas brewing.  For example, Greg and Ryan have already been collaborating with the Jaxer team to create an ActiveRecord-like JavaScript ORM for Jaxer that promises to make working with JavaScript data a pleasure -- since it&#039;ll all be native JavaScript!  Dion Almaer and others in the community have been &lt;a href=&quot;http://forums.aptana.com/viewforum.php?f=42&quot;&gt;championing this idea&lt;/a&gt; as well. Now we&#039;re doing it!  Of course Greg and Ryan are both deeply involved in the Ajax community in their own ways as well:  Greg with the jMaki project and Ryan with Dynamic Reach and his active role in the Prototype community.  So be on the lookout for blog posts from Greg and Ryan to keep abreast of all the stuff they&#039;ll be up to here at Aptana.&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Sun, 27 Jul 2008 17:38:40 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">414 at http://aptana.com</guid>
</item>
<item>
 <title>New Beta: Aptana Studio v.1.1.7</title>
 <link>http://aptana.com/node/413</link>
 <description>&lt;p&gt;This beta is for two groups: People who want to try Jaxer RC 1.0, and, People using Eclipse 3.4 who want to test updated Studio compatibility.&lt;/p&gt;

&lt;p&gt;Existing Studio users:&lt;br /&gt;
Use policy file http://beta.aptana.com/php/3.2/policy.xml, then perform a normal update.&lt;/p&gt;

&lt;p&gt;Eclipse 3.4 users:&lt;br /&gt;

Follow the instructions at &lt;a href=&quot;http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration&quot;&gt;Plugging Aptana into an existing Eclipse configuration&lt;/a&gt; and use http://beta.aptana.com/php/studio/3.2/ as the update site.&lt;/p&gt;

&lt;b&gt;Related:&lt;/b&gt; &lt;a href=&quot;http://www.aptana.com/docs/index.php/Changing_the_update_type_of_your_Aptana_Studio_and_Specifying_a_Policy_URL&quot;&gt;Changing the update type of your Aptana Studio and Specifying a Policy URL&lt;/a&gt;

&lt;p&gt;
&lt;b&gt;New in Studio&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;New version of Jaxer&lt;/li&gt;
&lt;li&gt;Eclipse 3.4 compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;New in Jaxer&lt;/b&gt;&lt;br /&gt;
&lt;p&gt;(For more complete list, see &lt;a href=&quot;http://www.aptana.com/docs/index.php/Migrating_from_Jaxer_beta&quot;&gt;Migrating from Jaxer beta&lt;/a&gt;.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server-side image loading&lt;/li&gt;
&lt;li&gt;JaxerManager/Logging through a single central process&lt;/li&gt;
&lt;li&gt;App management through a new apps subsystem along with more convenient defaults&lt;/li&gt;
&lt;li&gt;Support for native (operating system) process execution&lt;/li&gt;
&lt;li&gt;Simplified state (session-like) containers&lt;/li&gt;
&lt;/ul&gt;</description>
 <content:encoded>&lt;p&gt;This beta is for two groups: People who want to try Jaxer RC 1.0, and, People using Eclipse 3.4 who want to test updated Studio compatibility.&lt;/p&gt;

&lt;p&gt;Existing Studio users:&lt;br /&gt;
Use policy file http://beta.aptana.com/php/3.2/policy.xml, then perform a normal update.&lt;/p&gt;

&lt;p&gt;Eclipse 3.4 users:&lt;br /&gt;

Follow the instructions at &lt;a href=&quot;http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration&quot;&gt;Plugging Aptana into an existing Eclipse configuration&lt;/a&gt; and use http://beta.aptana.com/php/studio/3.2/ as the update site.&lt;/p&gt;

&lt;b&gt;Related:&lt;/b&gt; &lt;a href=&quot;http://www.aptana.com/docs/index.php/Changing_the_update_type_of_your_Aptana_Studio_and_Specifying_a_Policy_URL&quot;&gt;Changing the update type of your Aptana Studio and Specifying a Policy URL&lt;/a&gt;

&lt;p&gt;
&lt;b&gt;New in Studio&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;New version of Jaxer&lt;/li&gt;
&lt;li&gt;Eclipse 3.4 compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;New in Jaxer&lt;/b&gt;&lt;br /&gt;
&lt;p&gt;(For more complete list, see &lt;a href=&quot;http://www.aptana.com/docs/index.php/Migrating_from_Jaxer_beta&quot;&gt;Migrating from Jaxer beta&lt;/a&gt;.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server-side image loading&lt;/li&gt;
&lt;li&gt;JaxerManager/Logging through a single central process&lt;/li&gt;
&lt;li&gt;App management through a new apps subsystem along with more convenient defaults&lt;/li&gt;
&lt;li&gt;Support for native (operating system) process execution&lt;/li&gt;
&lt;li&gt;Simplified state (session-like) containers&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Thu, 24 Jul 2008 18:01:07 -0500</pubDate>
 <dc:creator>blazar</dc:creator>
 <guid isPermaLink="false">413 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer and .NET: Image Rotation Example using C# and JS</title>
 <link>http://aptana.com/blog/pcolton/jaxer_and_dot_net</link>
 <description>One of our users asked about extending Jaxer to do some image processing. He wanted to extend Jaxer using a language he had been already using for some of his back-end work, in this case, Microsoft&#039;s C# language which is part of .NET.

&lt;p&gt;

I quickly launched my VMWare Fusion into Vista, gulp, and proceeded to run Microsoft&#039;s Visual Studio 2008. This posting won&#039;t be a tutorial on how to write C#, but i&#039;ll just go over some of the basics of setting up a simple C#-based COM object that can be used from within Jaxer.

&lt;p&gt;

The first thing to note is that to register COM objects in Vista, you need to be Administrator, so just launch Visual Studio as Administrator using the right-click menu &#039;Run as Administrator&#039;. Once you have Visual Studio running, start by creating a new &#039;Class Library&#039; project.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/CreateProj.png&quot;&gt;

&lt;p&gt;

Once you&#039;ve created the project, right-click on the project and go to the Properties menu, we&#039;ll want to make this object a COM-visible one.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/AdjustProps.png&quot;&gt;

&lt;p&gt;

In the &#039;Build&#039; section of the properties, scroll to the bottom and check the &#039;Register for COM Interop&#039; checkbox. This will make your object visible to other languages as a COM object.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/RegisterForCOM.png&quot;&gt;

&lt;p&gt;

The next thing you&#039;ll need to do is open your &#039;AssemblyInfo.cs&#039; file, which is usually in your Properties folder of your project. Be sure to change the &#039;false&#039; value to &#039;true&#039; for the &#039;ComVisible&#039; setting:

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/ComVisible.png&quot;&gt;

&lt;p&gt;

Now that you&#039;ve done that, you can just create a COM object the &#039;usual&#039; way. The complete project is attached, so you can take a look there. The image processing code was borrowed from the following online tutorial: http://blog.paranoidferret.com/index.php/2007/06/13/csharp-tutorial-image-editing-rotate/

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/COMObject.png&quot;&gt;

&lt;p&gt;

Once you&#039;ve got your object compiled, using it from within Jaxer is super-easy! You can just use the COMObject function to create a wrapped instance of the native object and then just use functions and properties on it just as if it were native JavaScript.

&lt;p&gt;

So here is the very short HTML file and JavaScript code running server-side via Jaxer that creates the COM object, loads our image, rotates it via the input field in the HTML form, and then saves it back as a new image. The communications from JS to .NET happens very quickly and as you can see, was super-simple to set up.

&lt;p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;html&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&lt;html&gt;
     &lt;body&gt;
         &lt;script runat=&quot;server-proxy&quot;&gt;

             function rotate(angle)
             {
                 var img = COMObject(&quot;ImageProcessor.ImageProcessing&quot;);

                 img.LoadImage(Jaxer.request.documentRoot + &quot;/photo.jpg&quot;);
                 img.RotateImage(angle);
                 img.SaveImage(Jaxer.request.documentRoot + &quot;/new.jpg&quot;);
             }

         &lt;/script&gt;
         &lt;input id=&quot;angle&quot;&gt;
         &lt;input type=&quot;button&quot; value=&quot;Rotate&quot;
                        onclick=&quot;rotate(document.getElementById(&#039;angle&#039;).value);
                                document.getElementById(&#039;img&#039;).src =
                                document.getElementById(&#039;img&#039;).src + &#039;?&#039; + new Date()&quot;&gt;
         &lt;br/&gt;
         &lt;img id=&#039;img&#039; src=&quot;new.jpg&quot;&gt;
     &lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;

&lt;p&gt;

Here&#039;s a screenshot of the image being rotated:

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/Final.png&quot;&gt;

&lt;p&gt;

What&#039;s really cool is that you can write anything you like in C#/VB.NET and easily access it via JavaScript in Jaxer. Note how in my sample, the onclick event for the button calls the server-side JavaScript function directly, which in turn calls the .NET COM object. That is, you can bind browser-side buttons directly to back-end .NET COM objects, all in JavaScript through Jaxer!

</description>
 <content:encoded>One of our users asked about extending Jaxer to do some image processing. He wanted to extend Jaxer using a language he had been already using for some of his back-end work, in this case, Microsoft&#039;s C# language which is part of .NET.

&lt;p&gt;

I quickly launched my VMWare Fusion into Vista, gulp, and proceeded to run Microsoft&#039;s Visual Studio 2008. This posting won&#039;t be a tutorial on how to write C#, but i&#039;ll just go over some of the basics of setting up a simple C#-based COM object that can be used from within Jaxer.

&lt;p&gt;

The first thing to note is that to register COM objects in Vista, you need to be Administrator, so just launch Visual Studio as Administrator using the right-click menu &#039;Run as Administrator&#039;. Once you have Visual Studio running, start by creating a new &#039;Class Library&#039; project.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/CreateProj.png&quot;&gt;

&lt;p&gt;

Once you&#039;ve created the project, right-click on the project and go to the Properties menu, we&#039;ll want to make this object a COM-visible one.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/AdjustProps.png&quot;&gt;

&lt;p&gt;

In the &#039;Build&#039; section of the properties, scroll to the bottom and check the &#039;Register for COM Interop&#039; checkbox. This will make your object visible to other languages as a COM object.

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/RegisterForCOM.png&quot;&gt;

&lt;p&gt;

The next thing you&#039;ll need to do is open your &#039;AssemblyInfo.cs&#039; file, which is usually in your Properties folder of your project. Be sure to change the &#039;false&#039; value to &#039;true&#039; for the &#039;ComVisible&#039; setting:

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/ComVisible.png&quot;&gt;

&lt;p&gt;

Now that you&#039;ve done that, you can just create a COM object the &#039;usual&#039; way. The complete project is attached, so you can take a look there. The image processing code was borrowed from the following online tutorial: http://blog.paranoidferret.com/index.php/2007/06/13/csharp-tutorial-image-editing-rotate/

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/COMObject.png&quot;&gt;

&lt;p&gt;

Once you&#039;ve got your object compiled, using it from within Jaxer is super-easy! You can just use the COMObject function to create a wrapped instance of the native object and then just use functions and properties on it just as if it were native JavaScript.

&lt;p&gt;

So here is the very short HTML file and JavaScript code running server-side via Jaxer that creates the COM object, loads our image, rotates it via the input field in the HTML form, and then saves it back as a new image. The communications from JS to .NET happens very quickly and as you can see, was super-simple to set up.

&lt;p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;html&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&lt;html&gt;
     &lt;body&gt;
         &lt;script runat=&quot;server-proxy&quot;&gt;

             function rotate(angle)
             {
                 var img = COMObject(&quot;ImageProcessor.ImageProcessing&quot;);

                 img.LoadImage(Jaxer.request.documentRoot + &quot;/photo.jpg&quot;);
                 img.RotateImage(angle);
                 img.SaveImage(Jaxer.request.documentRoot + &quot;/new.jpg&quot;);
             }

         &lt;/script&gt;
         &lt;input id=&quot;angle&quot;&gt;
         &lt;input type=&quot;button&quot; value=&quot;Rotate&quot;
                        onclick=&quot;rotate(document.getElementById(&#039;angle&#039;).value);
                                document.getElementById(&#039;img&#039;).src =
                                document.getElementById(&#039;img&#039;).src + &#039;?&#039; + new Date()&quot;&gt;
         &lt;br/&gt;
         &lt;img id=&#039;img&#039; src=&quot;new.jpg&quot;&gt;
     &lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;

&lt;p&gt;

Here&#039;s a screenshot of the image being rotated:

&lt;p&gt;

&lt;img src=&quot;http://aptana.com/system/files/Final.png&quot;&gt;

&lt;p&gt;

What&#039;s really cool is that you can write anything you like in C#/VB.NET and easily access it via JavaScript in Jaxer. Note how in my sample, the onclick event for the button calls the server-side JavaScript function directly, which in turn calls the .NET COM object. That is, you can bind browser-side buttons directly to back-end .NET COM objects, all in JavaScript through Jaxer!

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <enclosure url="http://aptana.com/system/files/MyCOMObject_0.zip" length="15522" type="application/zip" />
 <pubDate>Thu, 03 Jul 2008 17:02:03 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">403 at http://aptana.com</guid>
</item>
<item>
 <title>Hybrid Ajax / Flex Apps.  Are You Getting Better Fuel Efficiency?</title>
 <link>http://aptana.com/node/402</link>
 <description>&lt;p&gt;
There are some interesting threads going on in the Aptana Forums about &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=965&amp;highlight=flex&quot; target=&quot;_new&quot;&gt;using Aptana Studio with Adobe Flex and Flex Builder&lt;/a&gt;.  The idea of using Ajax and Flex or Flash together is not new.  &lt;a href=&quot;http://finance.google.com/finance?q=GOOG&amp;hl=en&amp;meta=hl%3Den&quot; target=&quot;_new&quot;&gt;Google Finance&lt;/a&gt; did a great job a few years ago blending the two to provide a very nice user experience with Flash-based interactive charts within an otherwise Ajax UI.  
&lt;p&gt;
It seems that the Aptana community is uncovering increasing efficiencies in using Aptana Studio and Adobe&#039;s Flex Builder together.  We&#039;ve also known that many Adobe AIR users are building their Ajax apps for AIR using Aptana Studio, and have heard from others that using Aptana Jaxer to create JSON data services (written natively in JavaScript) consumable by Flash and Flex apps makes a lot of sense as well.  Flash and Flex each have an &quot;&lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Special:Search?search=Ajax+Bridge&quot; target=&quot;_new&quot;&gt;Ajax bridge&lt;/a&gt;&quot; to expose JavaScript APIs for the embedded objects.  
&lt;p&gt;
Anyways... It seems Adobe is now actively taking a deeper look at this trend in the hybridization of Ajax and Flash and Flex.  I saw that they are offering $75 bucks for an hour phone call to discuss your experience with and thoughts on using these together. 
&lt;p&gt;
Here&#039;s the link if you&#039;re interested: &lt;a href=&quot;http://www.adobe.com/go/RIAintegration_study/&quot; target=&quot;_new&quot;&gt;http://www.adobe.com/go/RIAintegration_study/&lt;/a&gt;.  $75 bucks... That&#039;s almost the cost of a tank of gas in San Francisco.
</description>
 <content:encoded>&lt;p&gt;
There are some interesting threads going on in the Aptana Forums about &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=965&amp;highlight=flex&quot; target=&quot;_new&quot;&gt;using Aptana Studio with Adobe Flex and Flex Builder&lt;/a&gt;.  The idea of using Ajax and Flex or Flash together is not new.  &lt;a href=&quot;http://finance.google.com/finance?q=GOOG&amp;hl=en&amp;meta=hl%3Den&quot; target=&quot;_new&quot;&gt;Google Finance&lt;/a&gt; did a great job a few years ago blending the two to provide a very nice user experience with Flash-based interactive charts within an otherwise Ajax UI.  
&lt;p&gt;
It seems that the Aptana community is uncovering increasing efficiencies in using Aptana Studio and Adobe&#039;s Flex Builder together.  We&#039;ve also known that many Adobe AIR users are building their Ajax apps for AIR using Aptana Studio, and have heard from others that using Aptana Jaxer to create JSON data services (written natively in JavaScript) consumable by Flash and Flex apps makes a lot of sense as well.  Flash and Flex each have an &quot;&lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Special:Search?search=Ajax+Bridge&quot; target=&quot;_new&quot;&gt;Ajax bridge&lt;/a&gt;&quot; to expose JavaScript APIs for the embedded objects.  
&lt;p&gt;
Anyways... It seems Adobe is now actively taking a deeper look at this trend in the hybridization of Ajax and Flash and Flex.  I saw that they are offering $75 bucks for an hour phone call to discuss your experience with and thoughts on using these together. 
&lt;p&gt;
Here&#039;s the link if you&#039;re interested: &lt;a href=&quot;http://www.adobe.com/go/RIAintegration_study/&quot; target=&quot;_new&quot;&gt;http://www.adobe.com/go/RIAintegration_study/&lt;/a&gt;.  $75 bucks... That&#039;s almost the cost of a tank of gas in San Francisco.
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 30 Jun 2008 15:17:51 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">402 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana surpasses 2 million Studio downloads...and we&#039;re just getting started!</title>
 <link>http://aptana.com/node/382</link>
 <description>This week Aptana shipped the 2 millionth copy of Aptana Studio!  This is a huge milestone for Aptana for which we owe a big thank you to the community -- not just for downloading Studio, but more importantly for helping make Aptana Studio the leading open source IDE in its category through your feedback, ideas, and suggestions (and for reporting bugs when they happen).  &lt;img src=&quot;/system/files/images/2million_0.jpg&quot; align=right hspace=8 vspace=8&gt;
&lt;p&gt;
&lt;h3&gt;For Open Source Developers by Open Source Developers&lt;/h3&gt;
We really see the success of Aptana products stemming from the philosophy that it&#039;s &quot;for developers by developers&quot; and our open source model help us fulfill that through rapid release cycles, nightly builds, and overall a more fluid process that&#039;s constantly taking in feedback from the community.  And what better kind of solution is there than the one the community told us to build.
&lt;p&gt;
We&#039;re continuing that philosophy now with our Aptana Cloud offering (currently in beta) as well as our support for Ruby on Rails, PHP and LAMP development, and of course app development with Ajax libraries on the client side and for those that want server-side Ajax, Aptana Jaxer, a first-of its kind open source Ajax server built around the Mozilla browser engine.  
&lt;p&gt;
&lt;h3&gt;Help us help you.  Join the Aptana Early Access Programs&lt;/h3&gt;
Cloud, PHP and Jaxer are all in active beta stages right now and you can get your hands on them &lt;a href=&quot;http://www.aptana.com/cloud&quot;&gt;through the Aptana Cloud Early Access Program&lt;/a&gt;, so it&#039;s a great time to request early access and give early feedback.  RadRails, for streamlined Ruby on Rails development is already 1.0 so feedback in the forums and the bug/enhancement system right now is best for that.  This early feedback has direct and immediate impact on what we&#039;ll ship this year.  So now is the time.  Got something you want to see in Aptana&#039;s offerings? Let us know. Get involved.  Help us help you.
</description>
 <content:encoded>This week Aptana shipped the 2 millionth copy of Aptana Studio!  This is a huge milestone for Aptana for which we owe a big thank you to the community -- not just for downloading Studio, but more importantly for helping make Aptana Studio the leading open source IDE in its category through your feedback, ideas, and suggestions (and for reporting bugs when they happen).  &lt;img src=&quot;/system/files/images/2million_0.jpg&quot; align=right hspace=8 vspace=8&gt;
&lt;p&gt;
&lt;h3&gt;For Open Source Developers by Open Source Developers&lt;/h3&gt;
We really see the success of Aptana products stemming from the philosophy that it&#039;s &quot;for developers by developers&quot; and our open source model help us fulfill that through rapid release cycles, nightly builds, and overall a more fluid process that&#039;s constantly taking in feedback from the community.  And what better kind of solution is there than the one the community told us to build.
&lt;p&gt;
We&#039;re continuing that philosophy now with our Aptana Cloud offering (currently in beta) as well as our support for Ruby on Rails, PHP and LAMP development, and of course app development with Ajax libraries on the client side and for those that want server-side Ajax, Aptana Jaxer, a first-of its kind open source Ajax server built around the Mozilla browser engine.  
&lt;p&gt;
&lt;h3&gt;Help us help you.  Join the Aptana Early Access Programs&lt;/h3&gt;
Cloud, PHP and Jaxer are all in active beta stages right now and you can get your hands on them &lt;a href=&quot;http://www.aptana.com/cloud&quot;&gt;through the Aptana Cloud Early Access Program&lt;/a&gt;, so it&#039;s a great time to request early access and give early feedback.  RadRails, for streamlined Ruby on Rails development is already 1.0 so feedback in the forums and the bug/enhancement system right now is best for that.  This early feedback has direct and immediate impact on what we&#039;ll ship this year.  So now is the time.  Got something you want to see in Aptana&#039;s offerings? Let us know. Get involved.  Help us help you.
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <pubDate>Thu, 12 Jun 2008 17:19:19 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">382 at http://aptana.com</guid>
</item>
<item>
 <title>Fun with Ext JS and Aptana Jaxer</title>
 <link>http://aptana.com/node/380</link>
 <description>Rich Waters of &lt;a href=&quot;http://extjs.com&quot; target=&quot;_new&quot;&gt;Ext JS&lt;/a&gt; has put up a  &lt;a href=&quot;http://extjs.com/blog/2008/06/10/extjs-and-jaxer/&quot; target=&quot;_new&quot;&gt;great example&lt;/a&gt; of using Ext JS server-side with Aptana Jaxer.  Check out the example and from there get the full source code to give it a go yourself.

&lt;p&gt;
&amp;quot;We can see that Jaxer lets developers leverage the hard work which has already been spent building client-side libraries on the server-side. These simple examples show off some of the true potential of utilizing the Ext JS framework on the server-side&amp;quot; says Rich.

&lt;p&gt;
The easy to follow example shows off a very simple wrapper around an Ext.data.Store and the corresponding Jaxer server code that returns JSON to a Ext JS datagrid.
&lt;p&gt;
&lt;img src=&quot;http://extjs.com/blog/images/jaxer/jaxer-grid.jpg&quot;&gt;


 </description>
 <content:encoded>Rich Waters of &lt;a href=&quot;http://extjs.com&quot; target=&quot;_new&quot;&gt;Ext JS&lt;/a&gt; has put up a  &lt;a href=&quot;http://extjs.com/blog/2008/06/10/extjs-and-jaxer/&quot; target=&quot;_new&quot;&gt;great example&lt;/a&gt; of using Ext JS server-side with Aptana Jaxer.  Check out the example and from there get the full source code to give it a go yourself.

&lt;p&gt;
&amp;quot;We can see that Jaxer lets developers leverage the hard work which has already been spent building client-side libraries on the server-side. These simple examples show off some of the true potential of utilizing the Ext JS framework on the server-side&amp;quot; says Rich.

&lt;p&gt;
The easy to follow example shows off a very simple wrapper around an Ext.data.Store and the corresponding Jaxer server code that returns JSON to a Ext JS datagrid.
&lt;p&gt;
&lt;img src=&quot;http://extjs.com/blog/images/jaxer/jaxer-grid.jpg&quot;&gt;


 </content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Wed, 11 Jun 2008 14:02:34 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">380 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Ruby on Rails book by Javier Ramirez released</title>
 <link>http://aptana.com/node/378</link>
 <description>A new Aptana RadRails book has been released. Aptana community member Javier Ramirez&#039;s &quot;Aptana RadRails: An IDE For Rails Development&quot; (Packt Publishing, May 2008) is now available. 
&lt;a href=&quot;http://www.amazon.com/Aptana-Radrails-Ide-Rails-Development/dp/1847193986&quot; target=&quot;_new&quot;&gt;Find it at Amazon&lt;/a&gt;, or &lt;a href=&quot;http://www.packtpub.com/aptana-rapid-rails-development/book&quot; target=&quot;_new&quot;&gt;direct from Packt&lt;/a&gt; (where its a tad cheaper it seems), or at &lt;a href=&quot;http://www.google.com/search?sourceid=navclient&amp;ie=UTF-8&amp;rlz=1T4LENT_enUS223__226&amp;q=Aptana+Radrails%3a+An+Ide+for+Rails+Development+&quot; target=&quot;_new&quot;&gt;other&lt;/a&gt; fine book establishments around the world! 


&lt;p&gt;
&lt;h3&gt;Here&#039;s the summary:&lt;/h3&gt;

&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51aSAQ0krCL._SL500_AA240_.jpg&quot; align=right&gt;

&lt;p&gt;
A comprehensive guide to using RadRails to develop your Ruby on Rails projects in a professional and productive manner 

&lt;ul&gt;
&lt;li&gt; Comprehensive guide to using RadRails during the whole development cycle 
&lt;li&gt; Code Assistance, Graphical Debugger, Testing, Integrated Console 
&lt;li&gt; Manage your gems, plug-ins, servers, generators, and Rake tasks 
&lt;li&gt; Rails 2.0-ready 
&lt;li&gt; Includes a chapter about Subversion and Database integration 
&lt;li&gt; Smart Code Assistants for HTML, JavaScript, and CSS 
&lt;/ul&gt;

&lt;p&gt;
Aptana RadRails is an Integrated Development Environment for Ruby on Rails projects. Built on top of the well-known Eclipse platform, RadRails provides all the tools you need to create a whole Rails application from a single interface, allowing you to focus on the creative part of the development as your IDE takes care of the mechanics. 

&lt;h4&gt;What you will learn from this book&lt;/h4&gt; 
&lt;p&gt;
This book will show you how to use the tools RadRails provides to improve your productivity: 

&lt;ul&gt;
&lt;li&gt; Tools for writing code: Specialized Editors for Ruby, HTML, CSS, and JavaScript; &gt;&gt; Code Assistance; Code Completion; Refactoring; Quick Code Navigation; Outline Views 
&lt;li&gt; Tools for testing and debugging: Unit Testing; Graphical Debugger; Monitoring of Log Files 
&lt;li&gt; Tools for project management: Specialized views for launching your Tasks and Generators; Management of your Gems and Plug-ins; Rails Servers Control 
&lt;li&gt; You will also learn how to use other Eclipse plug-ins for synchronizing your projects with Subversion and for managing your databases. 
&lt;/ul&gt;

&lt;h4&gt;Who this book is written for&lt;/h4&gt;
&lt;p&gt;
This book is for Ruby on Rails developers who want to make the most of the framework by using an Integrated Development Environment. 
&lt;p&gt;
Even though the book explains everything you need to follow the contents, the focus is on how to use the tool and not on the Rails framework itself, so previous working knowledge of Rails is highly advisable. Previous knowledge of Eclipse is not necessary. 

&lt;p&gt;
-------------------------------------------------------------------------------- 
&lt;h4&gt;Author: Javier Ramírez&lt;/h4&gt;
&lt;p&gt;
Javier Ramírez has been developing Web Applications since before the term Web Application was coined. Born in Zaragoza, Spain, in 1974, he started programming as a hobby around the age of 11 assisted by his older sister. A few years later, he got his first modem and became a regular of BBSes and Newsgroups. His interest in developing server applications that can be accessed remotely comes from those times. 
&lt;p&gt;
He has learned —and forgotten— many programming languages, including Basic, dBase III, Cobol, Pascal, SQL, C, C++, ASP, TCL, JavaScript, PHP, and Java, the language on which he has focused for most of his career so far. He has held the positions of programmer, analyst, consultant, team leader, post-sales engineer, project manager, and software architect, totaling over 12 years in the IT business. 
&lt;p&gt;
Having developed projects mainly for banks and other big corporations in Spain, Italy and the US, he co-founded some years ago a small software development shop, which provided him with valuable experience about the difficulties and the joys of entrepreneurship. After two years, he left the company in pursuit of new professional challenges. 
&lt;p&gt;
For the last two years, he has been proudly working for ASPgems, where he discovered Ruby on Rails, which soon became his framework of choice for developing Web Applications. He is one of the organizers of the Spanish Rails Conference, also participating as a Speaker in the two events held so far. 
&lt;p&gt;
He has also been an instructor on Robotics, Java, FatWire Content Server, and Ruby on Rails, and a University Lecturer in the subjects of &#039;Software Engineering&#039; and &#039;The Java Programming Language&#039;, which he currently teaches at Universidad Francisco de Vitoria, in Madrid. 
&lt;p&gt;
Javier Ramírez holds a B.Sc. in Business Information Systems with First Class Honors and a degree in Ingeniería en Sistemas de Computación. 
&lt;p&gt;
------------------------------------------------------------------------------------------------ 
&lt;p&gt;
&lt;a href=&quot;http://forums.aptana.com/profile.php?mode=viewprofile&amp;u=2095&quot; target=&quot;_new&quot;&gt;Javier&#039;s other postings in the Aptana forums&lt;/a&gt;
</description>
 <content:encoded>A new Aptana RadRails book has been released. Aptana community member Javier Ramirez&#039;s &quot;Aptana RadRails: An IDE For Rails Development&quot; (Packt Publishing, May 2008) is now available. 
&lt;a href=&quot;http://www.amazon.com/Aptana-Radrails-Ide-Rails-Development/dp/1847193986&quot; target=&quot;_new&quot;&gt;Find it at Amazon&lt;/a&gt;, or &lt;a href=&quot;http://www.packtpub.com/aptana-rapid-rails-development/book&quot; target=&quot;_new&quot;&gt;direct from Packt&lt;/a&gt; (where its a tad cheaper it seems), or at &lt;a href=&quot;http://www.google.com/search?sourceid=navclient&amp;ie=UTF-8&amp;rlz=1T4LENT_enUS223__226&amp;q=Aptana+Radrails%3a+An+Ide+for+Rails+Development+&quot; target=&quot;_new&quot;&gt;other&lt;/a&gt; fine book establishments around the world! 


&lt;p&gt;
&lt;h3&gt;Here&#039;s the summary:&lt;/h3&gt;

&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51aSAQ0krCL._SL500_AA240_.jpg&quot; align=right&gt;

&lt;p&gt;
A comprehensive guide to using RadRails to develop your Ruby on Rails projects in a professional and productive manner 

&lt;ul&gt;
&lt;li&gt; Comprehensive guide to using RadRails during the whole development cycle 
&lt;li&gt; Code Assistance, Graphical Debugger, Testing, Integrated Console 
&lt;li&gt; Manage your gems, plug-ins, servers, generators, and Rake tasks 
&lt;li&gt; Rails 2.0-ready 
&lt;li&gt; Includes a chapter about Subversion and Database integration 
&lt;li&gt; Smart Code Assistants for HTML, JavaScript, and CSS 
&lt;/ul&gt;

&lt;p&gt;
Aptana RadRails is an Integrated Development Environment for Ruby on Rails projects. Built on top of the well-known Eclipse platform, RadRails provides all the tools you need to create a whole Rails application from a single interface, allowing you to focus on the creative part of the development as your IDE takes care of the mechanics. 

&lt;h4&gt;What you will learn from this book&lt;/h4&gt; 
&lt;p&gt;
This book will show you how to use the tools RadRails provides to improve your productivity: 

&lt;ul&gt;
&lt;li&gt; Tools for writing code: Specialized Editors for Ruby, HTML, CSS, and JavaScript; &gt;&gt; Code Assistance; Code Completion; Refactoring; Quick Code Navigation; Outline Views 
&lt;li&gt; Tools for testing and debugging: Unit Testing; Graphical Debugger; Monitoring of Log Files 
&lt;li&gt; Tools for project management: Specialized views for launching your Tasks and Generators; Management of your Gems and Plug-ins; Rails Servers Control 
&lt;li&gt; You will also learn how to use other Eclipse plug-ins for synchronizing your projects with Subversion and for managing your databases. 
&lt;/ul&gt;

&lt;h4&gt;Who this book is written for&lt;/h4&gt;
&lt;p&gt;
This book is for Ruby on Rails developers who want to make the most of the framework by using an Integrated Development Environment. 
&lt;p&gt;
Even though the book explains everything you need to follow the contents, the focus is on how to use the tool and not on the Rails framework itself, so previous working knowledge of Rails is highly advisable. Previous knowledge of Eclipse is not necessary. 

&lt;p&gt;
-------------------------------------------------------------------------------- 
&lt;h4&gt;Author: Javier Ramírez&lt;/h4&gt;
&lt;p&gt;
Javier Ramírez has been developing Web Applications since before the term Web Application was coined. Born in Zaragoza, Spain, in 1974, he started programming as a hobby around the age of 11 assisted by his older sister. A few years later, he got his first modem and became a regular of BBSes and Newsgroups. His interest in developing server applications that can be accessed remotely comes from those times. 
&lt;p&gt;
He has learned —and forgotten— many programming languages, including Basic, dBase III, Cobol, Pascal, SQL, C, C++, ASP, TCL, JavaScript, PHP, and Java, the language on which he has focused for most of his career so far. He has held the positions of programmer, analyst, consultant, team leader, post-sales engineer, project manager, and software architect, totaling over 12 years in the IT business. 
&lt;p&gt;
Having developed projects mainly for banks and other big corporations in Spain, Italy and the US, he co-founded some years ago a small software development shop, which provided him with valuable experience about the difficulties and the joys of entrepreneurship. After two years, he left the company in pursuit of new professional challenges. 
&lt;p&gt;
For the last two years, he has been proudly working for ASPgems, where he discovered Ruby on Rails, which soon became his framework of choice for developing Web Applications. He is one of the organizers of the Spanish Rails Conference, also participating as a Speaker in the two events held so far. 
&lt;p&gt;
He has also been an instructor on Robotics, Java, FatWire Content Server, and Ruby on Rails, and a University Lecturer in the subjects of &#039;Software Engineering&#039; and &#039;The Java Programming Language&#039;, which he currently teaches at Universidad Francisco de Vitoria, in Madrid. 
&lt;p&gt;
Javier Ramírez holds a B.Sc. in Business Information Systems with First Class Honors and a degree in Ingeniería en Sistemas de Computación. 
&lt;p&gt;
------------------------------------------------------------------------------------------------ 
&lt;p&gt;
&lt;a href=&quot;http://forums.aptana.com/profile.php?mode=viewprofile&amp;u=2095&quot; target=&quot;_new&quot;&gt;Javier&#039;s other postings in the Aptana forums&lt;/a&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Thu, 05 Jun 2008 17:08:17 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">378 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana-At-Large in June 2008</title>
 <link>http://aptana.com/node/352</link>
 <description>&lt;p&gt;In June, Aptana and ColdFusion enthusiast, &lt;a href=&quot;http://cfunited.com/go/speakers#speaker-556&quot; target=&quot;_new&quot;&gt;Mark Drew&lt;/a&gt; will be at &lt;a href=&quot;http://www.cfunited.com&quot; target=&quot;_new&quot;&gt;CFUnited&lt;/a&gt; presenting: &lt;/p&gt;

&lt;blockquote&gt;&lt;a href=&quot;http://cfunited.com/go/topics/2008#topic-1738&quot; target=&quot;_new&quot;&gt;Fresh AIR: Getting to grips with Aptana and AIR apps&lt;/a&gt;&lt;br /&gt;
This session will give a nice and fresh introduction to developing AIR applications using Aptana. By using a ColdFusion developer&#039;s existing knowledge of HTML and JavaScript (and some quick introductions to JavaScript libraries such as EXT and JQuery), the whole process of developing rich desktop apps will be demystified.&lt;/blockquote&gt;

Mark, who has been central to the CFEclipse project, is sure to deliver a great session, so be sure to check it out.
</description>
 <content:encoded>&lt;p&gt;In June, Aptana and ColdFusion enthusiast, &lt;a href=&quot;http://cfunited.com/go/speakers#speaker-556&quot; target=&quot;_new&quot;&gt;Mark Drew&lt;/a&gt; will be at &lt;a href=&quot;http://www.cfunited.com&quot; target=&quot;_new&quot;&gt;CFUnited&lt;/a&gt; presenting: &lt;/p&gt;

&lt;blockquote&gt;&lt;a href=&quot;http://cfunited.com/go/topics/2008#topic-1738&quot; target=&quot;_new&quot;&gt;Fresh AIR: Getting to grips with Aptana and AIR apps&lt;/a&gt;&lt;br /&gt;
This session will give a nice and fresh introduction to developing AIR applications using Aptana. By using a ColdFusion developer&#039;s existing knowledge of HTML and JavaScript (and some quick introductions to JavaScript libraries such as EXT and JQuery), the whole process of developing rich desktop apps will be demystified.&lt;/blockquote&gt;

Mark, who has been central to the CFEclipse project, is sure to deliver a great session, so be sure to check it out.
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/122">adobe</category>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <pubDate>Wed, 14 May 2008 18:03:47 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">352 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana to Launch Cloud Platform (eWeek)</title>
 <link>http://aptana.com/node/345</link>
 <description>&lt;p&gt;Aptana will build off of its IDE and AJAX success with its new technology. &lt;a href=&quot;http://www.eweek.com/c/a/Application-Development/Aptana-to-Launch-Cloud-Platform/&quot; target=&quot;_new&quot;&gt;Read the full story&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_new&quot;&gt;Learn more&lt;/a&gt; about Aptana Cloud, an &quot;Elastic Application Cloud&quot; that&#039;s ideal for Web developers who use scripting languages.&lt;br /&gt;
Join the &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_new&quot;&gt;early access program&lt;/a&gt;.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Aptana will build off of its IDE and AJAX success with its new technology. &lt;a href=&quot;http://www.eweek.com/c/a/Application-Development/Aptana-to-Launch-Cloud-Platform/&quot; target=&quot;_new&quot;&gt;Read the full story&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_new&quot;&gt;Learn more&lt;/a&gt; about Aptana Cloud, an &quot;Elastic Application Cloud&quot; that&#039;s ideal for Web developers who use scripting languages.&lt;br /&gt;
Join the &lt;a href=&quot;http://www.aptana.com/cloud&quot; target=&quot;_new&quot;&gt;early access program&lt;/a&gt;.&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/34">php</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 28 Apr 2008 14:03:18 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">345 at http://aptana.com</guid>
</item>
<item>
 <title>&#039;DOM Scraping&#039; and Cross Domain Mashups with Aptana Jaxer</title>
 <link>http://aptana.com/blog/paul/dom_scraping_with_jaxer</link>
 <description>One of the things I was working on recently is &#039;screen scraping&#039; some data from several sites and presenting them in a single page. Of course Jaxer seems like the perfect tool for this as I can go fetch the data server-side, pull it all together, then present the final page to the browser. It was so exciting to see this work that I thought I&#039;d make this post to share my experience with you!
&lt;p&gt;&lt;/p&gt;

We’re working now on adding support in Jaxer for being able to programmatically create &#039;window&#039; objects, filling them with content from a remote URL, having that content actually execute, then being able to go into that window object and pull DOM elements out. &lt;i&gt;(Update: see &lt;a href=&quot;http://www.aptana.com/node/429&quot;&gt;the Jaxer 1.0 version&lt;/a&gt;.)&lt;/i&gt;
&lt;p&gt;&lt;/p&gt;

Unfortunately for me, that work isn&#039;t ready yet, so I wanted to see if there was some workaround I could use until it was ready. Well, after some research and trial and error, a workaround was found. The only catch with this code is that if there is any JavaScript on the page(s) you are fetching, that code will not execute, that’s coming soon.
&lt;p&gt;&lt;/p&gt;

Note that all of the code below can be contained within a single script tag:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;html&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&amp;lt;script runat=&#039;server&#039;&gt;...all code here...&amp;lt;/script&gt;
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

So, the first thing I wanted to do is make it really easy to fetch a remote document and grab out some content. I didn&#039;t want to use string matching or regular expressions of any kind, I wanted to use my trusted &#039;getElementById&#039; to fetch named elements directly. (Of course I ran into sites that don&#039;t name their elements, but fortunately many use named classes, so I had to fetch them that way, but I get ahead of myself.)
&lt;p&gt;&lt;/p&gt;

Let&#039;s get started. The following two lines is all that is required to fetch a remote URL synchronously on the server and then pull out a named element:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
var doc = getDocumentFromURL(&quot;http://www.news.com/&quot;);
var item = doc.getElementById(&quot;mostPopStories&quot;);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

Now that we have &#039;item&#039; as the element we were trying to fetch, we just have to add that element to our current blank page. I created a simple function called &#039;addElementToPage(title, element)&#039; that takes care of this for me. Here&#039;s the next line:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
addElementToPage(&quot;News.com Popular Stories&quot;, item);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

That&#039;s it. Now I do that 2 more times to fetch content from 2 other sites.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
doc = getDocumentFromURL(&quot;http://ajaxian.com&quot;);
item = getElementsByClass(&#039;activitystream&#039;, doc)[0];
addElementToPage(&quot;Ajaxian Activity Stream&quot;, item);

doc = getDocumentFromURL(&quot;http://www.washingtonpost.com/&quot;);
item = getElementsByClass(&quot;top-box-in&quot;, doc)[0];
addElementToPage(&quot;Washington Post&quot;, item);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

You&#039;ll notice that I didn&#039;t use getElementById() as those elements were not named, but fortunately they had class names associated with them. I found a convenient function called getElementsByClass() that I used in this case. Since it returns an array of elements, I use the [0] index to retrieve the first item in the list, which in my case, is probably the only item.
&lt;p&gt;&lt;/p&gt;

Believe it or not, that&#039;s basically it. At this point, your three &#039;DOM fragments&#039; have been fetched and inserted into your new document. Here&#039;s the result:
&lt;p&gt;&lt;/p&gt;

&lt;img src=&quot;http://aptana.com/system/files/DOMScraping.png&quot;&gt;
&lt;p&gt;&lt;/p&gt;

Following are the convenience functions that help make the magic happen. The first function is addElementToPage(). It very simply just creates an H2 tag and sets the title and a DIV tag which contains the contents of the fetched element:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
function addElementToPage(title, element)
{
    var el = document.importNode(element, true);
				
    var h2 = document.createElement(&#039;h2&#039;);
    h2.innerHTML = title;
    document.body.appendChild(h2);
				
    var div = document.createElement(&#039;div&#039;);
    div.appendChild(el);

    document.body.appendChild(div);
}
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

This next function, getDocumentFromURL(), is the one that does most of the work. (I found some good info on the subject of HTML to DOM here: http://jszen.blogspot.com/2007/02/how-to-parse-html-strings-into-dom.html) It first goes and retrieves the remote page. Then it creates a &#039;document fragment&#039; from the contents of the fetched site. That fragment is then added to a dynamically created IFRAME. Finally, the Document object from the IFRAME is fetched and returned. In short, we can pass in a URL, get the string value, place it into an IFRAME, then pull out the resulting Document object so that we can work on it.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
function getDocumentFromURL(url)
{
    // Get remote site
    var string = Jaxer.Web.get(url);
                
    // Parse the string into a doc fragment
    var range = document.createRange();
    range.selectNode(document.body);
    var parsedHTML = range.createContextualFragment(string);

    // Create the iframe that will contain the site we loaded
    var iframe = document.createElement(&quot;iframe&quot;);
    document.body.appendChild(iframe);
				
    // Import from doc fragment into the iframe
    var el = iframe.contentDocument.importNode(parsedHTML, true);
    iframe.contentDocument.body.appendChild(el);
                
    var newDoc = iframe.contentDocument;

    // delete the iframe as we don&#039;t need it any more
    document.body.removeChild(iframe);

    return newDoc;
}
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

This final function was found at http://www.dustindiaz.com/getelementsbyclass/ and walks a node looking for an element with a specific class name. It was used in the case where elements don&#039;t have ID&#039;s, so a class name is used instead.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
            function getElementsByClass(searchClass, node, tag)
			{
                var classElements = new Array();
                if (node == null) 
                    node = document;
                if (tag == null) 
                    tag = &#039;*&#039;;
                var els = node.getElementsByTagName(tag);
                var elsLen = els.length;
                var pattern = new RegExp(&quot;(^|\\\\s)&quot; + searchClass + &quot;(\\\\s|$)&quot;);
                for (i = 0, j = 0; i &lt; elsLen; i++) {
                    if (pattern.test(els[i].className)) {
                        classElements[j] = els[i];
                        j++;
                    }
                }
                return classElements;
            }
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

What&#039;s exciting about this sample is that it is relatively simple, uses the full power of server-side JavaScript and more importantly, Jaxer&#039;s cool server-side DOM capability to enable real &#039;DOM scraping&#039;. Once window object creation is finished in Jaxer (real soon now), then you&#039;ll be able to fetch remote pages, execute their integrated code, then proceed to fetch out items from the resulting DOM.
&lt;p&gt;&lt;/p&gt;
&lt;i&gt;&lt;b&gt;Update: see &lt;a href=&quot;http://www.aptana.com/node/429&quot;&gt;the Jaxer 1.0 version&lt;/a&gt;.&lt;/b&gt;&lt;/i&gt;

</description>
 <content:encoded>One of the things I was working on recently is &#039;screen scraping&#039; some data from several sites and presenting them in a single page. Of course Jaxer seems like the perfect tool for this as I can go fetch the data server-side, pull it all together, then present the final page to the browser. It was so exciting to see this work that I thought I&#039;d make this post to share my experience with you!
&lt;p&gt;&lt;/p&gt;

We’re working now on adding support in Jaxer for being able to programmatically create &#039;window&#039; objects, filling them with content from a remote URL, having that content actually execute, then being able to go into that window object and pull DOM elements out. &lt;i&gt;(Update: see &lt;a href=&quot;http://www.aptana.com/node/429&quot;&gt;the Jaxer 1.0 version&lt;/a&gt;.)&lt;/i&gt;
&lt;p&gt;&lt;/p&gt;

Unfortunately for me, that work isn&#039;t ready yet, so I wanted to see if there was some workaround I could use until it was ready. Well, after some research and trial and error, a workaround was found. The only catch with this code is that if there is any JavaScript on the page(s) you are fetching, that code will not execute, that’s coming soon.
&lt;p&gt;&lt;/p&gt;

Note that all of the code below can be contained within a single script tag:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;html&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&amp;lt;script runat=&#039;server&#039;&gt;...all code here...&amp;lt;/script&gt;
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

So, the first thing I wanted to do is make it really easy to fetch a remote document and grab out some content. I didn&#039;t want to use string matching or regular expressions of any kind, I wanted to use my trusted &#039;getElementById&#039; to fetch named elements directly. (Of course I ran into sites that don&#039;t name their elements, but fortunately many use named classes, so I had to fetch them that way, but I get ahead of myself.)
&lt;p&gt;&lt;/p&gt;

Let&#039;s get started. The following two lines is all that is required to fetch a remote URL synchronously on the server and then pull out a named element:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
var doc = getDocumentFromURL(&quot;http://www.news.com/&quot;);
var item = doc.getElementById(&quot;mostPopStories&quot;);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

Now that we have &#039;item&#039; as the element we were trying to fetch, we just have to add that element to our current blank page. I created a simple function called &#039;addElementToPage(title, element)&#039; that takes care of this for me. Here&#039;s the next line:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
addElementToPage(&quot;News.com Popular Stories&quot;, item);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

That&#039;s it. Now I do that 2 more times to fetch content from 2 other sites.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
doc = getDocumentFromURL(&quot;http://ajaxian.com&quot;);
item = getElementsByClass(&#039;activitystream&#039;, doc)[0];
addElementToPage(&quot;Ajaxian Activity Stream&quot;, item);

doc = getDocumentFromURL(&quot;http://www.washingtonpost.com/&quot;);
item = getElementsByClass(&quot;top-box-in&quot;, doc)[0];
addElementToPage(&quot;Washington Post&quot;, item);
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

You&#039;ll notice that I didn&#039;t use getElementById() as those elements were not named, but fortunately they had class names associated with them. I found a convenient function called getElementsByClass() that I used in this case. Since it returns an array of elements, I use the [0] index to retrieve the first item in the list, which in my case, is probably the only item.
&lt;p&gt;&lt;/p&gt;

Believe it or not, that&#039;s basically it. At this point, your three &#039;DOM fragments&#039; have been fetched and inserted into your new document. Here&#039;s the result:
&lt;p&gt;&lt;/p&gt;

&lt;img src=&quot;http://aptana.com/system/files/DOMScraping.png&quot;&gt;
&lt;p&gt;&lt;/p&gt;

Following are the convenience functions that help make the magic happen. The first function is addElementToPage(). It very simply just creates an H2 tag and sets the title and a DIV tag which contains the contents of the fetched element:
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
function addElementToPage(title, element)
{
    var el = document.importNode(element, true);
				
    var h2 = document.createElement(&#039;h2&#039;);
    h2.innerHTML = title;
    document.body.appendChild(h2);
				
    var div = document.createElement(&#039;div&#039;);
    div.appendChild(el);

    document.body.appendChild(div);
}
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

This next function, getDocumentFromURL(), is the one that does most of the work. (I found some good info on the subject of HTML to DOM here: http://jszen.blogspot.com/2007/02/how-to-parse-html-strings-into-dom.html) It first goes and retrieves the remote page. Then it creates a &#039;document fragment&#039; from the contents of the fetched site. That fragment is then added to a dynamically created IFRAME. Finally, the Document object from the IFRAME is fetched and returned. In short, we can pass in a URL, get the string value, place it into an IFRAME, then pull out the resulting Document object so that we can work on it.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
function getDocumentFromURL(url)
{
    // Get remote site
    var string = Jaxer.Web.get(url);
                
    // Parse the string into a doc fragment
    var range = document.createRange();
    range.selectNode(document.body);
    var parsedHTML = range.createContextualFragment(string);

    // Create the iframe that will contain the site we loaded
    var iframe = document.createElement(&quot;iframe&quot;);
    document.body.appendChild(iframe);
				
    // Import from doc fragment into the iframe
    var el = iframe.contentDocument.importNode(parsedHTML, true);
    iframe.contentDocument.body.appendChild(el);
                
    var newDoc = iframe.contentDocument;

    // delete the iframe as we don&#039;t need it any more
    document.body.removeChild(iframe);

    return newDoc;
}
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

This final function was found at http://www.dustindiaz.com/getelementsbyclass/ and walks a node looking for an element with a specific class name. It was used in the case where elements don&#039;t have ID&#039;s, so a class name is used instead.
&lt;p&gt;&lt;/p&gt;

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
            function getElementsByClass(searchClass, node, tag)
			{
                var classElements = new Array();
                if (node == null) 
                    node = document;
                if (tag == null) 
                    tag = &#039;*&#039;;
                var els = node.getElementsByTagName(tag);
                var elsLen = els.length;
                var pattern = new RegExp(&quot;(^|\\\\s)&quot; + searchClass + &quot;(\\\\s|$)&quot;);
                for (i = 0, j = 0; i &lt; elsLen; i++) {
                    if (pattern.test(els[i].className)) {
                        classElements[j] = els[i];
                        j++;
                    }
                }
                return classElements;
            }
&lt;/textarea&gt;
&lt;p&gt;&lt;/p&gt;

What&#039;s exciting about this sample is that it is relatively simple, uses the full power of server-side JavaScript and more importantly, Jaxer&#039;s cool server-side DOM capability to enable real &#039;DOM scraping&#039;. Once window object creation is finished in Jaxer (real soon now), then you&#039;ll be able to fetch remote pages, execute their integrated code, then proceed to fetch out items from the resulting DOM.
&lt;p&gt;&lt;/p&gt;
&lt;i&gt;&lt;b&gt;Update: see &lt;a href=&quot;http://www.aptana.com/node/429&quot;&gt;the Jaxer 1.0 version&lt;/a&gt;.&lt;/b&gt;&lt;/i&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 15 Apr 2008 12:40:11 -0500</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">339 at http://aptana.com</guid>
</item>
<item>
 <title>Server-side jQuery and more cool tricks with Aptana Jaxer</title>
 <link>http://aptana.com/node/336</link>
 <description>&lt;P&gt;In this example, (the first in a series) we&#039;re going to build a simple voting tool, using a single page of DHTML. The implementation is quite basic but covers a good few examples of how to use &lt;a href=&#039;/jaxer&#039;&gt;Aptana Jaxer&lt;/a&gt; in real world situations, such as :
&lt;UL&gt;
&lt;LI&gt;Using Ajax libraries on the server (jQuery in this example)&lt;/LI&gt;
&lt;LI&gt;Server-side DOM manipulation (using jQuery)&lt;/LI&gt;
&lt;LI&gt;Storing and retrieving Session data&lt;/LI&gt;
&lt;LI&gt;Creating and accessing a database&lt;/LI&gt;
&lt;LI&gt;E4X as a templating mechanism (E4X provides native XML support in JavaScript)&lt;/LI&gt;
&lt;LI&gt;Handling form data&lt;/LI&gt;
&lt;/UL&gt;
&lt;/P&gt;
&lt;h3&gt;Let&#039;s Vote...&lt;/h3&gt;
&lt;P&gt;This example was written as a single page webapp. You could remove the Javascript to another file and make it all unobtrusive if that is what gets you excited, but I&#039;m just using an inline script tag, as the code is only about 30 or so lines long. Also in Jaxer we could have easily implemented this using Jaxer&#039;s seamless ajax callback mechanism but for the purpose of this example we&#039;ll stick with a traditional form post.&lt;/P&gt;
&lt;P&gt;Let&#039;s get started. Most folks reading this should be familiar with the standard blog/portal poll, where you are presented with a set of choices.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/choices_0.png&#039;&gt;
&lt;P&gt;and once you have voted you get to see the current results of the voting.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/voted_0.png&#039;&gt;
&lt;P&gt;In our example we allow multiple votes per user but you can easily change that by just commenting out a single line of code.
&lt;/P&gt;
&lt;P&gt;One of the interesting features of this application is that, by using server-side DOM manipulation in Jaxer, you can remove any unwanted content before it is sent to the client browser. We use this to hide the vote results until the user has voted&lt;/P&gt;
&lt;P&gt;This is a useful technique for permission based forms where, for example, you may want remove the credit card details unless the user has established the correct permissions and been validated by the server.
&lt;/P&gt;
&lt;h3&gt;A very basic web page&lt;/h3&gt;
&lt;P&gt;So let&#039;s jump in and have a look at the code used to make this work. &lt;B&gt;The code in this article has been updated to use the API of Jaxer 0.9.8 or later, for The full source listing below contains comments to indicate where the code was changed to work with the later API.&lt;/B&gt;&lt;/P&gt;

&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Jaxer Poll&lt;/title&gt;
&lt;script runat=&#039;server&#039; src=&#039;jquery-compressed.js&#039; autoload=&#039;true&#039;&gt;&lt;/script&gt;
&lt;style&gt;
        #pollContainer {
            width: 600px;
            background: #eee;
            border: 3px solid #555;
            padding: 5px;
            font-size: 1em;
            font-family: Tahoma, Verdana, Helvetica, Arial;
            font-weight: 900;
        }
        
        #display {
            background: #ccc;
            font-size: 0.75em;
            font-weight: 200;
            color: #2E3540;
            margin: 5px 0 5px 0;
        }
        
        TD {
            padding-left: 10px;
        }
        
        TD IMG {
            margin-left: -6px;
        }
&lt;/style&gt;
&lt;/textarea&gt;
&lt;P&gt;Above is the contents of the HEAD element. Just the usual suspects, setting the title and some simple CSS stuff. The only interesting part is at line #3, where we load the jQuery library on the &lt;B&gt;server&lt;/B&gt;, because we intend to do some &lt;B&gt;serverside DOM manipulation&lt;/B&gt; before the page is sent to the client. &lt;/P&gt;
&lt;P&gt;The runat=&#039;server&#039; attribute tells Jaxer to load this javascript library &lt;B&gt;on the server&lt;/B&gt;. &lt;/P&gt;
&lt;P&gt;The autoload attribute is a recent addition to Jaxer, and it instructs Jaxer to load that page and keep it cached as preparsed bytecode (for faster library loadtime) for any future calls to this page, including callbacks.&lt;P&gt;

&lt;P&gt;In the body of the document we have a simple form which we will dynamically populate on the server. The form will post the vote to itself on the server. &lt;/P&gt;
&lt;P&gt;We are marking up the DOM content with the classnames &#039;voter&#039; and &#039;nonvoter&#039; to identify content that is specific to a user&#039;s status, and make it easily accessible using jQuery on the server.&lt;/P&gt;

&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;&lt;form id=&#039;pollContainer&#039; method=&quot;POST&quot; accept-charset=&quot;utf-8&quot;&gt;
    &lt;div id=&#039;question&#039;&gt;What do you think is the coolest feature of Jaxer?&lt;/div&gt;
    &lt;div id=&#039;display&#039;&gt;&lt;/div&gt;
    &lt;div class=&#039;nonvoter&#039;&gt;&lt;input type=&#039;submit&#039; value=&#039;vote&#039;&gt;&lt;/div&gt;&lt;div id=&#039;voteTotals&#039; class=&#039;voter&#039;&gt;&lt;/div&gt;
&lt;/form&gt;
&lt;/textarea&gt;
&lt;h3&gt;Server Side Javascript&lt;/h3&gt;
Now we get to the Javascript. The app has a single script tag in the body which is designated to run on the server.&lt;/P&gt;
&lt;P&gt;The first dozen or so lines are &lt;B&gt;simply creating a DB and preparing a schema&lt;/B&gt; for use.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var db = new Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolve(&#039;poll.sqlite&#039;)});
db.execute(&quot;CREATE TABLE IF NOT EXISTS votes (id, ip, vote)&quot;); 

var questions = [ &quot;Server-Side DOM&quot;,&quot;Server-Side Javascript&quot;,&quot;Seamless Ajax&quot;,&quot;I already know it!&quot;];

var totalVotes = db.execute(&#039;SELECT count(*) FROM votes&#039;).singleResult - questions.length;
if (totalVotes &lt; 0)
{
    questions.map(function(item, index) // seed the table with 1 row per question to avoid nulls
	{
    	db.execute(&quot;INSERT INTO votes (id ,ip,vote) VALUES (?,?,?)&quot;, &quot;&quot;+index, &#039;127.0.0.1&#039;, &quot;&quot;+index);
    });
	totalVotes = 0;
}&lt;/textarea&gt;
&lt;P&gt;So we&#039;ve connected to the database (which was automatically created if needed, how convenient!) and set up the schema and initial content we expect. We also setup an Array (&lt;B&gt;&lt;I&gt;questions&lt;/I&gt;&lt;/B&gt;) containing the questions for the voting poll&lt;/P&gt;
&lt;P&gt;Next we need to check the &lt;B&gt;session value&lt;/B&gt; we are storing (&lt;B&gt;&lt;I&gt;status&lt;/I&gt;&lt;/B&gt;) to determine whether this user has already voted, and then check to see if the form data for the vote is being posted. Then, if we are actually voting, we write the vote to the database and set the user status to &#039;voter&#039;. &lt;/P&gt;
&lt;P&gt;When we write the vote to the database, we grab the sessionID and the remote IP address and write those out with the vote data, this will let us enforce single voting later if we need it.&lt;/P&gt;
&lt;P&gt;Finally query the database to get the current vote counts, remembering to subtract 1 from the total to account for the dummy rows we inserted to seed database and prevent any nulls from appearing in the results totals.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var status = Jaxer.session.status || &#039;nonvoter&#039;;

// look for request data and save vote if present
if (Jaxer.request.data.hasOwnProperty(&#039;radioBtns&#039;) &amp;&amp; status == &#039;nonvoter&#039;) 
{
	db.execute(&quot;INSERT INTO votes (id,ip,vote) VALUES (?,?,?) &quot;
	,	Jaxer.SessionManager.keyFromRequest() 	// session ID
	,	Jaxer.request.remoteAddr 				// remote IP address
	,	Jaxer.request.data.radioBtns			// posted data
	);
    status = &#039;voter&#039;; 
	totalVotes ++ ;
}
rs = db.execute(&#039;SELECT count(*)-1 AS tot FROM votes GROUP BY vote&#039;);

&lt;/textarea&gt;
&lt;P&gt;Now we build the DOM, to do this we issue a query to the DB to get the current vote tally.&lt;/P&gt;
&lt;P&gt;Using &lt;A href=&#039;http://en.wikipedia.org/wiki/E4X&#039; title=&#039;Open the Wikipedia page on E4X in a new window/tab&#039; target=&#039;_blank&#039;&gt;E4X - ECMAScript For XML&lt;/A&gt; as a simple templating tool we create the DOM with the nodes populated according to our dataset.&lt;/P&gt;
&lt;P&gt;One of the nice features of server-side javascript with Jaxer &lt;B&gt;is that you have access to all neat things built into Mozilla without the worry of client side browser support&lt;/B&gt;, which enables reliable use of the advanced features of the Javascript language.&lt;/P&gt;
&lt;P&gt;If you look closely at the code below you&#039;ll notice we use a simple syntax for variable substitution using curly braces containing javascript code inside the E4X assigments. This allows us to use this for templating as long as we are creating valid XML nodes.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var output = &lt;table&gt;&lt;/table&gt;;
for (question in questions)
{
	var percent = parseInt((rs.rows[question].tot / totalVotes) * 100);
    output.appendChild(&lt;tr&gt;
    &lt;td class=&#039;nonvoter&#039;&gt;&lt;input type=&#039;radio&#039; name=&#039;radioBtns&#039; value={question}&gt;&lt;/td&gt;
    &lt;td&gt;{questions[question]}&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;
         &lt;img src=&quot;poll_l.png&quot; height=&#039;16&#039;&gt;
         &lt;img src=&quot;poll.png&quot;   height=&#039;16&#039; width={percent * 2}&gt;
         &lt;img src=&quot;poll_r.png&quot; height=&#039;16&#039;&gt;&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;{rs.rows[question].tot}&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;({percent}%)&lt;/td&gt;
    &lt;/tr&gt;); 
}
$(&#039;#display&#039;).html(output.toString());
$(&#039;#voteTotals&#039;).html(totalVotes + &quot; votes&quot;);&lt;/textarea&gt;
&lt;P&gt;So the document now has a DOM that has been populated with the content for &lt;B&gt;BOTH&lt;/B&gt; voters and non-voters. We use a little &lt;B&gt;jQuery&lt;/B&gt; magic to remove the elements we don&#039;t want presented to the user.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;// remove DOM elements based on whether user has already voted
$((status == &#039;voter&#039;) ? &#039;.nonvoter&#039; : &#039;.voter&#039;).remove(); &lt;/textarea&gt;
&lt;P&gt;In this way the user will EITHER see the form with the question and the submit button &lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/choices_0.png&#039;&gt;
&lt;P&gt;OR the current voting results data.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/voted_0.png&#039;&gt;
&lt;P&gt;Now we set the &lt;B&gt;session variable&lt;/B&gt; status to be the current status of the user as they have either voted or not.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;Jaxer.session.status = status;&lt;/textarea&gt;
&lt;P&gt;Finally as the page that is served has no further dependency on Jaxer once it leaves the server, we tell Jaxer to not bother injecting the client framework. Normally the client framework would be automatically inserted as a script tag in the outgoing HTML, but our simple example doesn&#039;t need to communicate back to the Jaxer server, as it contains no server callbacks.
&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;// no need for the client Framework to be injected into the page
Jaxer.response.setClientFramework(); 
&lt;/textarea&gt;
&lt;P&gt;So there you have it, a simple poll on a single page, using many of Jaxer&#039;s cool features.&lt;/P&gt;
&lt;h3&gt;Supporting Files&lt;/h3&gt;
&lt;P&gt;The full code and supporting files for this article are available &lt;a href=&#039;http://www.aptana.com/system/files/votepoll.zip&#039;&gt;here&lt;/a&gt;&lt;/P&gt;
&lt;h3&gt;Full Source Listing&lt;/h3&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;25&#039;&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Jaxer Poll&lt;/title&gt;
    &lt;script runat=&#039;server&#039; src=&#039;jquery-compressed.js&#039; autoload=&#039;true&#039;&gt;
    &lt;/script&gt;
    &lt;style&gt;
      #pollContainer {
        width: 600px;
        background: #eee;
        border: 3px solid #555;
        padding: 5px;
        font-size: 1em;
        font-family: Tahoma, Verdana, Helvetica, Arial;
        font-weight: 900;
      }
      
      #display {
        background: #ccc;
        font-size: 0.75em;
        font-weight: 200;
        color: #2E3540;
        margin: 5px 0 5px 0;
      }
      
      TD {
        padding-left: 10px;
      }
      
      TD IMG {
        margin-left: -6px;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;form id=&#039;pollContainer&#039; method=&#039;POST&#039; accept-charset=&#039;utf-8&#039;&gt;
      &lt;div id=&#039;question&#039;&gt;
        What do you think is the coolest feature of Jaxer?
      &lt;/div&gt;
      &lt;div id=&#039;display&#039;&gt;
      &lt;/div&gt;
      &lt;div class=&#039;nonvoter&#039;&gt;
        &lt;input type=&#039;submit&#039; value=&#039;vote&#039;/&gt;
      &lt;/div&gt;
      &lt;div id=&#039;voteTotals&#039; class=&#039;voter&#039;&gt;
      &lt;/div&gt;
    &lt;/form&gt;
    &lt;script runat=&#039;server&#039;&gt;  
      // for the beta version of Jaxer, change it to the following
      //var db = Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolvePath(&#039;poll.sqlite&#039;)});  
      var db = Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolve(&#039;poll.sqlite&#039;)});  
      db.execute(&quot;CREATE TABLE IF NOT EXISTS votes (id, ip, vote)&quot;);   
        
      var questions = 
      [ 
        &quot;Server-Side DOM&quot;
      , &quot;Server-Side Javascript&quot;
      , &quot;Seamless Ajax&quot;
      , &quot;I already know it!&quot;
      ];  
        
      var totalVotes = db.execute(&#039;SELECT count(*) FROM votes&#039;).singleResult - 
        questions.length;  
      if (totalVotes &lt; 0)  
      {
        // seed the table with 1 row per question to avoid nulls
        questions.map(function(item, index)   
        {  
          db.execute(&quot;INSERT INTO votes (id ,ip,vote) VALUES (?,?,?)&quot;, 
            &quot;&quot;+index, &#039;127.0.0.1&#039;, &quot;&quot;+index);  
        });  
        totalVotes = 0;  
      }
      // remove the following line to limit to 1 vote per user session
      // for the beta version of Jaxer, change it to the following
      //Jaxer.session.remove(&#039;status&#039;);
      delete Jaxer.session.status;
      
      // for the beta version of Jaxer, change the following line to
      //var status = Jaxer.session.get(&#039;status&#039;) || &#039;nonvoter&#039;;  
      var status = Jaxer.session.status || &#039;nonvoter&#039;; 
        
      // look for request data and save vote if present  
      if (&#039;radioBtns&#039; in Jaxer.request.data &amp;&amp; 
          (status == &#039;nonvoter&#039;))   
      {  
        db.execute(&quot;INSERT INTO votes (id,ip,vote) VALUES (?,?,?) &quot;   
        ,   Jaxer.SessionManager.keyFromRequest()   // session ID  
        ,   Jaxer.request.remoteAddr        // remote IP address  
        ,   Jaxer.request.data.radioBtns      // posted data  
        );  
        status = &#039;voter&#039;;   
        totalVotes ++ ;  
      }  
      rs = db.execute(&#039;SELECT count(*)-1 AS tot FROM votes GROUP BY vote&#039;);  
        
      var output = &lt;table&gt;&lt;/table&gt;;  
      for (var question in questions)  
      {  
        var percent = parseInt((rs.rows[question].tot / totalVotes) * 100);  
        output.appendChild(
          &lt;tr&gt;  
            &lt;td class=&#039;nonvoter&#039;&gt;
              &lt;input type=&#039;radio&#039; name=&#039;radioBtns&#039; value={question}/&gt;
            &lt;/td&gt;  
            &lt;td&gt;{questions[question]}&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;  
              &lt;img src=&quot;poll_l.png&quot; height=&#039;16&#039;/&gt;  
              &lt;img src=&quot;poll.png&quot;   height=&#039;16&#039; width={2+(percent * 2)}/&gt;  
              &lt;img src=&quot;poll_r.png&quot; height=&#039;16&#039;/&gt;&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;{rs.rows[question].tot}&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;({percent}%)&lt;/td&gt;  
          &lt;/tr&gt;);   
      }  
      $(&#039;#display&#039;).html(output.toString());  
      $(&#039;#voteTotals&#039;).html(totalVotes + &quot; votes&quot;);  
        
      // remove DOM elements based on whether user has already voted  
      $((status == &#039;voter&#039;) ? &#039;.nonvoter&#039; : &#039;.voter&#039;).remove();   
        
      // for the beta version of Jaxer, change the following line to
      //Jaxer.session.set(&#039;status&#039;, status);  
      Jaxer.session.status = status;
        
      // no need for the client Framework to be injected into the page.  
      Jaxer.response.setClientFramework();   
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;/textarea&gt;


</description>
 <content:encoded>&lt;P&gt;In this example, (the first in a series) we&#039;re going to build a simple voting tool, using a single page of DHTML. The implementation is quite basic but covers a good few examples of how to use &lt;a href=&#039;/jaxer&#039;&gt;Aptana Jaxer&lt;/a&gt; in real world situations, such as :
&lt;UL&gt;
&lt;LI&gt;Using Ajax libraries on the server (jQuery in this example)&lt;/LI&gt;
&lt;LI&gt;Server-side DOM manipulation (using jQuery)&lt;/LI&gt;
&lt;LI&gt;Storing and retrieving Session data&lt;/LI&gt;
&lt;LI&gt;Creating and accessing a database&lt;/LI&gt;
&lt;LI&gt;E4X as a templating mechanism (E4X provides native XML support in JavaScript)&lt;/LI&gt;
&lt;LI&gt;Handling form data&lt;/LI&gt;
&lt;/UL&gt;
&lt;/P&gt;
&lt;h3&gt;Let&#039;s Vote...&lt;/h3&gt;
&lt;P&gt;This example was written as a single page webapp. You could remove the Javascript to another file and make it all unobtrusive if that is what gets you excited, but I&#039;m just using an inline script tag, as the code is only about 30 or so lines long. Also in Jaxer we could have easily implemented this using Jaxer&#039;s seamless ajax callback mechanism but for the purpose of this example we&#039;ll stick with a traditional form post.&lt;/P&gt;
&lt;P&gt;Let&#039;s get started. Most folks reading this should be familiar with the standard blog/portal poll, where you are presented with a set of choices.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/choices_0.png&#039;&gt;
&lt;P&gt;and once you have voted you get to see the current results of the voting.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/voted_0.png&#039;&gt;
&lt;P&gt;In our example we allow multiple votes per user but you can easily change that by just commenting out a single line of code.
&lt;/P&gt;
&lt;P&gt;One of the interesting features of this application is that, by using server-side DOM manipulation in Jaxer, you can remove any unwanted content before it is sent to the client browser. We use this to hide the vote results until the user has voted&lt;/P&gt;
&lt;P&gt;This is a useful technique for permission based forms where, for example, you may want remove the credit card details unless the user has established the correct permissions and been validated by the server.
&lt;/P&gt;
&lt;h3&gt;A very basic web page&lt;/h3&gt;
&lt;P&gt;So let&#039;s jump in and have a look at the code used to make this work. &lt;B&gt;The code in this article has been updated to use the API of Jaxer 0.9.8 or later, for The full source listing below contains comments to indicate where the code was changed to work with the later API.&lt;/B&gt;&lt;/P&gt;

&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Jaxer Poll&lt;/title&gt;
&lt;script runat=&#039;server&#039; src=&#039;jquery-compressed.js&#039; autoload=&#039;true&#039;&gt;&lt;/script&gt;
&lt;style&gt;
        #pollContainer {
            width: 600px;
            background: #eee;
            border: 3px solid #555;
            padding: 5px;
            font-size: 1em;
            font-family: Tahoma, Verdana, Helvetica, Arial;
            font-weight: 900;
        }
        
        #display {
            background: #ccc;
            font-size: 0.75em;
            font-weight: 200;
            color: #2E3540;
            margin: 5px 0 5px 0;
        }
        
        TD {
            padding-left: 10px;
        }
        
        TD IMG {
            margin-left: -6px;
        }
&lt;/style&gt;
&lt;/textarea&gt;
&lt;P&gt;Above is the contents of the HEAD element. Just the usual suspects, setting the title and some simple CSS stuff. The only interesting part is at line #3, where we load the jQuery library on the &lt;B&gt;server&lt;/B&gt;, because we intend to do some &lt;B&gt;serverside DOM manipulation&lt;/B&gt; before the page is sent to the client. &lt;/P&gt;
&lt;P&gt;The runat=&#039;server&#039; attribute tells Jaxer to load this javascript library &lt;B&gt;on the server&lt;/B&gt;. &lt;/P&gt;
&lt;P&gt;The autoload attribute is a recent addition to Jaxer, and it instructs Jaxer to load that page and keep it cached as preparsed bytecode (for faster library loadtime) for any future calls to this page, including callbacks.&lt;P&gt;

&lt;P&gt;In the body of the document we have a simple form which we will dynamically populate on the server. The form will post the vote to itself on the server. &lt;/P&gt;
&lt;P&gt;We are marking up the DOM content with the classnames &#039;voter&#039; and &#039;nonvoter&#039; to identify content that is specific to a user&#039;s status, and make it easily accessible using jQuery on the server.&lt;/P&gt;

&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;&lt;form id=&#039;pollContainer&#039; method=&quot;POST&quot; accept-charset=&quot;utf-8&quot;&gt;
    &lt;div id=&#039;question&#039;&gt;What do you think is the coolest feature of Jaxer?&lt;/div&gt;
    &lt;div id=&#039;display&#039;&gt;&lt;/div&gt;
    &lt;div class=&#039;nonvoter&#039;&gt;&lt;input type=&#039;submit&#039; value=&#039;vote&#039;&gt;&lt;/div&gt;&lt;div id=&#039;voteTotals&#039; class=&#039;voter&#039;&gt;&lt;/div&gt;
&lt;/form&gt;
&lt;/textarea&gt;
&lt;h3&gt;Server Side Javascript&lt;/h3&gt;
Now we get to the Javascript. The app has a single script tag in the body which is designated to run on the server.&lt;/P&gt;
&lt;P&gt;The first dozen or so lines are &lt;B&gt;simply creating a DB and preparing a schema&lt;/B&gt; for use.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var db = new Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolve(&#039;poll.sqlite&#039;)});
db.execute(&quot;CREATE TABLE IF NOT EXISTS votes (id, ip, vote)&quot;); 

var questions = [ &quot;Server-Side DOM&quot;,&quot;Server-Side Javascript&quot;,&quot;Seamless Ajax&quot;,&quot;I already know it!&quot;];

var totalVotes = db.execute(&#039;SELECT count(*) FROM votes&#039;).singleResult - questions.length;
if (totalVotes &lt; 0)
{
    questions.map(function(item, index) // seed the table with 1 row per question to avoid nulls
	{
    	db.execute(&quot;INSERT INTO votes (id ,ip,vote) VALUES (?,?,?)&quot;, &quot;&quot;+index, &#039;127.0.0.1&#039;, &quot;&quot;+index);
    });
	totalVotes = 0;
}&lt;/textarea&gt;
&lt;P&gt;So we&#039;ve connected to the database (which was automatically created if needed, how convenient!) and set up the schema and initial content we expect. We also setup an Array (&lt;B&gt;&lt;I&gt;questions&lt;/I&gt;&lt;/B&gt;) containing the questions for the voting poll&lt;/P&gt;
&lt;P&gt;Next we need to check the &lt;B&gt;session value&lt;/B&gt; we are storing (&lt;B&gt;&lt;I&gt;status&lt;/I&gt;&lt;/B&gt;) to determine whether this user has already voted, and then check to see if the form data for the vote is being posted. Then, if we are actually voting, we write the vote to the database and set the user status to &#039;voter&#039;. &lt;/P&gt;
&lt;P&gt;When we write the vote to the database, we grab the sessionID and the remote IP address and write those out with the vote data, this will let us enforce single voting later if we need it.&lt;/P&gt;
&lt;P&gt;Finally query the database to get the current vote counts, remembering to subtract 1 from the total to account for the dummy rows we inserted to seed database and prevent any nulls from appearing in the results totals.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var status = Jaxer.session.status || &#039;nonvoter&#039;;

// look for request data and save vote if present
if (Jaxer.request.data.hasOwnProperty(&#039;radioBtns&#039;) &amp;&amp; status == &#039;nonvoter&#039;) 
{
	db.execute(&quot;INSERT INTO votes (id,ip,vote) VALUES (?,?,?) &quot;
	,	Jaxer.SessionManager.keyFromRequest() 	// session ID
	,	Jaxer.request.remoteAddr 				// remote IP address
	,	Jaxer.request.data.radioBtns			// posted data
	);
    status = &#039;voter&#039;; 
	totalVotes ++ ;
}
rs = db.execute(&#039;SELECT count(*)-1 AS tot FROM votes GROUP BY vote&#039;);

&lt;/textarea&gt;
&lt;P&gt;Now we build the DOM, to do this we issue a query to the DB to get the current vote tally.&lt;/P&gt;
&lt;P&gt;Using &lt;A href=&#039;http://en.wikipedia.org/wiki/E4X&#039; title=&#039;Open the Wikipedia page on E4X in a new window/tab&#039; target=&#039;_blank&#039;&gt;E4X - ECMAScript For XML&lt;/A&gt; as a simple templating tool we create the DOM with the nodes populated according to our dataset.&lt;/P&gt;
&lt;P&gt;One of the nice features of server-side javascript with Jaxer &lt;B&gt;is that you have access to all neat things built into Mozilla without the worry of client side browser support&lt;/B&gt;, which enables reliable use of the advanced features of the Javascript language.&lt;/P&gt;
&lt;P&gt;If you look closely at the code below you&#039;ll notice we use a simple syntax for variable substitution using curly braces containing javascript code inside the E4X assigments. This allows us to use this for templating as long as we are creating valid XML nodes.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;var output = &lt;table&gt;&lt;/table&gt;;
for (question in questions)
{
	var percent = parseInt((rs.rows[question].tot / totalVotes) * 100);
    output.appendChild(&lt;tr&gt;
    &lt;td class=&#039;nonvoter&#039;&gt;&lt;input type=&#039;radio&#039; name=&#039;radioBtns&#039; value={question}&gt;&lt;/td&gt;
    &lt;td&gt;{questions[question]}&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;
         &lt;img src=&quot;poll_l.png&quot; height=&#039;16&#039;&gt;
         &lt;img src=&quot;poll.png&quot;   height=&#039;16&#039; width={percent * 2}&gt;
         &lt;img src=&quot;poll_r.png&quot; height=&#039;16&#039;&gt;&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;{rs.rows[question].tot}&lt;/td&gt;
    &lt;td class=&#039;voter&#039;&gt;({percent}%)&lt;/td&gt;
    &lt;/tr&gt;); 
}
$(&#039;#display&#039;).html(output.toString());
$(&#039;#voteTotals&#039;).html(totalVotes + &quot; votes&quot;);&lt;/textarea&gt;
&lt;P&gt;So the document now has a DOM that has been populated with the content for &lt;B&gt;BOTH&lt;/B&gt; voters and non-voters. We use a little &lt;B&gt;jQuery&lt;/B&gt; magic to remove the elements we don&#039;t want presented to the user.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;// remove DOM elements based on whether user has already voted
$((status == &#039;voter&#039;) ? &#039;.nonvoter&#039; : &#039;.voter&#039;).remove(); &lt;/textarea&gt;
&lt;P&gt;In this way the user will EITHER see the form with the question and the submit button &lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/choices_0.png&#039;&gt;
&lt;P&gt;OR the current voting results data.&lt;/P&gt;
&lt;img src=&#039;http://www.aptana.com/system/files/voted_0.png&#039;&gt;
&lt;P&gt;Now we set the &lt;B&gt;session variable&lt;/B&gt; status to be the current status of the user as they have either voted or not.&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;Jaxer.session.status = status;&lt;/textarea&gt;
&lt;P&gt;Finally as the page that is served has no further dependency on Jaxer once it leaves the server, we tell Jaxer to not bother injecting the client framework. Normally the client framework would be automatically inserted as a script tag in the outgoing HTML, but our simple example doesn&#039;t need to communicate back to the Jaxer server, as it contains no server callbacks.
&lt;/P&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;3&#039;&gt;// no need for the client Framework to be injected into the page
Jaxer.response.setClientFramework(); 
&lt;/textarea&gt;
&lt;P&gt;So there you have it, a simple poll on a single page, using many of Jaxer&#039;s cool features.&lt;/P&gt;
&lt;h3&gt;Supporting Files&lt;/h3&gt;
&lt;P&gt;The full code and supporting files for this article are available &lt;a href=&#039;http://www.aptana.com/system/files/votepoll.zip&#039;&gt;here&lt;/a&gt;&lt;/P&gt;
&lt;h3&gt;Full Source Listing&lt;/h3&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; rows=&#039;25&#039;&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Jaxer Poll&lt;/title&gt;
    &lt;script runat=&#039;server&#039; src=&#039;jquery-compressed.js&#039; autoload=&#039;true&#039;&gt;
    &lt;/script&gt;
    &lt;style&gt;
      #pollContainer {
        width: 600px;
        background: #eee;
        border: 3px solid #555;
        padding: 5px;
        font-size: 1em;
        font-family: Tahoma, Verdana, Helvetica, Arial;
        font-weight: 900;
      }
      
      #display {
        background: #ccc;
        font-size: 0.75em;
        font-weight: 200;
        color: #2E3540;
        margin: 5px 0 5px 0;
      }
      
      TD {
        padding-left: 10px;
      }
      
      TD IMG {
        margin-left: -6px;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;form id=&#039;pollContainer&#039; method=&#039;POST&#039; accept-charset=&#039;utf-8&#039;&gt;
      &lt;div id=&#039;question&#039;&gt;
        What do you think is the coolest feature of Jaxer?
      &lt;/div&gt;
      &lt;div id=&#039;display&#039;&gt;
      &lt;/div&gt;
      &lt;div class=&#039;nonvoter&#039;&gt;
        &lt;input type=&#039;submit&#039; value=&#039;vote&#039;/&gt;
      &lt;/div&gt;
      &lt;div id=&#039;voteTotals&#039; class=&#039;voter&#039;&gt;
      &lt;/div&gt;
    &lt;/form&gt;
    &lt;script runat=&#039;server&#039;&gt;  
      // for the beta version of Jaxer, change it to the following
      //var db = Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolvePath(&#039;poll.sqlite&#039;)});  
      var db = Jaxer.DB.SQLite.createDB({PATH:Jaxer.Dir.resolve(&#039;poll.sqlite&#039;)});  
      db.execute(&quot;CREATE TABLE IF NOT EXISTS votes (id, ip, vote)&quot;);   
        
      var questions = 
      [ 
        &quot;Server-Side DOM&quot;
      , &quot;Server-Side Javascript&quot;
      , &quot;Seamless Ajax&quot;
      , &quot;I already know it!&quot;
      ];  
        
      var totalVotes = db.execute(&#039;SELECT count(*) FROM votes&#039;).singleResult - 
        questions.length;  
      if (totalVotes &lt; 0)  
      {
        // seed the table with 1 row per question to avoid nulls
        questions.map(function(item, index)   
        {  
          db.execute(&quot;INSERT INTO votes (id ,ip,vote) VALUES (?,?,?)&quot;, 
            &quot;&quot;+index, &#039;127.0.0.1&#039;, &quot;&quot;+index);  
        });  
        totalVotes = 0;  
      }
      // remove the following line to limit to 1 vote per user session
      // for the beta version of Jaxer, change it to the following
      //Jaxer.session.remove(&#039;status&#039;);
      delete Jaxer.session.status;
      
      // for the beta version of Jaxer, change the following line to
      //var status = Jaxer.session.get(&#039;status&#039;) || &#039;nonvoter&#039;;  
      var status = Jaxer.session.status || &#039;nonvoter&#039;; 
        
      // look for request data and save vote if present  
      if (&#039;radioBtns&#039; in Jaxer.request.data &amp;&amp; 
          (status == &#039;nonvoter&#039;))   
      {  
        db.execute(&quot;INSERT INTO votes (id,ip,vote) VALUES (?,?,?) &quot;   
        ,   Jaxer.SessionManager.keyFromRequest()   // session ID  
        ,   Jaxer.request.remoteAddr        // remote IP address  
        ,   Jaxer.request.data.radioBtns      // posted data  
        );  
        status = &#039;voter&#039;;   
        totalVotes ++ ;  
      }  
      rs = db.execute(&#039;SELECT count(*)-1 AS tot FROM votes GROUP BY vote&#039;);  
        
      var output = &lt;table&gt;&lt;/table&gt;;  
      for (var question in questions)  
      {  
        var percent = parseInt((rs.rows[question].tot / totalVotes) * 100);  
        output.appendChild(
          &lt;tr&gt;  
            &lt;td class=&#039;nonvoter&#039;&gt;
              &lt;input type=&#039;radio&#039; name=&#039;radioBtns&#039; value={question}/&gt;
            &lt;/td&gt;  
            &lt;td&gt;{questions[question]}&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;  
              &lt;img src=&quot;poll_l.png&quot; height=&#039;16&#039;/&gt;  
              &lt;img src=&quot;poll.png&quot;   height=&#039;16&#039; width={2+(percent * 2)}/&gt;  
              &lt;img src=&quot;poll_r.png&quot; height=&#039;16&#039;/&gt;&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;{rs.rows[question].tot}&lt;/td&gt;  
            &lt;td class=&#039;voter&#039;&gt;({percent}%)&lt;/td&gt;  
          &lt;/tr&gt;);   
      }  
      $(&#039;#display&#039;).html(output.toString());  
      $(&#039;#voteTotals&#039;).html(totalVotes + &quot; votes&quot;);  
        
      // remove DOM elements based on whether user has already voted  
      $((status == &#039;voter&#039;) ? &#039;.nonvoter&#039; : &#039;.voter&#039;).remove();   
        
      // for the beta version of Jaxer, change the following line to
      //Jaxer.session.set(&#039;status&#039;, status);  
      Jaxer.session.status = status;
        
      // no need for the client Framework to be injected into the page.  
      Jaxer.response.setClientFramework();   
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;/textarea&gt;


</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <enclosure url="http://aptana.com/system/files/choices_0.png" length="7259" type="image/x-png" />
 <pubDate>Thu, 03 Apr 2008 17:00:15 -0500</pubDate>
 <dc:creator>davey</dc:creator>
 <guid isPermaLink="false">336 at http://aptana.com</guid>
</item>
<item>
 <title>Dojo / Dijit markup and templates via Aptana Jaxer</title>
 <link>http://aptana.com/node/327</link>
 <description>Tony Issakov has written up a &lt;a target=&quot;_new&quot; href=&quot;http://dojofindings.blogspot.com/2008/03/templating-made-nicer-with-jaxer-dijit.html&quot;&gt;nice conceptual article&lt;/a&gt; on how Aptana Jaxer can simplify certain tasks of dojo and dijit development.  He starts with a simple case of how Jaxer can enable simplified server-side dijit markup, then expands the ideas to JSF, JSTL, and templates.

Tony explains: &quot;Once upon a time dojo had markup ability using custom tags. This was pulled because as it turns out, some browsers just scrap tags they don&#039;t understand. One browser that did support tags of a non HTML nature though was Mozilla and in turn we get this freedom back via Jaxer.&quot;

For example:

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
&lt;div dojoType=&quot;dijit.form.button&quot; label=&quot;test&quot;&gt;&lt;/div&gt;
&lt;/textarea&gt;

can become...

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
&lt;dijit type=&quot;button&quot; label=&quot;test2&quot;&gt;&lt;/dijit&gt;
&lt;/textarea&gt;

</description>
 <content:encoded>Tony Issakov has written up a &lt;a target=&quot;_new&quot; href=&quot;http://dojofindings.blogspot.com/2008/03/templating-made-nicer-with-jaxer-dijit.html&quot;&gt;nice conceptual article&lt;/a&gt; on how Aptana Jaxer can simplify certain tasks of dojo and dijit development.  He starts with a simple case of how Jaxer can enable simplified server-side dijit markup, then expands the ideas to JSF, JSTL, and templates.

Tony explains: &quot;Once upon a time dojo had markup ability using custom tags. This was pulled because as it turns out, some browsers just scrap tags they don&#039;t understand. One browser that did support tags of a non HTML nature though was Mozilla and in turn we get this freedom back via Jaxer.&quot;

For example:

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
&lt;div dojoType=&quot;dijit.form.button&quot; label=&quot;test&quot;&gt;&lt;/div&gt;
&lt;/textarea&gt;

can become...

&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot; cols=&#039;150&#039; row=&#039;15&#039;&gt;
&lt;dijit type=&quot;button&quot; label=&quot;test2&quot;&gt;&lt;/dijit&gt;
&lt;/textarea&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 24 Mar 2008 14:29:31 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">327 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Jaxer 0.9.5 Now Available with Faster Performance, New Features</title>
 <link>http://aptana.com/node/326</link>
 <description>&lt;p&gt;Aptana Jaxer has been updated to 0.9.5 providing increased performance for server-side JavaScript and a host of other enhancements to make End-to-End Ajax development easier.  &lt;/p&gt;
&lt;p&gt;Aptana Studio users can get the latest via Help &amp;gt; Software Updates.  Otherwise, &lt;a href=&quot;/download&quot; target=&quot;_new&quot;&gt;download the latest now&lt;/a&gt;.  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Increased Performance&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	Aptana Jaxer&#039;s core is now based on &lt;b&gt;Mozilla FireFox Beta3&lt;/b&gt; and thus delivers improved JS performance and memory management.
&lt;li&gt;	Jaxer now &lt;b&gt;pre-parses scripts to bytecode&lt;/b&gt; for faster execution during callbacks.
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;More Natural JS Environment&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	&lt;b&gt;Window and document objects on the server-side&lt;/b&gt; now parallel more closely how you work with them on the client-side. This means a more natural coding style with server-side JavaScript in Jaxer and a more browser compatible experience.
&lt;li&gt;	Jaxer &lt;b&gt;no longer inlines external scripts&lt;/b&gt; to the page, this allows for correct use of browser cache on client side content and makes &#039;view source&#039; a much more pleasant experience.  This also applies to &lt;b&gt;Jaxer&#039;s ClientFramework&lt;/b&gt; (the client-side JavaScript Jaxer puts in pages to facilitate callbacks and remote method invocation). Instead such external scripts are cachebusted with the buildnumber so that upgrading the server will automatically expire any old client side cache copies.
&lt;li&gt;	A new &lt;b&gt;autoload&lt;/b&gt; feature has been added to allow for an entire script file to be cached server-side and reloaded on every regular and callback request. This is ideal for loading JavaScript libraries server-side. A configuration option is provided to expire the script every time the containing page is accessed, to ease development cycles -- this is the default config setting. See &lt;a href=&quot;http://www.aptana.com/node/202&quot; title=&quot;http://www.aptana.com/node/202&quot;&gt;http://www.aptana.com/node/202&lt;/a&gt; for a full example.
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Improved Platform Support&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;Significantly improved &lt;b&gt;Unix support&lt;/b&gt;.  Jaxer now builds and runs on &lt;b&gt;Solaris&lt;/b&gt; too!
&lt;li&gt;&lt;b&gt;mySQL&lt;/b&gt; support is now also provided for &lt;b&gt;Mac OSX&lt;/b&gt;
&lt;li&gt;A number of &lt;b&gt;Windows Vista&lt;/b&gt; security/UAC related problems have been addressed
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;API Enhancements&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	Jaxer&#039;s &lt;b&gt;file system API&lt;/b&gt; has been updated -- mostly around the &#039;quick&#039; static method. For example: &lt;b&gt;Jaxer.File.chmod(&#039;myfile.tx&#039;,0400)&lt;/b&gt;
&lt;li&gt;	A simple &lt;b&gt;Stopwatch&lt;/b&gt; timer API now allows for timing measurements in code.
&lt;/ul&gt;
&lt;/ul&gt;
</description>
 <content:encoded>&lt;p&gt;Aptana Jaxer has been updated to 0.9.5 providing increased performance for server-side JavaScript and a host of other enhancements to make End-to-End Ajax development easier.  &lt;/p&gt;
&lt;p&gt;Aptana Studio users can get the latest via Help &amp;gt; Software Updates.  Otherwise, &lt;a href=&quot;/download&quot; target=&quot;_new&quot;&gt;download the latest now&lt;/a&gt;.  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Increased Performance&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	Aptana Jaxer&#039;s core is now based on &lt;b&gt;Mozilla FireFox Beta3&lt;/b&gt; and thus delivers improved JS performance and memory management.
&lt;li&gt;	Jaxer now &lt;b&gt;pre-parses scripts to bytecode&lt;/b&gt; for faster execution during callbacks.
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;More Natural JS Environment&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	&lt;b&gt;Window and document objects on the server-side&lt;/b&gt; now parallel more closely how you work with them on the client-side. This means a more natural coding style with server-side JavaScript in Jaxer and a more browser compatible experience.
&lt;li&gt;	Jaxer &lt;b&gt;no longer inlines external scripts&lt;/b&gt; to the page, this allows for correct use of browser cache on client side content and makes &#039;view source&#039; a much more pleasant experience.  This also applies to &lt;b&gt;Jaxer&#039;s ClientFramework&lt;/b&gt; (the client-side JavaScript Jaxer puts in pages to facilitate callbacks and remote method invocation). Instead such external scripts are cachebusted with the buildnumber so that upgrading the server will automatically expire any old client side cache copies.
&lt;li&gt;	A new &lt;b&gt;autoload&lt;/b&gt; feature has been added to allow for an entire script file to be cached server-side and reloaded on every regular and callback request. This is ideal for loading JavaScript libraries server-side. A configuration option is provided to expire the script every time the containing page is accessed, to ease development cycles -- this is the default config setting. See &lt;a href=&quot;http://www.aptana.com/node/202&quot; title=&quot;http://www.aptana.com/node/202&quot;&gt;http://www.aptana.com/node/202&lt;/a&gt; for a full example.
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Improved Platform Support&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;Significantly improved &lt;b&gt;Unix support&lt;/b&gt;.  Jaxer now builds and runs on &lt;b&gt;Solaris&lt;/b&gt; too!
&lt;li&gt;&lt;b&gt;mySQL&lt;/b&gt; support is now also provided for &lt;b&gt;Mac OSX&lt;/b&gt;
&lt;li&gt;A number of &lt;b&gt;Windows Vista&lt;/b&gt; security/UAC related problems have been addressed
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;API Enhancements&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;	Jaxer&#039;s &lt;b&gt;file system API&lt;/b&gt; has been updated -- mostly around the &#039;quick&#039; static method. For example: &lt;b&gt;Jaxer.File.chmod(&#039;myfile.tx&#039;,0400)&lt;/b&gt;
&lt;li&gt;	A simple &lt;b&gt;Stopwatch&lt;/b&gt; timer API now allows for timing measurements in code.
&lt;/ul&gt;
&lt;/ul&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/33">pro</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Mon, 24 Mar 2008 12:33:09 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">326 at http://aptana.com</guid>
</item>
<item>
 <title>Easy File Uploading using Aptana Jaxer</title>
 <link>http://aptana.com/node/323</link>
 <description>&lt;style&gt;pre { margin:5px; padding:5px;border:#ddd 1px solid;background:#eee}&lt;/style&gt;    
&lt;P&gt;One of the common web tasks that always seems to involve a lot of arcane knowledge of backend systems, is how to upload files. Like most systems, Aptana Jaxer uses the post/receive model, where a web form is posted to the server, and the target of that form will receive and process the content. Where Jaxer makes this really easy is that it is all done with regular JavaScript and HTML. No special enviroment vars, excessive string processing, or finding handles to oddly named temp files is required.&lt;/P&gt;
&lt;P&gt;All you need is a form to present to the user, which contains an input element of type upload, and an HTML page to receive the submitted form containing a &quot;runat=server&quot; script block that retrieves the data from the request. You could have the form and the recipient be the same page, however in this example I&#039;ll use two files for clarity. As an aside in Jaxer you can actually send the form directly to a JavaScript function living on the server but we&#039;ll look at that configuration in a future blog entry.&lt;/P&gt;   
&lt;h4&gt;Example HTML Upload Form &lt;/h4&gt;   
&lt;P&gt;   
This example upload form simply allows you to select up to 2 files for upload from the local filesystem. Pressing &#039;upload&#039; posts the contents of that form to an HTML page containing the JavaScript shown later.   
&lt;/P&gt;   
&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;   
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;title&gt;Upload &lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id=&#039;upload&#039; action=&quot;submissions.html&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
    &lt;input type=&quot;file&quot; name=&quot;myFile1&quot;&gt;&lt;br&gt;
    &lt;input type=&quot;file&quot; name=&quot;myFile2&quot;&gt;&lt;input type=&quot;submit&quot; value=&#039;upload&#039;&gt;
	&lt;p&gt;
		&#039;upload&#039; sends the selected file(s) to the server.
	&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;	
&lt;/html&gt;
&lt;/textarea&gt;   
&lt;p&gt;The form will look like the following when viewed in a browser. Pressing the browse button will present you with a file selection dialog, or you can type the path into the input box directly. I&#039;ve used 2 file slots in this example to demostrate that the files passed in are available as part of an files array contained in the request object (a JavaScript representation of the HTTP request) and are accessed like any other JavaScript array.&lt;/p&gt;   
&lt;!--img src=&#039;http://www.aptana.com/system/files/upload_0.png&#039;/--&gt;

&lt;div style=&quot;background-color:white; border:1px solid #f5f5f5; padding:5px; width:80%&quot;&gt;
&lt;input type=&quot;file&quot; name=&quot;myFile1&quot;&gt;&lt;br&gt;
&lt;input type=&quot;file&quot; name=&quot;myFile2&quot;&gt;&lt;input type=&quot;submit&quot; value=&#039;upload&#039;&gt;
&lt;p&gt;
    &#039;upload&#039; sends the selected file(s) to the server.
&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  
&lt;h4&gt;Example Aptana Jaxer code to receive file uploads&lt;/h4&gt;   
&lt;p&gt;   
To receive the data from the form when submitted we put some Jaxer code into the page the form will be submitted to. The code below should be in script block with a runat = &#039;server&#039; attribute, which makes the code run serverside and doesn&#039;t present it to the client so you don&#039;t expose any serverside filenames or folder structures.&lt;/p&gt;   
&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;&lt;script type=&#039;text/javascript&#039; runat=&#039;server&#039;&gt;
var message = &quot;&quot;;

for (fileCount=0; fileCount&lt;Jaxer.request.files.length; fileCount++)
{
    var fileInfo = Jaxer.request.files[fileCount];
	
//    prior to Jaxer 0.9.8 use
//    var destinationFilePath = Jaxer.Dir.resolvePath(fileInfo.originalFileName);
    var destinationFilePath = Jaxer.Dir.resolve(fileInfo.originalFileName);
    fileInfo.save(destinationFilePath);

    message += &quot;&lt;br&gt;&quot; + [ 
		&quot;Saved to : &quot; 			+ destinationFilePath
	,	&quot;original filename : &quot; 		+ fileInfo.originalFileName
	,	&quot;temp filename : &quot;		+ fileInfo.tempFileName
	,	&quot;contentType : &quot; 		+ fileInfo.contentType
	,	&quot;size : &quot; 				+ fileInfo.fileSize
	].join(&quot;&lt;br&gt;&quot;);
	
}
document.write(message); 
&lt;/script&gt;&lt;/textarea&gt;

&lt;P&gt;   
The data posted by the form is available within the Jaxer.request object.
&lt;/P&gt;
&lt;P&gt;For the purposes of this example we are specifically interested in the Jaxer.request.files array which contains an array of Jaxer.Request.FileInfo objects, one for each file posted with the form.
&lt;P&gt;&lt;/P&gt;  
The Jaxer.Request.FileInfo object contains some useful properties describing the file, such as fileName, contentType, etc.   
&lt;/P&gt;   
&lt;P&gt;
Uploading two files from my filesystem from the form in this example would return a page of output like below. We have uploaded the file to same location as the submission.html file used as the form action in the originating HTML.
&lt;/P&gt;
&lt;PRE&gt;Saved to : C:\aptana\JaxerDev\public\work\bar.txt
original filename : bar.txt
temp filename : C:\aptana\JaxerDev\tmp\tmp
contentType : text/plain
size : 15754
Saved to : C:\aptana\JaxerDev\public\work\foo.txt
original filename : foo.txt
temp filename : C:\aptana\JaxerDev\tmp\tmp-1
contentType : text/plain
size : 816
&lt;/PRE&gt;
&lt;P&gt;Well that&#039;s really all there is to it. It&#039;s simple and easy and you never have to think about anything other than HTML and Javascript.&lt;/P&gt;
&lt;P&gt;
API docs for the &lt;a href=http://www.aptana.com/reference/jaxer/api/Jaxer.Request.FileInfo.html&gt;FileInfo object&lt;/A&gt; and the &lt;a href=http://www.aptana.com/reference/jaxer/api/Jaxer.Request.html&gt;Jaxer.Request object&lt;/a&gt; are available online.
&lt;/P&gt;
</description>
 <content:encoded>&lt;style&gt;pre { margin:5px; padding:5px;border:#ddd 1px solid;background:#eee}&lt;/style&gt;    
&lt;P&gt;One of the common web tasks that always seems to involve a lot of arcane knowledge of backend systems, is how to upload files. Like most systems, Aptana Jaxer uses the post/receive model, where a web form is posted to the server, and the target of that form will receive and process the content. Where Jaxer makes this really easy is that it is all done with regular JavaScript and HTML. No special enviroment vars, excessive string processing, or finding handles to oddly named temp files is required.&lt;/P&gt;
&lt;P&gt;All you need is a form to present to the user, which contains an input element of type upload, and an HTML page to receive the submitted form containing a &quot;runat=server&quot; script block that retrieves the data from the request. You could have the form and the recipient be the same page, however in this example I&#039;ll use two files for clarity. As an aside in Jaxer you can actually send the form directly to a JavaScript function living on the server but we&#039;ll look at that configuration in a future blog entry.&lt;/P&gt;   
&lt;h4&gt;Example HTML Upload Form &lt;/h4&gt;   
&lt;P&gt;   
This example upload form simply allows you to select up to 2 files for upload from the local filesystem. Pressing &#039;upload&#039; posts the contents of that form to an HTML page containing the JavaScript shown later.   
&lt;/P&gt;   
&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;   
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;title&gt;Upload &lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id=&#039;upload&#039; action=&quot;submissions.html&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
    &lt;input type=&quot;file&quot; name=&quot;myFile1&quot;&gt;&lt;br&gt;
    &lt;input type=&quot;file&quot; name=&quot;myFile2&quot;&gt;&lt;input type=&quot;submit&quot; value=&#039;upload&#039;&gt;
	&lt;p&gt;
		&#039;upload&#039; sends the selected file(s) to the server.
	&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;	
&lt;/html&gt;
&lt;/textarea&gt;   
&lt;p&gt;The form will look like the following when viewed in a browser. Pressing the browse button will present you with a file selection dialog, or you can type the path into the input box directly. I&#039;ve used 2 file slots in this example to demostrate that the files passed in are available as part of an files array contained in the request object (a JavaScript representation of the HTTP request) and are accessed like any other JavaScript array.&lt;/p&gt;   
&lt;!--img src=&#039;http://www.aptana.com/system/files/upload_0.png&#039;/--&gt;

&lt;div style=&quot;background-color:white; border:1px solid #f5f5f5; padding:5px; width:80%&quot;&gt;
&lt;input type=&quot;file&quot; name=&quot;myFile1&quot;&gt;&lt;br&gt;
&lt;input type=&quot;file&quot; name=&quot;myFile2&quot;&gt;&lt;input type=&quot;submit&quot; value=&#039;upload&#039;&gt;
&lt;p&gt;
    &#039;upload&#039; sends the selected file(s) to the server.
&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  
&lt;h4&gt;Example Aptana Jaxer code to receive file uploads&lt;/h4&gt;   
&lt;p&gt;   
To receive the data from the form when submitted we put some Jaxer code into the page the form will be submitted to. The code below should be in script block with a runat = &#039;server&#039; attribute, which makes the code run serverside and doesn&#039;t present it to the client so you don&#039;t expose any serverside filenames or folder structures.&lt;/p&gt;   
&lt;textarea name=&quot;code&quot; class=&quot;HTML&quot; cols=&#039;150&#039; rows=&#039;15&#039;&gt;&lt;script type=&#039;text/javascript&#039; runat=&#039;server&#039;&gt;
var message = &quot;&quot;;

for (fileCount=0; fileCount&lt;Jaxer.request.files.length; fileCount++)
{
    var fileInfo = Jaxer.request.files[fileCount];
	
//    prior to Jaxer 0.9.8 use
//    var destinationFilePath = Jaxer.Dir.resolvePath(fileInfo.originalFileName);
    var destinationFilePath = Jaxer.Dir.resolve(fileInfo.originalFileName);
    fileInfo.save(destinationFilePath);

    message += &quot;&lt;br&gt;&quot; + [ 
		&quot;Saved to : &quot; 			+ destinationFilePath
	,	&quot;original filename : &quot; 		+ fileInfo.originalFileName
	,	&quot;temp filename : &quot;		+ fileInfo.tempFileName
	,	&quot;contentType : &quot; 		+ fileInfo.contentType
	,	&quot;size : &quot; 				+ fileInfo.fileSize
	].join(&quot;&lt;br&gt;&quot;);
	
}
document.write(message); 
&lt;/script&gt;&lt;/textarea&gt;

&lt;P&gt;   
The data posted by the form is available within the Jaxer.request object.
&lt;/P&gt;
&lt;P&gt;For the purposes of this example we are specifically interested in the Jaxer.request.files array which contains an array of Jaxer.Request.FileInfo objects, one for each file posted with the form.
&lt;P&gt;&lt;/P&gt;  
The Jaxer.Request.FileInfo object contains some useful properties describing the file, such as fileName, contentType, etc.   
&lt;/P&gt;   
&lt;P&gt;
Uploading two files from my filesystem from the form in this example would return a page of output like below. We have uploaded the file to same location as the submission.html file used as the form action in the originating HTML.
&lt;/P&gt;
&lt;PRE&gt;Saved to : C:\aptana\JaxerDev\public\work\bar.txt
original filename : bar.txt
temp filename : C:\aptana\JaxerDev\tmp\tmp
contentType : text/plain
size : 15754
Saved to : C:\aptana\JaxerDev\public\work\foo.txt
original filename : foo.txt
temp filename : C:\aptana\JaxerDev\tmp\tmp-1
contentType : text/plain
size : 816
&lt;/PRE&gt;
&lt;P&gt;Well that&#039;s really all there is to it. It&#039;s simple and easy and you never have to think about anything other than HTML and Javascript.&lt;/P&gt;
&lt;P&gt;
API docs for the &lt;a href=http://www.aptana.com/reference/jaxer/api/Jaxer.Request.FileInfo.html&gt;FileInfo object&lt;/A&gt; and the &lt;a href=http://www.aptana.com/reference/jaxer/api/Jaxer.Request.html&gt;Jaxer.Request object&lt;/a&gt; are available online.
&lt;/P&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 18 Mar 2008 14:39:06 -0500</pubDate>
 <dc:creator>davey</dc:creator>
 <guid isPermaLink="false">323 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana-At-Large in March 2008</title>
 <link>http://aptana.com/node/321</link>
 <description>		Next week Aptana will be at AjaxWorld (NYC), iPhone Developer Summit (NYC), and EclipseCon (Silicon Valley).  
		Join us. We want to meet you, answer your questions, and get your feedback and ideas to make Aptana Studio and Aptana Jaxer even better for you. 
		(Of course you can do that anytime via our &lt;a href=&quot;http://support.aptana.com&quot; taget=&quot;_new&quot;&gt;ASAP&lt;/a&gt; enhancement request system too).



&lt;p&gt;&lt;a href=&quot;http://www.ajaxworld.com/ &quot; target=&quot;_new&quot;&gt;&lt;b&gt;AjaxWorld&lt;/b&gt;&lt;/a&gt;, March 18-20, New York, NY &lt;br /&gt;
Kevin Hakman presents &lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=36&quot; target=&quot;_new&quot;&gt;Aptana Studio: Your Unfair Advantage for AJAX, iPhone, Adobe AIR, PHP and Rails 
Development &lt;/a&gt;  and 
&lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=126&quot; target=&quot;_new&quot;&gt;Rapid Development of 
Enterprise Ajax Apps&lt;/a&gt; both on Wednesday, March 19.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.iphonedevsummit.com/&quot; target=&quot;_new&quot;&gt;&lt;b&gt;iPhone Developer Summit&lt;/b&gt;&lt;/a&gt;, March 18-20, New York, NY &lt;br /&gt;
Also on Wednesday March 19, Kevin Hakman presents &lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=35&quot; target=&quot;_new&quot;&gt;Developing AJAX Applications for iPhone and iPod Touch&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.eclipsecon.org/2008/&quot; target=&quot;_new&quot;&gt;&lt;b&gt;EclipseCon&lt;/b&gt;&lt;/a&gt;, March 17-19, Santa Clara, CA &lt;br /&gt;
Eclipse Monkey committer and Aptana engineer Ingo Muschenetz shares 
&lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=433&quot; target=&quot;_new&quot;&gt;Building Eclipse-based Products: A View From the Trenches&lt;/a&gt; 
on March 18, and Aptana engineer Kevin Sawicki delivers 
&lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=450&quot; target=&quot;_new&quot;&gt;
Pimp My Editor&lt;/a&gt;  with insights for extending and customizing features in Eclipse.
&lt;/p&gt;
We&#039;ll also be at the EclipseCon Ajax focused Birds of a Feather meeting -- check &lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=bofs/&quot; target=&quot;_new&quot;&gt;the schedule&lt;/a&gt; for details.
	</description>
 <content:encoded>		Next week Aptana will be at AjaxWorld (NYC), iPhone Developer Summit (NYC), and EclipseCon (Silicon Valley).  
		Join us. We want to meet you, answer your questions, and get your feedback and ideas to make Aptana Studio and Aptana Jaxer even better for you. 
		(Of course you can do that anytime via our &lt;a href=&quot;http://support.aptana.com&quot; taget=&quot;_new&quot;&gt;ASAP&lt;/a&gt; enhancement request system too).



&lt;p&gt;&lt;a href=&quot;http://www.ajaxworld.com/ &quot; target=&quot;_new&quot;&gt;&lt;b&gt;AjaxWorld&lt;/b&gt;&lt;/a&gt;, March 18-20, New York, NY &lt;br /&gt;
Kevin Hakman presents &lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=36&quot; target=&quot;_new&quot;&gt;Aptana Studio: Your Unfair Advantage for AJAX, iPhone, Adobe AIR, PHP and Rails 
Development &lt;/a&gt;  and 
&lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=126&quot; target=&quot;_new&quot;&gt;Rapid Development of 
Enterprise Ajax Apps&lt;/a&gt; both on Wednesday, March 19.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.iphonedevsummit.com/&quot; target=&quot;_new&quot;&gt;&lt;b&gt;iPhone Developer Summit&lt;/b&gt;&lt;/a&gt;, March 18-20, New York, NY &lt;br /&gt;
Also on Wednesday March 19, Kevin Hakman presents &lt;a href=&quot;http://www.ajaxworld.com/general/sessiondetail0308.htm?id=35&quot; target=&quot;_new&quot;&gt;Developing AJAX Applications for iPhone and iPod Touch&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.eclipsecon.org/2008/&quot; target=&quot;_new&quot;&gt;&lt;b&gt;EclipseCon&lt;/b&gt;&lt;/a&gt;, March 17-19, Santa Clara, CA &lt;br /&gt;
Eclipse Monkey committer and Aptana engineer Ingo Muschenetz shares 
&lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=433&quot; target=&quot;_new&quot;&gt;Building Eclipse-based Products: A View From the Trenches&lt;/a&gt; 
on March 18, and Aptana engineer Kevin Sawicki delivers 
&lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=450&quot; target=&quot;_new&quot;&gt;
Pimp My Editor&lt;/a&gt;  with insights for extending and customizing features in Eclipse.
&lt;/p&gt;
We&#039;ll also be at the EclipseCon Ajax focused Birds of a Feather meeting -- check &lt;a href=&quot;http://www.eclipsecon.org/2008/index.php?page=bofs/&quot; target=&quot;_new&quot;&gt;the schedule&lt;/a&gt; for details.
	</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/18">iphone</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/34">php</category>
 <category domain="http://aptana.com/taxonomy/term/33">pro</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Thu, 13 Mar 2008 15:45:56 -0500</pubDate>
 <dc:creator>khakman</dc:creator>
 <guid isPermaLink="false">321 at http://aptana.com</guid>
</item>
<item>
 <title>RadRails 1.0 Release</title>
 <link>http://aptana.com/node/320</link>
 <description>&lt;p&gt;I&#039;m happy to announce that RadRails 1.0 has been released today. This release has been a long time coming and includes a lot of new features and polish. We&#039;re especially proud of the progress we&#039;ve made here at Aptana since we took over the project. RadRails 0.7.2 users will definitely want to check out this new release - it offers a more stable environment, full Rails 2.0 support, support for JRuby, and a boatload of new features. For those who want the comprehensive list of changes since the 0.9.3 release, you can find &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10020&quot; target=&quot;_blank&quot;&gt;the changelist in ASAP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new Rails Shell console - A &lt;a href=&quot;http://www.aptana.tv/movies/aptana_radrails_rails_shell/aptana_radrails_rails_shell.html&quot;&gt;screencast dedicated to this feature&lt;/a&gt; is available at &lt;a href=&quot;http://www.aptana.tv&quot;&gt;aptana.tv&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bundled auto-installing gems for rails development&lt;/li&gt;
&lt;li&gt;A Ruby profiler for Pro users&lt;/li&gt;
&lt;li&gt;An RDoc preview view&lt;/li&gt;
&lt;li&gt;Extended RHTML/ERb color preferences&lt;/li&gt;
&lt;li&gt;Code completion for ActiveRecord model fields and finders&lt;/li&gt;
&lt;li&gt;Code completion suggesting method call arguments&lt;/li&gt;
&lt;li&gt;Significant expansion of code warnings and analysis, including syntax changes from Ruby 1.8 to 1.9&lt;/li&gt;
&lt;li&gt;An improved look and feel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These new features join an already impressive set of functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Fast Ruby debugger&lt;/li&gt;
&lt;li&gt;RHTML, YML, HTML, JS, and CSS editors with code assist.&lt;/li&gt;
&lt;li&gt;Unit testing integration and GUI&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Code analysis and warnings&lt;/li&gt;
&lt;li&gt;IDE Scriptable via Ruby&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/rails/#features&quot;&gt;Much, much more!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note that unless you&#039;ve been using 1.0.0 nightlies Aptana/Eclipse will &lt;b&gt;not&lt;/b&gt; automatically update you to 1.0. You&#039;ll need to force an install of RadRails 1.0 via the Start Page, Plugins Manager, or Software update mechanism that you used to initially install RadRails. For those who prefer to use the Software Update route, the update site URL for RadRails is: &lt;a href=&quot;http://update.aptana.com/update/rails/3.2/&quot; title=&quot;http://update.aptana.com/update/rails/3.2/&quot;&gt;http://update.aptana.com/update/rails/3.2/&lt;/a&gt;&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;I&#039;m happy to announce that RadRails 1.0 has been released today. This release has been a long time coming and includes a lot of new features and polish. We&#039;re especially proud of the progress we&#039;ve made here at Aptana since we took over the project. RadRails 0.7.2 users will definitely want to check out this new release - it offers a more stable environment, full Rails 2.0 support, support for JRuby, and a boatload of new features. For those who want the comprehensive list of changes since the 0.9.3 release, you can find &lt;a href=&quot;http://support.aptana.com/asap/browse/ROR/fixforversion/10020&quot; target=&quot;_blank&quot;&gt;the changelist in ASAP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new Rails Shell console - A &lt;a href=&quot;http://www.aptana.tv/movies/aptana_radrails_rails_shell/aptana_radrails_rails_shell.html&quot;&gt;screencast dedicated to this feature&lt;/a&gt; is available at &lt;a href=&quot;http://www.aptana.tv&quot;&gt;aptana.tv&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bundled auto-installing gems for rails development&lt;/li&gt;
&lt;li&gt;A Ruby profiler for Pro users&lt;/li&gt;
&lt;li&gt;An RDoc preview view&lt;/li&gt;
&lt;li&gt;Extended RHTML/ERb color preferences&lt;/li&gt;
&lt;li&gt;Code completion for ActiveRecord model fields and finders&lt;/li&gt;
&lt;li&gt;Code completion suggesting method call arguments&lt;/li&gt;
&lt;li&gt;Significant expansion of code warnings and analysis, including syntax changes from Ruby 1.8 to 1.9&lt;/li&gt;
&lt;li&gt;An improved look and feel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These new features join an already impressive set of functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Fast Ruby debugger&lt;/li&gt;
&lt;li&gt;RHTML, YML, HTML, JS, and CSS editors with code assist.&lt;/li&gt;
&lt;li&gt;Unit testing integration and GUI&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Code analysis and warnings&lt;/li&gt;
&lt;li&gt;IDE Scriptable via Ruby&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/rails/#features&quot;&gt;Much, much more!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note that unless you&#039;ve been using 1.0.0 nightlies Aptana/Eclipse will &lt;b&gt;not&lt;/b&gt; automatically update you to 1.0. You&#039;ll need to force an install of RadRails 1.0 via the Start Page, Plugins Manager, or Software update mechanism that you used to initially install RadRails. For those who prefer to use the Software Update route, the update site URL for RadRails is: &lt;a href=&quot;http://update.aptana.com/update/rails/3.2/&quot; title=&quot;http://update.aptana.com/update/rails/3.2/&quot;&gt;http://update.aptana.com/update/rails/3.2/&lt;/a&gt;&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/33">pro</category>
 <category domain="http://aptana.com/taxonomy/term/15">rails</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 11 Mar 2008 18:45:25 -0500</pubDate>
 <dc:creator>cwilliams</dc:creator>
 <guid isPermaLink="false">320 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana recap: Library updates and bug fixes on the way</title>
 <link>http://aptana.com/node/318</link>
 <description>&lt;p&gt;This week, the Aptana development team continued working on the 1.1.5 release for Aptana Studio and the 0.95 release for the Jaxer server. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;re planning to release &quot;nightly&quot; versions of Aptana Studio 1.1.5 and Jaxer 0.95 next week. These releases will contain numerous bug fixes. The Aptana Studio release should contain updates for many of the bundled Ajax Library frameworks, including support for EXT 2.0.2., Yahoo UI 2.5, Adobe Spry 1.6, and more.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Do you have a question about an Aptana Studio Pro license? Or do you need some basic troubleshooting help? Visit our recently re-organized &lt;a href=&quot;http://www.aptana.com/view/studio_faq&quot;&gt;Aptana Studio FAQ&lt;/a&gt; and see if your question has already been answered there.

&lt;p&gt;If you still need help, you can always file a support request in our &lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;ASAP system&lt;/a&gt;, of course.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;d like to thank our community for their help with submitting bugs and feature requests in ASAP. If you&#039;ve submitted a bug or a feature request and are curious if we&#039;ve implemented the fix or feature yet, visit your ASAP ticket and look for the &lt;b&gt;Fix Version&lt;/b&gt; field. This field lists the current target release date for the fix or feature.&lt;/p&gt;

</description>
 <content:encoded>&lt;p&gt;This week, the Aptana development team continued working on the 1.1.5 release for Aptana Studio and the 0.95 release for the Jaxer server. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;re planning to release &quot;nightly&quot; versions of Aptana Studio 1.1.5 and Jaxer 0.95 next week. These releases will contain numerous bug fixes. The Aptana Studio release should contain updates for many of the bundled Ajax Library frameworks, including support for EXT 2.0.2., Yahoo UI 2.5, Adobe Spry 1.6, and more.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Do you have a question about an Aptana Studio Pro license? Or do you need some basic troubleshooting help? Visit our recently re-organized &lt;a href=&quot;http://www.aptana.com/view/studio_faq&quot;&gt;Aptana Studio FAQ&lt;/a&gt; and see if your question has already been answered there.

&lt;p&gt;If you still need help, you can always file a support request in our &lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;ASAP system&lt;/a&gt;, of course.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;d like to thank our community for their help with submitting bugs and feature requests in ASAP. If you&#039;ve submitted a bug or a feature request and are curious if we&#039;ve implemented the fix or feature yet, visit your ASAP ticket and look for the &lt;b&gt;Fix Version&lt;/b&gt; field. This field lists the current target release date for the fix or feature.&lt;/p&gt;

</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 07 Mar 2008 17:00:54 -0600</pubDate>
 <dc:creator />
 <guid isPermaLink="false">318 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer on AIR: Build Desktop &amp; Server Apps in Ajax</title>
 <link>http://aptana.com/node/297</link>
 <description>&lt;p&gt;Yesterday Adobe announced the availability of Adobe AIR 1.0. At the same time, Aptana released the Adobe AIR plugin for Aptana Studio which simplifies development of Ajax applications that run &quot;on AIR&quot;. (&lt;a href=&quot;http://www.aptana.com/air/&quot;&gt;Adobe AIR Plugin for Aptana Studio&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If you are not familiar with Adobe AIR, it enables you to use the skills and Web technologies you already know, HTML, CSS, and JavaScript, to write applications that can be deployed to the Windows and Mac desktop, and shortly on Linux desktops too.&lt;/p&gt;
&lt;p&gt;And what is Aptana Jaxer, you ask? Jaxer is an Ajax server that enables you to leverage those same Web skills and technologies, HTML, CSS, and JavaScript, to write server-side code and do a whole new range of things with JavaScript like interact with databases, file systems, and remote data sources, do server-side DOM manipulations, cross-domain data calls, make socket connections, and call server-side JavaScript functions from the client-side, plus lots more. Yes, you write both client and server code using HTML and Ajax. You can even write entire web applications in a single HTML file if you wish.&lt;/p&gt;
&lt;p&gt;With that said, it becomes much clearer as to what ‘Jaxer on AIR’ is all about -- two systems that enable you to leverage your Ajax skills for building desktop and server apps, unified into a single, very interesting model.  With Jaxer you can implement your server-side to know if an app is running in AIR and thus take advantage of offline synchronization and local access to the client system as permitted, or if you’re running on the Web with a subset of the total potential features of your Ajax apps and Web pages.  &lt;/p&gt;
&lt;p&gt;I did a 10-minute screencast showing a simple example of this. I take one of Jack Slocum’s great Ext / Adobe AIR demos (&lt;a href=&quot;http://extjs.com/blog/2008/02/24/tasks2/&quot;&gt;EXT Tasks Demo&lt;/a&gt;) and Jaxer-enabled it. I added a single JavaScript function that can query my backend database, and I use the results to fill the user interface.&lt;/p&gt;
&lt;p&gt;This demo just scratches the surface of what is possible, but I hope it opens the doors to your thinking about how to utilize these great technologies – it’s my version of their chocolate and our peanut-butter happily together, enjoy!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=JaxerOnAIR&amp;amp;width=975&amp;amp;height=750&quot;&gt;View &#039;Jaxer on AIR&#039; Screencast&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Yesterday Adobe announced the availability of Adobe AIR 1.0. At the same time, Aptana released the Adobe AIR plugin for Aptana Studio which simplifies development of Ajax applications that run &quot;on AIR&quot;. (&lt;a href=&quot;http://www.aptana.com/air/&quot;&gt;Adobe AIR Plugin for Aptana Studio&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If you are not familiar with Adobe AIR, it enables you to use the skills and Web technologies you already know, HTML, CSS, and JavaScript, to write applications that can be deployed to the Windows and Mac desktop, and shortly on Linux desktops too.&lt;/p&gt;
&lt;p&gt;And what is Aptana Jaxer, you ask? Jaxer is an Ajax server that enables you to leverage those same Web skills and technologies, HTML, CSS, and JavaScript, to write server-side code and do a whole new range of things with JavaScript like interact with databases, file systems, and remote data sources, do server-side DOM manipulations, cross-domain data calls, make socket connections, and call server-side JavaScript functions from the client-side, plus lots more. Yes, you write both client and server code using HTML and Ajax. You can even write entire web applications in a single HTML file if you wish.&lt;/p&gt;
&lt;p&gt;With that said, it becomes much clearer as to what ‘Jaxer on AIR’ is all about -- two systems that enable you to leverage your Ajax skills for building desktop and server apps, unified into a single, very interesting model.  With Jaxer you can implement your server-side to know if an app is running in AIR and thus take advantage of offline synchronization and local access to the client system as permitted, or if you’re running on the Web with a subset of the total potential features of your Ajax apps and Web pages.  &lt;/p&gt;
&lt;p&gt;I did a 10-minute screencast showing a simple example of this. I take one of Jack Slocum’s great Ext / Adobe AIR demos (&lt;a href=&quot;http://extjs.com/blog/2008/02/24/tasks2/&quot;&gt;EXT Tasks Demo&lt;/a&gt;) and Jaxer-enabled it. I added a single JavaScript function that can query my backend database, and I use the results to fill the user interface.&lt;/p&gt;
&lt;p&gt;This demo just scratches the surface of what is possible, but I hope it opens the doors to your thinking about how to utilize these great technologies – it’s my version of their chocolate and our peanut-butter happily together, enjoy!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://aptana.tv/movies/jaxer/PlayQTFlash.html?movie=JaxerOnAIR&amp;amp;width=975&amp;amp;height=750&quot;&gt;View &#039;Jaxer on AIR&#039; Screencast&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Tue, 26 Feb 2008 19:33:56 -0600</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">297 at http://aptana.com</guid>
</item>
<item>
 <title>Ajax Pioneer Kevin Hakman joins Aptana, Inc.</title>
 <link>http://aptana.com/node/292</link>
 <description>&lt;p&gt;We are excited to announce that Kevin Hakman has joined Aptana to head up marketing and developer community programs.  Kevin is a recognized leader in the Ajax community.  Long before the term &quot;Ajax&quot; was coined, Kevin was pioneering single page web application concepts via the company he co-founded, General Interface Corp., one of the first enterprise Ajax libraries and visual development tools companies.  General Interface Corp. went on to be acquired by TIBCO Software in 2004 as a compliment the company&#039;s service-oriented architecture (SOA) products.  Today TIBCO General Interface is used by many Fortune-scale companies for rapid Web application development and deployment atop their XML and SOAP data sources.  &lt;/p&gt;
&lt;p&gt;In addition to his historic role on the steering committee of the OpenAjax Alliance, Kevin currently chairs the organization&#039;s integrated development environment working group.  The OpenAjax Alliance IDE Working Group which includes Adobe, Aptana, the Eclipse Foundation, IBM, Microsoft, Sun, TIBCO and others is now close to delivering a draft specification for a uniform way to describe Ajax libraries and controls and thus streamline the ability to use Ajax libraries within your development tools of choice.  Kevin is a frequent speaker at Ajax industry events and is an author to many published articles on Ajax in the enterprise.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;We are excited to announce that Kevin Hakman has joined Aptana to head up marketing and developer community programs.  Kevin is a recognized leader in the Ajax community.  Long before the term &quot;Ajax&quot; was coined, Kevin was pioneering single page web application concepts via the company he co-founded, General Interface Corp., one of the first enterprise Ajax libraries and visual development tools companies.  General Interface Corp. went on to be acquired by TIBCO Software in 2004 as a compliment the company&#039;s service-oriented architecture (SOA) products.  Today TIBCO General Interface is used by many Fortune-scale companies for rapid Web application development and deployment atop their XML and SOAP data sources.  &lt;/p&gt;
&lt;p&gt;In addition to his historic role on the steering committee of the OpenAjax Alliance, Kevin currently chairs the organization&#039;s integrated development environment working group.  The OpenAjax Alliance IDE Working Group which includes Adobe, Aptana, the Eclipse Foundation, IBM, Microsoft, Sun, TIBCO and others is now close to delivering a draft specification for a uniform way to describe Ajax libraries and controls and thus streamline the ability to use Ajax libraries within your development tools of choice.  Kevin is a frequent speaker at Ajax industry events and is an author to many published articles on Ajax in the enterprise.&lt;/p&gt;
</content:encoded>
 <comments>http://aptana.com/node/292#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <pubDate>Mon, 25 Feb 2008 17:00:08 -0600</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">292 at http://aptana.com</guid>
</item>
<item>
 <title>A Jaxer Roadmap</title>
 <link>http://aptana.com/node/285</link>
 <description>&lt;p&gt;This past week we released another point release of Jaxer, version 0.9.3, updating the standalone server as well as the one packaged within Aptana Studio. Of course there were bug fixes, performance improvements, and API enhancements. Perhaps most important, this was our first release to officially support Linux. Supporting Linux isn&#039;t trivial because of the multitude of variants, but it is very strategic as the deployment platform of choice for many people. Look for more distros being supported and more forms of distribution, from buildable source drops to tarballs and installable packages and even to complete EC2 and VMWare images. And thanks to the community for already helping us with supporting Linux distros.&lt;/p&gt;
&lt;p&gt;So where are these releases leading &amp;mdash; what are some things on the immediate roadmap for Jaxer? &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;An even more Ajax-y experience&lt;/b&gt;: the callback environment will be made more natural, server-side support for Ajax libraries will expand, mashups will be easier to implement, etc.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scalability and performance&lt;/b&gt;: we&#039;ll release some interesting benchmarks on current Jaxer performance and stability, illustrate how it scales, and make some significant improvements.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;More APIs&lt;/b&gt;: we&#039;ll make database, file, network, and native interfaces more powerful while maintaining clean APIs that feel at home in JavaScript and HTML.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;More integration&lt;/b&gt;: we&#039;re creating a true bridge to Java by leveraging &lt;a href=&quot;http://getahead.org/dwr&quot; target=&quot;_blank&quot;&gt;DWR (Direct Web Remoting)&lt;/a&gt; server-side, in addition to our current support for Tomcat (and other servlet containers); we&#039;ll expand the list of supported web servers from the current Apache 2.x and Jetty to IIS, Apache 1.3, and perhaps others; and we&#039;ll work on other database drivers.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Deployment&lt;/b&gt;: we&#039;re working on making one-click deployment a reality, so you can develop your Ajax apps in Studio, leveraging Jaxer for the server side, and click to deploy your app to a hosted, managed, monitored, and scalable environment.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tooling&lt;/b&gt;: How about seamless end-to-end debugging of your Ajax app &amp;mdash; step through your program starting on the server, move to the browser, go back to the server for a callback, then back to the browser for processing the result...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Real-world apps&lt;/b&gt;: in the spirit of eating our own dog food, and supporting dog food consumption in the community, look for complete applications written on Jaxer and en expansion of our web site and of Studio so you can share your snippets, samples, projects and applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oh, and the time frame? We&#039;re not exactly the patient type, so for many of these think weeks rather than months. Want something specific to come out even faster? Join the discussions on the &lt;a href=&quot;http://forums.aptana.com&quot; target=&quot;_blank&quot;&gt;forums&lt;/a&gt;, join the effort (some folks are supporting Linux distros, others are building persistence frameworks, some are putting together samples), or &lt;a href=&quot;http://www.aptana.com/careers&quot; target=&quot;_blank&quot;&gt;join our team&lt;/a&gt;.&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;This past week we released another point release of Jaxer, version 0.9.3, updating the standalone server as well as the one packaged within Aptana Studio. Of course there were bug fixes, performance improvements, and API enhancements. Perhaps most important, this was our first release to officially support Linux. Supporting Linux isn&#039;t trivial because of the multitude of variants, but it is very strategic as the deployment platform of choice for many people. Look for more distros being supported and more forms of distribution, from buildable source drops to tarballs and installable packages and even to complete EC2 and VMWare images. And thanks to the community for already helping us with supporting Linux distros.&lt;/p&gt;
&lt;p&gt;So where are these releases leading &amp;mdash; what are some things on the immediate roadmap for Jaxer? &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;An even more Ajax-y experience&lt;/b&gt;: the callback environment will be made more natural, server-side support for Ajax libraries will expand, mashups will be easier to implement, etc.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scalability and performance&lt;/b&gt;: we&#039;ll release some interesting benchmarks on current Jaxer performance and stability, illustrate how it scales, and make some significant improvements.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;More APIs&lt;/b&gt;: we&#039;ll make database, file, network, and native interfaces more powerful while maintaining clean APIs that feel at home in JavaScript and HTML.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;More integration&lt;/b&gt;: we&#039;re creating a true bridge to Java by leveraging &lt;a href=&quot;http://getahead.org/dwr&quot; target=&quot;_blank&quot;&gt;DWR (Direct Web Remoting)&lt;/a&gt; server-side, in addition to our current support for Tomcat (and other servlet containers); we&#039;ll expand the list of supported web servers from the current Apache 2.x and Jetty to IIS, Apache 1.3, and perhaps others; and we&#039;ll work on other database drivers.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Deployment&lt;/b&gt;: we&#039;re working on making one-click deployment a reality, so you can develop your Ajax apps in Studio, leveraging Jaxer for the server side, and click to deploy your app to a hosted, managed, monitored, and scalable environment.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tooling&lt;/b&gt;: How about seamless end-to-end debugging of your Ajax app &amp;mdash; step through your program starting on the server, move to the browser, go back to the server for a callback, then back to the browser for processing the result...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Real-world apps&lt;/b&gt;: in the spirit of eating our own dog food, and supporting dog food consumption in the community, look for complete applications written on Jaxer and en expansion of our web site and of Studio so you can share your snippets, samples, projects and applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oh, and the time frame? We&#039;re not exactly the patient type, so for many of these think weeks rather than months. Want something specific to come out even faster? Join the discussions on the &lt;a href=&quot;http://forums.aptana.com&quot; target=&quot;_blank&quot;&gt;forums&lt;/a&gt;, join the effort (some folks are supporting Linux distros, others are building persistence frameworks, some are putting together samples), or &lt;a href=&quot;http://www.aptana.com/careers&quot; target=&quot;_blank&quot;&gt;join our team&lt;/a&gt;.&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Sun, 24 Feb 2008 05:52:36 -0600</pubDate>
 <dc:creator>uri</dc:creator>
 <guid isPermaLink="false">285 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana recap: Jaxer now available for Linux</title>
 <link>http://aptana.com/node/284</link>
 <description>&lt;p&gt;This past week, the Aptana development team released a patch release that provides support for the Jaxer server on Linux. Read on to learn more details about this release.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Earlier this week, Aptana released new &quot;nightly&quot; builds of both Aptana Studio (v.1.1.3) and the Jaxer server (0.93). Aptana Studio 1.1.3 contains several bug fixes. Jaxer 0.93 contains several major new additions including support for Linux and integration with Amazon&#039;s EC2 technology. You can read more about these developments on our blog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/278&quot;&gt;Jaxer Server Now on Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/279&quot;&gt;Jaxer Server now on EC2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Frequent visitors to the Aptana web site may have noticed some changes recently. We&#039;ve been in the process of re-organizing some of our documentation in order to make things easier for the community to find. One recent major addition that we&#039;ve made is the &lt;a href=&quot;http://www.aptana.com/jaxer/book&quot;&gt;Book of Jaxer&lt;/a&gt;, which is now the main landing page for all of our Jaxer documentation. Additionally, we&#039;ve compiled a new &lt;a href=&quot;http://www.aptana.com/view/studio_faq&quot;&gt;FAQ page for Aptana Studio&lt;/a&gt;, which should answer most of your questions about Aptana Studio licenses and otherwise help you get started with Studio.&lt;/p&gt;

&lt;p&gt;If you&#039;re having trouble finding a certain piece of information or notice that we&#039;re missing a Help topic on something, please file a new request in &lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;ASAP&lt;/a&gt;, and we&#039;ll try to get the information added to the site as quickly as we can.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Are you new to Jaxer development, but aren&#039;t quite sure how to get started? Our new &lt;a href=&quot;http://www.aptana.com/jaxer/quickstart&quot;&gt;Jaxer Quick Start Guide&lt;/a&gt; is a fast and easy way to walk through the entire process. This guide covers all of the basic information that you&#039;ll need to get started with Jaxer, including installation, creating your first Jaxer project, and resources for learning more.&lt;/p&gt;

</description>
 <content:encoded>&lt;p&gt;This past week, the Aptana development team released a patch release that provides support for the Jaxer server on Linux. Read on to learn more details about this release.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Earlier this week, Aptana released new &quot;nightly&quot; builds of both Aptana Studio (v.1.1.3) and the Jaxer server (0.93). Aptana Studio 1.1.3 contains several bug fixes. Jaxer 0.93 contains several major new additions including support for Linux and integration with Amazon&#039;s EC2 technology. You can read more about these developments on our blog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/278&quot;&gt;Jaxer Server Now on Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aptana.com/node/279&quot;&gt;Jaxer Server now on EC2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Frequent visitors to the Aptana web site may have noticed some changes recently. We&#039;ve been in the process of re-organizing some of our documentation in order to make things easier for the community to find. One recent major addition that we&#039;ve made is the &lt;a href=&quot;http://www.aptana.com/jaxer/book&quot;&gt;Book of Jaxer&lt;/a&gt;, which is now the main landing page for all of our Jaxer documentation. Additionally, we&#039;ve compiled a new &lt;a href=&quot;http://www.aptana.com/view/studio_faq&quot;&gt;FAQ page for Aptana Studio&lt;/a&gt;, which should answer most of your questions about Aptana Studio licenses and otherwise help you get started with Studio.&lt;/p&gt;

&lt;p&gt;If you&#039;re having trouble finding a certain piece of information or notice that we&#039;re missing a Help topic on something, please file a new request in &lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;ASAP&lt;/a&gt;, and we&#039;ll try to get the information added to the site as quickly as we can.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Are you new to Jaxer development, but aren&#039;t quite sure how to get started? Our new &lt;a href=&quot;http://www.aptana.com/jaxer/quickstart&quot;&gt;Jaxer Quick Start Guide&lt;/a&gt; is a fast and easy way to walk through the entire process. This guide covers all of the basic information that you&#039;ll need to get started with Jaxer, including installation, creating your first Jaxer project, and resources for learning more.&lt;/p&gt;

</content:encoded>
 <comments>http://aptana.com/node/284#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Fri, 22 Feb 2008 16:48:58 -0600</pubDate>
 <dc:creator />
 <guid isPermaLink="false">284 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer Server now on EC2</title>
 <link>http://aptana.com/node/279</link>
 <description>&lt;p&gt;Are you looking for a quick and easy way to deploy your Jaxer applications? You can now take advantage of the cloud technology provided by Amazon&#039;s Elastic Compute Cloud (also known as EC2). EC2 provides you with a fast way to get going with Jaxer and to deploy it on a hosted infrastructure. With your own EC2 instance, you can make your Jaxer applications available for both private and public consumption.&lt;/p&gt;

&lt;p&gt;The Jaxer Team has set up a CentOS image with Jaxer pre-configured and ready to go. Find out how to get your own instance running (and more) on the &lt;a href=&quot;http://www.aptana.com/node/276&quot;&gt;Running an EC2 Instance of the Jaxer Server&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;We&#039;d love to hear about what you&#039;re building with Jaxer, so if you&#039;re working on a Jaxer app or just have a few questions about Jaxer, we&#039;d like to invite you to participate in our &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot;&gt;Jaxer community forums&lt;/a&gt;.
</description>
 <content:encoded>&lt;p&gt;Are you looking for a quick and easy way to deploy your Jaxer applications? You can now take advantage of the cloud technology provided by Amazon&#039;s Elastic Compute Cloud (also known as EC2). EC2 provides you with a fast way to get going with Jaxer and to deploy it on a hosted infrastructure. With your own EC2 instance, you can make your Jaxer applications available for both private and public consumption.&lt;/p&gt;

&lt;p&gt;The Jaxer Team has set up a CentOS image with Jaxer pre-configured and ready to go. Find out how to get your own instance running (and more) on the &lt;a href=&quot;http://www.aptana.com/node/276&quot;&gt;Running an EC2 Instance of the Jaxer Server&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;We&#039;d love to hear about what you&#039;re building with Jaxer, so if you&#039;re working on a Jaxer app or just have a few questions about Jaxer, we&#039;d like to invite you to participate in our &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot;&gt;Jaxer community forums&lt;/a&gt;.
</content:encoded>
 <comments>http://aptana.com/node/279#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Wed, 20 Feb 2008 21:18:17 -0600</pubDate>
 <dc:creator />
 <guid isPermaLink="false">279 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer Server Now on Linux</title>
 <link>http://aptana.com/node/278</link>
 <description>&lt;p&gt;The Jaxer Team is proud to announce that we now support Jaxer for several Linux platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;CentOS&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;/ul&gt; 

&lt;p&gt;To learn how to get up and running on Linux, see the &lt;a href=&quot;http://www.aptana.com/jaxer/linux&quot;&gt;Jaxer Standalone Installation guide for Linux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We&#039;ve been working with volunteer beta testers within the Jaxer community to bring you these distros, and we plan to support additional distros in the future. However, this is our initial release for Linux support and because the various Linux platforms have so many nuances, some Linux platforms could likely still have some issues. Our Linux support is very community driven, so we invite you to participate in the platform vote on the forums to voice your opinion about your preferred platform:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=4844&quot;&gt;http://forums.aptana.com/viewtopic.php?t=4844&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have Jaxer up and running on a platform that we have not listed, let us know so we can add it to the list of supported platforms. Additionally, if you need help troubleshooting issues with Jaxer on your Linux platform, post your questions on the &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot;&gt;Jaxer forums&lt;/a&gt;.&lt;/p&gt;



</description>
 <content:encoded>&lt;p&gt;The Jaxer Team is proud to announce that we now support Jaxer for several Linux platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;CentOS&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;/ul&gt; 

&lt;p&gt;To learn how to get up and running on Linux, see the &lt;a href=&quot;http://www.aptana.com/jaxer/linux&quot;&gt;Jaxer Standalone Installation guide for Linux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We&#039;ve been working with volunteer beta testers within the Jaxer community to bring you these distros, and we plan to support additional distros in the future. However, this is our initial release for Linux support and because the various Linux platforms have so many nuances, some Linux platforms could likely still have some issues. Our Linux support is very community driven, so we invite you to participate in the platform vote on the forums to voice your opinion about your preferred platform:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://forums.aptana.com/viewtopic.php?t=4844&quot;&gt;http://forums.aptana.com/viewtopic.php?t=4844&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have Jaxer up and running on a platform that we have not listed, let us know so we can add it to the list of supported platforms. Additionally, if you need help troubleshooting issues with Jaxer on your Linux platform, post your questions on the &lt;a href=&quot;http://forums.aptana.com/index.php?c=12&quot;&gt;Jaxer forums&lt;/a&gt;.&lt;/p&gt;



</content:encoded>
 <comments>http://aptana.com/node/278#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Wed, 20 Feb 2008 19:36:57 -0600</pubDate>
 <dc:creator>klindsey</dc:creator>
 <guid isPermaLink="false">278 at http://aptana.com</guid>
</item>
<item>
 <title>A very simple file based blog on Jaxer</title>
 <link>http://aptana.com/node/260</link>
 <description>&lt;p&gt;This tutorial is a sample of some functionality you can quickly achieve in Jaxer. In this case we&#039;ll be building a very basic file-based &quot;blog&quot;. &lt;/p&gt;
&lt;p&gt;The idea is simple: Create an HTML page that will show all the &quot;posts&quot;. A post is created by creating or FTPing a txt file to the server and naming it so it will appear in the order desired. We&#039;ll also add the ability to use Markdown syntax in the txt file so you can easily do some basic HTML without the HTML syntax.&lt;/p&gt;
&lt;p&gt;You can easily extend this to add a page where posts can be written and previewed, re-ordered/renamed, move to using a DB instead of txt files, etc.&lt;/p&gt;
&lt;p&gt;We&#039;ll want a folder named &quot;articles&quot; as a sub-folder of our project. Next we&#039;ll create a simple index HTML page as a peer of that folder, with a div inside the body containing the id &quot;posts&quot;.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My Blog&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;My Blog&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&quot;posts&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To get started writing server side Javascript we &#039;ll add a script tag in the head with a runat attribute set to server:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;script runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Jaxer has a nice API that allows you to work with the filesystem directly on the server. We&#039;re going to take advantage of that to have it grab files inside the &quot;articles&quot; folder that is a peer of our html file on the server:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
function init() {&lt;br /&gt;
            	var path = Jaxer.Dir.resolve(&quot;articles&quot;);&lt;br /&gt;
                var dir  = new Jaxer.Dir(path);&lt;br /&gt;
                var files = dir.readDir().map(function(file) {&lt;br /&gt;
                	return file.leaf;&lt;br /&gt;
                });&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Now we have a function which grabs the &quot;articles&quot; directory and then gets a listing of all the filenames inside that directory. Next we want to loop over the files, read in their contents and append it to a string that we&#039;ll be pushing back into the div with id &quot;posts&quot;.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
var html = &quot;&quot;;&lt;br /&gt;
for (var i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
  var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
  html+= read;&lt;br /&gt;
}&lt;br /&gt;
document.getElementById(&#039;posts&#039;).innerHTML = html;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pretty simple. We read all the files, concat their contents together into a string and then push that into the posts div. We can try it out by having this function run when the server has loaded the page/DOM. We just modify the body tag like so:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;body onserverload=&quot;init();&quot;&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
This tells Jaxer to run our init function when it has completed creation of the page&#039;s load process.&lt;/p&gt;
&lt;p&gt;Obviously, concatenating all the files contents together doesn&#039;t look too nice. Lets wrap each file&#039;s contents in a div with class &quot;post&quot; so we can style it later.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
html+= makePost(read);&lt;/p&gt;
&lt;p&gt;function makePost(contents) {&lt;br /&gt;
  return &quot;&amp;lt;div class=\&quot;post\&quot;&amp;gt;&quot; + contents + &quot;&amp;lt;/div&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
That&#039;s much better. Now we don&#039;t have all the files in one giant string.&lt;/p&gt;
&lt;p&gt;But this hasn&#039;t bought us much - we still have to write the HTML tags inside the txt files if we want to do any styling or marking up of the content. Let&#039;s provide a markup syntax to allow users to use simple text conventions to generate HTML. One such library is Markdown. We&#039;re going to use a nice Markdown in JS library provided from: &lt;a href=&quot;http://softwaremaniacs.org/playground/showdown-highlight/&quot; title=&quot;http://softwaremaniacs.org/playground/showdown-highlight/&quot;&gt;http://softwaremaniacs.org/playground/showdown-highlight/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&#039;s pretty simple to use. First we include the library on the server side:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;script src=&quot;showdown.js&quot; runat=&quot;server&quot;/&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Next, we use it to mark up the file&#039;s contents before we wrap it in the div:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
html+= makePost(markdown(read));&lt;br /&gt;
...&lt;br /&gt;
function markdown(content) {&lt;br /&gt;
  var converter = new Showdown.converter();&lt;br /&gt;
  return converter.makeHtml(contents);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
And there you have it. We now have a blog index page which will grab all of our article text files, run them through markdown and insert them into post divs for us.&lt;/p&gt;
&lt;p&gt;To wrap up here&#039;s the full code:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Articles&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&quot;/showdown.js&quot; runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
        var converter = new Showdown.converter();&lt;br /&gt;
        function createPost(contents){&lt;br /&gt;
            // Run markdown filter on contents&lt;br /&gt;
            var text = converter.makeHtml(contents);&lt;br /&gt;
            return &quot;&amp;lt;div class=\&quot;post\&quot;&amp;gt;&quot; + text + &quot;&amp;lt;/div&amp;gt;&quot;;&lt;br /&gt;
        }&lt;br /&gt;
        function init() {&lt;br /&gt;
            try {&lt;br /&gt;
                // read all the articles in text files in &quot;articles&quot; sub-dir of this dir (#.txt)&lt;br /&gt;
                var articlesPath = Jaxer.Dir.resolve(&quot;articles&quot;);&lt;br /&gt;
                var files = new Jaxer.Dir(articlesPath).readDir();&lt;br /&gt;
                var string = &quot;&quot;;&lt;br /&gt;
                var i = 0;&lt;br /&gt;
                for (i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
                    var filename = Jaxer.Dir.combine(articlesPath, files[i].leaf);&lt;br /&gt;
                    if (new Jaxer.FileUtils().ext(filename) == &quot;txt&quot;) {&lt;br /&gt;
                        var raw = Jaxer.File.read(filename);&lt;br /&gt;
                        string += createPost(raw);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                document.getElementById(&#039;output&#039;).innerHTML = string;&lt;br /&gt;
            }&lt;br /&gt;
            catch (err) {&lt;br /&gt;
                document.getElementById(&#039;output&#039;).innerHTML = err.description;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;body onserverload=&quot;init()&quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&quot;output&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;This tutorial is a sample of some functionality you can quickly achieve in Jaxer. In this case we&#039;ll be building a very basic file-based &quot;blog&quot;. &lt;/p&gt;
&lt;p&gt;The idea is simple: Create an HTML page that will show all the &quot;posts&quot;. A post is created by creating or FTPing a txt file to the server and naming it so it will appear in the order desired. We&#039;ll also add the ability to use Markdown syntax in the txt file so you can easily do some basic HTML without the HTML syntax.&lt;/p&gt;
&lt;p&gt;You can easily extend this to add a page where posts can be written and previewed, re-ordered/renamed, move to using a DB instead of txt files, etc.&lt;/p&gt;
&lt;p&gt;We&#039;ll want a folder named &quot;articles&quot; as a sub-folder of our project. Next we&#039;ll create a simple index HTML page as a peer of that folder, with a div inside the body containing the id &quot;posts&quot;.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My Blog&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;My Blog&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&quot;posts&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To get started writing server side Javascript we &#039;ll add a script tag in the head with a runat attribute set to server:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;script runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Jaxer has a nice API that allows you to work with the filesystem directly on the server. We&#039;re going to take advantage of that to have it grab files inside the &quot;articles&quot; folder that is a peer of our html file on the server:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
function init() {&lt;br /&gt;
            	var path = Jaxer.Dir.resolve(&quot;articles&quot;);&lt;br /&gt;
                var dir  = new Jaxer.Dir(path);&lt;br /&gt;
                var files = dir.readDir().map(function(file) {&lt;br /&gt;
                	return file.leaf;&lt;br /&gt;
                });&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Now we have a function which grabs the &quot;articles&quot; directory and then gets a listing of all the filenames inside that directory. Next we want to loop over the files, read in their contents and append it to a string that we&#039;ll be pushing back into the div with id &quot;posts&quot;.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
var html = &quot;&quot;;&lt;br /&gt;
for (var i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
  var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
  html+= read;&lt;br /&gt;
}&lt;br /&gt;
document.getElementById(&#039;posts&#039;).innerHTML = html;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pretty simple. We read all the files, concat their contents together into a string and then push that into the posts div. We can try it out by having this function run when the server has loaded the page/DOM. We just modify the body tag like so:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;body onserverload=&quot;init();&quot;&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
This tells Jaxer to run our init function when it has completed creation of the page&#039;s load process.&lt;/p&gt;
&lt;p&gt;Obviously, concatenating all the files contents together doesn&#039;t look too nice. Lets wrap each file&#039;s contents in a div with class &quot;post&quot; so we can style it later.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
html+= makePost(read);&lt;/p&gt;
&lt;p&gt;function makePost(contents) {&lt;br /&gt;
  return &quot;&amp;lt;div class=\&quot;post\&quot;&amp;gt;&quot; + contents + &quot;&amp;lt;/div&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
That&#039;s much better. Now we don&#039;t have all the files in one giant string.&lt;/p&gt;
&lt;p&gt;But this hasn&#039;t bought us much - we still have to write the HTML tags inside the txt files if we want to do any styling or marking up of the content. Let&#039;s provide a markup syntax to allow users to use simple text conventions to generate HTML. One such library is Markdown. We&#039;re going to use a nice Markdown in JS library provided from: &lt;a href=&quot;http://softwaremaniacs.org/playground/showdown-highlight/&quot; title=&quot;http://softwaremaniacs.org/playground/showdown-highlight/&quot;&gt;http://softwaremaniacs.org/playground/showdown-highlight/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&#039;s pretty simple to use. First we include the library on the server side:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;script src=&quot;showdown.js&quot; runat=&quot;server&quot;/&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Next, we use it to mark up the file&#039;s contents before we wrap it in the div:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
var read = Jaxer.File.read(&quot;articles/&quot; + files[i]);&lt;br /&gt;
html+= makePost(markdown(read));&lt;br /&gt;
...&lt;br /&gt;
function markdown(content) {&lt;br /&gt;
  var converter = new Showdown.converter();&lt;br /&gt;
  return converter.makeHtml(contents);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
And there you have it. We now have a blog index page which will grab all of our article text files, run them through markdown and insert them into post divs for us.&lt;/p&gt;
&lt;p&gt;To wrap up here&#039;s the full code:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Articles&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&quot;/showdown.js&quot; runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script runat=&quot;server&quot;&amp;gt;&lt;br /&gt;
        var converter = new Showdown.converter();&lt;br /&gt;
        function createPost(contents){&lt;br /&gt;
            // Run markdown filter on contents&lt;br /&gt;
            var text = converter.makeHtml(contents);&lt;br /&gt;
            return &quot;&amp;lt;div class=\&quot;post\&quot;&amp;gt;&quot; + text + &quot;&amp;lt;/div&amp;gt;&quot;;&lt;br /&gt;
        }&lt;br /&gt;
        function init() {&lt;br /&gt;
            try {&lt;br /&gt;
                // read all the articles in text files in &quot;articles&quot; sub-dir of this dir (#.txt)&lt;br /&gt;
                var articlesPath = Jaxer.Dir.resolve(&quot;articles&quot;);&lt;br /&gt;
                var files = new Jaxer.Dir(articlesPath).readDir();&lt;br /&gt;
                var string = &quot;&quot;;&lt;br /&gt;
                var i = 0;&lt;br /&gt;
                for (i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
                    var filename = Jaxer.Dir.combine(articlesPath, files[i].leaf);&lt;br /&gt;
                    if (new Jaxer.FileUtils().ext(filename) == &quot;txt&quot;) {&lt;br /&gt;
                        var raw = Jaxer.File.read(filename);&lt;br /&gt;
                        string += createPost(raw);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                document.getElementById(&#039;output&#039;).innerHTML = string;&lt;br /&gt;
            }&lt;br /&gt;
            catch (err) {&lt;br /&gt;
                document.getElementById(&#039;output&#039;).innerHTML = err.description;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;body onserverload=&quot;init()&quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&quot;output&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
</content:encoded>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <pubDate>Mon, 11 Feb 2008 11:31:42 -0600</pubDate>
 <dc:creator>cwilliams</dc:creator>
 <guid isPermaLink="false">260 at http://aptana.com</guid>
</item>
<item>
 <title>Jaxer integration with Apache Tomcat released</title>
 <link>http://aptana.com/node/257</link>
 <description>&lt;p&gt;A &lt;a href=&quot;http://www.aptana.com/node/201&quot;&gt;how to guide&lt;/a&gt; on integrating Jaxer with Apache Tomcat has been released.&lt;/p&gt;
&lt;p&gt;This guide walks you through how to enable Jaxer to post-process your HTML and JSP pages for your Tomcat web applications.  The tutorial includes two WAR files, one that adds support for Jaxer callbacks on your Tomcat pages and the other includes samples on possible ways to integrate Jaxer with your JSP/HTML pages.&lt;/p&gt;
&lt;p&gt;Jaxer also has a connector available for the Jetty HTTP server which is used inside Aptana Studio.&lt;/p&gt;
&lt;p&gt;Please use &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?p=17679#17679&quot;&gt;this forum thread&lt;/a&gt; to discuss the Jaxer-Tomcat connect&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;A &lt;a href=&quot;http://www.aptana.com/node/201&quot;&gt;how to guide&lt;/a&gt; on integrating Jaxer with Apache Tomcat has been released.&lt;/p&gt;
&lt;p&gt;This guide walks you through how to enable Jaxer to post-process your HTML and JSP pages for your Tomcat web applications.  The tutorial includes two WAR files, one that adds support for Jaxer callbacks on your Tomcat pages and the other includes samples on possible ways to integrate Jaxer with your JSP/HTML pages.&lt;/p&gt;
&lt;p&gt;Jaxer also has a connector available for the Jetty HTTP server which is used inside Aptana Studio.&lt;/p&gt;
&lt;p&gt;Please use &lt;a href=&quot;http://forums.aptana.com/viewtopic.php?p=17679#17679&quot;&gt;this forum thread&lt;/a&gt; to discuss the Jaxer-Tomcat connect&lt;/p&gt;
</content:encoded>
 <comments>http://aptana.com/node/257#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <pubDate>Sun, 10 Feb 2008 19:11:49 -0600</pubDate>
 <dc:creator>ksawicki</dc:creator>
 <guid isPermaLink="false">257 at http://aptana.com</guid>
</item>
<item>
 <title>The Power of Mozilla - Now Playing at a Server Near You</title>
 <link>http://aptana.com/node/211</link>
 <description>&lt;p&gt;Jaxer lets you use your full stack of Ajax technologies &amp;mdash; HTML, JavaScript, DOM manipulation, XHR, etc. &amp;mdash; on the server, to make web application development a lot smoother and more natural.&lt;/p&gt;
&lt;p&gt;But Jaxer is also based on the Mozilla engine, in fact on the same core that will power Firefox 3, just without the rendering. And this simple fact unlocks a lot of power that&#039;s been built up over many years by Mozilla developers. Unless your apps and sites have targeted Firefox exclusively &amp;mdash; unlikely, given its market share &amp;mdash; they could not rely on JavaScript features beyond version 1.4. And how about the numerous extensions that have been developed for Firefox, some of which actually ship with the browser? Most developers don&#039;t even know about them, and they couldn&#039;t rely on them being available to most of their target audience.&lt;/p&gt;
&lt;p&gt;But now all that Firefox 3 goodness is under the hood of your Jaxer, on the server side, under your full control. So if &lt;a&gt;JavaScript 1.7 and 1.8&lt;/a&gt; generators, iterators, and array comprehensions float your boat, then happy sailing. Soon native JSON parsing and encoding will be available, along with other features on the march towards JavaScript 2. Perhaps more significantly, you have a rich &lt;a href=&quot;http://www.mozilla.org/projects/webservices/&quot;&gt;SOA stack&lt;/a&gt;: SOAP, WSDL, and other four-letter friends from the enterprise architect&#039;s bestiary. Microformats, anyone? Simply use the script loader to import the built-in &lt;a href=&quot;http://developer.mozilla.org/en/docs/Using_microformats&quot;&gt;Microformats.js&lt;/a&gt; and you have access to hCard, hCalendar, and other functionalities. XSLT transformations are at your fingertips by just &quot;new&quot;ing up an &lt;a href=&quot;http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations&quot;&gt;XSLTProcessor&lt;/a&gt; object. There are all sorts of hidden gems to discover: did you know there&#039;s a very nice &lt;a href=&quot;http://developer.mozilla.org/en/docs/RDF_in_Mozilla_FAQ&quot;&gt;RDF subsystem&lt;/a&gt; in there? How about &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.btoa&quot;&gt;base64 encoding and decoding&lt;/a&gt;? Try typing &lt;code&gt;for (var p in Components.classes) { print(p); }&lt;/code&gt; in the Jaxer Shell to see that we&#039;ve just scratched the surface of what&#039;s available.&lt;/p&gt;
&lt;p&gt;Of course, if you don&#039;t see something you need, you can always just build it: think server-side GreaseMonkey scripts on steroids. I can&#039;t wait to see what people will come up with, now that all these capabilities are free from their browser dependence. There&#039;s already been a number of cool examples on various blogs, and we&#039;ll start to roll out more on a regular basis. More importantly, we&#039;ll make it easy to share your own samples and snippets with the community. Stay tuned...&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Jaxer lets you use your full stack of Ajax technologies &amp;mdash; HTML, JavaScript, DOM manipulation, XHR, etc. &amp;mdash; on the server, to make web application development a lot smoother and more natural.&lt;/p&gt;
&lt;p&gt;But Jaxer is also based on the Mozilla engine, in fact on the same core that will power Firefox 3, just without the rendering. And this simple fact unlocks a lot of power that&#039;s been built up over many years by Mozilla developers. Unless your apps and sites have targeted Firefox exclusively &amp;mdash; unlikely, given its market share &amp;mdash; they could not rely on JavaScript features beyond version 1.4. And how about the numerous extensions that have been developed for Firefox, some of which actually ship with the browser? Most developers don&#039;t even know about them, and they couldn&#039;t rely on them being available to most of their target audience.&lt;/p&gt;
&lt;p&gt;But now all that Firefox 3 goodness is under the hood of your Jaxer, on the server side, under your full control. So if &lt;a&gt;JavaScript 1.7 and 1.8&lt;/a&gt; generators, iterators, and array comprehensions float your boat, then happy sailing. Soon native JSON parsing and encoding will be available, along with other features on the march towards JavaScript 2. Perhaps more significantly, you have a rich &lt;a href=&quot;http://www.mozilla.org/projects/webservices/&quot;&gt;SOA stack&lt;/a&gt;: SOAP, WSDL, and other four-letter friends from the enterprise architect&#039;s bestiary. Microformats, anyone? Simply use the script loader to import the built-in &lt;a href=&quot;http://developer.mozilla.org/en/docs/Using_microformats&quot;&gt;Microformats.js&lt;/a&gt; and you have access to hCard, hCalendar, and other functionalities. XSLT transformations are at your fingertips by just &quot;new&quot;ing up an &lt;a href=&quot;http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations&quot;&gt;XSLTProcessor&lt;/a&gt; object. There are all sorts of hidden gems to discover: did you know there&#039;s a very nice &lt;a href=&quot;http://developer.mozilla.org/en/docs/RDF_in_Mozilla_FAQ&quot;&gt;RDF subsystem&lt;/a&gt; in there? How about &lt;a href=&quot;http://developer.mozilla.org/en/docs/DOM:window.btoa&quot;&gt;base64 encoding and decoding&lt;/a&gt;? Try typing &lt;code&gt;for (var p in Components.classes) { print(p); }&lt;/code&gt; in the Jaxer Shell to see that we&#039;ve just scratched the surface of what&#039;s available.&lt;/p&gt;
&lt;p&gt;Of course, if you don&#039;t see something you need, you can always just build it: think server-side GreaseMonkey scripts on steroids. I can&#039;t wait to see what people will come up with, now that all these capabilities are free from their browser dependence. There&#039;s already been a number of cool examples on various blogs, and we&#039;ll start to roll out more on a regular basis. More importantly, we&#039;ll make it easy to share your own samples and snippets with the community. Stay tuned...&lt;/p&gt;
</content:encoded>
 <comments>http://aptana.com/node/211#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/14">jaxer</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Sun, 03 Feb 2008 00:49:08 -0600</pubDate>
 <dc:creator>uri</dc:creator>
 <guid isPermaLink="false">211 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana recap: Aptana Studio 1.1.1 release coming soon</title>
 <link>http://aptana.com/node/210</link>
 <description>With the excitement of the 0.9 release of Jaxer and the Aptana Studio 1.1 release behind them, the Aptana development team spent the past week working on the first patch release for 0.9/1.1. The Aptana community should have access to these patches early next week.

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;The upcoming Aptana Studio 1.1 release will be a patch release that fixes several bugs in 1.1, including the following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An encoding bug where workspace text encoding isn&#039;t saved after re-starting Aptana (&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-1111&quot;&gt;STU-1111&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A bug involving CSS pseudo classes (&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-1035&quot;&gt;STU-1035&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A bug in Prototype code assist involving the $() function(&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-134&quot;&gt;STU-134&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;re aware that some users have been having difficulty installing the recent updates to Aptana Studio. The team is working on isolating the causes of this issue and hope to improve the situation soon. In the meantime, if you have been unable to download/install the updates, try performing a manual installation as directed on the update site:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://update.aptana.com/update/3.2/&quot;&gt;http://update.aptana.com/update/3.2/&lt;/a&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We see a lot of bug reporting and feature requests on the forums; however, the best way to get support or to request a new feature is to fill out a ticket in ASAP&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;http://support.aptana.com/issues/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By filing a ticket in ASAP, you enable us to track the status of a ticket more easily, and you can also easily search for related bugs and feature requests.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Next Week&lt;/b&gt;&lt;/p&gt;

Next week, we&#039;ll get started with work on the 1.2 release. Current plans for the 1.2 release include a number of updates to the Ajax libraries bundled with Aptana Studio (EXT, Yahoo UI, etc.) and a migration to the Eclipse 3.3 platform as the base platform for Aptana.

</description>
 <content:encoded>With the excitement of the 0.9 release of Jaxer and the Aptana Studio 1.1 release behind them, the Aptana development team spent the past week working on the first patch release for 0.9/1.1. The Aptana community should have access to these patches early next week.

&lt;p&gt;&lt;b&gt;New Release&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;The upcoming Aptana Studio 1.1 release will be a patch release that fixes several bugs in 1.1, including the following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An encoding bug where workspace text encoding isn&#039;t saved after re-starting Aptana (&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-1111&quot;&gt;STU-1111&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A bug involving CSS pseudo classes (&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-1035&quot;&gt;STU-1035&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A bug in Prototype code assist involving the $() function(&lt;a href=&quot;http://support.aptana.com/asap/browse/STU-134&quot;&gt;STU-134&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Tips and Tricks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We&#039;re aware that some users have been having difficulty installing the recent updates to Aptana Studio. The team is working on isolating the causes of this issue and hope to improve the situation soon. In the meantime, if you have been unable to download/install the updates, try performing a manual installation as directed on the update site:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://update.aptana.com/update/3.2/&quot;&gt;http://update.aptana.com/update/3.2/&lt;/a&gt;

&lt;p&gt;&lt;b&gt;Community Buzz&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We see a lot of bug reporting and feature requests on the forums; however, the best way to get support or to request a new feature is to fill out a ticket in ASAP&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://support.aptana.com/asap/secure/Dashboard.jspa&quot;&gt;http://support.aptana.com/issues/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By filing a ticket in ASAP, you enable us to track the status of a ticket more easily, and you can also easily search for related bugs and feature requests.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Next Week&lt;/b&gt;&lt;/p&gt;

Next week, we&#039;ll get started with work on the 1.2 release. Current plans for the 1.2 release include a number of updates to the Ajax libraries bundled with Aptana Studio (EXT, Yahoo UI, etc.) and a migration to the Eclipse 3.3 platform as the base platform for Aptana.

</content:encoded>
 <comments>http://aptana.com/node/210#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Fri, 01 Feb 2008 18:07:01 -0600</pubDate>
 <dc:creator />
 <guid isPermaLink="false">210 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana releases support for Adobe AIR Beta 3</title>
 <link>http://aptana.com/node/200</link>
 <description>&lt;p&gt;We are pleased to announce that our Adobe AIR plugin for Aptana Studio now supports beta 3 of the Adobe AIR SDK.&lt;/p&gt;
&lt;p&gt;This release requires Aptana Studio 1.1 or later which can be downloaded &lt;a href=&quot;http://www.aptana.com/studio&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What&#039;s new in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inclusion of the AIRIntrospector.js allowing inspection of running applications by pressing F12&lt;/li&gt;
&lt;li&gt;Updated sandbox samples for both application and non-application models&lt;/li&gt;
&lt;li&gt;New fields added to the application.xml wizard page making it easier to create the initial configuration of your application&lt;/li&gt;
&lt;li&gt;Updated samples compatible with the Adobe AIR Beta 3 SDK&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.aptana.com/air&quot;&gt;Instructions to install Adobe AIR beta 3 support&lt;/a&gt;&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;We are pleased to announce that our Adobe AIR plugin for Aptana Studio now supports beta 3 of the Adobe AIR SDK.&lt;/p&gt;
&lt;p&gt;This release requires Aptana Studio 1.1 or later which can be downloaded &lt;a href=&quot;http://www.aptana.com/studio&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What&#039;s new in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inclusion of the AIRIntrospector.js allowing inspection of running applications by pressing F12&lt;/li&gt;
&lt;li&gt;Updated sandbox samples for both application and non-application models&lt;/li&gt;
&lt;li&gt;New fields added to the application.xml wizard page making it easier to create the initial configuration of your application&lt;/li&gt;
&lt;li&gt;Updated samples compatible with the Adobe AIR Beta 3 SDK&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.aptana.com/air&quot;&gt;Instructions to install Adobe AIR beta 3 support&lt;/a&gt;&lt;/p&gt;
</content:encoded>
 <comments>http://aptana.com/node/200#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/17">air</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <pubDate>Fri, 25 Jan 2008 15:47:54 -0600</pubDate>
 <dc:creator>ksawicki</dc:creator>
 <guid isPermaLink="false">200 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Jaxer -- An Entirely New Kind of Server</title>
 <link>http://aptana.com/node/184</link>
 <description>&lt;p&gt;Wow, it’s been a long road getting to this release date, but I am very excited and proud of our team, and I&#039;m happy to say that today we released our beta 1 of Jaxer -- what we believe to be the first true Ajax Server product.&lt;/p&gt;
&lt;p&gt;So what is an “Ajax Server”? Simply put, we unify the development model for Ajax developers. That is, write “Ajax” code client AND server. The same APIs, the same JavaScript, the same HTML and best of all, manipulate the DOM on the server.&lt;/p&gt;
&lt;p&gt;What does all that mean? It means that you can do a getElementById() and set its innerHTML on the server side just as easily as you can on the browser. You can write a single JavaScript function and share it between browser and server. You can write server functions which can be transparently called from the browser -- synchronous or asynchronously.&lt;/p&gt;
&lt;p&gt;If you’re a beginning Ajax developer and any of that sounds complicated, it’s not. It simply means you can now build an entire Web 2.0 application, client and server, using only the Ajax technologies you love.&lt;/p&gt;
&lt;p&gt;I asked several of the leaders in the Ajax space to join with us and with you, the Ajax community, in defining where we go from here. I’m very honored to say that we’ve got an all-star group assembled as our Aptana Advisory Board, just take a look at this &lt;a href=&quot;http://aptana.com/advisoryboard&quot;&gt;who’s who list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve placed a &lt;a href=&quot;http://aptana.com/screencasts&quot;&gt;few screencasts&lt;/a&gt; online so you can take a quick look at what Jaxer is all about and how you can start playing with it right away.&lt;/p&gt;
&lt;p&gt;Send us your feedback, your suggestions, and &lt;a href=&quot;http://aptana.com/about&quot;&gt;tell us&lt;/a&gt; what you are building. After all, building a free, open-source product ultimately means we’re building this for you!&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;
Paul Colton&lt;/p&gt;
</description>
 <content:encoded>&lt;p&gt;Wow, it’s been a long road getting to this release date, but I am very excited and proud of our team, and I&#039;m happy to say that today we released our beta 1 of Jaxer -- what we believe to be the first true Ajax Server product.&lt;/p&gt;
&lt;p&gt;So what is an “Ajax Server”? Simply put, we unify the development model for Ajax developers. That is, write “Ajax” code client AND server. The same APIs, the same JavaScript, the same HTML and best of all, manipulate the DOM on the server.&lt;/p&gt;
&lt;p&gt;What does all that mean? It means that you can do a getElementById() and set its innerHTML on the server side just as easily as you can on the browser. You can write a single JavaScript function and share it between browser and server. You can write server functions which can be transparently called from the browser -- synchronous or asynchronously.&lt;/p&gt;
&lt;p&gt;If you’re a beginning Ajax developer and any of that sounds complicated, it’s not. It simply means you can now build an entire Web 2.0 application, client and server, using only the Ajax technologies you love.&lt;/p&gt;
&lt;p&gt;I asked several of the leaders in the Ajax space to join with us and with you, the Ajax community, in defining where we go from here. I’m very honored to say that we’ve got an all-star group assembled as our Aptana Advisory Board, just take a look at this &lt;a href=&quot;http://aptana.com/advisoryboard&quot;&gt;who’s who list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve placed a &lt;a href=&quot;http://aptana.com/screencasts&quot;&gt;few screencasts&lt;/a&gt; online so you can take a quick look at what Jaxer is all about and how you can start playing with it right away.&lt;/p&gt;
&lt;p&gt;Send us your feedback, your suggestions, and &lt;a href=&quot;http://aptana.com/about&quot;&gt;tell us&lt;/a&gt; what you are building. After all, building a free, open-source product ultimately means we’re building this for you!&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;
Paul Colton&lt;/p&gt;
</content:encoded>
 <comments>http://aptana.com/node/184#comments</comments>
 <category domain="http://aptana.com/taxonomy/term/51">ajax_news</category>
 <category domain="http://aptana.com/taxonomy/term/37">blog</category>
 <category domain="http://aptana.com/taxonomy/term/36">front_page</category>
 <category domain="http://aptana.com/taxonomy/term/16">news</category>
 <category domain="http://aptana.com/taxonomy/term/13">studio</category>
 <pubDate>Tue, 22 Jan 2008 15:23:09 -0600</pubDate>
 <dc:creator>pcolton</dc:creator>
 <guid isPermaLink="false">184 at http://aptana.com</guid>
</item>
<item>
 <title>Aptana Stud