<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>OnRails.org</title>
    <link>http://www.onrails.org/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Ruby On Rails and related matters.</description>
    <item>
      <title>MWRC 2010 - Notes from Day 1.</title>
      <description>&lt;a href="http://twitter.com/jakep36"&gt;Jake Parsell&lt;/a&gt; took some really great notes using Google Wave. I know the videos will be available shortly but in the mean time if you want to figure out what you may want to watch you can find out more details below:

  &lt;style type="text/css"&gt;
#wave p.p1  {margin-left: 0.0px; font: 26.0px Arial}
#wave p.p2  {margin-left: 0.0px; font: 13.0px Arial; min-height: 15.0px}
#wave p.p3  {margin-left: 0.0px; font: 20.0px Arial}
#wave p.p4  {margin-left: 17.0px; font: 13.0px Arial; color: #0e3ea8}
#wave p.p5  {margin-left: 17.0px; font: 13.0px Arial}
#wave p.p6  {margin-left: 34.0px; font: 13.0px Arial}
#wave p.p7  {margin-left: 17.0px; font: 13.0px Arial; min-height: 15.0px}
#wave p.p8  {margin-left: 0.0px; font: 20.0px Geneva; color: #234455}
#wave p.p9  {margin-left: 34.0px; font: 13.0px Geneva; color: #234455}
#wave p.p10 {margin-left: 34.0px; font: 13.0px Arial; min-height: 15.0px}
#wave p.p11 {margin-left: 51.0px; font: 13.0px Arial}
#wave p.p12 {margin-left: 68.0px; font: 13.0px Arial}
#wave p.p13 {margin-left: 34.0px; font: 13.0px Arial; color: #0e3ea8}
#wave p.p14 {margin-left: 85.0px; font: 13.0px Arial}
#wave p.p15 {margin-left: 51.0px; font: 13.0px Arial; min-height: 15.0px}
span.s1 {font: 20.0px Geneva; color: #234455}
span.s2 {font: 20.0px Geneva; color: #003366}
span.s3 {font: 13.0px Geneva; color: #234455}
span.s4 {font: 13.0px Arial; text-decoration: underline ; color: #0e3ea8}
span.s5 {text-decoration: underline ; color: #0e3ea8}
span.s6 {color: #000000}
span.s7 {text-decoration: underline}
span.s8 {background-color: #ffe500}
  &lt;/style&gt;

&lt;div id="wave"&gt;
&lt;p class="p1"&gt;&lt;b&gt;MWRC&lt;/b&gt;&lt;/p&gt;
&lt;p class="p2"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;span class="s1"&gt;Giles Bowkett&lt;/span&gt;&lt;b&gt; - making some music with ruby &lt;/b&gt;&lt;span class="s2"&gt;Archaeopteryx&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;- &lt;a href="http://gilesbowkett.blogspot.com/2008/02/archaeopteryx-ruby-midi-generator.html"&gt;&lt;span class="s4"&gt;Giles Bowkett: Archaeopteryx: A Ruby MIDI Generator&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p5"&gt;- learn probability matrix&lt;/p&gt;
&lt;p class="p5"&gt;- google is easy if you understand prob matrix&lt;/p&gt;
&lt;p class="p5"&gt;- google spell check in 21 lines of python&lt;/p&gt;
&lt;p class="p5"&gt;- wonder how easy OCR would seem in this context?&lt;/p&gt;
&lt;p class="p5"&gt;- don't understand python community.... why are there not more dick jokes about pythons?&lt;/p&gt;
&lt;p class="p6"&gt;- how is there not a web framework called trouser snake?&lt;/p&gt;
&lt;p class="p5"&gt;- oh yeah... better talk about lambdas&lt;/p&gt;
&lt;p class="p7"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;span class="s1"&gt;James Golick&lt;/span&gt;&lt;b&gt; - Cooking with Chef - @jamesgolick &lt;/b&gt;&lt;a href="http://github.com/jamesgolick"&gt;&lt;span class="s5"&gt;&lt;b&gt;github.com/jamesgolick&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s6"&gt;- &lt;a href="http://www.rubyinside.com/chef-tasty-server-configuraiton-2162.html"&gt;&lt;span class="s7"&gt;Chef: Quick and Tasty Ruby Powered Server Configuration&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p5"&gt;- sysadmin work is boring&lt;/p&gt;
&lt;p class="p5"&gt;- too many config languages&lt;/p&gt;
&lt;p class="p5"&gt;- amazed if anyone can get nagios working on a consistent basis&lt;/p&gt;
&lt;p class="p5"&gt;- ues recipes to install packages&lt;/p&gt;
&lt;p class="p5"&gt;- recipes written in ruby&lt;/p&gt;
&lt;p class="p5"&gt;- create services -&amp;gt; status, restart, reload, etc.&lt;/p&gt;
&lt;p class="p5"&gt;- templates to create config files&lt;/p&gt;
&lt;p class="p6"&gt;- erb&lt;/p&gt;
&lt;p class="p5"&gt;- notifies restart if config changes&lt;/p&gt;
&lt;p class="p6"&gt;- autoreload on save very handy for things like dynamic lists of ips that change when you start a new EC2 instance&lt;/p&gt;
&lt;p class="p5"&gt;- makes setting up stuff like haproxy and heartbeat easier&lt;/p&gt;
&lt;p class="p5"&gt;- security&lt;/p&gt;
&lt;p class="p6"&gt;- easy to include iptables&lt;/p&gt;
&lt;p class="p6"&gt;- &lt;span class="s8"&gt;always turn off password ssh logins&lt;/span&gt; - easier to remember when part of your cookbook&lt;/p&gt;
&lt;p class="p5"&gt;- look into chef server and chef client&lt;/p&gt;
&lt;p class="p7"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p8"&gt;Joe Damato - RVM&lt;/p&gt;
&lt;p class="p9"&gt;- &lt;a href="http://rvm.beginrescueend.com/"&gt;&lt;span class="s7"&gt;RVM: Ruby Version Manager - RVM Ruby Version Manager - Documentation&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="p6"&gt;&lt;span class="s3"&gt;- &lt;/span&gt;RVM gemset - different gemsets for the same ruby version per project&lt;/p&gt;
&lt;p class="p6"&gt;- create rvmrc to switch env automatically when you cd into a project directory&lt;/p&gt;
&lt;p class="p6"&gt;- export gemsets?&lt;/p&gt;
&lt;p class="p6"&gt;- should you use gemsets or just bundler&lt;/p&gt;
&lt;p class="p10"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p8"&gt;Loren Segal - Documentation with YARD&lt;/p&gt;
&lt;p class="p9"&gt;- &lt;a href="http://yardoc.org/"&gt;&lt;span class="s7"&gt;YARD 0.5.3 - The Longest&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="p6"&gt;- Yet Another Ruby Documentor&lt;/p&gt;
&lt;p class="p6"&gt;- Talk about documentation in general&lt;/p&gt;
&lt;p class="p11"&gt;- Documentation to help you think about your API&lt;/p&gt;
&lt;p class="p11"&gt;- What makes documentation good?&lt;/p&gt;
&lt;p class="p12"&gt;- consistency -&amp;gt; pick a style and stick with it&lt;/p&gt;
&lt;p class="p12"&gt;- correct -&amp;gt; it can be wrong and should be audited&lt;/p&gt;
&lt;p class="p12"&gt;- coherent&lt;/p&gt;
&lt;p class="p6"&gt;- YARD&lt;/p&gt;
&lt;p class="p11"&gt;- meta-data&lt;/p&gt;
&lt;p class="p11"&gt;- @param [Symbol] req_type :get or :post&lt;/p&gt;
&lt;p class="p11"&gt;- ....&lt;/p&gt;
&lt;p class="p11"&gt;- yard-respec&lt;/p&gt;
&lt;p class="p12"&gt;- shows rspec specs alongside method docs&lt;/p&gt;
&lt;p class="p11"&gt;- yard-sinatra&lt;/p&gt;
&lt;p class="p12"&gt;- shows your routes for api&lt;/p&gt;
&lt;p class="p10"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p2"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p8"&gt;Michael Jackson - Rack for web developers&lt;/p&gt;
&lt;p class="p13"&gt;&lt;span class="s6"&gt;- &lt;a href="http://rack.rubyforge.org/"&gt;&lt;span class="s7"&gt;Rack: a Ruby Webserver Interface&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p6"&gt;- Read the Spec&lt;/p&gt;
&lt;p class="p6"&gt;- blah, blah, blah&lt;/p&gt;
&lt;p class="p6"&gt;- rack is cool in that it allows web frameworks to communicate with web servers, but not sure you care that much unless making a web framework&lt;/p&gt;
&lt;p class="p10"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;b&gt;Yehuda Katz - Modularity - Lessons learned from Rails 3&lt;/b&gt;&lt;/p&gt;
&lt;p class="p6"&gt;- Try to become modular too soon and you will be wrong&lt;/p&gt;
&lt;p class="p6"&gt;- Become modular once lack of modularity is hurting you, then decouple&lt;/p&gt;
&lt;p class="p6"&gt;- Constants -&amp;gt; Globals&lt;/p&gt;
&lt;p class="p6"&gt;- router.url_for in rails 3&lt;/p&gt;
&lt;p class="p6"&gt;- easier to track down where instance variables came from than Globals&lt;/p&gt;
&lt;p class="p6"&gt;- eliminate things that are global&lt;/p&gt;
&lt;p class="p11"&gt;- tests are the canary in the coal mine&lt;/p&gt;
&lt;p class="p11"&gt;- instead of hard coding contants, pass things around&lt;/p&gt;
&lt;p class="p11"&gt;- be subspicious of Contant.foo&lt;/p&gt;
&lt;p class="p6"&gt;- stop caring about object allocations&lt;/p&gt;
&lt;p class="p11"&gt;- object allocations are essentially free&lt;/p&gt;
&lt;p class="p6"&gt;- Render&lt;/p&gt;
&lt;p class="p11"&gt;- Controller -&amp;gt; ViewPathSet -&amp;gt; ViewPath -&amp;gt; Template (on file system)&lt;/p&gt;
&lt;p class="p11"&gt;- Used to assume actual file path&lt;/p&gt;
&lt;p class="p12"&gt;- hard to cache&lt;/p&gt;
&lt;p class="p12"&gt;- Template.new takes a path&lt;/p&gt;
&lt;p class="p11"&gt;- Now&lt;/p&gt;
&lt;p class="p12"&gt;- Caller -&amp;gt; LookupContext -&amp;gt; ViewPaths -&amp;gt; PathResolver-&amp;gt; Resolver -&amp;gt; Template&lt;/p&gt;
&lt;p class="p12"&gt;- Template.new takes a source&lt;/p&gt;
&lt;p class="p12"&gt;- Could overide PathResolver to pull from database or S3 or something&lt;/p&gt;
&lt;p class="p14"&gt;- could be useful in making a CMS system with Rails&lt;/p&gt;
&lt;p class="p6"&gt;- Use Modules&lt;/p&gt;
&lt;p class="p11"&gt;- don't put methods you want people to be able to override in a class, make a module&lt;/p&gt;
&lt;p class="p11"&gt;- then you cna call super&lt;/p&gt;
&lt;p class="p11"&gt;- Use ActiveSupport::Concern&lt;/p&gt;
&lt;p class="p15"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;b&gt;Paul Sadauskas - HTTP&lt;/b&gt;&lt;/p&gt;
&lt;p class="p6"&gt;- read the spec :-)&lt;/p&gt;
&lt;p class="p6"&gt;- prevent the requests that you don't have to answer&lt;/p&gt;
&lt;p class="p6"&gt;- Persistent Connections - so you don't have to create a new TCP connection for every request --- keepalive=onC&lt;/p&gt;
&lt;p class="p6"&gt;- Caching&lt;/p&gt;
&lt;p class="p11"&gt;- how do you decide when something is stale?&lt;/p&gt;
&lt;p class="p15"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p15"&gt;&lt;br&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;span class="s1"&gt;Jeff Casimir &lt;/span&gt;&lt;b&gt;- Ruby Processing&lt;/b&gt;&lt;/p&gt;
&lt;p class="p6"&gt;- dynamically generate images in ruby app&lt;/p&gt;
&lt;p class="p6"&gt;- uses jruby&lt;/p&gt;
&lt;p class="p6"&gt;- first built to create verticle column headers&lt;/p&gt;
&lt;p class="p6"&gt;- Distributed Programming with Ruby -&amp;gt; to learn how to send jobs to ruby processing from rails&lt;/p&gt;
&lt;p class="p6"&gt;- Beanstalkd -&amp;gt; simple fast background processing -&amp;gt; brew install beanstalkd &lt;/p&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 12 Mar 2010 04:43:49 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:98a933f1-5a20-4a3e-a4e0-d02897b6f8e3</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/12/mwrc-2010-notes-from-day-1</link>
      <category>Ruby</category>
    </item>
    <item>
      <title>MWRC 2010 - Day 1 Live Video</title>
      <description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wanja/4424356701/" title="Moutains Pano + fingers by danielwanja, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2504/4424356701_61dae3c3b0.jpg" width="500" height="108" alt="Moutains Pano + fingers" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;The conference is about to start in 30 minutes, the room starts to buzz. The confreaks guys have their camera and video recording equipment all setup. So you will be able to catch up the conference online soon. Somehow I really like single track conferences and the sessions seem really great and will be fast passed, 30 to 45 minutes. Check out the &lt;a href="http://mtnwestrubyconf.org/2010/schedule"&gt;schedule&lt;/a&gt;. So I will sit back and enjoy the show.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Follow it live on &lt;a href="http://www.justin.tv/mwrc#r=hcNHcJU~"&gt;Justin TV&lt;/a&gt;!!&lt;/strong&gt;&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" height="300" width="400" id="live_embed_player_flash" data="http://www.justin.tv/widgets/live_embed_player.swf?channel=mwrc" bgcolor="#000000"&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowNetworking" value="all" /&gt;&lt;param name="movie" value="http://www.justin.tv/widgets/live_embed_player.swf" /&gt;&lt;param name="flashvars" value="channel=mwrc&amp;#38;auto_play=false&amp;#38;start_volume=25" /&gt;&lt;/object&gt;&lt;a href="http://www.justin.tv/mwrc#r=-rid-&amp;#38;s=em" class="trk" style="padding:2px 0px 4px; display:block; width:345px; font-weight:normal; font-size:10px; text-decoration:underline; text-align:center;"&gt;Watch live video from Mountain West Ruby Conference on Justin.tv&lt;/a&gt;

	&lt;p&gt;Salt Lake City is definitively a beautiful city, surrounded by it&amp;#8217;s mountains&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wanja/4424356615/" title="Library by danielwanja, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2780/4424356615_71c2a0edc3.jpg" width="350" alt="Library" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wanja/4424356225/" title="Library by danielwanja, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4022/4424356225_b242ec1275.jpg" width="350"  alt="Library" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 11 Mar 2010 15:53:46 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:5cc56f86-2325-4d27-8571-9905b0444afe</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/11/mwrc-2010</link>
      <category>Ruby On Rails</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>360Flex last day.</title>
      <description>&lt;p&gt;What a conference! The talks where really awesome so far. Not exactly sure what I will attend today. I might attend  &amp;#8220;Optimize it! ActionScript Tips for iPhone Games&amp;#8221; followed by &amp;#8220;Adobe is from Mars, Microsoft is from Uranus: A View from the Client&amp;#8221;. Then I will have to split early to catch a flight to Salt Lake City for the &lt;a href="http://mtnwestrubyconf.org/2010/"&gt;MountainWest RubyConf 2010&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Optimize it! ActionScript Tips for iPhone Games Renaun Erickson&lt;/h3&gt;

	&lt;p&gt;Renaun is Plaform Evangelist for Adobe since last week. He will put up the slides and code on his &lt;a href="http://renaun.com/blog/"&gt;blog&lt;/a&gt; later today. Many of the tips are good for any Flash/Flex app not just for iPhone ones.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Packager for iPhone (PFI)&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;LLVM&lt;/span&gt; cross compiles&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;He will focus the talk on Memory/Cpu/Mouse Move and Game Timers.&lt;/p&gt;


	&lt;p&gt;Instead of going to the Flex/Silverlight talk, sorry Jun and Eric, I went to Nate Beck&amp;#8217;s talk on pushbutton. And Doug McCune had something special &lt;a href="http://dougmccune.com/blog/2010/03/10/nate-becks-birthday-surprise-at-360flex/"&gt;planned&lt;/a&gt; for Nate&amp;#8217;s birthday&amp;#8230;&lt;/p&gt;


&lt;object width="400" &gt;&lt;param name="movie" value="http://www.youtube.com/v/xEkUyNdj_4E&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xEkUyNdj_4E&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" &gt;&lt;/embed&gt;&lt;/object&gt;

	&lt;p&gt;Flex 4: It&amp;#8217;s a Wrap&lt;/p&gt;


&lt;object width="400" &gt;&lt;param name="movie" value="http://www.youtube.com/v/PeTakZ-_sF0&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PeTakZ-_sF0&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;

	&lt;p&gt;Thank&amp;#8217;s Tom and John&amp;#8230;the conference was awesome!&lt;/p&gt;</description>
      <pubDate>Thu, 11 Mar 2010 05:43:28 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:bab8cb34-36d7-4c01-a8cf-6d326f68ac87</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/11/360flex-last-day</link>
      <category>Flex</category>
    </item>
    <item>
      <title>360 Flex - Day 2 (Tuesday) - Live Blogging</title>
      <description>&lt;p&gt;As you saw yesterday afternoon I didn&amp;#8217;t blog too much, so let&amp;#8217;s how today goes. The party last night was really fun, lot&amp;#8217;s of networking, rock band playing and just a nice general geek atmosphere.&lt;/p&gt;


&lt;h2&gt;Evolution of &lt;span class="caps"&gt;RIA&lt;/span&gt; Design Principals&lt;/h2&gt;

	&lt;p&gt;Right now the &amp;#8220;Evolution of &lt;span class="caps"&gt;RIA&lt;/span&gt; Design Principals&amp;#8221; panel is about to start.&lt;/p&gt;


	&lt;p&gt;Panel is:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Chet Haase &amp;#8211; Senior Computer Scientists at Adobe&lt;/li&gt;
		&lt;li&gt;Bill Scott &amp;#8211; Director UI Engineering at Netflix&lt;/li&gt;
		&lt;li&gt;Ehud Waizer &amp;#8211; &lt;span class="caps"&gt;SAP&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Paul Guirata &amp;#8211; Catalyst Resources&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Context: oriented to customer facing applications. Not games.&lt;/p&gt;


&lt;h3&gt;Chet Haase&lt;/h3&gt;

	&lt;p&gt;He works on effects at Adobe. Effects used in a subtle way can make the user more effective.&lt;/p&gt;


	&lt;p&gt;What are the top 3 rules&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Transitioning&lt;/li&gt;
		&lt;li&gt;Anticipatory&lt;/li&gt;
		&lt;li&gt;well-timed.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;Don&amp;#8217;t Lose the User.&lt;/p&gt;


&lt;h3&gt;Bill Scott&lt;/h3&gt;

	&lt;p&gt;Principles for Interesting Moments&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Input where you output&lt;/li&gt;
		&lt;li&gt;Require a light footprint&lt;/li&gt;
		&lt;li&gt;Stay in the flow&lt;/li&gt;
		&lt;li&gt;Offer invitations&lt;/li&gt;
		&lt;li&gt;Be reactive&lt;/li&gt;
		&lt;li&gt;Use transitions&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Paul Giurata&lt;/h3&gt;

Modular
Reusable
	&lt;ul&gt;
	&lt;li&gt;Panel vs Page&lt;/li&gt;
		&lt;li&gt;Panels being reusable application(s)&lt;/li&gt;
		&lt;li&gt;Panels being re-used down to the code level&lt;/li&gt;
		&lt;li&gt;Panels potentially being entirely separate applications&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Bill mentions &lt;a href="http://www.perfettimedia.com/"&gt;Christine Perfetti&lt;/a&gt; has a &lt;a href="http://www.uxideas.com/shows/usability_tests_nutshell/"&gt;few videos&lt;/a&gt; on usability testing.&lt;/p&gt;


&lt;h3&gt;Compiled Favorite Principles&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Transitioning (Animations)&lt;/li&gt;
		&lt;li&gt;Anticipatory&lt;/li&gt;
		&lt;li&gt;Timing&lt;/li&gt;
		&lt;li&gt;Don&amp;#8217;t Lose the User&lt;/li&gt;
		&lt;li&gt;Interesting Moments&lt;/li&gt;
		&lt;li&gt;Modular&lt;/li&gt;
		&lt;li&gt;Reusable&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Consistency .via. developers working from the same code. Not a style guide as it&amp;#8217;s open for interpretation.&lt;/p&gt;


&lt;h2&gt;Whats New in Flex 4 that’s &lt;span class="caps"&gt;NOT&lt;/span&gt; Spark! &amp;#8211; Deepa Subramaniam&lt;/h2&gt;

	&lt;p&gt;Deepa was on the engineering team for 7 years and now just got promoted as product manager.&lt;/p&gt;


	&lt;p&gt;She will put the slides on her &lt;a href="http://iamdeepa.com/blog/"&gt;blog&lt;/a&gt;. So I will go easy with the notes.&lt;/p&gt;


	&lt;p&gt;We will talk about:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Enhanced States&lt;/li&gt;
		&lt;li&gt;Pixel Bender Integration&lt;/li&gt;
		&lt;li&gt;Text (TLF)&lt;/li&gt;
		&lt;li&gt;2-way Data Binding&lt;/li&gt;
		&lt;li&gt;Advanced &lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;OSMF&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;MXItemRenderer&lt;/li&gt;
		&lt;li&gt;RSLs&lt;/li&gt;
		&lt;li&gt;Charting Enhancements&lt;/li&gt;
		&lt;li&gt;ASDoc&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;MXML&lt;/span&gt; Vector&lt;/li&gt;
		&lt;li&gt;Compile time &lt;span class="caps"&gt;FXG&lt;/span&gt; Optimization&lt;/li&gt;
		&lt;li&gt;Improved Compiler&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;2-Way Databinding&lt;/h3&gt;

	&lt;p&gt;Inline declaration using the syntax, @{bindable_property}&lt;/p&gt;


&lt;pre&gt;
&amp;lt;s:TextInput id="t1" text="@{t2.text}" /&amp;gt;
&amp;lt;s:TextInput id="t2" /&amp;gt;
&lt;/pre&gt;

&lt;h3&gt;Enhanced States Syntax&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;AddChild/RemovedChild replaced with includeIn/excludeFrom&lt;/li&gt;
		&lt;li&gt;State Groups&lt;/li&gt;
	&lt;/ul&gt;


&lt;pre&gt;
&amp;lt;m:states&amp;gt;
 &amp;lt;m:Sate name="A"/&amp;gt;
 &amp;lt;m:Sate name="B"/&amp;gt;
 &amp;lt;m:Sate name="C"/&amp;gt;
&amp;lt;/m:states&amp;gt;

&amp;lt;Button label="b1" includeIn="A,B" /&amp;gt;
&amp;lt;Button label="b2" includeIn="C" /&amp;gt;
&lt;/pre&gt;

&lt;h3&gt;Text&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FTE&lt;/span&gt; &amp;#8211; Flash Text Engine in &lt;span class="caps"&gt;FP10&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;TLF&lt;/span&gt; &amp;#8211; Text Layout Framework, set of ActionScript classes build atop &lt;span class="caps"&gt;FTE&lt;/span&gt;. Is &lt;span class="caps"&gt;XML&lt;/span&gt;-based markup&lt;/li&gt;
	&lt;/ul&gt;


Each text element maps to a class
&lt;pre&gt;
&amp;lt;div&amp;gt;        flash.textLayout.elements.DivElement
&amp;lt;p&amp;gt;            flash.textLayout.elements.ParagraphElement
&amp;lt;span&amp;gt;        flash.textLayout.elements.SpanElement
&amp;lt;tab&amp;gt;        flash.textLayout.elements.TabElement
&lt;/pre&gt;

	&lt;p&gt;&lt;span class="caps"&gt;TLF&lt;/span&gt; Partitioning:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Simple, plain text&lt;/li&gt;
		&lt;li&gt;Rich text&lt;/li&gt;
		&lt;li&gt;Rich editable text&lt;/li&gt;
		&lt;li&gt;Rich, editable, selectable text&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Pixel Bender Integration&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Pixel Bender: language for hardware-indepdent image processing algorithm&lt;/li&gt;
		&lt;li&gt;Shader: compiled instance of a Pixel Bender kernel&lt;/li&gt;
		&lt;li&gt;Flex introduces the ShaderFilter class. Simplifies   pixel bender such that they can be invoked in &lt;span class="caps"&gt;MXML&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Advanced &lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Flex 3: type and class selectors&lt;/li&gt;
		&lt;li&gt;Flex 4: Multiple class selectors, id selectors, descendant selectors, pseudo-selectors, pseudo-state selectors&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Eg pseudo-state selectors&lt;/p&gt;


&lt;pre&gt;
@namespace s "library://ns.adboe.com/flex/spark";

s|Button:up {
  color:#000000;
}

s|Button:down {
  color:#FFFFFFF;
}
&lt;/pre&gt;

&lt;h3&gt;&lt;span class="caps"&gt;OSFM&lt;/span&gt;&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Generic framework for managing media in Flash applications&lt;/li&gt;
		&lt;li&gt;Offers playback functionality, exposed in the Spark video component&lt;/li&gt;
		&lt;li&gt;replaces FLVPlayback&lt;/li&gt;
		&lt;li&gt;org.osmf.media.MediaPlayer&lt;/li&gt;
		&lt;li&gt;Play, pause, stop, loop, seek, volume, autoLoop, autoPlay, ...&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;MXItemRenderer&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Spark ItemRenderers for use with MX List-based components&lt;/li&gt;
		&lt;li&gt;Extends Spark ItemRenderer and handles the contractual differences&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Charting Enhancements&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;FilterFunctions for chart types. Can specify custom filter functions against the data set&lt;/li&gt;
		&lt;li&gt;Inverted axis support&lt;/li&gt;
		&lt;li&gt;RendererDirection in PieSeries&lt;/li&gt;
		&lt;li&gt;Performance related bug fixes&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;RSLs&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;By default &lt;span class="caps"&gt;RSL&lt;/span&gt; is turned on.&lt;/li&gt;
		&lt;li&gt;Default linked HelloWorld is 78% smaller&lt;/li&gt;
		&lt;li&gt;How to &lt;a href="http://blogs.adobe.com/dloverin/2010/01/how_to_monkey_patch_when_using_flex_rsls.html"&gt;monkey patch when using RSLs&lt;/a&gt;. If you monkey patch you loose the benefits off RSLs&lt;/li&gt;
		&lt;li&gt;Flex is split in 6 RSLs: textlayout, osmf, framework, spark, sparkskins, rpc&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;&lt;span class="caps"&gt;MXML&lt;/span&gt; Vector&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;New type&lt;/li&gt;
		&lt;li&gt;Like Arrays but contents are restricted to a single base type&lt;/li&gt;
		&lt;li&gt;Faster than array&lt;/li&gt;
	&lt;/ul&gt;


&lt;pre&gt;
&amp;lt;fx:Vector id="myVector" type="String"&amp;gt;
  &amp;lt;fx:String&amp;gt;hi&amp;lt;/fx:String&amp;gt;
  &amp;lt;fx:String&amp;gt;bye&amp;lt;/fx:String&amp;gt;
&amp;lt;/fx:Vector&amp;gt;
&lt;/pre&gt;

&lt;h3&gt;Compile-time &lt;span class="caps"&gt;FGX&lt;/span&gt; Optimization&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;FXG&lt;/span&gt; directly to &lt;span class="caps"&gt;SWF&lt;/span&gt; representation&lt;/li&gt;
		&lt;li&gt;Faster and smaller&lt;/li&gt;
		&lt;li&gt;.fxg or past &lt;span class="caps"&gt;FXG&lt;/span&gt; into an &lt;span class="caps"&gt;MXML&lt;/span&gt; Component uses compile-time &lt;span class="caps"&gt;FXG&lt;/span&gt; Optimization&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;ASDoc&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Comments in &lt;span class="caps"&gt;MXML&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Support &lt;span class="caps"&gt;DITA&lt;/span&gt; creation&lt;/li&gt;
		&lt;li&gt;Max, Win, Linux&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Improved Compiler&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Incremental compilation. 50-80% better&lt;/li&gt;
		&lt;li&gt;Full compilation: 30-40% better (large apps)&lt;/li&gt;
		&lt;li&gt;Compiler Memory Usage: large apps are 30% better. multi-project apps are 70% better. Small apps are similar to Flex 3&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Tue, 09 Mar 2010 19:19:08 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:1672d4ec-7b0d-4040-ab92-c7412d6eb66f</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/09/360-flex-day-2-tuesday-live-blogging</link>
      <category>Flex</category>
    </item>
    <item>
      <title>360 Flex - Day 2 (Monday Afternoon) - Live Blogging</title>
      <description>&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/360flex_6_robot.png" alt="360flex_6_robot.png" border="0" width="400" height="300" /&gt;&lt;/div&gt;

&lt;h3&gt;Obey: Building a Rules Engine with &lt;span class="caps"&gt;AS3&lt;/span&gt; and the Hamcrest &lt;span class="caps"&gt;API&lt;/span&gt; &amp;#8211; Drew McClean &amp;#38; RJ Owen&lt;/h3&gt;

&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/360flex_7_rules.png" alt="360flex_7_rules.png" border="0" width="400" height="290" /&gt;&lt;/div&gt;

	&lt;p&gt;How are rules defined and implemented?&lt;/p&gt;


	&lt;p&gt;Rules Engine Anatomy: Facts -&amp;gt; Rules [Conditions=&amp;gt;Actions] -&amp;gt; Output&lt;/p&gt;


	&lt;p&gt;Battery is down!&lt;/p&gt;


&lt;h3&gt;Flex + Phidgets = Beer &amp;#8211; Kevin Hoyt&lt;/h3&gt;

	&lt;p&gt;Kevin&amp;#8217;s presentation was how to drive a &lt;a href="http://www.phidgets.com/"&gt;phidgets&lt;/a&gt; board to control dispensing beer to users with an rfid, taking a picture along the way and counting the numbers of beers that user had so far.  The board is driven from a Flex application. It was really impressive presentation.&lt;/p&gt;


&lt;h3&gt;Intro to Flex Typography &amp;#8211; Matt Guest&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Flash Text Engine&lt;/li&gt;
		&lt;li&gt;Text Layout Framework&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Tue, 09 Mar 2010 00:03:10 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:6e4c6366-9372-420c-b04b-28bdc0b539aa</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/09/360-flex-day-2-monday-afternoon-live-blogging</link>
      <category>Flex</category>
    </item>
    <item>
      <title>360 Flex - Day 2 (Monday Morning) - Live Blogging</title>
      <description>&lt;table&gt;&lt;tr&gt;&lt;td&gt;
&lt;img src="http://onrails.org/files/360flex_1_ebay.png" alt="360flex_1_ebay.png" border="0" width="221" height="166" /&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;img src="http://onrails.org/files/360flex_2_ebay.png" alt="360flex_2_ebay.png" border="0" width="124" height="166" /&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

	&lt;p&gt;Actually today is the first day of the conference. Yesterday was a tutorial day which was really fun. Today there will be a bunch of 1h20m sessions throughout the day. The conference is at the ebay headquarters.&lt;/p&gt;


&lt;div&gt;&lt;img src="http://onrails.org/files/360flex_3_keynote.png" alt="360flex_3_keynote.png" border="0" width="221" height="166" /&gt;&lt;/div&gt;

	&lt;p&gt;I was with three other guys from Denver and we nearly missed the start of the keynote as we took the light rail in the wrong direction. How can 4 engineers go so wrong? :-) Anyhow it doesn&amp;#8217;t seem we missed to much as it&amp;#8217;s starting with a talk from the sponsor (ebay/paypal) about the eBay developer program.&lt;/p&gt;


&lt;h3&gt;Keynote&lt;/h3&gt;

	&lt;p&gt;Now onto the main keynote by Deepa Subramaniam on the Adobe Flash Platform for her first keynote given ever.  She is the new Product Manager of the Flex &lt;span class="caps"&gt;SDK&lt;/span&gt;.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;The Flex 4 release is coming really soon.&lt;/li&gt;
		&lt;li&gt;Overview of Flex 4&lt;/li&gt;
		&lt;li&gt;Demo of spark components&lt;/li&gt;
		&lt;li&gt;Data-Centric Development&lt;/li&gt;
		&lt;li&gt;Video from the Flex team (geek funny)&lt;/li&gt;
	&lt;/ul&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/360flex_4__Deepa.png" alt="360flex_4_ Deepa.png" border="0" width="337" height="202" /&gt;&lt;/div&gt;

	&lt;p&gt;It&amp;#8217;s great that Deepa become the project manager of Flex 4, she understand what&amp;#8217;s programming is about. She now continues her talk on the Open Screen project.&lt;/p&gt;


	&lt;p&gt;Developing multi-screen applications (phone .vs. desktop&amp;#8230;)&lt;/p&gt;


	&lt;p&gt;Cross screen challenges/Cross device challenges&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Screen size&lt;/li&gt;
		&lt;li&gt;Input mechanisms&lt;/li&gt;
		&lt;li&gt;Performance&lt;/li&gt;
		&lt;li&gt;Context/use case changes&lt;/li&gt;
		&lt;li&gt;Screen size, orientation&lt;/li&gt;
		&lt;li&gt;...&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Flex can help &amp;#8211; &lt;strong&gt;Slider&lt;/strong&gt; (Mobile Flex Framework)&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Deliver top quality experience&lt;/li&gt;
		&lt;li&gt;Across multiple platforms&lt;/li&gt;
		&lt;li&gt;Within performance constraints&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The Slider team is hard a work and hope to have a preview available this year :-(... I want it earlier!&lt;/p&gt;


Growing Flex Ecosystem:
	&lt;ul&gt;
	&lt;li&gt;Functional Testing Tools&lt;/li&gt;
		&lt;li&gt;Performance and Load Test Tools&lt;/li&gt;
		&lt;li&gt;Flex Components&lt;/li&gt;
		&lt;li&gt;Frameworks&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;AMF&lt;/span&gt; servers&lt;/li&gt;
		&lt;li&gt;Tooling Extensions&lt;/li&gt;
		&lt;li&gt;Licensing+Encryption&lt;/li&gt;
		&lt;li&gt;Security Testing&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;All data visualization components now available in the free open-source Flex &lt;span class="caps"&gt;SDK&lt;/span&gt;!&lt;/p&gt;


	&lt;p&gt;Cool John is saying that they are recording the videos of each session.&lt;/p&gt;


&lt;h3&gt;Appocalypse Soon? The remaking of &amp;#8216;Flex Components&amp;#8217; &amp;#8211; Michael Labriola&lt;/h3&gt;

	&lt;p&gt;It&amp;#8217;s full house for Michael&amp;#8217;s talk. I&amp;#8217;m not sure how much live blogging I should do has they are video tapping each session.&lt;/p&gt;


	&lt;p&gt;This session is part of his continuing quest to teach Flex from the inside out. To learn about the Flash Player and the Flex framework.&lt;/p&gt;


	&lt;p&gt;Going to derive the Flex framework. Implement a custom component.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Flex 3 and Flex 4 components both descend from UIComponents&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Michael is not explain how the code execution is managed by the Flash Player and executed during a frame.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;All the basic Flex 3 methods also apply to Flex 4.&lt;/li&gt;
		&lt;li&gt;Flex 3: A base class and then a descendent class for each Layout. Problem i.e. verticalScrollPolicy=&amp;#8221;off&amp;#8221; to avoid unwanted scrollbars.&lt;/li&gt;
		&lt;li&gt;Flex 4: doesn&amp;#8217;t derive layout behavior but can assemble it.  Frame (Horizontal, Vertical, Diagonal). So the visuals don&amp;#8217;t exist inside of the class.&lt;/li&gt;
		&lt;li&gt;Flex 4 are based on two separate pieces: the form and the function.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Separating these pieces favors composition over inheritance. By separating these we gain and we loose&amp;#8230;&lt;/li&gt;
		&lt;li&gt;Gain: have one set of functionality look many different ways&lt;/li&gt;
		&lt;li&gt;Loose: a lot of dead weight and lots of extra classes&lt;/li&gt;
		&lt;li&gt;Two type of components: Controls and Containers&lt;/li&gt;
		&lt;li&gt;Flex 4: two types of things&amp;#8230; those that can be skinned and those that cannot&lt;/li&gt;
		&lt;li&gt;Groups are the base type of container&lt;/li&gt;
		&lt;li&gt;Groups don&amp;#8217;t have visual identify&lt;/li&gt;
		&lt;li&gt;BasicLayout, HorizontalLayout, VerticalLayout, TileLayout&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;New Hierarchy:&lt;/p&gt;


&lt;pre&gt;
UIComponent
    SkinnalbeComponent
    SkinnableContainerBase
        SkinnableContainer
            Applicaiton
            Panel
            Window
        SkinnableDataContainer
&lt;/pre&gt;

	&lt;ul&gt;
	&lt;li&gt;Skins are classes defined in &lt;span class="caps"&gt;MXML&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Applied to components using the skinClass or by &lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Components: declare skin parts and declare skin states&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Skins: specify a HostComponent&lt;/p&gt;


&lt;pre&gt;
&amp;lt;fx:Metadata&amp;gt;
   [HostComponent("spark.components.Button")]
&amp;lt;/fx:Metadata&amp;gt;
&lt;/pre&gt;

	&lt;p&gt;Declare states&lt;/p&gt;


&lt;pre&gt;
   &amp;lt;s:states&amp;gt;
    &amp;lt;s:State name="up" /&amp;gt;
    &amp;lt;s:State name="over" /&amp;gt;
   &amp;lt;/s:states&amp;gt;
&lt;/pre&gt;

	&lt;ul&gt;
	&lt;li&gt;How it all works: components need to size themselves, need to be created at runtime, need to interact with parents and children&lt;/li&gt;
		&lt;li&gt;Instanciation: all Flex components start with a constructors. Constructors in Flex add event listeners and setup initial properties&amp;#8230;That&amp;#8217;s it.&lt;/li&gt;
		&lt;li&gt;Display List: list of all the components that are on the screen at one point or another&lt;/li&gt;
		&lt;li&gt;Creating children: all visual children of a component are created in the createChildren method. The visual children of a component exists in the skin and so the skin is first created at this time.&lt;/li&gt;
		&lt;li&gt;Skin Methods: attachSkin, detachSkin, partAdded, partRemoved&lt;/li&gt;
		&lt;li&gt;Sizing: each component implements the measure() method. Flex works on the principle that children must be sized before their parent and it makes the sizing process potentially asynchronous. It works via a priority queue. Priority based on nest level.&lt;/li&gt;
		&lt;li&gt;Flex 4: children leave inside a skin and not the parent. The skin is a component, so we ask it the size of it&amp;#8217;s children. &lt;/li&gt;
		&lt;li&gt;Measured Data: measure is only a suggestion. &lt;/li&gt;
		&lt;li&gt;Sizing: parents size children. A component does not size itself.&lt;/li&gt;
		&lt;li&gt;Sizing and Positioning: sizing and positioning is done in a method called updateDisplayList(). &lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;UDL&lt;/span&gt;: components are given a size. One the size is given, the component is free to do what is wishes. For the most part, this information is simply passed down to the skin. Again recursion.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This was a great talk and clarifies many things which is great timing as I&amp;#8217;m starting to dive deeper into Flex 4.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://onrails.org/articles/2010/03/08/360-flex-day-2-monday-afternoon-live-blogging"&gt;To be continued&amp;#8230;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 08 Mar 2010 19:16:15 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:402a0e76-41dc-4765-bba6-7893dde74aaf</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/08/360-flex-day-2-monday-live-blogging</link>
      <category>Flex</category>
    </item>
    <item>
      <title>Import your MacHeist serials to AppShelf</title>
      <description>&lt;p&gt;If you have purchased the latest MacHeist nano bundle, you might have noticed that there is no option this time to export as an AppShelf file.  I felt a little guilty spamming my twitter followers to get my three free bonus apps (Airburst Extreme, Tracks, and Burning Monkey Solitaire), so to atone, I&amp;#8217;m sharing a script that will translate your reciept into an AppShelf import file.  Just save your receipt page from the browser, then pass the filename to this script as an argument:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;RUBYOPT=rubygems ruby generate-appshelf.import.rb MacHeist-Serial.html&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;The script will create an import file named &amp;#8220;nano-bundle-3.appshelf&amp;#8221; in your current directory.  Enjoy!&lt;/p&gt;


&lt;script src="http://gist.github.com/325458.js?file=generate-appshelf-import.rb"&gt;&lt;/script&gt;</description>
      <pubDate>Mon, 08 Mar 2010 18:55:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:f0e03814-1f21-4dbd-aad5-a2806901313c</guid>
      <author>Solomon White</author>
      <link>http://www.onrails.org/articles/2010/03/08/import-your-macheist-serials-to-appshelf</link>
    </item>
    <item>
      <title>360 Flex - Day 1 (Sunday) - Live Blogging</title>
      <description>&lt;p&gt;We just had a great breakfast at Peggy Sue&amp;#8217;s Dinner&amp;#8230;and moved over to the Ebay Headquarters where the conferences is about to start.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ll be taking notes during the day and updating this page as we go one.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;: Now that I typed all that I realized that Justin put up the slides and code on his blog: &lt;a href="http://blog.classsoftware.com/"&gt;http://blog.classsoftware.com/&lt;/a&gt;.&lt;/p&gt;


&lt;h1&gt;Connecting Arduino Hardware to Flex: Justin Mclean&lt;/h1&gt;

	&lt;p&gt;twitter: justinmclean
Justin is from Sydney, Australia.&lt;/p&gt;


Content:
	&lt;ul&gt;
	&lt;li&gt;Arduino platform, how to program and how to connect to Flex&lt;/li&gt;
		&lt;li&gt;2/3 Arduino 1/3 Flex&lt;/li&gt;
		&lt;li&gt;Hands on&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;So we&amp;#8217;ll go through the followings:&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Digital Inputs&lt;/li&gt;
		&lt;li&gt;Digital Outputs&lt;/li&gt;
		&lt;li&gt;Analogue Inputs&lt;/li&gt;
		&lt;li&gt;Pulse Width Modulation&lt;/li&gt;
		&lt;li&gt;Serial Communication&lt;/li&gt;
		&lt;li&gt;Connecting to Flex&lt;/li&gt;
		&lt;li&gt;Review and wrap up&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;So Justin gave each attendee one board and a set of components. The board is open source hardware. I think that&amp;#8217;s pretty cool. Feels like the hardware kit I bought for my 6 years son. The board is $25 and with all the components it&amp;#8217;s about $40.&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/arduino.png" alt="arduino.png" border="0" width="400" height="300" /&gt;&lt;/div&gt;

	&lt;p&gt;The hardware is provided to all participants by &lt;a href="http://sparkfun.com"&gt;&lt;strong&gt;sparkfun.com&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;Software&lt;/h3&gt;

	&lt;p&gt;http://arduino.cc/en/Main/Software&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/arduino_software.png" alt="arduino_software.png" border="0" width="350" height="247" /&gt;&lt;/div&gt;

	&lt;p&gt;Also install the serial driver: FTDIUSBSerialDriver_10_4_10_5_10_6&lt;/p&gt;


&lt;h3&gt;Other Hardwares&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;ATmega micro-controller from Atmel. It mostly runs in cars.&lt;/li&gt;
		&lt;li&gt;Arduino Duemilanove&lt;/li&gt;
		&lt;li&gt;Arduino Pro and Pro mini&lt;/li&gt;
		&lt;li&gt;Lyllypad (warable)&lt;/li&gt;
		&lt;li&gt;Funnell IO&lt;/li&gt;
		&lt;li&gt;Mega&lt;/li&gt;
		&lt;li&gt;Many others&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;ATMega328&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Hight performance low power &lt;span class="caps"&gt;RISC&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;16 Mzh up to 16 mips (faster as your first pc you owned &amp;#8211; if you are a bit older)&lt;/li&gt;
		&lt;li&gt;32K of Memory&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;SPI&lt;/span&gt; and 2 wire serial interfaces&lt;/li&gt;
		&lt;li&gt;External interrupts, timers, pulse width modulation&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;&lt;span class="caps"&gt;IDE&lt;/span&gt;&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;IDE&lt;/span&gt; open sourcee and cross platform. &lt;/li&gt;
		&lt;li&gt;Based on the Processing language&lt;/li&gt;
		&lt;li&gt;Many open source sketches (projects) and libraries availables. Ethernet library, servers, ...&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;First Program&lt;/h3&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts
void setup()   {                
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);     
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()                     
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Now this will make the led blink:&lt;/p&gt;


&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PS5UcEYQdBA&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PS5UcEYQdBA&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;h3&gt;Programming&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;C like language based o wiring&lt;/li&gt;
		&lt;li&gt;Write code and compile in &lt;span class="caps"&gt;IDE&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Upload compiled code using &lt;span class="caps"&gt;USB&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Hard to debug&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Circuit Basics&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Ground and power&lt;/li&gt;
		&lt;li&gt;Potential difference required for current ot flow&lt;/li&gt;
		&lt;li&gt;Conductors and resistors&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Digital Inputs/Outputs&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Digital pins on Arduino are dual purpose&lt;/li&gt;
		&lt;li&gt;Digital logic and voltage on = 5V off = 0V&lt;/li&gt;
		&lt;li&gt;Can be set to be input or output via pinMode&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Variables&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;boolean, char, byte, int, long, float, double, string and array&lt;/li&gt;
		&lt;li&gt;int 16 bits, long 32 bits, float 32 bits&lt;/li&gt;
		&lt;li&gt;Strings are nul terminated &amp;#8217;\0&amp;#8217;&lt;/li&gt;
		&lt;li&gt;Declare by &lt;datatype&gt; &lt;variable name&gt;; eg int i;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;It&amp;#8217;s actually C++...What?! At a Flex conferences :-)&lt;/p&gt;


&lt;h3&gt;Setup Function&lt;/h3&gt; 

	&lt;ul&gt;
	&lt;li&gt;Used for initialization&lt;/li&gt;
		&lt;li&gt;Run when program loaded or board reset&lt;/li&gt;
		&lt;li&gt;Best place to place calls to pinMode&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;LEDs&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Current will only flow in one direction&lt;/li&gt;
		&lt;li&gt;Longest pin connect to positive side, shortest to ground&lt;/li&gt;
		&lt;li&gt;Dont&amp;#8217; connect directly to power source use in series with resistors&lt;/li&gt;
	&lt;/ul&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/leds.png" alt="leds.png" border="0" width="300" height="225" /&gt;&lt;/div&gt;

&lt;h3&gt;Resistors&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Resistors limit current flowing through them&lt;/li&gt;
		&lt;li&gt;Value and tolerance indicated by cooler bands&lt;/li&gt;
		&lt;li&gt;Resistor values for LEDs&lt;/li&gt;
		&lt;li&gt;For &lt;span class="caps"&gt;RGB&lt;/span&gt; or &lt;span class="caps"&gt;LEG&lt;/span&gt; digits you need multiple resitors&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;REG&lt;/span&gt;/GREEN/BLUE 180 oms, &lt;span class="caps"&gt;WHITE&lt;/span&gt;/ULTRAVIOLET 100 oms&lt;/li&gt;
	&lt;/ul&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/resistors.png" alt="resistors.png" border="0" width="300" height="225" /&gt;&lt;/div&gt;

&lt;h3&gt;Debugging ia Serial Port&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Use Serial.begin to set speed&lt;/li&gt;
		&lt;li&gt;Serial.print, Serial.println to output&lt;/li&gt;
		&lt;li&gt;Use serial monitor in &lt;span class="caps"&gt;IDE&lt;/span&gt; to view&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Blinking &lt;span class="caps"&gt;LED&lt;/span&gt;&lt;/h3&gt;

	&lt;p&gt;Same program that the first program but this time we just set the led to the pin 3 which is connected to the board.&lt;/p&gt;


&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/H_nD-bWSNuI&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/H_nD-bWSNuI&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;h3&gt;Digital Inputs&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Some logic as inputs; hight 95V0 or low (0V)&lt;/li&gt;
		&lt;li&gt;Simplest digital input switch&lt;/li&gt;
		&lt;li&gt;Call pinMode to set as digital input as input&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Connect Switch&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Wire up push button on breadboard&lt;/li&gt;
		&lt;li&gt;Change code to turn light on/off&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Now switches have three states (on, off, and in between) to the board needs to be wired to take that into account so you can program it accordingly. We added a very high resistence (10k) next to switch to ensure that the switch reports 0V when not clicked.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;int led = 3;
int button = 4;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
}

void loop() {
  if (digitalRead(button) == HIGH)  {  
    Serial.println(&amp;quot;on&amp;quot;); 
    digitalWrite(led, HIGH);    
  } else {
    Serial.println(&amp;quot;off&amp;quot;); 
    digitalWrite(led, LOW);  
  }
}  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;So let&amp;#8217;s look at the wiring and how the switch operates:&lt;/p&gt;


&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/45Haml5UCIc&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/45Haml5UCIc&amp;#38;hl=en_US&amp;#38;fs=1&amp;#38;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;h3&gt;Internal Pullup Resistors&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Set mode to input&lt;/li&gt;
		&lt;li&gt;digitalWrite to &lt;span class="caps"&gt;HIGHT&lt;/span&gt; to turn on&lt;/li&gt;
		&lt;li&gt;digitalWrite to &lt;span class="caps"&gt;LOW&lt;/span&gt; to turn off&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;So there is something like the 10K resistor built-in the board to avoid using an extra resistor on the board to make sure the switch values are on or off.&lt;/p&gt;


&lt;h3&gt;Switch Issues&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Switches can bounce and give and off values while switching&lt;/li&gt;
		&lt;li&gt;Noise can give false results&lt;/li&gt;
		&lt;li&gt;More a problem when switching needs to be counted&lt;/li&gt;
		&lt;li&gt;Use timer to solve issue (time = millis())&lt;/li&gt;
	&lt;/ul&gt;


&lt;h3&gt;Analog Inputs &amp;#38; Potentiometer &lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Can read values via analogRead&lt;/li&gt;
		&lt;li&gt;Result is in range 0 to 1023 (10 bits)&lt;/li&gt;
		&lt;li&gt;Potentiometer is Variable resistor&lt;/li&gt;
		&lt;li&gt;Eg Read potentiometer values with Analog Inputs&lt;/li&gt;
	&lt;/ul&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;int led = 3;
int pot = 0;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
    int value = analogRead(pot);
    digitalWrite(led, HIGH);    
    // Set delay based on analog input
    delay(value);
    digitalWrite(led, LOW);  
    delay(value);
}  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;So now when the potentiometer is turned to the right a value of 1023 is returned and the lights blinks on and off for about 1 seconds. Turning to the left makes the delay shorted (down to 0) and you can get it to run blink really fast.&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/potentiometer.png" alt="potentiometer.png" border="0" width="400" height="300" /&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span class="caps"&gt;LDR&lt;/span&gt;&lt;/h3&gt;

	&lt;ul&gt;
	&lt;li&gt;Light dependent resistor (high resistance)&lt;/li&gt;
		&lt;li&gt;Set flash rate based on value of &lt;span class="caps"&gt;LDR&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This is a great full day tutorial and everyone seems to have fun. It&amp;#8217;s pretty basic, but it&amp;#8217;s the first time I program hardware.&lt;/p&gt;


	&lt;p&gt;Now we are writing fadeIn and fadeOut functions and get the light to pulse on and off&lt;/p&gt;


&lt;pre&gt;
void fadeIn(int led) {
  for (int i=0; i&amp;lt;256; i++) {
    analogWrite(led, i);
    delayMicroseconds(5000);
  }
}

void fadeOut(int led) {
  for (int i=255; i &amp;gt;= 0; i--) {
    analogWrite(led, i);
    delayMicroseconds(5000);
  }
}

void loop() {
    fadeIn(led);    
    fadeOut(led);  
}  
&lt;/pre&gt;

	&lt;p&gt;Now we replace the light sensor by a temperature sensor. There are also air quality sensors, breathalyzers.&lt;/p&gt;


&lt;h3&gt;Flex&lt;/h3&gt;

	&lt;p&gt;Communication between Flex and Arduinos.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Software on Arduino (Firmata)&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt; serial to socket proxy&lt;/li&gt;
		&lt;li&gt;Flex event based library to talk to socket (as3Glue)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Firmata is an Arduino library that support a binary protocol over serial interface. It&amp;#8217;s Bi-directiona. Use version 2.&lt;/p&gt;


	&lt;p&gt;In the Arduino &lt;span class="caps"&gt;IDE&lt;/span&gt; let&amp;#8217;s load the StandardFirmata program (File|Examples|Firmata|StandardFirmata). It&amp;#8217;s a 286 lines program similar to the code we wrote so far, but more complex.&lt;/p&gt;


	&lt;p&gt;Server Proxy&lt;/p&gt;


	&lt;p&gt;From http://arduino.cc/en/Main/Software the server proxy (end of page)&lt;/p&gt;


	&lt;p&gt;To configure proxy first find what your serial device is. 
In terminal do: ls /dev/cu*&lt;/p&gt;


	&lt;p&gt;/dev/cu.Bluetooth-Modem         
/dev/cu.Bluetooth-PDA-Sync      
/dev/cu.usbserial-A600ailA&lt;/p&gt;


	&lt;p&gt;Then add this line to your serproxy.cfg:
serial_device=/dev/cu.usbserial-A600ailA&lt;/p&gt;


	&lt;p&gt;Then we just start the server proxy:
$ ./serproxy 
Serproxy &amp;#8211; (C)1999 Stefano Busti, (C)2005 David A. Mellis &amp;#8211; Waiting for clients&lt;/p&gt;


	&lt;p&gt;Now in Flex you need to add the as3glue code (http://code.google.com/p/as3glue/) then you can drive arduino as follows:&lt;/p&gt;


&lt;pre&gt;
private var arduino:Arduino = new Arduino();

private function init():void {
    arduino.addEventListener(ArduinoEvent.FIRMWARE_VERSION, turnLedOn);            
}

private function turnLedOn(event:ArduinoEvent):void {
    arduino.setPinMode(13, Arduino.OUTPUT);
    arduino.writeDigitalPin(13, Arduino.HIGH);
}
&lt;/pre&gt;

	&lt;p&gt;A qik look at the class room in the middle of coding their Flex app to drive their Arduino device:&lt;/p&gt;


&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="425" height="319" id="qikPlayer" align="middle"&gt;&lt;param name="allowScriptAccess" value="sameDomain" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="movie" value="http://qik.com/swfs/qikPlayer5.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#333333" /&gt;&lt;param name="FlashVars" value="streamID=515f621ccf514b6b8ad9dfb0c62ad851&amp;amp;autoplay=false" /&gt;&lt;embed src="http://qik.com/swfs/qikPlayer5.swf" quality="high" bgcolor="#333333" width="425" height="319" name="qikPlayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" FlashVars="streamID=515f621ccf514b6b8ad9dfb0c62ad851&amp;amp;autoplay=false"&gt;&lt;/embed&gt;&lt;/object&gt;

	&lt;p&gt;Now we are going to write some Flex code to have some buttons that turn on/off some functions of the board.&lt;/p&gt;


&lt;pre&gt;
private var arduino:Arduino = new Arduino();
private const pin:int = 3;
private const button:int = 4;

private function arduinoInit(event:Event):void {
    arduino.enableDigitalPinReporting();
    arduino.setPinMode(pin, Arduino.OUTPUT);
    arduino.setPinMode(button, Arduino.INPUT);

    arduino.addEventListener(ArduinoEvent.DIGITAL_DATA, buttonChanged);
}

private function buttonChanged(event:ArduinoEvent):void {
    if (event.pin==button) {
        event.value == Arduino.HIGH ? turnOn() : turnOff();
    }
}

private function turnOn():void {
    arduino.writeDigitalPin(pin, Arduino.HIGH);
}

private function turnOff():void {
    arduino.writeDigitalPin(pin, Arduino.LOW);
}
&lt;/pre&gt;

	&lt;p&gt;Thanks Justin, great talk!&lt;/p&gt;</description>
      <pubDate>Sun, 07 Mar 2010 23:17:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:cfdf5dd6-a004-4e87-add2-1391d0082cc0</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/07/360-flex-day-1-sunday-live-blogging</link>
      <category>Flex</category>
    </item>
    <item>
      <title>vault.ncaa.com : under the hood of a cool Flex project.</title>
      <description>&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/vault.png" alt="vault.png" border="0" width="350" height="378" /&gt;&lt;/div&gt;

	&lt;p&gt;&lt;a href="http://www.thoughtequity.com"&gt;Thought Equity Motion&lt;/a&gt; and &lt;a href="http://www.ncaa.com/"&gt;&lt;span class="caps"&gt;NCAA&lt;/span&gt;&lt;/a&gt; two days ago officially released the &lt;a href="http://vault.ncaa.com/"&gt;Ncaa Vault&lt;/a&gt;. A cool Flex app backed by an incredible video database with awesome metedata about each game&amp;#8230;and released just in time for March Madness.&lt;/p&gt;


	&lt;p&gt;Here are a few of the announcements and online articles describing the services:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.thoughtequity.com/video/shell/txp/ncaa-and-thought-equity-motion-unveil-first-ever-video-powered-vault-for-ncaa-march-madness.do?title=NCAA®%20and%20Thought%20Equity%20Motion%20Unveil%20First%20Ever%20Video-Powered%20Vault%20for%20NCAA%20March%20Madness®?title=NCAA®%20and%20Thought%20Equity%20Motion%20Unveil%20First%20Ever%20Video-Powered%20Vault%20for%20NCAA%20March%20Madness®&amp;#38;mkid=tw_3-3-10"&gt;&lt;span class="caps"&gt;NCAA&lt;/span&gt;® and Thought Equity Motion Unveil First Ever Video-Powered Vault for &lt;span class="caps"&gt;NCAA&lt;/span&gt; March Madness®&lt;/a&gt; &amp;#8211; by Thought Equity&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.nytimes.com/2010/03/03/sports/ncaabasketball/03ncaa.html"&gt;N.C.A.A. Tournament Goes Online, Clip by Clip&lt;/a&gt; &amp;#8211; by the New York Times&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.wired.com/playbook/2010/03/say-hello-to-the-ncaa-vault-adieu-to-productivity/#ixzz0hGq1bpTzhttp://www.wired.com/playbook/2010/03/say-hello-to-the-ncaa-vault-adieu-to-productivity/"&gt;Say Hello to &lt;span class="caps"&gt;NCAA&lt;/span&gt; Vault, Adieu to Productivity&lt;/a&gt; &amp;#8211; by Wired&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;In fact with the Vault you can have a &lt;span class="caps"&gt;URL&lt;/span&gt; right into a specific moment of any game and Wired picked out a great &lt;a href="http://bit.ly/c9eQSU"&gt;last second tying shot&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The twittersphere feedback is also &lt;a href="http://search.twitter.com/search?q=vault+ncaa"&gt;pretty impressive&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;This is the most visible Flex app I worked on :-) Late January &lt;a href="http://twitter.com/theaboutbox"&gt;Cameron Pope&lt;/a&gt; contacted me to ask if I could help on a Flex project for &lt;span class="caps"&gt;NCAA&lt;/span&gt; and Thought Equity. The funny part is that I didn&amp;#8217;t know that Cameron was such a great Flex developer, I met him via the Denver Ruby on Rails User Group (derailed) and I also didn&amp;#8217;t know what &lt;span class="caps"&gt;NCAA&lt;/span&gt; was (don&amp;#8217;t shoot, I didn&amp;#8217;t grow up in the US and we don&amp;#8217;t have TV). So when I asked my father in law about &lt;span class="caps"&gt;NCAA&lt;/span&gt; and realized it was about Basketball I was intrigued by what type of application we needed to build. Cameron showed me the mockups built by Donny Wells which is just an awesome graphical designer. These mockups where just incredible and then I was presented the video service technology the Thought Equity Motion team put together, and I was just blown away and though that this would be a cool project to work on.&lt;/p&gt;


	&lt;p&gt;Cameron was the main Flex developer and I just worked part time on Monday&amp;#8217;s on this project. If you need and incredible Flex developer just contact Cameron.&lt;/p&gt;


	&lt;p&gt;Now let&amp;#8217;s dive more into the Flex nitty-gritty details:&lt;/p&gt;


	&lt;p&gt;For the mvc architecture  we used the &lt;a href="http://swizframework.org/"&gt;Swiz Framework&lt;/a&gt; and this turned out to  work exceptionally well. Swiz sports some dependency injection features that can be enabled via the [Autowire] tag and I was surprised when I realized I could also just use that feature in an item render. Let&amp;#8217;s look at a little detail&amp;#8230;For the play by play timeline if a play is in the future it is displayed in bold:&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/timeline.png" alt="timeline.png" border="0" width="350" height="129" /&gt;&lt;/div&gt;

	&lt;p&gt;So each line of the timelime is rendered by the TimeLineItemRender and you can just autowire the model which contains the playhead position.&lt;/p&gt;


&lt;pre&gt;
      [Autowire]
      [Bindable]
      public var vaultModel:Vault;
&lt;/pre&gt;

	&lt;p&gt;The we can set the style name accordingly based on the play&amp;#8217;s start time and the current playhead position:&lt;/p&gt;


&lt;pre&gt;
   styleName="{data.startTime &amp;lt; vaultModel.playheadPosition ? 'past' : 'future'}" 
&lt;/pre&gt;

	&lt;p&gt;The style of the application was created by the designer and Cameron did a great job reproducing it using &lt;a href="http://www.degrafa.org/"&gt;Degrapha&lt;/a&gt; for skinning () using an approach similar to this &lt;a href="http://www.degrafa.org/source/ButtonLoader/ButtonLoader.html"&gt;example&lt;/a&gt; (example &lt;a href="http://www.degrafa.org/source/ButtonLoader/srcview/index.html"&gt;source&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;Most of my work was around the searching, bug fixing and general architecture overview. We took a similar approach to the one I described &lt;a href="http://onrails.org/articles/2007/11/27/flash-utils-bytearray-compressing-4-1mb-to-20k"&gt;here&lt;/a&gt; in order to avoid most of the server round trips during searching.&lt;/p&gt;


	&lt;p&gt;The Flex app is just a pretty face,  behind the scene Thought Equity provides an incredible services that they will expose in many ways, the start can be seen &lt;a href="http://www.thoughtequity.com/video/home/article/ncaa_vault_publishing.do"&gt;here&lt;/a&gt; and all that data will be able to be accessed via &lt;span class="caps"&gt;API&lt;/span&gt; and other means.&lt;/p&gt;


	&lt;p&gt;This was a short but incredible project for me, the guys at Though Equity have such an incredible vision on how to turn these sport videos into something so much bigger! Thank you guys for getting me on board.&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/thoughtequity.png" alt="thoughtequity.png" border="0" width="245" height="30" /&gt;&lt;/div&gt;

	&lt;p&gt;Enjoy!
Daniel Wanja&lt;/p&gt;</description>
      <pubDate>Fri, 05 Mar 2010 19:10:03 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:d055b334-ad37-4056-a0cd-119a50b6c25e</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/03/05/vault-ncaa-com-under-the-hood-of-a-cool-flex-project</link>
      <category>Flex</category>
    </item>
    <item>
      <title>Rails 3: Rack Middleware</title>
      <description>&lt;p&gt;I&amp;#8217;m watching the &lt;a href="https://oreillymedia.webex.com/mw0306l/mywebex/default.do?siteurl=oreillymedia"&gt;Rails Online Conference&lt;/a&gt;, February 2010 Exploring Rails 3 and really like how they setup the rack middleware.&lt;/p&gt;


	&lt;p&gt;...From the slides.&lt;/p&gt;


&lt;h1&gt;Rack Middleware&lt;/h1&gt;

	&lt;p&gt;&lt;a href="http://github.com/rack/rack/tree/master/lib/rack"&gt;http://github.com/rack/rack/tree/master/lib/rack&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;Content Modifying&lt;/h3&gt;

&lt;pre&gt;
Rack::Chunked
Rack::ContentLength
Rack::ConditionalGet
Rack::ContentType
Rack::Deflater
Rack::ETag
Rack::Head
Rack::MethodOverride
Rack::Runtime
Rack::Sendfile
Rack::ShowStatus
&lt;/pre&gt;

&lt;h3&gt;Behavioral&lt;/h3&gt;

&lt;pre&gt;
Rack::CommonLogger
Rack::Lint
Rack::Lock
Rack::Reloader
&lt;/pre&gt;

&lt;h3&gt;Routing&lt;/h3&gt;

&lt;pre&gt;
Rack::Cascade
Rack::Recursive
Rack::Static
Rack::URLMap
&lt;/pre&gt;

&lt;h1&gt;Rack::Contrib&lt;/h1&gt;

	&lt;p&gt;&lt;a href="http://github.com/rack/rack-contrib"&gt;http://github.com/rack/rack-contrib&lt;/a&gt;&lt;/p&gt;


&lt;pre&gt;
Rack::AcceptFormat
Rack::Access
Rack::Backstage
Rack::Callbacks
Rack::Config
Rack::Cookies
Rack::CSSHTTPRequest
Rack::Deflect
Rack::Evil
Rack::HostMeta
Rack::JSONP
Rack::LighttpdScriptNameFix
Rack::Locale
Rack::MailExceptions
Rack::NestedParams
Rack::NotFound
Rack::ProcTitle
Rack::Profiler
Rack::ResponseCache
Rack::ResponseHeaders
Rack::RelativeRedirect
Rack::Signals
Rack::SimpleEndpoint
Rack::TimeZone
&lt;/pre&gt;

&lt;h1&gt;Coderack.org&lt;/h1&gt;

	&lt;p&gt;Check also out &lt;a href="http://coderack.org/"&gt;http://coderack.org&lt;/a&gt; ...99 pieces of Rack Middleware&lt;/p&gt;


&lt;h1&gt;RailsGuide: Rails On Rack&lt;/h1&gt;

	&lt;p&gt;&lt;a href="http://guides.rubyonrails.org/rails_on_rack.html"&gt;http://guides.rubyonrails.org/rails_on_rack.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 18 Feb 2010 19:14:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:3e8f97c0-1bc0-4ba4-9dd4-4a7892121e0d</guid>
      <author>Daniel Wanja</author>
      <link>http://www.onrails.org/articles/2010/02/18/rails-3-rack-middleware</link>
      <category>Ruby On Rails</category>
      <category>Rails3</category>
    </item>
  </channel>
</rss>
