<?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:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>MiamiCoder</title>
    <description>Ext JS 3.0 Cookbook,ExtJS tutorials,Ext JS tutorial,Ext tutorial,BlackBerry tutorials,.NET tutorials,software best practices,MVC tutorials</description>
    <link>http://miamicoder.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://miamicoder.com/opml.axd</blogChannel:blogRoll>
    <dc:creator>Jorge Ramon</dc:creator>
    <dc:title>MiamiCoder</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/feedburner/MiamiCoder" type="application/rss+xml" /><feedburner:emailServiceId>feedburner/MiamiCoder</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Learn To Customize the Ext JS Charts</title>
      <description>&lt;p&gt;Following up on &lt;a title="Custom Markers for Your Ext JS Charts" href="http://miamicoder.com/post/2009/10/Custom-Markers-for-Your-Ext-JS-Charts.aspx" target="_blank"&gt;Custom Markers for Your Ext JS Charts&lt;/a&gt;, here’s another example of how you can change the look of the Ext JS charts.&amp;#160; In&amp;#160; this case, I will show you how to change a data series style so, as shown in the image below, the markers have a different look and are not connected by a line.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="chart-custom-markers-2" border="0" alt="chart-custom-markers-2" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/79671f33c9cc_C211/chart-custom-markers-2_3.png" width="275" height="247" /&gt; &lt;/p&gt;  &lt;h4&gt;How to do it&lt;/h4&gt;  &lt;p&gt;As usual, it's very important to correctly configure the &lt;font face="Courier New"&gt;CHART_URL&lt;/font&gt; constant.&amp;#160; Observe that I’m using a folder called &lt;font face="Courier New"&gt;ext3&lt;/font&gt; for my Ext JS installation.&amp;#160; You might need to modify the folder name to match your setup.&lt;/p&gt;  &lt;pre class="brush: js;"&gt;Ext.chart.Chart.CHART_URL = 'ext3/resources/charts.swf';&lt;/pre&gt;

&lt;p&gt;As a second step, let's create a data store to hold some dummy records.&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var store = new Ext.data.JsonStore({
    fields:['name', 'games', 'movies','music'],
    data: [
        {name:'Jul 07', games: 245, movies: 300, music:700},
        {name:'Aug 07', games: 240, movies: 350, music:550},
        {name:'Sep 07', games: 355, movies: 400, music:615},
        {name:'Oct 07', games: 375, movies: 420, music:460},
        {name:'Nov 07', games: 490, movies: 450, music:625}
    ]
});&lt;/pre&gt;

&lt;p&gt;And now we can create our line chart.&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var c = new Ext.chart.LineChart({    
    renderTo: Ext.getBody(),
    width:300,
    height:275,
    id:'chart',
    store: store,
    xField: 'name',
    yAxis: new Ext.chart.NumericAxis({
        displayName: 'games',
        labelRenderer : Ext.util.Format.numberRenderer('0,0')
    }),
    tipRenderer : function(chart, record, index, series){
        if(series.yField == 'games'){
            return Ext.util.Format.number(record.data.games, '0,0') + ' games in ' + record.data.name;
        }if(series.yField == 'music'){
            return Ext.util.Format.number(record.data.music, '0,0') + ' CD\'s in ' + record.data.name;
        }
        else{
            return Ext.util.Format.number(record.data.movies, '0,0') + ' movies in ' + record.data.name;
        }
    },
    extraStyle: {
        padding: 10,
        animationEnabled: true,
        legend:{
            display:'bottom'
        },
        xAxis: {
            color: 0x3366cc,
            majorGridLines: {size: 1, color: 0xdddddd}
        },
        yAxis: {
            color: 0x3366cc,
            majorTicks: {color: 0x3366cc, length: 4},
            minorTicks: {color: 0x3366cc, length: 2},
            majorGridLines: {size: 1, color: 0xdddddd}
        }
    },
    series: [{
        type: 'line',
        displayName: 'Movies',
        yField: 'movies',
        style: {
            size: 7,
            borderColor: 0xCC0000,
            fillColor:0xffffff,
            connectPoints:false
        }
    },{
        type:'line',
        displayName: 'Games',
        yField: 'games',
        style: {
            size: 7,
            borderColor: 0x00CC00,
            fillColor: 0xffffff,
            connectPoints:false
        }
    },{
        type:'line',
        displayName: 'Cd\'s',
        yField: 'music',
        style: {
            size:7,
            borderColor: 0x0000CC,
            fillColor: 0xffffff,
            connectPoints:false
        }
    }]
});&lt;/pre&gt;

&lt;br /&gt;

&lt;h4&gt;How it works&lt;/h4&gt;

&lt;p&gt;You can stylize the look of a data series using the &lt;font face="Courier New"&gt;style&lt;/font&gt; object.&amp;#160; The &lt;font face="Courier New"&gt;size&lt;/font&gt; property&amp;#160; represents the size of the markers in the series.&amp;#160; You can also use &lt;font face="Courier New"&gt;borderColor&lt;/font&gt; and &lt;font face="Courier New"&gt;fillColor&lt;/font&gt; to change the border and fill colors of the markers.&amp;#160; These two properties accept hex-formatted string or number values, for example: &amp;quot;#ff0000&amp;quot;, &amp;quot;ff0000&amp;quot; or 0xff0000.&lt;/p&gt;

&lt;p&gt;Setting &lt;font face="Courier New"&gt;connectPoints&lt;/font&gt; to false allows you to display the line series with no lines connecting the markers.&lt;/p&gt;

&lt;h4&gt;Where to find more information about Ext JS charts&lt;/h4&gt;

&lt;p&gt;The Ext JS charts are not well documented yet, but you can find more information at the &lt;a href="http://developer.yahoo.com/yui/charts" target="_blank"&gt;YUI charts page&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Grab the code for the sample from my &lt;a title="Download Ext JS Charts sample" href="http://miamicoder.com/page/downloads.aspx" target="_blank"&gt;downloads&lt;/a&gt; page.&lt;/p&gt;

&lt;h4&gt;Want to learn more?&lt;/h4&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ext-JS-Cookbook" border="0" alt="Ext-JS-Cookbook" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a051ac380dd_C550/Ext-JS-Cookbook_3.jpg" width="84" height="103" /&gt; My Ext JS 3.0 Cookbook has more than a hundred step-by-step recipes that you can use to build your Ext JS applications.&amp;#160; Download a &lt;a title="download sample chapter of Ext JS Cookbook" href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;amp;utm_medium=affiliate&amp;amp;utm_content=authorsite&amp;amp;utm_campaign=mdb_001176" target="_blank"&gt;sample chapter&lt;/a&gt; and see for yourself.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=pi-Zl5xacO0:Qk1Tu5W5rOU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=pi-Zl5xacO0:Qk1Tu5W5rOU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=pi-Zl5xacO0:Qk1Tu5W5rOU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=pi-Zl5xacO0:Qk1Tu5W5rOU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=pi-Zl5xacO0:Qk1Tu5W5rOU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=pi-Zl5xacO0:Qk1Tu5W5rOU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/pi-Zl5xacO0" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sizNqqoYqAcR-vAQ1LJBDBzXiDM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sizNqqoYqAcR-vAQ1LJBDBzXiDM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sizNqqoYqAcR-vAQ1LJBDBzXiDM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sizNqqoYqAcR-vAQ1LJBDBzXiDM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=fQS-rVptNEU:pi-Zl5xacO0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=fQS-rVptNEU:pi-Zl5xacO0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=fQS-rVptNEU:pi-Zl5xacO0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/fQS-rVptNEU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/fQS-rVptNEU/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/11/Learn-To-Customize-the-Ext-JS-Charts.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=25a72120-2c1d-4537-b9d7-a4409a6fc219</guid>
      <pubDate>Mon, 09 Nov 2009 22:30:00 -0800</pubDate>
      <category>ExtJS</category>
      <category>How-To</category>
      <category>Javascript</category>
      <category>Web Development</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=25a72120-2c1d-4537-b9d7-a4409a6fc219</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=25a72120-2c1d-4537-b9d7-a4409a6fc219</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/11/Learn-To-Customize-the-Ext-JS-Charts.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=25a72120-2c1d-4537-b9d7-a4409a6fc219</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=25a72120-2c1d-4537-b9d7-a4409a6fc219</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/pi-Zl5xacO0/post.aspx</feedburner:origLink></item>
    <item>
      <title>Ext JS Books Round-up</title>
      <description>&lt;h1&gt;&lt;/h1&gt;  &lt;p&gt;If you’re thinking of buying a book on Ext JS, here’s a list of the Ext JS books currently in the market.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Ext JS 3.0 Cookbook is my book.&lt;/p&gt;  &lt;h4&gt;Learning Ext JS&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 10px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="learning-ext-js" border="0" alt="learning-ext-js" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/e3d17ff723f8_FA40/learning-ext-js_6.png" width="104" height="127" /&gt; Authors:&lt;/strong&gt; Colin Ramsay, Shea Frederick, Steve 'Cutter' Blades &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s inside&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;From the building blocks of the application layout, to complex dynamic grids and forms, Learning Ext JS will guide you through the basics of using Ext JS, giving you the knowledge required to create rich user experiences beyond typical web interfaces.&amp;#160; It will also provide you with the tools you need to use AJAX, by consuming server-side data directly into the many interfaces of the Ext JS component library.&lt;/p&gt;  &lt;p&gt;With this book you will learn to build consistent, attractive web interfaces with the framework components; integrate your existing data and web services with Ext JS data support; enhance your JavaScript skills by using Ext's DOM and AJAX helpers, and extend Ext JS through custom components. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who this book is written for&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This book is written for Web Application Developers who are familiar with HTML but may have little to no experience with JavaScript application development.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More infomation&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="Learning Ext JS book at Packt Publishing" href="http://www.packtpub.com/learning-ext-js/book/231009qwylj4?utm_source=miamicoder.com&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=mdb_001176" target="_blank"&gt;Learning Ext JS book at Packt Publishing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Ext JS 3.0 Cookbook&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 10px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ext-js-3.0-cookbook" border="0" alt="ext-js-3.0-cookbook" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/e3d17ff723f8_FA40/ext-js-3.0-cookbook_8.png" width="104" height="127" /&gt; Author:&lt;/strong&gt; Jorge Ramon&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s inside&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ext JS 3.0 Cookbook is packed with step-by-step recipes for building impressive rich internet applications.&amp;#160; It provides clear instructions for getting the most out of Ext JS, and offers many exercises, techniques and patterns for building particular interface styles and features in Ext JS. Pick what you want and move ahead.&lt;/p&gt;  &lt;p&gt;Native and custom layouts, forms, grids, listviews, treeviews, charts, tab panels, menus, toolbars, and many more components are covered in a multitude of examples. The book also looks at best practices on data storage, application architecture and code organization.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who this book is written for&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Ext JS Cookbook is for Ext JS users who want a book of useful techniques, with explanations, that they can refer to and adapt to their purposes.&amp;#160; Developers who are already familiar with Ext JS will find practical guidance and numerous examples that can be used as a solid foundation to build upon when creating rich internet applications.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More infomation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Ext JS 3.0 Cookbook at Packt Publishing" href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;amp;utm_medium=affiliate&amp;amp;utm_content=authorsite&amp;amp;utm_campaign=mdb_001176" target="_blank"&gt;Ext JS 3.0 Cookbook at Packt Publishing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Ext JS in Action&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 10px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ext-js-in-action" border="0" alt="ext-js-in-action" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/e3d17ff723f8_FA40/ext-js-in-action_6.png" width="104" height="129" /&gt; Author:&lt;/strong&gt; Jesus Garcia &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s inside&lt;/strong&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Ext JS in Action teaches the reader about Ext from the ground up. By following the common design patterns demonstrated in the Ext source and in many commercial applications, the book teaches you to achieve the same results you see in world-class commercial JavaScript applications. &lt;/p&gt;  &lt;p&gt;This book will guide you through the Ext component model and layouts.&amp;#160; It covers Ext utility classes, AJAX, Observable (the Ext events model), DOM helpers and Function Helpers, and illustrates how the use of JavaScript Object Notation (JSON) can allow your application to efficiently communicate over the network to the web server.&amp;#160; Finally, you'll build on this foundation to customize or extend Ext widgets. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who this book is written for&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;This book is for developers that want to learn about Ext from the ground up.&amp;#160; It assumes that you have a solid foundation in JavaScript, but requires no previous exposure to Ext JS.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More infomation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Ext JS in Action Book at Manning Publications" href="http://www.manning.com/garcia/" target="_blank"&gt;Ext JS in Action Book at Manning Publications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Developing with Ext GWT: Enterprise RIA Development&lt;/h4&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 10px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="developing-with-ext-gwt" border="0" alt="developing-with-ext-gwt" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/e3d17ff723f8_FA40/developing-with-ext-gwt_3.png" width="104" height="127" /&gt; &lt;strong&gt;Author:&lt;/strong&gt; Grant Slender &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s inside&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Developing in Ext GWT is a fast–paced, practical guide to quickly learning the tasks necessary in building enterprise–class Rich Internet Applications.&amp;#160; This book takes the reader through setup, the available widgets, and advanced custom widgets and templates, and concludes with a functional sample client–server application in less than 150 pages.&amp;#160; &lt;/p&gt;  &lt;p&gt;Not your typical beginner's guide to programming, this book provides a rapid approach to becoming effective with leading commercial RIA tools and libraries. The book has full coverage of the new Ext GWT 2.0 widget library based on GWT 1.6.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who this book is written for&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The reader is assumed to have a sound knowledge of Java, as well as understanding of the basics of web development.&amp;#160; It also offers some insight to casual developers who want to add that “enterprise–RIA” look to their existing GWT applications.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More infomation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Developing with Ext GWT: Enterprise RIA Development at APress" href="http://www.apress.com/book/view/1430219408" target="_blank"&gt;Developing with Ext GWT: Enterprise RIA Development at APress&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Practical Ext JS Projects with Gears &lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;img style="border-right-width: 0px; margin: 10px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ext-js-projects-with-gears" border="0" alt="ext-js-projects-with-gears" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/e3d17ff723f8_FA40/ext-js-projects-with-gears_3.png" width="104" height="137" /&gt; Author:&lt;/strong&gt; Frank Zammetti &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s inside&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Using a pragmatic approach, in this book you’ll dissect seven full–fledged applications, covering how Ext JS allows you to create these applications with a slick user interface with a minimum of effort.&amp;#160; You will also learn how the other parts of Ext JS aside from the GUI widgets provide many of the capabilities modern applications need, such as Ajax and data mechanisms, and how Gears can be brought in to make the applications more powerful.&amp;#160; &lt;/p&gt;  &lt;p&gt;Among the applications covered are an organizer, a timekeeper, a code cabinet and a game. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who this book is written for&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;This book is written for web application developers, senior project leads, and application architects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More infomation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Practical Ext JS Projects with Gears at APress" href="http://www.apress.com/book/view/1430219246" target="_blank"&gt;Practical Ext JS Projects with Gears at APress&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=ZMcAx5HfWKE:8-JmTiz8FlY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=ZMcAx5HfWKE:8-JmTiz8FlY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=ZMcAx5HfWKE:8-JmTiz8FlY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=ZMcAx5HfWKE:8-JmTiz8FlY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=ZMcAx5HfWKE:8-JmTiz8FlY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=ZMcAx5HfWKE:8-JmTiz8FlY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/ZMcAx5HfWKE" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ksBDIERw4Wb4MhwAmd-LMbGECQ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ksBDIERw4Wb4MhwAmd-LMbGECQ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ksBDIERw4Wb4MhwAmd-LMbGECQ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ksBDIERw4Wb4MhwAmd-LMbGECQ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=taB7vK2cmtY:ZMcAx5HfWKE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=taB7vK2cmtY:ZMcAx5HfWKE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=taB7vK2cmtY:ZMcAx5HfWKE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/taB7vK2cmtY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/taB7vK2cmtY/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/11/ext-js-books-round-up.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=53248fd0-819e-4309-ba7a-e3a48229c65a</guid>
      <pubDate>Mon, 02 Nov 2009 13:09:57 -0800</pubDate>
      <category>ExtJS</category>
      <category>Javascript</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=53248fd0-819e-4309-ba7a-e3a48229c65a</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=53248fd0-819e-4309-ba7a-e3a48229c65a</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/11/ext-js-books-round-up.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=53248fd0-819e-4309-ba7a-e3a48229c65a</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=53248fd0-819e-4309-ba7a-e3a48229c65a</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/ZMcAx5HfWKE/post.aspx</feedburner:origLink></item>
    <item>
      <title>Custom Markers for Your Ext JS Charts</title>
      <description>&lt;p&gt;If you're looking for a quick way to customize your Ext JS charts, one of the things you can do is use images to change the look of a series' data point markers.&amp;#160; Let's put together a simple example that will create a chart similar to the one below.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a051ac380dd_C550/image_3.png" width="290" height="291" /&gt; &lt;/p&gt;  &lt;h4&gt;How to do it&lt;/h4&gt;  &lt;p&gt;First, it's very important to correctly configure your CHART_URL constant.&lt;/p&gt;  &lt;pre class="brush: js;"&gt;Ext.chart.Chart.CHART_URL = 'ext3/resources/charts.swf';&lt;/pre&gt;

&lt;p&gt;Next, let's create data store to hold some dummy records.&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var store = new Ext.data.JsonStore({
    fields:['name', 'games', 'movies','music'],
    data: [
        {name:'Jul 07', games: 245, movies: 300, music:700},
        {name:'Aug 07', games: 240, movies: 350, music:550},
        {name:'Sep 07', games: 355, movies: 400, music:615},
        {name:'Oct 07', games: 375, movies: 420, music:460},
        {name:'Nov 07', games: 490, movies: 450, music:625}
    ]
});&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;And now we can create our line chart.&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var chart = new Ext.chart.LineChart({
    renderTo: Ext.getBody(),
    width: 300,
    height: 300,
    id: 'chart',
    store: store,
    xField: 'name',
    yAxis: new Ext.chart.NumericAxis({
        displayName: 'games',
        labelRenderer: Ext.util.Format.numberRenderer('0,0')
    }),
    tipRenderer: function(chart, record, index, series) {
        if (series.yField == 'games') {
            return Ext.util.Format.number(record.data.games, '0,0') + ' games in ' + record.data.name;
        } if (series.yField == 'music') {
            return Ext.util.Format.number(record.data.music, '0,0') + ' CD\'s in ' + record.data.name;
        }
        else {
            return Ext.util.Format.number(record.data.movies, '0,0') + ' movies in ' + record.data.name;
        }
    },
    extraStyle: {
        padding: 10,
        animationEnabled: true,
        font: {
            name: 'Tahoma',
            color: 0x444444,
            size: 11
        },
        legend: {
            display: 'bottom'
        },
        dataTip: {
            padding: 5,
            border: {
                color: 0x99bbe8,
                size: 1
            },
            background: {
                color: 0xDAE7F6,
                alpha: .9
            },
            font: {
                name: 'Tahoma',
                color: 0x15428B,
                size: 10,
                bold: true
            }
        },
        xAxis: {
            color: 0x69aBc8,
            majorTicks: { color: 0x69aBc8, length: 4 },
            minorTicks: { color: 0x69aBc8, length: 2 },
            majorGridLines: { size: 1, color: 0xeeeeee }
        },
        yAxis: {
            color: 0x69aBc8,
            majorTicks: { color: 0x69aBc8, length: 4 },
            minorTicks: { color: 0x69aBc8, length: 2 },
            majorGridLines: { size: 1, color: 0xdfe8f6 }
        }
    },
    series: [{
        type: 'line',
        displayName: 'Movies',
        yField: 'movies',
        style: {
            color: 0xCCCCCC,
            image: 'img/star_red.png',
            mode: 'stretch'
        }
    }, {
        type: 'line',
        displayName: 'Games',
        yField: 'games',
        style: {
            color: 0xCCCCCC,
            image: 'img/star_green.png',
            mode: 'stretch'
        }
    }, {
        type: 'line',
        displayName: 'Cd\'s',
        yField: 'music',
        style: {
            color: 0xCCCCCC,
            image: 'img/star_blue.png',
            mode: 'stretch'
        }
    }]

});&lt;/pre&gt;

&lt;h4&gt;How it works&lt;/h4&gt;

&lt;p&gt;You can stylize the look of a data series using the &lt;font face="Courier New"&gt;style&lt;/font&gt; object.&amp;#160; In this case, the &lt;font face="Courier New"&gt;image&lt;/font&gt; property defines the image that will be used as data point marker. &lt;/p&gt;

&lt;p&gt;Using &lt;font face="Courier New"&gt;mode:‘stretch’&lt;/font&gt; will resize the image to the dimensions of the data point marker.&amp;#160; And &lt;font face="Courier New"&gt;color&lt;/font&gt; is the color of the lines and markers in the series.&amp;#160; (Not relevant for our markers because we are using images.)&lt;/p&gt;

&lt;p&gt;In future articles I will cover other customization options for the Ext JS charts.&amp;#160; What about you?&amp;#160; Care to share what you’ve done with them?&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Grab the code for the sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page.&amp;#160; &lt;/p&gt;

&lt;h4&gt;Want to learn more?&lt;/h4&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="Ext-JS-Cookbook" border="0" alt="Ext-JS-Cookbook" align="left" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a051ac380dd_C550/Ext-JS-Cookbook_3.jpg" width="84" height="103" /&gt; My Ext JS 3.0 Cookbook has more than a hundred step-by-step recipes that you can use to build your Ext JS applications.&amp;#160; Download a &lt;a title="download sample chapter of Ext JS Cookbook" href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;amp;utm_medium=affiliate&amp;amp;utm_content=authorsite&amp;amp;utm_campaign=mdb_001176" target="_blank"&gt;sample chapter&lt;/a&gt; and see for yourself.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=vJpwGt2Kj9c:eIK5fwCr36U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=vJpwGt2Kj9c:eIK5fwCr36U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=vJpwGt2Kj9c:eIK5fwCr36U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=vJpwGt2Kj9c:eIK5fwCr36U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=vJpwGt2Kj9c:eIK5fwCr36U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=vJpwGt2Kj9c:eIK5fwCr36U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/vJpwGt2Kj9c" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EioDPSLYyPjzjOn9ykuk4-3uczQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EioDPSLYyPjzjOn9ykuk4-3uczQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EioDPSLYyPjzjOn9ykuk4-3uczQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EioDPSLYyPjzjOn9ykuk4-3uczQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=NnxbSwdJItw:vJpwGt2Kj9c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=NnxbSwdJItw:vJpwGt2Kj9c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=NnxbSwdJItw:vJpwGt2Kj9c:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/NnxbSwdJItw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/NnxbSwdJItw/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/10/Custom-Markers-for-Your-Ext-JS-Charts.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=ebaf6661-1c7d-496a-b3d6-f15c93fa9c62</guid>
      <pubDate>Sun, 25 Oct 2009 22:58:00 -0800</pubDate>
      <category>AJAX</category>
      <category>ExtJS</category>
      <category>Javascript</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=ebaf6661-1c7d-496a-b3d6-f15c93fa9c62</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=ebaf6661-1c7d-496a-b3d6-f15c93fa9c62</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/10/Custom-Markers-for-Your-Ext-JS-Charts.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=ebaf6661-1c7d-496a-b3d6-f15c93fa9c62</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=ebaf6661-1c7d-496a-b3d6-f15c93fa9c62</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/vJpwGt2Kj9c/post.aspx</feedburner:origLink></item>
    <item>
      <title>Free GUI Tool for the Microsoft Ajax Minifier</title>
      <description>&lt;p&gt;This tool I wrote is a Windows application that allows you to interact with the &lt;a title="Microsoft Ajax Minifier" href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488" target="_blank"&gt;Microsoft Ajax Minifier&lt;/a&gt; without using the command line or Visual Studio.&amp;#160; With this GUI tool you can do the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;browse to the JavaScript file to be minified &lt;/li&gt;    &lt;li&gt;run the minifier in the background &lt;/li&gt;    &lt;li&gt;enable/disable the minifier’s hypercrunch and analysis options &lt;/li&gt;    &lt;li&gt;open the output folder once the minifier finishes &lt;/li&gt;    &lt;li&gt;view the minifier’s output &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="Free GUI Tool for the Microsoft Ajax Minifier" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/FreeGUIToolTortheMicrosoftAjaxMinifier_A056/image_3.png" width="523" height="500" /&gt; &lt;/p&gt;  &lt;h4&gt;Download&lt;/h4&gt;  &lt;p&gt;&lt;a title="Free GUI tool for the Microsoft Ajax Minifier" href="http://miamicoder.com/file.axd?file=AjaxminGuiSetup.zip"&gt;Download the installer&lt;/a&gt; of the free GUI tool for the Microsoft Ajax Minifier.&lt;/p&gt;  &lt;h4&gt;More information about the Microsoft Ajax Minifier&lt;/h4&gt;  &lt;p&gt;The Microsoft Ajax Minifier reduces the size of a JavaScript file by removing unnecessary content from the JavaScript file. The tool supports two modes: normal crunching and hypercrunching.&lt;/p&gt;  &lt;p&gt;In normal crunching, the tool strips comments, unnecessary whitespace, curly-braces, and semicolons from a JavaScript file.&amp;#160; In hypercrunching mode, the the tool shortens the names of local variables (variables in functions but not global variables) and removes unreachable code.&lt;/p&gt;  &lt;p&gt;For detailed information about the Microsoft Ajax Minifier, check these sources:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Announcing Microsoft Ajax Library (Preview 6) and the Microsoft Ajax Minifier" href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx" target="_blank"&gt;Scott Guthrie’s announcement&lt;/a&gt; of&amp;#160; the Microsoft Ajax Minifier tool &lt;/li&gt;    &lt;li&gt;Stephen Walter’s post, &lt;a title="Using the Microsoft Ajax Minifier" href="http://tinyurl.com/ajaxmin" target="_blank"&gt;Using the Microsoft Ajax Minifier&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Have comments or suggestions?&lt;/h4&gt;  &lt;p&gt;If you have any type of feedback, I’d love to hear from you.&amp;#160; Leave me a comment, or reach me via Twitter or email.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=LTc-UqWR83o:2gsm_KlRUrA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=LTc-UqWR83o:2gsm_KlRUrA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=LTc-UqWR83o:2gsm_KlRUrA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=LTc-UqWR83o:2gsm_KlRUrA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=LTc-UqWR83o:2gsm_KlRUrA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=LTc-UqWR83o:2gsm_KlRUrA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/LTc-UqWR83o" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2tzTKg41q1bx2XIweL8ULV3AAwg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2tzTKg41q1bx2XIweL8ULV3AAwg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2tzTKg41q1bx2XIweL8ULV3AAwg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2tzTKg41q1bx2XIweL8ULV3AAwg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=Pg40NHpo00Y:LTc-UqWR83o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=Pg40NHpo00Y:LTc-UqWR83o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=Pg40NHpo00Y:LTc-UqWR83o:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/Pg40NHpo00Y" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/Pg40NHpo00Y/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/10/Free-GUI-Tool-For-the-Microsoft-Ajax-Minifier.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=45dc0dec-ef56-44ff-98e7-ee05eaafd5f3</guid>
      <pubDate>Sat, 17 Oct 2009 22:46:00 -0800</pubDate>
      <category>.NET</category>
      <category>Javascript</category>
      <category>Tools</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=45dc0dec-ef56-44ff-98e7-ee05eaafd5f3</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=45dc0dec-ef56-44ff-98e7-ee05eaafd5f3</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/10/Free-GUI-Tool-For-the-Microsoft-Ajax-Minifier.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=45dc0dec-ef56-44ff-98e7-ee05eaafd5f3</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=45dc0dec-ef56-44ff-98e7-ee05eaafd5f3</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/LTc-UqWR83o/post.aspx</feedburner:origLink></item>
    <item>
      <title>Displaying an Image Inside an Ext JS GridPanel&amp;rsquo;s Cell (Part 3)</title>
      <description>&lt;p&gt;Are you stuck figuring out how to display an image inside an Ext GridPanel cell?&amp;#160; In this article we will examine how this can be done using a &lt;a href="http://www.extjs.com/deploy/dev/docs/?class=Ext.grid.TemplateColumn" target="_blank"&gt;template column&lt;/a&gt;.&amp;#160; (In &lt;a href="http://www.miamicoder.com/post.aspx?id=d2eff150-679f-458c-80cf-aedb041bda9f"&gt;part 1&lt;/a&gt; and &lt;a href="http://www.miamicoder.com/post.aspx?id=881bc303-965f-41a2-8687-b4eb2c151d03"&gt;part 2&lt;/a&gt; of this series we explored how it can be done using a renderer function.)&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;As in previous articles, the example I will use is a GridPanel that displays movie rentals information.&amp;#160; Along with movie titles and number of rentals, the grid will display rental trends using a small icon, as shown in the following screenshot: &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Ext-template-column" border="0" alt="Ext-template-column" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/DisplayinganImageInsideanExtJSGridPanels_BE33/Ext-template-column_3.png" width="352" height="177" /&gt; &lt;/p&gt;  &lt;h4&gt;How to do it&lt;/h4&gt;  &lt;p&gt;First, we need to define the styles used to insert the trend icons in the gridd’s cells:&lt;/p&gt;  &lt;pre class="brush: js;"&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
   .trend-down 
   {
       background:url(img/trend-down.png) right no-repeat !important;
   }
   .trend-neutral 
   {
       background:url(img/trend-neutral.png) right no-repeat !important;
   }
   .trend-up 
   {
       background:url(img/trend-up.png) right no-repeat !important;
   }
   .padding-img
   {
       width:18px;height:0px;
   }
&amp;lt;/style&amp;gt;&lt;/pre&gt;

&lt;br /&gt;

&lt;p&gt;An ArrayStore will feed the grid a few dummy records: &lt;/p&gt;

&lt;pre class="brush: js;"&gt;var store = new Ext.data.ArrayStore({
    fields: ['title', 'rentals', 'trend'],
    data: [['ACADEMY DINOSAUR', 305, 'up'],
    ['DRAGONFLY STRANGERS', 240, 'neutral'],
    ['FAMILY SWEET', 188, 'down'],
    ['FREAKY POCUS', 205, 'up'],
    ['GABLES METROPOLIS', 265, 'up']]
});&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;As we will use a TemplateColumn, we need an instance of the XTemplate class to provide the formatting for the column’s cells:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var template = new Ext.XTemplate(
   '&amp;lt;span class=&amp;quot;{[this.getTrendClass(values.trend)]}&amp;quot;&amp;gt;{rentals}' + 
   '&amp;lt;img class=&amp;quot;padding-img&amp;quot; src=&amp;quot;' + Ext.BLANK_IMAGE_URL + '&amp;quot;/&amp;gt;&amp;lt;/span&amp;gt;',
   {
        getTrendClass : function(trend) {
            var retValue = '';
            switch (trend) {                
                 case 'down':
                     retValue = 'trend-down';
                     break;
                 case 'neutral':
                     retValue = 'trend-neutral';
                     break;
                 case 'up':
                     retValue = 'trend-up';
                     break;
                 default:
                    retValue = 'trend-neutral';
                     break;
             }
             return retValue;
        }
   }
);  
    
template.compile();&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;Next comes the GridPanel definition: &lt;/p&gt;

&lt;pre class="brush: js;"&gt;var grid = new Ext.grid.GridPanel({
    title: 'Movie rentals this month',
    store: store,
    columns: [
     { id: 'title-col', header: &amp;quot;Title&amp;quot;, width: 275, dataIndex: 'title', sortable: true },
     { header: &amp;quot;Rentals&amp;quot;, width: 75, dataIndex: 'rentals', sortable: true, align: 'right', 
        xtype:'templatecolumn', tpl:template}
],
    autoExpandColumn: 'title-col',
    renderTo: Ext.getBody(),
    width: 350,
    height: 175,
    loadMask: true
});&lt;/pre&gt;

&lt;br /&gt;

&lt;h4&gt;How it works &lt;/h4&gt;

&lt;p&gt;A TemplateColumn is a column definition class that renders a value by processing a record's data using a configured XTemplate.&amp;#160; &lt;/p&gt;

&lt;p&gt;By using the &lt;font face="Courier New"&gt;xtype:’templatecolumn’&lt;/font&gt; and &lt;font face="Courier New"&gt;tpl:template&lt;/font&gt; configuration options on the &lt;font face="Courier New"&gt;rentals&lt;/font&gt; column, we are specifying that the data type of this column is TemplateColumn, and its XTemplate instance is the previously defined &lt;font face="Courier New"&gt;template&lt;/font&gt; object.&lt;/p&gt;

&lt;p&gt;Note that &lt;font face="Courier New"&gt;template&lt;/font&gt; will render the cell’s contents as a &lt;font face="Courier New"&gt;span&lt;/font&gt; element that contains the value of the record’s &lt;font face="Courier New"&gt;rentals&lt;/font&gt; field:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;'&amp;lt;span class=&amp;quot;{[this.getTrendClass(values.trend)]}&amp;quot;&amp;gt;{rentals}' + 
'&amp;lt;img class=&amp;quot;padding-img&amp;quot; src=&amp;quot;' + Ext.BLANK_IMAGE_URL + '&amp;quot;/&amp;gt;&amp;lt;/span&amp;gt;'&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;To understand how the icon that represents the trend value is inserted, observe that inside the template we use the {[ ... ]} tags to call the template’s member function &lt;font face="Courier New"&gt;getTrendClass&lt;/font&gt;:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;getTrendClass : function(trend) {
    var retValue = '';
    switch (trend) {                
         case 'down':
             retValue = 'trend-down';
             break;
         case 'neutral':
             retValue = 'trend-neutral';
             break;
         case 'up':
             retValue = 'trend-up';
             break;
         default:
            retValue = 'trend-neutral';
             break;
     }
     return retValue;
}&lt;/pre&gt;

&lt;br /&gt;

&lt;p&gt;&lt;font face="Courier New"&gt;getTrendClass&lt;/font&gt; changes the style of the &lt;font face="Courier New"&gt;span&lt;/font&gt; element using the css classes defined earlier.&amp;#160; The style simply assigns a background image to the &lt;font face="Courier New"&gt;span&lt;/font&gt; element, and this image is one of the three icons that represent the three trends: neutral, up, and down.&lt;/p&gt;

&lt;p&gt;Also in the template, the transparent image (Ext.BLANK_IMAGE_URL) serves to add some padding between the cell’s&amp;#160; value and the right border of the cell.&amp;#160; This prevents the value from displaying right over the trend icon, which is positioned on the background and right-aligned.&lt;/p&gt;

&lt;h4&gt;What about you?&lt;/h4&gt;

&lt;p&gt;Do you have a favorite approach to accomplish this task?&amp;#160; Share your thoughts in the comments section. :-)&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=BQZVSUZsdFw:VmGOWmX3xyI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=BQZVSUZsdFw:VmGOWmX3xyI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=BQZVSUZsdFw:VmGOWmX3xyI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=BQZVSUZsdFw:VmGOWmX3xyI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=BQZVSUZsdFw:VmGOWmX3xyI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=BQZVSUZsdFw:VmGOWmX3xyI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/BQZVSUZsdFw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0frwnwvWF9AKgj8tY4uZGWk68ow/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0frwnwvWF9AKgj8tY4uZGWk68ow/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0frwnwvWF9AKgj8tY4uZGWk68ow/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0frwnwvWF9AKgj8tY4uZGWk68ow/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=iAR_sbKMAJc:BQZVSUZsdFw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=iAR_sbKMAJc:BQZVSUZsdFw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=iAR_sbKMAJc:BQZVSUZsdFw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/iAR_sbKMAJc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/iAR_sbKMAJc/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/10/How-to-Display-an-Image-Inside-a-GridPanel-Cell-Part-3.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=28ef3cca-46e2-4a7a-97d5-e47724eb00d3</guid>
      <pubDate>Sun, 11 Oct 2009 02:11:41 -0800</pubDate>
      <category>ExtJS</category>
      <category>How-To</category>
      <category>Javascript</category>
      <category>Web Development</category>
      <category>AJAX</category>
      <category>Programming</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=28ef3cca-46e2-4a7a-97d5-e47724eb00d3</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=28ef3cca-46e2-4a7a-97d5-e47724eb00d3</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/10/How-to-Display-an-Image-Inside-a-GridPanel-Cell-Part-3.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=28ef3cca-46e2-4a7a-97d5-e47724eb00d3</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=28ef3cca-46e2-4a7a-97d5-e47724eb00d3</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/BQZVSUZsdFw/post.aspx</feedburner:origLink></item>
    <item>
      <title>Displaying an Image Inside an Ext JS GridPanel&amp;rsquo;s Cell (Part 2)</title>
      <description>&lt;p&gt;This is how you can display an image &lt;strong&gt;and&lt;/strong&gt; a value inside an Ext &lt;strong&gt;GridPanel&lt;/strong&gt; cell using a renderer function.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;As in the &lt;a href="http://www.miamicoder.com/post.aspx?id=d2eff150-679f-458c-80cf-aedb041bda9f"&gt;previous example&lt;/a&gt;, to explain the approach I will use a &lt;strong&gt;GridPanel&lt;/strong&gt; that displays movie rentals information.&amp;#160; Together with movie titles and number of rentals, the grid will display rental trends using a small icon, as shown in the following screenshot: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/d7671e6946bb_12DB9/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/d7671e6946bb_12DB9/image_thumb.png" width="352" height="177" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;How to do it&lt;/h4&gt;  &lt;p&gt;An &lt;strong&gt;ArrayStore&lt;/strong&gt; will provide a few dummy records: &lt;/p&gt;  &lt;pre class="brush: js;"&gt;var store = new Ext.data.ArrayStore({
    fields: ['title', 'rentals', 'trend'],
    data: [['ACADEMY DINOSAUR', 305, 'up'],
    ['DRAGONFLY STRANGERS', 240, 'neutral'],
    ['FAMILY SWEET', 188, 'down'],
    ['FREAKY POCUS', 205, 'up'],
    ['GABLES METROPOLIS', 265, 'up']]
});&lt;/pre&gt;

&lt;p&gt;Next comes the &lt;strong&gt;GridPanel&lt;/strong&gt; definition: &lt;/p&gt;

&lt;pre class="brush: js;"&gt;var grid = new Ext.grid.GridPanel({
    title: 'Movie rentals this month',
    store: store,
    columns: [
     { id: 'title-col', header: &amp;quot;Title&amp;quot;, width: 275, dataIndex: 'title', sortable: true },
     { header: &amp;quot;Rentals&amp;quot;, width: 75, dataIndex: 'rentals', sortable: true, align: 'right', 
        renderer: function(value, metaData, record, rowIndex, colIndex, store) {
             switch (record.data.trend) {
                 case 'down':
                     metaData.css = 'trend-down';
                     break;
                 case 'neutral':
                     metaData.css = 'trend-neutral';
                     break;
                 case 'up':
                     metaData.css = 'trend-up';
                     break;
             }
             return value + String.format('&amp;lt;img class=&amp;quot;padding-img&amp;quot; src=&amp;quot;{0}&amp;quot;/&amp;gt;',Ext.BLANK_IMAGE_URL);     
         }
     }
],
    autoExpandColumn: 'title-col',
    renderTo: Ext.getBody(),
    width: 350,
    height: 175,
    loadMask: true
});&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;How it works &lt;/h4&gt;

&lt;p&gt;In this example we assign a &lt;strong&gt;renderer&lt;/strong&gt; function to the &lt;strong&gt;rentals&lt;/strong&gt; column, and use the &lt;strong&gt;trend&lt;/strong&gt; value to modify the &lt;strong&gt;rentals&lt;/strong&gt; grid cell.&amp;#160; This is possible because the renderer function's arguments include the current &lt;strong&gt;record&lt;/strong&gt; object.&amp;#160; From the &lt;strong&gt;record&lt;/strong&gt;, we can get to the trend value via &lt;strong&gt;record.data.trend&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;How do we display the value and the icon in the same cell?&amp;#160; Well, we add the trend icon to the cell's background by inspecting &lt;strong&gt;record.data.trend&lt;/strong&gt; and modifying the &lt;strong&gt;css&lt;/strong&gt; property of the &lt;strong&gt;metaData&lt;/strong&gt; object: &lt;/p&gt;

&lt;pre class="brush: js;"&gt;switch (record.data.trend) {
 case 'down':
     metaData.css = 'trend-down';
     break;
 case 'neutral':
     metaData.css = 'trend-neutral';
     break;
 case 'up':
     metaData.css = 'trend-up';
     break;
}&lt;/pre&gt;

&lt;p&gt;Here are the styles used: &lt;/p&gt;

&lt;pre class="brush: xml;"&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
   .trend-down 
   {
           background:url(img/trend-down.png) right no-repeat !important;
   }
   .trend-neutral 
   {
           background:url(img/trend-neutral.png) right no-repeat !important;
   }
   .trend-up 
   {
           background:url(img/trend-up.png) right no-repeat !important;
   }
   .padding-img
   {
           width:18px;height:0px;
   }
&amp;lt;/style&amp;gt;&lt;/pre&gt;

&lt;p&gt;As the column and the icon are both right-aligned and the icon is on the background, the cell's value is going to be positioned over the icon.&amp;#160; But we want to display the value to the left of the icon, not over it.&amp;#160; To accomplish this, we use a transparent image (using Ext.BLANK_IMAGE_URL) to add some padding between the value and the right border of the cell.&amp;#160; This makes room for the icon: &lt;/p&gt;

&lt;pre class="brush: js;"&gt;return value + String.format('&amp;lt;img class=&amp;quot;padding-img&amp;quot; src=&amp;quot;{0}&amp;quot;/&amp;gt;',Ext.BLANK_IMAGE_URL);&lt;/pre&gt;

&lt;h4&gt;
  &lt;br /&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=08Khx5kwoFA:w7afnMWhfGM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=08Khx5kwoFA:w7afnMWhfGM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=08Khx5kwoFA:w7afnMWhfGM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=08Khx5kwoFA:w7afnMWhfGM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=08Khx5kwoFA:w7afnMWhfGM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=08Khx5kwoFA:w7afnMWhfGM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/08Khx5kwoFA" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J8wwFEABjXe62De1krYc6mUZFys/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J8wwFEABjXe62De1krYc6mUZFys/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J8wwFEABjXe62De1krYc6mUZFys/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J8wwFEABjXe62De1krYc6mUZFys/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=-2QFRsKx9eA:08Khx5kwoFA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=-2QFRsKx9eA:08Khx5kwoFA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=-2QFRsKx9eA:08Khx5kwoFA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/-2QFRsKx9eA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/-2QFRsKx9eA/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/10/Displaying-an-Image-Inside-an-Ext-JS-GridPanel-Cell-2.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=881bc303-965f-41a2-8687-b4eb2c151d03</guid>
      <pubDate>Sun, 04 Oct 2009 13:43:39 -0800</pubDate>
      <category>How-To</category>
      <category>ExtJS</category>
      <category>AJAX</category>
      <category>Programming</category>
      <category>Web Development</category>
      <category>Javascript</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=881bc303-965f-41a2-8687-b4eb2c151d03</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=881bc303-965f-41a2-8687-b4eb2c151d03</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/10/Displaying-an-Image-Inside-an-Ext-JS-GridPanel-Cell-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=881bc303-965f-41a2-8687-b4eb2c151d03</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=881bc303-965f-41a2-8687-b4eb2c151d03</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/08Khx5kwoFA/post.aspx</feedburner:origLink></item>
    <item>
      <title>How to Display an Image Inside an Ext JS GridPanel&amp;rsquo;s Cell</title>
      <description>&lt;p&gt;A simple approach you can take to displaying an image inside an Ext &lt;strong&gt;GridPanel&lt;/strong&gt;’s cell consists of using a renderer function to modify the cell’s appearance.&amp;#160; &lt;/p&gt;  &lt;p&gt;To explain this approach, I will use a sample &lt;strong&gt;GridPanel&lt;/strong&gt; that displays movie rentals information.&amp;#160; Together with movie titles and number of rentals, the grid will display rental trends using a small icon, as shown in the following screenshot:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/4c9a020f0cdc_10D4B/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/4c9a020f0cdc_10D4B/image_thumb.png" width="352" height="202" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;How to do it&lt;/h4&gt;  &lt;p&gt;First, we need some data to work with.&amp;#160; An &lt;strong&gt;ArrayStore&lt;/strong&gt; with a few dummy records will do the job:&lt;/p&gt;  &lt;pre class="brush: js;"&gt;var store = new Ext.data.ArrayStore({
    fields: ['title', 'rentals', 'trend'],
    data: [['ACADEMY DINOSAUR', 305,'up' ],
    ['DRAGONFLY STRANGERS', 240, 'neutral'],
    ['FAMILY SWEET', 188, 'down'],
    ['FREAKY POCUS', 205, 'up'],
    ['GABLES METROPOLIS',265,'up']]
});&lt;/pre&gt;

&lt;p&gt;Next comes the &lt;strong&gt;GridPanel&lt;/strong&gt; definition:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var grid = new Ext.grid.GridPanel({
    title: 'Movie rentals this month',
    store: store,
    columns: [
     { id: 'title-col', header: &amp;quot;Title&amp;quot;, width: 180, dataIndex: 'title', sortable: true },
     { header: &amp;quot;Rentals&amp;quot;, width: 75, dataIndex: 'rentals', sortable: true, align: 'right' },
     { header: &amp;quot;Trend&amp;quot;, width: 75, resizable: false, dataIndex: 'trend', sortable: true, align: 'center',
         renderer: function(value, metaData, record, rowIndex, colIndex, store) {
             switch (value) {
                 case 'down':   
                     metaData.css = 'trend-down';
                     break;
                 case 'neutral':    
                     metaData.css = 'trend-neutral';
                     break;
                 case 'up':   
                     metaData.css = 'trend-up';
                     break;
             }
             return '';     // Return an empty string so only the cell's background is visible
         }
     }
    ],
    autoExpandColumn: 'title-col',
    renderTo: Ext.getBody(),
    width: 350,
    height: 200,
    loadMask: true
});&lt;/pre&gt;

&lt;h4&gt;How it works&lt;/h4&gt;

&lt;p&gt;The insteresting part in the above code is the trend column's &lt;strong&gt;renderer&lt;/strong&gt;.&amp;#160; A renderer function is an interceptor method that can change the grid cell before it is rendered.&lt;/p&gt;

&lt;p&gt;Inside the renderer, we add the trend image by inspecting the cell's value and modifying the &lt;strong&gt;css&lt;/strong&gt; property of the &lt;strong&gt;metaData&lt;/strong&gt; object:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;renderer: function(value, metaData, record, rowIndex, colIndex, store) {
     switch (value) {
         case 'down':   
             metaData.css = 'trend-down';
             break;
         case 'neutral':    
             metaData.css = 'trend-neutral';
             break;
         case 'up':   
             metaData.css = 'trend-up';
             break;
     }
     return '';     // Return an empty string so only the cell's background is visible
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The styles assigned to &lt;strong&gt;metaData.css&lt;/strong&gt; simply change the cell's background to reflect the trend.&amp;#160; Here are the styles used:&lt;/p&gt;

&lt;pre class="brush: xml;"&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
   .trend-down 
   {
           background:url(img/trend-down.png) 20px no-repeat !important;
   }
   .trend-neutral 
   {
           background:url(img/trend-neutral.png) 20px no-repeat !important;
   }
   .trend-up 
   {
           background:url(img/trend-up.png) 20px no-repeat !important;
   }
&amp;lt;/style&amp;gt;&lt;/pre&gt;

&lt;p&gt;The &lt;strong&gt;metaData&lt;/strong&gt; object has another property, &lt;strong&gt;metaData.attr&lt;/strong&gt;, that you can use to apply attributes to the cell's data container element, for example:&lt;em&gt; &lt;em&gt;metaData.attr&lt;/em&gt; = 'style=&amp;quot;font-weight:bold&amp;quot;;'&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;You can create a more complex logic based on the renderer function's other arguments: &lt;strong&gt;record&lt;/strong&gt;, &lt;strong&gt;rowIndex&lt;/strong&gt;, &lt;strong&gt;colIndex&lt;/strong&gt; and &lt;strong&gt;store&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=wRj4W9GcUIY:2YvG1WcKieI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=wRj4W9GcUIY:2YvG1WcKieI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=wRj4W9GcUIY:2YvG1WcKieI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=wRj4W9GcUIY:2YvG1WcKieI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=wRj4W9GcUIY:2YvG1WcKieI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=wRj4W9GcUIY:2YvG1WcKieI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/wRj4W9GcUIY" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2h--F9v_bxoM9bpDJpAeQHUh458/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2h--F9v_bxoM9bpDJpAeQHUh458/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2h--F9v_bxoM9bpDJpAeQHUh458/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2h--F9v_bxoM9bpDJpAeQHUh458/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=XoGgTDpM4Ts:wRj4W9GcUIY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=XoGgTDpM4Ts:wRj4W9GcUIY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=XoGgTDpM4Ts:wRj4W9GcUIY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/XoGgTDpM4Ts" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/XoGgTDpM4Ts/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/09/How-to-Display-an-Image-Inside-an-Ext-JS-GridPanel.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=d2eff150-679f-458c-80cf-aedb041bda9f</guid>
      <pubDate>Fri, 25 Sep 2009 21:17:00 -0800</pubDate>
      <category>ExtJS</category>
      <category>Javascript</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=d2eff150-679f-458c-80cf-aedb041bda9f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=d2eff150-679f-458c-80cf-aedb041bda9f</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/09/How-to-Display-an-Image-Inside-an-Ext-JS-GridPanel.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=d2eff150-679f-458c-80cf-aedb041bda9f</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=d2eff150-679f-458c-80cf-aedb041bda9f</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/wRj4W9GcUIY/post.aspx</feedburner:origLink></item>
    <item>
      <title>Announcing the Ext JS 3.0 Cookbook</title>
      <description>&lt;p&gt;
        &lt;a href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;utm_medium=affiliate&amp;utm_content=authorsite&amp;utm_campaign=mdb_001176"
            target="_blank"&gt;&lt;img style="margin: 0px 15px 10px 0px; display: inline" align="left" src="http://www.miamicoder.com/image.axd?picture=Ext-JS-Cookbook.jpg"
            width="195" height="240" /&gt;&lt;/a&gt;I’m excited to announce the &lt;a href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;utm_medium=affiliate&amp;utm_content=authorsite&amp;utm_campaign=mdb_001176"
                target="_blank"&gt;Ext JS 3.0 Cookbook&lt;/a&gt;, a book I wrote for Packt Publishing
        over the last several months.
    &lt;/p&gt;
    &lt;p&gt;
        &lt;a href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;utm_medium=affiliate&amp;utm_content=authorsite&amp;utm_campaign=mdb_001176"
            target="_blank"&gt;Ext JS 3.0 Cookbook&lt;/a&gt; is packed with step-by-step recipes
        for building rich internet applications using the Ext JS JavaScript library. Each
        recipe is a carefully organized sequence of instructions to complete a task as efficiently
        as possible.
    &lt;/p&gt;
    &lt;p&gt;
        The Ext JS 3.0 Cookbook is for developers who want a book of useful techniques,
        with explanations, that they can refer to and adapt to their purposes.
    &lt;/p&gt;
    &lt;p&gt;
        Developers who are already familiar with Ext JS will find practical guidance and
        numerous examples covering most of the library's features and components, that can
        be used as a solid foundation to build upon when creating rich internet applications.
    &lt;/p&gt;
    &lt;h4&gt;
        What you will learn from the Ext JS 3.0 Cookbook&lt;/h4&gt;
    &lt;p&gt;
        Some of the subjects covered by the book are the following:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Work with different browsers, platforms, and the DOM, as well as determine and understand
            the different Ext JS data types &lt;/li&gt;
        &lt;li&gt;Create your own custom data types the Ext JS way &lt;/li&gt;
        &lt;li&gt;Build great-looking and friendly forms, use client and server-side field validation,
            form loading, submission, field customization, and layout techniques &lt;/li&gt;
        &lt;li&gt;Explore the different layouts provided by the Ext JS library as well as create your
            own, and understand their common uses &lt;/li&gt;
        &lt;li&gt;Display, edit, and group tabular data generated by the server using the grid component,
            the new RowEditor Class, and the new lightweight ListView component &lt;/li&gt;
        &lt;li&gt;Explore multiple ways of displaying master-details relationships &lt;/li&gt;
        &lt;li&gt;Visualize information using charts &lt;/li&gt;
        &lt;li&gt;Use patterns to build a solid and flexible application architecture, such as auto-saving
            form elements, component state management and code modules &lt;/li&gt;
        &lt;li&gt;Explore the advantages and efficiency tradeoffs of different widgets &lt;/li&gt;
        &lt;li&gt;Build your own custom components on top of the Ext framework and enhance the custom
            components created by the Ext JS users' community &lt;/li&gt;
    &lt;/ul&gt;
    &lt;h4&gt;
        How to obtain the Ext JS 3.0 Cookbook&lt;/h4&gt;
    &lt;p&gt;
        You can order the book by visiting the &lt;a href="http://www.packtpub.com/ext-js-3-0-cookbook/mid/231009qwylj4?utm_source=miamicoder.com&amp;utm_medium=affiliate&amp;utm_content=authorsite&amp;utm_campaign=mdb_001176"
            target="_blank"&gt;Ext JS 3.0 Cookbook page&lt;/a&gt; at Packt Publishing.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=Rjl3tTgGdhw:tQx-b9EsMhQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=Rjl3tTgGdhw:tQx-b9EsMhQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=Rjl3tTgGdhw:tQx-b9EsMhQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=Rjl3tTgGdhw:tQx-b9EsMhQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=Rjl3tTgGdhw:tQx-b9EsMhQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=Rjl3tTgGdhw:tQx-b9EsMhQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/Rjl3tTgGdhw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SPhzxU5sOy5sUg0iZIUNoxetUvY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SPhzxU5sOy5sUg0iZIUNoxetUvY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SPhzxU5sOy5sUg0iZIUNoxetUvY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SPhzxU5sOy5sUg0iZIUNoxetUvY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=8HyF8YFgi-o:Rjl3tTgGdhw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=8HyF8YFgi-o:Rjl3tTgGdhw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=8HyF8YFgi-o:Rjl3tTgGdhw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/8HyF8YFgi-o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/8HyF8YFgi-o/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/08/Announcing-the-Ext-JS-30-Cookbook.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=9abb71e2-356f-42c2-b76c-3a34b7532e55</guid>
      <pubDate>Fri, 28 Aug 2009 22:23:00 -0800</pubDate>
      <category>ExtJS</category>
      <category>How-To</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=9abb71e2-356f-42c2-b76c-3a34b7532e55</pingback:target>
      <slash:comments>13</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=9abb71e2-356f-42c2-b76c-3a34b7532e55</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/08/Announcing-the-Ext-JS-30-Cookbook.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=9abb71e2-356f-42c2-b76c-3a34b7532e55</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=9abb71e2-356f-42c2-b76c-3a34b7532e55</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/Rjl3tTgGdhw/post.aspx</feedburner:origLink></item>
    <item>
      <title>Ext JS Layouts: Messenger Window, Part 2</title>
      <description>&lt;p&gt;In this article I will enhance the Ext JS layout I started building in &lt;a title="Ext JS Layouts: Messenger Window, Part 1" href="http://miamicoder.com/post/2009/07/Ext-JS-Layouts-Messenger-Window2c-Part-1.aspx" target="_blank"&gt;Ext JS Layouts: Messenger Window, Part 1&lt;/a&gt;.&amp;#160; The layout is a messenger-like window that shows the status of the user, displays the user’s contacts on a treeview, and provides menus for changing status, sharing quick messages and navigating to the user’s profile editor or contact card.&lt;/p&gt;  &lt;p&gt;Be mindful that I’m not aiming for a full-fledged instant messenger implementation.&amp;#160; I’m rather trying to illustrate the different steps involved in the creation of a UI with Ext JS.&lt;/p&gt;  &lt;p&gt;My goal for this iteration is to augment the window I built with the following visual features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Edit favorites&lt;/em&gt; and a &lt;em&gt;Change favorites layout&lt;/em&gt; menus that activate with a right-click on the &lt;em&gt;Favorites&lt;/em&gt; node of the &lt;em&gt;Contacts&lt;/em&gt; treeview &lt;/li&gt;    &lt;li&gt;&lt;em&gt;Send instant message&lt;/em&gt;, &lt;em&gt;Send email message&lt;/em&gt; and &lt;em&gt;Add to favorites&lt;/em&gt; menus that activate with a right-click on any of the displayed contacts &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is how the finished window will look like:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ExtJS layout" border="0" alt="ExtJS layout" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/ExtJSLayoutsMessengerWindowPart2_13515/image_19.png" width="268" height="287" /&gt;&amp;#160; &lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Ext JS window" border="0" alt="Ext JS window" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/ExtJSLayoutsMessengerWindowPart2_13515/image_22.png" width="268" height="287" /&gt; &lt;/p&gt;  &lt;h4&gt;Using the Ext.Action Class to implement menu handlers&lt;/h4&gt;  &lt;p&gt;To implement the &lt;em&gt;Edit favorites&lt;/em&gt; and &lt;em&gt;Change favorites&lt;/em&gt; functionality, I will use instances of &lt;em&gt;Ext.Action.&lt;/em&gt; I will use the &lt;em&gt;text&lt;/em&gt; and &lt;em&gt;handler&lt;/em&gt; comfiguration options to specify the menu item’s text and the handler function:&lt;/p&gt;  &lt;pre class="brush: js;"&gt;var editFavAction = new Ext.Action({
    text: 'Edit favorites',
    handler: function() {
        Ext.Msg.alert('Action executed', 'Edit favorites...');
    }
});

var changeFavAction = new Ext.Action({
    text: 'Change favorites layout',
    handler: function() {
        Ext.Msg.alert('Action executed', 'Change favorites layout...');
    }
});

var favMenu = new Ext.menu.Menu({
    items: [editFavAction, changeFavAction]
});&lt;/pre&gt;

&lt;p&gt;The &lt;em&gt;favMenu&lt;/em&gt; menu looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ext js tutorial favorites menu" border="0" alt="ext js tutorial favorites menu" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/ExtJSLayoutsMessengerWindowPart2_13515/image_8.png" width="175" height="58" /&gt; &lt;/p&gt;

&lt;p&gt;In the same fashion, &lt;em&gt;Action&lt;/em&gt; instances will handle the &lt;em&gt;Send instant message&lt;/em&gt;, &lt;em&gt;Send email message&lt;/em&gt; and &lt;em&gt;Add to favorites&lt;/em&gt; features:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var sendImAction = new Ext.Action({
    text: 'Send instant message',
    handler: function() {
        Ext.Msg.alert('Action executed', 'Send instant message...');
    }
});

var sendMailAction = new Ext.Action({
    text: 'Send email message',
    handler: function() {
        Ext.Msg.alert('Action executed', 'Send email message...');
    }
});

var addToFavesAction = new Ext.Action({
    text: 'Add to favorites',
    handler: function() {
        Ext.Msg.alert('Action executed', 'Add to favorites...');
    }
});

var contactMenu = new Ext.menu.Menu({
    items: [sendImAction, sendMailAction, '-', addToFavesAction]
});&lt;/pre&gt;

&lt;p&gt;This is the finished &lt;em&gt;contactMenu&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="extjs tutorial contact menu" border="0" alt="extjs tutorial contact menu" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/ExtJSLayoutsMessengerWindowPart2_13515/image_7.png" width="167" height="90" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Action &lt;/em&gt;instances allow for sharing pieces of functionality among different components.&amp;#160; They are not strictly needed in this case, but could be beneficial in the future, if you wanted to, for example, add a global menu to the window, that would perform the same functionality as the context menus:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;var globalMenu = new Ext.menu.Menu({
    items: [editFavAction, changeFavAction,'-',
    sendImAction, sendMailAction,'-', addToFavesAction]
});&lt;/pre&gt;

&lt;h4&gt;Creating a context menu for the Ext.tree.TreePanel instance&lt;/h4&gt;

&lt;p&gt;I can use the tree panel’s &lt;em&gt;contextmenu&lt;/em&gt; event to show either the &lt;em&gt;favorite&lt;/em&gt; menu or the &lt;em&gt;contact&lt;/em&gt; menu.&amp;#160; To decide what menu will be shown, I simply check the selected node’s id:&lt;/p&gt;

&lt;pre class="brush: js;"&gt;listeners: {
    contextmenu: function(node, e) {
        node.select();
        var contextMenu;
        if (node.id == 'favorites') {
            contextMenu = favMenu;
        } else if (node.id != 'available' &amp;amp;&amp;amp; node.id != 'offline') {
            contextMenu = contactMenu;
        }
	if (contextMenu) {
            contextMenu.contextNode = node;
            contextMenu.showAt(e.getXY());
	}
    }
}&lt;/pre&gt;

&lt;p&gt;Notice above how both menus remain inactive when the selected node is either the &lt;em&gt;Available&lt;/em&gt; or &lt;em&gt;Offline&lt;/em&gt; branch.&lt;/p&gt;

&lt;h4&gt;Next steps&lt;/h4&gt;

&lt;p&gt;With the menus in place, I now have a pretty decent &lt;em&gt;Contacts&lt;/em&gt; window.&amp;#160; Next step: the &lt;em&gt;Chat&lt;/em&gt; window.&amp;#160; &lt;/p&gt;

&lt;p&gt;Stay tuned!&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the full sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=uCCnULTVz04:w5_go-u86qY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=uCCnULTVz04:w5_go-u86qY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=uCCnULTVz04:w5_go-u86qY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=uCCnULTVz04:w5_go-u86qY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=uCCnULTVz04:w5_go-u86qY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=uCCnULTVz04:w5_go-u86qY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/uCCnULTVz04" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hYzOM0qJJz7-P7XU2Ly0VfcH0B0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hYzOM0qJJz7-P7XU2Ly0VfcH0B0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hYzOM0qJJz7-P7XU2Ly0VfcH0B0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hYzOM0qJJz7-P7XU2Ly0VfcH0B0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=CJaOcTr4kEA:uCCnULTVz04:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=CJaOcTr4kEA:uCCnULTVz04:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=CJaOcTr4kEA:uCCnULTVz04:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/CJaOcTr4kEA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/CJaOcTr4kEA/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/08/Ext-JS-Layouts-Messenger-Window2c-Part-2.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=60bb13e4-1623-41ba-946e-34bebf94f31b</guid>
      <pubDate>Tue, 04 Aug 2009 19:48:30 -0800</pubDate>
      <category>How-To</category>
      <category>ExtJS</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=60bb13e4-1623-41ba-946e-34bebf94f31b</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=60bb13e4-1623-41ba-946e-34bebf94f31b</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/08/Ext-JS-Layouts-Messenger-Window2c-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=60bb13e4-1623-41ba-946e-34bebf94f31b</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=60bb13e4-1623-41ba-946e-34bebf94f31b</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/uCCnULTVz04/post.aspx</feedburner:origLink></item>
    <item>
      <title>Ext JS Layouts: Messenger Window, Part 1</title>
      <description>&lt;p&gt;Today I start a series of posts dedicated to Ext JS layouts.&amp;#160; I will initiate this series creating a messenger-like interface that will have an area for displaying contacts and their statuses, and an area for displaying a conversation.&amp;#160; The goal is not to implement a messenger system, but rather to walk through the steps required for building a user interface, and end up with some code that you can use as a learning tool.&lt;/p&gt;  &lt;p&gt;In this post I will focus on the contacts area of my messenger-like interface. I will use a window as the container.&amp;#160; Inside this window I will place a number of controls that will satisfy these requirements:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Display the name, avatar and status of the current user &lt;/li&gt;    &lt;li&gt;Provide the user with a means to change her current status, selecting from &lt;em&gt;available&lt;/em&gt;, &lt;em&gt;busy&lt;/em&gt;, &lt;em&gt;away&lt;/em&gt; or &lt;em&gt;appear offline&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;Provide the user with a means to share a quick message and show the music she’s listening to &lt;/li&gt;    &lt;li&gt;Provide the user with a means to navigate to her profile, contact card, or space &lt;/li&gt;    &lt;li&gt;Display a the user’s contacts, organized by &lt;em&gt;favorites&lt;/em&gt;, &lt;em&gt;available&lt;/em&gt; and &lt;em&gt;offline&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In future posts I will enhance and refine this interface.&amp;#160; By the end of this post, I will have a window that looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Ext JS tutorial" border="0" alt="Ext JS tutorial" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/image_3.png" width="266" height="287" /&gt; &lt;/p&gt;  &lt;p&gt;Looks familiar? :-)&lt;/p&gt;  &lt;p&gt;All right. Let’s get started.&lt;/p&gt;  &lt;h4&gt;The messenger window&lt;/h4&gt;  &lt;p&gt;I already decided that my container will be a window.&amp;#160; All I need for the moment is a title and the dimensions:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger'
});&lt;/pre&gt;

&lt;p&gt;And this is how it looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-4_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="messenger-4" border="0" alt="messenger-4" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-4_thumb.png" width="214" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;Display the name, avatar and status of the current user&lt;/h4&gt;

&lt;p&gt;I will use the window’s toolbar to display the name and avatar of the user.&amp;#160; First, I will create the toolbar and use the new button group component to layout the toolbar items in two columns, one for the avatar and one for the user’s name:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger',
    tbar: [{
        xtype: 'buttongroup',
        columns: 2
    }]
});&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The avatar and user name go in as toolbar buttons.&amp;#160; I’m making them buttons because I want to allow the user to click on them and perform some tasks. This is the window now:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger',
    tbar: [{
        xtype: 'buttongroup',
        columns: 2,
        items: [{ xtype: 'button', scale: 'large', iconCls: 'icon-user', rowspan: 2 },
            { xtype: 'splitbutton', text: 'Jorge (available)' }]
        }]
});&lt;/pre&gt;

&lt;p&gt;It’s starting to look good:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-5_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="messenger-5" border="0" alt="messenger-5" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-5_thumb.png" width="251" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Provide the user with a means to change her current status&lt;/h4&gt;

&lt;p&gt;To allow for status changes, I will add a menu to the &lt;em&gt;username&lt;/em&gt; button.&amp;#160; Here’s the code:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger',
    tbar: [{
        xtype: 'buttongroup',
        columns: 2,
        items: [{ xtype: 'button', scale: 'large', iconCls: 'icon-user', rowspan: 2 },
            { xtype: 'splitbutton', text: 'Jorge (available)',
                menu: [{ text: 'Available', iconCls: 'ico-sts-available' },
                        { text: 'Busy', iconCls: 'ico-sts-busy' },
                        { text: 'Away', iconCls: 'ico-sts-away' },
                        { text: 'Appear Offline', iconCls: 'ico-sts-offline'}]
        }]
    }]
});&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;And this is how it looks:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-6_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="messenger-6" border="0" alt="messenger-6" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-6_thumb.png" width="251" height="286" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Provide the user with a means to share a quick message and show the music she’s listening to &lt;/h4&gt;

&lt;p&gt;For this, I will use a split button, placed immediately below the &lt;em&gt;username&lt;/em&gt; button:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger',
    tbar: [{
        xtype: 'buttongroup',
        columns: 2,
        items: [{ xtype: 'button', scale: 'large', iconCls: 'icon-user', rowspan: 2 },
            { xtype: 'splitbutton', text: 'Jorge (available)',
                menu: [{ text: 'Available', iconCls: 'ico-sts-available' },
                        { text: 'Busy', iconCls: 'ico-sts-busy' },
                        { text: 'Away', iconCls: 'ico-sts-away' },
                        { text: 'Appear Offline', iconCls: 'ico-sts-offline'}]
            },{ xtype: 'splitbutton', text: 'Share a quick message',
                menu: [{ text: 'Show what I am listening to'}]
         }]
    }]
});&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-7_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="messenger-7" border="0" alt="messenger-7" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-7_thumb.png" width="249" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Provide the user with a means to navigate to her profile, contact card, or space &lt;/h4&gt;

&lt;p&gt;I will add this feature in the form of a menu attached to the avatar button:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var wnd = new Ext.Window({
    width: 300,
    height: 450,
    layout:'fit',
    title: 'Instant Messenger',
    tbar: [{
        xtype: 'buttongroup',
        columns: 2,
        items: [{ xtype: 'button', scale: 'large', iconCls: 'icon-user', rowspan: 2,
        menu: [{ text: 'Show profile' }, { text: 'View contact card' },
               { text: 'Go to your space'}]
            },{ xtype: 'splitbutton', text: 'Jorge (available)',
                menu: [{ text: 'Available', iconCls: 'ico-sts-available' },
                        { text: 'Busy', iconCls: 'ico-sts-busy' },
                        { text: 'Away', iconCls: 'ico-sts-away' },
                        { text: 'Appear Offline', iconCls: 'ico-sts-offline'}]
            },{ xtype: 'splitbutton', text: 'Share a quick message',
                menu: [{ text: 'Show what I am listening to'}]
         }]
    }]
});&lt;/pre&gt;

&lt;p&gt;This is how the menu looks:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-8_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="messenger-8" border="0" alt="messenger-8" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/messenger-8_thumb.png" width="213" height="229" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;Display a the user’s contacts, organized by &lt;em&gt;favorites&lt;/em&gt;, &lt;em&gt;available&lt;/em&gt; and &lt;em&gt;offline&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;The contacts will be shown with a treview.&amp;#160; I will create an invisible root node and three branch nodes named &lt;em&gt;Favorites&lt;/em&gt;, &lt;em&gt;Available&lt;/em&gt; and &lt;em&gt;Offline&lt;/em&gt;.&amp;#160; The user’s contacts will be leaf nodes under these branches.&lt;/p&gt;

&lt;p&gt;First, I add the tree to the window:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;items: [{ xtype: 'treepanel',
    id: 'contacts-tree',
    border: false,
    useArrows: true,
    autoScroll: true,
    animate: true,
    containerScroll: true,
    bodyCssClass: 'tree-body',
    dataUrl: 'messenger.aspx',
    requestMethod: 'get',
    rootVisible: false,
    root: {
        nodeType: 'async',
        text: 'My Reporting Project',
        draggable: false,
        id: 'root-node'
}}]&lt;/pre&gt;

&lt;p&gt;Then, below the window definition, I add the &lt;em&gt;favorites&lt;/em&gt;, &lt;em&gt;available&lt;/em&gt; and &lt;em&gt;offline&lt;/em&gt; branch nodes, as well as a few dummy contacts.&amp;#160; I use the &lt;em&gt;afterrender&lt;/em&gt; event to acquire a reference to the root node and then add child nodes to it:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var tree = Ext.getCmp('contacts-tree');
tree.on('afterrender', function(loader, node) {
    var root = tree.getRootNode();
    var node = root.appendChild({ id: 'favorites', text: 'Favorites', expanded: true, iconCls: 'ico-fav' });
    node.appendChild({ text: 'Susie', leaf: true, iconCls: 'ico-sts-available' });
    node.appendChild({ text: 'Lara', leaf: true, iconCls: 'ico-sts-away' });

    node = root.appendChild({ text: 'Available', expanded: true, iconCls: 'ico-grp-available' });
    node.appendChild({ text: 'Jonh', leaf: true, iconCls: 'ico-sts-busy' });
    node.appendChild({ text: 'Lara', leaf: true, iconCls: 'ico-sts-away' });
    node.appendChild({ text: 'Susie', leaf: true, iconCls: 'ico-sts-available' });

    node = root.appendChild({ text: 'Offline', expanded: true, iconCls: 'ico-grp-offline' });

})&lt;/pre&gt;

&lt;p&gt;And the window looks just the way I had planned:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Ext JS window" border="0" alt="Ext JS window" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/5fbb2464dc86_12EB4/image_6.png" width="266" height="287" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This does it for now.&amp;#160; In the next post of this series I will continue adding features to this &lt;em&gt;contacts&lt;/em&gt; window.&lt;/p&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the full sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=RhrUzD8QvNw:u8pOsSL7UnQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=RhrUzD8QvNw:u8pOsSL7UnQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=RhrUzD8QvNw:u8pOsSL7UnQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=RhrUzD8QvNw:u8pOsSL7UnQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=RhrUzD8QvNw:u8pOsSL7UnQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=RhrUzD8QvNw:u8pOsSL7UnQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/RhrUzD8QvNw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xwig5YLfP-shk5NOnLRb3RqUcQw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xwig5YLfP-shk5NOnLRb3RqUcQw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xwig5YLfP-shk5NOnLRb3RqUcQw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xwig5YLfP-shk5NOnLRb3RqUcQw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=uzuQQs2lZxE:RhrUzD8QvNw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=uzuQQs2lZxE:RhrUzD8QvNw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=uzuQQs2lZxE:RhrUzD8QvNw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/uzuQQs2lZxE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/uzuQQs2lZxE/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/07/Ext-JS-Layouts-Messenger-Window2c-Part-1.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=173137d4-f990-4bd5-bc27-0b57d05f4928</guid>
      <pubDate>Sat, 18 Jul 2009 00:18:00 -0800</pubDate>
      <category>ExtJS</category>
      <category>How-To</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=173137d4-f990-4bd5-bc27-0b57d05f4928</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=173137d4-f990-4bd5-bc27-0b57d05f4928</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/07/Ext-JS-Layouts-Messenger-Window2c-Part-1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=173137d4-f990-4bd5-bc27-0b57d05f4928</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=173137d4-f990-4bd5-bc27-0b57d05f4928</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/RhrUzD8QvNw/post.aspx</feedburner:origLink></item>
    <item>
      <title>Debugging Your BlackBerry Application&amp;rsquo;s Server Code with Visual Studio</title>
      <description>&lt;p&gt;This is how you debug the .NET server code that handles your BlackBerry application’s requests. You can set breakpoints in the server page or module and have them hit when the BlackBerry simulator makes a request to the server. The steps below use my &lt;a href="http://www.miamicoder.com/post/2008/07/End-To-End-BlackBerry-Application-(Part-6).aspx"&gt;end-to-end BlackBerry application&lt;/a&gt; as an example.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the solution with Visual Studio and set the web application, KowledgeBase.Web.UI in this case, as the startup project.      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/startup-project_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="startup-project" border="0" alt="startup-project" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/startup-project_thumb_2.png" width="119" height="242" /&gt;&lt;/a&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Open the web project’s properties, Web tab. Set the handler (BBHandler.ashx) as the start page.      &lt;br /&gt;      &lt;br /&gt;      &lt;table border="0" cellspacing="0" cellpadding="2" width="500"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-page1_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="start-page1" border="0" alt="start-page1" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-page1_thumb_3.png" width="242" height="84" /&gt;&lt;/a&gt; &lt;/td&gt;            &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-page2_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="start-page2" border="0" alt="start-page2" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-page2_thumb_1.png" width="242" height="189" /&gt;&lt;/a&gt; &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Set breakpoints in the handler’s code and start the debugger      &lt;br /&gt;      &lt;br /&gt;      &lt;table border="0" cellspacing="0" cellpadding="2" width="500"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/set-breakpoint_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="set-breakpoint" border="0" alt="set-breakpoint" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/set-breakpoint_thumb_1.png" width="242" height="181" /&gt;&lt;/a&gt; &lt;/td&gt;            &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-debugging_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="start-debugging" border="0" alt="start-debugging" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/start-debugging_thumb_1.png" width="242" height="119" /&gt;&lt;/a&gt; &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Browse to the handler page. See how the breakpoint is hit. Press F5 to go past the breakpoints and allow the ProcessRequest function to return. Now the debugger is attached and you can move on to the BlackBerry project.      &lt;br /&gt;      &lt;br /&gt;      &lt;table border="0" cellspacing="0" cellpadding="2" width="500"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/browse-to-handler_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="browse-to-handler" border="0" alt="browse-to-handler" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/browse-to-handler_thumb_1.png" width="242" height="56" /&gt;&lt;/a&gt; &lt;/td&gt;            &lt;td valign="top" width="250"&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/at-breakpoint_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="at-breakpoint" border="0" alt="at-breakpoint" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/at-breakpoint_thumb_1.png" width="242" height="166" /&gt;&lt;/a&gt; &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Start the BlackBerry MDS simulator.      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/mds-sim_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mds-sim" border="0" alt="mds-sim" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/mds-sim_thumb_1.png" width="242" height="213" /&gt;&lt;/a&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Start debugging your BlackBerry project in your favorite IDE. Make sure the BlackBerry application is pointing to your server project's URL. You can grab this URL from your browser's address bar, since VS pointed the browser to it.      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/bb-options_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bb-options" border="0" alt="bb-options" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/2a9ea83e4373_148A6/bb-options_thumb.png" width="242" height="182" /&gt;&lt;/a&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Now you can exercise the functionality that talks to the server. You should be able to step through the server code once you hit the first breakpoint in it. &lt;/li&gt; &lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=1bKIEy_wAaA:jpNP5c0nzzE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=1bKIEy_wAaA:jpNP5c0nzzE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=1bKIEy_wAaA:jpNP5c0nzzE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=1bKIEy_wAaA:jpNP5c0nzzE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=1bKIEy_wAaA:jpNP5c0nzzE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=1bKIEy_wAaA:jpNP5c0nzzE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/1bKIEy_wAaA" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1izZcaaWhG_aEsVwcWzQx3tJ6c4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1izZcaaWhG_aEsVwcWzQx3tJ6c4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1izZcaaWhG_aEsVwcWzQx3tJ6c4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1izZcaaWhG_aEsVwcWzQx3tJ6c4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=bCwXntALveM:1bKIEy_wAaA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=bCwXntALveM:1bKIEy_wAaA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=bCwXntALveM:1bKIEy_wAaA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/bCwXntALveM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/bCwXntALveM/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/06/Debugging-Your-BlackBerry-Applicationrsquo3bs-Server-Code-with-Visual-Studio.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=e9400ff1-3ce5-4fcc-8dd7-f624c0329368</guid>
      <pubDate>Mon, 01 Jun 2009 18:17:00 -0800</pubDate>
      <category>Asp.Net</category>
      <category>BlackBerry</category>
      <category>How-To</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=e9400ff1-3ce5-4fcc-8dd7-f624c0329368</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=e9400ff1-3ce5-4fcc-8dd7-f624c0329368</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/06/Debugging-Your-BlackBerry-Applicationrsquo3bs-Server-Code-with-Visual-Studio.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=e9400ff1-3ce5-4fcc-8dd7-f624c0329368</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=e9400ff1-3ce5-4fcc-8dd7-f624c0329368</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/1bKIEy_wAaA/post.aspx</feedburner:origLink></item>
    <item>
      <title>Why Prices at the Supermarket Are Not Dropping. Four Reasons to Be Cynical</title>
      <description>&lt;p&gt;A post on the Consumer Reports &lt;a href="http://blogs.consumerreports.org/money/2009/03/steamed-over-sticky-pricing.html"&gt;Money &amp;amp; Shopping Blog&lt;/a&gt; focuses on the fact that after the economic slowdown, while commodities costs sunk, prices at the supermarket and the pump did not drop as quickly, and prices of some goods actually kept rising.&lt;/p&gt;  &lt;p&gt;According to different experts, there are at least four arguments companies use to justify their reluctance to drop prices:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fear of a price war. &lt;/strong&gt;Rather than production costs, prices are dictated by what the competition charges. Price wars ensue when competitors lower their prices. And the fear of tumbling profits because a price war makes stores keep their prices unchanged.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Manufacturers do not want to disappoint you. &lt;/strong&gt;Since manufacturers think the bonanza will not last, it does not make sense to drop prices now and risk creating tension with the customers down the road, when prices will be hiked again.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;You would not appreciate it. &lt;/strong&gt;While people feel great pain from price increases, they tend to be less appreciative of price decreases. If companies are not sure that the decreases are going to last, it does not make sense for them to drop prices.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;It is your turn to help. &lt;/strong&gt;Companies not always burden the consumers with their extra costs. Keeping prices high is a way to recoup lost profits for companies whose price hikes were not enough to fully cover their own costs.&lt;/p&gt;  &lt;p&gt;After reading these explanations, is there reason to shout conspiracy?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=l7g_Itdibto:Kie0FryMAxI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=l7g_Itdibto:Kie0FryMAxI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=l7g_Itdibto:Kie0FryMAxI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=l7g_Itdibto:Kie0FryMAxI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=l7g_Itdibto:Kie0FryMAxI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=l7g_Itdibto:Kie0FryMAxI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/l7g_Itdibto" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eqKjc_eur6KsWUIEawt8iRf5LhY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eqKjc_eur6KsWUIEawt8iRf5LhY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eqKjc_eur6KsWUIEawt8iRf5LhY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eqKjc_eur6KsWUIEawt8iRf5LhY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=xW0zdQSHF5E:l7g_Itdibto:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=xW0zdQSHF5E:l7g_Itdibto:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=xW0zdQSHF5E:l7g_Itdibto:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/xW0zdQSHF5E" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/xW0zdQSHF5E/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/05/Why-Prices-at-the-Supermarket-Are-Not-Dropping-Four-Reasons-for-Us-to-Be-Cynical.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=2485a5a2-f236-4858-a6bf-b35bfb0dee44</guid>
      <pubDate>Sun, 03 May 2009 01:29:23 -0800</pubDate>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=2485a5a2-f236-4858-a6bf-b35bfb0dee44</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=2485a5a2-f236-4858-a6bf-b35bfb0dee44</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/05/Why-Prices-at-the-Supermarket-Are-Not-Dropping-Four-Reasons-for-Us-to-Be-Cynical.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=2485a5a2-f236-4858-a6bf-b35bfb0dee44</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=2485a5a2-f236-4858-a6bf-b35bfb0dee44</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/l7g_Itdibto/post.aspx</feedburner:origLink></item>
    <item>
      <title>The Daily Stand-up Meetings Remind Me That&amp;hellip;</title>
      <description>&lt;p&gt;In no particular order:&lt;/p&gt;  &lt;p&gt;There are plenty of reasons for a programmer to lose focus in a four-hour period.&lt;/p&gt;  &lt;p&gt;Sometimes my boss goes directly to a developer and tries to reprioritize her tasks.&lt;/p&gt;  &lt;p&gt;Learning the business domain by osmosis is not enough for most programmers.&lt;/p&gt;  &lt;p&gt;Overanalysis and featuritis must be fought daily.&lt;/p&gt;  &lt;p&gt;Overanalyzer and great coder are not synonyms.&lt;/p&gt;  &lt;p&gt;It's hard for a programmer to explain what they are doing, even to another programmer.&lt;/p&gt;  &lt;p&gt;Knowledge of, and love for the testing discipline, do not come spontaneously.&lt;/p&gt;  &lt;p&gt;&amp;quot;Please create unit tests&amp;quot; does not do the trick.&lt;/p&gt;  &lt;p&gt;&amp;quot;Please enter the bugs in the tracking system&amp;quot; does not work either.&lt;/p&gt;  &lt;p&gt;If something can possibly be misunderstood, it will be misunderstood. If it can't possibly be misunderstood, guess what?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=TthZzDBAG3o:R5SgEAUSqXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=TthZzDBAG3o:R5SgEAUSqXc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=TthZzDBAG3o:R5SgEAUSqXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=TthZzDBAG3o:R5SgEAUSqXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=TthZzDBAG3o:R5SgEAUSqXc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=TthZzDBAG3o:R5SgEAUSqXc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/TthZzDBAG3o" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/alJ8KqoB9yw7nPWftZpFbmB5hbc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/alJ8KqoB9yw7nPWftZpFbmB5hbc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/alJ8KqoB9yw7nPWftZpFbmB5hbc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/alJ8KqoB9yw7nPWftZpFbmB5hbc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=EAi-BDzFjto:TthZzDBAG3o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=EAi-BDzFjto:TthZzDBAG3o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=EAi-BDzFjto:TthZzDBAG3o:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/EAi-BDzFjto" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/EAi-BDzFjto/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/04/The-Daily-Stand-up-Meetings-Remind-Me-Thathellip3b.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=94af4b29-44d6-4086-b893-6a1c936934e7</guid>
      <pubDate>Sun, 26 Apr 2009 14:42:45 -0800</pubDate>
      <category>Scrum</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=94af4b29-44d6-4086-b893-6a1c936934e7</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=94af4b29-44d6-4086-b893-6a1c936934e7</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/04/The-Daily-Stand-up-Meetings-Remind-Me-Thathellip3b.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=94af4b29-44d6-4086-b893-6a1c936934e7</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=94af4b29-44d6-4086-b893-6a1c936934e7</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/TthZzDBAG3o/post.aspx</feedburner:origLink></item>
    <item>
      <title>Ext JS With ASP.NET MVC Sample</title>
      <description>&lt;p&gt;This is a simple example of how you can use Ext JS and ASP.NET MVC together. The scenario is the same I have used in my previous Ext JS with PHP articles: I am going to display a number of fictitious categories using an Ext JS combo box. In this case, the combo box items’ data – the categories – will be served by an ASP.NET MVC application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/0eab364e2b29_F57A/image_9.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="176" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/0eab364e2b29_F57A/image_thumb_3.png" width="242" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;The MVC application&lt;/h4&gt;  &lt;p&gt;When I create the ASP.NET MVC application, Visual Studio builds a default folder structure where the main components of the application are distributed like this:&lt;/p&gt;  &lt;p&gt;&lt;img title="MvcApp1" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 0px 5px 30px; border-left: 0px; border-bottom: 0px" height="275" alt="MvcApp1" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/0eab364e2b29_F57A/MvcApp15_1.gif" width="174" align="right" border="0" /&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The Controllers folder is where you put Controller classes that handle URL requests &lt;/li&gt;    &lt;li&gt;The Models folder will contain classes that represent and manipulate data &lt;/li&gt;    &lt;li&gt;Views is the folder where you put UI template files that are responsible for rendering output &lt;/li&gt;    &lt;li&gt;Scripts is where you put JavaScript library files and scripts&lt;/li&gt;    &lt;li&gt;Content is where you put CSS and image files, and other non-dynamic/non-JavaScript content &lt;/li&gt;    &lt;li&gt;App_Data is where you store data files you want to read/write &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Large applications will likely use multiple Visual Studio projects, but I will stick to this default structure in order to keep the example simple.&lt;/p&gt;  &lt;h4&gt;The View&lt;/h4&gt;  &lt;p&gt;In a model-view-controller scenario the View renders entities from the Model into a form suitable for interaction. The View in this example is the html page containing the Categories combo box. &lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="402" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/0eab364e2b29_F57A/image_12.png" width="502" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;I called this page combo.html, and the Ext JS components I use are a ComboBox and a JsonStore:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;Ext.onReady(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {

    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; categoriesStore = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Ext.data.JsonStore({
        url: &lt;span style="color: #006080"&gt;'http://localhost/MvcApp/Categories'&lt;/span&gt;,
        root: &lt;span style="color: #006080"&gt;'Categories'&lt;/span&gt;,
        fields: [&lt;span style="color: #006080"&gt;'Id'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'Name'&lt;/span&gt;]
    });

    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; combo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Ext.form.ComboBox({
        store: categoriesStore,
        displayField: &lt;span style="color: #006080"&gt;'Name'&lt;/span&gt;,
        valueField: &lt;span style="color: #006080"&gt;'Id'&lt;/span&gt;,
        typeAhead: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;,
        mode: &lt;span style="color: #006080"&gt;'remote'&lt;/span&gt;,
        forceSelection: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;,
        triggerAction: &lt;span style="color: #006080"&gt;'all'&lt;/span&gt;,
        emptyText: &lt;span style="color: #006080"&gt;'Select a category...'&lt;/span&gt;,
        selectOnFocus: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;,
        applyTo: &lt;span style="color: #006080"&gt;'categories-combo'&lt;/span&gt;
    });
});&lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;
  &lt;br /&gt;The Controller&lt;/h4&gt;

&lt;p&gt;To adhere to the default url routing rules in ASP.NET MVC, the Controller is named &lt;strong&gt;CategoriesController&lt;/strong&gt;. This will permit that requests to the&amp;#160; &lt;a title="http://localhost/MvcApp/Categories" href="http://localhost/MvcApp/Categories"&gt;http://localhost/MvcApp/Categories&lt;/a&gt; url in the view (combo.html) get routed to my Controller. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CategoriesController&lt;/strong&gt; will handle the View requests and will ask the Model to produce the needed data:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; JsonResult Index() {

    CategoriesContainer container = CategoriesDataContext.GetCategories();

    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Json(container);

}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;When a request is made to the &lt;a title="http://localhost/MvcApp/Categories" href="http://localhost/MvcApp/Categories"&gt;http://localhost/MvcApp/Categories&lt;/a&gt; url, the Index() method will be executed. Note that the return value of Index() is of type &lt;strong&gt;JsonResult&lt;/strong&gt; and not &lt;strong&gt;ActionResult&lt;/strong&gt;. This indicates that the method returns JSON-encoded data. The encoding is acomplished with the call to Controller.Json() . &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CategoriesContainer&lt;/strong&gt; and &lt;strong&gt;CategoriesDataContext&lt;/strong&gt; are part of the Model. Let’s now take a look at them.&lt;/p&gt;

&lt;h4&gt;Building the Model&lt;/h4&gt;

&lt;p&gt;The term “model” refers to the objects that represent the data of the application, as well as the corresponding domain logic with the business rules and validation. &lt;strong&gt;CategoriesContainer&lt;/strong&gt; is&amp;#160; a Class that exposes an array of &lt;strong&gt;Category&lt;/strong&gt; objects:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CategoriesContainer
{
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Category[] Categories { get; set; }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;A key point here is that when serialized to JSON, an instance of &lt;strong&gt;CategoriesContainer&lt;/strong&gt; will have the signature the View’s JsonStore is expecting. &lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="294" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/0eab364e2b29_F57A/image_13.png" width="340" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CategoriesDataContext&lt;/strong&gt; creates the categories data. In a real-world application this would likely be more involved than simply hard-coding the data. :-) &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CategoriesDataContext
{
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; CategoriesContainer GetCategories() {
        Category[] categoriesArray = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Category[10];
        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 10; i++) {
            Category category = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Category { Id = i, Name = &lt;span style="color: #006080"&gt;&amp;quot;Category &amp;quot;&lt;/span&gt; + i.ToString() };
            categoriesArray[i] = category;
        }
        CategoriesContainer container = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CategoriesContainer();
        container.Categories = categoriesArray;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; container;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And last, the definition of a category can be something as simple as this &lt;strong&gt;Category&lt;/strong&gt; Class:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Category
{
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Id {get;set;}
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Name {get;set;}
}&lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;&amp;#160;&lt;/h4&gt;

&lt;h4&gt;Downloads&lt;/h4&gt;

&lt;p&gt;Download the full sample from my &lt;a href="http://miamicoder.com/page/downloads.aspx"&gt;downloads&lt;/a&gt; page.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=dcs4i2jhXiQ:Biu09mEK_Js:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=dcs4i2jhXiQ:Biu09mEK_Js:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=dcs4i2jhXiQ:Biu09mEK_Js:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=dcs4i2jhXiQ:Biu09mEK_Js:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=dcs4i2jhXiQ:Biu09mEK_Js:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=dcs4i2jhXiQ:Biu09mEK_Js:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/dcs4i2jhXiQ" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_DkBVUMsxsso61xpv4l28Z6BYfU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_DkBVUMsxsso61xpv4l28Z6BYfU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_DkBVUMsxsso61xpv4l28Z6BYfU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_DkBVUMsxsso61xpv4l28Z6BYfU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=VSZB7m9CKhE:dcs4i2jhXiQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=VSZB7m9CKhE:dcs4i2jhXiQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=VSZB7m9CKhE:dcs4i2jhXiQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/VSZB7m9CKhE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/VSZB7m9CKhE/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/03/Ext-JS-With-ASPNET-MVC-Sample.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=0248e083-24cb-4c73-9de5-7721e4fc4f7c</guid>
      <pubDate>Sat, 21 Mar 2009 22:52:00 -0800</pubDate>
      <category>ASP.NET MVC</category>
      <category>ExtJS</category>
      <category>How-To</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=0248e083-24cb-4c73-9de5-7721e4fc4f7c</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=0248e083-24cb-4c73-9de5-7721e4fc4f7c</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/03/Ext-JS-With-ASPNET-MVC-Sample.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=0248e083-24cb-4c73-9de5-7721e4fc4f7c</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=0248e083-24cb-4c73-9de5-7721e4fc4f7c</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/dcs4i2jhXiQ/post.aspx</feedburner:origLink></item>
    <item>
      <title>How to Add a Simulator to the BlackBerry JDE</title>
      <description>&lt;p&gt;I am currently fixing a problem with one of our BlackBerry applications. The problem only shows on the 8330 devices and while trying to debug it, I realized that the 8330’s simulator was not showing in the JDE’s list of available simulators. &lt;/p&gt;  &lt;p&gt;In this post I will explain what I did to add the 8330’s simulator to the list of available profiles.&lt;/p&gt;  &lt;p&gt;After downloading the 8330 simulator pakage from the &lt;a href="https://www.blackberry.com/Downloads/entry.do?code=060AD92489947D410D897474079C1477" target="_blank"&gt;BlackBerry developers site&lt;/a&gt; and installing it, I opened the SimPackage-JDE.rc file located in the JDE installation folder (You can open it with a text editor). This file, which contains a couple of entries per simulator profile, is the settings file used by the JDE to run the different simulators. This is how the entries look:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Georgia" size="2"&gt;## RIM Java Development Environment        &lt;br /&gt;# Settings file&lt;/font&gt;&lt;font face="Georgia" size="2"&gt;        &lt;br /&gt;&lt;strong&gt;SimulatorCommand7130-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt;\fledge.exe /app=Jvm.dll /handheld=7130 /session=7130 /app-param=DisableRegistration /app-param=JvmAlxConfigFile:7130.xml /data-port=0x4d44 /data-port=0x4d4e /pin=0x2100000A&lt;/font&gt;&lt;font face="Georgia" size="2"&gt;        &lt;br /&gt;&lt;strong&gt;SimulatorDirectory7130-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt;         &lt;br /&gt;&lt;strong&gt;SimulatorCommand7130e-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt;\fledge.exe /app=Jvm.dll /handheld=7130e /session=7130e /app-param=DisableRegistration /app-param=JvmAlxConfigFile:7130e.xml /data-port=0x4d44 /data-port=0x4d4e /pin=0x2100000A         &lt;br /&gt;&lt;strong&gt;SimulatorDirectory7130e-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt;         &lt;br /&gt;&lt;strong&gt;SimulatorCommand8100-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt;\fledge.exe /app=Jvm.dll /handheld=8100 /session=8100 /app-param=DisableRegistration /app-param=JvmAlxConfigFile:8100.xml /data-port=0x4d44 /data-port=0x4d4e /pin=0x2100000A         &lt;br /&gt;&lt;strong&gt;SimulatorDirectory8100-JDE&lt;/strong&gt;=&amp;lt;install_dir&amp;gt; &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As you can see, each simulator’s settings consist of an entry that specifies the command used to run the simulator and an entry that specifies the folder where the simulator resides.&lt;/p&gt;  &lt;p&gt;Knowing this, I created two more entries form my just-installed simulator. In this case, instead of using the &amp;lt;install_dir&amp;gt; placeholder, I used the actual path to the simulator. I also used the command line parameters for the 8330 simulator, which I grabbed from the 8330.bat file in C:\Program Files\Research In Motion\BlackBerry Smartphone Simulators 4.3.0\4.3.0.124 (8330):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Georgia"&gt;&lt;strong&gt;SimulatorCommand8800-JDE&lt;/strong&gt;=&amp;quot;C:\Program Files\Research In Motion\BlackBerry Smartphone Simulators 4.3.0\4.3.0.124 (8330)\fledge.exe /app=Jvm.dll&amp;quot; /handheld=8330 /session=8330 /app-param=DisableRegistration /app-param=JvmAlxConfigFile:8330.xml /data-port=0x4d44 /data-port=0x4d4e /pin=0x2100000A           &lt;br /&gt;&lt;strong&gt;SimulatorDirectory8800-JDE&lt;/strong&gt;=&amp;quot;C:\Program Files\Research In Motion\BlackBerry Smartphone Simulators 4.3.0\4.3.0.124 (8330)&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;After doing this, the 8330’s profile showed in the JDE’s simulators list:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/HowtoAddaSimulatortotheBlackBerryJDE_125F9/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://www.miamicoder.com/image.axd?picture=WindowsLiveWriter/HowtoAddaSimulatortotheBlackBerryJDE_125F9/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=xy9Ggcs0lYQ:cfbUkiTXDOc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=xy9Ggcs0lYQ:cfbUkiTXDOc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=xy9Ggcs0lYQ:cfbUkiTXDOc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=xy9Ggcs0lYQ:cfbUkiTXDOc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Miamicoder?a=xy9Ggcs0lYQ:cfbUkiTXDOc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Miamicoder?i=xy9Ggcs0lYQ:cfbUkiTXDOc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Miamicoder/~4/xy9Ggcs0lYQ" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BaGarxDTewO6sN-83qoqvex7HL8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BaGarxDTewO6sN-83qoqvex7HL8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BaGarxDTewO6sN-83qoqvex7HL8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BaGarxDTewO6sN-83qoqvex7HL8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=PW1YtXyC4Tk:xy9Ggcs0lYQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?i=PW1YtXyC4Tk:xy9Ggcs0lYQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?a=PW1YtXyC4Tk:xy9Ggcs0lYQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/feedburner/MiamiCoder?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/feedburner/MiamiCoder/~4/PW1YtXyC4Tk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/feedburner/MiamiCoder/~3/PW1YtXyC4Tk/post.aspx</link>
      <author>Jorge</author>
      <comments>http://miamicoder.com/post/2009/02/How-to-Add-a-Simulator-to-the-BlackBerry-JDE.aspx#comment</comments>
      <guid isPermaLink="false">http://miamicoder.com/post.aspx?id=fac7f6c4-4734-44c7-9986-5679b2406865</guid>
      <pubDate>Wed, 25 Feb 2009 20:54:00 -0800</pubDate>
      <category>BlackBerry</category>
      <category>How-To</category>
      <dc:publisher>Jorge</dc:publisher>
      <pingback:server>http://miamicoder.com/pingback.axd</pingback:server>
      <pingback:target>http://miamicoder.com/post.aspx?id=fac7f6c4-4734-44c7-9986-5679b2406865</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://miamicoder.com/trackback.axd?id=fac7f6c4-4734-44c7-9986-5679b2406865</trackback:ping>
      <wfw:comment>http://miamicoder.com/post/2009/02/How-to-Add-a-Simulator-to-the-BlackBerry-JDE.aspx#comment</wfw:comment>
      <wfw:commentRss>http://miamicoder.com/syndication.axd?post=fac7f6c4-4734-44c7-9986-5679b2406865</wfw:commentRss>
    <feedburner:origLink>http://miamicoder.com/post.aspx?id=fac7f6c4-4734-44c7-9986-5679b2406865</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Miamicoder/~3/xy9Ggcs0lYQ/post.aspx</feedburner:origLink></item>
  </channel>
</rss>
