<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">

    <channel>
        <title>Sencha Blog</title>
        <link>http://www.sencha.com/blog/</link>
        <description>
            Technical articles, company news, and customer spotlights from Sencha.
        </description>
        <dc:language>en-us</dc:language>
        <dc:creator>alex.voloshyn@sencha.com</dc:creator>
        <dc:rights>Copyright 2012</dc:rights>
        <dc:date>2012-02-01T16:00:03+00:00</dc:date>
        <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
        

        
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SenchaBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="senchablog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
        <title>Sencha Touch 2 RC—Now with Native Packaging</title>
        <author>Alex Voloshyn</author>
        <description>
            Today, we're happy to announce the release of Sencha Touch 2 RC and our native packaging for Windows and Mac.
        </description>
        <link>http://www.sencha.com/blog/sencha-touch-2-rc-native-packaging/</link>
        <content:encoded>
            <![CDATA[
                <p>Today, we&#8217;re happy to announce the release candidate of Sencha Touch 2 as well as our <a href="#native-packaging">native packaging for Windows and Mac</a>. </p>

	<p><a class="button-link small inline arrow download" href="http://cdn.sencha.io/touch/sencha-touch-2-rc.zip"><span>Download Sencha Touch 2 RC</span></a>&nbsp;&nbsp;&nbsp;<a class="more-icon" href="http://dev.sencha.com/deploy/sencha-touch-2-rc/release-notes.html">View Release Notes</a></p>

	<h3>Six full-featured example apps</h3>

	<p>To provide some inspiration, we&#8217;re shipping six combination examples written by the Sencha Touch core team. Each uses best practices to help you get started on building your next great application.</p>

  <div id="floatList" class="clearing">
    <ol class="zero">
        <li style="float:left;width:50%;">
            <a href="http://blooming-day-7830.herokuapp.com/" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-jog-with-friends.png" alt="Jog with Friends" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://blooming-day-7830.herokuapp.com/">Jog with Friends</a></strong><br />
Combines Facebook&#8217;s social graph with a favorite activity.
        </li>
        <li style="float:left;width:50%;">
            <a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/touchstyle/index.html" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-touchstyle.png" alt="Touch Style" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/touchstyle/index.html">Touch Style</a></strong><br />
An infinite carousel of endless fashion items to keep every shopaholic happy. 
        </li>
        <li style="float:left;width:50%;">
            <a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/oreilly/index.html" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-oreilly.png" alt="O'Reilly" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/oreilly/index.html">O&#8217;Reilly</a></strong><br />
A conference template that&#8217;s as impactful as its content.
        </li>
        <li style="float:left;width:50%;">
            <a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/touchtweets/index.html" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-touchtweets.png" alt="TouchTweets" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/touchtweets/index.html">TouchTweets</a></strong><br />
Highlights how easy it is to consume all those @Sencha tweets.
        </li>
        <li style="float:left;width:50%;">
            <a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/kiva/index.html" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-kiva.png" alt="KivaTouch" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/kiva/index.html">KivaTouch</a></strong><br />
Help individuals around the globe.
        </li>
        <li style="float:left;width:50%;">
            <a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/geocongress/index.html" style="display:block; float:left;margin: 0 10px 10px 0;"><img src="http://cdn.sencha.io/img/20120222-geocongress.png" alt="GeoCongress" height="72" width="72"></a> <strong style="padding-top: 10px;"><a href="http://dev.sencha.com/deploy/sencha-touch-2-rc/examples/geocongress/index.html">GeoCongress</a></strong><br />
Keep a watchful eye on what your elected officials are up to.
        </li>
    </ol>
  </div>

	<p>In addition to the new examples, we have fixed various bugs and added some more features:</p>

	<h4>Ext Direct </h4>

	<p>Combined with your favorite <a href="http://www.sencha.com/forum/showthread.php?67992-Ext.Direct-Server-side-Stacks">server side stack</a>, you can now invoke remote methods client side using Sencha Touch.</p>

	<p><style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="co1">// Calling a method on the server</span>
myRemoteClass.<span class="me1">myRemoteMethod</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></p>

	<h4>Enhancements to DataView </h4>

	<p>We now have a new option on DataViews that give your lists padding and rounded corners.</p>

	<p><style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">create</span><span class="br0">&#40;</span><span class="st0">'Ext.List'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    ui<span class="sy0">:</span> <span class="st0">'round'</span>   <span class="co1">// It's that simple</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></p>

	<p>While we&#8217;re all accustomed to using carousels when transitioning between cards, we thought it would be helpful if we could add in the ability to horizontally scroll Lists.  DataViews can now scroll horizontally giving you all the momentum scrolling goodness you&#8217;ve come to love.</p>

	<p><style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">create</span><span class="br0">&#40;</span><span class="st0">'Ext.List'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
   inline<span class="sy0">:</span> <span class="br0">&#123;</span> wrap<span class="sy0">:</span> <span class="kw2">false</span> <span class="br0">&#125;</span>  <span class="co1">// Smooth horizontal scrolling</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></p>

	<h4 id="native-packaging">Bridging to Native <span class="caps">API</span>s</h4>

	<p>While we wait for native <span class="caps">API</span>s to be exposed in standard browsers (WebKit just landed <a href="https://bugs.webkit.org/show_bug.cgi?id=72010">Vibration <span class="caps">API</span></a>), you can get access to many commonly requested <span class="caps">API</span>s by packaging your app in a native shell.  With the release of our native packager, you now have access to these popular <span class="caps">API</span>s via JavaScript.  In addition to a sample app and demo video, we&#8217;ve written a guide on <a href="http://docs.sencha.com/touch/2-0/#!/guide/native_apis">Using Native <span class="caps">API</span>s</a> to show how simple using native <span class="caps">API</span>s from JavaScript can be.  This release candidate has the following <span class="caps">API</span>s:</p>

	<ul>
		<li><strong>Connection</strong> &#8211; tells you whether or not the device has a current connection to the internet</li>
		<li><strong>Notification</strong> &#8211; allows you to use native notification windows (the native version of Ext.Msg)</li>
		<li><strong>Orientation</strong> &#8211; gives you as much information as the device provides about its current orientation</li>
		<li><strong>Camera</strong> &#8211; allows your app to take pictures or select from the camera library (with your user&#8217;s permission)</li>
	</ul>

	<h4>Screencast</h4>

    <figure class="aligncenter">
        <iframe src="http://player.vimeo.com/video/37207689" width="636" height="358" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
        <figcaption>Quick walkthrough of packaging your web app for native distribution. <a class="more-icon" href="http://vimeo.com/37207689">View on Vimeo</a></figcaption>
    </figure>

	<h3><span class="caps">SDK</span> Tools Update</h3>

	<p>Back in October of last year, we <a href="http://www.sencha.com/blog/sencha-touch-2-developer-preview/">previewed our native packaging</a> for iOS and Android as part of our <span class="caps">SDK</span> Tools.  Although we only released the Mac OS version, we talked about being able to build these mobile applications on multiple platforms. Today&#8217;s release now supports the ability to package and sign iOS applications on Windows. </p>

	<p><strong>Download <span class="caps">SDK</span> Tools</strong><br />
<a class="button-link small inline arrow download" href="http://cdn.sencha.io/sdk-tools/SenchaSDKTools-2.0.0-Beta.tar.gz"><span>Download for Mac</span></a>&nbsp;&nbsp;&nbsp;<a class="button-link small inline arrow download" href="http://cdn.sencha.io/sdk-tools/SenchaSDKTools-2.0.0-Beta.exe"><span>Download for Windows</span></a></p>

	<h4>Getting Started</h4>

	<p>Once you download and install the <span class="caps">SDK</span> tools, you can start packaging your HTML5 app in a native shell by running a simple command.</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="co1">// Packaging made simple</span>
sencha <span class="kw2">package</span> ios.<span class="me1">json</span></pre>
Let's take a look at the json config file for packaging on Windows

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="co1">// Source of your ios.conf</span>
<span class="br0">&#123;</span>
        <span class="st0">&quot;versionString&quot;</span><span class="sy0">:</span><span class="st0">&quot;1.0&quot;</span><span class="sy0">,</span>
        <span class="st0">&quot;iconName&quot;</span><span class="sy0">:</span><span class="st0">&quot;icon.png&quot;</span><span class="sy0">,</span>
	<span class="st0">&quot;applicationName&quot;</span><span class="sy0">:</span><span class="st0">&quot;MyGreatApp&quot;</span><span class="sy0">,</span>
	<span class="st0">&quot;applicationId&quot;</span><span class="sy0">:</span><span class="st0">&quot;com.yourcompany.MyGreatApp&quot;</span><span class="sy0">,</span>
        <span class="co1">// Your webapp path</span>
	<span class="st0">&quot;inputPath&quot;</span><span class="sy0">:</span><span class="st0">&quot;C:/projects/MyGreatApp/www/&quot;</span><span class="sy0">,</span>
       <span class="co1">// Native app destination</span>
	<span class="st0">&quot;outputPath&quot;</span><span class="sy0">:</span><span class="st0">&quot;C:/projects/MyGreatApp/ios/&quot;</span><span class="sy0">,</span>
       <span class="co1">// Destination App Store!!!!</span>
	<span class="st0">&quot;configuration&quot;</span><span class="sy0">:</span><span class="st0">&quot;Release&quot;</span><span class="sy0">,</span>
        <span class="st0">&quot;platform&quot;</span><span class="sy0">:</span><span class="st0">&quot;ios&quot;</span><span class="sy0">,</span>
	<span class="st0">&quot;deviceType&quot;</span><span class="sy0">:</span><span class="st0">&quot;iPhone&quot;</span><span class="sy0">,</span>
        <span class="co1">// Your Developer Cert</span>
	<span class="st0">&quot;certificatePath&quot;</span><span class="sy0">:</span> <span class="st0">&quot;c:/certs/Developer.p12&quot;</span><span class="sy0">,</span>  
        <span class="st0">&quot;certificateAlias&quot;</span><span class="sy0">:</span><span class="st0">&quot;iPhone Developer&quot;</span><span class="sy0">,</span>
        <span class="st0">&quot;orientations&quot;</span><span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">&quot;portrait&quot;</span><span class="sy0">,</span>
		<span class="st0">&quot;landscapeLeft&quot;</span><span class="sy0">,</span>
		<span class="st0">&quot;landscapeRight&quot;</span><span class="sy0">,</span>
		<span class="st0">&quot;portraitUpsideDown&quot;</span>
	<span class="br0">&#93;</span>
<span class="br0">&#125;</span></pre>
If all goes well you should see the following:

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">The application was successfully packaged
The application was successfully signed</pre>
To help get you started, we've written a <a href="http://docs.sencha.com/touch/2-0/#!/guide/native_packaging">native packaging guide</a> to help get you started with the process.  We think this functionality opens up a whole new world for web developers around the globe. Sencha is excited to offer these capabilities to the mobile community free of charge.

	<h3>Summary</h3>

	<p>We are extremely proud of this progress we&#8217;ve made in this release candidate. We&#8217;ve worked around the clock refining and polishing Sencha Touch 2 for general release!  We believe that Sencha Touch 2.0 raises the bar for mobile web experiences.  We hope you think so too.</p>

	<h4>Follow Sencha Touch 2 Development</h4>

	<p>If you missed all the great progress in our development of Sencha Touch 2, catch up with our release blog posts from the last three weeks:</p>

	<ul>
		<li><strong>Feb 1</strong>: <a href="http://www.sencha.com/blog/sencha-touch-2-raising-the-bar/">Sencha Touch 2 Beta</a></li>
		<li><strong>Feb 8</strong>: <a href="http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/">Sencha Touch 2 Beta 2</a> and a tutorial on DataView</li>
		<li><strong>Feb 14</strong>: <a href="http://www.sencha.com/blog/sencha-touch-2-beta-3-kindle-fire-and-chrome-support/">Sencha Touch 2 Beta 2</a> added support for Kindle Fire, and Chrome for Android</li>
		<li><strong>Feb 22</strong>: Sencha Touch 2 Release Candidate</li>
	</ul>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Wed, 22 Feb 2012 10:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-touch-2-rc-native-packaging/#date:10:00</guid>
        </item>
        
        <item>
        <title>First Look at Sencha Designer 2</title>
        <author>Phil Strong</author>
        <description>
            Sencha Designer 2 Beta is the latest version of our visual drag-and-drop tool for building JavaScript-based applications. Designer 2 supports both the Ext JS and Touch frameworks, so you can use the tool to build applications for either desktop or mobile operating systems.
        </description>
        <link>http://www.sencha.com/blog/sencha-designer-beta/</link>
        <content:encoded>
            <![CDATA[
                <p>Sencha Designer 2 beta is the latest version of our visual drag-and-drop tool for building JavaScript-based applications. Designer 2 supports both the Ext JS and Touch frameworks, so you can use the tool to build applications for either desktop or mobile operating systems. For a more in-depth look at Sencha Designer 2, please see our <a href="http://docs.sencha.com/designer/2-0/#!/guide/intro">Introduction and Guided Tour</a> included in the Designer documentation.</p>

	<p><b><span class="caps">UPDATE</span></b>: On February 15th, we pushed an update to Sencha Designer 2 beta. This update addresses several critical bugs, as well as adds our new Snow Theme for the UI. Open the app and click accept to automatically get the update.</p>

	<h3>Building a Sencha Touch Mobile App using Sencha Designer 2</h3>

	<p>This tutorial is delivered in both video and written form. You may find it easier to follow one or the other, or use both in unison. Continue on to the bottom of this post to see the full video walkthrough.</p>

	<p>The application we&#8217;ll be building is called CityBars, a Sencha Touch app for mobile devices which makes use of the Yelp <span class="caps">API</span> to find nearby watering holes. I&#8217;ve tried to add some color to the video and to introduce you to Sencha Designer 2 in much the same way I&#8217;d help any developer new to Designer.</p>

	<p><figure class="aligncenter">
    <a class="lightbox" href="http://img1.sencha.com/files/misc/citybars1.png"><img src="http://src.sencha.io/280/http://img1.sencha.com/files/misc/citybars1.png" alt="CityBars"></a><a class="lightbox" href="http://img1.sencha.com/files/misc/citybars2.png"><img src="http://src.sencha.io/280/http://img1.sencha.com/files/misc/citybars2.png" alt="CityBars"></a><br />

    <figcaption>A Sencha Touch example app called CityBars, which uses  the Yelp <span class="caps">API</span> to find nearby watering holes.</figcaption><br />
</figure></p>

	<h3>Project Assets</h3>

	<p>To follow along with the project you&#8217;ll need a copy of <a href="http://www.sencha.com/forum/showthread.php?152941-Sencha-Designer-2-Beta-Download-links">Sencha Designer 2 beta</a>; and a <a href="http://www.yelp.com/developers/">Yelp developer <span class="caps">API</span> key</a>. <strong>Note</strong>: Your <span class="caps">API</span> key will be capped at about 150 calls per day. If everything stops working this might be why.</p>

	<p>You&#8217;ll also need to follow the <a href="http://img1.sencha.com/files/misc/AfirstlookaDesigner2.pdf.zip">step-by-step guide</a> along with the <a href="http://img1.sencha.com/files/misc/citybars.xda.zip">CityBars project file</a> &#8212; be sure to unzip it. (The CityBars project is also available as <a href="http://senchalearn.github.com/citybars2">Github repository</a>, though this is simply the Sencha Touch mobile app, and not the Sencha Designer project.)</p>

	<h3>Watch the Video</h3>

    <figure class="aligncenter">
        <iframe src="http://player.vimeo.com/video/36420727" width="636" height="357" frameborder="0" webkitAllowFullScreen mozallowfullscreen  allowFullScreen></iframe>
        <figcaption>Building the CityBars Sencha Touch application with Sencha Designer 2 (1 hour and 1 minute)<br />
<a class="more-icon" href="https://vimeo.com/36420727">Watch this video on Vimeo.com</a></figcaption>
    </figure>

	<p>If you hit any road bumps, head over to the <a href="http://www.sencha.com/forum/forumdisplay.php?98-Sencha-Designer-2.x-Help-amp-Discussions">Sencha Designer 2 Help &amp; Discussion</a> forum to ask questions and get some assistance!</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Wed, 15 Feb 2012 10:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-designer-beta/#date:10:00</guid>
        </item>
        
        <item>
        <title>Sencha Touch 2 Beta 3: Kindle Fire and Chrome Support</title>
        <author>Ed Spencer</author>
        <description>
            Today we're releasing Sencha Touch 2 Beta 3 with expanded device and browser support. Beta 3 is expected to be the final beta release and a drop-in replacement for Beta 2. While everything is detailed in the release notes, the most notable changes in b3 are improvements in application dependency management and several performance improvements.
        </description>
        <link>http://www.sencha.com/blog/sencha-touch-2-beta-3-kindle-fire-and-chrome-support/</link>
        <content:encoded>
            <![CDATA[
                <p><img class="alignright rounded shadow" src="http://img1.sencha.com/files/misc/20120214-touch-2-thumb.jpg" alt="Sencha Touch 2 Beta 3: Kindle Fire and Chrome Support" height="180" width="240"> Today we&#8217;re releasing Sencha Touch 2 Beta 3 with expanded device and browser support. Beta 3 is expected to be the final beta release and a drop-in replacement for Beta 2. While everything is detailed in the release notes, the most notable changes in b3 are improvements in application dependency management and a host of performance improvements.</p>

	<p><a class="button-link small inline arrow download disabled" href="#"><span>Download Sencha Touch 2 Beta</span></a>&nbsp;&nbsp;&nbsp;<a class="more-icon" href="http://dev.sencha.com/deploy/sencha-touch-2-b3/release-notes.html">View Release Notes</a></p>

	<p><strong><span class="caps">UPDATE</span></strong>: Sencha Touch 2 RC is now available. <a class="more-icon" href="http://www.sencha.com/blog/sencha-touch-2-rc-native-packaging/">Go download that instead!</a></p>

	<h3>Android Chrome and Kindle Fire Support</h3>

	<p>We&#8217;re thrilled to be able to add support for 2 new platforms today. The first is Android Chrome, which Google released in beta last week for Android 4.x (Ice Cream Sandwich) devices. While there are still relatively few <span class="caps">ICS</span> devices out there (only <a href="http://developer.android.com/resources/dashboard/platform-versions.html">around 1%</a> of all Android devices carry that version currently), Chrome for Android is already providing a much improved experience compared to the stock browser (see our <a href="http://www.sencha.com/blog/html5-scorecard-chrome-mobile-beta/">Chrome HTML5 scorecard</a>).</p>

	<p>The second is the Kindle Fire, which we think is one of the best Android tablets out there. While earlier versions of the Fire&#8217;s browser had some performance and rendering issues, the recent 6.2.2 update brings much more speed and rendering correctness to the device, which allows us to officially support it. The browser improvements, in addition to some tweaks of our own, have combined to provide a great Kindle Fire experience with Sencha Touch 2.</p>

	<p>We were so happy with the performance of both platforms that we recorded a short video on real hardware to show you what you can do with the new support. The first device is an Asus Transformer Prime, running smoothly at a whopping 1280 &#215; 800 resolution, and the second is a Kindle Fire, which displays impressive performance for a device costing under $200:</p>

 <figure class="aligncenter">
  <iframe src="http://player.vimeo.com/video/36752045?title=0&amp;byline=0&amp;portrait=0&amp;color=4CC208" width="636" height="358" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
  <figcaption>Sencha Touch 2 Support Android Chrome and Kindle Fire. <a class="more-icon" href="http://vimeo.com/36752045" target="_blank">View video on Vimeo</a></figcaption>
 </figure>

	<p>Amazon hasn&#8217;t officially released the sales numbers for the Kindle Fire but they are estimated to have shipped several million in Q4 alone, which means your Sencha Touch 2 applications can now be deployed to millions more devices, most of which will receive the 6.2.2 update automatically.</p>

	<p>On the Android side of things, we&#8217;ve recently been asking for your help in escalating <a href="http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/">crippling problems with <span class="caps">ICS</span>&#8217;s default browser</a>. We&#8217;ll continue seeking improvement there but Chrome for Android is providing a great alternative for <span class="caps">ICS</span> device owners in the meantime.</p>

	<h3>Performance Improvements</h3>

	<p>As well as adding support for more devices, we&#8217;ve also spent time further refining the experience on all supported platforms. This release contains several performance tweaks, mostly centered around optimizing <span class="caps">CSS</span> selectors and styles.</p>

	<p>Some of the more apparent improvements include faster button tap feedback and smoother card transitions, especially to and from forms. Previously these actions might have felt a little slow but as of B3 it feels much snappier. When we investigated why these things were feeling sluggish we found it was caused by certain innocuous-looking <span class="caps">CSS</span> rules and were able to improve performance dramatically by using alternative styling to achieve the same look and feel.</p>

	<p>Finally, we&#8217;ve polished other parts of the framework to give better perceived performance. For example, carousel indicators now update immediately when you swipe instead of after the animation has finished. It still takes as much time as before, but makes your app feel faster to the user. Performance has been a major objective of Sencha Touch 2 and we&#8217;re very pleased with the improvements so far.</p>

	<h3>The Path to GA</h3>

	<p>This beta is the seventh public release of Sencha Touch 2. We&#8217;re very happy with the performance and stability of beta 3, we think we&#8217;re in the home stretch toward GA.</p>

	<p>Beta 3 is expected to be the final beta version before we ship a Release Candidate. With its <span class="caps">API</span> frozen we have no hesitation in recommending that you start building your apps using B3 if you&#8217;re keen to get a head start on your app.</p>

	<p>As always, we&#8217;d like to thank you for all of your support in getting to this stage, and hope you&#8217;ll share your thoughts with us in the comments.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Tue, 14 Feb 2012 10:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-touch-2-beta-3-kindle-fire-and-chrome-support/#date:10:00</guid>
        </item>
        
        <item>
        <title>HTML5 Scorecard: Chrome for Android Beta</title>
        <author>Michael Mullany</author>
        <description>
            As part of our continuing series on the HTML5 capabilities of new mobile platforms, today we’re taking a look at the new Chrome for Android browser beta for Android 4.
        </description>
        <link>http://www.sencha.com/blog/html5-scorecard-chrome-mobile-beta/</link>
        <content:encoded>
            <![CDATA[
                <figure class="aligncenter">
        <img class="rounded shadow" src="http://cdn.sencha.io/img/20120209-sencha-html5-chrome-for-android.jpg" alt="Sencha HTML5 Developer Scorecard of Chrome for Android beta" height="310" width="636">
    </figure>

	<p><img class="alignright" src="http://cdn.sencha.io/img/20120209-chrome-for-android-icon.png" alt="Chrome for Android icon" height="124" width="124"> As part of our continuing series on the HTML5 capabilities of new mobile platforms, today we’re taking a look at the new Chrome for Android mobile browser beta. There have been rumors of Chrome for Android for quite some time, and we were encouraged but a little underwhelmed by the stock Android 4 browser. We were hoping that there was more to come.</p>

	<p>And we didn&#8217;t have to wait long. After testing Chrome for Android, we&#8217;re happy to say that it&#8217;s a very solid HTML5 browser, and even in its beta form, is a &#8220;must-install&#8221; for any Android 4 owner. Hopefully Chrome for Android quickly becomes the <strong>only</strong> browser for Android 4.</p>

	<blockquote class="pullquote right">
		<p class="pullquote right"><span>&#8220;</span>If you own an Android 4, there is no question you should download and use Chrome Mobile beta as your primary browser.&#8221;</p>
	</blockquote>

	<h3>Our First-Look “Methodology”</h3>

	<p>Our HTML5 scorecard consists of a series of tests aimed to help mobile web developers understand new devices and new form factors as they come to market. We test in a number of areas, namely JavaScript performance, HTML5/CSS3 features, rendering performance and rendering accuracy. To get there, we use a variety of tests, including Modernizer, Acid3, SunSpider, Sencha Animator demos and our Sencha Touch Kitchen Sink. </p>

	<h3>Acid3 and Modernizr</h3>

	<p>Chrome for Android scores a perfect 100/100 on the Acid3 test, just like the Android 4 browser. However, the tell tale rendering artifact (a very faint red/pink box in the upper right corner) that has marred a perfect score on other Android browsers, once again rears its head. (Chrome Desktop doesn&#8217;t have this artifact, so perhaps this is an OS/graphics stack issue rather than a browser problem). In practice, this won’t impact web browsing or web development much, but it would be nice to fix this for the final release. </p>

	<p>Next up, Modernizr! Once again, we used <a href="haz.io">haz.io</a> which is a clean and mobile friendly Modernizr checker. The verdict? High marks on HTML5 support &#8212; as one might expect from the folks who brought you Chrome. Once again, the browser does have <code>@font-face</code> support &#8212; Google Fonts display perfectly &#8212; but TypeKit does not yet detect Chrome for Android correctly. As with the original Playbook, and Android 4 stock browser support, Typekit has a lag between first ship and support, but I&#8217;m sure the Typekit folks are on top of this. </p>

	<p>Compared to the stock Android 4 browser, there is a substantial number of additional HTML5 features: Web Workers, Web Sockets, HTML5 Input Types, overflow: scroll, requestAnimationFrame and more. That&#8217;s not to say that Chrome for Android has absolutely everything. As detected by the <a href="html5test.org">other handy testing site</a> for HTML5, many newer features are absent, notably Shared Workers and WebGL. The video codec cold war also continues: Ogg Theora and Ogg Vorbis support is still not there &#8212; which is not a surprise. </p>

    <figure class="aligncenter">
        <a class="lightbox" href="http://cdn.sencha.io/img/20120209-chrome-for-android-on-a-tablet-and-phone.png">
            <img src="http://cdn.sencha.io/img/20120209-chrome-for-android-on-a-tablet-and-phone-sm.jpg" alt="Chrome for Android running on a tablet and phone">
        </a>
        <figcaption>Chrome for Android running on a tablet and phone</figcaption>
    </figure>

	<h3>Performance</h3>

	<p>For performance benchmarking, we use SunSpider. In the last 9 months, all the mobile browsers have converged at basically the same SunSpider performance levels. This also holds true for Chrome for Android. Although it&#8217;s slightly faster on one or two tests vs. Android 4 browser, it&#8217;s in the same general ballpark, which is not too surprising since they&#8217;re both using the V8 engine on the same hardware. Since Chrome for Android is visually much faster and smoother than the Android stock browser, this is probably a good time to consider putting SunSpider on the shelf as a good predictor of user-perceived performance. </p>

	<h3>Real World Tests</h3>

	<p>As we&#8217;ve said many times previously, many mobile browsers do well on the checkbox tests like Modernizr, but fall short when it comes to real world applications and content. (In some cases, mobile browsers have even reported support when none exists.) So for real world testing, we use a collection of our own favorite HTML5 sites and demos. </p>

	<p>First up, the new <span class="caps">CSS</span> properties for mobile content. On our <a href="http://www.sencha.com/blog/our-top-ten-html5-wishes-for-2011/">HTML5 wish list for 2011</a> we asked for high performance position: fixed. And Chrome for Android delivers. For simple pages, Chrome for Android does a top notch job of glueing fixed position content to the screen. Fixed headers and footers for simple mobile optimized pages are now easily implemented without having to use a framework. However, the browser struggled when trying to maintain fixed positioning on more complex pages, particularly when combined with pinch/zoom. We saw poor frame rates and occasionally content disappeared or was misplaced. Happily, the <strong>very new</strong> <code>-webkit-overflow-scrolling: touch</code> property, which debuted in iOS 5, is also now available in Chrome for Android. It&#8217;s smooth and fast. (Nice job Chrome team!)</p>

	<p>On to <span class="caps">SVG</span>. On Chrome mobile, basic <span class="caps">SVG</span> worked very nicely. Our <a href="http://www.senchalabs.org">Raphael</a> vector demos were very smooth, and many other <span class="caps">SVG</span> effects like text on a path, and animated gradients worked smoothly at a good frame rate. For more advanced effects (demos at <a href="http://srufaculty.sru.edu/david.dailey/svg/">David Dailey&#8217;s page</a>), there&#8217;s still work to be done: <span class="caps">SVG</span> effects like complex filtering were either not supported or ran at low frame rates. Since there is little popular content that relies on these advanced effects yet, this is not such a big deal. However, when <a href="http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html"><span class="caps">CSS</span> Filters</a> start to percolate into general usage, getting these right will become more important.</p>

	<p>We next tried Canvas and here Chrome for Android has a good implementation. Basic Canvas drawing is unproblematic, and our favorite Canvas stressor &#8212; <a href="http://www.effectgames.com/demos/canvascycle/"> Canvas Color Cycling</a> was smooth and high performance even under pinch/zoom. The most complex demos we could find (that can cause even desktops to pause), such as the demos at <a href="http://www.mrdoob.com">Mr. Doob</a> did cause some problems &#8212; with long wait times and occasional complete display failures.</p>

	<p>Our testing of embedded HTML5 audio and video went well. Plain inline HTML5 video works, (although don&#8217;t try to combine it with other effects or Canvas). This is an area where Chrome Beta has the advantage over iOS 5 which still lacks inline video playback. </p>

	<p>Finally, we took a look at CSS3 Animations &amp; Transforms. This is an area that we&#8217;ve invested in here at Sencha with Sencha Animator. Poor Android performance on 3D transforms has been a limitation on the complexity of <span class="caps">CSS</span> animations that can deploy cross platform. Our most complex animation &#8212; <a href="http://dev.sencha.com/animator/demos/kickfu/">our Sencha Animator KickFu game</a> &#8212; was playable, but the frame rate was too low for a smooth experience &#8212; I&#8217;d estimate a 5-10 frames per second performance. More basic CSS3 animations &#8212; even 3D ones &#8212; worked well, although we did uncover our first official bug for the Chrome team which we will be filing &#8212; transformed elements seem to drop border-radius. In addition, there are a few layout quirks that are present in desktop Chrome for transformed elements that also show up in Mobile Chrome. </p>

	<h3>Sencha Touch 1.0 Kitchen Sink</h3>

	<p>Although we&#8217;re in late beta with Sencha Touch 2, we decided to test Sencha Touch 1.1 instead. Compared to Android 4, the Chrome for Android experience is vastly improved. Full-screen flashes and screen flicker are absent. Other things that we take for granted such as smooth border radii, masking etc. are also well implemented. But it&#8217;s also true that some of the browser properties that we rely on for layout in Android are now different in Chrome Beta and these result in minor artifacts in layout and list scrolling that we&#8217;ll need to be address.</p>

	<h3>Chrome for Android beta: tips for the HTML5 developer</h3>

	<p>Chrome for Android is a big leap forward for web browsing on Android devices &#8212; even in its beta form. We suspect that many of the browser limitations are limitations more of the device processors than the browser itself. There is still work to be done before general release, but in all we&#8217;re very happy to have a top notch browser for Android. If you own an Android 4, there is no question you should download and use Chrome for Android as your primary browser as soon as you are able.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Thu, 09 Feb 2012 12:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/html5-scorecard-chrome-mobile-beta/#date:12:00</guid>
        </item>
        
        <item>
        <title>Dive into DataView with Sencha Touch 2 Beta 2</title>
        <author>Robert Dougan</author>
        <description>
            We're pleased to release Sencha Touch 2 beta 2, which contains around 100 improvements over beta 1. Today we're also taking you on a detailed tour of DataView and asking for your help voting on an Android bug report.
        </description>
        <link>http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/</link>
        <content:encoded>
            <![CDATA[
                <p>Today we&#8217;re releasing Sencha Touch 2 beta 2, which contains around 100 enhancements, examples, and bug fixes based on your feedback from last week&#8217;s beta 1. We&#8217;ve been really energized by all your positive feedback on beta 1 and would like to reiterate our appreciation for the time and energy you put in to creating apps, reporting bugs and sharing your experiences with others.</p>

	<p>Beta 2 should be a drop-in replacement for beta 1, and as before, we have prepared a full set of release notes. We hope you&#8217;ll continue to let us know what you think of the release in the comments, twitter and your own blogs.</p>

	<p><a class="button-link small inline arrow download disabled" href="#"><span>Download Sencha Touch 2 Beta</span></a>&nbsp;&nbsp;&nbsp;<a class="more-icon" href="http://dev.sencha.com/deploy/sencha-touch-2-b2/release-notes.html">View Release Notes</a></p>

	<p><strong><span class="caps">UPDATE</span></strong>: Sencha Touch 2 RC is now available. <a class="more-icon" href="http://www.sencha.com/blog/sencha-touch-2-rc-native-packaging/">Go download that instead!</a></p>

	<h3>Great Progress on <span class="caps">ICS</span> Issues</h3>

	<p><a href="http://www.sencha.com/blog/sencha-touch-2-raising-the-bar">Last week</a> we asked for your help in raising awareness of a critical performance issue with Android 4/Ice Cream Sandwich. Thanks to your participation <a href="http://code.google.com/p/android/issues/detail?id=24833">the bug report</a> has been starred over 250 times and last week yielded a patch from the Android team that addresses the flashing that can happen before animations.</p>

	<p>While that&#8217;s great news, it&#8217;s only half the story so we&#8217;d like to ask for your help one more time. While the flashing is gone, we feel that Android 4 is still not performing as well as it should when it comes to animations so if you&#8217;re in favor of better animation performance on Android 4, we&#8217;d like to ask you to take a moment to <a href="http://code.google.com/p/android/issues/detail?id=25147">click the star on this bug report</a> to let the Android team know how much this matters to everyone building HTML5 applications.</p>

	<h3>DataView Improvements</h3>

	<p>DataView is a powerful Component that enables you to render an <span class="caps">HTML</span> template for each record in a Store. While that&#8217;s very useful, Sencha Touch 2 raises the bar by allowing you to render entire Components for each record. This enables a wealth of new UI options and we&#8217;d like to take the rest of this post to walk you through what&#8217;s improved.</p>

	<h3>Component DataView</h3>

	<p>The Sencha Touch 2 DataView offers two ways to render items from a Store: element based and component based. In 1.x only the element-based approach was available, which made it difficult to do things like add a Button to each item in a List.</p>

	<p>Turning your element-based DataView into a component-based one is straightforward. With a template based DataView, you normally specify a store and itemTpl configuration, but with a component based DataView, you do not need to specify an itemTpl. Instead, you set the <b>useComponents</b> configuration to true. This tells DataView that it will be rendering components.</p>

	<p>Next we have to tell it which types of components it will be rendering. To do this, we set a <b>defaultType</b> for our DataView. This tells the DataView which type of Component to create for each record.</p>

	<p>In the example below, we&#8217;re creating a fullscreen component-based DataView that uses the <b>kittenslistitem</b> type to create each item (we&#8217;ll create this kittenslistitem Component in a moment). We&#8217;re also passing in a Store full of kittens. DataView will render one kittenslistitem for each kitten:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">create</span><span class="br0">&#40;</span><span class="st0">'Ext.DataView'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    fullscreen<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span>
    useComponents<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span>
    defaultType<span class="sy0">:</span> <span class="st0">'kittenslistitem'</span><span class="sy0">,</span>
    store<span class="sy0">:</span> <span class="br0">&#123;</span>
        fields<span class="sy0">:</span> <span class="br0">&#91;</span>
            <span class="st0">&quot;name&quot;</span><span class="sy0">,</span>
            <span class="st0">&quot;image&quot;</span><span class="sy0">,</span>
            <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;cuteness&quot;</span><span class="sy0">,</span> type<span class="sy0">:</span> <span class="st0">'int'</span> <span class="br0">&#125;</span>
        <span class="br0">&#93;</span><span class="sy0">,</span>
        data<span class="sy0">:</span> <span class="br0">&#91;</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Yawning kitten'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten1.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">70</span> <span class="br0">&#125;</span><span class="sy0">,</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Sitting kitten'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten2.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">90</span> <span class="br0">&#125;</span><span class="sy0">,</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Evil kitten'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten3.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">70</span> <span class="br0">&#125;</span><span class="sy0">,</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Ginger kitten'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten4.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">80</span> <span class="br0">&#125;</span><span class="sy0">,</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Kitten friends'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten5.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">20</span> <span class="br0">&#125;</span><span class="sy0">,</span>
           <span class="br0">&#123;</span> <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'Milk kitten'</span><span class="sy0">,</span> image<span class="sy0">:</span> <span class="st0">'data/images/kitten6.jpg'</span><span class="sy0">,</span> cuteness<span class="sy0">:</span> <span class="nu0">50</span> <span class="br0">&#125;</span>
        <span class="br0">&#93;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<h3>Custom DataView Item</h3>

	<p>Now we have a component DataView and we&#8217;ve told it to use a component with an xtype of <b>kittenslistitem</b>. That hasn&#8217;t been defined yet; so let&#8217;s do that now.</p>

	<p>It is important to note that this DataView item must extend <a href="http://docs.sencha.com/touch/2-0/#!/api/Ext.dataview.component.DataItem">Ext.dataview.component.DataItem</a>. This is because this object includes important functionality to bind a specified record to the component.</p>

	<p>Our custom DataView item will include three items:</p>

	<ul>
		<li><a href="http://docs.sencha.com/touch/2-0/#!/api/Ext.Img">Ext.Img</a> &#8212; displays an image of the kitten</li>
		<li><a href="http://docs.sencha.com/touch/2-0/#!/api/Ext.Component">Ext.Component</a> &#8212; displays the name of the kitten.</li>
		<li><a href="http://docs.sencha.com/touch/2-0/#!/api/Ext.slider.Slider">Ext.slider.Slider</a> &#8212; shows a slider component will the <b>cuteness</b> of the kitten.</li>
	</ul>

 <figure class="aligncenter">
    <img src="http://img1.sencha.com/files/misc/wireframe.png" alt="Wireframe of our custom DataView item" height="333" width="520">
    <figcaption>Wireframe of our custom DataView item</figcaption>
 </figure>

	<p>Each of these components will be defined as a configuration in our KittenListItem class. Once the class is instantiated for each record, the configurations will be added into the item. This looks like the following:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'KittensListItem'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    extend<span class="sy0">:</span> <span class="st0">'Ext.dataview.component.DataItem'</span><span class="sy0">,</span>
    xtype<span class="sy0">:</span> <span class="st0">'kittenslistitem'</span><span class="sy0">,</span>
&nbsp;
    config<span class="sy0">:</span> <span class="br0">&#123;</span>
        image<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span>
&nbsp;
        <span class="kw3">name</span><span class="sy0">:</span> <span class="br0">&#123;</span>
            cls<span class="sy0">:</span> <span class="st0">'x-name'</span><span class="sy0">,</span>
            flex<span class="sy0">:</span> <span class="nu0">1</span>
        <span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
        slider<span class="sy0">:</span> <span class="br0">&#123;</span>
            flex<span class="sy0">:</span> <span class="nu0">2</span>
        <span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
        layout<span class="sy0">:</span> <span class="br0">&#123;</span>
            type<span class="sy0">:</span> <span class="st0">'hbox'</span><span class="sy0">,</span>
            align<span class="sy0">:</span> <span class="st0">'center'</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>Let&#8217;s start from the top:</p>

	<ul>
		<li>Define the KittensListItem which we will use in our component DataView</li>
		<li>Extend Ext.dataview.component.DataItem</li>
		<li>Inside the config object, add a new config called <b>image</b> and set it to true (this will be transformed into a Ext.Img component)</li>
		<li>Create another config called <b>name</b>. This is an object containing a cls and a flex property of 1 (this will be transformed into an Ext.Component component)</li>
		<li>Create another config called <b>slider</b> which has a default flex of 2 (this will be transformed into a Ext.slider.Slider)</li>
		<li>And finally give it a HBox layout and vertically align the items in the center.</li>
	</ul>

	<p>For each new configuration we create, we need to create the appropriate apply and update methods so they get transformed into the correct component, and inserted into this item. Lets do this for the image configuration:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"> applyImage<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>config<span class="br0">&#41;</span> <span class="br0">&#123;</span>
     <span class="kw1">return</span> Ext.<span class="me1">factory</span><span class="br0">&#40;</span>config<span class="sy0">,</span> Ext.<span class="me1">Img</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">getImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
 <span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
  updateImage<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>newImage<span class="sy0">,</span> oldImage<span class="br0">&#41;</span> <span class="br0">&#123;</span>
     <span class="kw1">if</span> <span class="br0">&#40;</span>newImage<span class="br0">&#41;</span> <span class="br0">&#123;</span>
         <span class="kw1">this</span>.<span class="me1">add</span><span class="br0">&#40;</span>newImage<span class="br0">&#41;</span><span class="sy0">;</span>
     <span class="br0">&#125;</span>
&nbsp;
     <span class="kw1">if</span> <span class="br0">&#40;</span>oldImage<span class="br0">&#41;</span> <span class="br0">&#123;</span>
         <span class="kw1">this</span>.<span class="me1">remove</span><span class="br0">&#40;</span>oldImage<span class="br0">&#41;</span><span class="sy0">;</span>
     <span class="br0">&#125;</span>
 <span class="br0">&#125;</span></pre>

	<p>First, we define the <i>applyImage</i> which is called when this component is initialized and each time the <b>image</b> configuration is changed. In the method, we use Ext.factory to transform the configuration into a Ext.Img component. We then define the <i>updateImage</i> method which is called after <i>applyImage</i>. This method gets called with two arguments: the new image, and the old image (if one existed before). In this method we simply check if newImage exists and add it to this component Data Item, and the same for the oldImage, except in this case we&#8217;re removing it.</p>

	<p>We then repeat this process for the other two configurations: name and slider.</p>

	<p>If you want to learn more about how the Class System works, there is <a href="http://docs.sencha.com/touch/2-0/#!/guide/class_system" target="_blank">a great guide written by Jacky Nguyen</a> in the Sencha Touch 2 Documentation.</p>

	<h3>Mapping the Record to the DataItem</h3>

	<p>Now we have the component data item created which will be used in our DataView. The three new configurations we created are automatically transformed into components and added into the item. The next step is configuring the map between the record and the item displayed in the list. Remember we have three fields we need to map:</p>

	<ul>
		<li><b>name</b> -&gt; <b>html</b> config of the name component</li>
		<li><b>image</b> -&gt; <b>src</b> config of the image component</li>
		<li><b>cuteness</b> -&gt; <b>value</b> config of the slider component</li>
	</ul>

	<p>To do this, we use the dataMap configuration in our DataItem. This configuration allows us to map a setter of a configuration in our DataItem to a field in the record bound to our DataItem. Lets look at an example:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">config<span class="sy0">:</span> <span class="br0">&#123;</span>
    …
&nbsp;
    dataMap<span class="sy0">:</span> <span class="br0">&#123;</span>
        getImage<span class="sy0">:</span> <span class="br0">&#123;</span>
            setSrc<span class="sy0">:</span> <span class="st0">'image'</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>

	<p>Once this DataItem is added into DataView and the record is updated, this will essentially do this:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="kw1">this</span>.<span class="me1">getImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setSrc</span><span class="br0">&#40;</span>record.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">'image'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>As you can see, it is using the getter for our new image config, then calling the src setter on the Ext.Img component with the image field of our record.</p>

	<p>We now repeat this process for the <b>name</b> and <b>cuteness</b> fields, so the appropriate components are updated. And the final dataMap is:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">config<span class="sy0">:</span> <span class="br0">&#123;</span>
    …
&nbsp;
    dataMap<span class="sy0">:</span> <span class="br0">&#123;</span>
        getImage<span class="sy0">:</span> <span class="br0">&#123;</span>
            setSrc<span class="sy0">:</span> <span class="st0">'image'</span>
        <span class="br0">&#125;</span><span class="sy0">,</span>
        getName<span class="sy0">:</span> <span class="br0">&#123;</span>
            setHtml<span class="sy0">:</span> <span class="st0">'name'</span>
        <span class="br0">&#125;</span><span class="sy0">,</span>
        getSlider<span class="sy0">:</span> <span class="br0">&#123;</span>
            setValue<span class="sy0">:</span> <span class="st0">'cuteness'</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>

	<p>Now that the DataItem is mapped to the record, we can load up our example in a browser. And when we add some <span class="caps">CSS</span> sparkle, the demo will look a little like this:</p>

 <figure class="aligncenter">
    <a target="_blank" href="http://www.senchalabs.org/component-dataview-example/"><img src="http://src.sencha.io/636/http://img1.sencha.com/files/misc/KittensListItem.png" alt="KittensListItem" width="636"></a>
    <figcaption><a class="more-icon" href="http://www.senchalabs.org/component-dataview-example/" target="_blank">View the ultra-cute kittens DataView example</a></figcaption>
 </figure>

	<h3>Conclusion</h3>

	<p>You can <a href="http://www.senchalabs.org/component-dataview-example/" target="_blank">view a live demo of this example</a> on Sencha Labs and the full source code (with lots of comments!) over on <a href="https://github.com/senchalabs/component-dataview-example" target="_blank">GitHub</a>.</p>

	<p>The enhanced DataView in Sencha Touch 2 Beta 2 makes it easy to build complex data bound lists. If you have issues or find bugs with the beta, feel free to drop by our <a href="http://www.sencha.com/forum/forumdisplay.php?89-Sencha-Touch-2.x-Forums" target="_blank">forums</a> and let us know. We&#8217;re actively hunting down and fixing bugs, so let us know if there are things you&#8217;re expecting to work that just aren&#8217;t. </p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Wed, 08 Feb 2012 17:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/#date:17:00</guid>
        </item>
        
        <item>
        <title>Flex to Sencha: The Opportunity</title>
        <author>Ted Patrick</author>
        <description>
            Today Sencha is launching a fast-track program for Flex Developers looking to develop HTML5 applications in partnership with Sencha. Join us to learn more about building HTML5 applications.
        </description>
        <link>http://www.sencha.com/blog/flex-to-sencha-the-opportunity/</link>
        <content:encoded>
            <![CDATA[
                <p>In my professional career I have never witnessed a disruptive shift as large as the adoption of HTML5 as an application medium. Within this movement, Sencha is focused on building enterprise-grade frameworks, tools, and services to allow developers to deliver HTML5 applications on today’s mobile and desktop browser runtimes. Today Sencha is launching a <a href="http://pages.sencha.com/flex-to-sencha.html" title="Flex to Sencha">fast-track program</a> for Flex Developers looking to develop HTML5 applications.</p>

<p>Having worked on Flex at Adobe, I have a deep respect for Flex as a technology and ecosystem. Flex is great technology but the foundational dependency on Flash Player is forcing many projects to re-architect towards HTML5. Within this disruption, I believe there is a great opportunity for Flex developers to learn a new technology, leverage existing knowledge, and deliver great application experiences with Sencha. I also believe that Flex developers have the opportunity to define and lead the movement toward HTML5 applications as they bring years of experience building world class applications with components, classes, MVC, and a futuristic version of ECMAScript.</p>

<p>The developer paradigms of Sencha and Flex are very similar and developers who know Flex will learn Sencha frameworks quickly and find their existing knowledge of component development instantly valuable. While the syntax and architecture are different, I keep finding patterns and concepts that match Flex perfectly but are suited to the interpreted model of web development and deployment. Within Sencha frameworks, Flex developers will find a modern class system with package support, a rich set of UI components, model classes for loading data, declarative component instantiation (xtype), and MVC integrated into the framework.</p>

<p><img src="http://pages.sencha.com/rs/sencha/images/flex-sencha-icons-380x77.png" alt="Sencha Frameworks" /></p>

<p>Today Sencha is launching a fast-track program for Flex Developers looking to develop HTML5 applications. We begin with a <a href="http://pages.sencha.com/flex-to-sencha-webinar.html" title="Flex to Sencha Webinar">Flex to Sencha Webinar</a> on Tuesday, February 14, and will continue with a <a href="http://pages.sencha.com/flex-to-sencha-roadshow.html" title="Flex to Sencha Road Show">Flex to Sencha Road Show</a> meeting with Flex user groups and Flex/Flash conferences throughout the year. We are also working on technology additions to Sencha frameworks including AMF and SOAP WebService support direct from JavaScript. For those that prefer visual tools, I also want to highlight the upcoming <a href="http://www.sencha.com/blog/sencha-designer-2-beta-announcement/" title="Sencha Designer 2">Sencha Designer 2</a> which helps you build both desktop and mobile applications visually.</p>

<p>Flex to Sencha Events:</p>

<ul>
<li><h3><a href="http://pages.sencha.com/flex-to-sencha-webinar.html" title="Flex to Sencha Webinar Registration">Webinar Registration</a></h3></li>
<li><h3><a href="http://pages.sencha.com/flex-to-sencha-roadshow.html" title="Flex to Sencha Road Show Registration">Roadshow Registration</a></h3></li>
</ul>

<p>I look forward to highlighting Sencha’s object-oriented and component based solution to building HTML5 applications to the Flex ecosystem. Having built many applications myself with Flex, I know that you can be successful building HTML5 applications with Sencha.</p>

                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Tue, 07 Feb 2012 18:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/flex-to-sencha-the-opportunity/#date:18:00</guid>
        </item>
        
        <item>
        <title>Sencha Touch 2 Beta—Raising The Bar</title>
        <author>Ed Spencer</author>
        <description>
            Two years ago, we set out on a journey to make the web mobile. Today, we’re raising the bar with the release of Sencha Touch 2 Beta.
        </description>
        <link>http://www.sencha.com/blog/sencha-touch-2-raising-the-bar/</link>
        <content:encoded>
            <![CDATA[
                <p>Two years ago, we set out on a journey to make the web mobile. Today, we’re raising the bar with the release of Sencha Touch 2 Beta.</p>

	<p>Thank you to our community for your feedback during our sneak peaks with our Preview Releases. Your contributions in the forums, reporting bugs, adding feature requests, and your inspirational teamwork in the Q&amp;A threads have kept us focused on what’s really important to you&#8212;delivering quality. We’ve taken all your feedback and we’re proud to deliver a release that we hope will exceed your expectations. </p>

	<p><a class="button-link small inline arrow download disabled" href="#"><span>Download Sencha Touch 2 Beta</span></a>&nbsp;&nbsp;&nbsp;<a class="more-icon" href="http://dev.sencha.com/deploy/sencha-touch-2-b1/release-notes.html">View Release Notes</a></p>

	<p><strong><span class="caps">UPDATE</span></strong>: Sencha Touch 2 RC is now available. <a class="more-icon" href="http://www.sencha.com/blog/sencha-touch-2-rc-native-packaging/">Go download that instead!</a></p>

	<h3>What’s New? </h3>

	<p>With every major release, we strive to bake in the latest innovate approaches to help you create impressive applications.  And learning how to use these techniques is now easier than ever. </p>

	<h4><span class="caps">API</span> Documentation, Guides, and Examples</h4>

	<p>We’re investing a great deal of time in creating comprehensive documentation for Sencha Touch 2. Every major class now has a full introduction complete with code samples and how it fits into the wider context of your app. As well as class docs, we’re adding over <a href="http://docs.sencha.com/touch/2-0/#!/guide">20 brand new guides</a> covering everything from <a href="http://docs.sencha.com/touch/2-0/#!/guide/getting_started">getting started</a> through to <a href="http://docs.sencha.com/touch/2-0/#!/guide/building">building and deploying</a> your applications.</p>

	<p>On top of this, our documentation center now allows you to experiment with inline code editing.</p>

  <figure class="aligncenter">
    <a href="http://docs.sencha.com/touch/2-0/" target="_blank"><img src="http://img1.sencha.com/files/misc/touch-2-docs.jpg" alt="Sencha Touch 2 Docs" height="389" width="636"></a>
    <figcaption>Touch 2 Docs feature 20 new guides, code samples, and editable examples.<br />
<a class="more-icon" href="http://docs.sencha.com/touch/2-0/">Visit the Touch 2 Docs</a></figcaption>
  </figure>

	<p>We’re continuing to lead the way when it comes to innovation in our learning materials. We’re also proud to continue sharing all of the hard work we put into our documentation tools under the open source <span class="caps">JSD</span>uck project, a part of Sencha Labs.</p>

	<p><a href="http://ju.mp/senchajwf" target="_blank"><img class="alignright" src="http://img1.sencha.com/files/misc/jog-with-friends.jpg" alt="Jog with Friends, a new Facebook example app in Sencha Touch 2"height="335" width="220"></a></p>

	<h4>New Facebook Integration Example</h4>

	<p>We&#8217;re adding an example showcasing Sencha Touch&#8217;s seamless integration with the Facebook Graph <span class="caps">API</span>. Jog With Friends combines the Facebook JavaScript <span class="caps">SDK</span> on the client side with a 200 line node.js script backed with MongoDB on the server side. For a live demo, check out <a href="http://ju.mp/senchajwf" target="_blank">http://ju.mp/senchajwf</a> on a WebKit browser.</p>

	<h3>Foundational Improvements</h3>

	<p>Each major new version of Sencha Touch brings with it an opportunity to advance the state of what can be done with the mobile web. Here are just a few of the improvements we&#8217;ve made in Sencha Touch 2.</p>

	<h4>A New Class System</h4>

	<p>Sencha Touch 2 benefits from the supercharged class system that powers Ext JS 4. The upgraded system enables powerful new capabilities like dynamic loading, custom builds and new features like mixins. This makes developing your app easier from the first line of code all the way through to creating a minimal custom build that contains only the classes your app actually uses.</p>

	<p>As a developer though, the biggest improvement you’ll probably notice is the use of the new config system. Sencha Touch components have always been very configurable, but for version 2 we’ve made a big improvement to the consistency of the <span class="caps">API</span>.</p>

	<p>Every single configuration can now be set and updated in a very predictable way through the use of generated getter and setter functions. These functions always follow the same format and can be called at any time so once you know the config name you automatically know what function to call to update it:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="kw2">var</span> panel <span class="sy0">=</span> Ext.<span class="me1">create</span><span class="br0">&#40;</span><span class="st0">'Ext.Panel'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    html<span class="sy0">:</span> <span class="st0">'Sencha Touch 2 rocks'</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>panel.<span class="me1">getHtml</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// alerts the current value of the html config</span>
panel.<span class="me1">setHtml</span><span class="br0">&#40;</span><span class="st0">'It sure does'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// changes your panel html to a new value</span></pre>

	<p>These functions always follow the same format, which makes learning the framework really easy. As well as the getter and setter functions we provide hook functions which makes it easy to create your own configs&#8212;check out the new <a href="http://docs.sencha.com/touch/2-0/#!/guide/class_system">class system guide</a> to find out more.</p>

	<h4><span class="caps">MVC</span> with History Support</h4>

	<p>One of the most frequently asked questions about web frameworks is how to structure your apps to make them easy and fun to create and maintain. With Sencha Touch 2, we’re bringing significant improvements in our <span class="caps">MVC</span> architecture, providing new functionality and a cleaner, leaner <span class="caps">API</span>.</p>

	<p>History support is baked right into Controllers in this new release, making it easy to add back button and deep linking support into your application. We have a full <a href="http://docs.sencha.com/touch/2-0/#!/guide/history_support">guide on history support</a> and you can see it in action on your device by checking out the upgraded Kitchen Sink example.</p>

	<p>Setting up routes is easier than ever&#8212;just define the urls your app needs to react to inside your controller along with a function to call when that url is detected. For example here’s how we can easily create an ecommerce application that shows product details when the user navigates to urls like http://myapp.com/#products/123:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'MyApp.controller.Products'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    extend<span class="sy0">:</span> <span class="st0">'Ext.app.Controller'</span><span class="sy0">,</span>
    config<span class="sy0">:</span> <span class="br0">&#123;</span>
        routes<span class="sy0">:</span> <span class="br0">&#123;</span>
            <span class="st0">'products/:id'</span><span class="sy0">:</span> <span class="st0">'showProduct'</span>  <span class="co1">// It’s that easy</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>    
    showProduct<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">'showing product '</span> <span class="sy0">+</span> id<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>Check out the full guide on <a href="http://docs.sencha.com/touch/2-0/#!/guide/history_support">History Support</a> to find out how to add this to your app.</p>

	<h4>Multi Device Profiles</h4>

	<p>One of the challenges of a multi-device world is building an application that runs seamlessly across operating systems and screen sizes. With Sencha Touch 2 we provide a simple mechanism that enables you to write your app once then customize it for each device it runs on.</p>

	<p>This is achieved by configuring Device Profiles, which usually split your app into Phone and Tablet modes. Define all of the models, views, controllers and store that you want to reuse in your Ext.application and anything profile-specific inside the configuration for each Profile.</p>

	<p>For example, let&#8217;s say we&#8217;re creating a Facebook app and want to show a simple feed view on Phones and a detailed one on Tablets. We can start by telling our Application that it has two profiles:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">application</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">'FB'</span><span class="sy0">,</span>
    profiles<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">'Phone'</span><span class="sy0">,</span> <span class="st0">'Tablet'</span><span class="br0">&#93;</span><span class="sy0">,</span>
    controllers<span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>Now we set up a Tablet Profile that&#8217;s activated when we detect that we&#8217;re running on a Tablet device:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'FB.profile.Tablet'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    config<span class="sy0">:</span> <span class="br0">&#123;</span>
        controllers<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">'Feed'</span><span class="br0">&#93;</span><span class="sy0">,</span>
        views<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">'DetailedFeed'</span><span class="sy0">,</span> <span class="st0">'Timeline'</span><span class="br0">&#93;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>
    isActive<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> Ext.<span class="me1">os</span>.<span class="kw1">is</span>.<span class="me1">Tablet</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>And one for Phones:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'FB.profile.Phone'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    config<span class="sy0">:</span> <span class="br0">&#123;</span>
        controllers<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">'Feed'</span><span class="br0">&#93;</span><span class="sy0">,</span>
        views<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">'SimpleFeed'</span><span class="sy0">,</span> <span class="st0">'Timeline'</span><span class="br0">&#93;</span>
    <span class="br0">&#125;</span><span class="sy0">,</span>
    isActive<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> Ext.<span class="me1">os</span>.<span class="kw1">is</span>.<span class="me1">Phone</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>When the app boots up, it will automatically figure out which Profile to activate and use its specialized models, views and controllers. Check out the <a href="http://docs.sencha.com/touch/2-0/#!/guide/profiles">Device Profiles guide</a> to find out how to use them in your app.</p>

	<h3>New Components&#8212;Component Data View and Navigation View</h3>

	<p>In addition to using the new XTemplates in your dataviews, we&#8217;re adding one of the most asked for features&#8212;using components in your data views.  You can now add buttons, or any components, to items.</p>

 <figure class="aligncenter">
  <img class="aligncenter" src="http://img1.sencha.com/files/misc/touch-2-component-dataview.jpg" alt="Touch 2 beta Component Dataview" height="100" width="636">
  <figcaption>The <a href="http://dev.sencha.com/deploy/sencha-touch-2-b1/examples/kiva/" target="_blank">KivaTouch demo app</a> uses a Component DataView to show funding progress.</figcaption>
 </figure>

	<p>Giving your users the proper visual cues helps your applications flow more naturally. With Sencha Touch 2, wiring up view transitions are now simpler than ever when using a Navigation view. If you choose to use a navigation view, navigational controls such as back buttons will be handled for you.  As an added bonus, we’re adding sexy animations when switching between cards.</p>

 <figure class="aligncenter">
  <iframe src="http://player.vimeo.com/video/36004489?title=0&amp;byline=0&amp;portrait=0&amp;color=4CC208" width="320" height="460" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
  <figcaption>Sencha Touch 2 Navigation View. <a class="more-link" href="http://vimeo.com/36004489" target="_blank">View video on Vimeo</a></figcaption>
 </figure>

	<h3>Dive In</h3>

	<p>Now that we’re in beta, we encourage you to dive right in.  We have a stable <span class="caps">API</span>, and we have more guides to help get you going quickly. If you’re looking to port your Sencha Touch 1.0 app we have a backwards-compatibility build that helps you through the migration process.  We also have <a href="http://docs.sencha.com/touch/2-0/#!/guide/upgrade_1_to_2">an upgrade guide</a> to help you out.</p>

	<p><strong>Note:</strong> those of you who have been using the Sencha Touch 2 Preview releases, be aware that we have cleaned up the builds we generate and as a result you may need to change which build of Sencha Touch you use. Most people should now be using sencha-touch-debug.js while developing, but for a complete list of the builds we generate see the <a href="http://docs.sencha.com/touch/2-0/#!/guide/building">builds guide</a>.</p>

	<h3>Features We&#8217;re Still Working On: Android <span class="caps">ICS</span> Performance</h3>

	<p>Sencha Touch 2 has significantly faster performance on Android 2.x browsers &#8211; with fast list scrolling being a particular point of pride. We&#8217;ve always treated the browser in Android 3.x as fundamentally broken, and do not plan to officially support it in Touch 2. We are currently working on improving performance in Android 4.0 &#8211; the Ice Cream Sandwich release. So far, we have found no acceptable mechanism to achieve fast and flicker-free animations. We have filed a bug with a simplified test case showing poor performance on a variety of mechanisms with the Android bug list. If you&#8217;d like to help prioritize this bug, please go to the bug page for <a href="http://code.google.com/p/android/issues/detail?id=24833">Android bug number 24833</a>, and &#8220;star&#8221; the bug by clicking on the star icon just before the headline. Solving this bug will help, not just Sencha Touch 2, but the entire web community developing content for the Android 4 browser. Feel free to add your own test cases as well!</p>

	<h3>Summary</h3>

	<p>We hope you enjoy playing around with the examples, and diving in to building your next great app.  It’s been a lot of hard work getting to this point, and we thank you for all the feedback.  Please keep sharing your ideas.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Wed, 01 Feb 2012 16:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-touch-2-raising-the-bar/#date:16:00</guid>
        </item>
        
        <item>
        <title>Announcing Sencha Designer 2 Beta</title>
        <author>Luca Candela</author>
        <description>
            Sencha Designer 2 Beta is available for download! After many months of hard work, we are ready to unveil a tool that will change the way you work with our frameworks. Developers working with Sencha technologies now have an easy to use tool to increase their productivity. Designer 2 makes it easier than ever to build your applications using Ext JS and Sencha Touch.
        </description>
        <link>http://www.sencha.com/blog/sencha-designer-2-beta-announcement/</link>
        <content:encoded>
            <![CDATA[
                <h3>Sencha Designer 2 Now Supports Sencha Touch</h3>

<p><figure class="aligncenter">
<img src="http://img1.sencha.com/files/misc/designer-2-beta.jpg" alt="Designer 2 beta" height="371" width="500">
<figcaption>Sencha Designer 2 Beta features support for Sencha Touch and Ext JS JavaScript frameworks.<br><a class="more-icon" href="http://www.sencha.com/forum/showthread.php?152941-Sencha-Designer-2-Beta-Download-links">Download Sencha Designer 2 beta today</a></figcaption>
</figure></p>

<p>We’re thrilled to announce that Sencha Designer 2 Beta is available for download! Designer 2 makes it easier than ever to build desktop and mobile applications using Ext JS and Sencha Touch.</p>

<p>We&#8217;ve been working hard to bring you the next generation of Designer that will help you quickly build Ext JS and Sencha Touch applications. Experienced users will enjoy the productivity gains of the visual development environment, while folks new to Sencha will have a much easier time learning how to work with our frameworks and quickly build a complete application.</p>

<p>Ext JS and Sencha Touch are incredibly rich: they provide UI components, charting, controllers, models and data stores. In Designer 2, we make all of these features easily accessible and neatly organized to make it easier to discover all their capabilities.</p>

<h3>From Ext Designer 1 to Sencha Designer 2</h3>

<p>Designer 1.0 was the first step in tooling for Sencha frameworks. Designer 1 was a visual UI builder that made it easy to scaffold and design the UIs for your applications. You used it in conjunction with another code editing tool in order to build Ext JS 3 apps.</p>

<p>In Designer 1.2, we adding the ability to target multiple frameworks and also added support for Ext JS 4. You could continue to build views and stores utilizing all of the new widgets available in the new framework, like charts, enhanced stores, and more.</p>

<p>While you told us that you loved the features of Designer 1.x, we kept hearing that you wanted Designer to do more to help you build fully functional applications in a collaborative way.</p>

<h3>Designer 2: Easier, Faster, Stronger</h3>

<p>When started planning Designer 2, we wanted to improve every aspect of the tool. To achieve this goal, we adopted the mantra “Easier, Faster, Stronger.”</p>

<ul>
<li><p><strong>Easier</strong> because we believed that the learning curve of building Sencha apps could be shortened. In Designer 2, all components come with handy in-line documentation, and there are quick links to go deep into the API reference. More fundamentally, developers can try things quickly and get instant feedback. The Designer canvas is a live view giving you immediate feedback. Learning the dozens of components in Touch or Ext JS is now a breeze.</p></li>
<li><p><strong>Faster</strong> because traditionally, web based development proceeded like this: write some code, refresh the browser, check the changes. Over and over again. While better web debugging tools have come a long way, debugging and error checking is still a tedious and sometimes unpredictable process.</p>

<p>Designer 2 is different: all code generated by the tool is guaranteed to work out of the box. You can’t arrange components in a way that will break the frameworks’ conventions. Every property or event of every component is available in Designer, removing guesswork and eliminating digging through the API docs.</p>

<p>Moreover, the Project Inspector has been greatly enhanced. It’s the heart of your project, and it shows your views, controllers, models, and stores all in one place, along with information about the project’s structure. All components and their relationships are there where you can see and analyze them.</p>

<p>If you need to jump into a project somebody else started, the Designer Project Inspector makes it easy. At one glance, you can see the entire project and understand how the application is built without thumbing through pages of code.</p></li>
<li><p><strong>Stronger</strong> because Designer 2 helps you create well-structured applications from day one, and ensures that generated code follows best practices. Most (if not all) of the boilerplate code is generated for you, so you can focus on the code that really matters: the controller logic that’s at the core of your unique application.</p></li>
</ul>

<h3>What’s new in Designer 2?</h3>

<p>Designer 2 represents a significant leap ahead in functionality, and here is a brief list of what’s new and what changed since the previous version:</p>

<h4>Support for Sencha Touch 2</h4>

<p>This feature has consistently been the top request from our community, and now it’s here! Sencha Touch 2 is now a first-class citizen of Designer. Visual development of mobile web applications is now a reality. This beta includes the <a href="http://www.sencha.com/forum/announcement.php?f=90&amp;a=28">PR4 release of Sencha Touch 2</a>.</p>

<h4>Code editor</h4>

<p>Designer now includes a built-in editor so you can add your own code any time you want. You can toggle between the design view, which gives you access to Designer visual controls, and code view, where you write your JavaScript. The files are saved to .js files on the file system, so you can use your editor of choice, or the built-in editor in Designer.</p>

<h4>New Toolbox</h4>

<p>The component Toolbox has been expanded and improved: it now includes all the components you need to create a fully functional application like Controllers, Models and even a brand new store that connects to Sencha.io. We also worked to make the vast array of components more manageable by adding base categories. This allows you  to narrow down the selection quickly, and create your own to fit your personal workflow.</p>

<p><img class="alignright" src="http://img1.sencha.com/files/misc/mvc.png" alt="MVC in the Project Inspector" height="344" width="267"></p>

<h4>New Project Inspector</h4>

<p>The Project Inspector shows the entire application at a glance. The root Application node contains your launch function, while the Controller, View, Store and Model nodes help you keep things organized as you’re building an MVC application.</p>

<h4>Event Bindings</h4>

<p>There’s a new panel that displays all the Event Bindings available for a component, and you can use this to bring your UI to life. And when your application grows in scope, you can stay organized by moving your event bindings into a controller.</p>

<h4>Source control friendly file format</h4>

<p>Developers share code using source control, but developers using Designer 1 had a hard time doing that because of the monolithic nature of our project files. Designer 2 projects are better: gone is the single file archive (you still can package them that way for easy sharing via email). Now, each view, model, store is its own file. Designer 2 makes it easier to work in a project team.</p>

<h4>In-line documentation</h4>

<p>In Designer 2 every component, property and configuration comes with handy in-line documentation, and if you need more there are quick links to go deep in to the API reference.</p>

<h3>Caveats for the Beta Release!</h3>

<p>We’re excited to share with you our first beta of Designer 2. While we’re excited to see our community give it a whirl, it is still a beta, and there’s still some work left to do. In the following weeks the team will concentrate on two things:</p>

<ul>
<li>Further quality improvements of  the existing feature set</li>
<li>Improvements in the user experience and the UI design</li>
</ul>

<p>Certain features that were not quite ready for the beta have been disabled &#8211;  don’t worry they’ll be back soon. As of today’s beta, the most notable absence is packaging for mobile devices.</p>

<p>The coming weeks are going to be fundamental to make Designer 2 the application you’ve been waiting for, so we need your feedback. We will be running usability tests to make sure we catch bugs on our own before the official release, but if you find something that doesn’t work as you expected, or think you have an idea that would make the application better, go ahead and let us know. All feedback will be evaluated carefully.</p>

<p>If you’re local to the San Francisco Bay Area, and are interested in <strong>participating in the usability testing</strong> that we’re doing, we’d love to hear from you. <a href="https://docs.google.com/a/extjs.com/spreadsheet/viewform?hl=en_US&amp;formkey=dENNMDhVbkpBeXlnR2RGaVBJZzVuckE6MA#gid=0">Click here to apply for the usability test</a>.</p>

<p>Since the application is going to improve and change significantly before release, the Designer documentation for beta is very basic. We are releasing an introductory article to get you started, and more material will become available as Designer takes its final shape.</p>

<p>We don’t recommend that you adopt the beta of Designer 2 yet in your production environment. Designer 2 has an auto-update feature, so as we make updates, we’ll be pushing changes directly to the application, and you can choose to accept or decline the updates.</p>

<p><strong>To share your ideas</strong>, comments and critiques with us, please use the <a href="http://www.sencha.com/forum/forumdisplay.php?99-Sencha-Designer-Forums">Sencha Designer 2 forum</a>.</p>

<p><strong>To report bugs</strong>, please use the <a href="http://www.sencha.com/forum/forumdisplay.php?97-Sencha-Designer-2.x-Bugs">Designer 2 Bug Forum</a>.</p>

<h3>Promotions, pricing and availability</h3>

<p>We are updating pricing for the product at the launch date: individual copies of Designer will be $399, with discounts for 5 and 20 packs.</p>

<p>Special offer: buy an Ext Designer 1.x License today and take advantage of promotional pricing of $279. Plus, you&#8217;ll receive a free upgrade to Designer 2.x License when released. Hurry, this offer ends on March 31, 2012.</p>

<p>Upgrading: if you bought Ext Designer 1.0 after January 1st, 2012, you’re entitled to a free upgrade to Sencha Designer when it ships! In order to get your upgrade license please contact the email address <a href="mailto:designer.upgrade@sencha.com">designer.upgrade@sencha.com</a> and we will take care of everything for you.</p>

<p>If you purchased an Ext Designer 1.x license prior to January 1st, 2012, you can upgrade to Designer 2 for $199 from now until March 31, 2012. To take advantage of this offer please email us at <a href="mailto:designer.upgrade@sencha.com">designer.upgrade@sencha.com</a>. Note that after March 31, 2012, the upgrade price increases to $279.</p>

<p>Please note that Sencha Complete which will include Designer 2, will remain priced at $999.</p>

<p>So, go ahead, <a href="http://www.sencha.com/forum/showthread.php?152941-Sencha-Designer-2-Beta-Download-links">download the Designer 2 beta trial</a> or <a href="https://www.sencha.com/store/designer">purchase Ext Designer 1</a> from the Sencha Store, and share your experiences with us!</p>

                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Mon, 30 Jan 2012 18:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-designer-2-beta-announcement/#date:18:00</guid>
        </item>
        
        <item>
        <title>How to Embed Interactive CSS3 Animations in an iBook</title>
        <author>Luca Candela</author>
        <description>
            Like everybody else on the US west coast, this morning we woke up in a world where Apple is poised to transform the way we consume textbooks with the ability to easily publish interactive books through iBook Author. The Sencha team quickly found a way to do that using Animator, and so can you following a few easy steps!
        </description>
        <link>http://www.sencha.com/blog/how-to-embed-interactive-css3-animations-in-an-ibook/</link>
        <content:encoded>
            <![CDATA[
                <figure class="alignright" style="width:300px;">
        <a href="http://vimeo.com/35333974" target="_blank"><img src="http://img1.sencha.com/files/misc/play-video-animator-ibooks.jpg" alt="Sencha Animator animations playing in an Apple iBook" height="236" width="300"></a>
        <figcaption><a href="http://vimeo.com/35333974" target="_blank">Click through to see a video</a> of Sencha Animator animations playing in an Apple iBook.</figcaption>
    </figure>

	<p>Like everybody else on the US west coast, this morning we woke up in a world where Apple is poised to transform the way we consume textbooks. One of the compelling features of this new and exciting medium is the ability to easily publish interactive books through iBook Author.</p>

	<p>iBook Author lets you embed interactive content in your books to create more engaging experiences for learners, and our first thought here at the Sencha HQ was to try using Sencha Animator to create that interactive content.</p>

	<p>So after a few minutes of fiddling, we found a fairly straightforward way to embed an Animator project in an iBook.</p>

	<h3>Step 1: Preparation in Animator</h3>

	<p>Open a Sencha Animator project you&#8217;d like to place inside your iBook. Take a screenshot of the stage area to create a &#8220;cover&#8221; for the animation, and rename it &#8220;Default.png&#8221;. This cover image will be used to show the animation in the page when inactive. Make sure it&#8217;s the same size as the stage.</p>

    <figure class="aligncenter">
        <img src="http://src.sencha.io/636/http://img1.sencha.com/files/misc/Rocking_Boat.png" alt="Sencha Animator Rocking Boat project">
        <figcaption>Sencha Animator Rocking Boat project. See the animation and our original article, <a href="http://www.sencha.com/blog/rocking-the-boat-of-flash-with-css3-animations">Rocking the Boat of Flash with CSS3 Animations</a>.</figcaption>
    </figure>

	<p>Export the project as you normally would, then place your Default.png inside the output folder.</p>

	<h3>Step 2: A Little Hacking&#8230;</h3>

	<p>Now comes the tricky part: you need an &#8220;info.plist&#8221; descriptor file in your output folder, so we provided one ready for you in our project file available to <a href="#downloadLinks">download at the bottom of this article</a>.</p>

	<p>Edit the info.plist file to enter the dimensions of your animation, then the BundleName to match the export folder&#8217;s name (e.g. myExportFolder), and finally add the extension &#8220;.wdgt&#8221; to the folder.</p>

	<p>If you&#8217;re working in Mac OS X, the icon of the folder will change to that of a Dashboard widget. If you&#8217;re on Windows or Linux, you can create a widget but you will need Mac OS X Lion in order to complete the process, since iBook Author only runs on that version of Apple&#8217;s operating system.</p>

	<h3>Finishing Up in iBook Author</h3>

    <figure class="aligncenter">
        <img src="http://src.sencha.io/636/http://img1.sencha.com/files/misc/iBook_Author.png" alt="iBook Author and Sencha Animator in action">
        <figcaption>iBook Author and Sencha Animator in action. Download the project files below to get started.</figcaption>
    </figure>

	<p>Now that you have an animation file ready, you just need to add an <span class="caps">HTML</span> widget to your book, and drag the .wdgt file in the widget&#8217;s properties as we show in the screenshot.</p>

	<p><a name="downloadLinks" id="downloadLinks"></a> Now you&#8217;re ready to export your book and enjoy the results of your work! Of course, you&#8217;ll need the new iBooks Author app and Sencha Animator on your Mac. Download our demo Sencha Animator iBook project below to get started.</p>

	<ul>
		<li><a class="more-icon" href="http://cdn.sencha.io/animator/sencha-animator-ibook.zip">Download Animator-&gt;iBooks Project File</a></li>
		<li><a class="more-icon" href="http://www.sencha.com/products/animator/download/">Start your 30-day trial of Sencha Animator 1.1</a></li>
		<li><a class="more-icon" href="http://itunes.apple.com/us/app/ibooks-author/id490152466">Download iBooks Author from Apple</a> (Available for free on the Mac App Store)</li>
	</ul>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Thu, 19 Jan 2012 22:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/how-to-embed-interactive-css3-animations-in-an-ibook/#date:22:00</guid>
        </item>
        
        <item>
        <title>First Thoughts Learning Ext JS 4.1</title>
        <author>Ted Patrick</author>
        <description>
            I wanted to share my thoughts on learning Ext JS 4.1 from a developer new to Sencha. The article highlights my initial progress, perceptions, and discoveries in learning Ext JS.
        </description>
        <link>http://www.sencha.com/blog/first-thoughts-on-ext-js/</link>
        <content:encoded>
            <![CDATA[
                <p><img class="alignright rounded shadow" src="http://img1.sencha.com/files/misc/learning-extjs.jpg" alt="First Thoughts Learning Ext JS 4.1" height="180" width="240"> I wanted to share my thoughts on my progress learning Ext JS 4.1 as a developer new to Sencha. As an application developer I have used many different development environments and application frameworks throughout my career and whenever I learn something new I compare back to my experience. Overall I have been very impressed with Sencha frameworks as they provide a professional foundation to build an application atop.</p>

	<h3>Interpreted</h3>

	<p>The single hardest shift for me is embracing the interpreted nature of JavaScript within the Ext JS framework in general. While not new to interpreted systems, I personally expect compiler emitted errors/warnings/flags, syntax auto-completion, and strong typing for member variables, return types and assignments. Having come most recently from Java, I find that being shown errors and autocompletion as I type is a great productivity enhancement but these benefits are tied to the nature of a strongly typed and compiled language. The general lack of these facilities in working with JavaScript is really the first hurdle in moving to web technology. Truth is, as I got more comfortable with the interpreted nature of the the language, I quickly found myself enjoying the advantages:</p>

	<ul>
		<li>JavaScript&#8217;s flexibility is a double edged sword. The language&#8217;s freedom is a joy but you must use best practices to avoid common pitfalls.</li>
		<li>Modern browsers offer developers great insight into application behavior at runtime. I have found the Chrome developer Console and Debugger JavaScript tools to be invaluable.</li>
		<li>Ext JS uses JavaScript as a meta-language to provide deeper <span class="caps">OOP</span>/MVC/Class Loading/Mixin support is very elegant for larger scale application development. These facilities exist in very few frameworks and really differentiate Ext JS and Touch. The ability to extend components or leverage a clean <span class="caps">MVC</span> pattern within an application make it very developer friendly as a framework.</li>
		<li>Leveraging JavaScript object literals and <span class="caps">JSON</span> for data/component instantiation is very productive. The ability to load components remotely, define UI as objects at runtime, and leverage client layout templating is very powerful. The syntax of larger object literals using xtype takes some getting used to. I found myself formatting my code more than normal to avoid the dreaded missing comma errors deep within an object literal.</li>
		<li>Using the Eclipse <span class="caps">VJET</span> Plugin was a great productivity boost for JavaScript and Ext JS development. The plugin provides auto-completion for JavaScript and there are several open source syntaxes for Ext JS. Being able to see instances, warnings/errors, and in-context return types is a very pleasant addition based on my past experience. <a href="https://www.ebayopensource.org/index.php/VJET/HomePage"><span class="caps">VJET</span></a> <a href="http://www.ebayopensource.org/wiki/display/VJET/VJET+Ext+Js+Extension+-+Sencha"><span class="caps">VJET</span>+ExtJS</a></li>
	</ul>

	<h3>Ext JS &#8220;Standard Library&#8221;</h3>

	<p>Ext JS provides a foundational set of helper classes and methods to make building applications easier. I found that the Ext.Array, Ext.Date, Ext.String, Ext.Object, Ext.Loader classes make working with data very easy and generally simplify building applications. Every application will use these common libraries and having them included and integrated into the framework is great.</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">require</span><span class="br0">&#40;</span> <span class="br0">&#91;</span> <span class="st0">'widget.*'</span> <span class="sy0">,</span> <span class="st0">'layout.*'</span> <span class="sy0">,</span> <span class="st0">'Ext.data.*'</span> <span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy0">;</span> 
Ext.<span class="me1">Array</span>.<span class="me1">each</span><span class="br0">&#40;</span> <span class="br0">&#91;</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">4</span> <span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span> <span class="kw3">name</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> console.<span class="me1">log</span><span class="br0">&#40;</span> <span class="kw3">name</span> <span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
Ext.<span class="me1">Object</span>.<span class="me1">getSize</span><span class="br0">&#40;</span> <span class="br0">&#123;</span> age<span class="sy0">:</span><span class="nu0">23</span> <span class="sy0">,</span> height<span class="sy0">:</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw3">name</span><span class="sy0">:</span><span class="st0">&quot;Ted&quot;</span> <span class="br0">&#125;</span> <span class="br0">&#41;</span><span class="sy0">;</span>  <span class="co1">//3</span></pre>

	<h3>Containers</h3>

	<p>Ext JS provides a rich set of containers (Ext.window.Window, Ext.panel.Panel, Ext.container.Container, Ext.grid.Panel, etc.) to allow developers to easily create nested views and more complex application logic. In Ext JS, containers&#8217; layout behavior is programmatic and allows you to set the behavior of a container at runtime to &#8216;vbox&#8217;, &#8216;hbox&#8217;, or any of the Ext.layout.container types. Additionally you can set sizes dynamically by assigning values to the &#8216;flex&#8217; property on items within a container.</p>

	<h3>Xtype</h3>

	<p>Ext JS provides a loosely typed data format called Xtype to allow you to pass trees of containers and controls as a single object. It is a very, very powerful technique and really makes building lots of UI components at all at once easy. In Flex and Android I used declarative <span class="caps">XML</span> for component initialization and layout but these are closely tied into compiler workflow. In an interpreted system, you want to leverage a format that is rapidly parsed and supports remote loading. As Xtype is a JavaScript Object Literal, it is parsed at the speed of the JavaScript engine in use. On both mobile and desktop targets, this is very fast. While you can create components independently, using xtype for component generation is much more productive once you get the hang of it. Here are 3 xtypes passed within an Array:</p>

 <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="br0">&#91;</span> <span class="br0">&#123;</span> xtype<span class="sy0">:</span> <span class="st0">'container'</span><span class="sy0">,</span> html<span class="sy0">:</span><span class="st0">'First Item'</span><span class="sy0">,</span> flex<span class="sy0">:</span><span class="nu0">1</span> <span class="br0">&#125;</span> <span class="sy0">,</span>
<span class="br0">&#123;</span> xtype<span class="sy0">:</span> <span class="st0">'splitter'</span> <span class="br0">&#125;</span> <span class="sy0">,</span>
<span class="br0">&#123;</span> xtype<span class="sy0">:</span> <span class="st0">'container'</span><span class="sy0">,</span> html<span class="sy0">:</span><span class="st0">'Second Item'</span><span class="sy0">,</span> flex<span class="sy0">:</span><span class="nu0">1</span><span class="sy0">,</span> maintainFlex<span class="sy0">:</span><span class="kw2">true</span> <span class="br0">&#125;</span> <span class="br0">&#93;</span></pre>

	<p>If this were assigned to a container&#8217;s &#8216;item&#8217; property, it would render a split view. I found this very simple and elegant, compared to the complexity in other frameworks.</p>

	<h3>Styling</h3>

	<p>I have styled components in several frameworks. In Ext JS, abstracting style properties as runtime loaded <span class="caps">CSS</span> for all components is very powerful. Better still, generating <span class="caps">CSS</span> from the provided <span class="caps">SASS</span>/Compass source formats makes building a global style change quite easy. In both Flex and Android, style is baked in at compile-time and is less flexible than a runtime interpreted model. While I now feel comfortable generating a base color change in Ext JS, it will take me some time to absorb the finer details of <span class="caps">CSS</span> styling of the components. This is easily one of the more complex areas of the framework and will take me time to fully understand. </p>

	<h3>Hello Sencha</h3>

	<p>Given this is my first real post on Ext JS on Sencha.com, I thought it would be good to post the simplest example possible. The example creates a window with an image inside. Feel free to paste into a local html file and open in a browser.</p>

 <style><!-- GeSHi could not find the language {LANGUAGE} (using path {PATH}) --></style><pre class="html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Hello Sencha&lt;/title&gt;
    &lt;!--styles--&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://cdn.sencha.io/extjs/4.1.0.b1/resources/css/ext-all.css&quot;&gt;
    &lt;!--extjs 4.0.2--&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;http://cdn.sencha.io/extjs/4.1.0.b1/ext-all.js&quot;&gt;&lt;/script&gt;
    &lt;!--app--&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
      //define the application
      Ext.application({
        launch: function() {
          //create a window
          var win = Ext.create( 'Ext.window.Window' , {
            title: 'Hello Sencha',
            height: 285,
            width: 250,
            layout: 'fit',
            //add an image to the window by an xtype object
            items: {
              xtype: 'image',
              src: 'http://www.sencha.com/files/blog/old/blog/wp-content/uploads/2010/06/sencha-logo.png'
            },
            listeners:{
              beforehide: function( com, owner, opt ){
                alert('hiding win');
              }
            }
          });
          //show the window
          win.show();
        }
      });
    &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;&lt;/body&gt;
&lt;/html&gt;</pre>

	<p>I will continue to document my journey learning Ext JS and Touch frameworks as I go. There is clearly a lot to learn and hopefully sharing my experience will help others new to Sencha. More to follow.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Tue, 17 Jan 2012 19:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/first-thoughts-on-ext-js/#date:19:00</guid>
        </item>
        
        <item>
        <title>Sencha Animator 1.1 Now Available</title>
        <author>Luca Candela</author>
        <description>
            We’re excited to announce that the first minor release update for Sencha Animator is now available for everybody to download and use. In this update we focused on fixing bugs and we introduced a few new features and improvements that we hope will make working with Animator easier and more productive.
        </description>
        <link>http://www.sencha.com/blog/sencha-animator-1-1-now-available/</link>
        <content:encoded>
            <![CDATA[
                <p><img class="alignright shadow rounded" src="http://img1.sencha.com/files/misc/animator-1-1.jpg" alt="Sencha Animator 1.1 now available." height="90" width="120"> We are excited to announce that the first minor release update for Sencha Animator is now available. In addition to general bug fixes, we&#8217;re happy to introduce a few new features and improvements to make working with Animator easier and more productive.</p>

	<h3>Experimental support for Firefox 7+</h3>

	<p>Firefox recently introduced support for <span class="caps">CSS</span> animations, and we wanted to give our users access to animation on newer Firefox browsers. Animator now exports <code>-moz</code> as well as <code>-webkit</code> animations. If your customers use Firefox 7 and above, they can take advantage of this new Animator capability.</p></p>

    <figure class="aligncenter">
        <img src="http://img1.sencha.com/files/misc/firefox-support.png" alt="Firefox Support" height="170" width="495">
        <figcaption>Sencha Animator 1.1 has support for Firefox CSS3 animations</figcaption>
    </figure>

	<p>As we continue to work on support for Firefox, you may notice a few issues (e.g., div elements with gradients applied will fail to render). Improving Firefox support will be one of the areas we will focus on in coming updates.</p></p>

	<h3>A new color picker</h3>

    <figure class="aligncenter">
        <img src="http://img1.sencha.com/files/misc/Color_Picker.png" alt="New Color Picker" height="334" width="480">
        <figcaption>Sencha Animator 1.1 features a new color picker</figcaption>
    </figure>

	<p>This latest release of Animator makes selecting colors easier and gives users more control. The new color picker features separate hue, saturation, luminosity, and transparency scrollers with integrated preview to fine tune color selections. You can also use <span class="caps">RGB</span> values if you prefer to work in the <span class="caps">RGB</span> color space. Animator keeps both sets of values up to date seamlessly, so you can switch color spaces as your project demands it.</p>

	<h3>More workflow improvements</h3>

	<p>The new color picker is the most visible new feature but it is not the only one. On the basic UX front, new users can now create a Sencha ID without leaving the application; we hope this will make the experience of using Animator for the first time more convenient. To help users who work on smaller screens, we also added the ability to turn off the rulers around the main stage.</p>

	<p>We also took a look at how we could improve the editing experience in Animator&#8217;s stage. The application positions child objects relative to their parents, according to the rules of <span class="caps">CSS</span> positioning. This generates behaviors that at first sight might look strange for designers used to traditional graphic design packages. In the case of nesting objects inside other objects, this can make objects appear to be in the wrong place on the stage.</p>

	<p>The new version of Animator compensates for this, maintaining the child object&#8217;s position on the stage for ease of editing, while still preserving the correct <span class="caps">CSS</span> under the hood. This takes care of the majority of cases when objects are nested, but it won&#8217;t always work if extreme transformations have been applied to the objects.</p>

	<p>Let&#8217;s look at an example involving two objects to see how Animator accomplishes this. Object A is at x=100, y=100 on the stage. Object B is at x=300, y=300. According to the rules of <span class="caps">CSS</span> positioning, which position a child object relative to its parent, nesting Object A inside of Object B will make Object A jump to a stage position of x=400, y=400.</p>

	<p>Animator compensates for this during nesting by adjusting for the difference between the original positions of the two objects (300-100=200) when determining the new relative position of Object A. When Object A is nested inside Object B, Animator places the Object A child at a relative position of x=-200, y=-200 to place it in the same stage position that it was before nesting.</p>

	<p>Export has also been improved, with a new &#8220;split export&#8221; feature. The new version of Animator lets you split your export up, exporting <span class="caps">HTML</span>, Javascript, and <span class="caps">CSS</span> separately instead of exporting a single file with all code embedded inline. In addition, Animator exports now also work around some Android 2.x <span class="caps">CSS</span> issues with the implementation of fill mode for greater browser compatibility.</p>

	<h3>Bug fixes</h3>

	<p>We fixed a number of bugs mostly to address animation editing, automatic updating, a previous incompatibility with Mac OS X Snow Leopard, and export behavior. See the <a href="http://www.sencha.com/products/animator/changelog">changelog</a> for a complete list. We are serious about providing a trouble free experience in Animator, and we encourage you to report bugs in the <a href="http://www.sencha.com/forum/forumdisplay.php?65-Sencha-Animator-Bugs">Bug Forum</a>.</p>

	<h3>Press Play to start&#8230;</h3>

	<p>The Animator team hopes you will enjoy this update and that you will keep creating beautiful animations with our tool.</p>

	<p>For now, go ahead and update, either by accepting the update prompt you will get inside Animator on startup, or <a href="http://www.sencha.com/products/animator/download/">download Sencha Animator 1.1</a>, and show us what you can do with it.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Thu, 12 Jan 2012 14:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-animator-1-1-now-available/#date:14:00</guid>
        </item>
        
        <item>
        <title>Sencha: The 2012 HTML5 Wishlist</title>
        <author>Michael Mullany</author>
        <description>
            It's that time of year, and we're once again publishing our HTML5 wishlist. Read on to find out what we're hoping to see happen in the world of web browsers and web standards.
        </description>
        <link>http://www.sencha.com/blog/sencha-the-2012-html5-wishlist/</link>
        <content:encoded>
            <![CDATA[
                <p><img class="alignright" src="/files/blog/old/blog/wp-content/uploads/2010/05/html5.png" alt="Our Top Ten HTML5 Wishes for 2012" height="90" width="120"> It&#8217;s that time of year, and we&#8217;re once again publishing our HTML5 wishlist. But before we do that,  let&#8217;s see how our <a href="http://www.sencha.com/blog/our-top-ten-html5-wishes-for-2011/">2011 wishes</a> went. On balance, we didn&#8217;t do so bad. Out of our ten wishes, four came through. Here are the HTML5 wishes that became reality in 2011. We wished for:</p>

	<ul>
		<li>A richer CSS3 effects toolbox; and lo there was <a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html"><span class="caps">CSS</span> Filters</a>, a port of the sophisticated filters available in <span class="caps">SVG</span> to the <span class="caps">DOM</span>.</li>
		<li>High performance position: fixed for mobile browsers; and we were granted it in iOS 5&#8217;s Mobile Safari. Now we&#8217;re waiting for other devices to catch up.</li>
		<li>Pervasive <span class="caps">GPU</span> acceleration; and we were pleased to see the <a href="http://www.sencha.com/blog/blackberry-playbook-the-html5-developer-scorecard/">BlackBerry PlayBook</a> and <a href="http://www.sencha.com/blog/galaxy-nexus-the-html5-developer-scorecard/">Android 4.0</a> join iOS&#8217;s excellent implementation of accelerated graphics.</li>
		<li>Websockets stabilization: and we got a Christmas present of <a href="http://tools.ietf.org/html/rfc6455"><span class="caps">RFC</span> 6455</a> and the <a href="http://www.w3.org/TR/websockets/">W3C Candidate Recommendation</a> for the web sockets protocol and <span class="caps">API</span> respectively.</li>
	</ul>

	<p>But our other six wishes didn&#8217;t fare so well. There was only minor progress toward deeper device access on mobile browsers and developers continued to use native wrappers to access cameras and microphones. WebSQL stayed dead as a standards track technology (and its performance even decreased in iOS 5). We also saw slow progress on IndexedDB implementations. The rival HTML5 codec camps remained entrenched with little prospect of harmony, even as the mobile patent battles raged across global jurisdictions and institutions, and live debugging on mobile browsers remained a difficult task.</p>

	<p>In the &#8220;welcome surprise&#8221; category, Microsoft impressed us with its <a href="http://www.sencha.com/blog/ie10-preview-html5-first-look/">support for HTML5 in the IE10 preview</a>, showing a solid commitment to the latest HTML5 and CSS3 standards.  Finally, and disappointingly, many of WebKit&#8217;s nicest proprietary extensions, like <code>background-clip: text</code>, remained off the standards track and omitted from other browsers. </p>

	<p>So, looking forward to 2012, we&#8217;ve got a new top ten wish list for HTML5 and for the browser makers. Some of 2011&#8217;s top wishes make a comeback, but others are brand new. We don&#8217;t claim these are definitive, but a motley collection of what we think would be most interesting for developers creating the rich and responsive applications that HTML5 was built for.</p>

	<h3>10. <span class="caps">HTML</span> Media implementations</h3>

	<p>Although we got some support for photo uploads in Android, web browser support for media capture and other HTML5 media technologies remains elusive. As a result, mobile web developers, in particular, have to wrap their web apps in a shell to get device <span class="caps">API</span> access. Camera access is the #1 feature reason for HTML5 developers to deploy to native rather than web, and given Apple&#8217;s leadership in almost every other area of mobile web, it remains a glaring omission for Mobile Safari. </p>

	<h3>9. HTML5 audio quality</h3>

	<p>While long-playing HTML5 audio works in most places, short-form audio, particularly for the features that games need, is lacking. Synchronizing audio with video or animations, multi-channel and mixing are all features that developers want. There are a number of early stage drafts to create standards for richer media handling, so that&#8217;s encouraging. Perhaps by the end of the year, we&#8217;ll be looking at solid desktop support, at the very least, with some standardization in round 2 of working drafts. We wish.</p>

	<h3>8. Better Offline Caching</h3>

	<p>HTML5 cache manifests are great for basic offline application support, but they require developers to know in advance what their assets are, declare them in a file and link the file into their pages. Mobile browsers in particular have had idiosyncratic and occasionally buggy interpretations of cache manifests. So, we&#8217;re wishing for a more dynamic, easier caching mechanism, ideally one that has some JavaScript <span class="caps">API</span>s.</p>

	<h3>7. Web Intents: Standardization &amp; support</h3>

	<p>Web Intents are a great mechanism to allow web applications to hand off tasks to one another, without knowing in advance who and what the offloading web app is. Invented by Paul Kinlan from Chrome, and inspired by Android&#8217;s intents system, they&#8217;re a neat way to allow web applications to collaborate on tasks. We&#8217;re wishing for a speedy standards track draft and good interoperable Firefox and WebKit implementations by the middle of the year.</p>

	<h3>6. WebGL Everywhere</h3>

	<p>It&#8217;s here, it works, it&#8217;s gorgeous. We&#8217;re even supporting <a href="http://senchalabs.github.com/philogl/">a framework for WebGL</a>. It looks fantastic on desktop. Our (probably fruitless) wish for 2012 is that IE10 supports WebGL, and we get ubiquitous WebGL on mobile. With iOS planning to support WebGL only within iAds, at least for now, it looks like we might wait a while to get that broadly, but we&#8217;re wishing for it anyway. </p>

	<h3>5. IndexedDB</h3>

	<p>2011 put a stake through the heart of WebSQL (thanks to Mozilla&#8217;s leadership) but IndexedDB is not ubiquitous yet. On desktop, Safari has yet to ship it, and it&#8217;s not here on mobile. Until then, developers continue to roll their own shims on top of local storage and WebSQL to get cross-browser offline data storage. We&#8217;re wishing for IndexedDB everywhere this year. </p>

	<h3>4. Right-sizing images</h3>

	<p>Sencha.io src helps developers deliver the right image size to any mobile device, but in our opinion this is a neat solution for something that should be solved in standards.   <a href="http://my.opera.com/karlcow/blog/2011/12/08/responsive-images-and-transparent-content-negotiation-in-http">Karl Dubost from Opera</a> points out that there was a <a href="http://tools.ietf.org/html/rfc2295">proposal back in the day</a> to enable this at the <span class="caps">HTTP</span> layer. However, given today&#8217;s cloud environments where developers often dont get to tweak their web servers and vanilla <span class="caps">HTTP</span> is the only thing available, this won&#8217;t fly. It needs to be added to either <span class="caps">HTML</span> or <span class="caps">CSS</span>. We&#8217;re hoping the <a href="http://dev.w3.org/csswg/css4-images/Overview.src.html"><acronym title="!">CSS4</acronym> Images standard</a> now in &#8220;pre-draft&#8221; form will get some love and attention this year.</p>

	<h3>3. Contacts <span class="caps">API</span> </h3>

	<p>We&#8217;d like contacts access without having to use a shell <span class="caps">API</span>. So would lots of our developers. There&#8217;s a spec from Nokia and friends but too few implementations. </p>

	<h3>2. Background Services</h3>

	<p>We&#8217;d also like to see more capabilities for managing multiple resources and handling background tasks. Chrome, once again, is leading on implementing these OS-y type services. <a href="http://www.w3.org/TR/notifications/">Web notifications</a> are in working draft and we wish they get broader implementation this year. We&#8217;d also like to see server-sent events get the wake-up behavior that&#8217;s spec&#8217;d.</p>

	<h3>1. Better Mobile Browser Debugging</h3>

	<p>And for the second year in the row, we&#8217;re asking for better mobile browser debuggability and profiling. Chrome&#8217;s remote debugging feature has been made to run on BlackBerry PlayBook, there is no reason others can&#8217;t follow it. Scriptable debugging/profiling would greatly assist mobile application QA, something that&#8217;s currently a painful task in mobile web app (and framework <img src="/images/smileys/grin.gif" width="19" height="19" alt="grin" style="border:0;" /> ) development.</p>

	<p>So that&#8217;s it! We know lots of our wishes have to do with mobile, since that&#8217;s where new technologies get adopted and reach critical mass the fastest. But it&#8217;s also the environment that&#8217;s hardest to hack around shortcomings, since the iOS and Windows Phone environments are so tightly controlled. And there&#8217;s a much longer list of things that we could add here (better, easier crypto for one, WebCL and more) but we&#8217;ll stop here in the interests of brevity. What&#8217;s your favorite wish for 2012? Give us your feedback in the comments!</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Mon, 09 Jan 2012 16:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-the-2012-html5-wishlist/#date:16:00</guid>
        </item>
        
        <item>
        <title>Sencha Touch Spotlight: Nanocrowd</title>
        <author>Roderic March</author>
        <description>
            The new Nanocrowd Sencha Touch app helps you find great movies to watch instantly on your iPad. By knowing why people like things, we can make the process of finding movies faster, easier, and more fun. Read more about Nanocrowd.
        </description>
        <link>http://www.sencha.com/blog/sencha-touch-spotlight-nanocrowd/</link>
        <content:encoded>
            <![CDATA[
                <figure class="aligncenter">
    <a href="http://www.sencha.com/apps/nanocrowd/"><img class="rounded" src="http://img1.sencha.com/files/misc/sencha-touch-nanocrowd.jpg" alt="Sencha Touch Spotlight: Nanocrowd" height="496" width="636"></a>
    <figcaption>The new Nanocrowd app helps you find great movies to watch instantly on your iPad.<br />
<a href="http://www.sencha.com/apps/nanocrowd/" class="more-icon">View the Nanocrowd app in the App Gallery</a></figcaption>
  </figure>

	<p><a href="http://www.nanocrowd.com/">Nanocrowd</a> develops technology that understands why people like things. Our first use of this technology is helping people find movies they&#8217;ll enjoy. By knowing why people like things, we can make the process of finding movies faster, easier, and more fun.</p>

	<p>These are wild times to be in the movie business, and we have to remain flexible, moving quickly to new platforms. For example, with over 40 million iPads sold (and half of them being used to stream movies and television), the iPad has become a leader in mobile entertainment devices. To support this platform, we recently announced our first movie-search application designed for the iPad, built with Sencha Touch: <a href="http://search.nanocrowd.com/">search.nanocrowd.com</a>.</p>

	<h3>Why We Chose Sencha Touch</h3>

	<blockquote class="pullquote right">
		<p class="pullquote right"><span>&#8220;</span>We wanted to remain flexible and create a single code base that we could extend to other platforms.&#8221;</p>
	</blockquote>

	<p>Nanocrowd started life as a desktop application, so our challenge was to convert our movie recommendation website into a mobile movie-watching platform. Our development team didn&#8217;t have expertise in mobile or touch; and, even though we were building our first mobile application specifically for the iPad, we wanted to remain flexible and create a single code base that we could extend to other platforms.</p>

  <figure class="aligncenter">
    <a class="lightbox" href="http://img1.sencha.com/files/misc/Screenshot-1.png" title="Search and filter your favorite movies with Nanocrowd."><img src="http://src.sencha.io/500/http://img1.sencha.com/files/misc/Screenshot-1.png" alt="Search and filter your favorite movies with Nanocrowd."></a>
  </figure>

	<p>After evaluating several technologies, we found that Sencha Touch was the best fit for our needs. It took full advantage of HTML5 and CSS3, offering us the cross-platform framework we needed. We built a quick prototype and found it easy to learn. Most important, Sencha instantly put an elegant face on our mobile application.</p>

	<p>To develop our mobile app, we started with lists of channels and movies. To become an intuitive mobile application, it was crucial that we convert our desktop grids and scrolling lists into touch-centric scrolling lists. Sencha Touch made it easy to inject movie and channel data into a pane that had three independent scrolling lists, and the first piece of our application was done.</p>

  <figure class="aligncenter">
    <a class="lightbox" href="http://img1.sencha.com/files/misc/Screenshot-2.png" title="Detail view on Nanocrowd's iPad app."><img src="http://src.sencha.io/500/http://img1.sencha.com/files/misc/Screenshot-2.png" alt="Detail view on Nanocrowd's iPad app."></a>
  </figure>

	<p>We also needed to present a wealth of information about the movies our users selected. Sencha allowed us to create multimedia overlays which we could float over any other application pane. We created our &#8220;Movie details&#8221; overlay which includes a thumbnail image, a JavaScript tag cloud, text about the movie, and checkbox forms for flagging whether a movie has been seen or for clearing alerts.</p>

	<p>Finally, we wanted to create a fun trailer-viewing experience. Of course, we had to load the trailer for the movie users selected, but then we also wanted our users to be able to scroll through and watch the trailers for any of the movies in the channel. We created a new pane (with an elegant transition, naturally) that included an embedded YouTube viewer, thumbnails for &#8220;next&#8221; and &#8220;back&#8221; scrolling, and information about the movie and the channel.</p>

  <figure class="aligncenter">
    <a class="lightbox" href="http://img1.sencha.com/files/misc/Screenshot-3.png" title="Nanocrowd's movie trailers with HTML5 video."><img src="http://src.sencha.io/500/http://img1.sencha.com/files/misc/Screenshot-3.png" alt="Nanocrowd's movie trailers with HTML5 video."></a>
  </figure>

	<p>On this pane, we took full advantage of the HTML5 video display and controls, including not only pause and play but also pinch-zoom for full-screen viewing. These same controls and viewer will be available to us on any platform that supports HTML5. When users are ready to watch a movie, a simple sheet flies in, populated with more information from our database showing them where they can watch the movie. One click launches the website or application where they can watch their movie instantly on their iPad.</p>

	<p>Our decision to use Sencha wasn&#8217;t based on any single element, but rather on how comprehensive the framework is and how easy it is for us to make our applications feel both native and elegant.</p>

	<h3>Business Value of Using Sencha Touch</h3>

	<p>Sencha Touch enabled us to cross over from being a desktop web application to a touch and mobile application without extensive training or hiring. We appreciated how easy it was to get started with the framework&#8212;we had a prototype application up and running in a couple weeks and understood what it would take to build the real thing. The &#8220;Kitchen Sink&#8221; examples and code samples were consistent time-savers, as we frequently found just what we needed by snagging source code straight from the Sencha website. After finishing the prototype, we developed a rich, multimedia mobile application with about 6 person-months of development, all with well-designed elements that give our users a familiar touch experience.</p>

	<p>Perhaps even more important to our future is that we&rsquo;re relying on Sencha to solve problems and issues that arise with device OS upgrades and with new hardware platforms. In the coming year, we plan to release our applications on several different platforms, and not only will the application function well out of the box, but as cross-device browser issues arise with these new devices, we&rsquo;re depending on Sencha to address them.</p>

	<p>Finally, we continue to benefit from the Sencha team&#8217;s enthusiastic customer support. They are responsive and helpful in our coding efforts as well as getting us up-to-speed on the touch and mobile platform. As we&#8217;ve progressed, Sencha has become a valuable technology partner.</p>

	<h3>Our Advice to New Developers</h3>

	<p>Don&#8217;t worry about mastering the framework before you begin coding&#8212;the sooner you begin to prototype and write some code, the faster you&#8217;ll learn to take advantage of all the tools and support that is available. When we started, we thought we were building a prototype, but before we even realized it we&#8217;d developed pieces of our application. This prototype/experiment/build process has been very successful for us.</p>

	<p>There are two things we wish we&#8217;d done sooner. We were slow to take advantage of the theming capabilities in Sencha Touch. We thought we&#8217;d add them at the end, but it would&rsquo;ve been more effective and easier to build them in from the beginning. Be sure to spend some time working with theming sooner rather than later. Also, jump into the forums and establish yourself as an active participant as soon as you get started. Although we used the forums as a resource, we didn&#8217;t think we should contribute actively until we were &#8220;experts,&#8221; and we wish we&#8217;d participated more fully from the start.</p>

	<h3>Final Thoughts</h3>

	<p>Looking to the future of consumer applications, there will continue to be a variety of platforms and operating systems we&#8217;ll need to support. Our customers will be adding new &#8220;screens&#8221; where they&#8217;ll want to watch TV and movies and you know they&#8217;ll expect all of their devices to play nicely together.  By developing in Sencha Touch, we&rsquo;re building a foundation that we can extend to those platforms as they emerge and change.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Mon, 19 Dec 2011 16:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-touch-spotlight-nanocrowd/#date:16:00</guid>
        </item>
        
        <item>
        <title>Sencha Learn Roundup</title>
        <author>Ted Patrick</author>
        <description>
            We're constantly updating Sencha Learn with new content for many of our products. Read on to find out what you might've missed.
        </description>
        <link>http://www.sencha.com/blog/sencha-learn-roundup/</link>
        <content:encoded>
            <![CDATA[
                <p>We&#8217;re constantly updating the Sencha Learn section with new content, here is some great content you might have missed:</p>

	<h3>New Tutorials for Ext JS 4 and Sencha Touch 2</h3>

  <div class="clearing">

	<p><a href="/learn/upgrading-to-sencha-touch-2-pr2/"><img class="shadow rounded alignleft" src="http://img1.sencha.com/files/misc/upgrade-to-touch-2.png" alt="thumbnail for Upgrading to Sencha Touch 2 PR2 Tutorial on Sencha Learn" height="90" width="120"></a></p>

	<p>With the <a title="Sencha Touch 2.0 PR3 now available" href="http://www.sencha.com/forum/announcement.php?f=91&amp;a=17">preview of Sencha Touch 2 available</a>, it is a great time to explore the <span class="caps">API</span>s and prepare to upgrade your existing applications. In this article from our newsletter, <a href="http://www.sencha.com/learn/upgrading-to-sencha-touch-2-pr2">Upgrading to Sencha Touch 2 PR2</a>, we take a simple existing example app&#8212;the Touch 1 CityBars guide&#8212;and explore what is required to make it compatible with the Touch 2 PR2 release.</p>

  </div>
  <div class="clearing">

	<p><a href="http://www.sencha.com/learn/sencha-class-system"><img class="shadow rounded alignleft" src="http://img1.sencha.com/files/misc/sencha-class-system-thumb.jpg" alt="The Sencha Class System" height="90" width="120"></a></p>

	<p>Following up from his highest-rated SenchaCon talk, Jacky Nguyen prepared a great tutorial on <a href="http://www.sencha.com/learn/sencha-class-system">the Sencha Class System</a> within Ext JS 4 and Sencha Touch 2. Both frameworks use the classes to manage dependencies, improve reuse, and provide rich features commonly found in class-based languages. Developers writing code using Ext JS 4 and Touch 2 can inherit from internal classes in the frameworks and make their own code object-oriented.</p>

  </div>
  <div class="clearing">

	<p><a href="/learn/sencha-touch-2-class-system/"><img class="shadow rounded alignleft" src="http://b.vimeocdn.com/ts/212/548/212548384_200.jpg" alt="thumbnail for Sencha Touch 2 Class System Screencast on Sencha Learn" height="90" width="120"></a></p>

	<p>Community member Jay Garcia has posted his own take on the Sencha Touch 2 Class System, which you can find as an 11 minute screencast in this <a href="http://www.sencha.com/learn/sencha-touch-2-class-system">contributed piece to Sencha Learn</a>.</p>

  </div>
  <div class="clearing">

	<p><a href="http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-3"><img class="shadow rounded alignleft" src="http://www.sencha.com/img/20110615-architecting-your-app-in-ext-js-4.png" alt="Ext JS 4 tutorial by Tommy Maintz" width="120"></a></p>

	<p>Tommy Maintz continues his Ext JS 4 <span class="caps">MVC</span> series of articles. In the previous two articles, he explored architecting a Pandora-style application using the new features of Ext JS 4. In the third installment, he implements controller logic inside of the application&#8217;s <span class="caps">MVC</span> architecture. Catch up with <a href="http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-1">Part 1</a> and <a href="http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-2">Part 2</a> if you haven&#8217;t already. Or go straight to Part 3 of <a href="http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-3">Architecting Your App in Ext JS 4</a>.</p>

  </div>

	<h3>New Tutorials for Ext <span class="caps">GWT</span> 3 Beta</h3>

  <div class="clearing">

	<p><a href="/learn/running-ext-gwt-2-and-3-together/"><img class="shadow rounded alignleft" src="http://img1.sencha.com/files/misc/ext-gwt-3-and-2.png" alt="thumbnail for Running Ext GWT 2 and 3 Together Guide on Sencha Learn" height="90" width="120"></a></p>

	<p><a href="http://www.sencha.com/blog/ext-gwt-3-0-beta-1-available">Ext <span class="caps">GWT</span> 3 Beta is now available</a>! To allow a smooth transition from Ext <span class="caps">GWT</span> 2 to 3, Ext <span class="caps">GWT</span> lets you include both v2 and v3 components in the same application. Ext <span class="caps">GWT</span> Team Lead Darrell Meyer explains how to <a href="http://www.sencha.com/learn/running-ext-gwt-2-and-3-together">run Ext <span class="caps">GWT</span> 2 and 3 together</a> in the same app.</p>

  </div>
  <div class="clearing">

	<p><a href="http://www.sencha.com/learn/ext-gwt-3-declarative-markup-with-uibinder"><img class="shadow rounded alignleft" src="/img/learn-Tutorial.png" alt="Ext GWT 3 Declarative Markup with UiBinder" height="90" width="120"></a></p>

	<p>Our newest Ext <span class="caps">GWT</span> team member Justin Hickman wrote an interesting article on <a href="http://www.sencha.com/learn/ext-gwt-3-declarative-markup-with-uibinder">Ext <span class="caps">GWT</span> 3 Declarative Markup with UiBinder</a>. UiBinder support has been one of the major driving factors for many of the <span class="caps">API</span> changes in Ext <span class="caps">GWT</span> 3.0.</p>

  </div>

	<h3>Catch up with Ext Designer &amp; Sencha Animator</h3>

  <div class="clearing">

	<p><a href="/learn/build-a-car-store-with-ext-designer-1-2-and-ext-js-4/"><img class="shadow rounded alignleft" src="http://www.sencha.com/img/20110725-designer-1-2.png" alt="thumbnail for Build a Car Store with Ext Designer 1.2 and Ext JS 4 Tutorial on Sencha Learn" height="90" width="120"></a></p>

	<p>Check out this tutorial for <a href="http://www.sencha.com/learn/build-a-car-store-with-ext-designer-1-2-and-ext-js-4">building a Car Store with Ext Designer 1.2 and Ext JS 4</a>. This article takes the previous “car store” sample project, upgrades it to Ext JS 4, while adding new JavaScript charts.</p>

  </div>
  <div class="clearing">

	<p><a href="/learn/animator-guided-tour/"><img class="shadow rounded alignleft" src="http://img1.sencha.com/files/misc/sencha-animator-1.png" alt="thumbnail for Animator Guided Tour Guide on Sencha Learn" height="90" width="120"></a></p>

	<p>If you haven&#8217;t seen the new Sencha Animator (which recently hit 1.0, and <a href="http://www.sencha.com/products/animator/animator-50/">is on special for Flash developers</a>), get familiar with our <a href="http://www.sencha.com/learn/animator-quickstart/">Quick Start</a> and <a href="http://www.sencha.com/learn/animator-guided-tour/">Guided Tour</a>. Our guided tour provides a brief introduction to Animator functionality and suggests exercises to help you learn your way around the tool.</p>

  </div>

	<p>If any of these articles are a surprise to you, <a href="#marketoEmailForm-blog">sign up for our newsletter</a> to get them earlier. Get started now, and happy learning!</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Thu, 15 Dec 2011 18:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-learn-roundup/#date:18:00</guid>
        </item>
        
        <item>
        <title>Introducing Siesta: A Testing Tool for Ext JS</title>
        <author>Mats Bryntse</author>
        <description>
            Siesta is a new unit testing framework for Ext JS and other JavaScript code. Testing Ext JS, or any JavaScript-centric web framework, can be difficult because the available tools are not really suited for the task. Most popular web UI testing tools don’t offer enough help unless your application uses simple static HTML pages. This is where Siesta is different from the rest, because its top priority is Ext JS testing.
        </description>
        <link>http://www.sencha.com/blog/introducing-siesta-a-testing-tool-for-ext-js/</link>
        <content:encoded>
            <![CDATA[
                <p><a href="http://www.bryntum.com/products/siesta/" target="_blank"><img class="alignright" src="http://img1.sencha.com/files/misc/siesta-logo.png" alt="Siesta logo" height="105" width="250"></a> In a previous guest post I described how we upgraded Ext Scheduler to Ext JS 4. As I mentioned then, one key factor that greatly simplified our upgrade was unit testing. While it may sound like an obvious thing to do, unit testing a UI generated by JavaScript is not as trivial as unit testing your server code.</p>

<p>For us, about midway through our upgrade, we realized that we badly needed a tool to help us verify that what used to work in the Ext JS 3 version still worked in the Ext JS 4 version. Doing the testing manually for each feature and API method would simply have taken way too much of our time. After evaluating a few popular options, we realized that none really fit our needs, so we started to design and write our own tool: <a href="http://www.bryntum.com/products/siesta/" target="_blank">Siesta</a>. Siesta can help you test plain JavaScript or code built with popular JS frameworks such as Ext JS or NodeJS.</p>

<p>But before we get into the details of Siesta, let’s take a step back and give some more background.</p>

<h3>Why testing JavaScript UIs is hard</h3>

<p>Testing Ext JS, or any other JavaScript centric UI framework, is hard because the available tools are not really suited for the task. When it comes to DOM and user interaction testing, most popular web UI testing tools don’t offer enough help unless your application uses simple static HTML pages. Using Ext JS, the HTML markup is usually generated by JavaScript code, meaning that you cannot safely rely on pixel coordinates, element IDs or XPath/CSS selectors. Brittle tests become very time consuming, if you have to update them every time that you make a slight change to your UI. A tool to test Ext JS must know about Ext JS and make use of its power. This is where Siesta is different from the rest, because its top priority is Ext JS testing.</p>

<h3>What we wanted from a test tool</h3>

<p>There are a few underlying reasons why we decided to write our own tool. Here are the main features we needed in a good Ext JS test tool:</p>

<ul>
	<li><strong>Write tests in JavaScript</strong> — we don’t want to have to learn a new language to write tests.</li>
	<li><strong>Automatable</strong> — we should not have to open a browser to run our tests</li>
	<li><strong>Extensible</strong> — we should be able to easily add our own assertion methods and abstractions.</li>
	<li><strong>Optimized for Ext JS</strong> — it should offer high level abstractions to assist with Ext JS testing.</li>
	<li><strong>Simple and user friendly UI</strong> — low learning curve, should be very easy to get started</li>
</ul>

<p>Together, we believe these features provide a very powerful testing tool. Let’s take a peek at the Siesta UI. Below you can see the two main panels of Siesta: The left hand side holds the test suite tree, and the right panel shows the test assertion list for one of the recently executed tests.</p>

  <figure class="aligncenter">
      <a class="lightbox" href="http://img1.sencha.com/files/misc/siesta-ui.png"><img src="http://src.sencha.io/636/http://img1.sencha.com/files/misc/siesta-ui.png" alt="Siesta user interface"></a>
      <figcaption>The Siesta UI. Click to view larger.</figcaption>
  </figure>

<h3>How to write a simple Siesta test.</h3>

<p>Let’s look at how to write a simple Hello World test. It would look something like this:</p>

<style>/**
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
*/
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">StartTest<span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span>test<span class="br0">)</span> <span class="br0">{</span>
  <span class="kw2">var</span> myTextField <span class="sy0">=</span> Ext.<span class="me1">create</span><span class="br0">(</span><span class="st0">"Ext.form.TextField"</span><span class="sy0">,</span> <span class="br0">{</span>
      renderTo <span class="sy0">:</span> Ext.<span class="me1">getBody</span><span class="br0">(</span><span class="br0">)</span>
  <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
  test.<span class="me1">click</span><span class="br0">(</span>myTextField<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
  test.<span class="me1">type</span><span class="br0">(</span>myTextField<span class="sy0">,</span> <span class="st0">'Hello world'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
      test.<span class="kw1">is</span><span class="br0">(</span>myTextField.<span class="me1">getValue</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">,</span> <span class="st0">'Hello world'</span><span class="sy0">,</span> <span class="st0">'We did it!'</span><span class="br0">)</span><span class="sy0">;</span>
  <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span></pre>

<p>A test starts in its StartTest method, which is similar to how you use Ext.onReady in your application. A text field is created and then typed into using the type() method. This method operates asynchronously and in the provided callback function we simply assert that the text field value is what we expect it to be — “Hello world”. When running this and enabling the “View DOM” mode, this is what you see:</p>

  <figure class="aligncenter">
      <img src="http://img1.sencha.com/files/misc/siesta-output.png" alt="Siesta output after running a simple test">
      <figcaption>Siesta output after running a simple test</figcaption>
  </figure>

<p>Since Siesta can be automated easily using tools like Selenium or the excellent Phantom JS, you could just as well run the test above on the command line. You would then see the following output:</p>

  <figure class="aligncenter">
      <img src="http://img1.sencha.com/files/misc/siesta-command-line.png" alt="Siesta Command Line">
      <figcaption>Siesta Command Line</figcaption>
  </figure>

<p>Even complex tests are made trivial by Siesta, for example testing moving, resizing and closing an Ext.Window:</p>

<p><notextile>
<style>/**
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
*/
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style></notextile></p><pre class="javascript">StartTest<span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span>t<span class="br0">)</span> <span class="br0">{</span>
  <span class="kw2">var</span> win <span class="sy0">=</span> <span class="kw2">new</span> Ext.<span class="me1">Window</span><span class="br0">(</span><span class="br0">{</span>
      height <span class="sy0">:</span> <span class="nu0">200</span><span class="sy0">,</span>
      width <span class="sy0">:</span> <span class="nu0">200</span><span class="sy0">,</span>
      <span class="co1">// Set window position to known state</span>
      x     <span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">,</span>
      y     <span class="sy0">:</span> <span class="nu0">0</span>
  <span class="br0">}</span><span class="br0">)</span><span class="sy0">;&lt;/</span>p<span class="sy0">&gt;</span>
&nbsp;
  win.<span class="me1">show</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
  t.<span class="me1">ok</span><span class="br0">(</span>win.<span class="me1">rendered</span><span class="sy0">,</span> <span class="st0">'The window is rendered'</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
  t.<span class="me1">hasPosition</span><span class="br0">(</span>win<span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="st0">'Correct initial position'</span><span class="br0">)</span><span class="sy0">;</span>
  t.<span class="me1">hasSize</span><span class="br0">(</span>win<span class="sy0">,</span> <span class="nu0">200</span><span class="sy0">,</span> <span class="nu0">200</span><span class="sy0">,</span> <span class="st0">'Correct initial size'</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
  <span class="co1">// Use component query to drag the header 20 px right/down</span>
  t.<span class="me1">drag</span><span class="br0">(</span>win.<span class="me1">down</span><span class="br0">(</span><span class="st0">'header'</span><span class="br0">)</span><span class="sy0">,</span> <span class="kw2">null</span><span class="sy0">,</span> <span class="br0">[</span><span class="nu0">20</span><span class="sy0">,</span> <span class="nu0">20</span><span class="br0">]</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
      t.<span class="me1">hasPosition</span><span class="br0">(</span>win<span class="sy0">,</span> <span class="nu0">20</span><span class="sy0">,</span> <span class="nu0">20</span><span class="sy0">,</span> <span class="st0">'Window could be moved to new position'</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
      <span class="co1">// Use regular CSS selector to drag the east resize handle 20 px to the right</span>
      t.<span class="me1">drag</span><span class="br0">(</span>win.<span class="me1">getEl</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">down</span><span class="br0">(</span><span class="st0">'.x-resizable-handle-east'</span><span class="br0">)</span><span class="sy0">,</span> <span class="kw2">null</span><span class="sy0">,</span> <span class="br0">[</span><span class="nu0">20</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">]</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
          t.<span class="me1">hasSize</span><span class="br0">(</span>win<span class="sy0">,</span> <span class="nu0">220</span><span class="sy0">,</span> <span class="nu0">200</span><span class="sy0">,</span> <span class="st0">'Size increased'</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
          t.<span class="me1">click</span><span class="br0">(</span>win.<span class="me1">down</span><span class="br0">(</span><span class="st0">'tool[type=close]'</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
          t.<span class="me1">notOk</span><span class="br0">(</span>win.<span class="me1">el</span>.<span class="me1">dom</span><span class="sy0">,</span> <span class="st0">'The dom element of the window is gone'</span><span class="br0">)</span><span class="sy0">;</span>
      <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
  <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span></pre>


<h3>What unit testing can do for your codebase</h3>

<p>Testing your code brings lots of advantages, perhaps the biggest one is that it increases your confidence in your codebase. How do you <strong>know</strong> your code actually works? How do you know if a small change in the core of your application is safe or if it breaks some feature? The only way is to actually manually verify each and every feature of your system—but that’s not realistic unless you have a test suite.</p>

<p>There are other advantages that are definitely worth thinking about: </p>

<ul>
	<li>You will save lots of time if you can automate your cross-browser testing prior to pushing out a new release of your application. Doing this will move the quality of your releases to a whole new level.</li>
</ul>

<ul>
	<li>If you use a write-tests-first approach, you are forced to think about your spec and requirements one extra time, before even writing a single line of code.</li>
</ul>

<ul>
	<li>Unit tests help you find tightly coupled code. If you cannot test component A, without also creating a component B and C, then you should probably refactor your code.</li>
</ul>

<ul>
	<li>Siesta can automatically detect global variable leaks for you by analyzing the window at the end of a test.</li>
</ul>

<p>Another advantage, especially for custom components, is that unit tests provide real usage examples for your APIs, which is like extra documentation built into your project.</p>

<p>When refactoring your code or when upgrading the underlying Ext JS version of your application, it is a huge plus to have a test tool to help you verify the state of your application. Or as someone wrote on Twitter recently: “Without unit tests you’re not refactoring. You’re just changing sh—”.</p>

<p>That is why, for big systems without a test suite, programmers are often afraid of refactoring, and instead only make minor cosmetic changes on the surface, patching here and there. As a result, such systems accumulate a lot of cruft, making further development much more costly.</p>

<h3>Summing it up…</h3>

<p>I hope this post has given you an idea of what Siesta is and how you can benefit from using it. We still have many features to implement. In the next couple of months we’ll be adding support for Sencha Touch testing, code coverage, performance benchmarking, and lots more. I’d like to invite everyone to join our forums and try Siesta. We are constantly looking for new ideas and ways to improve it, so please let your voice be heard in our <a href="http://bryntum.com/forum">community forums</a>.</p>

                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Wed, 14 Dec 2011 13:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/introducing-siesta-a-testing-tool-for-ext-js/#date:13:00</guid>
        </item>
        
        <item>
        <title>Android—Ice Cream Sandwich: The HTML5 Developer Scorecard</title>
        <author>Aditya Bansod</author>
        <description>
            As part of our series on the HTML5 capabilities of new mobile platforms, today we look at the Samsung Galaxy Nexus, the first device to ship with Android 4.0, aka Ice Cream Sandwich. Will Android 4.0 be a major step forward?
        </description>
        <link>http://www.sencha.com/blog/galaxy-nexus-the-html5-developer-scorecard/</link>
        <content:encoded>
            <![CDATA[
                <figure class="aligncenter">
        <img src="http://img1.sencha.com/files/misc/sencha-samsung-galaxy-nexus.jpg" alt="Samsung Galaxy Nexus" height="587" width="636">
        <figcaption>As part of <a href="http://www.sencha.com/blog/category/html5-developer-scorecard">our continuing series</a>, we ran the new Galaxy Nexus through our tests to see how it stacks up as an HTML5 app platform.</figcaption>
    </figure>

	<p>As part of our continuing series on the HTML5 capabilities of new mobile platforms, today we&#8217;re taking a look at the Samsung Galaxy Nexus, the first device to ship with Android 4.0, aka Ice Cream Sandwich. We&#8217;ve been hearing rumors over the last few months about the <a href="http://androidandme.com/2011/10/news/google-chrome-is-finally-coming-to-an-android-device-near-you/">involvement</a> of the Chrome team in Android 4, so we had our hopes up that the browser would be a major step forward. In the past, we&#8217;ve reviewed Android 2.x (Gingerbread) devices, like the <a href="http://www.sencha.com/blog/samsung-galaxy-android-tablet-the-html5-developer-scorecard/">Galaxy Tab</a> and Android 3 (Honeycomb) devices, and the <a href="http://www.sencha.com/blog/motorola-xoom-the-html5-developer-scorecard/">Motorola Xoom</a> &#8212;and have been disappointed by the performance and correctness of the browsers.</p>

    <blockquote class="pullquote" style="width:265px;">
        <p><span>&ldquo;</span>Ice Cream Sandwich is a major step forward for the Android Browser, but still falls short of iOS 5.&rdquo;</p>
    </blockquote>

	<p>After putting the Galaxy Nexus through our test wringer, we can say that Ice Cream Sandwich is a major step for the Android browser. However, it still falls short of iOS 5. It&#8217;s a solid browser for normal page browsing and it adds major new features that support most of the HTML5 spec. It also has taken a big step forward in correctness of rendering, which is a welcome change for people who want to push their mobile browsers to the limit. </p>

	<h3>Our First-Look &#8220;Methodology&#8221;</h3>

	<p>Our HTML5 scorecard consists of a series of tests aimed to help mobile web developers understand new devices and new form factors as they come to market. We test in a number of areas, namely JavaScript performance, HTML5/CSS3 features, rendering performance and rendering accuracy. To get there, we use a variety of tests, including Modernizer, Acid3, SunSpider, Sencha Animator demos and our Sencha Touch Kitchen Sink.</p>

	<h3>Acid3 and Modernizr</h3>

	<p>The Galaxy Nexus scores a perfect 100/100 on the <a href="http://acid3.acidtests.org/">Acid3</a> test, just like Android 3. However, a close look at the Acid3 results reveals that there are still rendering artifacts. In the top right of the test image there is a telltale faint red/pink box which should not be there, since Acid3 requires pixel-for-pixel of the reference image. In practice, this won&#8217;t impact web browsing or web development much, but it&#8217;s a bit of fit-and-finish that &#8220;we&#8217;re not quite there yet&#8221; on Android.</p>

	<p>We then turned to <a href="http://www.modernizr.com/">Modernizr</a>, one of our favorite tools to look under the hood of a browser. This time, we used the implementation of Modernizr on <a href="http://www.haz.io">haz.io</a> which provides a clean and easy way to look at Modernizer results. The verdict?  Ice Cream Sandwich offers very good HTML5 support! Font-face, geo-location, and full support for the CSS3 suite. Support for the various CSS3 effects is probably what we&#8217;re most excited about: animations, reflections, 2D and 3D transformations, as well as transitions are all supported. For web developers, you can finally rely on HTML5 in Android 4.0 to build rich user interfaces. We do note that with <code>@font-face</code> support, the device does in fact support it, but TypeKit does not yet detect it correctly. As with Playbook support, Typekit usually has a lag between first ship and support, so don&#8217;t be discouraged just because your TypeKit web fonts don&#8217;t work yet.</p>

	<p>With all the good news, there were features missing. Things of note that were absent from Ice Cream Sandwich were Web Workers, Web Sockets (so no real-time web on Android just yet), weak support for the new Input Types (like datetime or range), and WebGL. <span class="caps">SVG</span> was fully supported. We also decided do a head-to-head between iOS 5 and Android 4 on HTML5 support, and extracted some notable differences between the two platforms. This list isn&#8217;t comprehensive, but it shows some gotchas for web devs. Developers should use this guide to decide which <span class="caps">API</span>s to take advantage of on a specific platform, or if they want to stick to the common set. </p>

  <style type="text/css">
  #feature-comparison th &#123;
      padding-right: 10px;
      text-align: left;
  &#125;

  #feature-comparison td &#123;
      border-bottom: 1px solid ghostWhite;
  &#125;

  .positive &#123;
      color: green;
  &#125;
  .negative &#123;
      color: #920000;
  &#125;
  </style>

  <table id="feature-comparison">
    <thead>
      <th align="left" style="border-bottom:1px solid #ddd; width: 200px;">Feature</th>
      <th align="left" style="border-bottom:1px solid #ddd; width:  85px;">Android 4</th>
      <th align="left" style="border-bottom:1px solid #ddd; width:  85px;">iOS 5</th>
    </thead>
    <tbody>
      <tr>
        <td><code>overflow-scrolling</code></td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
      <tr>
        <td>File <span class="caps">API</span></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
      </tr>
      <tr>
        <td>History Management</td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
      <tr>
        <td>Shared Workers</td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
      <tr>
        <td>Web Sockets</td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
      <tr>
        <td>Web Workers</td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
      <tr>
        <td>Various Input Types</td>
        <td class="half">Half</td>
        <td class="full">Full</td>
      </tr>
      <tr>
        <td>Emoji (not part of HTML5)</td>
        <td class="negative" style="color:#920000;"><i>No</i></td>
        <td class="positive" style="color:green;"><i>Yes</i></td>
      </tr>
    </tbody>
  </table>

	<h3>Performance Testing</h3>

	<p>When checking the user agent received, web servers report that our Galaxy Nexus was using WebKit version 534.40, which is a very modern and up-to-date WebKit. Under the hood, according to the <a href="http://www.bgr.com/2011/10/06/samsung-galaxy-nexus-full-specs-revealed-verizon-wireless-exclusive/">BoyGeniusReport</a>, the Galaxy Nexus contains a dual-core <span class="caps">ARM</span> processor, specifically the TI <span class="caps">OMAP</span> 4460, which is in the same family (Cortex-A9) as BlackBerry PlayBook and the Kindle Fire. We therefore expected <a href="http://www.webkit.org/perf/sunspider/sunspider.html">SunSpider</a> scores in the same range as other tablets. As we&#8217;ve mentioned before, this current generation of tablets all ship with dual-core processors and all have roughly the same JavaScript optimizations. So the results are again fairly predictable and look like other devices we&#8217;ve tested in this generation of hardware.</p>

   <figure class="aligncenter">
        <img src="http://img1.sencha.com/files/misc/sencha-galaxy-nexus-chart-updated.jpg" alt="Galaxy Nexus SunSpider results" height="419" width="636">
        <figcaption>Like most devices in the dual-core Cortex-A9 family, the Galaxy Nexus has predictably good JavaScript performance. <strong>Note:</strong> This image was updated on Dec 14 at 1:30 PM <span class="caps">PST</span>.</figcaption>
    </figure>

	<p>The SunSpider tests are synthetic tests that push the JavaScript engine to its limit. So, next we turned our attention to some more real world tests, looking at CSS3 performance using our own Sencha Animator demos as well as a few other tests. </p>

	<p>Like we tried with the Kindle Fire, we threw caution to the wind and started off on our most challenging CSS3 animation test, the <a href="http://dev.sencha.com/animator/demos/kickfu/">Kick Fu game</a> that was developed for the launch of Sencha Animator. To our surprise, the game didn&#8217;t even start. We were a bit flummoxed by this given the fact that the whole CSS3 animation suite is supported in <span class="caps">ICS</span>. It&#8217;s unclear to us at the moment why this occurs. Our running theory is that the JavaScript game controls might be at fault, but it&#8217;s a wild guess at this point. </p>

	<p>We ran through the rest of our Sencha Animator <a href="http://www.sencha.com/products/animator/demos">demos</a>, some of which are very complex but are all JavaScript free, and were pleasantly surprised to see them all work beautifully. We haven&#8217;t seen an Android device run these demos well to date, and Ice Cream Sandwich shines here. For developers who want to use CSS3 2D, 3D, animations, and transitions, we&#8217;re happy to report that support on Ice Cream Sandwich is now near parity with other leading platforms. </p>

	<p>We also tested a few other real world areas for performance and correctness. We tried a Canvas based <a href="https://github.com/mojombo/ernie/network">GitHub network graph</a>. Rendering performance was fine and the result was accurate. Pinch/zoom also worked well and didn&#8217;t exhibit the low-quality mode toggling, we&#8217;ve found in earlier Androids. The resolution and dithering of the page stayed constant as we zoomed and moved around the page. We also tried out <a href="http://www.effectgames.com/demos/canvascycle/">Canvas Cycle</a> and it worked reasonably well. The frame rate was solid but it rendered to a very very small part of the screen, most likely due to the very high resolution of the Galaxy Nexus. When we zoomed in, the device managed to keep up reasonably well. The <span class="caps">FPS</span> easily dropped by half and audio was never dropped, and the <span class="caps">FPS</span> recovered when we zoomed out to the page&#8217;s natural size. Very impressive improvement over earlier Androids.</p>

	<p>Finally we tested embedded HTML5 audio and video. In one word: finally. We used the test player on <a href="http://www.html5video.org">html5video.org</a>, which gives you a video tag inline to the page. The Galaxy Nexus is the first phone we&#8217;ve seen that actually plays the video inline! iOS 5 on iPad and the iPhone do not play video inline, and we were impressed to see it work very well on Android 4. The video not only plays, but plays inline to the page. This is a big deal for web developers looking to use Video to enhance their web experience. </p>

    <blockquote class="pullquote" style="float: none; width:auto;">
        <p><span>&ldquo;</span>The Galaxy Nexus is a big step forward for developers looking to leverage HTML5 on Android.&rdquo;</p>
    </blockquote>

	<h3>Sencha Touch Kitchen Sink</h3>

	<p>Our <a href="http://dev.sencha.com/deploy/touch/examples/kitchensink/">Kitchen Sink app</a> is built with Sencha Touch and tests all aspects of our mobile web app framework. The Kitchen Sink gives mobile browsers a good workout as it exercises a huge set of browser features including a wide range of CSS3 effects.</p>

	<p>Right off the bat, it&#8217;s obvious that the device is more HTML5-friendly than any other Android when using the Kitchen Sink. Rounded corners look beautiful (not pixelated as in earlier Androids), icon mask work correctly, multi-touch is supported and scrolling is substantially improved. It&#8217;s not all perfect though: full-screen white flashes were still noticeable when scrolling, even if greatly reduced from the seizure-inducing levels in Honeycomb. Page transitions also occasionally caused the browser to &#8220;blink&#8221; as it re-renders. Re-renders are most notable when scrolling a page that&#8217;s been fully laid out. When starting a scull, the page does a white screen-flash, then begins to scroll fluidly. Our best guess is that the browser is dumping the rendered page to the <span class="caps">GPU</span> to use hardware accelerated scrolling, and the blink occurs during that transition. Our guess is the <span class="caps">CPU</span>-&gt;<span class="caps">GPU</span> texture transition is the main culprit here.</p>

	<p>Sencha Touch supports 3D transitions, specifically Flip and Cube, and they now work on Android for the first time, although screen-flashes are again a problem artifact. The other big issue we found is that address-bar hiding has changed between Android 3 and 4. This will impact web developers widely. In an single page app, like our Sencha Touch Kitchen Sink, it&#8217;s hard to get a hidden address bar to re-appear. On older Androids, pulling the whole page down would side the address bar back and push the page down with it. In <span class="caps">ICS</span>, this doesn&#8217;t happen reliably, and instead of adjusting the page geometry it actually overlays the address bar on top of the page content. This is not a deal breaker, but a definite change of behavior that developers should watch for. </p>

	<h3>Ice Cream Sandwich: Suggestions for the HTML5 App Developer</h3>

	<p><img class="alignright" src="http://img1.sencha.com/files/misc/HTML5_Logo_128.png" alt="HTML5 logo" height="128" width="128"> In summary, the Galaxy Nexus and Ice Cream Sandwich are a major step forward for the Android platform. Feature by feature, HTML5 support has gotten much better, rendering has become more accurate, and performance has gotten much faster. Although still behind the current HTML5 gold standard of iOS5, Android 4.0 is night and day compared to previous versions. We&#8217;re excited to see Google put this level of effort into Android&#8217;s web capabilities. And we hope they keep their foot on the gas! (And we&#8217;re keeping our fingers crossed that the Kindle Fire will get an upgrade to <span class="caps">ICS</span> in the New Year!)</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Tue, 13 Dec 2011 14:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/galaxy-nexus-the-html5-developer-scorecard/#date:14:00</guid>
        </item>
        
        <item>
        <title>Ext GWT 3.0 Beta Now Available</title>
        <author>Edmund Leung</author>
        <description>
            Today we are happy to announce the availability of Ext GWT 3.0 Beta. Read on to find about our future plans for 3.x, and a special promotion going through December 2011.
        </description>
        <link>http://www.sencha.com/blog/ext-gwt-3-0-beta-1-available/</link>
        <content:encoded>
            <![CDATA[
                <figure class="aligncenter">
<img src="http://img1.sencha.com/files/misc/Ext-GWT-3-hero-charts.jpg" alt="Ext GWT 3.0 Beta Now Available" height="380" width="600">
<figcaption>Ext GWT 3.0 Beta Now Available. <a class="more-icon" href="http://dev.sencha.com/deploy/gxt-3.0.0-beta1.zip">Download Ext GWT 3.0 Beta Today</a></figcaption>
</figure>

<p><h3>Today we are happy to announce the availability of Ext GWT 3.0 Beta!</h3></p>

<p>We consider this Ext GWT 3.0 Beta to be feature complete (with one exception, the tri-state tree). Moving forward we will focus solely on fixing bugs that we find and that the community reports. In the time since Developer Preview 5, the team has been hard at work finishing the new 3.0 features and working to fix bugs that have been reported by the community. We're excited in Ext GWT 3.0 to include the following major features:</p>

<ul>
<li>Adoption of GWT Events and Handlers
<li>First class support and interoperability with GWT Widgets
<li>Interface based design (supports easier testing and the MVP pattern)
<li>Improved model support (POJO based)
<li>Compile time templates
<li>Cells, including support for cells in data widgets
<li>Cell based fields
<li>New and improved strongly typed layout engine
<li>Full UiBinder support
<li>New native Draw and Charting API (no plugins!)
<li>Custom theming based on Appearance pattern and ClientBundle
</ul>

<p>For a list of changes in 3.0 Beta, please refer to the <a href="http://dev.sencha.com/deploy/gxt-3.0.0-beta1/release_notes.html">release notes</a>.

<p class="button-group">
    <a class="button-link inline small arrow" href="http://dev.sencha.com/deploy/gxt-3.0.0-beta1.zip" title="Download Ext GWT 3.0 Beta"><span>Download Ext GWT 3.0 Beta</span></a>
    <a class="button-link inline small blue" href="http://sencha.com/examples-dev" title="View demo for Ext GWT 3.0 Beta">View Demo</a>
</p>

<p>The improvements in Ext GWT 3.0 allow you to take advantage of new functionality with a minimal learning curve. Also, the addition of the new plugin free charting components enable you to extend your applications with powerful data visualization and analytics capabilities, all without needing brower plugins. The new charting components leverage SVG and VML giving developers compatibility across all desktop browsers. And because v2 and v3 can coexist in the same applications (stay tuned for detailed instructions in a upcoming blog post), you can plan for an orderly upgrade that fits your development cycle.</p>

<p><h3>Special promotion through the end of 2011</h3></p>
<p>
  <a href="http://www.sencha.com/store/extgwt/"><img class="alignright" src="http://img1.sencha.com/files/misc/sale2.png" alt="Sale" height="48" width="120"></a> We’re also offering a <strong>discounted special </strong>for the Ext GWT 2.x commercial bundle. From now until the end of the year, if you purchase an Ext GWT 2.x bundle, you’ll receive a 20% discount off the current price and receive Ext GWT 3.0 GA when it’s available at no additional cost! This special is available until the end of 2011, so take advantage of it now to lock in savings.
</p>

<figure class="aligncenter">
  <img src="http://img1.sencha.com/files/misc/ext-gwt-3-sale-prices.png" alt="Ext GWT 2.x Sale prices" height="180" width="500">
  <figcaption>Buy Ext GWT 2.x + Support for 20% off through December 31st. You’ll be eligible for Ext GWT 3.x when available in the early half of 2012.</figcaption>
</figure>

<p>
You can take advantage of this offer immediately at the <a href="http://www.sencha.com/store/extgwt/">Sencha store</a>.
</p>

<p>Additionally, we are pre-announcing updated Ext GWT 3.0 commercial pricing that will take effect after the release of Ext GWT 3.0 GA in the early half of 2012. Of course, Ext GWT 3.0 will continue to be available under the GPLv3 license, giving you the flexibility to choose the license that works best for your scenario.</p>

<figure class="aligncenter">
  <img src="http://img1.sencha.com/files/misc/ext-gwt-3-2012-prices.png" alt=""height="355" width="392"  />
  <figcaption>Ext GWT 3.x prices to take effect in early half of 2012.</figcaption>
</figure>


<p><h3>Maven</h3></p>

The final release of 3.0 will be put into Maven central and no extra repository is required. However, the releases before GA are released as snapshot releases.</p>

To get the <a href="https://oss.sonatype.org/content/repositories/snapshots/com/sencha/gxt/">snapshot releases</a>, you will need to add the following repository section to your pom.xml:

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.xml .imp {font-weight: bold; color: red;}
.xml .es0 {color: #000099; font-weight: bold;}
.xml .br0 {color: #66cc66;}
.xml .sy0 {color: #66cc66;}
.xml .st0 {color: #ff0000;}
.xml .sc-1 {color: #808080; font-style: italic;}
.xml .sc0 {color: #00bbdd;}
.xml .sc1 {color: #ddbb00;}
.xml .sc2 {color: #339933;}
.xml .sc3 {color: #009900;}
.xml .re0 {color: #000066;}
.xml .re1 {color: #000000; font-weight: bold;}
.xml .re2 {color: #000000; font-weight: bold;}
.xml span.xtra { display:block; }
</style><pre class="xml"><span class="sc3"><span class="re1">&lt;repository<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;id<span class="re2">&gt;</span></span></span>sonatype-snapshots<span class="sc3"><span class="re1">&lt;/id<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Sonatype Snapshots<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;url<span class="re2">&gt;</span></span></span>https://oss.sonatype.org/content/repositories/snapshots/<span class="sc3"><span class="re1">&lt;/url<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;snapshots<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;enabled<span class="re2">&gt;</span></span></span>true<span class="sc3"><span class="re1">&lt;/enabled<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;/snapshots<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/repository<span class="re2">&gt;</span></span></span></pre>

We have several artifacts available:

<ul>
<li><strong>gxt-release</strong> - A zip of the release, similar to how Ext <span class="caps">GWT</span> was released before 3.0
<li><strong>gxt</strong> - The core component and data classes
<li><strong>gxt-charts</strong> - The new drawing and charting API
<li><strong>gxt-legacy</strong> - Classes to ease porting projects from earlier Ext GWT versions
<li><strong>uibinder-bridge</strong> - Optional support to allow complete configuring non Widget types using in UiBinder XML. Will not be required when Google releases 2.5
</ul>

                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Thu, 08 Dec 2011 15:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/ext-gwt-3-0-beta-1-available/#date:15:00</guid>
        </item>
        
        <item>
        <title>What’s Coming in Ext JS 4.1</title>
        <author>Don Griffin</author>
        <description>
            The primary focus of the upcoming Ext JS 4.1 release is performance. We have been hard at work to improve performance across the board, but we have concentrated on two main areas: rendering and layout. While the majority of our time has been dedicated to this effort, there are many other exciting developments to share. Chief among these are some major improvements to grid and border layout and a preview of the new Neptune theme.
        </description>
        <link>http://www.sencha.com/blog/whats-new-in-ext-js-4-1/</link>
        <content:encoded>
            <![CDATA[
                <p><img class="alignright rounded shadow" src="http://img1.sencha.com/files/misc/whats-new-ext-js-4-1.jpg" alt="What's New in Ext JS 4.1" width="180"> </p>

	<h4>Update (12/23): Ext JS 4.1 Beta 1 is now available
<p class="button-group"> 
    <a class="button-link inline small arrow" href="http://cdn.sencha.io/ext-4.1.0-beta-1.zip" title="Download Ext JS 4.1 Beta 1"><span>Download Ext JS 4.1 Beta 1</span></a>  
    <a class="button-link inline small blue" href="http://www.sencha.com/forum/showthread.php?164313-Ext-JS-4.1-Beta-1-Now-Available" title="more info">more info</a> <br />
</p> </h4>

	<p>The primary focus of the upcoming Ext JS 4.1 release is performance. We have been hard at work to improve across the board, but we have concentrated on two main areas: rendering and layout. While the majority of our time has been dedicated to this effort, there are many other exciting developments to share. Chief among these are some major improvements to grid and border layout and a preview of the new Neptune theme.</p>

	<h3>Performance</h3>

	<p>The necessary precursor to improving performance is measuring it. To successfully and permanently increase performance, however, measurement has to become part of the regular build and test process. This was the first piece we put in place for Ext JS 4.1. Going beyond the use of profilers like dynaTrace, we created some simple measurement tools to use on a continuous basis. We use these tools to track key metrics on every build.</p>

	<p>The performance metrics we track correspond to the page life cycle: Load, Initialize, Render and Layout.</p>

	<h4>Load</h4>

	<p>An Ext JS application comes to life when its &#8220;onReady&#8221; function is called. Prior to that time, many things have to take place. When we say &#8220;page load&#8221;, we can mean many different things, but for the sake of simplicity, here we define page load as the time period that starts at the execution of the first line of &#8220;ext-all.js&#8221; and ends just before any onReady functions are called. This primarily includes time spent executing all of the Ext.define statements that populate the Ext namespace, and also the detection of when the page&#8217;s <span class="caps">DOM</span> is ready.</p>

	<h4>Initialize</h4>

	<p>When the onReady functions are called, the application takes over. Applications perform whatever custom initialization they may need, but at some point they will create components and containers to display. In some applications, there will be literally hundreds of components created. Each of these components and containers has to be constructed, initialized and wired together.</p>

	<p>In Ext JS 4, many more things are components compared with previous releases. Consider the header of a panel. The Header component is actually a container that contains a basic component for the title and (optionally) a set of Tool components: all managed by an hbox layout. This means you can add components to the panel&#8217;s header quite easily. It also means that there are more components and containers created in Ext JS 4 given the same panel configuration. Looking at the Themes example in Ext JS 3, there were 148 components in 50 containers. That same configuration in Ext JS 4 generates 271 components in 97 containers. This makes optimization of this area essential.</p>

	<h4>Render</h4>

	<p>The next step is the conversion of these initialized components and containers into <span class="caps">HTML</span>. In previous versions of Ext JS, rendering was a mixture of calls to the createElement <span class="caps">API</span> and setting innerHTML. In Ext JS 4.0, each component&#8217;s primary element was created using createElement and its internal structure was produced using an XTemplate instance referred to as the &#8220;renderTpl&#8221;.</p>

	<p>If a component happened to be a container such as a Panel, additional elements were created using createElement and the child components repeated the process as they rendered into the panel&#8217;s body element. At each step, special component methods were called and events were fired to allow derived classes and applications to extend this process.</p>

	<p>In version Ext JS 4.1 we have optimized component rendering, so components are rendered in bulk. Instead of alternating calls to createElement and innerHTML, bulk rendering creates the entire component tree as <span class="caps">HTML</span> and then adds it to the <span class="caps">DOM</span> with a single write to innerHTML.</p>

  <figure class="alignright" style="width:300px;">
    <img src="http://img1.sencha.com/files/misc/render-flow.png" alt="Figure 1: Render Process" style="max-width:100%;">
    <figcaption>Figure 1: Render Process</figcaption>
  </figure>

	<p>To support this change we added a new method to components called &#8220;beforeRender&#8221;. There has always been the &#8220;beforerender&#8221; event, but derived classes typically had to choose between overriding the &#8220;render&#8221; or &#8220;onRender&#8221; method if they needed to do any work just before their primary element was created. They could do what they needed and then call the base version of the method which would then create the element.</p>

	<p>The general flow of rendering in 4.0 vs 4.1 is shown in Figure 1. In both cases, the process starts at a particular component and descends the component tree.</p>

  <div style="clear:right"></div>

	<h4>Layout</h4>

	<p>Once the <span class="caps">DOM</span> has all the necessary elements, the final step is to determine the size and position of any elements that need special handling. Or in other words: the final step is to lay out the components. This process is the most complex and time consuming. It represented just over half the total time in loading the Themes example in 4.0.7. The challenge with layouts comes from how browsers handle requests for style information (such as margins, width and height), especially if these are being changed along the way.</p>

	<p>The first rule of performance is that <span class="caps">CSS</span> calculations are expensive. Because of this, browsers cache these results. When JavaScript comes along and sets a width or height, however, the browser has to invalidate some or all of this cache. How much of the cache this affects is a function of what was changed and the cleverness of the browser&#8217;s <span class="caps">CSS</span> engine. The next request for style information will typically then trigger a &#8220;reflow&#8221; to refresh the cache. In general, one could say &#8220;write + read = reflow&#8221;. Given that reflows are expensive, an obvious way to increase performance is to reduce the number of reflows that occur during a layout.</p>

	<p>In Ext JS 4.0, an hbox layout, for example, buffered all of its calculations and wrote those results only after it had read all that it needed from each component. If the hbox needed to know the size of a component, it had to measure the component&#8217;s element (read), but before it could do that, the layout of that component had to do its work first. In other words, the component&#8217;s layout performed some calculations (reads) and then stored the results to the <span class="caps">DOM</span> (writes). The hbox then measured the component&#8217;s element (read).</p>

	<p>What started out as a sequence of reads followed by a sequence of writes often became a highly interleaved set of reads and writes, which, of course, resulted in a large number of reflows. To eliminate these reflows the child layouts needed a way &#8211; external to the <span class="caps">DOM</span> &#8211; to report their results to their owner.</p>

	<p>Layouts in Ext JS 4.1 have been refactored to use a <i>layout context</i> object to share results while avoiding the write/read to the <span class="caps">DOM</span> (and its associated reflow). This change, while largely internal, breaks custom layouts. While we believe this is a fairly rare practice, it is something to be aware of when upgrading.</p>

	<h4>From 4.0.7 to 4.1 PR1</h4>

	<p>All of these optimizations produced some very significant gains. One of the key examples used to benchmark the performance of Ext JS is the Themes example. The performance difference of 4.1 PR1 compared to 4.0.7 in this example is shown in Figure 2, as tested on IE8.</p>

  <figure class="aligncenter">
    <img src="http://img1.sencha.com/files/misc/themes-perf-41.png" alt="" width="492"  />
    <figcaption>Figure 2: Themes Example Performance</figcaption>
  </figure>

	<h4>Next Steps</h4>

	<p>While 4.1 is clearly a big improvement over 4.0, it is not yet as fast across the board as 3.4. This is not the last word on optimizing performance. In fact, we have many other performance optimizations planned for 4.x that just could not fit in this release. Our goal right now is to stabilize and ship a final release of Ext JS 4.1 as quickly as possible. We will then be hard at work to accelerate getting those additional gains delivered in subsequent releases.</p>

	<h3>Other Goodies</h3>

	<p>As promised, this release is not purely about performance. We demonstrated the new Neptune theme at SenchaCon this year, and we are very pleased that a Neptune preview will be part of this release. Much to our delight, the Calendar example will be returning as well.</p>

	<p>The list could go on with the many other improvements, but let&#8217;s dive in to some of the more exciting changes.</p>

	<h4>Grid</h4>

	<p>By popular demand, we went back and investigated other solutions to the buffered scrolling and &#8220;infinite&#8221; scrolling mechanisms in Ext JS 4.0. We wanted to see if we could solve our technical problems without resorting to so-called &#8220;virtual scrolling&#8221;, and we are happy to report that, in fact, we can.</p>

	<p>In 4.1, grids of (almost) every kind now use native scrolling. This vastly improves the user experience because things like acceleration, momentum and friction all work as well for grid as they do for any other scrolling content. Another welcome improvement is that this also means that scrolling is done by pixels and not whole rows. This is also true for &#8220;infinite&#8221; grids, even when the rows are variable height.</p>

	<p>The only situation where virtual scrolling is still used is on the locked half of a locking grid. Since it has no scrollbar, native scrolling is not an option there.</p>

	<p>Lastly, though not part of grid per se, metadata handling is now supported by Store.</p>

	<h4>Border Layout</h4>

	<p>In the process of working on layouts, border layout in particular benefited from some internal restructuring. It has always been a very popular layout, but it has also suffered from some long-standing limitations:</p>

	<ul>
		<li>You could only have one region that is north, south, east or west. If you needed multiple south regions, you needed to use nested border layouts.</li>
		<li>You could not configure the layout such that an east or west region had priority over a north or south region. To achieve this, again, you needed to use nested border layouts.</li>
		<li>Components could not be added to the container after creation.</li>
		<li>Components could not be removed from the container after creation.</li>
	</ul>

	<p>We are pleased to say that all of these limitations have been removed in Ext JS 4.1.</p>

	<h4>XTemplate</h4>

	<p>Internally, Ext JS uses the XTemplate class for many things. It is a critically important part of the framework but was missing one important feature: it could not efficiently append to an array for a subsequent join operation. When we started work on bulk rendering, we decided that both DomHelper and XTemplate needed to collaborate on markup production by pushing their output onto a shared array.</p>

	<p>We then discovered that the internals of XTemplate could not be surgically modified to support this, which allowed us to reconsider just how this piece needed to work. Some long-standing challenges and issues with XTemplate:</p>

	<ul>
		<li>It only supported the most basic control structures: &#8220;for&#8221; and &#8220;if&#8221;.</li>
		<li>The code generated from the template was somewhere between very hard and impossible to debug. As a result, errors in the template text were very difficult to track down.</li>
		<li>The template text was compiled at XTemplate construction time, which was undesirable because many XTemplate instances were never actually used.</li>
		<li>Executing the compiled code for a template was not as fast as it could be because it contained many internal function calls and string concatenations.</li>
	</ul>

	<p>In 4.1, XTemplates are now compiled the first time they are used. This makes construction of an XTemplate nearly free. Further, the compiled code is now a single function that can be stepped into using the debugger, and it looks very much like the original template.</p>

	<p>With this approach, many things became simple to support. Like &#8220;else&#8221; and &#8220;else if&#8221; statements and &#8220;switch&#8221; statements. Even literal code insertion (similar to <span class="caps">JSP</span> or <span class="caps">ASP</span>) was now a trivial extension.</p>

  <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="kw2">var</span> tpl <span class="sy0">=</span> <span class="kw2">new</span> Ext.<span class="me1">XTemplate</span><span class="br0">&#40;</span>
    <span class="st0">'&lt;tpl for=&quot;orders&quot;&gt;'</span><span class="sy0">,</span>
        <span class="st0">'Order {id} is '</span><span class="sy0">,</span>
        <span class="st0">'&lt;tpl if=&quot;total &amp;gt; 100&quot;&gt;'</span><span class="sy0">,</span>
            <span class="st0">'large'</span><span class="sy0">,</span>
        <span class="st0">'&lt;tpl elseif=&quot;total &amp;gt; 25&quot;&gt;'</span><span class="sy0">,</span>
            <span class="st0">'medium'</span><span class="sy0">,</span>
        <span class="st0">'&lt;tpl elseif=&quot;total &amp;gt; 0&quot;&gt;'</span><span class="sy0">,</span>
            <span class="st0">'small'</span><span class="sy0">,</span>
        <span class="st0">'&lt;tpl else&gt;'</span><span class="sy0">,</span>
            <span class="st0">'{% continue; %}'</span><span class="sy0">,</span>
        <span class="st0">'&lt;/tpl&gt;'</span><span class="sy0">,</span>
        <span class="st0">'Items:'</span><span class="sy0">,</span>
        …
    <span class="st0">'&lt;/tpl&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>The &#8220;&lt;tpl for&gt;&#8221; statement generates a proper &#8220;for&#8221; loop while the &#8220;&lt;tpl if&gt;&#8221;, &#8220;&lt;tpl elseif&gt;&#8221; and &#8220;&lt;tpl else&gt;&#8221; generate the obvious &#8220;if&#8221; and &#8220;else&#8221; blocks.</p>

	<p>The new &#8220;&#123;% x <span>&#125;&#8221; syntax is used similar to &#8220;&#123;[ x ]&#125;&#8221;. The body of both of these is treated as arbitrary code. In the &#8220;&#123;[ x ]&#125;&#8221; expression, x is an expression that produces a value that is placed into the output. In the &#8220;&#123;</span> x %&#125;&#8221; case, &#8220;x&#8221; is simply inserted into the function. In this case, it will continue the for loop when reached.</p>

	<h4>Overrides</h4>

	<p>In Ext JS, it has long been a common practice to share bug fixes and enhancements in the form of an &#8220;override&#8221;. In the past, these had to be manually managed as special entities. They operated on existing classes, whereas just about all other code in Ext JS 4.0 uses class names as strings. For example, to derive from Ext.panel.Panel:</p>

  <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'My.app.Panel'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    extend<span class="sy0">:</span> <span class="st0">'Ext.panel.Panel'</span><span class="sy0">,</span>
&nbsp;
    method<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">this</span>.<span class="me1">callParent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>But to apply an override to the same Panel class (in Ext JS 4.0), the shape changes completely:</p>

  <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">panel</span>.<span class="me1">Panel</span>.<span class="me1">override</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
    method<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">this</span>.<span class="me1">callOverridden</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// not possible before 4.x</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>And this code will fail if the Panel class is not loaded already. The inheritance use case would not fail, but would instead inform the loader/builder that Ext.panel.Panel was required.</p>

	<p>Overrides are now first-class citizens. They can be named and loaded when needed. In fact, writing an override is just about identical to writing a derived class.</p>

  <style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript">Ext.<span class="me1">define</span><span class="br0">&#40;</span><span class="st0">'My.app.PanelPatch'</span><span class="sy0">,</span> <span class="br0">&#123;</span>
    override<span class="sy0">:</span> <span class="st0">'Ext.panel.Panel'</span><span class="sy0">,</span>
&nbsp;
    method<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">this</span>.<span class="me1">callParent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

	<p>Not only does this support the classic uses for override in a managed way, but overrides can actually become tools in your designs similar to a mixin. Where a mixin is always part of the class (like the base class), overrides can be bolted on later and only if desired or needed.</p>

	<h3>Conclusion</h3>

	<p>We hope you get a chance to download and try out the new features and improvements as we approach the final release of Ext JS 4.1. We are looking forward to getting feedback from everyone on how this release has benefited you, and where we should look at further improvements.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Mon, 05 Dec 2011 17:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/whats-new-in-ext-js-4-1/#date:17:00</guid>
        </item>
        
        <item>
        <title>Sencha.io Src Update</title>
        <author>James Pearce</author>
        <description>
            We're pleased to announce a set of new and experimental features for Sencha.io Src, the image resizing service within our popular Sencha.io cloud suite.
        </description>
        <link>http://www.sencha.com/blog/sencha-io-src-update/</link>
        <content:encoded>
            <![CDATA[
                <figure class="aligncenter">
    <img src="http://img1.sencha.com/files/misc/sencha-io-devices-2.jpg" alt="Photo of an astronaut out for a spacewalk, shown on an iPad and an iPod touch" height="400" width="636">
    <figcaption>Sencha.io offers an API for smart resizing of images on many devices with different-sized screens.</figcaption>
</figure>

<p><a href='http://www.sencha.com/learn/how-to-use-src-sencha-io'>Sencha.io Src</a> is one of the cloud services offered as a part of Sencha.io, and solves a common problem that mobile developers face: how to design for multiple screen resolutions.</p>

<p>We're thrilled that the service is now handling many hundreds of images <em>per second</em> for mobile sites and applications all around the world. And we also very pleased to announce a set of new and experimental features to the service, available today.</p>

<h3>Support for device orientation</h3>

<p>Sencha.io Src recognizes devices according to their user-agents, and scales images to their known screen sizes. This however, is not able to take account of the orientation of the device. An iPhone is well-known to have a screen of 320×480 pixels, but when an app is being used in landscape orientation, an image ought rather be constrained to 480×320.</p>

<p>To solve this, you can now explicitly <a href='/learn/how-to-use-src-sencha-io#o'>set screen orientation</a>, and to do so, the service's API now accepts '<code>portrait</code>' or '<code>landscape</code>' in the URL:</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="sy0">&lt;</span>img
  src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/landscape/http://sencha.com/files/u.jpg'</span>
  alt<span class="sy0">=</span><span class="st0">'Constrained to WxH, W greater than H'</span>
<span class="sy0">/&gt;</span></pre>

<p>More importantly, the service now also provides a small JavaScript library which you can include in your page, and which will detect orientation if the browser's <code>window</code> API supports it, and set a cookie accordingly. Subsequent requests to sencha.io Src will then indicate the current orientation, which can be detected using '<code>detect</code>' in the URL:</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="sy0">&lt;</span>script src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/screen.js'</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>img
  src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/detect/http://sencha.com/files/u.jpg'</span>
  alt<span class="sy0">=</span><span class="st0">'Constrained to WxH, W greater than H'</span>
<span class="sy0">/&gt;</span></pre>

<img class="alignright" src='http://src.sencha.io/200/http://www.sencha.com/files/learn/orient.png'>

<p>Try out <a href='http://src.sencha.io/tests/orientation'>the test page</a> with an iPhone, for example, and try reloading the page with different orientations.</p>

<p>(As the <a href='/learn/how-to-use-src-sencha-io#ocsm'>documentation</a> points out, you cannot always guarantee that the cookie has been set prior to a non-deferred image download, so you may need to use this in conjunction with document <code>load</code> events in regular web pages, as we do in the example above.)</p>

<h3 style="clear:both;">Client-side measurements</h3>

<p>The same <code>screen.js</code> script also takes various <a href='/learn/how-to-use-src-sencha-io#csm'>screen-size measurements</a> through the browser's DOM and BOM APIs, and these can be also be used to adjust screen sizes as an alternative to user-agent detection.</p>

<p>For example, if you want an image to be declaratively constrained by the <code>screen.width</code> value:</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="sy0">&lt;</span>script src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/screen.js'</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>img
  src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/screen.width/http://sencha.com/files/u.jpg'</span>
  alt<span class="sy0">=</span><span class="st0">'My JS-measured image'</span>
<span class="sy0">/&gt;</span></pre>

<p>This approach anticipates a '<a href='http://futurefriend.ly'>future-friendly</a>' alternative to user-agent detection, and also allows you to specify other types of measurements: for example, <code>document.body.clientWidth</code> will measure the inner width of your document's body, taking its margin into account. The trade-off is the possible race-condition between cookies, initial image requests, and also the way in which some measurements will vary during the loading of a page. There are more notes in the documentation, and real-device testing remains highly recommended!</p>

<h3>New formulaic manipulation</h3>

<p>You've long been able to manipulate image dimensions using operators like '<code>-</code>' (to deduct pixels) or '<code>x</code>' (to scale by percentage).</p>

<p>Sencha.io Src now adds support for <a href='/learn/how-to-use-src-sencha-io#rnd'>rounding</a> (using '<code>r</code>') and <a href='/learn/how-to-use-src-sencha-io#max'>explicit maxima</a> (using '<code>m</code>' and  '<code>n</code>') in these formulae.</p>

<p>For example, <code>r20</code> will ensure that an image is always constrained by a multiple of 20 pixels. This is often important when creating tile- or column-based layouts:</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="sy0">&lt;</span>img
  src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/x50r20/http://sencha.com/files/u.jpg'</span>
  alt<span class="sy0">=</span><span class="st0">'Half the screen, rounded down to nearest 20 pixels'</span>
<span class="sy0">/&gt;</span></pre>

<p>The maxima operators allow you to indicate different size limits for mobile- and non-mobile devices. This is useful to ensure that, even if the actual browser cannot be recognized, its genre can be used to ensure sensible images are sent for client-side resizing. The code below, for example, will display an image no larger than 500 pixels on a desktop browser, and no larger than 100 pixels on a mobile browser:</p>

<style>/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.javascript .imp {font-weight: bold; color: red;}
.javascript .kw1 {color: #000066; font-weight: bold;}
.javascript .kw2 {color: #003366; font-weight: bold;}
.javascript .kw3 {color: #000066;}
.javascript .co1 {color: #006600; font-style: italic;}
.javascript .co2 {color: #009966; font-style: italic;}
.javascript .coMULTI {color: #006600; font-style: italic;}
.javascript .es0 {color: #000099; font-weight: bold;}
.javascript .br0 {color: #009900;}
.javascript .sy0 {color: #339933;}
.javascript .st0 {color: #3366CC;}
.javascript .nu0 {color: #CC0000;}
.javascript .me1 {color: #660066;}
.javascript span.xtra { display:block; }
</style><pre class="javascript"><span class="sy0">&lt;</span>img
  src<span class="sy0">=</span><span class="st0">'http://src.sencha.io/n500m100/http://sencha.com/files/u.jpg'</span>
  alt<span class="sy0">=</span><span class="st0">'Max 500 or 100, depending on browser'</span>
<span class="sy0">/&gt;</span></pre>

<h3>Take it for a spin</h3>

<p>The full documentation for the API is <a href='/learn/how-to-use-src-sencha-io'>available here</a>, with a summary of its syntax, new formulaic operators, and client-side measurements <a href='/learn/how-to-use-src-sencha-io#summary'>here</a>.</p>

<p>Please let us know how you get on with these new features, and what else you might like to see form the service in the future. Enjoy!</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Tue, 22 Nov 2011 19:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-io-src-update/#date:19:00</guid>
        </item>
        
        <item>
        <title>Sencha Touch Spotlight: Viewbeat</title>
        <author>Burc Sade</author>
        <description>
            Sencha community member Burc Sade writes a guest blog post about his experience with Sencha Touch. His application, Viewbeat, is available on the Apple App Store and makes it fast and simple to ask questions and get answers from friends and others.
        </description>
        <link>http://www.sencha.com/blog/sencha-touch-spotlight-viewbeat/</link>
        <content:encoded>
            <![CDATA[
                <p><a class="alignright" href="http://www.sencha.com/apps/viewbeat"><img src="http://img1.sencha.com/files/misc/viewbeat-icon.png" alt="Viewbeat app icon" height="114" width="114"></a> <a href="http://www.viewbeat.com">Viewbeat</a> is an application that makes it fast and simple to ask questions and get answers from your friends and other people, with rankings! Built using Sencha Touch and wrapped with PhoneGap, it features a simple user interface that lets you see the most popular answers at a glance (based on the rating system), so you don&#8217;t have to go through all of the answers every time.</p>

	<blockquote class="pullquote right">
		<p class="pullquote right"><span>&#8220;</span>Instead of worrying about the interface, I could focus on building my application&#8212;enabling me to be more creative.&#8221;</p>
	</blockquote>

	<p>It&#8217;s my personal project and the result of an idea that I developed after struggling to find an easy way to ask my friends about a product I was planning to buy. My goal was to build a tool that lets people ask a question on the go and get answers fast with the most basic privacy options and notification abilities.</p>

	<p>Viewbeat also lets you discover more about your friends and find new like-minded people based on the answers they give. Thanks to the unique matching algorithm, you can find like-minded people with similar interests at the touch of a button and group them, as well as the topics and even topic options you like so you can follow them separately.</p>

    <figure class="aligncenter" style="clear:both;">
        <a class="lightbox" href="http://img1.sencha.com/files/misc/viewbeat-1.png" style="display:block;float:left;margin-right:10px;width:200px;" title="Sencha Touch lets you create elegant user interfaces that look and feel like native apps"><img src="http://src.sencha.io/200/http://img1.sencha.com/files/misc/viewbeat-1.png" alt="Sencha Touch lets you create elegant user interfaces that look and feel like native apps"></a>
        <a class="lightbox" href="http://img1.sencha.com/files/misc/viewbeat-3.png" style="display:block;float:left;margin-right:10px;width:200px;" title="The component model makes it simple to create complex and easy to use interfaces"><img src="http://src.sencha.io/200/http://img1.sencha.com/files/misc/viewbeat-3.png" alt="The component model makes it simple to create complex and easy to use interfaces"></a>
        <a class="lightbox" href="http://img1.sencha.com/files/misc/viewbeat-2.png" style="display:block;float:left;width:200px;" title="Developing custom components such as a profile image button is a breeze with Sencha Touch"><img src="http://src.sencha.io/200/http://img1.sencha.com/files/misc/viewbeat-2.png" alt="Developing custom components such as a profile image button is a breeze with Sencha Touch"></a>
        <figcaption>Click each image to view larger. Check out <a href="http://www.sencha.com/apps/viewbeat">Viewbeat</a> in the Sencha Touch App Gallery.</figcaption>
    </figure>

	<h3>Why I Chose Sencha Touch</h3>

	<p>I carefully considered whether to go native or use a mobile framework that supports open web technologies. Being able to port my applications to several mobile platforms without a hassle was an important part of my criteria. After carefully examining my options, I decided to choose HTML5/JavaScript and add some PhoneGap to the mix, so I can use native application features such as notifications and access to the contacts list.</p>

	<p>Before starting development, it was clear that I needed a touch-based UI framework that had components like sliding panels and action sheets with the look-and-feel of modern touch devices. Among the touch frameworks I reviewed, I decided to use Sencha Touch because it has all of the required components, packaged in an easy-to-use framework that I can use to build robust applications. Instead of worrying about the interface, I could focus on building my application &#8212; enabling me to be more creative.</p>

	<p>With its strong Ext JS background, Sencha Touch also enabled me to develop my application using an <span class="caps">MVC</span> pattern that ensures that my application has the flexibility to be extended easily. As a developer with strong <span class="caps">MVC</span> experience, having a familiar pattern at hand made the development process more relaxing and less stressful.</p>

	<p>Finally, the object-oriented approach of Sencha Touch let me create custom widgets and extend the capabilities of provided elements, making it a breeze to create custom functionality which is crucial for my application.</p>

	<h3>Business Value of Using Sencha Touch</h3>

	<p>Using the Sencha Touch framework, I completed the application in three months, mostly in my spare time, and cut my development time in half. I also got the benefit of a modern, rich UX, while having the freedom to focus on the details of designing and developing the internals of my application.</p>

	<h3>Advice to New Developers</h3>

	<p>Learning to use Sencha Touch was easy. Newcomers should start by watching the Sencha Touch video tutorials which provide a good overview. I also recommend going through the Kitchen Sink demo &#8212; it includes a lot of good examples for creating a rich, high quality UI.</p>

	<h3>Final Thoughts</h3>

	<p>I am quite satisfied with the outcome of this project and I&#8217;m going to continue building my upcoming mobile projects with Sencha Touch and PhoneGap. I believe that mobile is the way of the future for computing, and Sencha Touch will definitely be a big part of it.</p>
                <style>
                    .right, .alignright { float: right; margin: 0 0 10px 10px; }
                    .left, .alignleft { float: left; margin: 0 10px 10px 0; }
                </style>
            ]]>
        </content:encoded>
        <pubDate>Fri, 18 Nov 2011 17:00 GMT</pubDate>
        <guid>http://www.sencha.com/blog/sencha-touch-spotlight-viewbeat/#date:17:00</guid>
        </item>
        
    </channel>
</rss>

