<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Redpoint</title>
    <description>The voices of Redpoint</description>
    <link>http://www.redpointtech.com/</link>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Redpoint Blogs</generator>
    <item>
      <title>Si Alhir: Tribal Leadership in Practice: A Coach's Perspective</title>
      <description>By Brad Barton, Mark Ferraro, and Si Alhir We &amp;#8212; Brad (@Brad_Barton), Mark (@mark4ro), and Si (@SAlhir) &amp;#8212; have been individually involved in enterprise business and technology transformation, working strategically and tactically with management and teams, for over three decades. While our professional roots are diverse, we independently found our way to the practice of [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=932&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/07/25/tribal-leadership-in-practice-a-coachs-perspective/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/07/25/tribal-leadership-in-practice-a-coachs-perspective/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=932</guid>
      <pubDate>Sun, 25 Jul 2010 15:14:03 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Tribal Leadership in a Nutshell</title>
      <description>Tribal Leadership is a process for leveraging natural groups to build thriving organizations by focusing on language and relationship structures. Much of my work originates with &amp;#8220;The &amp;#8216;Fix It&amp;#8217; Discussion&amp;#8221;, and ultimately leads to the Purposeful Enterprise (or Tribal Enterprise), the Art of Transformation, and Mutual Authentic &amp;#38; Appreciative Engagement where Tribal Leadership is at the [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=911&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/07/11/tribal-leadership-in-a-nutshell/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/07/11/tribal-leadership-in-a-nutshell/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=911</guid>
      <pubDate>Sun, 11 Jul 2010 15:49:18 GMT</pubDate>
    </item>
    <item>
      <title>Kevin Hartman: A Business Case for RIA, part 1</title>
      <description>&lt;span style="font-weight: bold;"&gt;Why RIA?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The advent of rich internet applications (RIA) empowers organizations to create a new brand of user interfaces brimming with features and capabilities previously unimagined - features and capabilities that make completing complex tasks appear effortless and enjoyable. This is in stark contrast to the cumbersome interaction models developed prior to RIA, which could flow in unnatural ways or present artificial constraints on the user due to limitations in the available technologies.&lt;br /&gt;&lt;br /&gt;The subject of this three part series is to present how RIA can benefit an organization in relation to three major business objectives:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Increase market share&lt;/li&gt;&lt;li&gt;Improve efficiency and effectiveness&lt;/li&gt;&lt;li&gt;Reduce costs&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;RIA increases market share through improved brand recognition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More and more organizations are learning why investing in a compelling user experience is so important for their brand. They are learning that improved accessibility to their products and services via easy to use software is a necessary component to growing and improving awareness in the brand campaign. Software which pleases users and helps them better interact with a company increases user adoption of that company's products and services. This in turn encourages return visits, which in turn helps build market share and trust. RIA helps organizations achieve that trust.&lt;br /&gt;&lt;br /&gt;A well designed rich Internet application engages, captivates and motivates users to follow a task to its completion. It evokes a positive, emotional response for an otherwise routine, complex or uninspiring activity. It leaves users with a favorable impression of a company's brand and products, which can be a higher market differentiator than competing on cost alone. Many brands have successfully employed RIA to promote their offerings and drive momentum through a positive user experience. A brand can claim success when their site generates buzz, increases traffic and retains customer loyalty.&lt;br /&gt;&lt;br /&gt;A successful RIA campaign fosters brand loyalty, recognition and customer intimacy. It provides differentiation, innovation and a competitive advantage. It serves to deepen customer relationships by simplifying communication, and it encourages repeat usage through familiarity and ease of use. All of these factors yield to increased sales and market share for a highly recognized brand.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Next up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In my next post I'll continue this discussion and show how RIA can improve efficiency and effectiveness of business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7684637606823303563-6012755868988838240?l=kevin.hartman.us.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://kevin.hartman.us.com/2010/07/business-case-for-ria-part-1.html</link>
      <category domain="http://www.blogger.com/atom/ns#">RIA</category>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <author>Kevin_x0020_Hartman@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-7684637606823303563.post-6012755868988838240</guid>
      <pubDate>Sun, 04 Jul 2010 21:55:00 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Tribal Leadership: Tribal Strategy</title>
      <description>Part 1: Tribal Leadership: Tribes and Tribal Leaders Part 2: Tribal Leadership: Tribal Stages and Leverage Points Part 3: Tribal Leadership: From &amp;#8220;I&amp;#8221; to &amp;#8220;We&amp;#8221; Part 4: Tribal Leadership: Tribal Strategy Tribal Leadership is a process for leveraging natural groups to build thriving organizations by focusing on language and relationship structures. As tribes naturally move [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=854&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/07/04/tribal-leadership-tribal-strategy/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/07/04/tribal-leadership-tribal-strategy/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=854</guid>
      <pubDate>Sun, 04 Jul 2010 01:15:42 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Tribal Leadership: From "I" to  "We"</title>
      <description>Part 1: Tribal Leadership: Tribes and Tribal Leaders Part 2: Tribal Leadership: Tribal Stages and Leverage Points Part 3: Tribal Leadership: From &amp;#8220;I&amp;#8221; to &amp;#8220;We&amp;#8221; Part 4: Tribal Leadership: Tribal Strategy Tribal Leadership is a process for leveraging natural groups to build thriving organizations by focusing on language and relationship structures. As tribes naturally move [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=833&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/07/03/tribal-leadership-from-i-to-we/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/07/03/tribal-leadership-from-i-to-we/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=833</guid>
      <pubDate>Sat, 03 Jul 2010 15:30:19 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Tribal Leadership: Tribal Stages and Leverage Points</title>
      <description>Part 1: Tribal Leadership: Tribes and Tribal Leaders Part 2: Tribal Leadership: Tribal Stages and Leverage Points Part 3: Tribal Leadership: From &amp;#8220;I&amp;#8221; to &amp;#8220;We&amp;#8221; Part 4: Tribal Leadership: Tribal Strategy Tribal Leadership is a process for leveraging natural groups to build thriving organizations by focusing on language and relationship structures. Tribes naturally move one [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=808&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/07/02/tribal-leadership-tribal-stages-and-leverage-points/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/07/02/tribal-leadership-tribal-stages-and-leverage-points/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=808</guid>
      <pubDate>Fri, 02 Jul 2010 02:13:34 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Tribal Leadership: Tribes and Tribal Leaders</title>
      <description>Part 1: Tribal Leadership: Tribes and Tribal Leaders Part 2: Tribal Leadership: Tribal Stages and Leverage Points Part 3: Tribal Leadership: From &amp;#8220;I&amp;#8221; to &amp;#8220;We&amp;#8221; Part 4: Tribal Leadership: Tribal Strategy Tribal Leadership: Leveraging Natural Groups to Build a Thriving Organization is the result of a ten-year, 24,000 person, organizational research study by Dave Logan, [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=797&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/06/29/tribal-leadership-tribes-and-tribal-leaders/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Tribal Leadership</category>
      <category>Tribes</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/06/29/tribal-leadership-tribes-and-tribal-leaders/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=797</guid>
      <pubDate>Tue, 29 Jun 2010 22:57:58 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: POWERSHIP &amp; Agility Distilled</title>
      <description>POWERSHIP &amp;#8212; as explained by Impact Advisors&amp;#8216; Kathie Topel in Powership: Leadership + People = Power &amp;#8212; is &amp;#8220;a nine-part proven process that is used to engage your people to the fullest by creating an incredible POWERSHIP Culturescape Environment (Defined as the cultural landscape or business atmosphere that exists in your company each and every [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=787&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/06/20/powership-amp-agility-distilled/</link>
      <category>Agile</category>
      <category>Agile Product Management</category>
      <category>Kanban</category>
      <category>Lean</category>
      <category>Scrum</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/06/20/powership-amp-agility-distilled/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=787</guid>
      <pubDate>Sun, 20 Jun 2010 13:33:41 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Zappos' Tony Hseih's Delivering Happiness</title>
      <description>I received an advance copy of Tony Hsieh&amp;#8217;s Delivering Happiness: A path to Profits, Passion, and Purpose book (Amazon) through the advance copy giveaway program for bloggers. The Book The book offers Zappos&amp;#8217; philosophies &amp;#38; vision and shares highlights of Tony Hseih&amp;#8217;s path toward discovering how to find happiness in business and in life. After [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=772&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/06/14/zappos'-tony-hseih's-delivering-happiness/</link>
      <category>Culture</category>
      <category>Enterprise 2.0</category>
      <category>Leadership</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Strategy</category>
      <category>Twitter</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/06/14/zappos%e2%80%99-tony-hseih%e2%80%99s-delivering-happiness/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=772</guid>
      <pubDate>Mon, 14 Jun 2010 21:01:19 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Communities of Practice (CoPs)</title>
      <description>The People are the Company! Organizations readily acknowledge that people are their greatest asset, but all too seldom understand this truism in terms of the communities in which people are engaged and through which they develop their own and each other's capabilities as well as the organization's capabilities to deliver value to clients. A community [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=767&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/06/13/communities-of-practice-cops/</link>
      <category>Agile</category>
      <category>Agile Product Management</category>
      <category>Kanban</category>
      <category>Lean</category>
      <category>Scrum</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/06/13/communities-of-practice-cops/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=767</guid>
      <pubDate>Sun, 13 Jun 2010 02:14:36 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: the iPhone, development, and Hedonism</title>
      <description>&lt;!--StartFragment--&gt;Sorry, should've clarified...some emails were going around amongst my colleagues, and we were discussing the newest iPhone.&amp;nbsp; While Apple is the king of cool right now, they're still stuck with a crappy cell phone provider that is worthless if you want your phone conversation to last longer than&amp;nbsp; 30 seconds (about the average amount of time before an average call drops - with full signal strength, mind you).&lt;br /&gt;&lt;br /&gt;For me, Flash happens to be a medium I work in, but I'm a Rich Internet Application developer, and HTML5 + javascript, or Flash + javascript, or Silverlight + javascript all can achieve the same thing (eventually)...My job is to make shit look cool (kinda like bouncing gradient balls using gravity to propel themselves through millions of particles of pixie dust (optimized by apparat, of course), all while synthetically growing and teaching you something about polymorphism, or something like that)&lt;br /&gt;&lt;span style="font-family: Lucida Grande;"&gt;&lt;span style="font-size: 11pt;"&gt; &lt;br /&gt;I don't think the hedonistic value of owning an iPhone would actually improve my life in the least, aside from earning the respect and envy of toy collectors...I know I'm a luddite, because I don't want a phone that surfs the web on a shoddy little screen (high res or not).&lt;br /&gt;&lt;br /&gt;Smart phone or not, I hate surfing the web on tiny screens...watching a movie, or playing a game is ok, and getting some quick information distilled down to a quick blurb on twitter-like basis would be useful, but reading entire sites, surfing through the Nytimes, or even going to craigslist suck on these little screens (at least for someone like me with big fat fingers). &amp;nbsp;The iPad comes closer for casual users, or people who don't need a professional development environment, and just some connectedness...the iPhone (compared to the Incredible) is ok, but I'm not losing sleep. &lt;br /&gt;&lt;br /&gt;I've got to get back to making cool shit happen on the screen (whichever size screen that may be).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Lucida Grande;"&gt;&lt;span style="font-size: 11pt;"&gt;Oh, and Hedonism is an amazing scotch by &lt;a href="http://www.compassboxwhisky.com/home.html"&gt;Compass Box&lt;/a&gt;.&amp;nbsp; I really love their bottle of Peat monster, and they've got some yummy other bottles.&amp;nbsp; Try them out if you can.&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;!--EndFragment--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-2587250693657239640?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/06/iphone-development-and-hedonism.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-2587250693657239640</guid>
      <pubDate>Mon, 07 Jun 2010 21:37:00 GMT</pubDate>
    </item>
    <item>
      <title>Si Alhir: Degrees of Connectedness: Communication, Conversation, and Collaboration</title>
      <description>Inspired by a conversation with Venessa Miemis (@VenessaMiemis) of &amp;#8220;emergent by design&amp;#8221;&amp;#8230; Life is a journey through space and time. Each individual is on their own life trajectory across this space-time continuum. Each trajectory encounters other trajectories with varying degree of proximity. Connectedness (connection) involves the degree of proximity among trajectories on this space-time continuum. From life's experiences [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salhir.wordpress.com&amp;blog=5787266&amp;post=759&amp;subd=salhir&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://salhir.wordpress.com/2010/05/24/degrees-of-connectedness-communication-conversation-and collaboration/</link>
      <category>Enterprise 2.0</category>
      <category>Social Business</category>
      <category>Social Reality</category>
      <category>Twitter</category>
      <category>Web 2.0</category>
      <author>Si_x0020_Alhir@redpointtech.com</author>
      <comments>http://salhir.wordpress.com/2010/05/24/degrees-of-connectedness-communication-conversation-and%c2%a0collaboration/#comments</comments>
      <guid isPermaLink="False">http://salhir.wordpress.com/?p=759</guid>
      <pubDate>Tue, 25 May 2010 00:54:18 GMT</pubDate>
    </item>
    <item>
      <title>Sofia Smolen: AspectJ with Spring applications.</title>
      <description>Tracing and auditing is one of the most common ways to monitor an application. If your application is Spring-based, you can use Spring AOP for auditing and monitoring(via interceptors). But what if you want to add custom annotations to each audited method and have an access to these custom annotation at run time? In order [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ssmolen.wordpress.com&amp;blog=10122225&amp;post=20&amp;subd=ssmolen&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://ssmolen.wordpress.com/2010/05/21/aspectj-with-spring-applications/</link>
      <category>Spring/AspectJ</category>
      <author>Sofia_x0020_Smolen@redpointtech.com</author>
      <comments>http://ssmolen.wordpress.com/2010/05/21/aspectj-with-spring-applications/#comments</comments>
      <guid isPermaLink="False">http://ssmolen.wordpress.com/?p=20</guid>
      <pubDate>Fri, 21 May 2010 05:25:08 GMT</pubDate>
    </item>
    <item>
      <title>Bruce Andersen: Ruby XML Builder in C# .NET 4.0</title>
      <description>Now that .NET has the power of a dynamic language the first comparison is going to be with the powerhouses that are currently gaining momentum.  I decided to implement something similar to the Builder library in Ruby.  It seemed like a fun starting point that would not be over-involving.&lt;br /&gt;&lt;br /&gt;Before I go too far, lets see an example in ruby, although don't worry about the ruby itself as this is a blog more on .NET 4.0&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;...&lt;br /&gt;xml.contacts do&lt;br /&gt;xml.contact(:type =&gt; "work") do&lt;br /&gt;xml.name("Joe Smith")&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Basically this uses missing methods to add elements to an XML document.  For attributes, it uses hashes.  For nesting elements, it uses blocks of code.&lt;br /&gt;&lt;br /&gt;Some might say that Linq to XML already implemented a simple XML document builder with it's functional construction approach.  This is a little different from that.&lt;br /&gt;&lt;br /&gt;The first hurdle is types and syntax.  Hashes translate to KeyValuePairs in a dictionary which is a bit messy done in a parameter call.  Blocks of code, lambdas in .NET require themselves to be cast as a delegate or syntax trees which again is messy.  I went with the easy approach, strings for the element/value pairs, string for the value, and use nested calls rather than code blocks.  So with all these changes in place here is a sample use of the XmlBuilder:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;dynamic xmlBuilder = new XmlBuilder();&lt;br /&gt;var result = xmlBuilder.Contacts(&lt;br /&gt;         xmlBuilder.Contact("type", "work",&lt;br /&gt;             xmlBuilder.Name("Joe Smith"),&lt;br /&gt;             xmlBuilder.Phone("type", "work", "(123) 456-7890"),&lt;br /&gt;             xmlBuilder.Address("type", "home",&lt;br /&gt;                 xmlBuilder.Street("123 Main St."),&lt;br /&gt;                 xmlBuilder.City("SpringField"))));&lt;br /&gt;&lt;br /&gt;Console.WriteLine("XML: \n" + result.ToString());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It is not too much worse than the Ruby version which is a win with a more verbose language like C#.  Yes, there were a few concessions i.e. not using hashes for elements.&lt;br /&gt;&lt;br /&gt;So now that we have our requirements lets look at the code necessary to meet them.&lt;br /&gt;&lt;br /&gt;The first thing that we need is to inherit from DynamicObject and override the TryInvokeMember() function.  This allows us to always accept method calls which do not match real methods on the object.  This is done as follows:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;class XmlBuilder : DynamicObject&lt;br /&gt;{&lt;br /&gt;  public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)&lt;br /&gt;  {&lt;br /&gt;      //parse arguments&lt;br /&gt;      //Create XML Document&lt;br /&gt;      //Set Result&lt;br /&gt;      //Return true (handled method)&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Simple enough, the next hurdle is going to be argument parsing.  This overload puts all our arguments in an object array, not all that helpful.  Now we will need to do some casting and parsing.  In our case we are looking to break up the elements from the nested XDocuments constructed from the nested calls, and the optional value parameter.  Something like the following should work:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;private dynamic ParseArguments(object[] arguments)&lt;br /&gt;{&lt;br /&gt;var documents = new List&lt;xdocument&gt;();&lt;br /&gt;var strings = new List&lt;string&gt;();&lt;br /&gt;var attributes = new List&lt;xattribute&gt;();&lt;br /&gt;string text = null;&lt;br /&gt;&lt;br /&gt;foreach (var arg in arguments)&lt;br /&gt;{&lt;br /&gt;    XDocument xDocArgument;&lt;br /&gt;    string stringArgument;&lt;br /&gt;    if (CastAs&lt;xdocument&gt;(arg, out xDocArgument))&lt;br /&gt;        documents.Add(xDocArgument);&lt;br /&gt;    else if (CastAs&lt;string&gt;(arg, out stringArgument))&lt;br /&gt;        strings.Add(stringArgument);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (strings.Count % 2 == 1)&lt;br /&gt;{&lt;br /&gt;    text = strings.Last();&lt;br /&gt;    strings.RemoveAt(strings.Count - 1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &lt;&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;return new { Documents = documents, Attributes = attributes, Text = text };&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;    &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;    &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;private bool CastAs&lt;t&gt;(object value, out T castedValue)&lt;br /&gt;&lt;/t&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;    &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;{&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;if (value is T)&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;{&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;            &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;castedValue = (T)value;&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;            &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;return true;&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;}&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;castedValue = default(T);&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;        &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;return false;&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;    &lt;xdocument&gt;&lt;string&gt;&lt;xattribute&gt;&lt;xdocument&gt;&lt;string&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xattribute&gt;&lt;/string&gt;&lt;/xdocument&gt;&lt;/xdocument&gt;&lt;/xdocument&gt;&lt;/pre&gt;&lt;br /&gt;We start by breaking up the arguments into to lists then further separate them into the three parameters.  Casting ugliness was a big motivator to the move to dynamic types, and you can see how most of the code is just concerned with typing issues.  I did get to sneak in an anonymous object as the return value.&lt;br /&gt;&lt;br /&gt;Now that we have the parameters, the rest is simple:&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)&lt;br /&gt;{&lt;br /&gt;  var arguments = ParseArguments(args);&lt;br /&gt;  XElement rootElement = new XElement(binder.Name, arguments.Text, arguments.Attributes);&lt;br /&gt;  foreach (XDocument xDocument in arguments.Documents)&lt;br /&gt;      rootElement.Add(xDocument.FirstNode);&lt;br /&gt;&lt;br /&gt;  result = new XDocument(rootElement);&lt;br /&gt;  return true;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1535807340352183565-3728455867990897769?l=dailyandersen.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://dailyandersen.blogspot.com/2010/05/ruby-xml-builder-in-c-net-40.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Builder</category>
      <category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category>
      <category domain="http://www.blogger.com/atom/ns#">C#</category>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <author>Bruce_x0020_Andersen@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1535807340352183565.post-3728455867990897769</guid>
      <pubDate>Tue, 11 May 2010 15:06:00 GMT</pubDate>
    </item>
    <item>
      <title>Bruce Andersen: .NET 4.0 Dynamics and Linq Anonymous Types</title>
      <description>I have been trying to find an occassion in an existing application where Dynamics would be a good fit.  The big problem is that the existing application is strongly-typed.  Use of dynamic methods doesn't really exist.  Until I started looking at some Linq usage.  Linq uses anonymous types quite a bit.  This was fine as long as the type was used locally, it could not be passed around and used.  What a perfect fit for Dyanmics.  Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;private static string[] primaryColors = new string[] { "Blue", "Red" };&lt;br /&gt;private static string[] secondaryColors = new string[] { "Black", "Silver" };&lt;br /&gt;&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;  foreach (var result in GetColorList())&lt;br /&gt;  {&lt;br /&gt;      Console.WriteLine("Color Selection {0} and {1}", result.PrimaryColor, result.SecondaryColor);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static IEnumerable&lt;dynamic&gt; GetColorList()&lt;br /&gt;{&lt;br /&gt;  return from primaryColor in primaryColors&lt;br /&gt;         from secondaryColor in secondaryColors&lt;br /&gt;         select new { PrimaryColor = primaryColor, SecondaryColor = secondaryColor };&lt;br /&gt;}&lt;br /&gt;&lt;/dynamic&gt;&lt;/pre&gt;&lt;br /&gt;Here I can access all of the properties on the list with the use of dynamic for the anonymous type.  Of course this will not be as fast as static code, returning an enumeration of strongly typed objects but it is a good illustration of dynamics in action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1535807340352183565-513587150465572297?l=dailyandersen.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://dailyandersen.blogspot.com/2010/05/i-have-been-trying-to-find-occassion-in.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Dynamic</category>
      <category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category>
      <category domain="http://www.blogger.com/atom/ns#">C#</category>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Linq</category>
      <author>Bruce_x0020_Andersen@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1535807340352183565.post-513587150465572297</guid>
      <pubDate>Mon, 10 May 2010 16:56:00 GMT</pubDate>
    </item>
    <item>
      <title>Jeff Shurts: A little Groovy magic - Lists and Property Accessors</title>
      <description>&lt;p&gt;Dynamic languages like Groovy and Ruby are all about productivity.  Not only do they eliminate the need to write tons of boilerplate code, they also contain all sorts of &amp;#8220;syntactic sugar&amp;#8221; &amp;#8211; language features that let you accomplish a tremendous amount of work with very little code.&lt;/p&gt;
&lt;p&gt;Most of these features &amp;#8211; closures, ultra-convenient collection-oriented operators like the spread-dot (*.), etc., are well-documented.  Some, however, are a bit more arcane, and not realizing they exist can actually cost you a lot of time if you stumble into them inadvertently.&lt;/p&gt;
&lt;p&gt;The feature I have in mind at the moment is a very convenient but somewhat surprising bit of collection behavior in Groovy.  I&amp;#8217;ve been working with the language for quite a while, and have dutifully pored over books and language reference documents to become familiar with all of the groovy goodness at my disposal, but somehow I missed this one until someone on my project team found it &amp;#8211; quite by accident.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the magic find.  In Groovy, if you have a list of objects, you can access, &lt;em&gt;on the list itself&lt;/em&gt;, properties that belong to objects within the list.  The result, somewhat intuitively (but somehow quizzical at the same time), is a list of values of that property across all the members in the list.  Here&amp;#8217;s an example to illustrate what I mean &amp;#8211; just copy this and run it as a Groovy script.&lt;/p&gt;
&lt;pre class="brush: groovy;"&gt;
class Player {
def name
def teams

public String toString() {
&amp;quot;${name} - played for ${teams}&amp;quot;
}
}

def players =
[
new Player(name: &amp;quot;Greg Maddux&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Braves&amp;quot;]),
new Player(name: &amp;quot;Ron Santo&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;White Sox&amp;quot;]),
new Player(name: &amp;quot;Billy Williams&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Athletics&amp;quot;]),
new Player(name: &amp;quot;Bruce Sutter&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Cardinals&amp;quot;]),
new Player(name: &amp;quot;Lou Brock&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Cardinals&amp;quot;]),
new Player(name: &amp;quot;Gary Gaetti&amp;quot;, teams: [&amp;quot;Twins&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Ron Cey&amp;quot;, teams: [&amp;quot;Dodgers&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Ryne Sandberg&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Mark Grace&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Diamondbacks&amp;quot;]),
new Player(name: &amp;quot;Goose Gossage&amp;quot;, teams: [&amp;quot;Athletics&amp;quot;, &amp;quot;Yankees&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Sammy Sosa&amp;quot;, teams: [&amp;quot;Rangers&amp;quot;, &amp;quot;White Sox&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Larry Bowa&amp;quot;, teams: [&amp;quot;Phillies&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Rick Monday&amp;quot;, teams: [&amp;quot;Dodgers&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Dave Kingman&amp;quot;, teams: [&amp;quot;Rangers&amp;quot;, &amp;quot;Mets&amp;quot;, &amp;quot;Cubs&amp;quot;]),
new Player(name: &amp;quot;Joe Girardi&amp;quot;, teams: [&amp;quot;Cubs&amp;quot;, &amp;quot;Cardinals&amp;quot;, &amp;quot;Yankees&amp;quot;])
]

def playerNames = players.name
println &amp;quot;Here, amazingly enough, is a list containing the names of all those players:\n $(playerNames)&amp;quot;
&lt;/pre&gt;
&lt;p&gt;Once you know this behavior exists, it&amp;#8217;s pretty easy to find situations where it&amp;#8217;s an insanely convenient feature.  If you don&amp;#8217;t know it exists, you can get some pretty confusing results.  In our case, we were running a GORM query to retrieve a domain object using an alternate ID (expecting a single result), and incorrectly used the &lt;code&gt;list()&lt;/code&gt; method (we should have used &lt;code&gt;get()&lt;/code&gt;, which returns the domain object, whereas &lt;code&gt;list()&lt;/code&gt; always returns a list).&lt;/p&gt;
&lt;p&gt;In our code, after querying for the domain object, we accessed properties of the object, and were puzzled when instead of getting Strings and Integers and Dates, we were getting single-member &lt;em&gt;lists&lt;/em&gt; of Strings and Integers and Dates.  Each list &lt;code&gt;contained&lt;/code&gt; the value we expected, inexplicably embedded in a List instance.  It took a little head-scratching before we figured out that the root cause was that our query was returning a list containing our domain object, and our code that accessed the properties, which would have failed miserably in Java if attempting to treat a List as though it were a domain object, was happily drilling through the wall of that list and getting at its contents.&lt;/p&gt;
&lt;p&gt;Syntactic sugar?  Definitely.  Violation of the principle of least surprise?  Maybe.  Will I use it, now that I know it&amp;#8217;s a tool at my disposal?  Absolutely.&lt;/p&gt;
&lt;p&gt;Stay Groovy, my friends&amp;#8230;&lt;/p&gt;
</description>
      <link>http://blog.jeffshurts.com/archives/91</link>
      <category>Uncategorized</category>
      <category>collections</category>
      <category>Groovy</category>
      <category>properties</category>
      <category>Redpoint</category>
      <author>Jeff_x0020_Shurts@redpointtech.com</author>
      <comments>http://blog.jeffshurts.com/archives/91#comments</comments>
      <guid isPermaLink="False">http://blog.jeffshurts.com/?p=91</guid>
      <pubDate>Fri, 07 May 2010 14:34:47 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: Grails: Dynamically adding a save method to Domain objects that show errors</title>
      <description>I was writing some integration tests and I noticed that one of my asserts was failing on a save.  It was not clear to me why, so I started to add some diagnostic printing of errors.  Then I thought - what happens if another domain object has a problem saving?  Am I going to have to do this kind of error check all of the time?  Ugh..&lt;br /&gt;&lt;br /&gt;Using what I have already blogged about in terms of adding metaprogramming for Services, and a quick google search:  See this &lt;a href="http://stackoverflow.com/questions/611282/o-errors-allerrors-each-println-it-by-default-when-failing-to-save-a-domain-o"&gt;link&lt;/a&gt; where I got most of the inspiration.&lt;br /&gt;&lt;br /&gt;What I did was add the following method to Bootstrap.groovy.  &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;  def addDebugSaveToDomainObjects() {&lt;br /&gt;    grailsApplication.domainClasses.each {&lt;br /&gt;      it.metaClass.debugSave =  {&lt;br /&gt;        def obj = delegate.save()&lt;br /&gt;        if( obj == null ) {&lt;br /&gt;          println &amp;quot;Error saving &amp;quot; + delegate.getClass().name&lt;br /&gt;          delegate.errors.allErrors.each {&lt;br /&gt;            println it&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        return obj&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The above code will add a new method to all Domain objects call debugSave.  If there is a problem while saving the domain object this new method will print all of the errors.  These errors can be seen in the junit reports.&lt;br /&gt;&lt;br /&gt;I did it this way because I really only want these methods when I am testing and I did not want to clutter the domain API with this debug code.&lt;br /&gt;&lt;br /&gt;In the bootstrap, I look at the environment and based on the environment name I will call the above closure ( or not as the case may be ).&lt;br /&gt;&lt;br /&gt;Next in my integration test, I can execute code like the following:&lt;br /&gt;&lt;br /&gt;def myDomain = new Domain(....)&lt;br /&gt;assertNotNull myDomain.debugSave()&lt;br /&gt;&lt;br /&gt;If the assert fails, then the Junit reports will tell me so and the output will tell me why.&lt;br /&gt;&lt;br /&gt;I hope you found this information useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-6864704871124838311?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/05/grails-dynamically-adding-save-method.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Grails</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-6864704871124838311</guid>
      <pubDate>Wed, 05 May 2010 00:23:00 GMT</pubDate>
    </item>
    <item>
      <title>Jeff Shurts: Grails Pagination and CriteriaBuilder</title>
      <description>A colleague of mine and I have agreed on an analogy for Grails development:  it's like driving on the Autobahn, with serious sets of speed bumps every few miles.  One minute you're flying along in hyper-productivity mode, and the next you're inching along - digging through reference docs and forums trying to figure out why some little feature isn't working.

My most recent speed bump is one that's likely to appear in front of just about every Grails developer - getting pagination working with a result set generated by CriteriaBuilder - so I figured I'd help everyone join me in putting it in the rearview mirror.</description>
      <link>http://blog.jeffshurts.com/archives/74</link>
      <category>Groovy/Grails</category>
      <category>Technology</category>
      <category>Grails</category>
      <category>Groovy</category>
      <category>Redpoint</category>
      <author>Jeff_x0020_Shurts@redpointtech.com</author>
      <comments>http://blog.jeffshurts.com/archives/74#comments</comments>
      <guid isPermaLink="False">http://blog.jeffshurts.com/?p=74</guid>
      <pubDate>Thu, 29 Apr 2010 14:27:42 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Getting Flex 3.6 SDK, Flashbuilder 4, Tomcat, and BlazeDS to all play nice?</title>
      <description>Ok, I'll be honest, I haven't gotten Blaze to play nicely yet, but I haven't had anything to setup w/ it yet.&amp;nbsp; I'm connecting to a previous setup that used Tomcat to connect to OLAP, and I'm recreating it in FB4 instead of Spring Suite tools.&amp;nbsp; Much of my team prefers STS, but I am comfortable right now in my efficiency in FB3/4, so I blogged &lt;a href="http://flexpletives.blogspot.com/2010/04/getting-up-to-speed-on-latest-flex-3.html"&gt;yesterday about wiring up the Flex 3.6 SDK&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Connecting to a Tomcat server was the last hurdle before I get to a BlazeDS, and so I found this nice little plugin that I couldn't get from any other source.&amp;nbsp; For some reason, Tomcat isn't supported easily on Eclipse 3.5, and I'm not a fan of the standalone Flash Builder.&amp;nbsp; I prefer the Eclipse plugins, and found this would help me stay within the Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipsetotale.com/tomcatPlugin.html#A3"&gt;http://www.eclipsetotale.com/tomcatPlugin.html#A3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This was a very nice find.&amp;nbsp; I simply put the package in my eclipse plugin folder, and immediately when I restarted Eclipse, I had a Tomcat option on my toolbar.&amp;nbsp; In the preferences pane (Command+,) I could point the plugin at my Tomcat install, and away I go.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Now I can setup keyboard shortcuts (like Command+shift+t) to start/restart, or stop Tomcat.&amp;nbsp; The information from eclipsetotale is quite helpful, and I'm glad I came across it.&lt;br /&gt;&lt;br /&gt;Now to get down to some hardcore devving&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-5169204807171249332?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/04/getting-flex-36-sdk-flashbuilder-4.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-5169204807171249332</guid>
      <pubDate>Thu, 22 Apr 2010 23:06:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Getting up to speed on the latest Flex 3 SDK's</title>
      <description>This is not assuming you already have Flex 3 installed on your machine (eclipse plug-in or stand alone).&lt;br /&gt;&lt;br /&gt;In order to do this and avoid buggy errors, the latest nightly build of Flex SDK 3.6 is what I've used successfully.&amp;nbsp; I found one of many a &lt;a href="https://bugs.adobe.com/jira/browse/SDK-25567"&gt;bug&lt;/a&gt; which are annoying as all get out regarding comboboxes (which is why I prefer/recommend 3.6).&lt;br /&gt;&lt;br /&gt;In order to get up and running quickly, download either the latest or 2nd to latest nightly build of SDK 3.6, found &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3"&gt;here&lt;/a&gt; from Adobe.&lt;br /&gt;&lt;br /&gt;Inside your Flexbuilder sdk folder, create a folder for 3.6.0, something like this:&lt;br /&gt;for ?Windows: C:\Program Files\Adobe\Flex Builder 3\sdks?&lt;br /&gt;for Mac: [I use eclipse w/ the plugin, but it's probably something similar] /Applications/Adobe Flex Builder 3 Plug-in/sdks&lt;br /&gt;&lt;br /&gt;Now install (or copy over) the newest SDK to this folder from the download.&lt;br /&gt;&lt;br /&gt;Next you'll need to download the &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3sdk"&gt;data visualization package&lt;/a&gt; (and unit testing if you use that).&amp;nbsp; While the latest build is for 3.5, you can use the package for 3.6 as well.&lt;br /&gt;&lt;br /&gt;And &lt;a href="http://www.adobe.com/support/documentation/en/flex/3/releasenotes_flex3_sdk.html#Datavisualization"&gt;instructions&lt;/a&gt; for where to copy the files from/to:&lt;br /&gt;&lt;br /&gt;This helped me get the environment up and running quickly in 3.6.&amp;nbsp; This can also apply to anyone developing using Flashbuilder 4 and working with SDK 3.x (for previous projects).&amp;nbsp;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-1644985963998120094?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/04/getting-up-to-speed-on-latest-flex-3.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-1644985963998120094</guid>
      <pubDate>Wed, 21 Apr 2010 22:55:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Creating an AIR Installer badge for Flex Devs</title>
      <description>In building a recent app, the customer asked me to also make a flash badge for their installer.&amp;nbsp; This way they could deploy the app installer, yet control the download of the AIR app.&amp;nbsp; For me, the badge allows two things, control of the app's image, and some nice SEO.&amp;nbsp; If you can get other sites to deploy your badge (which is a simple group of files), then you can get some nice cross linkage SEO (not to mention and SEO linking/MetaData you might have in the SWF that runs the installer), and also some good data.&lt;br /&gt;&lt;br /&gt;So to create a Badge, use Adobe's sample badge which I found here (on my Mac):&lt;br /&gt;&lt;br /&gt;/Applications/Adobe Flex Builder 3 Plug-in/sdks/3.6.0/samples.&lt;br /&gt;&lt;br /&gt;After you copy it into your project's folder (or wherever you'll most effectively work with it), you'll need to open it in Flash to manipulate some of it.&amp;nbsp; Now, I am not a Flash IDE user.&amp;nbsp; It takes me quite some time to figure out what the heck timelines are, and what layers are doing where, but in all honesty, if I could just figure this out, I'm sure I could do some killer stuff in Flash that would help out my enterprise apps.&amp;nbsp; Anyways, inside the group of items are .js, .html, .as, .swf, .jpg, and .fla.&amp;nbsp; The .fla allows me some room for designing, creating, and manipulating my text area.&amp;nbsp; Following Lee Brimelow's (http://www.gotoandlearn.com/play?id=56) example of making a tooltip in Flash (something I enjoy taking for granted in Flex), I built a hover over tooltip in my installer badge, as well as added some SEO in the metadata of the swf, and inside the jsp/html page.&lt;br /&gt;&lt;br /&gt;It took me a few minutes to realize that the badge itself was generated from Flash, so once I got inside of Flash, and started tooling around, I found out I could easily automate, or graphically change around, things on my installer badge.&amp;nbsp; And by using my own customized image, I could adjust inside the .fla what the image was to be shown, and could now use an animated .gif, or a .png, or (&lt;a href="http://www.zaalabs.com/2010/04/introducing-zaail-40-image-format-support-for-flash/"&gt;using the awesomeness of alchemy and ZaalLabs) 40+ image types&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, because the fla incorporates the as file, I adjusted a few settings there for some more seo, and used that to compile and push out my swf.&amp;nbsp; bada-boom, bedaubing, I now have a kick-a$$ installer badge, with a custom logo, and I can mess around and adjust anything about the badge I want (including animation, or generative art, or what not).&amp;nbsp; And the installer file is tiny (in comparison to a flex app, this thing was only about 6k when I was done).&amp;nbsp; 6 friggin K.&amp;nbsp; That's ridiculously small.I need to learn to make Flex apps that small.&lt;br /&gt;&lt;br /&gt;Anyways, please enjoy hopefully these step by steps will help you make a better AIR app installer badge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-7623077410078511247?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/04/creating-air-installer-badge-for-flex.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-7623077410078511247</guid>
      <pubDate>Mon, 12 Apr 2010 23:24:00 GMT</pubDate>
    </item>
    <item>
      <title>Jeff Shurts: Using Grails Controller Interceptors To Avoid Rampant Testing</title>
      <description>&lt;p&gt;Test-driven development and the resulting test coverage it affords are some of the most important benefits of modern development practices.  When it comes time to refactor code or make a significant functional change, there's nothing like the peace of mind afforded by a comprehensive set of well-written unit tests all emitting that wonderful emerald green.&lt;/p&gt;
&lt;p&gt;But such peace of mind comes at a cost.  I've heard estimates from various teams I've talked to stating that the cost of writing unit tests for adequate code coverage (usually 50% to 80% on Java projects) can range from equivalent to the production code itself, to five times that.  The problem with these estimates, of course, is subjectivity.  For example, if you have found a bug using a test and work to fix the test, are you mentally counting that time as test-writing or code-writing?&lt;/p&gt;
&lt;p&gt;Estimating factors aside, the plain fact is that testing does amplify the cost of software development - at least in the short term.  Which means that a software engineer who really cares about his customer's bottom line should always be on the lookout for ways to avoid the increased cost of testing.&lt;/p&gt;
&lt;p&gt;This line of thinking arose the other day on the project I'm currently working on.  It's a Groovy/Grails web application with some public, customer-facing components and some internal-use components.  We're using Grails scaffolding as much as is practical for the relatively infrequently-used internal-use features to save time and money.  In most cases, we have generated and tweaked the UI components (GSP pages) to smooth over some of the uglier bits of scaffolded pages, but we have tried not to generate any of the controller code, instead relying on Grails' generate-at-runtime approach by including &lt;code&gt;def scaffold = true&lt;/code&gt; in these controllers.&lt;/p&gt;
&lt;p&gt;Why not generate the source?  Because generated code is deceptively expensive!  The minute a feature springs into  existence in your code base, it needs to be tested - even if that code was generated by a framework like Grails.  And Grails controller closures - &lt;code&gt;insert&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt;, as the case in point here, do a significant amount work for you.  Data binding.  Optimistic locking exception handling.  Routing of validation errors.  All things that "just work" in scaffolded code, but which might be broken by someone once the code actually becomes part of your code base.&lt;/p&gt;
&lt;p&gt;So when the need arose to customize part of the logic in insert and update closures (to do some custom interpretation of a series of check boxes on a form that couldn't be made to conform to the default binding mechanism), we began looking for ways to override binding logic without generating and modifying the closures themselves.&lt;/p&gt;
&lt;p&gt;As usual, Grails has a solution at the ready - controller &lt;a href="http://www.grails.org/Controllers+-+Interceptors"&gt;interceptors&lt;/a&gt;.  All we had to do was declare an interceptor that fires before insert and update closures, and in that closure, inspect our list of check boxes and set a &lt;code&gt;params&lt;/code&gt; value that would then be assigned to our domain object through the normal binding process.&lt;/p&gt;
&lt;p&gt;By using an interceptor, we completely avoided the need to generate (and assume custodianship of) the &lt;code&gt;insert&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt; closures in this controller - which means we didn't have to spend valuable time writing unit tests to cover these Grails-supplied features that could be broken once the code actually exists. &lt;/p&gt;
&lt;p&gt;I guess I can summarize this little victory this way:  Having tested code for an application feature is far better than having untested code.  Having no code at all is better than either.  &lt;/p&gt;
&lt;p&gt;Stay Groovy, my friends.&lt;/p&gt;
</description>
      <link>http://blog.jeffshurts.com/archives/65</link>
      <category>Groovy/Grails</category>
      <category>Agile</category>
      <category>Grails</category>
      <category>Groovy</category>
      <category>Redpoint</category>
      <author>Jeff_x0020_Shurts@redpointtech.com</author>
      <comments>http://blog.jeffshurts.com/archives/65#comments</comments>
      <guid isPermaLink="False">http://blog.jeffshurts.com/?p=65</guid>
      <pubDate>Mon, 12 Apr 2010 09:33:57 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: Grails: Intercepting Service class methods - part 3</title>
      <description>Well - I have a couple of updates to my previous post:&lt;br /&gt;&lt;br /&gt;1) Grails 1.2.2 is out and it does look like the Spring DSL for AOP definitions is fixed.&lt;br /&gt;2) using the Spring xml definition in part 2 performed very poorly.  I am not sure why but if I changed the pointcut definition to:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;pointcut="execution(* com.redpointtech.flex..*Service..*(..))"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;it performed MUCH better&lt;br /&gt;&lt;br /&gt;Given that the DSL is fixed and I needed it to perform better I have changed the AOP definition again to the following in the resources.groovy file.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; beans = {  &lt;br /&gt;  xmlns aop:"http://www.springframework.org/schema/aop"  &lt;br /&gt;   securityAspect(SecurityAspect)  &lt;br /&gt;   aop {  &lt;br /&gt;    config("proxy-target-class":true) {  &lt;br /&gt;     aspect(id:'theSecurityAspectDef', ref:'securityAspect') {  &lt;br /&gt;      around method: "invoke", pointcut:"execution(* com.redpointtech.flex..*Service..*(..))"  &lt;br /&gt;     }  &lt;br /&gt;    }  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I think this concludes my saga to get Flex services intercepted.  I hope this helps you out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-7535063291870936268?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/03/grails-intercepting-service-class_30.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Grails</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-7535063291870936268</guid>
      <pubDate>Tue, 30 Mar 2010 21:12:00 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: Hello World using MonoTouch</title>
      <description>At the MSDN Blogs, Shawn Burke has recently decided to do a comparison of the iPhone SDK and the Windows Phone 7 Series SDK (what a horrible, horrible name!) by writing a simple Hello World application and showing the difference between the two. While I don&amp;#8217;t think it&amp;#8217;s really fair to compare a C-based platform [...]</description>
      <link>http://escoz.com/hello-world-using-monotouch/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/hello-world-using-monotouch/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/?p=311</guid>
      <pubDate>Wed, 24 Mar 2010 10:12:38 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Working w/ Global settings in Flash to get around Sandbox Security issue</title>
      <description>I am working on an app that needs local resources and network resources.&amp;nbsp; I was getting very frustrated during my development because I couldn't read the local setup file.&amp;nbsp; Unfortunately, after a lot of digging around, the only reason I could find that the app wouldn't load was because the global settings for flash had been changed.&amp;nbsp; Because these settings are only available by going online here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager02.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager02.html&lt;/a&gt;&lt;br /&gt;or here:&lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html&lt;/a&gt;&lt;br /&gt;or here:&lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html&lt;/a&gt;&lt;br /&gt;or here:&lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager06.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager06.html&lt;/a&gt;&lt;br /&gt;or here: &lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following isn't a tab, but allow you to view set your player updates:&lt;br /&gt;&lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager05.html"&gt;http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager05.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyways, the annoyance for me is a couple of things:&lt;br /&gt;1) why is this remote (aka why do I have to keep reloading a page&amp;nbsp; to look at flash player settings inside of a flash swf?)&lt;br /&gt;2) What is the garbage that Charles is recording going back and forth, and &lt;br /&gt;3) where is this swf object located on my machine so that I may have some more control over it.&lt;br /&gt;&lt;br /&gt;It's amazing to see what sites (intentionally visited or not - which includes pop-ups) that are stored in the global settings.I need to understand this more if I'm going to want more security for my machine.&lt;br /&gt;&lt;br /&gt;Anyways, the point I had about this post was that the global security settings were causing me some problems in connecting my app to the intertubes.&amp;nbsp; Once I made a checkmark on the Global Security Settings, I could actually see content and it resolved my problems (and all of this started as a search into possible cross domain issues, and not just my own irrational fears that someone might actually want to track all the websites I've been to and store private information about it without letting me know/delete/erase this stuff, manage my own security, etc.).&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-5040515111657774499?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/03/working-w-global-settings-in-flash-to.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-5040515111657774499</guid>
      <pubDate>Fri, 19 Mar 2010 07:31:00 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: Grails: Intercepting Service class methods - part 2</title>
      <description>As a continuation from my earlier post about intercepting Grails Service methods - as it turns out that approach will not work when using flex-remoting.  If you want to intercept your services that you expose as Flex services you have to use Spring AOP.  Because of a bug: http://jira.codehaus.org/browse/GRAILS-5932 you will have to use the XML version of AOP definition.&lt;br /&gt;&lt;br /&gt;To do that you have to create a resources.xml file in grails-app/conf/spring directory and it would look like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;  &lt;br /&gt; &amp;lt;beans xmlns="http://www.springframework.org/schema/beans"  &lt;br /&gt;     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  &lt;br /&gt;     xmlns:aop="http://www.springframework.org/schema/aop"  &lt;br /&gt;     xsi:schemaLocation="  &lt;br /&gt; http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  &lt;br /&gt; http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"&amp;gt;  &lt;br /&gt;   &amp;lt;!--  &lt;br /&gt;     we are defining the AOP beans in the xml file because of this bug which will  &lt;br /&gt;     not be fixed until 1.2.2 and we are using 1.2.1  &lt;br /&gt;     http://jira.codehaus.org/browse/GRAILS-5932  &lt;br /&gt;     aspect are called twice because of the above bug. See  &lt;br /&gt;     http://n4.nabble.com/Advice-called-2-or-more-times-for-aspect-with-execution-pointcut-Bug-td1588831.html  &lt;br /&gt;     toward the bottom Graeme says that 1.2.2 will have the fixes, and 1.3 M1 already does have the  &lt;br /&gt;     fix. For now we have to live with the interceptor called twice.  &lt;br /&gt;   --&amp;gt;  &lt;br /&gt;   &amp;lt;bean id="myAroundAspect" class="com.redpointtech.aop.MyAroundAspect" /&amp;gt;  &lt;br /&gt;   &amp;lt;aop:config proxy-target-class="true"&amp;gt;  &lt;br /&gt;     &amp;lt;aop:aspect id="theAspect" ref="myAroundAspect"&amp;gt;  &lt;br /&gt;       &amp;lt;aop:around method="invoke" pointcut="target(com.redpointtech.aop.AOPMarkerInterface)" /&amp;gt;  &lt;br /&gt;     &amp;lt;/aop:aspect&amp;gt;  &lt;br /&gt;   &amp;lt;/aop:config&amp;gt;  &lt;br /&gt; &amp;lt;/beans&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This assumes that you want to intercept any class that implements the AOPMarkerInterface.&lt;br /&gt;&lt;br /&gt;The Aspect looks like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; class MyAroundAspect {  &lt;br /&gt;  public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {  &lt;br /&gt;   Object returnVal = null  &lt;br /&gt;   println "MyAroundAspect called...."  &lt;br /&gt;   returnVal = joinPoint.proceed()  &lt;br /&gt;   return returnVal  &lt;br /&gt;  }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A couple of take aways:&lt;br /&gt;1) do not try to do what I suggested in my previous blog post.  That will NOT work for Flex services&lt;br /&gt;2) do not use resources.groovy and the Spring DSL - there is a bug in the 1.2.x version that prevents that from working.  This is suppose to be fixed in the 1.2.2 release ( not yet released) and the 1.3 M1 ( available now )&lt;br /&gt;3) do use resources.xml and define your Aspect the old fashion way - the old ways work just great.&lt;br /&gt;&lt;br /&gt;I hope this saves you some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-8558446528519639560?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/03/grails-intercepting-service-class_16.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Grails</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-8558446528519639560</guid>
      <pubDate>Tue, 16 Mar 2010 22:05:00 GMT</pubDate>
    </item>
    <item>
      <title>Herbert Wu: Using Apache Commons JEXL for Java Object Validation</title>
      <description>Apache Commons JEXL is a simple generic  expression language that can be used for dynamic scripting. Among many possible applications, we apply it for dynamic Java object validation. Object validation is rather common in many applications and there are numerous ways to do it. But via JEXL, you can put validation rules in a configuration [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbertwu.wordpress.com&amp;blog=7489790&amp;post=49&amp;subd=herbertwu&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://herbertwu.wordpress.com/2010/03/14/using-apache-commons-jexl-for-java-object-validation/</link>
      <category>Uncategorized</category>
      <category>Apache commons jexl application</category>
      <category>java bean validation</category>
      <category>java object validation</category>
      <category>JEXL object validation</category>
      <category>redpoint</category>
      <author>Herbert_x0020_Wu@redpointtech.com</author>
      <comments>http://herbertwu.wordpress.com/2010/03/14/using-apache-commons-jexl-for-java-object-validation/#comments</comments>
      <guid isPermaLink="False">http://herbertwu.wordpress.com/?p=49</guid>
      <pubDate>Sat, 13 Mar 2010 22:40:47 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: Grails: Intercepting Service class methods</title>
      <description>It took me a little while to fully understand how to add some kind of interceptor to a Grails Service class and I wanted to add a blog post incase others have a similar question.  After doing some research, and piecing together information from various sites I ended up with the information here.  I hope it is helpful to you.&lt;br /&gt;&lt;br /&gt;What problem am I trying to solve?&lt;br /&gt;Adding interceptors to Controllers is really easy and I wanted to add some interceptors to my Service classes in a similar fashion.  But it appears that you cannot do this for Service classes - just Controller classes.  If I am wrong, please someone show me how best to do this.&lt;br /&gt;&lt;br /&gt;Why am I trying to do this?&lt;br /&gt;I use Flex in many of my application implementations and I use BlazeDS/AMF in many of the cases.  I needed to add a security check on every exposed Flex service.&lt;br /&gt;&lt;br /&gt;How did I do this?&lt;br /&gt;In my service class I added a custom property that I called 'secureService'.  But as you will see you can use anything.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; class TeslaService {  &lt;br /&gt;   boolean transactional = true  &lt;br /&gt;  // secureService is a custom property that is looked for in the BootStrap.groovy file and if  &lt;br /&gt;  // found in a ServiceClass, then it modifies the invokeMethod to add some code before and  &lt;br /&gt;  // after the call.  &lt;br /&gt;   boolean secureService = true  &lt;br /&gt;   def serviceMethod() {  &lt;br /&gt;    println 'Tesla Service Method called'  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next I updated my BootStrap.groovy file and for each ServiceClass, checked for the 'secureService' property being set to true.  If it was, I then used the MetaClass InvokeMethod and assigned a new closure that could add a security check.&lt;br /&gt;&lt;br /&gt;The updated bootstrap file looked like the following:&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; class BootStrap {  &lt;br /&gt;    def grailsApplication  &lt;br /&gt;    def init = { servletContext -&amp;gt;  &lt;br /&gt;    grailsApplication.serviceClasses.each {  &lt;br /&gt;     def isSecured = it.getPropertyValue('secureService')  &lt;br /&gt;     if( isSecured ) {  &lt;br /&gt;      // example of how to 'intercept' service classes.  &lt;br /&gt;      it.metaClass.invokeMethod = { name, args -&amp;gt;  &lt;br /&gt;       println '''SECURE before $name'''  &lt;br /&gt;       def res = delegate.metaClass.getMetaMethod(name,args).invoke( delegate, args)  &lt;br /&gt;       println '''SECURE after $name. res=$res'''  &lt;br /&gt;       res  &lt;br /&gt;      }  &lt;br /&gt;     }  &lt;br /&gt;    }  &lt;br /&gt;    }  &lt;br /&gt;    def destroy = {  &lt;br /&gt;    }  &lt;br /&gt; }   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To test this I created an Integration test.  This test looked like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; class TeslaServiceIntegrationTests extends GrailsUnitTestCase {  &lt;br /&gt;  def teslaService  &lt;br /&gt;   protected void setUp() {  &lt;br /&gt;     super.setUp()  &lt;br /&gt;   }  &lt;br /&gt;   protected void tearDown() {  &lt;br /&gt;     super.tearDown()  &lt;br /&gt;   }  &lt;br /&gt;   void testServiceMethod() {  &lt;br /&gt;    teslaService.serviceMethod()  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output of this was the following:&lt;br /&gt;SECURE before serviceMethod&lt;br /&gt;Tesla Service Method called&lt;br /&gt;SECURE after serviceMethod. res=null&lt;br /&gt;&lt;br /&gt;Some of the links that I used are below as the information from these posts might also be helpful to you.&lt;br /&gt;&lt;br /&gt;http://www.pubbs.net/grails/201001/9868/&lt;br /&gt;http://mrhaki.blogspot.com/2010/01/grails-goodness-access-grails.html&lt;br /&gt;http://www.grails.org/doc/latest/api/org/codehaus/groovy/grails/commons/ClassPropertyFetcher.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-2540201312322516495?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/03/grails-intercepting-service-class.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Grails</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-2540201312322516495</guid>
      <pubDate>Sat, 13 Mar 2010 21:12:00 GMT</pubDate>
    </item>
    <item>
      <title>Herbert Wu: A Simple String Cipher in Java 6</title>
      <description>For regular simple application, Java Cryptography seems always complicated. But for Java 6, AES is included. Here is a simple cipher to encrypt a text string into another string which can be used safely in web environment with proper url encoding included. package sandbox.util; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * A [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbertwu.wordpress.com&amp;blog=7489790&amp;post=46&amp;subd=herbertwu&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://herbertwu.wordpress.com/2010/03/06/a-simple-string-cipher-in-java-6/</link>
      <category>Java security</category>
      <category>java encryption</category>
      <category>java password encryption</category>
      <category>java text cipher</category>
      <category>java text encryption</category>
      <category>redpoint</category>
      <category>simple java Cryptography</category>
      <author>Herbert_x0020_Wu@redpointtech.com</author>
      <comments>http://herbertwu.wordpress.com/2010/03/06/a-simple-string-cipher-in-java-6/#comments</comments>
      <guid isPermaLink="False">http://herbertwu.wordpress.com/?p=46</guid>
      <pubDate>Sat, 06 Mar 2010 15:01:17 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Never Ever Ever Call drawRect:(!)</title>
      <description>&lt;p&gt;The framework knows when it needs to see the content of your view so you don&amp;#8217;t have to worry about it&amp;#8230; the system is very efficient at this process to minimize the work that has to done and the it even caches the results so drawRect doesn&amp;#8217;t have be called multiple times (this is especially good for things like animation).  If you feel like you are at a state in your controller where you want call drawRect&amp;#8230; you should instead call &lt;strong&gt;setNeedsDisplay&lt;/strong&gt; on the view and the system will take care of calling drawRect when the time is right.  In fact&amp;#8230; if you do call drawRect&amp;#8230; nothing is going to change on the screen so just don&amp;#8217;t do it (your app might even crash!).  This fits in with one the main themes in iPhone developement&amp;#8230; laziness is good.  This lazy way of updating the view lets the framework optimize the hard-work that comes along with rendering to the screen.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/ZeBcwqy4geo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/ZeBcwqy4geo/</link>
      <category>Tech</category>
      <category>iPhone</category>
      <category>Performance</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=144#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=144</guid>
      <pubDate>Mon, 01 Mar 2010 12:12:34 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Understanding View Creation and Loading</title>
      <description>&lt;p&gt;It has been a little while since my last post&amp;#8230; I have been spending my time picking up Ruby on Rails so that I could create a web-service for my upcoming iPhone app&amp;#8230; I&amp;#8217;ll post about that shortly.  But first a quick comment about views.&lt;/p&gt;
&lt;p&gt;I have seen a lot of people who are starting out with iPhone dev get confused about how the process or creating and loading views.  Take a look at this code from this code:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic -- create and push a new view controller
    if(childController == nil)
        childController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]];

    Book *selectedBook = [appDelegate.books objectAtIndex:indexPath.row];
    childController .book = selectedBook ;

    [self.navigationController pushViewController:childController animated:YES];
}
&lt;/pre&gt;
&lt;p&gt;If you want to do something like set the title of the childController with the title of the Book&amp;#8230; do not do it in the viewDidLoad or awakeFromNib methods.  These are called only 1 time in this instance because the child controller is only created once.  Those methods are typically for setting up the controller&amp;#8217;s &amp;#8220;general state.&amp;#8221;  What I mean by &amp;#8220;general&amp;#8221; is the data that is not going to change from different book to book (like the background color and font and everything).  Do not use this method to set up specific state for each book.  A much better implementation would be to override the setBook method and do any extra initialization there.  That way, everytime you have a new book, you will update the other values:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
-(void) setBook(Book*)newBook {
    if(book != newBook){
        [book release];
        book = [newBook retain];
        self.title = book.title;
    }
}
&lt;/pre&gt;
&lt;p&gt;Hope this Helps!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/_xPBKSP3cS0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/_xPBKSP3cS0/</link>
      <category>Tech</category>
      <category>iPhone</category>
      <category>Objective C</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=136#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=136</guid>
      <pubDate>Thu, 25 Feb 2010 14:28:03 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: MonoTouch UIApplication and AppDelegate explained</title>
      <description>When you create a new MonoTouch project, one of the first lines of code you see is the FinishedLauching() function, in the AppDelegate class. That&amp;#8217;s also one of the first things to change when you&amp;#8217;re following basically any tutorial. But what exactly is it? And why is it getting called? When developing iPhone applications with [...]</description>
      <link>http://escoz.com/monotouch-uiapplication-and-appdelegate-explained/</link>
      <category>Development</category>
      <category>iPhone</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/monotouch-uiapplication-and-appdelegate-explained/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=222</guid>
      <pubDate>Mon, 15 Feb 2010 11:56:19 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Compiling Release Build in Flex - non-alerted memory error:</title>
      <description>I use Eclipse with FB3 plug-in for all my development, and often can become the case with opportunistic applications, Eclipse will grab more and more memory.&amp;nbsp; If I'm working on 2-3 apps at once, compiling and changing objects, I quickly lose up to 500MB to Eclipse.&amp;nbsp; Garbage collection and heap status size are determined by the .ini file.&amp;nbsp; When working on projects that have to embed a couple of fonts, I've had to increase the size, so that the compiler doesn't give me an out of memory error and ask me to close my workbench.&lt;br /&gt;&lt;br /&gt;Well, to keep Eclipse from becoming a memory hog, I changed the runtime and max perm size to 128 respectively.&amp;nbsp; This normally keeps Eclipse happy, running pretty quickly, and about as close to 300MB at runtime as I can keep it.&amp;nbsp; Well, recently while building out a project, I tried to export my final build, and the application kept crashing or bombing out.&amp;nbsp; The problem was that it wasn't telling me what was going on.&amp;nbsp; It just kept stopping, and not giving me a reason why.&amp;nbsp; I knew something was wrong because the release-bin folder remained empty.&lt;br /&gt;&lt;br /&gt;Switching over to Eclipse's plug-in development, I checked the error logs (very, very important resource when Flex and Eclipse fail without giving you warning.).&amp;nbsp; The error:&lt;br /&gt;java.lang.reflect.InvocationTargetException&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;Caused by: java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;Root exception:&lt;br /&gt;java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;&lt;br /&gt;Aha! Eureka - my answer lay in the fact that I had changed my workbench max and permanent size to something smaller than it could use, but it wouldn't tell me that.&amp;nbsp; Why Eclipse, is there now message?&amp;nbsp; Well, glad I know how to find the error log in Eclipse.&lt;br /&gt;&lt;br /&gt;Hope this helps anyone else who's Release Build fails, and no answer/reason is given.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-7605467595145551930?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/02/compiling-release-build-in-flex-non.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-7605467595145551930</guid>
      <pubDate>Sun, 14 Feb 2010 19:38:00 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: Paging controllers with MonoTouch</title>
      <description>I have just pushed a new control into my open source collection of MonoTouch controls, called PagedViewController. I created this control during the development of my new iPhone application, Cracklytics (available soon in the AppStore, recommended!) mainly to simplify the usage of the UIScrollView to make applications that use pagination, such as the Apple&amp;#8217;s Weather [...]</description>
      <link>http://escoz.com/paging-controllers-with-monotouch/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/paging-controllers-with-monotouch/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=274</guid>
      <pubDate>Tue, 09 Feb 2010 16:34:36 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Column Labels Redux</title>
      <description>My work life is a series of Roseanne Roseannadanna moments.&amp;nbsp; ("Well, Jane, it just goes to show you, it's always something.")&amp;nbsp; I discovered that my code to force labels to render outside columns will not work when there are negative values.&amp;nbsp; This code, however, should work:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;private function adjustAxes(pLengthDict:Dictionary, vPosDict:Dictionary, vNegDict:Dictionary, clearance:Number):void {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var axis:LinearAxis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var axisLength:Number&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var compChartMax:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var key:Object;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var maxNegValue:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var maxPosValue:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var obj:Object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var percentPositive:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var refChartMax:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var referenceAxis:LinearAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var referencePercentPositive:Number;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (key in vPosDict){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis = key as LinearAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisLength = pLengthDict[key];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxPosValue = vPosDict[key];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxNegValue = vNegDict[key];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj = calculateMaxMin(maxPosValue, maxNegValue, axisLength, clearance);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(maxPosValue &amp;gt; 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.maximum = obj.max;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.maximum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(maxNegValue &amp;gt; 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.minimum = obj.min;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.minimum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; percentPositive = axis.maximum / (axis.maximum - axis.minimum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isNaN(referencePercentPositive)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referenceAxis = axis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referencePercentPositive = percentPositive;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(Math.abs(percentPositive - 0.5) &amp;lt; Math.abs(referencePercentPositive - 0.5)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referenceAxis = axis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referencePercentPositive = percentPositive;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If there is more than one axis, Flex doesn't line up the zero &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //value of each axis, so the data looks weird.&amp;nbsp; This forces the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //zero values to line up.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (key in vPosDict){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis = key as LinearAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisLength = pLengthDict[key];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(axis == referenceAxis){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(axis.baseAtZero){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we need to match the positive/negative ratio of the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //reference chart so that the zero values will line up&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; percentPositive = axis.maximum / (axis.maximum - axis.minimum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Math.abs(percentPositive - referencePercentPositive) &amp;gt;= 0.5){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //The difference in axes is great.&amp;nbsp; Make them both 50/50&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //positive/negative.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compChartMax = Math.max(axis.maximum, Math.abs(axis.minimum));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj = calculateMaxMin(compChartMax, compChartMax, axisLength, clearance);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.maximum = obj.max;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.minimum = obj.min;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refChartMax = Math.max(referenceAxis.maximum, Math.abs(referenceAxis.minimum));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj = calculateMaxMin(refChartMax, refChartMax, pLengthDict[referenceAxis], clearance);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referenceAxis.maximum = obj.max;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referenceAxis.minimum = obj.min;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; referencePercentPositive = 0.5;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(percentPositive &amp;lt; referencePercentPositive){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.maximum = -axis.minimum * referencePercentPositive / (1 - referencePercentPositive);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(percentPositive &amp;gt; referencePercentPositive){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis.minimum = axis.maximum - (axis.maximum / referencePercentPositive);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//end if(axis.baseAtZero)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//end iteration over axes&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function calculateMaxMin(maxPosValue:Number, maxNegValue:Number, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisLength:Number, clearance:Number):Object {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var useableAxisLength:Number = axisLength - clearance * 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var unitsPerPixel:Number = Math.ceil((maxPosValue + maxNegValue)/useableAxisLength);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var retObj:Object = new Object();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retObj.max = clearance * unitsPerPixel + maxPosValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retObj.min = -1 * (clearance * unitsPerPixel + maxNegValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return retObj;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function padAxes():void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart.series == null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var clearance:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var items:Array;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var j:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var label:Label&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var labelContainer:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // key for all Dictionary objects is an IAxis object, referencing a &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //particular axis ( primary or secondary )&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //holds maximum positive value (NOT pixels) of data associated with a &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //particular axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var vPosDict:Dictionary = new Dictionary();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //holds the absolute value of the minimum negative value (NOT pixels) of &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //data associated with a particular axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var vNegDict:Dictionary = new Dictionary();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //holds the length, in pixels, of a particular axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pLengthDict:Dictionary = new Dictionary();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart is BarChart){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var labelWidth:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; theChart.series.length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(! theChart.series is BarSeries){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; theChart.horizontalAxisRenderers.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart.horizontalAxisRenderers[j].axis == theChart.series[i].horizontalAxis){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pLengthDict[theChart.series[i].horizontalAxis] = theChart.horizontalAxisRenderers[j].length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelContainer = theChart.series[i].labelContainer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items = theChart.series[i].items;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(items == null || labelContainer == null || items.length != labelContainer.numChildren){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isNaN(vPosDict[theChart.series[i].horizontalAxis])){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vPosDict[theChart.series[i].horizontalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isNaN(vNegDict[theChart.series[i].horizontalAxis])){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vNegDict[theChart.series[i].horizontalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var bsi:BarSeriesItem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var tmpLabel:Label = new Label();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; items.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bsi = items[j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label = labelContainer.getChildAt(j) as Label;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we use a textField to get an immediate measure of the width&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var textField:TextField = new TextField();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textField.text = label.text;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelWidth = Math.max(labelWidth, textField.textWidth);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var xValue:Number = new Number(bsi.xValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(xValue &amp;lt; 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vNegDict[theChart.series[i].horizontalAxis] = Math.max(vNegDict[theChart.series[i].horizontalAxis], Math.abs(xValue));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vPosDict[theChart.series[i].horizontalAxis] = Math.max(vPosDict[theChart.series[i].horizontalAxis], xValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//loop through bar series items&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//loop through bar series&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearance = theChart.computedGutters.left + theChart.getStyle("paddingLeft") + labelWidth;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adjustAxes(pLengthDict, vPosDict, vNegDict, clearance);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Flex draws a new line for zero, but still keeps the old baseline.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //This will remove the old baseline.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; theChart.backgroundElements[0].setStyle("verticalShowOrigin", false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(theChart is ColumnChart){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var labelHeight:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; theChart.series.length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(! theChart.series is ColumnSeries){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; theChart.verticalAxisRenderers.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart.verticalAxisRenderers[j].axis == theChart.series[i].verticalAxis){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pLengthDict[theChart.series[i].verticalAxis] = theChart.verticalAxisRenderers[j].length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelContainer = theChart.series[i].labelContainer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items = theChart.series[i].items;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(items == null || labelContainer == null || items.length != labelContainer.numChildren){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isNaN(vPosDict[theChart.series[i].verticalAxis])){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vPosDict[theChart.series[i].verticalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isNaN(vNegDict[theChart.series[i].verticalAxis])){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vNegDict[theChart.series[i].verticalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var csi:ColumnSeriesItem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; items.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csi = items[j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label = labelContainer.getChildAt(j) as Label;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelHeight = Math.max(labelHeight, label.height);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var yValue:Number = new Number(csi.yValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(yValue &amp;lt; 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vNegDict[theChart.series[i].verticalAxis] = Math.max(vNegDict[theChart.series[i].verticalAxis], Math.abs(yValue));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vPosDict[theChart.series[i].verticalAxis] = Math.max(vPosDict[theChart.series[i].verticalAxis], yValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//loop through column series items&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//loop through column series&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearance = theChart.computedGutters.top + theChart.getStyle("paddingTop") + labelHeight;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adjustAxes(pLengthDict, vPosDict, vNegDict, clearance);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Flex draws a new line for zero, but still keeps the old baseline.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //This will remove the old baseline.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; theChart.backgroundElements[0].setStyle("horizontalShowOrigin", false);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//end if ColumnChart&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-7879114428373442953?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2010/02/column-labels-redux.html</link>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-7879114428373442953</guid>
      <pubDate>Sat, 06 Feb 2010 18:32:00 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: Notes from an (officially new) iPhone developer</title>
      <description>I have just finished uploading a new application to the App Store. While it&amp;#8217;s waiting for Apple&amp;#8217;s approval (hopefully that will happen soon), I decided to write down some information about how the application was developed. This won&amp;#8217;t be a technical guide or a how-to; rather, these are some random thoughts that new developers to this [...]</description>
      <link>http://escoz.com/notes-from-an-iphone-developer/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/notes-from-an-iphone-developer/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=228</guid>
      <pubDate>Sat, 06 Feb 2010 16:19:35 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: MonoTouch Presentation at the ChiPhone Group</title>
      <description>Later this month I&amp;#8217;ll also be talking about MonoTouch at the chiPhone User Group. I&amp;#8217;ll also have the pleasure of hosting the meeting this month at our offices at the Willis Tower (old Sears tower): When: February 25th, 2010 Where: Redpoint Technologies, Willis Tower, 233 South Wacker Dr. Suite #750, Chicago IL Price: FREE! Register here. The [...]</description>
      <link>http://escoz.com/monotouch-presentation-at-the-chiphone-grou/</link>
      <category>Events</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/monotouch-presentation-at-the-chiphone-grou/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=223</guid>
      <pubDate>Fri, 05 Feb 2010 07:24:24 GMT</pubDate>
    </item>
    <item>
      <title>Sofia Smolen: Custom ThreadPoolExecutor</title>
      <description>If your application is multithreaded and you use Java 6.0, most likely you will use ThreadPoolExecutor. The ThreadPoolExecutor class is a concrete implementation of the ExecutorService interface, which should be sufficient for most applications. It also provides useful hookup methods (like beforeExecute, afterExecute, etc) which can be overridden for customization purposes. Here are the signatures: [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ssmolen.wordpress.com&amp;blog=10122225&amp;post=3&amp;subd=ssmolen&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://ssmolen.wordpress.com/2010/02/04/custom-threadpoolexecutor/</link>
      <category>Java/Spring</category>
      <category>Callable</category>
      <category>I</category>
      <category>Java</category>
      <category>ThreadPoolExecutor</category>
      <author>Sofia_x0020_Smolen@redpointtech.com</author>
      <comments>http://ssmolen.wordpress.com/2010/02/04/custom-threadpoolexecutor/#comments</comments>
      <guid isPermaLink="False">http://ssmolen.wordpress.com/?p=3</guid>
      <pubDate>Thu, 04 Feb 2010 15:51:39 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Dynamically Showing Embedded Images in Flex</title>
      <description>Dynamically Showing Embedded Images&lt;br /&gt;&lt;br /&gt;Several resources will show how easy it is to embed an Image in Flex.  You can embed inline, via meta tag, and another way (which I forgot right now).  Regardless of any of these ways, they assume you always know when you are going to be using your embedded image, and don't have much flexibility if you want to dynamically change the image for a component based on something as arbitrary as mouseOver.  &lt;br /&gt;&lt;br /&gt;If you look at the profuse examples when googling, you come across many that show you how to embed inline:&lt;br /&gt;&amp;lt;&lt;br /&gt;&amp;lt;mx:Image id="img" source="{@Embed(source=assets/img.jpg)}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Or you can embed an image via metatag inside your class, and then call it explicitly in your component:&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:Metadata&amp;gt;&lt;br /&gt; [Embed(source="assets/icons/myImg.png")]&lt;br /&gt; public static const myImg:Class;&lt;br /&gt;&amp;lt;/mx:Metadata&amp;gt;&lt;br /&gt;.&lt;br /&gt;&amp;lt;mx:Image id="img" source="{myImg}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Or you can embed the object in another class, foo, and then reference it in your Image:&lt;br /&gt;&lt;br /&gt;import location.for.assetClass.foo;&lt;br /&gt;...&lt;br /&gt;&amp;lt;mx:Image id="img" source="{foo.myImg}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;More often than not, I like to go the third route, mainly because I want to be able to access the images from another class, or from multiple components.  Now knowing how to embed images is great, but my quandary was, "What do I do if I have 30 or 100 small icons/images that I want to embed, and the component that is using the image doesn't know the embedded image to use until runtime, i.e. itemRenderer, or dynamically generated object using static icons (recycled buttons.)?"  &lt;br /&gt;&lt;br /&gt;For this example, I am using a simple list, with a custom itemRenderer.  The list's dataprovider has an id and some other information for each record.  In my customItemRenderer, I can get the data.id and use that to determine the picture I wanted to use.  The only problem was, I have know idea how to call foo.myImg dynamically.  I tried getClassByName(data.id), but it refused to cast my object to a class or would return null.  &lt;br /&gt;&lt;br /&gt;I really thought that because I had embedded my image, then cast it as a class, I'd be able to call it by name.  Bummer!  &lt;br /&gt;&lt;br /&gt;Next I setup an array and a method inside of class foo.  The array, called myAssets, is an array of all the classes inside of foo.  The function was called from the itemRenderer, in init() to get the class for the image to assign it, as a ByteAsset, to the source for the image.  Inside of foo, I have the following:&lt;br /&gt;&lt;br /&gt;  public function getClass(str:String):Class{&lt;br /&gt;   var s:String = "[class IconAssets_" + str + "]";&lt;br /&gt;   for (var i:int = 0; i &amp;lt; myAssets.length; i++){&lt;br /&gt;    var t:String = myAssets[i].toString();&lt;br /&gt;    trace(t);&lt;br /&gt;    if(s == t){&lt;br /&gt;     return myAssets[i];&lt;br /&gt;    }&lt;br /&gt;   } &lt;br /&gt;   return null; &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;I would pass in the data.id to the getClass(), and the return would be the class I needed.  This actually worked, but seemed quite cumbersome, especially because now I was not only responsible for creating the embedded image, but also adding and maintaining an array for all objects.  This seemed a bit extraneous, so I finally hit on a solution that let's me do this quickly and easily.&lt;br /&gt;&lt;br /&gt;The most annoying part of all of this is either not knowing the correct syntax (because I'm a music major and am learning coding on my own), wording to search the world of Flex development blogs, or something else involving the continual error between seat and keyboard.&lt;br /&gt;&lt;br /&gt;Anyways, the ultimate solution was actually quite easy.&lt;br /&gt;&lt;br /&gt;Keeping the foo class with all my embedded images is fine, and in my itemRenderer, for the image, I just need to put the following for the source:&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:Image id="img" source="{foo[data.id]}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;That's it!  Probably too much time spent trying to figure this out, but in the end, the class is acting like an object, and I can get any of my "properties" out of the class pretty easily now.  I struggled w/ this concept on an earlier project, but now that I have the quick fix to dynamically change the source of an image with an embedded image without having to hard code any values in the component is much, much better.  Ok, so lesson learned, the answer wasn't that hard, but I needed to futz with the other possibilities before I could finally get it right.  Now that I got it right, I promise I shouldn't get it wrong again*.&lt;br /&gt;&lt;br /&gt;*I might, but that's all part of my slow learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-3583006006864590184?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/02/dynamically-showing-embedded-images-in.html</link>
      <category domain="http://www.blogger.com/atom/ns#">flex</category>
      <category domain="http://www.blogger.com/atom/ns#">dynamic</category>
      <category domain="http://www.blogger.com/atom/ns#">images</category>
      <category domain="http://www.blogger.com/atom/ns#">embedded</category>
      <category domain="http://www.blogger.com/atom/ns#">AS3</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-3583006006864590184</guid>
      <pubDate>Thu, 04 Feb 2010 12:55:00 GMT</pubDate>
    </item>
    <item>
      <title>Jeff Shurts: Elegant Design, Customer Service:  It's In the Details</title>
      <description>&lt;p&gt;I recently purchased an Apple bluetooth keyboard and Magic Mouse for my Mac Mini (which I bought with the intention of using as a home theater media hub, but which gets almost as much use for &amp;#8216;normal&amp;#8217; computer tasks).&lt;/p&gt;
&lt;p&gt;When I first started test driving the Magic Mouse, I happened to be in iTunes, and happened to need to adjust the volume &amp;#8211; which is a horizontal slider in the UI.  I thought to myself, &amp;#8220;This mouse has the ability to do scrolling in any direction &amp;#8211; I wonder what happens if I hover over the volume control and swipe right?&amp;#8221;  Bam.  Of course it worked.  It&amp;#8217;s Apple, and they think of *everything.*&lt;/p&gt;
&lt;p&gt;I was truly impressed.  And, being an engineer and naturally inquisitive, I took notice that I was impressed &amp;#8211; particularly by such a &amp;#8220;little thing.&amp;#8221;  I then realized that I was impressed not &lt;em&gt;despite&lt;/em&gt; the fact that this was a little thing, but &lt;em&gt;because&lt;/em&gt; it was a little thing.  The sort of thing that other user interface and hardware designers might well have missed.&lt;/p&gt;
&lt;p&gt;Which brings me to the moral of this story.  I work in a consulting firm, and our goal is not merely to meet our customers&amp;#8217; expectations, but to surpass them.  In short, to &lt;em&gt;impress&lt;/em&gt; them.  I think that sometimes we find this hard to do.  We need to remind ourselves that sometimes it&amp;#8217;s just the little things we do &amp;#8211; things that others might have missed &amp;#8211; that will make the biggest impression.&lt;/p&gt;
</description>
      <link>http://blog.jeffshurts.com/archives/51</link>
      <category>Customer Service</category>
      <category>Redpoint</category>
      <author>Jeff_x0020_Shurts@redpointtech.com</author>
      <comments>http://blog.jeffshurts.com/archives/51#comments</comments>
      <guid isPermaLink="False">http://blog.jeffshurts.com/archives/51</guid>
      <pubDate>Tue, 02 Feb 2010 09:00:40 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Thinking in Objective C (not Java)</title>
      <description>&lt;p&gt;I have been working on my BusTracker application and have recently added the ability to view upcoming bus arrival times for a specific stop.  The way it works is that a user presses the &amp;#8220;Routes&amp;#8221; tab and is presented with a list all Bus Routes in the system (notice I used the word &amp;#8220;presses&amp;#8221; and not &amp;#8220;clicked&amp;#8221;&amp;#8230; there is no mouse on the iPhone!!!).  The user can select a route, then select a direction, then select the bus stop they are at&amp;#8230; and then they are presented with a list of upcoming bus arrival times for that specific stop.  Immediately, I had a design in my head that consisted of an abstract controller and simple controllers for each page.  Each page&amp;#8217;s controller would inherit from the abstract controller and build off of that basic functionality (they all look the same&amp;#8230; they just present different data).  This is how I would do it if I were doing something in Spring MVC&amp;#8230; so it should be okay here was well!&lt;/p&gt;
&lt;p&gt;It turns out that after doing some more reading on Objective C that it doesn&amp;#8217;t even have the reserved word &amp;#8220;abstract&amp;#8221;&amp;#8230; here&amp;#8217;s what &lt;a href="http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-TPXREF112"&gt;Apple says about it&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Abstract Classes&lt;/p&gt;
&lt;p&gt;Some classes are designed only or primarily so that other classes can inherit from them. These abstract classes group methods and instance variables that can be used by a number of different subclasses into a common definition. The abstract class is typically incomplete by itself, but contains useful code that reduces the implementation burden of its subclasses. (Because abstract classes must have subclasses to be useful, they're sometimes also called abstract superclasses.)&lt;/p&gt;
&lt;p&gt;Unlike some other languages, Objective-C does not have syntax to mark classes as abstract, nor does it prevent you from creating an instance of an abstract class.&lt;/p&gt;
&lt;p&gt;The NSObject class is the canonical example of an abstract class in Cocoa. You never use instances of the NSObject class in an application-it wouldn't be good for anything; it would be a generic object with the ability to do nothing in particular.&lt;/p&gt;
&lt;p&gt;The NSView class, on the other hand, provides an example of an abstract class instances of which you might occasionally use directly.&lt;/p&gt;
&lt;p&gt;Abstract classes often contain code that helps define the structure of an application. When you create subclasses of these classes, instances of your new classes fit effortlessly into the application structure and work automatically with other objects.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The language is much more tailored to delegation and composition rather than inheritance.  Instead of having an abstract controller with other controllers inheriting from that&amp;#8230; I chose to go with 1 simple concrete controller that calls a delegate when it needs a specific implementation.  So, each page will use a different instance of the same controller that delegates to an object that knows how to present info for that page.  This approach is also more easily tested because I don&amp;#8217;t have to set up all of the data needed to test an entire controller&amp;#8230; I only have to setup what the delegate needs to handle its specific task.  I&amp;#8217;ll post some sample code later on and link it to this post.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/7yYU08NxZlU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/7yYU08NxZlU/</link>
      <category>Tech</category>
      <category>Bus Tracker</category>
      <category>Objective C</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=21#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=21</guid>
      <pubDate>Fri, 29 Jan 2010 10:43:53 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: ALT.NET Chicago MonoTouch Presentation</title>
      <description>Next month I&amp;#8217;ll be presenting about MonoTouch at the ALT.NET Chicago February 2010 Meeting: When: February 10th, 2010 Where: Redpoint Technologies, Willis Tower, 233 South Wacker Dr. Suite #750, Chicago IL Price: FREE! Learn more and register here. MonoTouch is a new SDK based on Novell&amp;#8217;s Mono platform that allows developers to create native iPhone [...]</description>
      <link>http://escoz.com/monotouch-alt-net-chicago/</link>
      <category>Events</category>
      <category>ALT.NET</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/monotouch-alt-net-chicago/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=212</guid>
      <pubDate>Thu, 28 Jan 2010 10:13:10 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: Developing with MonoTouch on Windows and Visual Studio</title>
      <description>Here&amp;#8217;s how to develop with MonoTouch on Windows and Visual Studio 2008. You won&amp;#8217;t be able to compile the code, as it depends on libraries that simply do not exist on Windows, but tools like Resharper will work perfectly. This will allow you to write the code faster, but you&amp;#8217;ll still need the mac to [...]</description>
      <link>http://escoz.com/developing-with-monotouch-on-windows-and-visual-studio/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/developing-with-monotouch-on-windows-and-visual-studio/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=184</guid>
      <pubDate>Thu, 28 Jan 2010 09:43:22 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Forcing Flex to Render Labels OUTSIDE for a Column Series</title>
      <description>When I ask Flex to render labels outside the column for a column series, I want them &lt;b&gt;all&lt;/b&gt; to render outside the column.&amp;nbsp; According to the Flex 3.4 API, "Flex checks if any of the elements displayed in the chart require extra padding to display properly (for example, for labels). It adjusts the values of the minimum and maximum properties accordingly."&amp;nbsp; &lt;br /&gt;&lt;br /&gt;This isn't happening.&amp;nbsp; Instead, the maximum value of the axis is set to the value of the largest column.&amp;nbsp; That column then takes up 100% of the available space.&amp;nbsp; Since there is no room for a label outside the column, Flex moves it inside.&lt;br /&gt;&lt;br /&gt;The code in ColumnChart that does this is:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;if(v.labelIsHorizontal)&lt;br /&gt;&lt;/code&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(v.y &amp;lt; (isNaN(v.min) ? base : v.min))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.labelY = v.y - v.labelHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(v.labelY &amp;lt; this.dataRegion.top)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.labelY = v.y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.labelY = v.y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(v.labelY &amp;gt; this.dataRegion.bottom)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.labelY = v.y - v.labelHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.labelX = v.x - columnSeries.seriesRenderData.renderedHalfWidth +columnSeries.seriesRenderData.renderedXOffset;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I had an unbending requirement that &lt;b&gt;all&lt;/b&gt; labels must render outside the column, so if I had a bar or column chart with labelPosition = "outside", I'd have to pad the axis/axes maximum values to provide enough space for the outside label.&lt;br /&gt;&lt;br /&gt;My component was a base cartesian chart that could dynamically render series.&amp;nbsp; When generating the series or after a user re-sized the chart, I would check if I needed padding, and would call:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;if(padAxes){&lt;br /&gt;&lt;/code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; callLater(padAxesMaximums);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That padAxesMaximums function looks something like this:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;private function padAxesMaximums():void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!_padAxesRequestPending){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _padAxesRequestPending = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var axisLength:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var axisMax:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var clearance:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var j:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var k:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var items:Array;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var label:Label;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var labelContainer:Sprite;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pad:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var tmpNum:Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Map&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // key = IAxis object - references a particular axis ( primary or secondary )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // value = maximum axis value ( NOT pixels )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var maxAxisSuggestion:Dictionary = new Dictionary();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart.series == null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart is BarChart){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; theChart.series.length; i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisLength = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(k = 0; k &amp;lt; theChart.horizontalAxisRenderers.length; k++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(theChart.horizontalAxisRenderers[k].axis == theChart.series[i].horizontalAxis){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisLength = theChart.horizontalAxisRenderers[k].length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(axisLength == 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelContainer = theChart.series[i].labelContainer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pad = theChart.getStyle("paddingRight");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearance = theChart.computedGutters.right + pad;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items = theChart.series[i].items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(items == null || labelContainer == null || items.length != labelContainer.numChildren){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisMax = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; items.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var bsi:BarSeriesItem = items[j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label = labelContainer.getChildAt(j) as Label;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((bsi.x + label.textWidth + clearance) &amp;gt; axisLength){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we have a label stuck inside, yearning to be outside&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpNum = Math.ceil(theChart.series[i].horizontalAxis.computedMaximum * axisLength / (axisLength - clearance - label.textWidth));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // take the maximum of the current running value, or the newly calcualted value.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisMax = Math.max(tmpNum, axisMax);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // after looping through all of the labels and seeing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // what the max would be - then set the max&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( isNaN( maxAxisSuggestion[theChart.series[i].horizontalAxis] ) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxAxisSuggestion[theChart.series[i].horizontalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxAxisSuggestion[theChart.series[i].horizontalAxis] = Math.max(maxAxisSuggestion[theChart.series[i].horizontalAxis], axisMax);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//end iteration over BarSeriesItems&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }//end iteration over BarSeries&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(theChart is ColumnChart){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; theChart.series.length; i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelContainer = theChart.series[i].labelContainer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pad = theChart.getStyle("paddingTop");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearance = theChart.computedGutters.top + pad;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items = theChart.series[i].items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(items == null || labelContainer == null || items.length != labelContainer.numChildren){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisMax = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; items.length; j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var csi:ColumnSeriesItem = items[j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label = labelContainer.getChildAt(j) as Label;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(csi.y &amp;lt; (clearance + label.height)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we have a label stuck inside, yearning to be outside&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpNum = Math.ceil(theChart.series[i].verticalAxis.computedMaximum * csi.min / (csi.min - clearance - label.height));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // take the maximum of the current running value, or the newly calcualted value.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axisMax = Math.max(tmpNum, axisMax);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // after looping through all of the labels and seeing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // what the max would be - then set the max&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( isNaN( maxAxisSuggestion[theChart.series[i].verticalAxis] ) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxAxisSuggestion[theChart.series[i].verticalAxis] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxAxisSuggestion[theChart.series[i].verticalAxis] = Math.max(maxAxisSuggestion[theChart.series[i].verticalAxis], axisMax);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( var key:Object in maxAxisSuggestion ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var keyAxis:LinearAxis = key as LinearAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( keyAxis != null ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var value:Number = maxAxisSuggestion[key] as Number;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keyAxis.maximum = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Padding the column chart was easiest, because the length of the axis was available as the "min" parameter on the ColumnSeriesItem.&amp;nbsp; For the bar chart, I had to iterate through the horizontalAxisRenderers to find the length.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-475161524054361656?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2010/01/forcing-flex-to-render-labels-outside.html</link>
      <category domain="http://www.blogger.com/atom/ns#">REDPOINT</category>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-475161524054361656</guid>
      <pubDate>Wed, 27 Jan 2010 18:36:00 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Iteration over Arrays in ActionScript</title>
      <description>I always need reminding that &lt;i&gt;for each....in&lt;/i&gt; iterates over the &lt;b&gt;values&lt;/b&gt; of an associative array:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;for each (var value:* in object){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; trace(value);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;...while &lt;i&gt;for....in&lt;/i&gt; iterates over the &lt;b&gt;keys&lt;/b&gt; of an associative array:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;for (var key:String in object){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; trace(key + ": " + object[key]); // object[key] is value&lt;br /&gt;}&amp;nbsp; &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-4948555410521159516?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2010/01/iteration-over-arrays-in-actionscript.html</link>
      <category domain="http://www.blogger.com/atom/ns#">REDPOINT</category>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-4948555410521159516</guid>
      <pubDate>Wed, 27 Jan 2010 17:56:00 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Flex -- Problem with LinearAxis</title>
      <description>Error messages were popping up when I hovered my mouse over a chart.&amp;nbsp; I discovered that this was due to a bug (or just poor coding) in NumericAxis.&amp;nbsp; The formatDataTip function in the series was calling the formatForScreen function in NumericAxis.&amp;nbsp; This function calls toString on whatever object gets passed in.&amp;nbsp; If&amp;nbsp; the object is null (as it could be if a data point is missing), a null pointer exception will result.&amp;nbsp; The easy solution was to extend NumericAxis and override the formatForScreen function:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override function formatForScreen(value:Object):String {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(value == null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return value.toString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-2260850087416215536?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2010/01/flex-problem-with-linearaxis.html</link>
      <category domain="http://www.blogger.com/atom/ns#">REDPOINT</category>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-2260850087416215536</guid>
      <pubDate>Wed, 27 Jan 2010 17:53:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Custom Buttons In Flex - Drop Shadow on Text</title>
      <description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Just recently I was asked about adding a drop shadow to the text in a button.&amp;nbsp; Going through a few blogs, I found quickly that the best example to follow was from some guys who're way more advanced than me (http://www.davidflatley.com/2007/12/17/programmatic-button-skins-in-flex-3/, http://www.asfusion.com/blog/entry/stateful-skins-in-flex-3e-color-transitions-in-buttons-now-possible, http://www.tink.ws/blog/stateful-skins-in-flex/).&amp;nbsp; Essentially, the label inside a button is a IUITextField.&amp;nbsp; It can have filters, styles, whatever you want.&amp;nbsp; So I simply extended the Button class in .as, and added my own 'filters = [new DropShadowFilter(x,y)]', and when I implement the button, I get text w/ drop shadows.&amp;nbsp; More excitingly, I can setup some local vars that can be adjusted at runtime, so not every custom button has to have a drop filter, or if I click on it, I can quickly, in a programmatic skin, remove the drop shadow on over or down states.&amp;nbsp; This means I now have some cooler looking buttons that can shift text formatting dynamically (which is so much better than hardcoding in the style - just in case I'd like to reuse my buttons!)&lt;br /&gt;&lt;br /&gt;Here's some code:&lt;br /&gt;&lt;br /&gt;In the class itself, I have to override the rollover and rollout so I can remove the drop shadow to give a different dynamic effect.&amp;nbsp; Also, I have to override the updateDisplayList because the disabled buttons shouldn't have a drop shadow (again, just for fun).&lt;br /&gt;&lt;br /&gt;/**Class**/&lt;br /&gt;package com.studioNorth.skins{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.display.DisplayObject;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.events.MouseEvent;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import flash.filters.DropShadowFilter;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.controls.Button;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.core.IUITextField;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import mx.core.UITextField;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class CustomButtonTextDropShadow extends Button{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private var ds:DropShadowFilter; //This could be public so users could access and change it or any other variable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public function CustomButtonTextDropShadow(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ds = new DropShadowFilter(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function rollOverHandler(event:MouseEvent):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textField.filters = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super.rollOverHandler(event);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function rollOutHandler(event:MouseEvent):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super.rollOutHandler(event);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(enabled)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textField.filters = [ds];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function createChildren():void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (!textField){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textField = IUITextField(createInFontContext(UITextField));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textField.filters = [ds];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textField.styleName = this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addChild(DisplayObject(textField));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super.updateDisplayList(unscaledWidth, unscaledHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!this.enabled){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textField.filters = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**Main App**/&lt;br /&gt;&lt;mx:application layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:view="com.lordB8r.view.*"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;view:custombuttontextdropshadow color="white" fontsize="20" height="100" label="Click Me" width="240"&gt;&lt;br /&gt;&lt;/view:custombuttontextdropshadow&gt;&lt;br /&gt;&lt;br /&gt;before mouse over:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_IB4l2fjDZI8/S15SSsgaKJI/AAAAAAAAAB4/66d6aiwB2Tc/s320/clickBefore.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;during mouse over:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_IB4l2fjDZI8/S15gp_QQl6I/AAAAAAAAACA/yMtX1naHj_w/s320/clickAfter.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;that simple!&lt;br /&gt;&lt;br /&gt;&lt;/mx:application&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-3571537765006597235?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/custom-buttons-in-flex-drop-shadow-on.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Flex Button Custom DropShadoFilter Override</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-3571537765006597235</guid>
      <pubDate>Mon, 25 Jan 2010 21:27:00 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: MonoTouch Calendar control is here!</title>
      <description>Here&amp;#8217;s a new MonoTouch UIView many people will probably find useful: CalendarMonthView. As you can see in the picture on the side, this control is a copy of the built in Month View calendar control, used in Apple&amp;#8217;s calendar app. This includes animations when moving between months, highlighting of the cells being selected and current [...]</description>
      <link>http://escoz.com/monotouch-calendar-control-is-here/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/monotouch-calendar-control-is-here/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=186</guid>
      <pubDate>Fri, 22 Jan 2010 14:33:23 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Quick Tip: editButtonItem connects the dots for you!</title>
      <description>&lt;p&gt;In a previous post &lt;a href="http://www.ryanferretti.com/blog/?p=61"&gt;I went over the process of creating a favorites view&lt;/a&gt; similar to the Phone app on the iPhone.  While the concepts discussed in that post are important if you want to do iPhone development, I found a short-cut for creating the edit button while I was digging through the UIViewController api.&lt;/p&gt;
&lt;p&gt;In the last post, when the user clicked on the &amp;#8220;Edit&amp;#8221; button the &amp;#8220;editClicked&amp;#8221; method was called:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
-(IBAction) editClicked:(id)sender {
	[self.myTableView setEditing:YES animated:YES];
	UIBarButtonItem *doneButton =
		[[UIBarButtonItem alloc]
		   initWithBarButtonSystemItem:UIBarButtonSystemItemDone
		   target:self
		   action:@selector(doneEditingTable)];
	navItem.leftBarButtonItem  = doneButton;
	navItem.rightBarButtonItem = nil;
	[doneButton release];
}
&lt;/pre&gt;
&lt;p&gt;As you can see&amp;#8230; first we set the editing mode, then created a new &amp;#8220;Done&amp;#8221; button to replace the the &amp;#8220;Edit&amp;#8221; button.  I can get rid of this code if I set the &amp;#8220;Edit&amp;#8221; button to the editButtonItem object of my controller.  This built-in button item will toggle its title and associated state between Edit and Done when it is pressed.  Plus, the default button action invokes the setEditing:animated: method.  That takes care of most of the code in the editClicked method.  All I need to do to is implement the setEditing:animated:, then show/hide the &amp;#8220;+&amp;#8221; button based on the editing mode&amp;#8230; simple and easy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/rsJTz97TQnU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/rsJTz97TQnU/</link>
      <category>Tech</category>
      <category>iPhone</category>
      <category>Redpoint</category>
      <category>UIViewController</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=120#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=120</guid>
      <pubDate>Thu, 21 Jan 2010 10:00:54 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: drawRoundRect in Flex is nice, but what about non-straight rectangular borders</title>
      <description>rounded rectangles are nice, but...&lt;br /&gt;&lt;br /&gt;Everyone wants at least one rounded rectangle corner these days in Flex.well, it's easy to do if you just want to define the corner radius for each corner.&amp;nbsp; However, what do you do if you want to notch a side, extend another side, and still have the corners?&amp;nbsp; Well, just drawing a rounded rectangle doesn't work, because you're now changing the shape of the object. Now I've gotta use the graphics.curveTo, moveTo, and lineTo methods to give me a cooler rectangular border (this might even work well for tabNavigatorButtons)&lt;br /&gt;&lt;br /&gt;Because I'm big into programmatic skinning (it mainly just makes sense to me not to have to hardcode a project to specific images imported/exported from Flash or Illustrator or whatnot.&amp;nbsp; I'd like my skins to be able to redraw themselves quickly and efficiently.&amp;nbsp; For my project, I wanted to create rounded rectangles, but also have the notch.&amp;nbsp; Using the drawRoundRectangle was a start, but I couldn't change anything else in the border.&amp;nbsp; I searched and came across this guys article about dynamically creating shapes based on where you click on the canvas.&amp;nbsp; Amazing idea which would be really neat to extend to the use of manipulating images or cutting anything on the canvas (think lasso or scissor tool in any image editing software by Adobe)&lt;br /&gt;&lt;br /&gt;Anyways, to create the rectangle with rounded corners and non-straight borders, I abused the example from Adobe and added my own flair. You need the plotPoints part to make the rectangle draw everything, including the corners.&amp;nbsp; In addition, I had to adjust for my 3 rounded corners, which include curveTo functionality.&amp;nbsp; That was the trickier part, but in the end, got me a programmatic skin with notches.yippee!!!&lt;br /&gt;&lt;br /&gt;package your.package&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; import flash.filters.BitmapFilterQuality;&lt;br /&gt;&amp;nbsp; import flash.filters.DropShadowFilter;&lt;br /&gt;&amp;nbsp; import flash.geom.Point;&lt;br /&gt;&amp;nbsp; import flash.geom.Rectangle;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; import mx.graphics.RectangularDropShadow;&lt;br /&gt;&amp;nbsp; import mx.skins.RectangularBorder;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public class CustomContainerBorderSkin extends RectangularBorder {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private var dropShadow:RectangularDropShadow;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private var _points:Array = [];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private var rect:Rectangle;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function CustomContainerBorderSkin() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super.updateDisplayList(unscaledWidth, unscaledHeight);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var cornerRadius:Number = getStyle("cornerRadius");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var backgroundColor:int = getStyle("backgroundColor");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var backgroundAlpha:Number = getStyle("backgroundAlpha");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var indent:Number = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; plotPoints(indent);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.beginFill(backgroundColor,1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.moveTo(_points[0].x, _points[0].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i:int = 0; i &amp;lt; _points.length; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(i == 2 || i == 7 || i == 9){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(i){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case(2):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.curveTo(x + width, y, _points[i].x, _points[i].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case(7):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.curveTo(x + width, y + height, _points[i].x, _points[i].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case(9):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.curveTo(x, y + height, _points[i].x, _points[i].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }else{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.lineTo(_points[i].x, _points[i].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.lineTo(_points[0].x, _points[0].y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.endFill();&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parentObj = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private function plotPoints(n:Number):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points = [];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x, y));&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //0 topLeft&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width - 10&amp;nbsp;&amp;nbsp;&amp;nbsp; , y));&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //1 topRight curve from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + 10)); &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //2 topRight curve to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height - 45));&amp;nbsp;&amp;nbsp;&amp;nbsp; //3 indent begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width - n&amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height - 35));&amp;nbsp;&amp;nbsp;&amp;nbsp; //4 indent point&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height - 25));&amp;nbsp;&amp;nbsp;&amp;nbsp; //5 indent end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height - 10)); &amp;nbsp;&amp;nbsp;&amp;nbsp; //6 bottomRight curve from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + width - 10&amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height));&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //7 bottomRight curve to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x + 10&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height));&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //8 bottomLeft curve from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _points.push(new Point(x&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , y + height - 10));&amp;nbsp;&amp;nbsp;&amp;nbsp; //9 bottomLeft curve to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private function getBitmapFilter():DropShadowFilter {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var distance:Number = 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var angle:Number = 45;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var color:Number = 0x000000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var alpha:Number = .5;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var blurX:Number = 8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var blurY:Number = 8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var strength:Number = 0.65;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var quality:Number = BitmapFilterQuality.LOW;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var inner:Boolean = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var knockout:Boolean = false;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new DropShadowFilter(distance, angle, color, alpha, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; blurX, blurY, strength, quality, inner, knockout);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-2762979701459452435?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/drawroundrect-in-flex-is-nice-but-what.html</link>
      <category domain="http://www.blogger.com/atom/ns#">flex</category>
      <category domain="http://www.blogger.com/atom/ns#">drawRoundRect</category>
      <category domain="http://www.blogger.com/atom/ns#">skinning</category>
      <category domain="http://www.blogger.com/atom/ns#">borders</category>
      <category domain="http://www.blogger.com/atom/ns#">AS3</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-2762979701459452435</guid>
      <pubDate>Thu, 21 Jan 2010 08:43:00 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Understanding Simple Data Migrations with Core Data</title>
      <description>&lt;p&gt;Last week I wrote about an &lt;a href="http://www.ryanferretti.com/blog/?p=31"&gt;error I got when I added a property to a Managed Object&lt;/a&gt;.  I posted the solution, but was unable to dig into the docs and understand what was really happening.&lt;/p&gt;
&lt;p&gt;It turns out that Apple (as usual) has provided a great resource for &lt;a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Introduction/Introduction.html"&gt;understanding the data migration process&lt;/a&gt;.  It goes over simple and advanced migrations&amp;#8230; but for my purposes, the simple-way was all the I needed.  Core Data can perform automatic &amp;#8220;lightweight migration&amp;#8221; which means it infers differences between the original and updated managed object models.  You don&amp;#8217;t have create a new version of the mapping model!  This is especially good while you are in development because you don&amp;#8217;t have to reload all of your test data each time you change the data model each time.  &lt;/p&gt;
&lt;p&gt;The only catch is that lightweight migration will only work if your changes meet certain criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simple addition of a new attribute&lt;/li&gt;
&lt;li&gt;A non-optional attribute becoming optional&lt;/li&gt;
&lt;li&gt;An optional attribute becoming non-optional, and defining a default value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anything that doesn&amp;#8217;t fit this criteria will have to be done manually&amp;#8230; which is also in the docs!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/qzF2lm-imHQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/qzF2lm-imHQ/</link>
      <category>Tech</category>
      <category>Core Data</category>
      <category>iPhone</category>
      <category>Objective C</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=115#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=115</guid>
      <pubDate>Wed, 20 Jan 2010 09:52:44 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: TapkuLibrary's LoadingHUDView control ported to MonoTouch</title>
      <description>I have just pushed to github a port of the great TapkuLibrary&amp;#8217;s LoadingHUDVIew control to MonoTouch. You can find the C# LoadingHUDView implementation here, or just download the entire solution to see the control working. The code was translated mostly line-by-line, so the two classes still look very much alike. For comparison, the Obj-C code [...]</description>
      <link>http://escoz.com/tapkulibrarys-loadinghudview-control-ported-to-monotouch/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/tapkulibrarys-loadinghudview-control-ported-to-monotouch/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=164</guid>
      <pubDate>Tue, 19 Jan 2010 10:19:53 GMT</pubDate>
    </item>
    <item>
      <title>Eduardo Scoz: Editing Decimal Numbers with UITextField control with MonoTouch</title>
      <description>Here&amp;#8217;s another control I created while developing an iphone app for a client: UIDecimalField. The entire source code can be found on github, together with the other controls I have created so far. You can see the control in use in the image on the right. The new control inherits from the UITextField control, and [...]</description>
      <link>http://escoz.com/editing-decimal-numbers-with-uitextfield-control-with-monotouch/</link>
      <category>Development</category>
      <category>MonoTouch</category>
      <category>Redpoint</category>
      <author>Eduardo_x0020_Scoz@redpointtech.com</author>
      <comments>http://escoz.com/editing-decimal-numbers-with-uitextfield-control-with-monotouch/#comments</comments>
      <guid isPermaLink="False">http://escoz.com/blog/?p=147</guid>
      <pubDate>Sat, 16 Jan 2010 14:06:24 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Eclipse Navigator Link with Editor</title>
      <description>This as a small setting that I made about 6 months ago, forgot where I did it, and about 2 days later, regretted ever making this change.&amp;nbsp; I hate having my navigator bounce around all the time every time I change a tab, so this was annoying as all get out.&amp;nbsp; Stoopid me, I didn't find it again until my co-worker showed me &lt;a href="http://johnvh.com/2009/03/30/ignoring-files-in-flex-builder-navigator/"&gt;this&lt;/a&gt; link.&amp;nbsp; It was for something completely different (i.e. hiding .svn folders, but on a Windows machine, however on my mac svn files are hidden in Eclipse).&amp;nbsp; Needless to say, I saw that example image, with the term 'Link with Editor'.&amp;nbsp; My eyes misted and I got very smiley, as my co-worker accidentally solved my problem (and he just wanted to help me hide the hidden .svn folders).&amp;nbsp; Oh well.&amp;nbsp; Glad I'm back on a more efficient route!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-2099015697232425444?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/eclipse-navigator-link-with-editor.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-2099015697232425444</guid>
      <pubDate>Fri, 15 Jan 2010 20:45:00 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: NSInternalInconsistencyException: This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation</title>
      <description>&lt;p&gt;I got this error last night after going through the &lt;a href="http://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html"&gt;Core Data Tutorial&lt;/a&gt; on the Apple dev site.  I completed the tutorial and everything worked fine&amp;#8230; then I added a few more things to the UI and a new field to the Event Managed Object.  When I tried to re-build and run, I got that error above (&amp;#8220;NSInternalInconsistencyException: This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation&amp;#8221;) when trying to save an Event.&lt;/p&gt;
&lt;p&gt;After doing some research, it turns out that I need to explicitly tell NSPersistentStoreCoordinator to automatically migrate newer versions of the data objects.  I had to set these 2 values and pass them into the NSPersistentStoreCoordinator as options when it is created:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
NSDictionary *options =
    [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithBool:YES],
            NSMigratePersistentStoresAutomaticallyOption,
        [NSNumber numberWithBool:YES],
            NSInferMappingModelAutomaticallyOption, nil];

persistentStoreCoordinator =
    [[NSPersistentStoreCoordinator alloc]
        initWithManagedObjectModel:[self managedObjectModel]];

if (![persistentStoreCoordinator
        addPersistentStoreWithType:NSSQLiteStoreType
        configuration:nil URL:storeUrl options:options error:&amp;#038;error]) {
        // Handle error if failure
}
&lt;/pre&gt;
&lt;p&gt;I&amp;#8217;ll update this post as I understand more about what is going on&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/fd0USNQ4dhc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/fd0USNQ4dhc/</link>
      <category>Tech</category>
      <category>Core Data</category>
      <category>iPhone</category>
      <category>Objective C</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=31#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=31</guid>
      <pubDate>Thu, 14 Jan 2010 09:52:16 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Bus Tracker: Adding a Favorites View</title>
      <description>&lt;p&gt;This will be the first simple tutorial covering some of the new things I am tackling as I build my first iPhone app.  Today I want to go over creating a table view that will show a list of favorites that the user has already selected; this will basically mimic the &amp;#8220;Favorites&amp;#8221; Tab in the Phone app.  I am going to keep this one simple, so there will be no adding of Favorites this time&amp;#8230; that can be for another time.&lt;/p&gt;
&lt;p&gt;Here is what we want to accomplish(with Editing mode on the right):&lt;br /&gt;
&lt;a href="http://www.ryanferretti.com/blog/wp-content/uploads/2010/01/favorites.jpg"&gt;&lt;img src="http://www.ryanferretti.com/blog/wp-content/uploads/2010/01/favorites-200x300.jpg" alt="" title="favorites" width="200" height="300" class="alignleft size-medium wp-image-62" /&gt;&lt;/a&gt;&lt;a href="http://www.ryanferretti.com/blog/wp-content/uploads/2010/01/favorites-edit.jpg"&gt;&lt;img src="http://www.ryanferretti.com/blog/wp-content/uploads/2010/01/favorites-edit-200x300.jpg" alt="" title="favorites-edit" width="200" height="300" class="alignright size-medium wp-image-69" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear:both"&gt;&lt;/div&gt;
&lt;p&gt;On to the code&amp;#8230; lets start out by looking at the FavoritesViewController.h:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
@interface FavoritesViewController : UIViewController &amp;lt;UITableViewDataSource&amp;gt; {
	NSMutableArray *favorites;
	UITableView *myTableView;
	UINavigationItem *navItem;
	UIBarButtonItem *editButton;
	UIBarButtonItem *addButton;
}

@property(nonatomic,retain) IBOutlet UIBarButtonItem *addButton;
@property(nonatomic,retain) IBOutlet UIBarButtonItem *editButton;
@property(nonatomic,retain) IBOutlet UINavigationItem *navItem;
@property(nonatomic,retain) IBOutlet UITableView *myTableView;
@property(nonatomic,retain) NSMutableArray *favorites;

-(IBAction) addClicked:(id)sender;
-(IBAction) editClicked:(id)sender;
@end
&lt;/pre&gt;
&lt;p&gt;The &amp;#8216;favorites&amp;#8217; array is the DataSource for the myTableView object.  The navItem is the bar at the top of the screen that shows our &amp;#8220;Favorites&amp;#8221; label and holds the editButton and addButton; I made these IBOutlets so I could set them in Interface Builder.  The 2 IBActions will fire when their respective buttons are pressed&amp;#8230; lets focus on the editClicked method.  When the user presses the Edit button, we want to tell the TableView to go into editing-mode and then update the buttons to show their correct state.&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
-(IBAction) editClicked:(id)sender {
	[self.myTableView setEditing:YES animated:YES];
	UIBarButtonItem *doneButton =
		[[UIBarButtonItem alloc]
		   initWithBarButtonSystemItem:UIBarButtonSystemItemDone
		   target:self
		   action:@selector(doneEditingTable)];
	navItem.leftBarButtonItem  = doneButton;
	navItem.rightBarButtonItem = nil;
	[doneButton release];
}
&lt;/pre&gt;
&lt;p&gt;Pretty simple stuff right!&amp;#8230; When the User presses the newly created &amp;#8220;Done&amp;#8221; button, the doneEditingTable method will fire so we can deal with the clean up.  Before that happens though, the user will probably want to actually delete a row.  The framework will handle all of the animation that happens when the user presses the little circle to the left of the text.  &lt;strong&gt;UPDATE:&lt;/strong&gt; I found an easier implementation for the Edit/Done button&amp;#8230; &lt;a href="http://www.ryanferretti.com/blog/?p=120"&gt;check out my short post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After the &amp;#8220;Delete&amp;#8221; button is hit, the commitEditingStyle method is called so you will need to override it:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

	if (editingStyle == UITableViewCellEditingStyleDelete) {
		UserDataService *dataService = [(BusTrackerAppDelegate*)[UIApplication sharedApplication].delegate userDataService];

		FavoriteStop *favorite = [favorites objectAtIndex:indexPath.row];
		[dataService deleteFavorite:favorite];

		// Update the array and table view.
		[favorites removeObjectAtIndex:indexPath.row];
		[self.myTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
	}
}
&lt;/pre&gt;
&lt;p&gt;As you can see, first I need to delete the FavoriteStop object from my db via my UserDataService.  After the service method successfully finishes the deletion, the TableView needs to be updated to reflect the new list of favorites.  Instead of reloading all of the data for the list, you can just delete the corresponding row from the table&amp;#8217;s data source and TableView.  When the user is ready to finish deleting, they hit the &amp;#8220;Done&amp;#8221; button which fires an action to the doneEditingTable method.  The only thing left to do in order to get back to the &amp;#8220;Normal&amp;#8221; state (like when the view first loaded) is to reset the buttons.&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
- (void) doneEditingTable {
	[self.myTableView setEditing:NO animated:YES];
	navItem.leftBarButtonItem  = editButton;
	navItem.rightBarButtonItem = addButton;
}
&lt;/pre&gt;
&lt;p&gt;I had to keep a reference to the original buttons on top because they were removed earlier, so I made sure to connect them in Interface Builder (see the interface editButton/addButton outlets).  After that method finishes, the user is back to the original view&amp;#8230; you are done!&lt;/p&gt;
&lt;p&gt;Finally, if you want to add sorting to the edit view you only need to overload a few more methods:&lt;/p&gt;
&lt;pre class="brush: objc"&gt;
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
        // if you want to prevent a specific row from moving
	if (indexPath.row == 0) {
	    	return NO;
	}
	return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
	FavoriteStop *favorite = [[self.myTableView objectAtIndex:sourceIndexPath.row]];
        // update sort order in db
        // ...........
	[self.myTableView removeObjectAtIndex:sourceIndexPath.row];
	[self.myTableView insertObject:favorite atIndex:destinationIndexPath.row];
}
&lt;/pre&gt;
&lt;p&gt;There are more advanced ways to do this stuff, so &lt;a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/TableView_iPhone/Introduction/Introduction.html"&gt;check out the great doc&lt;/a&gt; on the apple dev site.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/Q5Cu-Vnfa0U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/Q5Cu-Vnfa0U/</link>
      <category>Tech</category>
      <category>Bus Tracker</category>
      <category>iPhone</category>
      <category>Objective C</category>
      <category>Redpoint</category>
      <category>TableView</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=61#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=61</guid>
      <pubDate>Wed, 13 Jan 2010 14:44:06 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Flex Builder error: The project properties files could not be read.</title>
      <description>My recent flex adventure almost came to a crashing end when I shut down and restarted Eclipse, only to find that my file's project properties could no longer be read?!?!&amp;nbsp; I got very angry trying to figure out what happened, thinking to myself that I recently tried committing my project to SVN via subclipse (which is another story on its own).&amp;nbsp; One thing I'm very happy I did was create a backup before trying to commit.&amp;nbsp; Pretty much every time I tried to open my project I got the project properties files could not be read.&amp;nbsp; I looked at the .actionScript and .project files, and couldn't see anything missing.&amp;nbsp; I looked high and low, and ran a -diff on my project and the backup copy.&amp;nbsp; Turns out, I was missing the .flexProperties file.&amp;nbsp; How that got deleted from the project I don't know, but it was horrifyingly maddening to only get a mystic message saying the project properties files could not be read.&amp;nbsp; Which files?!?&amp;nbsp; A better message would be preferred, but alas, I copied the old over to the project folder, and I'm back in shape.&amp;nbsp; Lesson learned, if you get this error, make sure you have all three project files in the correct location (aka CYA).&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.benclinkinbeard.com/2009/09/flex-builder-error-the-project-properties-files-could-not-be-read/"&gt;Ben Clinkenbeard&lt;/a&gt; and &lt;a href="https://bugs.adobe.com/jira/browse/FB-21707" onclick="javascript: pageTracker._trackPageview('/2009/09/flex-builder-error-the-project-properties-files-could-not-be-read/links/erichelier');"&gt;Eric Hélier&lt;/a&gt; for getting me in the right direction!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-2522653607707529588?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/flex-builder-error-project-properties.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-2522653607707529588</guid>
      <pubDate>Wed, 13 Jan 2010 09:50:00 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: Multiple Nib Files are Better than One</title>
      <description>&lt;p&gt;Nib files (.xib) are Interface Builder User Interface Resources files used to describe the View portion of a Cocoa application (os x, iphone).  It isn&amp;#8217;t too difficult to learn how to use Interface Builder (IB), but there are a few important things to know about Nibs before jumping into the mess.  At design time in IB you can layout user interface controls, add controller objects, and define connections between those controllers and the UI.  When you save your Nib, IB will archive those objects.  At runtime, the objects are unarchived with same values as you set within IB.&lt;/p&gt;
&lt;p&gt;One simple but important thing to remember is to make sure you break up your UI into multiple Nib files.  You CAN put everything you want into 1 Nib file&amp;#8230; TableViewController1 -&amp;gt; TableViewController2 -&amp;gt; TableViewController3 -&amp;gt; DetailsController&amp;#8230; but even if you CAN do something, it doesn&amp;#8217;t mean you SHOULD.  If you have a Nib file that contains a lot of objects it is going to cause your application to load ALL of those objects when the Nib is loaded.  For instance&amp;#8230; in the example I had before, lets say you only wanted to load the TableViewController1 and show its data (when the user selects a row in Table1, you then want to load Table2).  If you have everything in 1 Nib file then your app is going to call  [TableViewController1 viewDidLoad], [TableViewController2 viewDidLoad], [TableViewController3 viewDidLoad], and [DetailsController viewDidLoad]&amp;#8230; all because the framework is loading each object into memory.&lt;/p&gt;
&lt;p&gt;If you are developing for the iphone, you probably don&amp;#8217;t want to use up that memory when you have no idea whether or not the user will even click through to the DetailsController.  If you separate your that big Nib file into multiple files you will be able to preserve the lazy loading functionality of the framework and save yourself headaches in the future.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/mH49TsXmlH0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/mH49TsXmlH0/</link>
      <category>Tech</category>
      <category>Interface Builder</category>
      <category>iPhone</category>
      <category>Objective C</category>
      <category>Performance</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=23#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=23</guid>
      <pubDate>Tue, 12 Jan 2010 12:52:58 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Massive amounts of memory consumption via image swapping in Flex</title>
      <description>On my project, I was using &lt;a href="http://demonsterdebugger.com/"&gt;De MonsterDebugger&lt;/a&gt; (DMD) (great tool, easy to implement, but can get heavy if you don't have a lot of RAM - peaks at about 150MB for me, which can hurt because I'm running on only 2 GB).&amp;nbsp; In my project, I am rolling over canvases, and on each rollover, the background of the application should have its images change.&amp;nbsp; My initial development had me doing this by changing the style of the Application (application.setStyle("backgroundImage",assets/myNewImg)).&amp;nbsp; And to make the transition smooth, I had a second Image that I was using on top of the background, but underneath all the other components (z level = lowest possible).&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The problem quickly became clear (even more so w/ DMD because I could see why my computer would stop responding when debugging, i.e. my RAM usage was spiking).&amp;nbsp; In the last several days I have been reading about garbage collection (GC) and how it seems to act on its own accord.&amp;nbsp; It was happening w/ my app, which would always return to about 40MB in runtime, but could (and often did) spike upwards of 250MB!!!&amp;nbsp; All that for a single swf file running in Safari.&amp;nbsp; I checked my objects, commented out different things (including custom turtle border graphics), and went through item by item that could've ran up so much RAM.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Finally it came back to my images being swapped in and out.&amp;nbsp; I thought the image class could handle changing sources quickly, but it turns out, that was eating huge resources to render the image (all while doing some lightweight tweening).&amp;nbsp; I tried my best to build this application to follow OOP and reusability as best as I could.&amp;nbsp; The data source (an xml config file) is what drives the layout and information of the app, so I wanted to avoid embedding anything that needed to be called up explicitly w/ a case/if.&amp;nbsp; But alas, I could only do so much before I had to make some exceptions in my class and embed the background images, and use a case statement to assign it correctly on hover.&amp;nbsp; Once here, and once I realized that changing two background images (one stacked on the other to allow me to transition smoothly - read fade - meant I needed two images).&amp;nbsp;&lt;br /&gt;&lt;br /&gt;My app now only spikes at about 68MB, no matter how many transitions I make, and I don't have to try to force GC (which eventually happens during idle time).&amp;nbsp; The last thing I think I'd like to try is possibly improving the cpu performance and keeping the fan from getting hot by adjusting frame rate, but for now, I'm happy that my app doesn't spike so much anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-6334270939615259312?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/massive-amounts-of-memory-consumption.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-6334270939615259312</guid>
      <pubDate>Mon, 11 Jan 2010 21:18:00 GMT</pubDate>
    </item>
    <item>
      <title>Ryan Ferretti: iPhone App Developement: Chicago Bus Tracker</title>
      <description>&lt;p&gt;I have been wanting to dive into developing and deploying a real iPhone application but have had a hard time deciding on what type of app to make.  I recently came across an article talking about the CTA developing a &lt;a href="http://www.transitchicago.com/developers/bustracker.aspx" target="_blank"&gt;web services API &lt;/a&gt;that will allow developers the ability to access all GPS data and arrival times for the buses in the system.  This seemed like it would be a great candidate to use in an iPhone app because it would consist of getting data from web services, saving user data locally, using the maps api, displaying different views and controls, and parsing xml into objects&amp;#8230; plus&amp;#8230; it is an app I can actually use since I ride the bus a ton during the winter.  In the next few days I&amp;#8217;ll be posting my experience as I build this app&amp;#8230; I&amp;#8217;ll try and throw in some tutorials as I go along.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RyansInsertAdjectiveBlog/~4/v0vUvqcM98A" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/RyansInsertAdjectiveBlog/~3/v0vUvqcM98A/</link>
      <category>Tech</category>
      <category>Bus Tracker</category>
      <category>iPhone</category>
      <category>Redpoint</category>
      <author>Ryan_x0020_Ferretti@redpointtech.com</author>
      <comments>http://www.ryanferretti.com/blog/?p=25#comments</comments>
      <guid isPermaLink="False">http://www.ryanferretti.com/blog/?p=25</guid>
      <pubDate>Mon, 11 Jan 2010 12:48:03 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Smooth scrolling of a horizontallist</title>
      <description>So I tried various makes of horizontal scrolling a horizontallist.&amp;nbsp; I followed these&lt;a href="http://thanksmister.com/?p=450"&gt; examples&lt;/a&gt;, yet either my canvas never added the hlist (because the canvas initialized after I added the hlist, so the hlist was garbage collected before it's parent was initialized), or the scroll bar never moved the list (although I came close to rewriting the scrollhandler function.&amp;nbsp; Suffice it to say, finally my hack involved adding the hlist to my canvas through a calllater(addHList), and then having external buttons be able to scroll my hlist left and right a designated amount based not on the scroll bar of the parent canvas, but on the x coordinate of my hlist.&amp;nbsp; Simple enough!&amp;nbsp; I don't need to worry about overriding the location of the scroll bar, and now i can use something like tweenmax to handle the transitioning of the horizontal lists position, so i get scrolling, and external buttons to move my hlist, and i get all the benefits of an hlist (which has as many columns as i need because i set its columncount = dataprovider.length.&amp;nbsp; if anyone wants to see code, let me know and i'll post an update.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function scrollHorizontalList(e:Event):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var dir:String = e.currentTarget.name;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var end:int;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var pos:int = hList.x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var max:int = hList.dataProvider.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var myTween:TweenMax;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;trace(dir);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(dir == "rButton"){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end = pos + colWidth;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!TweenMax.isTweening(hList)){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//if(hList.x-colWidth*colsToScroll)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myTween = new TweenMax(hList,1,{x: hList.x - colWidth*colsToScroll, ease:Cubic.easeInOut});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myTween.play();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hListScroll+=colsToScroll;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (dir == "lButton") {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end = pos - colWidth;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!TweenMax.isTweening(hList)){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myTween = new TweenMax(hList,1,{x: hList.x + colWidth*colsToScroll, ease:Cubic.easeInOut});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myTween.play();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hListScroll-=colsToScroll;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lButton.enabled = (hListScroll &amp;gt; 0)?true:false; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rButton.enabled = (hListScroll &amp;lt; max-colsToScroll)?true:false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-1386067992670346329?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/smooth-scrolling-of-horizontallist.html</link>
      <category domain="http://www.blogger.com/atom/ns#">flex</category>
      <category domain="http://www.blogger.com/atom/ns#">horizontallist</category>
      <category domain="http://www.blogger.com/atom/ns#">smooth scrolling</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-1386067992670346329</guid>
      <pubDate>Thu, 07 Jan 2010 21:47:00 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Flex -- Label Rotation in ColumnSeries</title>
      <description>If you want the label displayed by a ColumnSeries to be rotated, you don't set a "labelRotation" property like you would on an AxisRenderer.&amp;nbsp; Instead, you set the showLabelVertically property....on the ColumnChart.&amp;nbsp; I don't know why it's there and not on the series.&amp;nbsp; It would be nice if I could configure label rotation individually for each series.&amp;nbsp; More importantly, though, if you use a ColumnSeries, you MUST use a ColumnChart.&amp;nbsp; (You can add a LineSeries to a ColumnChart, but you cannot add a ColumnSeries to a LineChart.)&lt;br /&gt;&lt;br /&gt;In ColumnSeries' updateTransform function, there's this line:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(chart&amp;nbsp; &amp;amp;&amp;amp; !(ColumnChart(chart).showLabelVertically))&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;If the chart is anything but a ColumnChart, you would get an exception because the cast would be invalid.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;The series is merely asking the chart for the value of that showLabelVertically property, so again, why not have it on the series?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-4039955676134318249?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2010/01/flex-label-rotation-in-columnseries.html</link>
      <category domain="http://www.blogger.com/atom/ns#">REDPOINT</category>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-4039955676134318249</guid>
      <pubDate>Wed, 06 Jan 2010 10:07:00 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: FlexBuilder 3 and FlexUnit4 RC1</title>
      <description>This will be a quick post on how to setup FlexBuilder project to use FlexUnit4.  This post will be more prescriptive with just the steps without a lot of explanation.  The FlexUnit site has good documentation.&lt;br /&gt;&lt;br /&gt;1) Setup a Flex Project as you normally would.&lt;br /&gt;2) Download the FlexUnit4 &lt;latest&gt; from this &lt;a href="http://opensource.adobe.com/wiki/display/flexunit/Downloads"&gt;link&lt;/a&gt;.&lt;br /&gt;3) Unzip and copy all of the swc files to your projects libs directory. There should be 4 swc files.&lt;br /&gt;4) create a package/folder under the src directory called flexUnitTests.  It could be called anything.&lt;br /&gt;5) Create a test Suite class.  This is just a POAO ( plain old actionscript object ).  I called mine FlexUnit4Suite and it looked like the following:&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;1:  package flexUnitTests  &lt;br /&gt;2:  {  &lt;br /&gt;3:      import org.flexunit.runners.Suite;  &lt;br /&gt;4:      [Suite]  &lt;br /&gt;5:      [RunWith("org.flexunit.runners.Suite")]   &lt;br /&gt;6:      public class FlexUnit4Suite  &lt;br /&gt;7:      {          &lt;br /&gt;8:          public var testCase1:MyTestCase;  &lt;br /&gt;9:      }  &lt;br /&gt;10:  }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Lines 4 and 5 are the most interesting.  Use the Suite and RunsWith metadata tags.  Line 8 is a reference to your TestCase class.  As you add more TestCase classes, just add a new variable here.  You dont have to instantiate it, or anything - just declare it.&lt;br /&gt;&lt;br /&gt;6) Create your TestCase class, which again is a POAO.  Mine looked like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;1:  package flexUnitTests  &lt;br /&gt;2:  {  &lt;br /&gt;3:      import flexunit.framework.Assert;  &lt;br /&gt;4:      public class MyTestCase  &lt;br /&gt;5:      {  &lt;br /&gt;6:          public function MyTestCase()  &lt;br /&gt;7:          {  &lt;br /&gt;8:          }  &lt;br /&gt;9:          [BeforeClass]  &lt;br /&gt;10:          public static function runBeforeClass():void {  &lt;br /&gt;11:              trace("runBeforeClass");  &lt;br /&gt;12:          }  &lt;br /&gt;13:          [AfterClass]  &lt;br /&gt;14:          public static function runAfterClass():void {  &lt;br /&gt;15:              trace("runAfterClass");  &lt;br /&gt;16:          }  &lt;br /&gt;17:          [Before]  &lt;br /&gt;18:      public function runBeforeEveryTest():void   &lt;br /&gt;19:      {  &lt;br /&gt;20:        trace("runBeforeEveryTest");  &lt;br /&gt;21:      }  &lt;br /&gt;22:      [After]  &lt;br /&gt;23:      public function runAfterEveryTest():void   &lt;br /&gt;24:      {  &lt;br /&gt;25:          trace("runAfterEveryTest");  &lt;br /&gt;26:      }  &lt;br /&gt;27:      [Test]   &lt;br /&gt;28:      public function testTrue():void  &lt;br /&gt;29:      {  &lt;br /&gt;30:          trace("checkMethod");  &lt;br /&gt;31:          Assert.assertTrue( true );  &lt;br /&gt;32:      }  &lt;br /&gt;33:          [Ignore("Not Ready to Run")]  &lt;br /&gt;34:      [Test]  &lt;br /&gt;35:      public function testNotReady():void   &lt;br /&gt;36:      {  &lt;br /&gt;37:        Assert.assertFalse( true );  &lt;br /&gt;38:      }          &lt;br /&gt;39:      }  &lt;br /&gt;40:  }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;7) Create a new Application for the test runner.  You dont have to create a new application, but I assume you already have an Application class that really runs your application.  I created another Application called FlexUnitTestRunner.  It looked like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;1:  &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;  &lt;br /&gt;2:  &amp;lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  &lt;br /&gt;3:      xmlns:flexunitrunning="http://www.adobe.com/2009/flexUnitUIRunner"  &lt;br /&gt;4:      minWidth="1024" minHeight="768" creationComplete="onCreationComplete()"&amp;gt;  &lt;br /&gt;5:      &amp;lt;mx:Script&amp;gt;  &lt;br /&gt;6:          &amp;lt;![CDATA[  &lt;br /&gt;7:              import flexUnitTests.FlexUnit4Suite;  &lt;br /&gt;8:              import org.flexunit.listeners.UIListener;  &lt;br /&gt;9:              import org.flexunit.runner.FlexUnitCore;  &lt;br /&gt;10:              private var flexUnitCore:FlexUnitCore;  &lt;br /&gt;11:              private function onCreationComplete():void {  &lt;br /&gt;12:                  flexUnitCore = new FlexUnitCore();  &lt;br /&gt;13:                  flexUnitCore.addListener(new UIListener( testRunner));  &lt;br /&gt;14:                  flexUnitCore.run(FlexUnit4Suite);  &lt;br /&gt;15:              }  &lt;br /&gt;16:          ]]&amp;gt;  &lt;br /&gt;17:      &amp;lt;/mx:Script&amp;gt;  &lt;br /&gt;18:      &amp;lt;flexunitrunning:TestRunnerBase id="testRunner" width="100%" height="100%" /&amp;gt;  &lt;br /&gt;19:  &amp;lt;/mx:Application&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Run the FlexUnitTestRunner application and my console output looked like:&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;1:  runBeforeClass  &lt;br /&gt;2:  runBeforeEveryTest  &lt;br /&gt;3:  checkMethod  &lt;br /&gt;4:  runAfterEveryTest  &lt;br /&gt;5:  runAfterClass  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and a browser window popped up with the results of my test case.&lt;br /&gt;&lt;br /&gt;Thats it in a nutshell how to get a Flex Builder 3, sdk 3.5, FlexUnit4 up and running quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-7058009379632134842?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/01/flexbuilder-3-and-flexunit4-rc1.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Flex</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-7058009379632134842</guid>
      <pubDate>Tue, 05 Jan 2010 23:52:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Eclipse .ini changes</title>
      <description>FB3 breaks then fixes, all because I forgot an 'm' in my init file.&amp;nbsp; Actually, I was trying to change the min, max, and permanent sizes of my eclipse runtime, and I accidentally deleted one of the 'm's, and then eclipse never started or worked for me again.&amp;nbsp; I got really angry, wasted 30 minutes trying to figure out what happened, including trying to read the logs and see where it went wrong, and finally decided to skip ahead and reinstall eclipse (3.4.2 of course, as FB3 won't work on 3.5, &lt;a href="http://margelatu.org/2009/06/30/migrating-to-eclipse-galileo-and-the-flash-builder-4-plug-in/"&gt;although some have figured it out&lt;/a&gt;.)&amp;nbsp; So long story short, I reinstalled, did the software update to &lt;a href="http://blog.flashgen.com/2009/04/09/reconnecting-flex-builder-plug-in-to-eclipse/"&gt;re-attach FB3 plugin&lt;/a&gt; (the new 3.5 sdk rocks!), and then couldn't get SVN to attach via subclipse.&amp;nbsp; Another half hour later, and I returned to my .ini file, checked it against my old install, found the missing 'm', almost kicked myself, fixed the 'm', and now I have everything back in order.how annoying!&amp;nbsp; Although, now &lt;a href="http://www.aptana.com/"&gt;Aptana&lt;/a&gt; makes things a bit slower...anyone else having that problem?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-6987551031914289219?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/eclipse-ini-changes.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-6987551031914289219</guid>
      <pubDate>Tue, 05 Jan 2010 21:37:00 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: FlexORM</title>
      <description>What seems like many years ago now, because it was - I saw a presentation by Christophe Coenraets where he talked about a simple ORM for AIR.  You can see the original blog post &lt;a href="http://coenraets.org/blog/2007/10/annotating-actionscript-classes-with-custom-metadata-simple-orm-framework-for-air/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have used Hibernate for many years, and now most recently GORM and I am a big fan of ORM tools when used right and in the right measure.&lt;br /&gt;&lt;br /&gt;When I started looking at an AIR application I decided to revisit the work done in that original blog posting and I was very pleased to see that work had continued on with the ORM mapping, now called FlexORM. (Which is an interesting name since it only works with AIR ).  You can find more information about the FlexORM tool &lt;a href="http://flexorm.riaforge.org/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What I am going to do is present some examples of how I used it.  I am hoping that my examples will help answer your questions on how to use the tool or inspire you start using it.&lt;br /&gt;&lt;br /&gt;In my simple application my domain model is one where a Project can have sub-projects to form a project hierarchy and each project can have many TimeEntry references but a TimeEntry is only allocated to a single Project.&lt;br /&gt;&lt;br /&gt;Lets look at the Project domain class first.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package com.redpointtech.domain&lt;br /&gt;{&lt;br /&gt;  import mx.collections.ArrayCollection;&lt;br /&gt;  import mx.collections.IList;&lt;br /&gt;&lt;br /&gt;  [Bindable]&lt;br /&gt;  [Table( name=&amp;quot;PROJECT&amp;quot;)]&lt;br /&gt;  public class Project&lt;br /&gt;  {&lt;br /&gt;    // each project can contain a number of child or&lt;br /&gt;    // sub projects.&lt;br /&gt;    private var _subProjects:IList = new ArrayCollection();&lt;br /&gt;    private var _timeEntries:IList = new ArrayCollection();&lt;br /&gt;    &lt;br /&gt;    [Id]&lt;br /&gt;    public var id:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;proj_name&amp;quot;)]&lt;br /&gt;    public var name:String;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;proj_desc&amp;quot;)]&lt;br /&gt;    public var desc:String;&lt;br /&gt;    &lt;br /&gt;    [Column(name=&amp;quot;color&amp;quot;)]&lt;br /&gt;    public var color:Number;&lt;br /&gt;    &lt;br /&gt;    [ManyToOne(name=&amp;quot;parent_id&amp;quot;, inverse=&amp;quot;true&amp;quot;)]&lt;br /&gt;    public var parent:Project;&lt;br /&gt;    &lt;br /&gt;    [OneToMany(type=&amp;quot;com.redpointtech.domain.Project&amp;quot;, fkColumn=&amp;quot;parent_id&amp;quot;, lazy=&amp;quot;false&amp;quot;, cascade=&amp;quot;save-update&amp;quot;, indexed=&amp;quot;true&amp;quot;)]&lt;br /&gt;    public function set subProjects(value:IList):void {&lt;br /&gt;      _subProjects = value;&lt;br /&gt;    }&lt;br /&gt;    public function get subProjects():IList {&lt;br /&gt;      return _subProjects;&lt;br /&gt;    }&lt;br /&gt;    public function addSubProject(value:Project):void {&lt;br /&gt;      value.parent = this;&lt;br /&gt;      _subProjects.addItem(value);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [OneToMany(type=&amp;quot;com.redpointtech.domain.TimeEntry&amp;quot;, fkColumn=&amp;quot;project_id&amp;quot;, lazy=&amp;quot;true&amp;quot;, cascade=&amp;quot;all&amp;quot;, indexed=&amp;quot;true&amp;quot;)]&lt;br /&gt;    public function set timeEntries(value:IList):void {&lt;br /&gt;      _timeEntries = value;&lt;br /&gt;    }&lt;br /&gt;    public function get timeEntries():IList {&lt;br /&gt;      return _timeEntries;&lt;br /&gt;    }&lt;br /&gt;    public function addTimeEntry(value:TimeEntry):void {&lt;br /&gt;      value.project = this;&lt;br /&gt;      _timeEntries.addItem(value);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    public function Project()&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The primary metadata tags I used user:&lt;br /&gt;[Table( name="tbd")] to define the table name for the domain object.&lt;br /&gt;&lt;br /&gt;[Id] to tell the ORM which field is used for an id.  As of right now the id value must be of type 'int'.&lt;br /&gt;&lt;br /&gt;[Column( name="tbd")] to define the column name for a property.  If the name field is not specified then it uses the property name.&lt;br /&gt;&lt;br /&gt;[ManyToOne(name="col name", inverse="true/false")] to define the ManyToOne relationship with itself.  &lt;br /&gt;&lt;br /&gt;[OneToMany(...)] metadata tag is specific on the set/get methods.  Also noticed that we added an 'add' method which sets the parent of the Project and adds the Project to the collection of sub projects.&lt;br /&gt;&lt;br /&gt;The TimeEntry class looks like the following:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package com.redpointtech.domain&lt;br /&gt;{&lt;br /&gt;  import com.redpointtech.util.Constants;&lt;br /&gt;&lt;br /&gt;  [Bindable]&lt;br /&gt;  [Table( name=&amp;quot;TIMEENTRY&amp;quot;)]&lt;br /&gt;  public class TimeEntry&lt;br /&gt;  {&lt;br /&gt;    &lt;br /&gt;    [Id]&lt;br /&gt;    public var id:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;full_year&amp;quot;)]&lt;br /&gt;    public var fullYear:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;month&amp;quot;)]&lt;br /&gt;    public var month:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;day_of_month&amp;quot;)]&lt;br /&gt;    public var dayOfMonth:int; // Date.date equivalent&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;start_hour&amp;quot;)]&lt;br /&gt;    public var startHour:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;start_min&amp;quot;)]&lt;br /&gt;    public var startMin:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;end_hour&amp;quot;)]&lt;br /&gt;    public var endHour:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;end_min&amp;quot;)]&lt;br /&gt;    public var endMin:int;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;notes&amp;quot;)]&lt;br /&gt;    public var notes:String=&amp;quot;&amp;quot;;&lt;br /&gt;    &lt;br /&gt;    [Column( name=&amp;quot;summary&amp;quot;)]&lt;br /&gt;    public var summary:String=&amp;quot;&amp;quot;;&lt;br /&gt;    &lt;br /&gt;    [ManyToOne(name=&amp;quot;project_id&amp;quot;, inverse=&amp;quot;true&amp;quot;)]&lt;br /&gt;    public var project:Project;&lt;br /&gt;    &lt;br /&gt;    public function TimeEntry()&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public function setDate(date:Date):void {&lt;br /&gt;      fullYear = date.fullYear;&lt;br /&gt;      month = date.month;&lt;br /&gt;      dayOfMonth = date.date;&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;    public function setStartTime( hour:int, min:int):void {&lt;br /&gt;      startHour = hour;&lt;br /&gt;      startMin = min;&lt;br /&gt;    }&lt;br /&gt;    public function getStartDate():Date {&lt;br /&gt;      var startDate:Date = new Date(fullYear, month,dayOfMonth,startHour,startMin);&lt;br /&gt;      return startDate;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public function setEndTime(hour:int, min:int):void {&lt;br /&gt;      endHour = hour;&lt;br /&gt;      endMin = min;      &lt;br /&gt;    }&lt;br /&gt;    public function getEndDate():Date {&lt;br /&gt;      var endDate:Date = new Date(fullYear,month,dayOfMonth,endHour,endMin);&lt;br /&gt;      return endDate;&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;    private function _getTimeDiffInMillis():Number {&lt;br /&gt;      var startDate:Date = getStartDate();&lt;br /&gt;      &lt;br /&gt;      var endDate:Date = getEndDate();      &lt;br /&gt;      &lt;br /&gt;      var diff:Number = endDate.getTime() - startDate.getTime();&lt;br /&gt;&lt;br /&gt;      return diff;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Transient]&lt;br /&gt;    public function get elapsedHours():Number {&lt;br /&gt;      var diff:Number = _getTimeDiffInMillis();&lt;br /&gt;      &lt;br /&gt;      var hours:Number = diff / Constants.millisecondsPerHour;&lt;br /&gt;      &lt;br /&gt;      var floorHours:Number = Math.floor(hours);&lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      return floorHours;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Transient]&lt;br /&gt;    public function get elapsedMinutes():Number {&lt;br /&gt;      var hours:Number = elapsedHours;&lt;br /&gt;      var milliHours:Number = hours * Constants.millisecondsPerHour;&lt;br /&gt;      &lt;br /&gt;      var diff:Number = _getTimeDiffInMillis();&lt;br /&gt;      &lt;br /&gt;      var minuteDiff:Number = diff - ( milliHours );&lt;br /&gt;      &lt;br /&gt;      var minutes:Number = minuteDiff / Constants.millisecondsPerMinute;&lt;br /&gt;      var roundedMinutes:Number = Math.min(Math.round(minutes),59);&lt;br /&gt;      return roundedMinutes;&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The only real difference is the use of Transient to tell FlexORM that these are not used in the persistence of the object.&lt;br /&gt;&lt;br /&gt;Now that we have a feel for how to annotate our domain classes to be used by FlexORM, lets see how to persist them to the database.&lt;br /&gt;&lt;br /&gt;I am using FlashBuilder Beta2 with FlexUnit4 RC1.  I will go over the integration of FlashBuilder and FlexUnit in another blog posting.  For this one I wanted to remain focused on using FlexORM.&lt;br /&gt;&lt;br /&gt;Below is a unit test function to test Project CRUD ( create read update delete )&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    [Test]&lt;br /&gt;    public function testCRUDNoHier():void {&lt;br /&gt;      trace(&amp;quot;----------------testCRUDNoHier----------------&amp;quot;);&lt;br /&gt;      var em:EntityManager = EntityManager.instance;&lt;br /&gt;&lt;br /&gt;      var p:Project = new Project();&lt;br /&gt;      p.name=&amp;quot;P1&amp;quot;;&lt;br /&gt;      p.desc = &amp;quot;proj from unit test&amp;quot;;&lt;br /&gt;      p.color=0xFF001E;&lt;br /&gt;      &lt;span style="font-weight:bold;"&gt;em.save(p);&lt;/span&gt;&lt;br /&gt;      &lt;br /&gt;      Assert.assertEquals(&amp;quot;P1&amp;quot;,p.name);&lt;br /&gt;      &lt;br /&gt;      var p2:Project = new Project();&lt;br /&gt;      p2.name=&amp;quot;P2&amp;quot;;&lt;br /&gt;      p2.desc = &amp;quot;proj2 from unit test&amp;quot;;&lt;br /&gt;      p2.color=0xAAAAAA;&lt;br /&gt;      &lt;span style="font-weight:bold;"&gt;em.save(p2);&lt;/span&gt;&lt;br /&gt;      &lt;br /&gt;      Assert.assertEquals(&amp;quot;P2&amp;quot;,p2.name);&lt;br /&gt;      Assert.assertEquals(&amp;quot;P1&amp;quot;,p.name);&lt;br /&gt;&lt;br /&gt;      var p1:Project = &lt;span style="font-weight:bold;"&gt;em.loadItem(Project, p.id) as Project;&lt;/span&gt;&lt;br /&gt;      Assert.assertEquals(&amp;quot;P1&amp;quot;,p1.name);&lt;br /&gt;      &lt;br /&gt;      var ps:ArrayCollection = em.findAll(Project);&lt;br /&gt;      Assert.assertEquals(2,ps.length);&lt;br /&gt;      &lt;br /&gt;      p1.desc = &amp;quot;New P1 desc&amp;quot;;&lt;br /&gt;      em.save(p1);&lt;br /&gt;      &lt;br /&gt;      var p3:Project = &lt;span style="font-weight:bold;"&gt;em.loadItem(Project,p1.id) as Project;&lt;/span&gt;&lt;br /&gt;      Assert.assertEquals(&amp;quot;New P1 desc&amp;quot;, p3.desc);&lt;br /&gt;      &lt;br /&gt;      &lt;span style="font-weight:bold;"&gt;em.remove(p2);&lt;/span&gt;&lt;br /&gt;      ps = em.findAll(Project);&lt;br /&gt;      Assert.assertEquals(1,ps.length);&lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We start the test method by getting a reference to the EntityManager via EntityManager.instance.  The first thing we do in the test case, is to create a Project and the save it to the DB via the em.save(p).  &lt;br /&gt;&lt;br /&gt;That is all you have to do to save an entity, you do not need to write any sql yet.&lt;br /&gt;&lt;br /&gt;To load an item for which you have the id, you use the loadItem method passing in the Project class and the id value.  &lt;br /&gt;&lt;br /&gt;To find all records for a particular class, you use the findAll method.&lt;br /&gt;&lt;br /&gt;FlexORM even has a Criteria API.  While it is not on the same level as the Hibernate Criteria, it is still very useful.&lt;br /&gt;&lt;br /&gt;Below is an example method to find TimeEntries on a particular day:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    public static function findAllOn(fullYear:Number,month:Number=-1,dayOfMonth:Number=-1):ArrayCollection {&lt;br /&gt;      var teCriteria:Criteria = entityManager.createCriteria(TimeEntry);&lt;br /&gt;      teCriteria.addEqualsCondition(&amp;quot;fullYear&amp;quot;, fullYear);&lt;br /&gt;      if( month &amp;gt; -1 ) teCriteria.addEqualsCondition(&amp;quot;month&amp;quot;,month);&lt;br /&gt;      if( dayOfMonth &amp;gt; -1 ) teCriteria.addEqualsCondition(&amp;quot;dayOfMonth&amp;quot;,dayOfMonth);&lt;br /&gt;      teCriteria.addSort(&amp;quot;startHour&amp;quot;);&lt;br /&gt;      &lt;br /&gt;      return entityManager.fetchCriteria(teCriteria);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You use the EntityManager to create the criteria for an annotated class.  In this example I am using simple conditions to see that the TimeEntry has values that equal those passed in, and then sort the returned values based on the starting hour.&lt;br /&gt;&lt;br /&gt;Again - so far I have created no sql myself.  I am sure I will have a case where I need to hand craft some sql, and this will be fairly easy even with the EntityManager.  &lt;br /&gt;&lt;br /&gt;The idea behind the ORM tools, IMHO, is not to take over all of the persistence work but instead take over the mundane and tedious persistence work so we can concentrate on the more difficult tasks.  So far FlexORM has done that.&lt;br /&gt;&lt;br /&gt;I hope this quick example was useful in getting you interested in looking at FlexORM.  &lt;br /&gt;&lt;br /&gt;Next time I will discuss how I used FlashBuilder Beta2 and FlexUnit to test the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-1543237683086966296?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2010/01/flexorm.html</link>
      <category domain="http://www.blogger.com/atom/ns#">AIR</category>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Flex</category>
      <category domain="http://www.blogger.com/atom/ns#">FlexORM</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-1543237683086966296</guid>
      <pubDate>Sun, 03 Jan 2010 18:02:00 GMT</pubDate>
    </item>
    <item>
      <title>Mike Galvin: Problem Rendering a Horizontal Chart Legend in Flex</title>
      <description>A big frustration I have with Flex is getting components laid out the way I intended.&amp;nbsp; Usually the problem is with me setting improper values for height, width or what have you.&amp;nbsp; By placing different colored borders around my components, I can often see where I went wrong.&lt;br /&gt;&lt;br /&gt;Sometimes, though, Flex just won't let me have things my way.&amp;nbsp; I almost always want a chart legend to be centered and the legend items rendered horizontally, so I'll wrap a Legend control in an HBox like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt; &amp;lt;mx:HBox width="100%" horizontalAlign="center" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mx:Legend dataProvider="{theChart}" direction="horizontal" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/mx:HBox&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This has worked for me 99% of the time.&amp;nbsp; The other 1% of the time, no matter how I configured my mxml, Flex would render my chart legend vertically.&amp;nbsp; The problem took a while to figure out, but the solution was simple.&lt;br /&gt;&lt;br /&gt;In the Legend class, calcColumnWidthsForWidth gets called twice, once with preferredWidth and again with unscaledWidth.&amp;nbsp; For some reason, the unscaledWidth is Math.floor(preferredWidth).&amp;nbsp; The problem with that is calcColumnWidthsForWidth has calculated the layout for the larger value, and now we've just taken away up to 0.99 pixels of the space it was counting on.&amp;nbsp; For example, Flex might calculate that it needs a width of 914.32 pixels to lay out the legend items horizontally, but in another calculation, it thinks only 914 is available, so it will lay out the legend items vertically instead.&lt;br /&gt;&lt;br /&gt;To get around this, extend the Legend class, override the measure function and round up the preferredWidth.&amp;nbsp; Since we don't have access to preferredWidth, do this to measuredWidth to achieve the same effect:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function measure():void {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.measure();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; measuredWidth = Math.ceil(measuredWidth);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2901499053588406834-579631668390788328?l=rationalrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://rationalrain.blogspot.com/2009/12/problem-rendering-horizontal-chart.html</link>
      <category domain="http://www.blogger.com/atom/ns#">REDPOINT</category>
      <author>Mike_x0020_Galvin@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-2901499053588406834.post-579631668390788328</guid>
      <pubDate>Tue, 29 Dec 2009 13:43:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Flex, AR and speed improvement</title>
      <description>I am working on an AR project for a client when I ran into major performance issues.&amp;nbsp; It drove me batty because I tested out a bunch of stuff and couldn't get the performance up.&amp;nbsp; For starters, I am using a dae file (standard stuff), then I load it in using collada, and that's where the crap started bottoming out.&amp;nbsp; I tried multiple ways to fix it, testing whether it was my app, the dae, the AR, or what!&amp;nbsp; I even connected w/ ARToolworks and Eric Socolofsky.&amp;nbsp; They made some suggestions, like using Windows to take advantage of FP10.1.5's newest drivers which are great on the graphics card (but don't help me because I'm on a Mac).&amp;nbsp; Instead, after countless hours and angry griping, I happened upon a small discovery, the rendering engine in Papervision.&amp;nbsp; This little sucker is rendering my dae and making my 3D model work.&amp;nbsp; Well, it was using Quadrant, which was eating up about every resource to make my model look nice and smooth.&amp;nbsp; Once I switched that to Lazy, I got a huge performance boost (going from 1-2 fps up to 10-11 fps).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-1349686799981002963?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2010/01/flex-ar-and-speed-improvement.html</link>
      <category domain="http://www.blogger.com/atom/ns#">flex</category>
      <category domain="http://www.blogger.com/atom/ns#">PV3D</category>
      <category domain="http://www.blogger.com/atom/ns#">AR</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-1349686799981002963</guid>
      <pubDate>Tue, 15 Dec 2009 21:44:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Who works in a corporate environment and is allowed to use FB4 yet?</title>
      <description>FB4 - oh how I pine for you!&lt;br /&gt;&lt;br /&gt;Actually, I wanted to create my latest project in FB4, utilizing the pleasures of the vector class in FP10, but alas, my compatriots managed to convince me that the upgrade isn't necessary yet.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Is there anyone out there who's corporate policy is banning them from using the beta product to develop apps?&amp;nbsp; If they do, how do you get to play (aside from on your own time?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-8405290809258534934?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/12/who-works-in-corporate-environment-and.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-8405290809258534934</guid>
      <pubDate>Thu, 10 Dec 2009 21:45:00 GMT</pubDate>
    </item>
    <item>
      <title>Matthew Mead: OL2EN - Convert Outlook 2007 Notes to Evernote Export/Import Format</title>
      <description>Background
Anyone who uses Outlook tasks and notes and an iPhone knows the pain of not being able to sync tasks and notes over-the-air from Exchange to the iPhone. I was surprised when I first realized that the Exchange client oin the iPhone only syncs email, calendar and contacts and does not sync notes and tasks. [...]</description>
      <link>http://www.matthewtmead.com/blog/?p=204</link>
      <category>Cloud Computing</category>
      <category>Electronics</category>
      <category>GTD</category>
      <category>Open Source</category>
      <category>Evernote</category>
      <category>iPhone</category>
      <category>matthewtmead</category>
      <category>Redpoint</category>
      <author>Matthew_x0020_Mead@redpointtech.com</author>
      <comments>http://www.matthewtmead.com/blog/?p=204#comments</comments>
      <guid isPermaLink="False">http://www.matthewtmead.com/blog/?p=204</guid>
      <pubDate>Mon, 07 Dec 2009 22:59:47 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Dreamweaver and CS4 killing performance</title>
      <description>Is Dreamweaver running slow for anyone else who does Flex development.&amp;nbsp; I'm not on a great machine, but I'm running a MacBook 13" w/ a 2.16 GHz Core 2 Duo, and 2 GB of Ram, but I do love my MacBook, and get quite frustrated by the fact that when I open up most of my CS4 products, my computer can come to a grinding halt.&amp;nbsp; Actually, it's mostly just Dreamweaver, which I'm using for reading, writing and editing C#.&amp;nbsp; I've thought about running my XP partition, then running visual studio for the coding, but that'd take up just about as much resources as me running Dreamweaver.&amp;nbsp; What I don't understand (and maybe it comes from being spoiled by a wonderful Eclipse community), but why is Dreamweaver so unwieldily and ugly and hard to use?&amp;nbsp; I'm happy that I can edit multiple languages with it, but frankly, I would've been happier if netBeans or even Eclipse let me work on it.&amp;nbsp; It's annoying!&amp;nbsp; But regardless, I'm trying to figure out what is killing my cpu?&amp;nbsp; I do know and have configured my Eclipse for larger memory management (I believe I set the min at 84, and the max at 1024), but I'm almost never using all of that.&amp;nbsp; Aside from a few smaller apps (read: iTunes, Adium, Thunderbird), I'm at a loss for such inefficiency.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-9176988135395371032?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/12/dreamweaver-and-cs4-killing-performance.html</link>
      <category domain="http://www.blogger.com/atom/ns#">flex</category>
      <category domain="http://www.blogger.com/atom/ns#">CS4</category>
      <category domain="http://www.blogger.com/atom/ns#">Dreamweaver</category>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-9176988135395371032</guid>
      <pubDate>Tue, 01 Dec 2009 21:42:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Recruiters and Pricing one's services</title>
      <description>Recruiters - I enjoy when you call to discuss things, but seriously, please don't contact me when it's about something I haven't done in 5-10 years.  And don't get offended when I have fun at your expense for responding w/ ridiculous information, like absurd rates.Honestly, I don't want your gig, that's why I stopped doing it what I did.  And don't get mad because you're spamming me that I shouldn't just respond w/ a bit of wit.  If you actually take it seriously, then the problem is you.&lt;br /&gt;&lt;br /&gt;However if you want to pay me that much, then I might reconsider :)  &lt;br /&gt;&lt;br /&gt;And why not pay me that much?  Most companies are willing to pay other companies that much for consulting on something (for example, look what any of the big consulting or management consulting or accounting firms charge).  I should be paid that much to consult as well, right?  Wrong?  While it would be nice to charge that much, and companies always feel they get more bang for their buck at the higher price (I mean, who wouldn't want bragging rights about spending top dollar to get the best - it happens all the time regarding MBAs and other degrees, and just because you have more people with accolades doesn't mean you'll get a better resolve).  For example, look at the financial companies in dire straits (only as an example).  They claim they have 10 (or 20 or 100) of the brightest minds working to solve the problems.  Yet it's like saying I have 10 (or 20 or 100) copies of the "special report".  No copy is better than the other, yet there is a belief, a horrible misconception, that if you gather enough bright minds of the same ilk, you'll get superior results.  And for that, you get to charge bucko bucks.&lt;br /&gt;&lt;br /&gt;Yet nobody stops to ask, "What difference is all this making for me?"  Large companies, time and time again, say they want to cut costs, improve efficiencies, and grow the bottom line.  Yet they normally farm out work to contractors and consultants, almost all of whom (except the rare exceptions of really brilliant people - not just smart, but those that actually can figure things out for themselves) use Google, Bing, YouTube, Twitter, and whatever other technological device to help themselves learn from what everyone else has done and use their examples.  &lt;br /&gt;&lt;br /&gt;People can learn quickly, and those that are the most profitable should make good money.  But companies that charge buckets for their services, when they aren't necessarily the best game in town (most often they rely on normal people because nobody is a superhero - unless you are Jonny Lee - then I'll make an exception).  But even so, most people aren't that brilliant, and companies don't have a lot of brilliant people in them, so why should they get to charge so much and I can't?  Brand recognition?  Paint?  Logo?  What?&lt;br /&gt;&lt;br /&gt;So back to my original rant, if someone's willing to pay it, shouldn't I oblige them?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-5478706690679968777?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/recruiters-and-pricing-ones-services.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-5478706690679968777</guid>
      <pubDate>Fri, 27 Nov 2009 23:09:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Flex Builder Recursion Variable?</title>
      <description>Wouldn't it be nice if Flex allowed us to have some kind of global that would let us know (especially when building, testing, and debugging) what level we're at when working w/ a recursive loop?&amp;nbsp; I created some XML a bit back that involves recursion, and the trick to it was knowing how I built it, but what about times when you have something that Flex makes - such as the simpleXMLEncoder - which is simple, but only works on basic Flex objects and provides really lame tags.In the simpleXMLEncoder/Decoder, their own code runs recursion, and it would be nice to have a way of tracking what level in which we are working.&lt;br /&gt;&lt;br /&gt;My own projects have used recursive Data Transfer Objects to drill through and build up external complex data sets.&amp;nbsp; However, when debugging and working through it, I can't easily nail down what level I'm at and how to go backwards.&amp;nbsp; Sometimes the debug window can hold up to a few locations where I can click and view my location and progress, but it would be much simpler to have some kind of level tracking, especially in recursion.&lt;br /&gt;&lt;br /&gt;This flexplitive rant is brought to you by a recursive loop that is brought to you by a recursive loop that is brought to you by a recursive loop that is.well you get the idea :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-7929516316467283099?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/flex-builder-recursion-variable.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-7929516316467283099</guid>
      <pubDate>Sun, 15 Nov 2009 22:13:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Not Flex directly, but html, Outlook 2007, and the evil colSpan</title>
      <description>During a current project, one of the requirements is being able to send an email from a Flex application to one or more recipients.&amp;nbsp; To accomplish this, through an amalgam of remote services, flex, and an email server, we are able to send out the emails.&amp;nbsp; The Flex side is quite easy, and using fluorine, we were able to quickly generate the c# code for the backend.&amp;nbsp; However the problem lies in QA'ing these emails for recipients and ultimately from the various email clients available.&amp;nbsp; While it would be nice to send a .swf in an email (like an html email) and allow it to play as soon as one opens the email, I can imagine how that could negatively impact a lot of users - think of a user who unwittingly opens an email that has a swf (which now wants to import and open up inside of your email client all of its components).&amp;nbsp; This could bog down the email client considerably, but more important, isn't email meant to be for simple text and images?&amp;nbsp; Leave the swf to the browser, right?&amp;nbsp; Well, I think it would be awesome if thunderbird allowed you to read .swf's in your email, and run flash right there.regardless, I digress.&lt;br /&gt;&lt;br /&gt;What I'd like to get at is the complexity we've had in testing an html email template that all clients would read (i.e. gMail, Outlook 07 and 03, thunderbird, aol, yahoo, etc.)&amp;nbsp; There are tons of clients, but most business savvy users are on the Outlook clients.&amp;nbsp; So how do I, running on a mac, without access (nor desire) to Outlook, test this?&amp;nbsp; Well, our handy QA team is doing that for me, and they've noticed some really annoying *flexplitive here* things w/ Outlook.&amp;nbsp; Namely, the absence of support for colSpan inside a table.&amp;nbsp; C'mon mang, colspans are the bread and butter of making a table work right, otherwise I'm stuck putting a bunch of 's inside of the 's which just makes my life really, really complicated.&amp;nbsp; the easy trick we figured out is that to avoid col spans, you can put multiple 's next to eachother, then put those in a row, and finally, to avoid the colspan, just move the items that you wanted to span, move them into a table above or below the table that has the row w/ the multiple columns.&amp;nbsp; This essentially makes your table have multiple columns, but only one row, or multiple rows.&amp;nbsp; This is extremely annoying, yet useful, if you have multiple columns, want someone to see your email in html, and send it to anyone using outlook 07.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Anyways, that's just my annoyance, so this flexplitive rant really isn't much about Flex and more about html and how much Outlook 07 really stinks...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-1075662198718631059?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/not-flex-directly-but-html-outlook-2007.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-1075662198718631059</guid>
      <pubDate>Fri, 13 Nov 2009 15:46:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Remoting</title>
      <description>During this project I've learned that it is important to try and limit the number of calls back to the server.&amp;nbsp; I understand it is important to make sure any progress is saved, but it is even more important that the system not constantly rely on asynchronous calls to make future progress. While small calls might not bring down the system, it is important, in my experience, that the fewer calls made to the back-end, the better.&lt;br /&gt;&lt;br /&gt;This rant is brought to you by the remoting services of Flex, Fluorine, and WebOrb.&amp;nbsp; All three have their benefits, which are documented on their respective sites.&amp;nbsp; However there doesn't seem to be a list of best practices for using them.&amp;nbsp; It is true that a RIA should be Rich, connect to the Internet, and be an Application.&amp;nbsp; But that connection to the Internet shouldn't happen every turn of the page or every mouse click. In my experience, you can achieve a better user experience if a whole bunch of miniscule calls can be tracked by the app, then uploaded when truly required.&amp;nbsp; Interaction with the backend is important, don't get me wrong, Flex can only do so much. Yet the code shouldn't beat a dead horse, like this blog post, with too many of the same calls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-5732264566706066703?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/remoting.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-5732264566706066703</guid>
      <pubDate>Fri, 13 Nov 2009 09:57:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Miscommunication</title>
      <description>Has anyone ever read a Harvard Business Review?&amp;nbsp; Or what about a case study?&amp;nbsp; Or anything business related that talks about efficiencies, sales relationships, processes, etc?&amp;nbsp; I've read several of them over the last decade, and one of the most important lessons I've learned from them is the balance a company must strike between internal and external resources. I've learned (oft the hard way) that sales people are happy to go and sell anything and everything to everyone and anyone.&amp;nbsp; However it must be understood that without their efforts, a company probably wouldn't survive (so what if Beta was better than VHS, their sales team sucked).&amp;nbsp; So in that vein, I also must say that resources that support sales, or develop products that the sales team is responsible for selling, must also be understood.&amp;nbsp; Regardless of product, there is a symbiotic relationship between the two sides, and the most successful organizations are the ones that realize that.&amp;nbsp; The companies that insist on superstar R&amp;amp;D folk, or only go after rockstar sales people often learn the hard way that success isn't from them.&amp;nbsp; It is from being able to continuously improve a product that customers like, while at the same time increasing the breadth and depth of understanding that the people who interact with the product have.&amp;nbsp; If it means that the Sales department take some time to learn more about the product, then they should.&amp;nbsp; If the other departments want to learn more about the sales process, or management, or what not, then they should, in order to understand why success is defined through teamwork and understanding.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;This long rant is brought to you by too angry Sales and R&amp;amp;D&amp;nbsp; staffers.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-1267961485506157873?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/miscommunication.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-1267961485506157873</guid>
      <pubDate>Thu, 12 Nov 2009 10:45:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: Flex Embedded Fonts, Images, and Compile Times</title>
      <description>A couple of recent projects that I've worked on have had the requirement to add special fonts, and generally this means adding them via CSS, and every time I clean or build my project for testing, the compile speed becomes horrendous (read - compile times went from just a few seconds up to a minute in some cases).&amp;nbsp; This was horrible, especially if all I did was change something simple in the app, like spacing between labels.&amp;nbsp; Other problems included running out of memory in my eclipse environment and CPU consumption.&amp;nbsp; For my own efficiencies, that was just too annoying and aggrevating to deal with.&lt;br /&gt;&lt;br /&gt;I dug around the internet and found a few resources that made some suggestions.&amp;nbsp; Two I found &lt;a href="http://stackoverflow.com/questions/1490803/how-to-reduce-eclipses-memory-usage"&gt;here&lt;/a&gt;. &amp;nbsp; They include changing the heap size of Eclipse and turning off auto-spell checking.&amp;nbsp; While this didn't alleviate everything, it at least has kept my MacBook from freezing up and my workbench from vomiting everywhere.&lt;br /&gt;&lt;br /&gt;The next option I found comes from &lt;a href="http://www.axelscript.com/2008/10/03/improving-compile-times-with-runtime-css/"&gt;axelscript&lt;/a&gt;.&amp;nbsp; His suggestion to improve compile time by getting the font (and possibly images - although he admittedly didn't have time/nor need to test) into a separate project, then compiling it into a swf that would build into the current project's folder.&amp;nbsp; This helps compile times, but it does require a few extra steps and maybe a good look at Flex's StyleManager.&lt;br /&gt;&lt;br /&gt;One more option I found very convenient (especially if you pre-initialise a few fonts or want to lazy-load some fonts) comes from this &lt;a href="http://etcs.ru/"&gt;Russian site&lt;/a&gt;.&amp;nbsp; It provides an excellent loader that allows you to load fonts dynamically (although again, nothing about embedding images) from anywhere, locally or remotely.&amp;nbsp; The setup is extremely easy and can be incorporated dynamically add fonts at runtime.&lt;br /&gt;&lt;br /&gt;What I would really like to know from Adobe is why compile times turn horrendous when adding new fonts.&amp;nbsp; And why do they need to be included in every build, shouldn't there be a simple way to introduce and embed multiple fonts without bloating an app and without killing my compile times?&amp;nbsp; Nothing in Jira points to this as being a bug, just a standard feature.&amp;nbsp; Will these same problems exist in FB4, Catalyst, or FP10?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-8710646133638660933?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/flex-embedded-fonts-images-and-compile.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-8710646133638660933</guid>
      <pubDate>Tue, 10 Nov 2009 08:10:00 GMT</pubDate>
    </item>
    <item>
      <title>JP Bader: TCPProxy and Grinder</title>
      <description>I recently was working on a project and it was necessary to see what I was sending across the wire.  Without having done much in the past w/ reading my data while in transit (go figure, I normally only worry about the end results), I needed to know if Flex or my backend was regurgitating my data because the transmission was garbled or what.  To watch what was happening, I started using &lt;a href="http://grinder.sourceforge.net/"&gt;Grinder&lt;/a&gt;.  Grinder's a really easy to use tool: you just download the zip, unzip it, then from a command line, simply type:&lt;br /&gt;&lt;br /&gt;java -cp Downloads/grinder-3.2/lib/grinder.jar net.grinder.TCPProxy -console&lt;br /&gt;&lt;br /&gt;My java from the command line is horrendous, but from what I understand, the first part tells the command line it's a java file to look for, the second part says what it is about to search for, the third part says where, the fourth part says what operation should be invoked, and -console says when you run the engine, pop-up the console (for mac users like me, this last part was crucial because shy of shutting down the terminal, I have no other way of telling the Grinder engine to stop grinding.&lt;br /&gt;&lt;br /&gt;It was also important that I set my browser's proxy configuration to run through 8001, so I made my changes to the settings and now, every page loaded horrendously slow, but grinder was spitting out all the data I needed.&amp;nbsp; (I tried to upload the image, but couldn't get it out...sorry).&lt;br /&gt;&lt;br /&gt;Now I had access to everything I was posting across the wire and what it looked like.&amp;nbsp; Grinder has many other important features than just watching your internet traffic.&amp;nbsp; It can help you record user actions to make test scripts for testing network traffic.&amp;nbsp; It comes w/ an awesome library of test scripts (and if you look hard enough can find some really funny comments)&lt;br /&gt;&lt;br /&gt;Anyways, before I completely sign off on Grinder as being the only tool to use, I'll mention briefly another tool (you have to pay for) that is quite nice.&amp;nbsp; It's called &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;, and I must say it does a pretty good job of telling me what resources are being called too often, and does a pretty good job of interpreting AMF.&amp;nbsp; It isn't perfect, doesn't have all the flexibility of Grinder, but again, I didn't pay for it, I just tested it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1377552797269709203-2548126363793070801?l=flexpletives.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://flexpletives.blogspot.com/2009/11/tcpproxy-and-grinder.html</link>
      <author>JP_x0020_Bader@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1377552797269709203.post-2548126363793070801</guid>
      <pubDate>Mon, 09 Nov 2009 08:25:00 GMT</pubDate>
    </item>
    <item>
      <title>Matthew Mead: Adobe Mosaic - Task Centric, Composite RIA Mashup</title>
      <description>At Adobe MAX last month, Adobe announced the Mosaic alpha release (to a beta community). It is a composite rich internet application product that allows organizations to integrate and mash up their Flash/Flex, HTML and 3rd party web applications. Mosaic is part of Adobe&amp;#8217;s approach to building next generation rich internet application (RIA) applications in [...]</description>
      <link>http://www.matthewtmead.com/blog/?p=183</link>
      <category>RIA</category>
      <category>Adobe</category>
      <category>LiveCycle</category>
      <category>Mashup</category>
      <category>Mosaic</category>
      <category>Redpoint</category>
      <author>Matthew_x0020_Mead@redpointtech.com</author>
      <comments>http://www.matthewtmead.com/blog/?p=183#comments</comments>
      <guid isPermaLink="False">http://www.matthewtmead.com/blog/?p=183</guid>
      <pubDate>Wed, 28 Oct 2009 01:23:55 GMT</pubDate>
    </item>
    <item>
      <title>Herbert Wu: Java Tip: Deploy WAR to multiple Tomcat-6.x Nodes/Environments with Cargo Maven-plugin</title>
      <description>In JEE/Tomcat-6.x web development, if you use Maven you can easily deploy your build to local host via &amp;#8220;mvn tomcat:redeploy&amp;#8221; with these two simple changes: (1). In Tomcat context.xml,  disable jar locking by adding extra attributes(in bold text) to &amp;#60;Context&amp;#62; tag: &amp;#60;Context path=&amp;#8221;/&amp;#60;your-webapp-path&amp;#62;&amp;#8221; reloadable=&amp;#8221;true&amp;#8221; antiJARLocking=&amp;#8221;true&amp;#8221; antiResourceLocking=&amp;#8221;true&amp;#8221;&amp;#62; (2).   Set tomcat manager user/password as default &amp;#8220;admin&amp;#8221; and [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbertwu.wordpress.com&amp;blog=7489790&amp;post=31&amp;subd=herbertwu&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://herbertwu.wordpress.com/2009/10/25/java-tip-deploy-war-to-multiple-tomcat-6-x-nodesenvironments-with-cargo-maven-plugin/</link>
      <category>JEE web application deployment</category>
      <category>Maven multiple tomcat instances deployment</category>
      <category>redpoint</category>
      <category>tomcat maven deployment</category>
      <author>Herbert_x0020_Wu@redpointtech.com</author>
      <comments>http://herbertwu.wordpress.com/2009/10/25/java-tip-deploy-war-to-multiple-tomcat-6-x-nodesenvironments-with-cargo-maven-plugin/#comments</comments>
      <guid isPermaLink="False">http://herbertwu.wordpress.com/?p=31</guid>
      <pubDate>Sun, 25 Oct 2009 13:21:10 GMT</pubDate>
    </item>
    <item>
      <title>Herbert Wu: Java Tip: Using Open Source Selenium-Grid-1.x for Quick Performance Testing</title>
      <description>When conducting performance testing of multi-step interactive web applications such as registration, shopping etc, not many open source solutions are available. Grinder(http://grinder.sourceforge.net/) is the primary choice, however it is not simple to use.  Selenium is well-known for its ease to use record-and-replay feature, but it is primarily for unit/functional testing. Thoughtworks recently put out a [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=herbertwu.wordpress.com&amp;blog=7489790&amp;post=22&amp;subd=herbertwu&amp;ref=&amp;feed=1" /&gt;</description>
      <link>http://herbertwu.wordpress.com/2009/10/25/java-tip-using-open-source-selenium-grid-1-x-for-simple-performance-testing/</link>
      <category>JEE Performance</category>
      <category>Open source performance testing tool</category>
      <category>Testing tools list</category>
      <category>redpoint</category>
      <author>Herbert_x0020_Wu@redpointtech.com</author>
      <comments>http://herbertwu.wordpress.com/2009/10/25/java-tip-using-open-source-selenium-grid-1-x-for-simple-performance-testing/#comments</comments>
      <guid isPermaLink="False">http://herbertwu.wordpress.com/?p=22</guid>
      <pubDate>Sun, 25 Oct 2009 12:20:23 GMT</pubDate>
    </item>
    <item>
      <title>Pat Ryan: Designing the Obvious</title>
      <description>Adobe MAX2009 is coming up this weekend, and while I won't get the chance to go this year I was reviewing some of the material from years past.  One presentation that I have somehow hung onto was one by Robert Hoekman Jr on 'Designing the Obvious' - from his book of the same name.&lt;br /&gt;&lt;br /&gt;I never got the book - but I think I will now.  As I was reading through the paper, he talks about something we all still come across everyday - form fields with character length limits.&lt;br /&gt;&lt;br /&gt;He mentions some of the 'obviously' wrong ways to do this:&lt;br /&gt;1) type in the field, hit submit and the system tells you that you guess wrong and that there were too many characters in the field.&lt;br /&gt;2) There is a 'hint' next to the text field but it lets you type in the wrong number of characters anyways.  He also noted that a 'hint' is not instructive to tell someone that spaces are or are not counted.&lt;br /&gt;3) The field just lets you type in characters until it just stops.  The 'stops' feedback still leaves us to wonder why the system stopped taking input.&lt;br /&gt;&lt;br /&gt;The 'obvious' answer he suggests is to give the user real-time feedback about their input.  As his book title suggests - this is so obvious.&lt;br /&gt;&lt;br /&gt;I thought I would create a quick component that did just that - gave the user real-time feedback on their input and accounted for either including space or excluding space.&lt;br /&gt;&lt;br /&gt;In the example application below, the first input just stops taking input at the maximum character - can you guess what that limit might be?  The second input uses a StringValidator - which is a step in the right direction, but does not provide the real-time feedback.  &lt;br /&gt;&lt;br /&gt;The next two use a simple component I created.  The first of those, has a 15 character limit, and spaces count toward that limit.  The next one has a 30 character limit and spaces do not count toward the limit.&lt;br /&gt;&lt;br /&gt;Getting the component to ignore spaces was trickier than I thought it would be at first - but for those curious you can download the code and see how I did this.&lt;br /&gt;&lt;br /&gt;Source can be found by clicking &lt;a href="http://www.theyoungsouls.com/blogs/redpoint/flexexamples/RedpointBlogPosts.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;embed pluginspage=" http://www.macromedia.com/go/getflashplayer" src="http://www.theyoungsouls.com/blogs/redpoint/flexexamples/RedpointMaxLengthTextInput.swf" width="600" height="250" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Thanks for stopping by.  I would love to hear your comments on the 'obvious'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1798575258168757722-8388239115912668034?l=redpointtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <link>http://redpointtech.blogspot.com/2009/09/designing-obvious.html</link>
      <category domain="http://www.blogger.com/atom/ns#">Redpoint</category>
      <category domain="http://www.blogger.com/atom/ns#">Flex</category>
      <author>Pat_x0020_Ryan@redpointtech.com</author>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-1798575258168757722.post-8388239115912668034</guid>
      <pubDate>Tue, 29 Sep 2009 20:37:00 GMT</pubDate>
    </item>
  </channel>
</rss>