<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>DevelopRIA</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/" />
    <link rel="self" type="application/atom+xml" href="http://www.developria.com/atom.xml" />
    <id>tag:www.developria.com,2011-01-20://1</id>
    <updated>2011-01-28T20:38:27Z</updated>
    <subtitle>Supporting content for developing rich Internet applications.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.35-en</generator>

<entry>
    <title>It&apos;s been a great ride...</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/its-been-a-great-ride.html" />
    <id>tag:www.developria.com,2011://1.1605</id>

    <published>2011-01-28T18:52:34Z</published>
    <updated>2011-01-28T20:38:27Z</updated>

    <summary>As you know the site is closing on January 31st, so I just wanted to take this last opportunity to say thank you to O&apos;Reilly for giving me the opportunity to work on such a great project. I would also like to thank Adobe for their support, the authors for their dedication, and all in the community who I have supported the site.</summary>
    <author>
        <name>Rich Tretola</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>InsideRIA was conceived in late 2007 as community site which focused on Rich Internet Applications.  Over the last 3 years there have been many core team members from both Adobe and O'Reilly that have come and gone. There have also been over 200 different authors from the development community who have contributed content to InsideRIA. These authors established InsideRIA as not only a fantastic resource for all things RIA but, also to many, the unofficial source of information about RIA.</p>

<p>As you know the site is closing on January 31st, so I just wanted to take this last opportunity to say thank you to O'Reilly for giving me the opportunity to work on such a great project. I would also like to thank Adobe for their support, the authors for their dedication, and all in the community who I have supported the site.</p>

<p>An archive of the material previously posted on InsideRIA can be found on <a href="http://developria.com">DevelopRIA.com</a>.</p>

<p>Rich Tretola</p>

<p>Some additional resources for where you will be able to continue to find great RIA-focused content:</p>

<p><a href="http://answers.oreilly.com/">O'Reilly Answers</a> (<a href="http://answers.oreilly.com/">http://answers.oreilly.com</a>) is an excellent resource for getting information about everything technology related at <a href="http://answers.oreilly.com/">answers.oreilly.com</a>. We also suggest that you share your knowledge at the <a href="http://answers.oreilly.com/">O'Reilly Answers</a> site and help the new members of the development community grow into future leaders in our industry.</p>

<p><a href="http://developer.adobe.com">Adobe Developer Connection</a> (<a href="http://developer.adobe.com">http://developer.adobe.com</a>) is another fantastic resource for Adobe technologies and has a huge repository of information on Adobe's RIA tools like Flash, Flex, AIR, etc. If you haven't been reading the great content available at the <a href="http://developer.adobe.com">ADC</a>, we definitely suggest you check it out.</p>]]>
        
    </content>
</entry>

<entry>
    <title>What do you get when you split() a string of numbers?</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/what-do-you-get-when-you-split.html" />
    <id>tag:www.developria.com,2011://1.1604</id>

    <published>2011-01-26T02:48:46Z</published>
    <updated>2011-01-28T20:38:26Z</updated>

    <summary>I&apos;ve been doing the Developer Diary for almost two years now. If you&apos;ve been reading my posts over that time, you already know that I like to nail down the finer points of code. Today, a coworker and I had...</summary>
    <author>
        <name>Amy Blankenship</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>I've been doing the Developer Diary for almost two years now.  If you've been reading my posts over that time, you already know that I like to nail down the finer points of code. Today, a coworker and I had a discussion about whether if you started out with a String that looked like '1,2,3,4...' and called split() on it if you would wind up with an Array of Strings or an Array of Numbers.</p>
<p>It's not important who took which position, but the question had important performance ramifications, because we wind up needing the &quot;thing&quot; in that index in both Number and String forms. If we have Strings but think we have Numbers, then we would do something like</p>
<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 
	var s:String = '1,2,3,4,5,6';
	var arr:Array = s.split(',');
	var numVal:Number = arr[0];
	var stringVal:String = numVal.toString();
</mt:CodeBeautify> 
</div></div> 

<p>This would result in an implicit coercion to Number, then another, unnecessary, cast back to String. If, on the other hand, we have Numbers but think we have Strings, we would wind up with double the casts we need. It is only by knowing exactly what type the split function confers on those Array items that we can get this right.</p>
<p>My first stop was the docs, which had this to say.</p>
<blockquote>
	<p>split(delimiter:*, limit:Number = 0x7fffffff):Array<br />
	Splits a String object into an array of substrings by dividing it wherever the specified delimiter parameter occurs.</p>
</blockquote>
<p>This at least strongly implies that each element should be a string.</p>
<p>Let's put it to the test:</p>
<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 
	public function SplitTest() {
		var s:String = '1,2,3,4,5,6';
		var arr:Array = s.split(',');
		trace(arr[0] is Number);
		trace(arr[0] is String);
	}
</mt:CodeBeautify> 
</div></div> 
<p>Traces:</p>
<p>false</p>
<p>true</p>
<p>There you have it. The data type of numeric elements in a String that is split is still...String.</p>
<h2>Thank you for your support</h2>
<p>Speaking of split, my time blogging for InsideRIA has come to an end&#8211;<a href="http://developria.com/2011/01/insideria-announcement.html">in fact InsideRIA is shutting down</a>. I want to thank Steve Weiss for giving me the chance to do this and Rich Tretola for continuing to encourage me. Most of all, I want to thank you, the readers, for giving me the motivation to keep writing week in and week out. Hopefully at least some of what I have had to say over the past almost two years has given you food for thought. I wish you all the best, and I will be around somewhere.</p>]]>
        
    </content>
</entry>

<entry>
    <title>jQuery RC 1 is out, final release by end of Jan</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/jquery-rc-1-is-out-final-relea.html" />
    <id>tag:www.developria.com,2011://1.1603</id>

    <published>2011-01-25T20:09:46Z</published>
    <updated>2011-01-28T20:38:26Z</updated>

    <summary>jQuery 1.5 moves closer to release. Today, the latest build is now a Release Candidate.</summary>
    <author>
        <name>Matthew David</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html" label="html" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jquery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webapp" label="web app" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>Jon Resig and his team are working hard. Fast on the release of jQuery 1.5 Beta comes the Release Candidate for jQuery 1.5. Get it here:</p>

<p><a href="http://code.jquery.com/jquery-1.5rc1.js">http://code.jquery.com/jquery-1.5rc1.js</a></p>

<p>The news gets even better. In his blog, Jon is hoping to have a final release of jQuery by the end of January. How cool is that?</p>

<p>Read Jon's full blog post here: <a href="http://blog.jquery.com/2011/01/24/jquery-15rc-1-released/">http://blog.jquery.com/2011/01/24/jquery-15rc-1-released/</a></p>

<p>Will you be adding jQuery 1.5 to your Web site applications?</p>]]>
        
    </content>
</entry>

<entry>
    <title>HTML5 Logo now means HTML5</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/html5-logo-now-means-html5.html" />
    <id>tag:www.developria.com,2011://1.1602</id>

    <published>2011-01-25T17:36:17Z</published>
    <updated>2011-01-28T20:38:25Z</updated>

    <summary>The World Wide Web Consortium Group gives emerging new technologies a new brand.</summary>
    <author>
        <name>Matthew David</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html" label="html" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>Last week the World Wide Web Consortium Group (W3C) released a new logo to help identify HTML5. Here it is:</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="html5Logo.png" src="http://developria.com/html5Logo.png" width="69" height="73" class="mt-image-none" style="" /></span><br />
 <br />
The logo caught a lot of flak.  The message from W3C is that HTML5 stands for a collection of new technologies falling under the HTML5 marketing banner. But, it was not just HTML5 - HTML5, technically speaking, is a collection of new elements/tags and attributes such as Video, Audio, Footer, Section - now the new logo includes CSS3, Web Workers, Local Data Storage, WOFF fonts and a slew of emerging technologies.<br />
This week, W3C are clearing up the mess a little bit. We now have an extension to the logo. Here it is:</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="html5Logo2.png" src="http://developria.com/html5Logo2.png" width="343" height="77" class="mt-image-none" style="" /></span><br />
 <br />
OK, so what&#8217;s new? Well, the HTML5 logo now means just HTML5. The smaller logos following the logo refer to collections of technologies that are emerging with HTML5. This group includes: HTML5 Semantics, Offline and Storage, Device Access, Connectivity, Multimedia, 3D/Graphics/Effects, Performance/Integration and CSS3.<br />
The problem I have is that the term &#8220;HTML5&#8221; has already morphed into a marketing term. This is similar to DHTML, Web 2.0 and Ajax (or &#8220;AJAX&#8221;, depending which camp you sit in). Did we need a logo and then a second logo a week later? Not really. Don&#8217;t get me wrong, I like the logo, but a standards body seems the wrong place to create a marketing brand. Leave that to Apple, Google, Microsoft, Adobe and the many other companies selling HTML5 products.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Speaking At Conferences</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/speaking-at-conferences.html" />
    <id>tag:www.developria.com,2011://1.1601</id>

    <published>2011-01-25T17:00:00Z</published>
    <updated>2011-01-28T20:38:25Z</updated>

    <summary> Advanced Flash Tactics or AFTs are techniques that come from deep within the Flash Art Of War , the oldest Flash military treatise in the world . In this AFT I will go over - Speaking At Conferences. I...</summary>
    <author>
        <name>Jesse Freeman</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<div class="ap_r" style="margin-top:-2px;">
  <img src="http://www.developria.com/upload/2009/11/faow_logo_aft.gif" alt="aft_logo.jpg" width="148"/>
</div>

<p>Advanced Flash Tactics or AFTs are techniques that come from deep within the 
    <b>
      <a target="_blank" target="_blank" target="_blank" href="http://flashartofwar.com">Flash Art Of War
      </a>
    </b>, 
    <i>the oldest Flash military treatise in the world
    </i>. In this AFT I will go over - 
    <b>Speaking At Conferences</b>. I was recently accepted as a speaker at <a href="http://www.fitc.ca/events/about/?event=116" target="_blank">FITC 2011 in Toronto</a> and I consider it a great honor. FITC is one of the longest running Flash conferences. Getting accepted didn&rsquo;t happen over night. I worked very hard over the past year and a half to become a better conference speaker. Like me, you may have many reasons for wanting to speak at a conference. Maybe you are looking for more exposure in the community, want to share the work you have been doing or perhaps it is something that your company wants you to do in order to help their name recognition. Whatever your reason is, becoming a speaker at a conference involves a lot of work as well as a little bit of luck. In this post I will cover a few things you can do to help you increase your chances at becoming a speaker.</p>

<h3>Blog and Twitter</h3>
<p>New York is a funny market, we have a lot of really talented Flash developers that are not active in the community. Most of it revolves around the fact that we work so much. Plus just being in NY is an &ldquo;in&rdquo; since chances are you will be working on some high profile work. No matter where you live though, you should be looking for ways to gain more exposure. It wasn&rsquo;t until I went to Flash Belt 4 years ago that I got the motivation to share what I was doing in the community. That is when I created FlashArtOfWar.com and it helped lay the foundation of my expertise. A year and a half ago I started using twitter and my &ldquo;fame&rdquo; sky-rocketed. Mostly because I have a loud mouth and get a lot of attention for the things I say but it also put me in better touch with the community and the people at the top of it. I think Twitter has done an amazing job at killing off the blog and you could easily rely on it to make a name for yourself. Either way, the best thing you can do is show off as much of your work as you can to gain attention from your peers.</p>

<h3>Open Source</h3>
<p>Talking about work is great but letting people see what you are doing is perhaps the best thing you can to in order to let people know you can walk the walk. Being part of a large open source project is also a huge boon. If there isn&rsquo;t a project you feel like becoming a contributor on, then start your own. Make sure you blog and tweet about it as well to help gain attention. Also, helping contribute to the Open Source community is good for the soul.</p>

<h3>Become An Expert</h3>
<p>The last thing you want to do is be average. If you are a Jack of all trades but a master of none, people will follow you but it becomes hard to figure out just what it is that you do. Coming from someone who is all over the place it&rsquo;s hard to pick just one thing but I really focus on work flow and tools. Find what you love most and make that your focus. Extra points if you can take that passion across multiple platforms.</p>

<h3>Conferences</h3>
<p>Being known on the Internet is great but at some point you are going to have to take your connections into the real world. Over the past few years of going to conferences I have not only taken my connections with developers to the next level, I have also become good friends with people in the community. The more people you know the better your chances are that they will help support and recommend you to conference organizers. Also when you are at conferences, it is important to meet and have a good rapport with the organizers. At the end of the day, they are the ones who will have the final say on if you get in or not.</p>

<h3>Practice</h3>
<p>Once you have taken care of all the above things, you will need to actually be a good speaker. This is probably the hardest part. I have always been a natural &ldquo;talker&rdquo; and after years of running user groups and speaking I thought it would be a cake walk to get up in front of a large room and give a talk. My first few talks were ok but nothing to write home about. Part of it was the topics I chose to speak about and the other is that I didn&rsquo;t practice my talk. You need to be able to give a talk as naturally as possible. Now, I practice for at least 2 weeks before the conference to make sure I have everything down pat. It makes a huge difference. One thing I do before a talk now is to record myself going through the slides so I can analyze what I am doing wrong and try to fix it. If you have never given a talk, using this technique and posting the recording online can also be a big tool to help get some attention and show off that you can speak. <a target="_blank" href="http://active.tutsplus.com/tutorials/games/pushing-pixels-active-premium/">Here is one</a> that I did on ActiveTuts.</p>

<h3>Proposals</h3>
<p><span class="c1">Most speakers are actually invited out to speak by the organizer. A few proposals are always selected to help get new blood into the event. Here is a copy of my latest proposal that helped get me into RIAUnleashed and FITC.
</p>
<hr>
<br/><br/>
<h2>Pushing Pixels: Blitting for Flash Gaming on Web, Desktop and Mobile</h2>
<p>
Prepared by: Jesse Freeman</p>
<h2>Summary
</h2>
<p>
<h3>Bio
</h3>
<p>With over 7 years of Flash development experience, Jesse Freeman has worked for VW, Tommy Hilfiger, Heavy, MLB, the New York Jets, HBO and many more. he was a traditional artist for most of his life until making the transition into interactive art and hasn&#39;t looked back since. &nbsp;Jesse is a Technical Architect at Roundarch, manages a Flash blog called the Flash Art of War (<a target="_blank" href="http://flashartofwar.com">http://flashartofwar.com</a>) and is an active leader in New York&#39;s Flash community. He runs a monthly meetup called Flash Developer Happy Hour (
<span class="c4"><a target="_blank" href="http://developerhappyhour.com">http://developerhappyhour.com</a>) where people interested in Flash/Flex/AIR/Web are invited to kick back, have a few drinks, and make new friends. He is also active in the online community as a writer for several Flash sites including<a target="_blank" href="http://developria.com">developria.com</a> and can be found on twitter <a target="_blank" href="http://twitter.com/jessefreeman">@jessefreeman</a>.<p>

<h3>Description</h3>
<p>Everything I have ever learned about programming came from playing video games. Growing up as a kid I had no idea that my passion for playing and wanting to build video games would have such a far reaching influence on my career as a developer. This talks goes through my history of playing games and how I learned to take techniques such as Blitting, Sprites and advanced optimization, and apply them to some of the most high profile websites I have built.<p>
<p>
Blitting is a technique that allows you to rapidly draw bitmaps to a screen. This is one of the oldest techniques for displaying graphics on a screen and was used heavily in the 8bit and 16bit video game days. Even though this is an old technique it doesn&rsquo;t mean Blitting still doesn&rsquo;t apply to modern Flash development. Bitmap manipulation is incredibly fast in Flash and can be used to scroll large images, make games, or perform generative art. By harnessing the power of the Bitmap and BitmapData classes in the Flash Player you can achieve incredible run time compositing. 
</p>
<p>
In this talk we will discuss how to take advantage of blitting in desktop, web, and mobile Flash game. I will go into detail on the Flash games I have created and how I ported them over to AIR on Android. In this talk you will get a better understanding of how to take advantage of Blitting in your own projects. All code in this talk will be available as open source for people to use, explore, and learn from. Blitting is a powerful tool that every Flash game developer should have a basic understanding of since it can apply to so many different situations and platforms.
</p>
<h3>Past Talks
</h3>
<p>
I have had the pleasure of speaking at several conferences over the past 2 years. Most notably was Max 2009, FFK 2010, Flash And The City 2010, and Flash Belt 2010. I have a proven track record of packing a room and have gotten excellent reviews on all my talks.
</p>
<h2>Examples From This Talk
</h2>
<h3>Flixel (Bitmap Game Library) on Desktop, Web, and Mobile
</h3>
<p>
Flixel (<span class="c4"><a target="_blank" href="http://flixel.org">http://flixel.org</a>) is an incredible bitmap game framework that takes full advantage of blitting and bitmap manipulation to achieve incredible performance with a retro 8-bit game look and feel. Flixel is used in several desktop and web games already and now with AIR on Android there is a perfect opportunity to build retro games for mobile with Flash. It took all of 5 mins to port over the Flixel demos to AIR on Android and immediately I was impressed with a solid 30 fps playback. As Flash mobile becomes more of a standard, bitmap game engine such as Flixel will be an incredible tool in aiding Flash developers to create mobile games very quickly. I will go over my Frogger game which I built in a week and can be deployed to desktop, web, and mobile with a single Ant build.
</p>
<p class="c0 c12"><img height="260.0" src="http://developria.com/upload/2011/01/conference_image1.png" width="466.0"></p>
<h3>Code Bummer</h3>
<p>
After I talk through the details of how I made Frogger I will cover my own frogger clone called Code Bummer. I will discuss how I reskinned Frogger, added in logic to support multiple screen sizes to support the Samsung Tab to several different Android phones and finally what the apps submission process was like.
</p>
<h3>The Johnny Cash Project
</h3>
<p>
I would also like to brefly talk about The Johnny Cash Project makes extensive use of Blitting as an example of how to take gaming concepts and apply them to RIAs (Rich Internet Applications). This project is a crowd sourced music video for Johnny Cash&rsquo;s latest album. Each user is able to select a frame of the music video and draw over it. Each hand drawn frame is concatenated into a new music video. Blitting is being use in two major places. The first is the drawing tool itself and the second is the video timeline. The video timeline is one aspect I will focus on since the logic behind it allows flash to seamlessly scroll a 12600 wide image with no slow down or visual tearing.
</p><p class="c0 c12"><img height="335.0" src="http://developria.com/upload/2011/01/conference_image3.png" width="468.0"></p>

<h3>Videos Of Flash On Android Work</h3>
<p><a target="_blank" href="http://vimeo.com/channels/flashonandroid">http://vimeo.com/channels/flashonandroid</a>
</p>

<h3>Contact Info</h3>
<p>
Jesse Freeman Web:
<a target="_blank" href="http://jessefreeman.com">http://jessefreeman.com</a>,
<a target="_blank" href="http://developerartofwar.com">http://developerartofwar.com</a>,
<a target="_blank" href="http://flashbum.com">http://flashbum.com</a>
</p>
<p>
Twitter: <a target="_blank" href="http://twitter.com/jessefreeman">@jessefreeman</a>
</p>
<h3>Headshot
</h3>
<img height="251.0" src="http://developria.com/upload/2011/01/conference_image0.png" width="404.0"></p><p><span class="c6 c5">&nbsp;
<h3>Conclusion
</h3>
<p>It is a real honor to submit a talk and I hope you consider me as a speaker. Please feel free to contact me if you have any questions or need more info. I look forward to hearing back from you.</p>
<p>
Sincerely,
</p><p><img height="53.0" src="http://developria.com/upload/2011/01/conference_image2.png" width="118.0"></p>

<hr/><br/><br/><br/>
<p>So this covers a few tips you can use to help you become a speaker. Obviously a lot of work goes into becoming a good speaker and with a lot of hard work, connections and knowledge the time you invest with pay off. Also, make sure you come check out <a href="http://www.fitc.ca/events/speakers/speaker.cfm?event=116&speaker_id=12763" target="_blank">my talk at FITC</a> and all of the other <a href="http://www.fitc.ca/events/speakers/?event=116" target="_blank">great speakers</a> there as well.</p>]]>
        
    </content>
</entry>

<entry>
    <title>InsideRIA Closure Announcement</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/insideria-announcement.html" />
    <id>tag:www.developria.com,2011://1.1600</id>

    <published>2011-01-25T15:00:00Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>We here at InsideRIA have an announcement for you our readers: InsideRIA will no longer be adding new content to the site as of January 31, 2011. We would like to thank everyone who has contributed content to the site...</summary>
    <author>
        <name>Rich Tretola</name>
        
    </author>
    
        <category term="News &amp; Events" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>We here at InsideRIA have an announcement for you our readers: InsideRIA will no longer be adding new content to the site as of January 31, 2011.  </p>

<p>We would like to thank everyone who has contributed content to the site over the years, in addition to thanking our readers. Also, you should know that some InsideRIA bloggers will continue to blog as part of the O&#8217;Reilly blogs program.</p>

<p>All of the InsideRIA content will be archived and kept web-accessible for our readers. O&#8217;Reilly and Adobe are currently working through the specifics of this plan and will communicate the final details to the community once they are in place.</p>

<p>Some additional resources for where you will be able to continue to find great RIA-focused content:</p>

<p>*O&#8217;Reilly Answers is an excellent resource for getting information about everything technology related at <a href="http://answers.oreilly.com/" target="_blank">http://answers.oreilly.com/</a>. We also suggest that you share your knowledge at the O'Reilly Answers site and help the new members of the development community grow into future leaders in our industry.<br />
  <br />
*Adobe Developer Connection (<a href="http://developer.adobe.com" target="_blank">http://developer.adobe.com</a>) is another fantastic resource for Adobe technologies and has a huge repository of information on Adobe's RIA tools like Flash, Flex, AIR, etc. If you haven't been reading the great content available at the ADC, we definitely suggest you check it out.</p>]]>
        
    </content>
</entry>

<entry>
    <title>&quot;The Web is a Customer Service Medium&quot; by Paul Ford</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/the-web-is-a-customer-service.html" />
    <id>tag:www.developria.com,2011://1.1599</id>

    <published>2011-01-24T22:42:26Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>I recently ran into an interesting article titled &quot;The Web is a Customer Service Medium&quot; in which the author (Paul Ford) makes a very compelling case that the Web is specifically &quot;for&quot; the purpose of letting people express their opinions.  This article has really had me thinking the past few days about the nature of the medium I work in as a web developer, and I wanted to share some of those thoughts here.</summary>
    <author>
        <name>RJ Owen</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="internet" label="internet" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>I recently ran into an interesting article titled "<a href="http://www.ftrain.com/wwic.html">The Web is a Customer Service Medium</a>" in which the author (Paul Ford) makes a very compelling case that the Web is specifically "for" the purpose of letting people express their opinions.  This article has really had me thinking the past few days about the nature of the medium I work in as a web developer, and I wanted to share some of those thoughts here.</p>

<p>Ford begins by discussing the different questions that other mediums answer.  For example, TV answers the question "I want to be distracted without leaving my house.  What should I do?"  Similarly movies answer the question, "I want to be distracted while leaving my house."  Ignoring the narrow definition of these mediums, you can't help but agree that each does seem to answer SOME kind of question that culture asks of it - each exists to serve a given market with given needs, and those needs can sometimes be phrased in the form of a question.</p>

<p>Ford then makes the jump to the internet.  Rather than continuing to look at the internet as a collection of other mediums - as the new place for TV, movies, books, periodicals, or whatever - to live, why not consider the web as a medium unto itself?  I'm sure Ford isn't the first person to think of this, but he is one of the first people to articulate a good vision of what this new medium is, and the ramifications for on those of us who work in it.  By Ford's definition, the Web exists to answer the question, "why wasn't I consulted?"  Put another way, the Web exists to allow people a way to express their opinions as if those opinions mattered - this isn't to say that they do or don't matter; but rather that the opinions themselves and their significance isn't really important.  What's important is that they can be expressed and shared.  The Web's purpose is to tell people that their opinions matter, and to encourage them to express them - to judge, to opine, to place value.  </p>

<p>It looks to me like our collective culture just awoke to the reality of the Web as this medium last year, or possibly the year before, when "social" became the new buzzword on the Web.  Twitter and Facebook finally perfected an output for the expression of this need in a way that traditional websites or blogs or even companies like Digg had been previously unable to.  The result was an explosion of social features on the web, and every large corporation in America struggling to form a strategy that involved Facebook and/or Twitter.  The impact on the Web is clear, and there's no going back.</p>

<p>What the focus on "social" lacks is the inherently judgmental aspect of giving one's opinion.  Sites like hotornot.com were popular early on the web specifically because they provided a clear outlet for this desire - Facebook's "Like" button can be thought of as the "hotornot" principle applied to the larger web.</p>

<p>Immediate implications for businesses are clear: whatever your "social" strategy is, if your place on the web doesn't allow for customers to express opinions, and if you don't listen to those opinions, then to borrow a phrase from Ford, you're doing it wrong.  The Web runs on opinion and exists to support its expression.  Things like MP3 sharing, streaming video and online shopping are all secondary.  Take streaming video in specific: one reason Netflix continues to dominate this market despite the number of me-too copy sites and network pages that offer similar features is specifically because of how easy it is to rate or review any video they provide.</p>

<p>Brands, take notice: the Web is a customer service medium.  Ignore this at your own peril - if you don't give your users a place to voice their opinions, someone else will.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Book Review: Sketching User Experiences by Bill Buxton</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/book-review-sketching-user-exp.html" />
    <id>tag:www.developria.com,2011://1.1598</id>

    <published>2011-01-24T22:14:52Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>I recently read Sketching User Experiences by Bill Buxton and it&apos;s become one of my favorite books explaining the value of design to non-designers.  Buxton wrote the book specifically with business audiences in mind and does an excellent job describing both the value and method of design.  This is no easy task, as the definition is contentious amongst the well established designers in the field, but Buxton handles the task gracefully.</summary>
    <author>
        <name>RJ Owen</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="book" label="book" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>I recently read <a href="http://www.amazon.com/Sketching-User-Experiences-Interactive-Technologies/dp/0123740371">Sketching User Experiences</a> by Bill Buxton and it's become one of my favorite books explaining the value of design to non-designers.  Buxton wrote the book specifically with business audiences in mind and does an excellent job describing both the value and method of design.  This is no easy task, as the definition is contentious amongst the well established designers in the field, but Buxton handles the task gracefully.</p>

<p>Buxton approaches the problem of defining design by looking at the things designers do.  Design can take many forms and so can the tasks designers accomplish, but underneath it all is one common thread: sketching.  Buxton expands the definition of sketching to something resembling prototyping, but with a few very key and essential differences which Buxton takes pains to highlight.  In his definition, a sketch is:<br />
<ol><br />
	<li>Quick: quick to make</li><br />
	<li>Timely: can be provided whenever needed</li><br />
	<li>Inexpensive</li><br />
	<li>Disposable</li><br />
	<li>Plentiful</li><br />
	<li>Clear vocabulary: the style makes it clear that it is a sketch and not a finished product</li><br />
	<li>Distinct gesture: similar to the vocabulary, sketches are distinctly open and free</li><br />
	<li>Minimal detail</li><br />
	<li>Appropriate degree of refinement</li><br />
	<li>Suggest and explore rather than confirm</li><br />
	<li>(Intentional) Ambiguity</li><br />
</ol></p>

<p>Buxton goes on in the first part of his book to explain the role of design.  Design is inherently intended to explore and create, he argues, and that refining is a different process.  Designers may be involved in refinement for certain, but design is an inherently branching discipline which constantly looks to explore new aspects of a problem.  This stands in sharp contrast to prototyping, whose purpose is to narrow the field of exploration and refine many or one single solution down to something that will be produced.</p>

<p>In part II of the book Buxton describes stories and methods of the design discipline.  He goes through examples of some of the most innovative or interesting design projects he's been a part of and highlights interesting things about their results.  He also encourages the reader to replicate these experiments to gain an experiential understanding of the process and method the designers implemented.  He argues that this is important for developing the technique of design - every bit as important as design composition or theory, the technique must be perfected simply through practice and repetition.</p>

<p>As a person with a software engineering background, I found this book to be very compelling and interesting in better understanding what designers do and how they think.  This insight is critical for me to have as a UI developer, since I interact with designers on a daily basis and am often called in to give opinions during some part of the design or prototyping process.  I highly recommend it to anyone in a similar position, or just anyone interested in design.</p>]]>
        
    </content>
</entry>

<entry>
    <title>A New Team, A New Vision Part 4</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/a-new-team-a-new-vision-part-4.html" />
    <id>tag:www.developria.com,2011://1.1586</id>

    <published>2011-01-24T16:21:11Z</published>
    <updated>2011-01-28T20:38:17Z</updated>

    <summary>The floor is electric since we&apos;ve had our new team structure.  Everyone is excited to be working together and excited about what they are doing.  This heightened level of engagement is thrilling and I&apos;m proud to be a part of it.</summary>
    <author>
        <name>Tom Barker</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="management" label="management" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pairprogramming" label="pair programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="teamdevelopment" label="team development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="teamvision" label="team vision" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p><a href="http://developria.com/2011/01/a-new-team-a-new-vision.html">< Read Part 1</a><br />
<a href="http://developria.com/2011/01/a-new-team-a-new-vision-part-2.html">< Read Part 2</a><br />
<a href="http://developria.com/2011/01/a-new-team-a-new-vision-part-3.html">< Read Part 3</a></p>

<p>In the previous entries in this series I talked about how organization has re-formed to reflect a single engineering team instead of multiple teams split by product verticals.  My team has grown and the scope of our work has grown to include the new product verticals.</p>

<p>I discussed how we adjusted our team vision to be inclusive of our new members and to reflect our new product verticals.  I then began discussing how we have started to cross train so that each team member can switch with ease between each product.</p>

<p>Last article I discussed work shops and code reviews which were explicit training events.  Once those were complete we began to work on new feature releases, but even while working we continued to engage in cross training through the following methods:</p>

<p><strong>Pair Programming</strong><br />
The developers self organized around pairing on each task.  I was thrilled to see this.  They met up in the morning went over the tasks and split up into pairs.  The developer who knew the task the best sat with someone who needed to learn the domain.  The developer with the least domain experience was the one with hands on the keyboard.</p>

<p>Mid way through the day they stopped, met back up as a group and chose new tasks and new pairing partners.</p>

<p><strong>Minor Releases</strong><br />
In addition to major feature work we also have small features that are aggregated for minor releases.  I run the work for these minor releases on a weekly basis and every developer has one day to do work for this.  </p>

<p>When we first made the merge I immediately had everyone work on minor release tasks.  These are small, bite-sized tasks that a developer should be able to complete in a single day.  These served as a great introduction to doing every day tasks in the new code bases.</p>

<p><strong>Bug Scrub Days</strong><br />
Bug scrub days served much the same purpose as Minor Release tasks.  I aggregate all of the outstanding bugs for the new products and distribute them randomly to everyone in the team.  We dedicate a day to focus on just these bugs.</p>

<p>All of this collaboration serves two purposes: first and most obviously it facilitates knowledge sharing, second and arguably most importantly it gels the team.  It creates trust and a strong working relationship between team members.</p>

<p>The floor is electric since we've had our new team structure.  Everyone is excited to be working together and excited about what they are doing.  This heightened level of engagement is thrilling and I'm proud to be a part of it.</p>]]>
        
    </content>
</entry>

<entry>
    <title>The final jQuery 1.5 is coming soon, but you can download the beta today!</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/the-final-jquery-15-is-coming.html" />
    <id>tag:www.developria.com,2011://1.1597</id>

    <published>2011-01-24T14:42:30Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>The new jQuery 1.5 is coming very soon. If you want to try out the code you can download is now using the new beta. This release is a big deal!</summary>
    <author>
        <name>Matthew David</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jquery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plugins" label="plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>If you are keen to get your hands on the newly released Beta for jQuery 1.5 then check out:   <a href="http://code.jquery.com/jquery-1.5b1.js">http://code.jquery.com/jquery-1.5b1.js</a></p>
<p>This is a huge deal for the jQuery Community. If everything goes well, then a release of jQuery 1.5 will be coming very soon.</p>
<p>Below is a list of the changes.</p>
<ul>
  <li>Rewrite of the Ajax module by Julian Aubourg. This is the most significant change in this release and brings a number of performance, stability, and feature improvements to $.ajax. More information can be found <a href="http://blog.jquery.com/2010/12/28/jquery-community-updates-for-december-2010/">here</a> <a href="http://bugs.jquery.com/ticket/7195">#7195</a></li>
  <li>Subclassing in jQuery now supported <a href="http://bugs.jquery.com/ticket/7901">#7901</a></li>
  <li>Removed the possibility of expando collisions when using noConflict() (V8 is fast!). The expando string now uses a random number + jQuery version to differentiate between instances of jQuery instead of millisecond clock time. <a href="http://bugs.jquery.com/ticket/6842">#6842</a></li>
  <li>Deduplicated code in $.get and $.post. <a href="http://bugs.jquery.com/ticket/7847">#7847</a></li>
  <li>When a native browser event is bubbling up the DOM, make sure that the correct isDefaultPrevented value is reflected by jQuery&#8217;s Event object. <a href="http://bugs.jquery.com/ticket/7793">#7793</a></li>
  <li>No longer cache non-html strings in buildFragment to avoid possible collision with the names of Object methods like toString. Testing shows this may also provide modest performance improvements. <a href="http://bugs.jquery.com/ticket/6779">#6779</a></li>
  <li>Updated cloneCopyEvent so that it does not create superfluous data objects when cloning elements. Exposes a new method, $.hasData, for determining whether or not an object has any data. <a href="http://bugs.jquery.com/ticket/7165">#7165</a></li>
  <li>Use a for loop rather than for/in loop when copying events so that code will work with an augmented Array.prototype. <a href="http://bugs.jquery.com/ticket/7809">#7809</a>, <a href="http://bugs.jquery.com/ticket/7817">#7817</a></li>
  <li>Fixed fadeIn not working properly with inline elements. <a href="http://bugs.jquery.com/ticket/7397">#7397</a></li>
  <li>Rewrote IE&#8217;s clone function to function properly in all known cases. <a href="http://bugs.jquery.com/ticket/4386">#4386</a>, <a href="http://bugs.jquery.com/ticket/5566">#5566</a>, <a href="http://bugs.jquery.com/ticket/6997">#6997</a></li>
  <li>Fixed IE breaking when dispatching a &#8216;submit&#8217; event on plain JS objects. <a href="http://bugs.jquery.com/ticket/6398">#6398</a></li>
  <li>Fixed a regression in 1.4 that caused cache control to be set incorrectly for script transport.<a href="http://bugs.jquery.com/ticket/7578">#7578</a></li>
  <li>Improve performance of get() for negative indices. <a href="http://bugs.jquery.com/ticket/5476">#5476</a></li>
  <li>hasClass, removeClass didn&#8217;t work in IE if the attribute contained a carriage return (\r) character. <a href="http://bugs.jquery.com/ticket/7673">#7673</a></li>
  <li>Fix a regresion in 1.4.4 where calling $.fn.data without arguments breaks on non-DOM elements. <a href="http://bugs.jquery.com/ticket/7524">#7524</a></li>
  <li>Fixed memory leaks in IE caused by the custom abort function of $.ajax. <a href="http://bugs.jquery.com/ticket/6242">#6242</a></li>
  <li>Prevent live events from firing on disabled elements in IE. <a href="http://bugs.jquery.com/ticket/6911">#6911</a></li>
  <li>Fixed a regression in 1.4.3 that caused sending a Location object to $.ajax to no longer work.<a href="http://bugs.jquery.com/ticket/7531">#7531</a></li>
  <li>Fixed an issue where some traversal methods performed an unnecessary uniqueness check.<a href="http://bugs.jquery.com/ticket/7964">#7964</a></li>
  <li>We now support being able to specify callbacks to handle specific status codes<a href="http://bugs.jquery.com/ticket/4964">#4964</a></li>
  <li>Fixed an issue where ?? wasn&#8217;t supported as a context-insensitive placeholder for the callback name of a JSONP request. <a href="http://bugs.jquery.com/ticket/4897">#4897</a></li>
  <li>Data returned from dataFilter was not being passed to ajax complete() callbacks. We now use the jXHR&#8217;s promise interface to get the actual response. <a href="http://bugs.jquery.com/ticket/4825">#4825</a></li>
  <li>We now ensure that buildFragment clones elements properly in all browsers. <a href="http://bugs.jquery.com/ticket/6655">#6655</a> and <a href="http://bugs.jquery.com/ticket/3879">#3879</a></li>
  <li>A memory leak caused when binding custom events in IE8 was fixed <a href="http://bugs.jquery.com/ticket/7054">#7054</a></li>
  <li>Lines in form data are now delimited by CRLF when the form is submitted (as recommended by the W3C). <a href="http://bugs.jquery.com/ticket/6876">#6876</a></li>
  <li>Ajax requests now abort on unload such that the event is only bound if the xhr transport is used.<a href="http://bugs.jquery.com/ticket/5280">#5280</a></li>
  <li>We now support =? being detected even if it has been escaped during data serialization. <a href="http://bugs.jquery.com/ticket/5812">#5812</a></li>
  <li>If the user uses the jsonpCallback setting we now automatically set the dataType to &#8216;jsonp&#8217;.<a href="http://bugs.jquery.com/ticket/5803">#5803</a></li>
  <li>The crossDomain option now forces ajax to consider a request as cross-domain, even when its not. This is useful when servers issue redirects to cross-domain urls. <a href="http://bugs.jquery.com/ticket/5955">#5955</a></li>
  <li>$.ajax(this) allowing retries without the recursion errors found in jQuery 1.4.3. <a href="http://bugs.jquery.com/ticket/7461">#7461</a></li>
  <li>Removed a patch for very early versions of Opera 9 that made it impossible to animate values smaller than -10000. <a href="http://bugs.jquery.com/ticket/7193">#7193</a></li>
  <li>ResponseText is now properly propagated for error callbacks. <a href="http://bugs.jquery.com/ticket/7868">#7868</a></li>
  <li>Scripts onload handler passes event as first parameter so statusText is now passed as second argument for aborts. <a href="http://bugs.jquery.com/ticket/7865">#7865</a></li>
  <li>With respect to xhr, setting contentType to false will now prevent the Content-Type header from being sent. <a href="http://bugs.jquery.com/ticket/7465">#7465</a></li>
  <li>When serializing text, we now encode all line breaks as CRLF pairs per the application/x-www-form-urlencoded specification. <a href="http://bugs.jquery.com/ticket/6876">#6876</a></li>
  <li>Fixed a bug with IE6 where certain event handlers were causing inter-page memory leaks. <a href="http://bugs.jquery.com/ticket/7762">#7762</a></li>
  <li>Tests for cross-domain detection now include checking for protocol, hostname and port. <a href="http://bugs.jquery.com/ticket/7465">#7465</a></li>
  <li>Fixed a problem where IDs containing a period would break find() without returning results.<a href="http://bugs.jquery.com/ticket/7533">#7533</a></li>
  <li>The regression with next/adjacent selectors no longer working without the &#8216;prev&#8217; element has been corrected. <a href="http://bugs.jquery.com/ticket/7452">#7452</a></li>
  <li>Fixed the 1.4.3 regression which prevented the use of attr() on anything but DOM element nodes where the nodeType was 1 <a href="http://bugs.jquery.com/ticket/7452">#7452</a>, <a href="http://bugs.jquery.com/ticket/7500">#7500</a>,</li>
  <li>A bug where including jQuery 1.3.2 resulted in a border on the right-hand side of the screen in IE8 has been fixed. <a href="http://bugs.jquery.com/ticket/5575">#5575</a></li>
  <li>We&#8217;ve fixed an issue where adding extra methods to Array.prototype and using jQuery.clone(true) to clone an element resulted in invalid event bindings. <a href="http://bugs.jquery.com/ticket/6355">#6355</a></li>
  <li>Fixed an issue where the nth-child does not handle whitespace correctly in Internet Explorer.<a href="http://bugs.jquery.com/ticket/7558">#7558</a></li>
  <li>We corrected a bug where mouseenter/leave behaved like mouseover/out when using live events <a href="http://bugs.jquery.com/ticket/5821">#5821</a></li>
  <li>Fixed a regression in 1.4.3 where the eq() selector was no longer working with previous and adjacent selectors <a href="http://bugs.jquery.com/ticket/7906">#7906</a></li>
  <li>Updated the documentation on event.currentTarget to address any confusion regarding jQuery.proxy. <a href="http://bugs.jquery.com/ticket/7628">#7628</a></li>
  <li>Fixed an issue where xhr.setRequestHeader(&#8216;Accept&#8217;,&#133;) appended the value rather than replacing it. <a href="http://bugs.jquery.com/ticket/6230">#6230</a></li>
  <li>An IE issue where ajax methods failed for content types ending in &#8216;+xml&#8217; (eg. rss+xml) was fixed. <a href="http://bugs.jquery.com/ticket/4958">#4958</a></li>
  <li>The updates to ajax now allow any request to be aborted. <a href="http://bugs.jquery.com/ticket/3442">#3442</a></li>
  <li>A .slideUp() issue in FireFox 3.6.11 was fixed which previously hid the frameset border and legend but left any content uncovered by another element. <a href="http://bugs.jquery.com/ticket/7308">#7308</a></li>
  <li>We now support cross-browser XML parsing. <a href="http://bugs.jquery.com/ticket/6693">#6693</a></li>
  <li>Fixed a bug where when using dataType:&#8217;json&#8217; in the .ajax() method, the data object was undefined in IE6 and 7. <a href="http://bugs.jquery.com/ticket/6106">#6106</a></li>
  <li>Corrected an issue where JSONP calls were not removing the script tag when the call completed.<a href="http://bugs.jquery.com/ticket/7418">#7418</a></li>
  <li>Updated the documentation to reflect the behaviour supported when using delay() with show() if the duration is not specified. <a href="http://bugs.jquery.com/ticket/7543">#7543</a></li>
</ul>
<p>&nbsp;</p>]]>
        
    </content>
</entry>

<entry>
    <title>Getting Involved with jQuery</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/getting-involved-with-jquery.html" />
    <id>tag:www.developria.com,2011://1.1596</id>

    <published>2011-01-24T14:38:34Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>How do you get involved with the jQuery Community? Find out here!</summary>
    <author>
        <name>Matthew David</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jquery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jqueryui" label="jquery ui" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>There is a single reason why jQuery is so popular: You! </p>
<p>Yeah, I know is sounds cliche, but it is true. If developers did not write jQuery code, users did not test it and designers did not implement jQuery then the product simply would not exist. As a group, we have made jQuery the success story it is today.</p>
<p>What if you are new to jQuery and do not know how you can help? Well, here are some things you can do:</p>
<ul>
  <li>the first step is to simply start using jQuery - add the jQuery library to a Web page, an app or something, but just get your hands dirty with the code</li>
  <li>find a bug? Report it! The jQuery team have a great site dedicated to bug tracking:   <a href="http://docs.jquery.com/How_to_Report_Bugs">http://docs.jquery.com/How_to_Report_Bugs</a></li>
  <li>want to chat about jQuery with like minded people? Jump on the IRC or forums:   <a href="http://forum.jquery.com/developing-jquery-core">http://forum.jquery.com/developing-jquery-core</a></li>
  <li>Extend jQuery with your own plugins and contribute the plugins back to the community:   <a href="http://plugins.jquery.com/">http://plugins.jquery.com/</a></li>
  <li>Feeling really brave, then fix some of the bugs in the core library: this section has a whole piece on how to download the latest code   <a href="http://docs.jquery.com/Getting_Involved">http://docs.jquery.com/Getting_Involved</a></li>
</ul>
<p>There you are, some simple ways to get involved with the jQuery community. Let us know in the comments below how you are involved with the jQuery community.</p>]]>
        
    </content>
</entry>

<entry>
    <title>HTML5 Recipes : Graphs using Canvas</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/html5-recipes-graphs-using-can.html" />
    <id>tag:www.developria.com,2011://1.1595</id>

    <published>2011-01-24T14:00:00Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>In this recipe, we shall take a look at generating charts using the HTML5 Canvas API. In particular we shall be using a library RGraph, which makes internally uses the Canvas API and makes the entire process of generating charts...</summary>
    <author>
        <name>Romin Irani</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="canvas" label="canvas" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="charts" label="charts" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>In this recipe, we shall take a look at generating charts using the HTML5 Canvas API. In particular we shall be using a library RGraph, which makes internally uses the Canvas API and makes the entire process of generating charts a breeze. We shall assume that the user is familiar with Canvas basics and do read up earlier episodes of this series in case you need a refresher. Using the Canvas API for your charting requirements can have significant benefits since you are avoiding a lot of heavy duty server side processing and instead relying on the local browser doing all the hard work. It can also be useful in offline situations where if you have cached the data offline using local storage API, you can still slice and dice the information via charting that is solely dependent on the Canvas API. No server side connection and round trips needed just to render your data.</p>

<p>The <a href="http://www.rgraph.net/">RGraph</a> library as the site suggests allows you to create Interactive javascript/HTML5 canvas graphs using the HTML5 canvas tag for all platforms. The library caters to charts of all types i.e. simple bar, pie charts to sophisticated ones like scatter and rose charts. The library is free for non-commercial use but requires a one-time fee in case of commercial applications. Please refer to the <a href="http://www.rgraph.net/#license">license </a>for more details.</p>

<p>To get started with the RGraph library, <a href="http://www.rgraph.net/#download">download</a> the latest version and expand the zip file to a particular folder on your machine. You will find several directories in the distribution and the main one that we need to pay attention to is the <em>libraries</em> folder. This folder contains pieces of the RGraph library that have been nicely split up into individual functionalities. This way you do not have to import a single large JS file if you do not need all the features. At the minimum, you need the RGraph.common.core.js, which is the core library and depending on which chart type you wish to employ, you can import the other JS files individually. For e.g. if you need the bar chart, include a reference in your HTML file to RGraph.bar.js file. The <a href="http://www.rgraph.net/docs/index.html">documentation</a> for the RGraph library is impressive and it contains enough examples to build fairly interactive charting applications.</p>

<p>Let us take a look at a simple example of generating a bar chart and pie chart using the RGraph library. This is the simplest usage that one can think of and the results are impressive. This is not to say that you cannot use the core Canvas API to generate charts but in case you prefer using quality libraries to do your task, the RGraph library is quite useful in that regard.</p>

<div class="acode" style="overflow: auto; padding: 10px; height: 240px;" ><div style="overflow-x: visible;">
<mt:CodeBeautify language="actionscript">
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Graphs using Canvas</title>
<script src="rgraph/RGraph.common.core.js"></script>
<script src="rgraph/RGraph.bar.js"></script> 
<script src="rgraph/RGraph.pie.js"></script> 
<script>
window.onload = function ()
{
    var blogpostspermonthdata = [1,2,4,5,3,4,5,6,10,3,2,1];

    var barchart = new RGraph.Bar('barchartcanvas', blogpostspermonthdata);
    barchart.Set('chart.labels', ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
    barchart.Set('chart.title','Blog Posts per month');
    barchart.Draw();
    
    var browsersharedata = [20,10,40,30];

    var piechart = new RGraph.Pie('piechartcanvas', browsersharedata);
    piechart.Set('chart.labels', ['Safari', 'IE', 'Chrome', 'Firefox']);
    piechart.Set('chart.labels.sticks',true);
    piechart.Set('chart.title','Browser Share');
    piechart.Draw();
}
</script>
</head>
<body>
  <div id="canvas1">
  		<canvas id="barchartcanvas" width="400" height="300">Your browser does not have canvas support</canvas>
  </div>
  <div id="canvas2">
        <canvas id="piechartcanvas" width="400" height="300">Your browser does not have canvas support</canvas>
  </div>
</body>
</html>

</mt:CodeBeautify>
</div></div> 

<p>Let us break the code down now:</p>
<ul>
	<li>We have defined two canvas drawing surfaces i.e. barchartcanvas and piechartcanvas that will host the bar graph and pie chart respectively.</li>
<li>Notice that we have imported 3 script files for the RGraph library, the core library and the barchart and piechart library respectively.</li>
<li>The bar graph that we plan to display contains the number of blog posts that have been written at a blog. There are 12 data points, one for each month. Remember that for the sake of demonstration, I have hard coded the values over here, but this could come from the Server side. Alternately, you could also have retrieved it from the local storage, in case you have fetched the data earlier and put it over there. Then we build the barchart object based on the RGraph library. We specify the canvas object and the data values as the two parameters. We set the labels and title and then simply call Draw().</li>
<li>The pie chart also follows a similar pattern. There are many more properties for each of the chart types and I suggest you refer to the documentation.</li>
</ul>

<p>See it in action <a href="http://html5cookbook.appspot.com/canvas/canvas_graph.html">here</a>.</p>
<p><a href="http://developria.com/html5.html">Read all posts in this series here</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Building User Interaction</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/building-user-interaction.html" />
    <id>tag:www.developria.com,2011://1.1592</id>

    <published>2011-01-21T17:00:00Z</published>
    <updated>2011-01-28T20:38:19Z</updated>

    <summary> ©2011 Elsevier, Inc. All rights reserved. This excerpt is published by permission of the copyright holder/publisher: Data Visualization in Flash Builder: Designing RIA and AIR Applications with Remote Data Sources, by Cesare Rocchi ISBN: 978-0-240-81503-9 Events As we have...</summary>
    <author>
        <name>Cesare Rocchi</name>
        
    </author>
    
        <category term="Features" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="flex" label="flex" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="states" label="states" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ui" label="ui" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="userinterface" label="user interface" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>
©2011 Elsevier, Inc. All rights reserved. This excerpt is published by permission of the copyright holder/publisher:
Data Visualization in Flash Builder: Designing RIA and AIR Applications with Remote Data Sources, by Cesare Rocchi
ISBN: 978-0-240-81503-9
</p>

<p><strong><big>Events</big></strong></p>

<p>
As we have seen in the previous section, a components in Flex has many features like size, style, behavior. A key feature of Flex components is the ability to dispatch and/or listen to events. An event is something that happens. Whether initiated by the user (e.g. a click) or by the system (an image is loaded) an event is a data structure used to notify that something has happened. Below is a list of events:
</p>

<ul>
	<li>the user resized a window;</li>
	<li>the login information is wrong; </li>
	<li>the Flex application has started </li>
	<li>the UI of the Flex application has been rendered</li>
	<li>the user changed the value of a text input </li>
	<li>the url specified does not exist </li>
	<li>the application is going to be closed</li>
</ul>

<p>
Events are not specific of Flex. In fact, they were already included in Actionscript version 1. Although changed and refined since then, events still remain a key components of the Flash platform and client web programming in general.
When we program for the web we have to keep in mind that it is an asynchronous &#8220;world&#8221;. This means there is to wait. For example, when you need to log in to a service, the following happens under the hood (roughly):
</p>

<ul>
	<li>read data provided (login and password)</li>
	<li>ask the backend to validate data</li>
	<li>show the result (correct or wrong)</li>
</ul>

<p>
The second operation, ask the backend, is the asynchronous one. In this case you ask something and you wait for the response. This does not mean that your application is blocked. Indeed, all the parts that do not depend on the result of the asynchronous operation, can be executed (e.g. banner at the bottom, news from the blog, etc.). This is an advantage in that it shows the user that not everything is &#8220;stuck&#8221;. The downside of this approach is that the programmer has to deal with asynchronous programming and notifications. For example, each asynchronous operation can have at least a positive and a negative result. As a developer/designer it is a good practice to specify both and to notify the user accordingly. Moreover, in the http world, things can go wrong for many reasons so it is not unusual to notify specific errors or situations. For example, the application can not login because of the following errors:
</p>

<ul>
	<li>username does not exist </li>
	<li>wrong combination of username and password</li>
	<li>no internet connection</li>
	<li>login service unavailable</li>
</ul>

<p>
Although all these situations are similar to the final user (&#8220;Can't login&#8221;) there are differences that we might want to signal at UI level. That means for each of these events we can provide a UI behavior (e.g. pop up a message). Events in Flash are important not just because we know when something happens, but because we can associate one or more actions to an event. In fact when you talk about event there are two key actions associated: listening and reacting. Let's try to start with an example.
</p>


<p><strong><big>The login scenario</big></strong></p>

<p>
In the previous section we have seen how to build the UI of login form. Let's resume from there. When the user clicks the button the application sends data to the backend and waits for a response. At this point the developer has to have already specified all the behaviors of the UI in the different cases. To start let's just consider two generic cases, success and failure.
First of all, it is a good practice to notify the user that something is happening. When he clicks the login button we should show a spinner or some &#8220;ongoing-activity&#8221; signal, we should remember to remove it whether the procedure is a success or a failure. Wait a second ... aren't these states? Yes!
Then we could arrange our logic in term of states. How? We listen to the login service on the backend and we display the UI panel accordingly.
</p>

<p><strong><big>States and Events for Login Scenario</big></strong></p>

<p>
We can dispose our application according to the following table.
</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="States and Events" src="http://developria.com/cesare/eventsTable.png" width="392" height="193" class="mt-image-none" style="" /></span>

<p>
The first event is triggered by the user, the second and third are generated by the backend. Out UI can react to all of these events and switch to the correspondent state. First let's setup the UI. We report below part of the code developed in the first section.
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" ... >
  <s:Panel x="211" y="99" title="Login"> 
    <mx:Form >
        <mx:FormItem label="Username"> 
            <s:TextInput/>
        </mx:FormItem>
        <mx:FormItem label="Password"> 
            <s:TextInput displayAsPassword="true"/>
        </mx:FormItem>
        <mx:FormItem > 
            <s:Button label="Login"/>
        </mx:FormItem>
    </mx:Form> 
  </s:Panel>
</s:Application>

</mt:CodeBeautify> 
</div></div> 

<p>
The graphical counterpart is shown in the following figure.
</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Login Form" src="http://developria.com/cesare/2.png" width="305" height="217" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>

<p>
We will follow the same method adopted in section 1, we first create the needed elements and then we arrange them according to the state. To the current implementation we need to add a label and a rectangle. The table below shows how these elements are used. 
</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Events States and UI" src="http://developria.com/cesare/eventsStatesUI.png" width="536" height="234" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>

<p>
In the initial state the new label and the rectangle are hidden. In the first we have to show just the label and set its text. The second and the third are similar and display both the rectangle and the label. We have already seen how to work with states in Flash Builder (section 1), so we simply report the code you should end up with.
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<s:Application ... minWidth="955" minHeight="600">

  <s:states> 
    <s:State name="Initial"/> 
    <s:State name="Logging"/> 
    <s:State name="LoggedIn"/> 
    <s:State name="ErrorInLogging"/>
  </s:states>  

  <s:Panel x="211" y="99" title="Login"> 

    <mx:Form >
      <mx:FormItem label="Username"> 
        <s:TextInput/>
      </mx:FormItem>

      <mx:FormItem label="Password"> 
        <s:TextInput displayAsPassword="true"/>
      </mx:FormItem>

      <mx:FormItem > 
        <s:Button label="Login"/>
      </mx:FormItem>

      <mx:FormItem > 
        <s:Label />
      </mx:FormItem> 
    </mx:Form>

    <s:Rect 
       height="20" width="20"
       x="200" y="99">

       <s:fill> 
          <mx:SolidColor />
       </s:fill> 

    </s:Rect>

  </s:Panel> 
</s:Application>

</mt:CodeBeautify> 
</div></div> 


<p>
If you preview you will notice that the label is empty and the rectangle is black (default color). Now we have to declare where to include these elements and how their properties (color and text) vary according to states. Let's start with the label.</p>


<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<mx:FormItem >

  <s:Label 
     excludeFrom="Initial" 
     text.Logging="Authenticating ..." 
     text.LoggedIn="Login Successful" 
     text.ErrorInLogging="Error in Logging In"/> 

</mx:FormItem>

</mt:CodeBeautify> 
</div></div> 


<p>
Instead of including it in three states, we exclude it from the &#8220;Initial&#8221;. Setting text is pretty intuitive. Now we can move on to the rectangle.
</p>



<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<s:Rect 
   excludeFrom="Initial, Logging">
   
   <s:fill> 
      <mx:SolidColor/> 
   </s:fill>

</s:Rect>

</mt:CodeBeautify> 
</div></div> 


<p>
The UI is now ready to react according to different events. Let's see how we can listen to events and associate an action each time we catch one.
</p>



<p><strong><big>Login web service</big></strong></p>


<p>
Here we illustrate a simple web service which simulates login. Please do not consider it as good backend programming. It is just a way to show how the UI works in case of success and failure. We will do it in php, just because we think it is easier to set up locally.
</p>

<p>
In our example we have set up MAMP1, a bundle which allows installing the Apache web server, with PHP and MySQL configured, on a local machine2. Let's have a look at the code.
</p>



<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="php3"> 

<?php
  
  if(($_POST['username'] != "") AND ($_POST['password'] != "")) {

      $u=$_POST['username']; $p=$_POST['password'];

      if ($u == "cesare" AND $p == "password") { 
    
          echo "<login>ok</login>";

      } else {

          echo "<login>wrong</login>";
      }

   } else {

       echo "<login>nodata</login>";

   }

?>

</mt:CodeBeautify> 
</div></div> 




<p>

The output of this service is always in xml format. It is an &#8220;ok&#8221; string if username and password are matched, &#8220;wrong&#8221; otherwise. A third case is detected when no values are passed (&#8220;nodata&#8221;). Parameters are passed as POST variables, named 'username' and 'password'3. These are two arbitrary names, which can be changed as you wish. It is important that they are the same both on the client (Flash) and the server (php in this case). If there is no match the application might not work as expected, so it is strongly suggested that developers agree on the names of variables on the front/back-end.

</p>

<p><strong><big>Hooking UI to Web Service</big></strong></p>



<p>
Now we will see how to connect the UI to the web service we have just set up. We already know how to do it by using the &#8220;Data/Services&#8221; wizard of Flash builder (see section 1). Since we should now feel more comfortable with the code tab we will build this example by typing code. We need one Flex element we never met so far, so let's introduce it: HttpService. This is a class which allows loading a specific URL via the http protocol. The minimal elements to provide in order to make it work are a url and a method call to its method, send().
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<mx:HTTPService 
    id="loginService"
    url="http://localhost/dvbook/login.php" >


    ... 


    loginService.send();

</mt:CodeBeautify> 
</div></div> 


<p>
These two pieces of code would be enough to load a url. Usually when you load a url you want to manipulate loaded data or notify whether something went wrong. What enables this in Flash? Events! If you check out the completion of HttpService there are lots of properties. Some of them have a nice orange icon , which represent a thunder. Those are events4. In our scenario we are interested in two events, fault and result. Names are pretty intuitive but they need some explanation anyway.
</p>

<p>
The result event is fired when the url is correctly loaded. This does not mean that the login is successful every time we receive that event. For example, if we submit the wrong combination of username and password the url is correctly retrieved but the login is not successful. Same when we do not provide data in the post variables. So we need a way to detect not just the type of event but also its content. More on this below. When the fault event is fired? When the web service is not available, or when your client is not connected to the internet: in general when there is a communication problem between the service and the client. In this case we could notify it on the UI.
</p>

<p>
Now we know which are the hooks to use information provided by the HttpService class. What are the fillers of event properties? Methods.
Technically also a function can be a filler for an event property, though it is a widely adopted (and correct) practice to use methods. Let's see some code.
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 


<mx:HTTPService 
    id="loginService"
    result="onResult(event)" 
    fault="onFault(event)" 
    url="http://localhost/dvbook/login.php" 
    method="POST"

/>

</mt:CodeBeautify> 
</div></div> 

<p>
On lines 3-4 we specify two methods, onResult and onFault, which will be called when the services loads correctly or not. We should remember to specify a formal parameter, event in this case, which will hold the content of the event (e.g. &#8220;ok&#8221; or &#8220;wrong&#8221; strings defined in the web service. The url is the same as above, while we should remember to specify that it is a POST request, for the default values is GET.
As we said parameters are to be passed to the server for verification. HttpService has been defined to specify parameters as children, as it follows.
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<mx:HTTPService
   id="loginService" 
   result="onResult(event)" 
   fault="onFault(event)" 
   url="http://localhost/dvbook/login.php" 
   method="POST">

   <mx:request>
      <username>{userInput.text}</username> 
      <password>{passwordInput.text}</password>
   </mx:request> 

</mx:HTTPService>

</mt:CodeBeautify> 
</div></div> 


<p>
Here we can see another useful usage of binding, which allows to dynamically read the values of the form and send them directly to the web service. We are now left with the definition of methods. This, when executed as a response to an event are commonly referred to as callbacks.
</p>

<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

<fx:Script> 
  <![CDATA[

    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent;

    private function onResult(event:ResultEvent):void { 

        // Code when successful

    } 

    private function onFault(event:FaultEvent):void {

        // Code when failure
    }

  ]]&gt; 
</fx:Script>


</mt:CodeBeautify> 
</div></div> 


<p>
We should be already familiar with this syntax. The only important aspect to highlight is that events are typed (ResultEvent and FaultEvent) and those classes need to be imported.
Now it is time to associate some event to the UI states defined above. If we receive a fault event we can set the UI to the ErrorInLogging state, as follows.
</p>


<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

private function onFault(event:FaultEvent):void { 

    this.currentState = 'ErrorInLogging';

}

</mt:CodeBeautify> 
</div></div> 



<p>
The result case is a bit more complex, because we need to identify the reason of the callback. We will define the method as follows.
</p>


<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

private function onResult(event:ResultEvent):void {

    var res:Boolean = String(event.result.login) == "ok";

    if (res) 
        this.currentState = 'LoggedIn';
    else 
        this.currentState = 'ErrorInLogging';

}

</mt:CodeBeautify> 
</div></div> 



<p>

To identify the reason of the callback we have to check the content of the result property of the event, which stores the values as we have defined them on the server. The only positive case is when such a value is equal to &#8220;ok&#8221;, which is associated to the 'LoggedIn' state (green square). All the rest equals to a negative feedback.
The last step is to trigger the trigger the send procedure when the button is pressed. To be more clear we will define another function and associate it to the click of the button.
</p>



<div class="acode" style="overflow: auto; padding: 10px;" ><div style="overflow-x: visible;"> 
<mt:CodeBeautify language="actionscript"> 

private function authenticate():void {

    this.currentState = 'Logging'; 
    loginService.send();
} 

... 

<mx:FormItem >
    <s:Button label="Login" click="authenticate()"/> 
</mx:FormItem>


</mt:CodeBeautify> 
</div></div> 


<p>
Now we are ready to test our application. If you test it locally probably you don't notice the switch from the initial state to the authenticating phase, but as soon as the service will be online, you and your user will appreciate that feedback. Below are two screenshots when the login is successful or not.
</p>


<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Login Correct" src="http://developria.com/cesare/2.002-loginCorrect.png" width="343" height="241" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Login Wrong" src="http://developria.com/cesare/2.003-loginWrong.png" width="327" height="251" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>]]>
        
    </content>
</entry>

<entry>
    <title>Tablets &amp; Mobile Devices - What do I use for development?</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/tablets-mobile-devices---what.html" />
    <id>tag:www.developria.com,2011://1.1594</id>

    <published>2011-01-21T03:40:34Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>In software development it is not uncommon to get requirements that are vague and lofty, with ideals that it should be written once and run well on everything (including platforms or devices that haven&apos;t even been dreamed of yet). With the emergence of tablets, we&apos;re starting to see this as well.   You may hear &quot;this application needs to run on Android, the iPad, the new HP WebOS platform, the BlackBerry PlayBook, Windows Phone 7, and the Windows tablets.&quot;  Let&apos;s look at your options.</summary>
    <author>
        <name>Andrew Trice</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="development" label="development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="devices" label="devices" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tablet" label="tablet" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>It's no surprise that tablet computing devices are the rage... They're portable, they powerful, they're intuitive, and everybody is talking about them.   It seems like every day another tablet or tablet OS is announced (most recently the <a target="_blank" href="http://www.crunchgear.com/2011/01/18/hp-webos-tablet-leaks-looks-like-an-hp-ifed-ipad/">HP WebOS tablet</a>).   In software development it is not uncommon to get requirements that are vague and lofty, with ideals that it should be written once and run well on everything (including platforms or devices that haven't even been dreamed of yet).</p>

<p>With the emergence of tablets, we're starting to see this as well.   You may hear "this application needs to run on Android, the iPad, the new HP WebOS platform, the BlackBerry PlayBook, Windows Phone 7, and the Windows tablets"... So what are your options?</p>

<p>Native applications are the fastest performing, and have the tightest integration into device functionality.  You don't have to worry about sandboxes or virtual machines, and aren't limited by 3rd party platforms.   The downfall: to support 5 platforms, you need 5 applications.  This can be costly and difficult to maintain, and requires expertise in multiple technologies.</p>

<p>Cross-compiled applications and 3rd party runtimes are a reasonable solution to the maintenance problem.   Platforms like <a target="_blank" href="http://www.appcelerator.com/">Appcellerator</a>, <a target="_blank" href="http://www.phonegap.com/">PhoneGap</a>, <a target="_blank" href="http://www.adobe.com/products/air/">Adobe AIR</a> and others offer reasonable write once, run on multiple platform solutions.  There are several catches here.  First, you make a tradeoff between ubiquity and speed and access to native platform features. While this may speed up development and reduce maintenance costs, cross compiled or 3rd party runtime solutions do not run as fast as native applications.  Additionally, they often just seem "not quite right" (for a lack of better terms).  The component sets or interaction paradigms may differ from native implementations, and may cause a negative experience for the user.  Additionally, these environments are always playing catch-up to native SDKs.  New features that become available in native SDKs will not be immediately available (if at all). Many native features aren't exposed in any way through cross-compiled or 3rd party runtimes.   Not all of these platforms support all devices, so you need to also make sure that the platform of choice actually works on the targeted devices.</p>

<p>Well, what's all this fuss about HTML5 (or more generically "HTML"); that works everywhere, right?  Well, almost... HTML5 is supported by current versions of Android, iOS, BlackBerry, and WebOS.   However, if you want to support Windows Phone 7, you're out of luck.   HTML5 is constantly in Flux.  Codecs are still changing, implementations are platform or browser specific, some platforms are accelerated while others are not - There is no definite standard.  You can do some really cool things with it, but you still need to check that the device supports the feature before assuming it works.  You may fall into pitfalls with this approach if you need to support older devices, or if HTML5 features are supported on one particular device, but not another (even if they are both based on webkit).   Each OS uses a different webkit build, so don't assume they are all equal.   Let's not forget the obvious - HTML5 applications are web based (unless you are using specific HTML-based platform specific SDKS, which of course loses that cross platform deal).  Since they are web based, you are tightly sandboxed and have access to very few features.  You may be able to access GPS or accelerometer events on some platforms, but you certainly don't have the ability to dive into OpenGL graphics.  The most ubiquitous environment is "plain old" HTML 4.x based web applications. </p>

<p>So, what does this mean for you?   In short, weigh your options before you start development.  Know what you want to build, and make the tradeoffs between performance, ubiquity, and features.</p>

<p>I would expect some of the biggest trends that will emerge in 2011 will be the maturation of 3rd party runtime and cross-compiled platforms to support a wider array of devices.  Time will tell, and it will certainly be exciting to watch.</p>

<p>--------------------<br />
Andrew Trice<br />
Technical Architect<br />
iDev Practice Manager<br />
<a href="http://www.universalmind.com">Universal Mind</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>All in the Family</title>
    <link rel="alternate" type="text/html" href="http://www.developria.com/2011/01/all-in-the-family.html" />
    <id>tag:www.developria.com,2011://1.1593</id>

    <published>2011-01-21T02:59:07Z</published>
    <updated>2011-01-28T20:38:20Z</updated>

    <summary>Last night, I was speaking for the Atlanta Flash and Flex User Group, and I mentioned the Actionscript 3 Design Patterns Blog in passing. It turns out that most of the members, even those who read InsideRIA on a regular...</summary>
    <author>
        <name>Amy Blankenship</name>
        
    </author>
    
        <category term="Blogs" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.developria.com/">
        <![CDATA[<p>Last night, I was  speaking for the Atlanta Flash and Flex User Group, and I mentioned the <a href="http://www.as3dp.com/">Actionscript 3 Design Patterns Blog</a> in passing. It turns out that most of the members, even those who read InsideRIA on a regular basis, had no idea of this O'Reilly sponsored site. That started me thinking that there are a lot of O'Reilly sites I use regularly, but didn't necessarily find directly from InsideRIA, so I thought I'd list some sites I find useful that are associated with O'Reilly:</p>
<h2>O'Reilly Sponsored Sites</h2>
<ul>
	<li><a href="http://www.as3dp.com/">ActionScript 3 Design Patterns</a>: Discuss the patterns you love (or love to hate)</li>
	<li><a href="http://radar.oreilly.com/">O'Reilly Radar</a>: Get the latest on emerging technologies, including Mobile</li>
	<li><a href="http://answers.oreilly.com/">O'Reilly Answers</a>: Ask questions (or answer them) to build your understanding</li>
</ul>
<h2>Sites by O'Reilly Authors and Bloggers</h2>
<ul>
	<li><a href="http://joelhooks.com/">JoelHooks.com</a>: Joel Hooks</li>
	<li><a href="http://flash.developerartofwar.com/">Developer Art of War</a>: Jesse Freeman</li>
	<li><a href="http://blog.aidentailor.net/">AidenTailor.net</a>: Aiden Tailor</li>
	<li><a href="http://nodename.com/blog/">NodeName.com</a>: Alan Shaw</li>
	<li><a href="http://elromdesign.com/blog/">ElromDesign.com</a>: Elad Elrom</li>
	<li><a href="http://www.moock.org/webdesign/">Moock.org</a>: Colin Moock</li>
</ul>]]>
        
    </content>
</entry>

</feed>

