<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Steve On Java &#187; Flash</title>
	<atom:link href="http://steveonjava.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://steveonjava.com</link>
	<description>Hacking Java, JavaFX, and Flash with Agility</description>
	<lastBuildDate>Sun, 06 May 2012 08:58:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The Frugal Geek&#8217;s Guide to Conference Crashing</title>
		<link>http://flash.steveonjava.com/the-frugal-geeks-guide-to-conference-crashing/</link>
		<comments>http://flash.steveonjava.com/the-frugal-geeks-guide-to-conference-crashing/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 08:03:12 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[OSCON Java]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[crashing]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[oscon]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1949</guid>
		<description><![CDATA[Conferences are expensive&#8230;  they assume you work for a stacked megacorporation that believes the fastest path to increasing their shareholder value is investing in your individual career training.  If your employer is not having a great year or has had a surge of resignations from last year&#8217;s crew of esteemed conference goers, chances are that [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fthe-frugal-geeks-guide-to-conference-crashing%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fo7aBq9%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22The%20Frugal%20Geek%27s%20Guide%20to%20Conference%20Crashing%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/the-frugal-geeks-guide-to-conference-crashing/";
		var dzone_title = "The Frugal Geek&#8217;s Guide to Conference Crashing";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Conferences are expensive&#8230;  they assume you work for a stacked megacorporation that believes the fastest path to increasing their shareholder value is investing in your individual career training.  If your employer is not having a great year or has had a surge of resignations from last year&#8217;s crew of esteemed conference goers, chances are that you won&#8217;t be getting reimbursed to attend your local geek-fest.</p>
<p>Fortunately for you, I happen to know the inside secrets to enjoying all the conference perks at <a href="http://www.oscon.com/">OSCON</a> without handing over a single Benjamin.</p>
<h3>Secret 1:  Conference pre-events are free and easily crashable!</h3>
<p>Today I dropped in completely unexpectedly on the <a href="http://www.oscon.com/oscon2011/public/schedule/detail/20413">Community Leadership Summit</a> today, and even after boldly announcing myself as a party crasher was awarded with a super-secret badge (a.k.a. index card w/sharpie etchings).  This gave full access to their sessions and let me attend the after-party for free drinks!</p>
<p>Tomorrow I am planning on crashing the free <a href="http://jvmlangsymposium.eventbrite.com/">OSCON JVM Languages Symposium</a>&#8230;  I hear they have some of Portland&#8217;s scariest pastries being brought in and might even be doing a free lunch outing thanks to their sponsor, <a href="http://typesafe.com/">Typesafe</a>.</p>
<p><a href="http://voodoodoughnut.com/index.php"><img class="alignnone size-full wp-image-1950" title="voodoo-doll-doughnut" src="http://steveonjava.com/wp-content/uploads/2011/07/voodoo-doll-doughnut.jpg" alt="" width="336" height="298" /></a></p>
<p>It helps that both of these events have an unbelievably high Rockstar to attendee ratio&#8230;  more on why this matters a little later.</p>
<h3>Secret 2:  The best type of conference pass is the free type</h3>
<p>There are 9! different OSCON passes available for you to choose from on the registration site.  While this is a bewildering array of options, but if you pay attention to the price it is quite an easy decision.  Click the &#8220;Register Now&#8221; button below and you are good to go:</p>
<p><a href="http://www.oscon.com/oscon2011/public/content/free"></a><a href="http://www.oscon.com/oscon2011/public/regwith/expopass"> <img src="http://assets.en.oreilly.com/1/eventprovider/1/cta_global_register.png" alt="Register" width="300" height="38" /> </a><br />
<a href="http://www.oscon.com/oscon2011/public/regwith/expopass">Register now</a> for a FREE Expo Hall Pass (use code <strong>EXPOPASS</strong>)</p>
<p>So what are you missing out on with an Expo Pass?  Well&#8230;  you can&#8217;t sit with the rest of the attendees and listen to a canned lecture, but you can hang out with your new Rockstar friends in the hallways.  Which takes us to Secret 3&#8230;</p>
<h3>Secret 3:  Conference value = # of Rockstars / # of Attendess</h3>
<p>This makes sense if you think about it&#8230;  if you were the only attendee, surrounded by a cluster of speakers and geniuses waiting to impart their knowledge on you, it would be infinitely valuable.  Most conferences you are one speck of sand in a huge pool of attendees vying for a little bit of wisdom to be imparted on your section of the audience.  The smaller the audience, the more chance you might actually get something of value out of the experience.</p>
<p>So what does this mean for the value you get from difference conference events?</p>
<ul>
<li>Keynote = 1 speaker to 1000 attendees:  Avoid this at all costs&#8230;  you can always get the highlights off twitter, so who cares.  [as you can see, my days as a conference chair are clearly numbered.  <img src='http://steveonjava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ]</li>
<li>Technical Session = 1 speaker to 100 attendees:  This is slightly better, but still the odds are clearly against you!  [yes, and now my days as a speaker are coming to an end as well...  see if anyone invites me to give a technical talk again]</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/stype/BoFs">Birds of a Feather Sessions</a> = 1 speaker to 30 attendees:  A slightly better ratio, more focused, and absolutely free!</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20253">Ignite</a> = 30 speakers to 300 attendees:  Ignite talks are for the speaker grazer in all of us&#8230;  yeah, talk your heart out&#8230;  for 5 minutes.  If you haven&#8217;t impressed us in that amount of time, at 40 minute session will not change our opinion.  It also helps that this event is absolutely free!</li>
<li>Unconference = 20 speakers to 100 attendees:  Now we are talking.  With this many technical gurus walking around you are virtually bound to learn something&#8230;  without even without trying!  This includes the <a href="http://jvmlangsymposium.eventbrite.com/">JVM Languages Symposium</a> and <a href="http://www.oscon.com/oscon2011/public/schedule/detail/20413">Community Leadership Summit</a>, both of which are free!</li>
<li>OSCON Hallways = 1 speaker to 1 attendee:  When you bump into <a href="http://twitter.com/#!/odersky">Martin Odersky</a> in the hallways after having had some good times over beer and pizza at the <a href="http://jvmlangsymposium.eventbrite.com/">JVM Languages Symposium</a> you are at a ratio where the real value comes in!  (and didn&#8217;t pay a dime to start the conversation)</li>
</ul>
<p>If you were paying attention, you probably noticed an interesting relationship&#8230;  the most valuable parts of the conference were the parts that cost absolutely nothing to get into.  (don&#8217;t let your megacorp friends know about this, or all the wonderful corporate sponsorships that pay for all these extras might dry up!)</p>
<h3>Secret 4:  Free stuff is the open source way</h3>
<p>Open source is all about giving software out for free, right?  Well, maybe there is more to it than that, but there is still plenty of free conference stuff flying around that you can take advantage of with over 60 <a href="http://www.oscon.com/oscon2011/public/content/exhibitors">exhibitors</a> waiting to hand you prizes just for the privilege of scanning your free badge!</p>
<h3>Secret 5:  And parties galore!</h3>
<p>While all those folks who paid for the high priced admission tickets may think they are special, the reality is that from a sponsor&#8217;s point of view, their eyeball is worth exactly the same as yours.  This means that you have an equal opportunity to take advantage of the most important part of any conference experience&#8230;  the parties!</p>
<p>Here are some of the free events that you won&#8217;t want to miss out on:</p>
<ul>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20268">Opening Reception</a> &#8211; Grab a drink and mingling with exhibitors and fellow attendees</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20269">OSCON Carnival</a> &#8211;  Join us for food, drinks, entertainment, and lots of good old fashioned fun</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20865">Puppet Labs Party</a> at their headquarters in Portland&#8217;s Pearl District.</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/21329">OpenStack Party</a> &#8211; Join OpenStack for cocktails and hors d’oeuvres at the Spirit of 77</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/21330">Surprise Attendee Event</a> on Wednesday evening (sorry, we can&#8217;t tell you anything else about this event because it&#8217;s a secret)</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20270">Booth Crawl</a> where you can quench your thirst with vendor-hosted libations and   snacks while you check out all the cool stuff in the expo hall.</li>
<li><a href="http://www.oscon.com/oscon2011/public/schedule/detail/20866">Media Temple Party</a> at the Jupiter Hotel with open bar, music, and all you can eat tacos!</li>
</ul>
<h3>Final Secret:  Everyone can be a Rockstar</h3>
<p>What makes the difference between a Rockstar speaker and an attendee?  Just the drive to do something with technology and be proud of it.  You can be an open-source contributor, user group leader, and technical speaker if you simply apply the skills you already have to the benefit of the community.  Don&#8217;t expect to get paid much, but at least it is a really easy way to get invited to conferences around the world.</p>
<p>&#8212;-</p>
<p>While this article is all meant in good humor, on a serious note I want to thank the O&#8217;Reilly folks for putting on OSCON, offering discounted expo tickets, and compiling this great <a href="http://www.oscon.com/oscon2011/public/content/free">list</a> of free events.<a href="http://www.oscon.com/oscon2011/public/content/free"><br />
</a></p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/the-frugal-geeks-guide-to-conference-crashing/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/the-frugal-geeks-guide-to-conference-crashing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Turbocharging Performance with Caching</title>
		<link>http://flash.steveonjava.com/turbocharging-performance-with-caching/</link>
		<comments>http://flash.steveonjava.com/turbocharging-performance-with-caching/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 16:00:35 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1911</guid>
		<description><![CDATA[This is the third installation of my Flex Mobile series.  In my first post I talked about multitouch, and my second post I dug in on how to control the soft keyboard.  This post goes into detail on performance, specifically caching. Flash applications tend to use a lot more vector graphics than other UI platforms. [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fturbocharging-performance-with-caching%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Turbocharging%20Performance%20with%20Caching%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/turbocharging-performance-with-caching/";
		var dzone_title = "Turbocharging Performance with Caching";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>This is the third installation of my Flex Mobile series.  In my <a href="http://flash.steveonjava.com/flash-android-touch-checker/">first post </a>I talked about multitouch, and my <a href="http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/">second post </a>I dug in on how to control the soft keyboard.  This post goes into detail on performance, specifically caching.</p>
<p>Flash applications tend to use a lot more vector graphics than other UI platforms. This is a great thing for designers who can directly use all their path art and graphics.  However, on mobile devices it increases the challenge to build high performing applications.</p>
<p>Fortunately, there is a feature of the Flash platform called cacheAsBitmap (and its newer sibling, cacheAsBitmapMatrix) that lets you speed up rendering performance at the expense of memory.</p>
<p><strong>Cache as Bitmap</strong></p>
<p>CacheAsBitmap is a boolean property of DisplayObject, and by extension all the visual elements you use in Flash and Flex includings Sprites and UIComponents, have access to this variable. When set to true, each time the DisplayObject or one of its children changes it will take a snapshot of the current state and save it to an offscreen buffer. Then for future rendering operations it will redraw off the saved offscreen buffer, which can be orders of magnitude faster for a complicated portion of the scene.</p>
<p>To enable cacheAsBitmap on a DisplayObject you would do the following:</p>
<pre class="brush: jscript; title: ; notranslate">
cacheAsBitmap = true;
</pre>
<p>Flex UIComponents have a cache policy that will automatically enable cacheAsBitmap based on a heuristic. You can override this behavior and force cacheAsBitmap to be enabled by doing the following:</p>
<pre class="brush: jscript; title: ; notranslate">
cachePolicy = UIComponentCachePolicy.ON;
</pre>
<p>While cacheAsBitmap is a very powerful tool for optimizing the redraw of your application, it is a double-edged sword if not used properly. A full size screen buffer is kept and refreshed for each DisplayObject with cacheAsBitmap set to true, which can consume a lot of device memory or exhaust the limited GPU memory if you are running in graphics accelerated mode.</p>
<p>Also, if you have an object that updates frequently or has a transform applied, then cacheAsBitmap will simply slow down your application with unnecessary buffering operations.</p>
<p><strong>Cache as Bitmap Matrix</strong></p>
<p>CacheAsBitmapMatrix is also a property on DisplayObject, and works together with cacheAsBitmap. For cacheAsBitmapMatrix to have any effect cacheAsBitmap must also be turned on.</p>
<p>CacheAsBitmap does not work when a transformation, such as a rotation or a skew, is applied to the object. The reason for this is that applying such a transformation to a saved bitmap produces scaling artifacts that would degrade the appearance of the final image. Therefore, if you would like to have caching applied to objects with a transform applied, Flash requires that you also specify a transformation matrix for the bitmap that is stored in the cacheAsBitmapMatrix property.</p>
<p>For most purposes, setting cacheAsBitmapMatrix to the identify matrix will do what you expect. The offscreen bitmap will be saved in the untransformed position and any subsequent transforms on the DisplayObject will be applied to that bitmap. The following code shows how to set cacheAsBitmapMatrix to the identify transform:</p>
<pre class="brush: jscript; title: ; notranslate">
cacheAsBitmap = true;
cacheAsBitmapMatrix = new Matrix();
</pre>
<p class="note">Tip: If you plan on setting cacheAsBitmapMatrix on multiple objects, you can reuse the same matrix to get rid of the cost of the matrix creation.</p>
<p>The downside to this is that the final image may show some slight aliasing, especially if the image is enlarged or straight lines are rotated. To account for this, you can specify a transform matrix that scales the image up prior to buffering it. Similarly, if you know that the final graphic will always be rendered at a reduced size you can specify a transform matrix that scales down the buffered image to save on memory usage.</p>
<p>If you are using cacheAsBitmapMatrix to scale the image size down you need to be careful that you never show the DisplayObject at the original size. The following figure shows an example of what happens if you set a cache matrix that reduces and rotates the image first, and then try to render the object at its original size:</p>
<p><a href="http://steveonjava.com/wp-content/uploads/2011/07/32315f1005.png"><img class="alignnone size-large wp-image-1913" title="Cache As Bitmap Matrix" src="http://steveonjava.com/wp-content/uploads/2011/07/32315f1005-650x229.png" alt="" width="650" height="229" /></a></p>
<p>Notice that the final image has quite a bit of aliasing from being scaled up. Even though you are displaying it with a one-to-one transform from the original, Flash will upscale the cached version resulting in a low fidelity image.</p>
<p>The optimal use of cacheAsBitmapMatrix is to set it slightly larger than the expected transform so you have enough pixel information to produce high quality transformed images.</p>
<h2>Flash Mobile Bench</h2>
<p>The Flash Mobile Bench is a simple application that lets you test the affect of different settings on the performance of your deployed mobile application.</p>
<p>The functionality that it lets you test includes the following:</p>
<ul>
<li>Addition of a large number of shapes to the display list</li>
<li>Animation speed of a simple x/y translation</li>
<li>Animation speed of a simple clockwise rotation</li>
<li>Impact of cacheAsBitmap on performance</li>
<li>Impact of cacheAsBitmapMatrix on performance</li>
<li>Impact of the automatic Flex cache heuristic on performance</li>
</ul>
<p>The code that updates the cache behavior of the shape group is shown below:</p>
<pre class="brush: jscript; title: ; notranslate">
private var identityMatrix:Matrix = new Matrix();

private function cacheOff():void {
  shapeGroup.cachePolicy = UIComponentCachePolicy.OFF;
}

private function cacheAuto():void {
  shapeGroup.cachePolicy = UIComponentCachePolicy.AUTO;
}

private function cacheAsBitmapX():void {
  shapeGroup.cachePolicy = UIComponentCachePolicy.ON;
  shapeGroup.cacheAsBitmapMatrix = null;
}

private function cacheAsBitmapMatrixX():void {
  shapeGroup.cachePolicy = UIComponentCachePolicy.ON;
  shapeGroup.cacheAsBitmapMatrix = identityMatrix;
}
</pre>
<p>Even though we have only one instance of an object to apply the cacheAsBitmapMatrix on, we follow the best practice of reusing a common identity matrix to avoid extra memory and garbage collection overhead.</p>
<p>Upon running the Flash Mobile Bench, you will immediately see the FPS counter max out on your given device. Click on the buttons to add some shapes to the scene, set the cache to your desired setting, and see how your device performs. The following figure shows the Flash Mobile Bench application running on a Motorola Droid 2 with 300 circles rendered using cacheAsBitmapMatrix:</p>
<p><a href="http://steveonjava.com/wp-content/uploads/2011/07/32315f1006.png"><img class="alignnone size-full wp-image-1912" title="Flex Mobile Bench" src="http://steveonjava.com/wp-content/uploads/2011/07/32315f1006.png" alt="" width="480" height="854" /></a></p>
<p>How does the performance of your device compare?</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/turbocharging-performance-with-caching/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/turbocharging-performance-with-caching/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Taking Control of the Flex Soft Keyboard</title>
		<link>http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/</link>
		<comments>http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 11:35:55 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[keyboard]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1900</guid>
		<description><![CDATA[This is part 2 of my Flex Mobile series.  Please see my first post for information on getting started. When using the text components, the Android soft keyboard will automatically trigger upon focus as you would expect. However, sometimes you need finer grained control over when the soft keyboard gets triggered and what happens when [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Ftaking-control-of-the-flex-soft-keyboard%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Taking%20Control%20of%20the%20Flex%20Soft%20Keyboard%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/";
		var dzone_title = "Taking Control of the Flex Soft Keyboard";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>This is part 2 of my Flex Mobile series.  Please see my <a href="http://flash.steveonjava.com/flash-android-touch-checker/">first post</a> for information on getting started.</p>
<p>When using the text components, the Android soft keyboard will automatically trigger upon focus as you would expect. However, sometimes you need finer grained control over when the soft keyboard gets triggered and what happens when it gets activated.</p>
<p>The soft keyboard in Flex is controlled by the application focus. When a component that has the needsSoftKeyboard property set to true is given the focus, the soft keyboard will come to the front and the stage will scroll so that the selected component is visible. When that component loses focus, the soft keyboard will disappear and the stage will return to its normal position.</p>
<p>With the understanding of the focus, you can control the soft keyboard by doing the following:</p>
<ul>
<li>To show the soft keyboard declaratively – Set needsSoftKeyboard to true for your component</li>
<li>To show the soft keyboard programmatically – Call requestSoftKeyboard() on a component that already has needsSoftKeyboard set.</li>
<li>To hide the soft keyboard – Call setFocus() on a component that does not have needsSoftKeyboard set.</li>
</ul>
<p>This works fine for components that do not normally trigger the soft keyboard; however, for components that automatically raise the keyboard, setting needsSoftKeyboard to false has no effect. A workaround to prevent the keyboard from popping up on these components is to listen for the activating event and suppressing it with code like the following:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;fx:Script&gt;
  &lt;![CDATA[
    private function preventActivate(event:SoftKeyboardEvent):void {
      event.preventDefault();
    }
  ]]&gt;
&lt;/fx:Script&gt;
&lt;s:TextArea text=&quot;I am a text component, but have no keyboard?&quot;
  softKeyboardActivating=&quot;preventActivate(event)&quot;/&gt;
</pre>
<p>This code catches the softKeyboardActivating event on the TextArea component and suppresses the default action of raising the soft keyboard.</p>
<p>In addition to getting events on activation, you can also catch softKeyboardActivate and softKeyboardDeactivate events in order to perform actions based on the soft keyboard status.</p>
<p>The following is the full code listing for a soft keyboard sample application that demonstrates all these techniques used together to take complete control over the soft keyboard.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:Application xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot;
         xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot;
         splashScreenImage=&quot;@Embed('ProAndroidFlash400.png')&quot;&gt;
  &lt;fx:Script&gt;
    &lt;![CDATA[
      [Bindable]
      private var state:String;

      [Bindable]
      private var type:String;

      private function handleActivating(event:SoftKeyboardEvent):void {
        state = &quot;Activating...&quot;;
        type = event.triggerType;
      }

      private function handleActivate(event:SoftKeyboardEvent):void {
        state = &quot;Active&quot;;
        type = event.triggerType;
      }

      private function handleDeactivate(event:SoftKeyboardEvent):void {
        state = &quot;Deactive&quot;;
        type = event.triggerType;
      }

      private function preventActivate(event:SoftKeyboardEvent):void {
        event.preventDefault();
      }
    ]]&gt;
  &lt;/fx:Script&gt;
  &lt;s:VGroup left=&quot;20&quot; top=&quot;20&quot; right=&quot;20&quot; gap=&quot;15&quot;
        softKeyboardActivating=&quot;handleActivating(event)&quot;
        softKeyboardActivate=&quot;handleActivate(event)&quot;
        softKeyboardDeactivate=&quot;handleDeactivate(event)&quot;&gt;
    &lt;s:HGroup&gt;
      &lt;s:Label text=&quot;Keyboard State: &quot; fontWeight=&quot;bold&quot;/&gt;
      &lt;s:Label text=&quot;{state}&quot;/&gt;
    &lt;/s:HGroup&gt;
    &lt;s:HGroup&gt;
      &lt;s:Label text=&quot;Trigger Type: &quot; fontWeight=&quot;bold&quot;/&gt;
      &lt;s:Label text=&quot;{type}&quot;/&gt;
    &lt;/s:HGroup&gt;
    &lt;s:Button id=&quot;needy&quot; label=&quot;I Need the Keyboard&quot; needsSoftKeyboard=&quot;true&quot; emphasized=&quot;true&quot;/&gt;
    &lt;s:TextArea text=&quot;I am a text component, but have no keyboard?&quot;
          softKeyboardActivating=&quot;preventActivate(event)&quot;/&gt;
    &lt;s:HGroup width=&quot;100%&quot; gap=&quot;15&quot;&gt;
      &lt;s:Button label=&quot;Hide Keyboard&quot; click=&quot;{setFocus()}&quot; width=&quot;50%&quot;/&gt;
      &lt;s:Button label=&quot;Show Keyboard&quot; click=&quot;{needy.requestSoftKeyboard()}&quot; width=&quot;50%&quot;/&gt;
    &lt;/s:HGroup&gt;
  &lt;/s:VGroup&gt;
&lt;/s:Application&gt;
</pre>
<p>This code creates several controls and attaches actions to them so that you can hide and show the soft keyboard at will, as well as see the current soft keyboard state as reported by the events that trickle up. When you run the application it should look like this:</p>
<p><a href="http://steveonjava.com/wp-content/uploads/2011/07/32315f0313.png"><img class="size-full wp-image-1906 alignnone" title="Flex Focus Example" src="http://steveonjava.com/wp-content/uploads/2011/07/32315f0313.png" alt="" width="480" height="854" /></a></p>
<p>Notice that the TextArea control, which normally triggers the soft keyboard no longer brings it up, while the highlighted button immediately raises the soft keyboard whenever it gets focus. The two buttons at the bottom to show and hide the keyboard merely play focus tricks to get Flash to show and hide the keyboard at will.</p>
<p>You can use the same techniques in your own application to take full control over the soft keyboard.</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/taking-control-of-the-flex-soft-keyboard/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Flash Android Touch Checker</title>
		<link>http://flash.steveonjava.com/flash-android-touch-checker/</link>
		<comments>http://flash.steveonjava.com/flash-android-touch-checker/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 02:49:16 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[Flex 4.5]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[multitouch]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1832</guid>
		<description><![CDATA[This is the first in a 3 part blog series I am doing on Flash Mobile technology. With the release of Flash Builder 4.5, Flash and Flex now have support for building mobile applications that target Android and, with an update coming out on 6/20, also iPhone and Blackberry devices. In my opinion, this is [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fflash-android-touch-checker%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Flash%20Android%20Touch%20Checker%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/flash-android-touch-checker/";
		var dzone_title = "Flash Android Touch Checker";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>This is the first in a 3 part blog series I am doing on Flash Mobile technology. With the release of <a href="http://www.adobe.com/products/flash-builder.html">Flash Builder 4.5</a>, Flash and Flex now have support for building mobile applications that target Android and, with an update coming out on 6/20, also iPhone and Blackberry devices. In my opinion, this is now the best platform for building cross-platform mobile applications available today.</p>
<p>When targeting applications for mobile development you both have different constraints due to screen size and limited CPU/memory, as well as additional opportunities for enhancing your application by taking advantage of features like multitouch, the accelerometer, and the GPS. In this blog I chose to focus on multitouch, because it is something that every application should take advantage of.</p>
<p>Flash supports 5 different multitouch gestures. The following table describes the gestures and includes a figure demonstrating the multitouch action needed to trigger it.</p>
<table border="0" cellspacing="5" cellpadding="5" width="640">
<tbody>
<tr>
<td width="91" valign="top">Gesture</td>
<td width="63" valign="top">Name</td>
<td width="86" valign="top">Event</td>
<td valign="top">Description</td>
</tr>
<tr>
<td width="91" valign="top"><a href="http://steveonjava.com/wp-content/uploads/2011/06/pan.png"><img class="aligncenter size-full wp-image-1862" title="pan" src="http://steveonjava.com/wp-content/uploads/2011/06/pan.png" alt="" width="100" height="92" /></a></td>
<td width="63" valign="top">Pan</td>
<td width="86" valign="top">gesturePan</td>
<td valign="top">Place two fingers on the screen, and drag left or right; commonly   used for scrolling the contents of the whole screen</td>
</tr>
<tr>
<td width="91" valign="top"><a href="http://steveonjava.com/wp-content/uploads/2011/06/rotate.png"><img class="aligncenter size-full wp-image-1863" title="rotate" src="http://steveonjava.com/wp-content/uploads/2011/06/rotate.png" alt="" width="100" height="114" /></a></td>
<td width="63" valign="top">Rotate</td>
<td width="86" valign="top">gestureRotate</td>
<td valign="top">Touch the screen with two fingers, and move them in an   arc. This is an interactive gesture that will often be used to perform   arbitrary rotation of objects.</td>
</tr>
<tr>
<td width="91" valign="top"><a href="http://steveonjava.com/wp-content/uploads/2011/06/zoom.png"><img class="aligncenter size-full wp-image-1864" title="zoom" src="http://steveonjava.com/wp-content/uploads/2011/06/zoom.png" alt="" width="100" height="136" /></a></td>
<td width="63" valign="top">Zoom</td>
<td width="86" valign="top">gestureZoom</td>
<td valign="top">Place two fingers on the screen, and move them apart or   together along a single line. Moving the fingers apart indicates zooming in,   and moving the fingers together indicates zooming out.</td>
</tr>
<tr>
<td width="91" valign="top"><a href="http://steveonjava.com/wp-content/uploads/2011/06/swipe.png"><img class="aligncenter size-full wp-image-1865" title="swipe" src="http://steveonjava.com/wp-content/uploads/2011/06/swipe.png" alt="" width="100" height="168" /></a></td>
<td width="63" valign="top">Swipe</td>
<td width="86" valign="top">gestureSwipe</td>
<td valign="top">Place one finger on the screen, and quickly swipe it in a   single line of travel. Swipes are commonly used to change the screen contents   or take an alternate action, such as deleting an item from a list.</td>
</tr>
<tr>
<td width="91" valign="top"><a href="http://steveonjava.com/wp-content/uploads/2011/06/two-finger-tap.png"><img class="aligncenter size-full wp-image-1866" title="two-finger-tap" src="http://steveonjava.com/wp-content/uploads/2011/06/two-finger-tap.png" alt="" width="100" height="114" /></a></td>
<td width="63" valign="top">Two-Finger Tap</td>
<td width="86" valign="top">gestureTwoFingerTap</td>
<td valign="top">Lightly tap the screen with two fingers, making only brief   contact. This can be used as an alternative or secondary click where more   than one action is required.</td>
</tr>
</tbody>
</table>
<p><span id="more-1832"></span>Pictures courtesy of <a href="http://gestureworks.com/">GestureWorks</a></p>
<p>To discover if the device your application is running on supports gestures and to query the gesture capabilities dynamically, you can call the following static methods on the Multitouch class:</p>
<ul>
<li>Multitouch.supportsGestureEvents: Whether the device you are running on supports emitting gesture events</li>
<li> Multitouch.supportedGestures: A list of strings, one for each of the supported multitouch events</li>
</ul>
<p>Flash has two different modes of multitouch recognition that are mutually exclusive. You can either get the raw multitouch events by setting inputMode to TOUCH_POINT or can recognize gestures by choosing an inputMode of GESTURE. Before using gesture events, you should ensure that the inputMode to gesture input mode like this:</p>
<pre class="brush: jscript; title: ; notranslate">
Multitouch.inputMode = MultitouchInputMode.GESTURE;
</pre>
<p>This is also happens to be the default input mode, so if you haven’t explicitly set it to TOUCH_POINT then you should be fine.</p>
<p>To both demonstrate the use of gestures as well as to test the availability of different gesture events on your device, we will create a simple Flex application called Gesture Check.</p>
<p>The first thing we will do to create the application is to build a declarative XML layout for the UI. For this we are going to use some of the basic layout and UI classes of Flex, including the following:<br />
H/VGroup: The HGroup and VGroup classes let you arrange a set of components in a simple vertical or horizontal stacked layout. The components are laid out in order, with the distance between set by the gap property.</p>
<ul>
<li>Label: A simple component that displays an uneditable text string; this is commonly used as the label for another control in a form.</li>
<li>Image: The Image class lets you display a graphic that can be loaded from a GIF, JPEG, PNG, SVG, or SWF file. In this example, we will be using transparent PNGs.</li>
<li>CheckBox: A form control that has a value of either selected or unselected with a visual indicator; it also includes a text description as part of the display.</li>
</ul>
<p>Using these layouts and controls, we can put together a simple user interface that displays the status of whether a particular multitouch gesture is enabled on the device and whether the user has successfully tested the gesture. The code for the first gesture of “Swipe” can be created declaratively as follows:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:View xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot;
    xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot;
    title=&quot;Supported Gestures&quot; initialize=&quot;init()&quot;&gt;
  &lt;s:VGroup paddingTop=&quot;15&quot; paddingBottom=&quot;15&quot;
                    paddingLeft=&quot;20&quot; paddingRight=&quot;20&quot; gap=&quot;10&quot;&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Swipe&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/swipe.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
  &lt;/s:VGroup&gt;
&lt;/s:View&gt;
</pre>
<p>Next, we need to add some Actionscript code that will set the CheckBox to enabled if the gesture is supported and will tick the tested box once the user successfully performs the gesture. To find the list of supported gestures we will use the supportedGestures variable described earlier, which we can iterate over to mark the checkboxes.</p>
<p>To test for successful gesture actions, we can add event listeners programmatically using the the addEventListener() function. It takes two parameters, the gesture to listen for, followed by a callback function.<br />
The completed code is shown here:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:View xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot;
    xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot;
    title=&quot;Supported Gestures&quot; initialize=&quot;init()&quot;&gt;
  &lt;fx:Script&gt;
    &lt;![CDATA[
      import flash.ui.Multitouch;

      private function init():void {
        for each(var gesture:String in Multitouch.supportedGestures) {
          this[gesture+&quot;Enabled&quot;].selected = true;
          addEventListener(gesture, function(e:GestureEvent):void {
            e.currentTarget[e.type+&quot;Tested&quot;].selected = true;
          });
        }
      }
    ]]&gt;
  &lt;/fx:Script&gt;
  &lt;s:VGroup paddingTop=&quot;15&quot; paddingBottom=&quot;15&quot;
                    paddingLeft=&quot;20&quot; paddingRight=&quot;20&quot; gap=&quot;10&quot;&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Pan&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/pan.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox id=&quot;gesturePanEnabled&quot; content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox id=&quot;gesturePanTested&quot; content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Rotate&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/rotate.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox id=&quot;gestureRotateEnabled&quot; content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox id=&quot;gestureRotateTested&quot; content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Zoom&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/zoom.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox id=&quot;gestureZoomEnabled&quot; content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox id=&quot;gestureZoomTested&quot; content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Swipe&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/swipe.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox id=&quot;gestureSwipeEnabled&quot; content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox id=&quot;gestureSwipeTested&quot; content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
    &lt;s:HGroup verticalAlign=&quot;middle&quot; gap=&quot;20&quot;&gt;
      &lt;s:Label text=&quot;Two-Finger Tap&quot; fontSize=&quot;36&quot; width=&quot;110&quot;/&gt;
      &lt;s:Image source=&quot;@Embed('/gestures/twoFingerTap.png')&quot; width=&quot;137&quot;/&gt;
      &lt;s:VGroup gap=&quot;10&quot;&gt;
        &lt;s:CheckBox id=&quot;gestureTwoFingerTapEnabled&quot; content=&quot;Enabled&quot; mouseEnabled=&quot;false&quot;/&gt;
        &lt;s:CheckBox id=&quot;gestureTwoFingerTapTested&quot; content=&quot;Tested&quot; mouseEnabled=&quot;false&quot;/&gt;
      &lt;/s:VGroup&gt;
    &lt;/s:HGroup&gt;
    &lt;s:Label text=&quot;Graphics courtesy of GestureWorks.com&quot; fontSize=&quot;12&quot;/&gt;
  &lt;/s:VGroup&gt;
&lt;/s:View&gt;
</pre>
<p>Notice that we have added a few IDs to the CheckBoxes in order to reference them from the initialize function. The naming convention is the gesture name appended with the words “Enabled” or “Tested”. The same naming convention is used in the code that sets the selected state.</p>
<p>Upon running this example you will see the following:</p>
<p><a href="http://steveonjava.com/wp-content/uploads/2011/06/32315f0112.png"><img class="aligncenter size-full wp-image-1868" title="Gesture Check Sample" src="http://steveonjava.com/wp-content/uploads/2011/06/32315f0112.png" alt="" width="480" height="838" /></a></p>
<p>Most modern Android devices support the full complement of gestures, so you will get back 100% Enabled when running on device. However, running in the emulator it will depend on what platform you are running on.</p>
<p>Try testing all 5 gestures and see if you can successfully test them on your own device.</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/flash-android-touch-checker/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/flash-android-touch-checker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSCON Java, The Java Open Source Conference</title>
		<link>http://flash.steveonjava.com/oscon-java-the-java-open-source-conference/</link>
		<comments>http://flash.steveonjava.com/oscon-java-the-java-open-source-conference/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 00:19:15 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[OSCON Java]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1819</guid>
		<description><![CDATA[It is pretty easy to get lost in the media hype around the Java events of the past year.  If you follow the headlines, you might believe that all the Java talent left Oracle in a mass exodus, Larry hates open source, or Java is turning into the next COBOL.  Regardless of the factual correctness [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Foscon-java-the-java-open-source-conference%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fgnm2qD%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OSCON%20Java%2C%20The%20Java%20Open%20Source%20Conference%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/oscon-java-the-java-open-source-conference/";
		var dzone_title = "OSCON Java, The Java Open Source Conference";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>It is pretty easy to get lost in the media hype around the Java events of the past year.  If you follow the headlines, you might believe that all the Java talent left Oracle in a mass exodus, Larry hates open source, or Java is turning into the next COBOL.  Regardless of the factual correctness of these headlines, the Java ecosystem is about more than a single company or set of individuals.  Java has the largest open-source community of any language in existence!</p>
<p>So how big is Java and open-source?  Here is an informal search poll of some of the most popular open-source project hosting providers:</p>
<p><a href="http://steveonjava.com/wp-content/uploads/2011/03/Open-source-platform-comparison.png"><img class="aligncenter size-full wp-image-1823" title="Open-source platform comparison" src="http://steveonjava.com/wp-content/uploads/2011/03/Open-source-platform-comparison.png" alt="" width="574" height="324" /></a></p>
<p>The data for this chart comes from the top six open-source hosting providers using Google Search as a metric for gauging activity level for each of the platforms.  As you can see, Java is still the most active open-source platform in the world, followed closely by PHP and Python.  While not an indicator of language popularity, Bill Gates has gone on record speaking out against open source, so the poor representation from the C# community is not surprising.</p>
<p>This takes us to <a href="http://www.oscon.com/oscon2011/public/cfp/159">OSCON Java</a>, which is a new conference I am helping to kick off as conference co-chair together with <a href="http://twitter.com/#!/laurelatoreilly">Laurel Ruma</a>.  It is colocated with OSCON in Portland, Oregon, but is exclusively focused on Java and open source.  O&#8217;Reilly is the conference organizer, but they are very neutral when it comes to corporations and technologies.  This allows us to reach out to a wide variety of Java technology players including Apache, Google, Adobe, Oracle, the JCP, and many others.</p>
<p>We have big plans for the OSCON Java keynotes, technical content, and exhibitors.  Also, we are working on making this a model conference from the get-go based on my experience attending and speaking at premier conference venues across the world.  Expect a huge focus on community outreach, a lot of interaction between speakers and attendees, and a particular focus on the JVM languages of tomorrow.</p>
<p>If you are interested in participating as a speaker, it is still not too late to submit a talk.  The CFP ends on March 28th (4 days!), so you still have time to submit a last minute talk:<a href="http://www.oscon.com/oscon2011/public/cfp/159"></p>
<p>http://www.oscon.com/oscon2011/public/cfp/159</a></p>
<p>If you have a great idea, but can&#8217;t get your talk together in time or miss the deadline by a few days, shoot me an e-mail via the <a href="http://steveonjava.com/contact/">contact form</a> on my blog.</p>
<p>I look forward to seeing you at OSCON Java, uniting the Java open-source community towards a brighter future!</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/oscon-java-the-java-open-source-conference/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/oscon-java-the-java-open-source-conference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash Capability Reporter Sample and Video</title>
		<link>http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/</link>
		<comments>http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 10:12:50 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[sfandroid]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1774</guid>
		<description><![CDATA[The folks at Marakana did a great job hosting the recent Flash Android event, as well as recording and publishing the talk. As a fellow user group leader, I can appreciate the hard work that went into preparing the video, including some fine editing and splicing by Max Walker (the presentation was not as flawless [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fflash-capability-reporter-sample-and-video%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FfMdYhk%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Flash%20Capability%20Reporter%20Sample%20and%20Video%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/";
		var dzone_title = "Flash Capability Reporter Sample and Video";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>The folks at Marakana did a great job hosting the recent <a href="http://www.sfandroid.org/events/15196582/">Flash Android event</a>, as well as recording and publishing the talk.  As a fellow user group leader, I can appreciate the hard work that went into preparing the video, including some fine editing and splicing by Max Walker (the presentation was not as flawless as he made it look!)</p>
<p>You can view the talk on the <a href="http://marakana.com/forums/android/general/253.html">Marakana website</a>, or here as an embedded video:</p>
<p><a href="http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/"><em>Click here to view the embedded video.</em></a></p>
<p>All the slides for the talk can be found on SlideShare: <a href="http://www.slideshare.net/steveonjava/beginning-android-flash-development">http://www.slideshare.net/steveonjava/beginning-android-flash-development</a></p>
<h1>Flash Capability Reporter</h1>
<p>Also, as promised I am going to start posting different samples from the book.  The first of these is the Flash Capability Reporter.  It is a simple application that displays your device characteristics in a scrolling text field.  Figure 1 shows a screenshot of the Capability Reporter in action.</p>
<div id="attachment_1779" class="wp-caption alignnone" style="width: 305px"><a href="http://steveonjava.com/wp-content/uploads/2011/02/flashcapabilityreporter.png"><img class="size-large wp-image-1779" title="Flash Capability Reporter" src="http://steveonjava.com/wp-content/uploads/2011/02/flashcapabilityreporter-295x499.png" alt="" width="295" height="499" /></a><p class="wp-caption-text">Figure 1. Flash Capability Reporter running on the desktop</p></div>
<h3><span id="more-1774"></span>Flash Mobile Setup</h3>
<p>If you want to publish to an Android device you will also need to have a current Android SDK installed.  You can download this from the Google Android site:</p>
<ul>
<li><a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></li>
</ul>
<h3>Installing the AIR for Android Plug-in</h3>
<p>Out of the box Flash CS5 doesn&#8217;t include support for AIR for Android, so if you plan on using any mobile specific APIs you should install the AIR for Android plugin. The AIR for Android Flash  plug-in sits on top of Flash Professional CS5 and is available as a  free beta:</p>
<p><a href="http://labs.adobe.com/technologies/flashpro_extensionforair/">http://labs.adobe.com/technologies/flashpro_extensionforair/</a></p>
<p>The filename for the extension should be similar to the following:</p>
<p>AirforAndroid_FlashCS5.zxp</p>
<p>Simply double clicking on it should automatically launch the Adobe Extension Manager and install AIR for Android as shown in Figure 2. You can also open the Adobe Extension Manager manually and add in the extension by clicking on the Install button.</p>
<p class="note">Note for Windows Users: If you are running Windows Vista or Windows 7 you will need to run the Adobe Extension Manager as Administrator. To do this find Adobe Extension Manager CS5 under Windows Start Menu -&gt; All Programs -&gt; Adobe XXX CS5, right-click on it, and choose Run as Administrator.</p>
<div id="attachment_1780" class="wp-caption alignnone" style="width: 660px"><a href="http://steveonjava.com/wp-content/uploads/2011/02/flashcs5extension.png"><img class="size-large wp-image-1780" title="Flash CS5 Extension" src="http://steveonjava.com/wp-content/uploads/2011/02/flashcs5extension-650x487.png" alt="" width="650" height="487" /></a><p class="wp-caption-text">Figure 2. Adobe Extension Manager plug-in installation</p></div>
<p>Once the AIR for Android plug-in is installed you will see some additional options in Flash CS5. This includes a new player type of AIR Android an AIR Android settings dialog, and a new AIR for Android template. To convert existing projects you can go into the project properties and change the player type to AIR Android.</p>
<h3>Creating a New Android Project</h3>
<p>To create a new AIR for Android project, open the new project dialog from File -&gt; New&#8230; and click the Templates tab. Here you can select an AIR for Android project and choose your device template as shown in Figure 3.</p>
<div id="attachment_1781" class="wp-caption alignnone" style="width: 660px"><a href="http://steveonjava.com/wp-content/uploads/2011/02/airforandroidtemplate.png"><img class="size-large wp-image-1781" title="AIR for Android template" src="http://steveonjava.com/wp-content/uploads/2011/02/airforandroidtemplate-650x424.png" alt="" width="650" height="424" /></a><p class="wp-caption-text">Figure 3. Flash CS5 new template dialog</p></div>
<p><strong> </strong>This will create a new project with the canvas perfectly sized for a mobile project in portrait mode and allow you to test your application in Flash Professional or the AIR Debug Launcher.</p>
<h3>Writing the Flash Capability Reporter</h3>
<p>The Flash Capability Reporter is a simple application with a scrolling list that enumerates all the capabilities of the emulator or device you are running on.</p>
<p>For the Actionscript code we will use static constants from the Capabilities and Multitouch classes. Most of these return true or false, but some will return string or integer values. By using the string concatenation operator we can easily format them for display as shown in Listing 1.</p>
<p>Listing 1. Flash capability checking code</p>
<pre class="brush: jscript; title: ; notranslate">
import flash.system.Capabilities;
import flash.ui.Multitouch;

capabilityScroller.capabilities.text =
  &quot;AV Hardware Disable: &quot; + Capabilities.avHardwareDisable + &quot;\n&quot; +
  &quot;Has Accessibility: &quot; + Capabilities.hasAccessibility + &quot;\n&quot; +
  &quot;Has Audio: &quot; + Capabilities.hasAudio + &quot;\n&quot; +
  &quot;Has Audio Encoder: &quot; + Capabilities.hasAudioEncoder + &quot;\n&quot; +
  &quot;Has Embedded Video: &quot; + Capabilities.hasEmbeddedVideo + &quot;\n&quot; +
  &quot;Has MP3: &quot; + Capabilities.hasMP3 + &quot;\n&quot; +
  &quot;Has Printing: &quot; + Capabilities.hasPrinting + &quot;\n&quot; +
  &quot;Has Screen Broadcast: &quot; + Capabilities.hasScreenBroadcast + &quot;\n&quot; +
  &quot;Has Screen Playback: &quot; + Capabilities.hasScreenPlayback + &quot;\n&quot; +
  &quot;Has Streaming Audio: &quot; + Capabilities.hasStreamingAudio + &quot;\n&quot; +
  &quot;Has Video Encoder: &quot; + Capabilities.hasVideoEncoder + &quot;\n&quot; +
  &quot;Is Debugger: &quot; + Capabilities.isDebugger +  &quot;\n&quot; +
  &quot;Language: &quot; + Capabilities.language + &quot;\n&quot; +
  &quot;Local File Read Disable: &quot; + Capabilities.localFileReadDisable + &quot;\n&quot; +
  &quot;Manufacturer: &quot; + Capabilities.manufacturer + &quot;\n&quot; +
  &quot;OS: &quot; + Capabilities.os + &quot;\n&quot; +
  &quot;Pixel Aspect Ratio: &quot; + Capabilities.pixelAspectRatio + &quot;\n&quot; +
  &quot;Player Type: &quot; + Capabilities.playerType + &quot;\n&quot; +
  &quot;Screen Color: &quot; + Capabilities.screenColor + &quot;\n&quot; +
  &quot;Screen DPI: &quot; + Capabilities.screenDPI + &quot;\n&quot; +
  &quot;Screen Resolution: &quot; + Capabilities.screenResolutionX + &quot;x&quot; +
                          Capabilities.screenResolutionY + &quot;\n&quot; +
  &quot;Touch Screen Type: &quot; + Capabilities.touchscreenType + &quot;\n&quot; +
  &quot;Version: &quot; + Capabilities.version + &quot;\n&quot; +
  &quot;Supports Gesture Events: &quot; + Multitouch.supportsGestureEvents + &quot;\n&quot; +
  &quot;Supports Touch Events: &quot; + Multitouch.supportsTouchEvents + &quot;\n&quot; +
  &quot;Input Mode: &quot; + Multitouch.inputMode + &quot;\n&quot; +
  &quot;Max Touch Points: &quot; + Multitouch.maxTouchPoints + &quot;\n&quot; +
  &quot;Supported Gestures: &quot; + Multitouch.supportedGestures;
</pre>
<p>The &#8220;\n&#8221; character at the end of each line adds line breaks for readability. The resultant string is then assigned to the Flash text field with id capabilities defined in the capabilityScroller movie. The use of an embedded movie in Flash cleans up the main timeline by hiding the scrolling animation of the text.</p>
<p>While this would have been functionally complete, we added some extra graphic niceties to the completed sample, including the following:</p>
<ol>
<li>A Text Clip Mask &#8211; A gradient Rectangle is used as a mask for the text to provide both clipping at the top and bottom of the scroll region as well as a subtle blue gradient in the center of the screen. Because Flash layer masks do not work with Dynamic Text, a little bit of Actionscript glue code was added to do a runtime mask:
<ul>
<li>color.mask = capabilityScroller;</li>
</ul>
</li>
<li>Blinking Lights &#8211; A simple animation was created on the left side by using the Flash Deco Tool with a Grid Fill using a Brick Pattern. Two different colors were chosen with the Random order option checked to create the visual appearance of blinking lights over a three frame animation.</li>
<li>Android Logo and Text &#8211; No Android application is complete without a little bit of eye candy. With the full color, high resolution display available on Android you can do a lot with the graphics look of your application. In this case vector graphics were chosen for smooth scaling to any size device.</li>
</ol>
<p>You can download the completed example by clicking on the following link:</p>
<h3><span class="download"><a href="http://proandroidflash.com/examples/FlashCapabilityReporter.fla">Flash Capability Reporter</a></span></h3>
<p>To run the example, go to Control -&gt; Test Movie in Flash Professional. This will run the application within the Flash runtime as shown previously.  Alternatively you can publish it to a device, such as a Motorola Droid or Nexus One, and inspect the properties on your phone.  Figure 4 shows the Capability Reporter running on a Google Nexus One.</p>
<div id="attachment_1793" class="wp-caption alignnone" style="width: 310px"><a href="http://steveonjava.com/wp-content/uploads/2011/02/flashcapabilityreporteronnexusone.png"><img class="size-large wp-image-1793" title="Flash Capability Reporter on Nexus One" src="http://steveonjava.com/wp-content/uploads/2011/02/flashcapabilityreporteronnexusone-300x500.png" alt="" width="300" height="500" /></a><p class="wp-caption-text">Figure 4. Flash Capability Reporter on the Nexus One</p></div>
<p>You can make use of this sample during your own development to compare device features across desktop and mobile. Feel free to add to the list of capabilities and experiment with running on different devices.</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/flash-capability-reporter-sample-and-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginning Flash at the SF Android UG</title>
		<link>http://flash.steveonjava.com/beginning-flash-sf/</link>
		<comments>http://flash.steveonjava.com/beginning-flash-sf/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 08:28:01 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[sfandroid]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1763</guid>
		<description><![CDATA[One of my coauthors on the upcoming Pro Android Flash title, Oswald Campesato, and I had the pleasure of speaking to the San Francisco Android User Group.  It was a packed audience with around 150 eager Android developers who wanted to hear how they could use Flash on their devices (they were a great audience).  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fbeginning-flash-sf%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fgck3rB%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Beginning%20Flash%20at%20the%20SF%20Android%20UG%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/beginning-flash-sf/";
		var dzone_title = "Beginning Flash at the SF Android UG";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>One of my coauthors on the upcoming <a href="http://proandroidflash.com/">Pro Android Flash</a> title, Oswald Campesato, and I had the pleasure of speaking to the <a href="http://www.sfandroid.org/events/15196582/">San Francisco Android User Group</a>.  It was a packed audience with around 150 eager Android developers who wanted to hear how they could use Flash on their devices (they were a great audience).  Here is what some of them had to say about the meetup:</p>
<ul id="rsvp-list">
<li id="rsvp_2923437"> <a id="image_2923437" href="http://www.sfandroid.org/members/2923437/"><img src="http://photos2.meetupstatic.com/photos/member/1/7/5/8/thumb_6845976.jpeg" alt="" /></a>
<div><a href="http://www.sfandroid.org/members/2923437/">Alec Dara-Abrams</a></p>
<div>Stephen and Oswald gave a very good over view of Flash development  on Android.  Like a number of other SF Android speakers, packing the  hour or so with the right level of technical detail.  Thanks to them  also for being responsive to audience questions &#8211; not so easy I&#8217;d guess  with 100+ people out there past the lighting for the video.  I&#8217;m looking  forward to following Stephen&#8217;s blog.</div>
</div>
</li>
</ul>
<ul id="rsvp-list">
<li id="rsvp_10022903"> <a id="image_10022903" href="http://www.sfandroid.org/members/10022903/"><img src="http://photos1.meetupstatic.com/photos/member/c/f/d/9/thumb_11093209.jpeg" alt="" /></a>
<div><a href="http://www.sfandroid.org/members/10022903/">Drew Dara-Abrams</a></p>
<div>Stephen and Oswald gave a good overview of the current state of  Flash on Android. Unfortunately the Adobe tools and their book won&#8217;t be  out until spring, but I appreciated all the working examples of code  that Stephen demonstrated. I&#8217;ll definitely look for their book when it  comes out.</div>
</div>
</li>
</ul>
<ul id="rsvp-list">
<li id="rsvp_13812654"> <a id="image_13812654" href="http://www.sfandroid.org/members/13812654/"><img src="http://photos2.meetupstatic.com/photos/member/a/d/2/7/thumb_11804327.jpeg" alt="" /></a>
<div><a href="http://www.sfandroid.org/members/13812654/">Francisco Carretero</a></p>
<div>Looks like an incredibly useful topic for android for giving android that push to the next level.</div>
</div>
</li>
</ul>
<p>As I promised folks in the audience, here is a copy of the full presentation.  Lots of this information was added very recently from different chapters in our book, so it is definitely the latest and greatest source of information on what you can do with Flash on mobile devices:</p>
<div style="width:425px" id="__ss_6758954"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/steveonjava/beginning-android-flash-development" title="Beginning Android Flash Development">Beginning Android Flash Development</a></strong><object id="__sse6758954" width="650" height="525"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=androidflashdevelopmentv2-110131022231-phpapp01&#038;stripped_title=beginning-android-flash-development&#038;userName=steveonjava" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6758954" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=androidflashdevelopmentv2-110131022231-phpapp01&#038;stripped_title=beginning-android-flash-development&#038;userName=steveonjava" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="650" height="525"></embed></object></div>
<p>I will be posting examples from the book on this blog over the next few weeks.  Please <a href="http://steveonjava.com/feed/">follow</a> my blog if you are interested to see the latest examples of Flash Android capabilities.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">http://www.sfandroid.org/events/15196582/</div>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/beginning-flash-sf/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/beginning-flash-sf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Flash On&#8230;&#8221; Group Kicked Off!</title>
		<link>http://flash.steveonjava.com/flash-on-group-kicked-off/</link>
		<comments>http://flash.steveonjava.com/flash-on-group-kicked-off/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 13:04:14 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[burrito]]></category>
		<category><![CDATA[flash on]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1689</guid>
		<description><![CDATA[We did a double header meeting in the North and South bay to kick off the Flash On group. It was a lot of work to coordinate and present back-to-back meetings, but it all came together. A big thanks to my co-presenter Oswald Campesator, my co-coordinators Keith Sutton and Justin Webb, and also, Nick Turner, [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fflash-on-group-kicked-off%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fbu0VCE%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5C%22Flash%20On...%5C%22%20Group%20Kicked%20Off%21%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/flash-on-group-kicked-off/";
		var dzone_title = "&#8220;Flash On&#8230;&#8221; Group Kicked Off!";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>We did a double header meeting in the North and South bay to kick off the <a href="http://www.meetup.com/flashon/">Flash On group</a>.  It was a lot of work to coordinate and present back-to-back meetings, but it all came together.  A big thanks to my co-presenter Oswald Campesator, my co-coordinators Keith Sutton and Justin Webb, and also, Nick Turner, from <a href="http://www.meetup.com/pnpmobile/">Plug and Play&#8217;s Mobile Meetup</a>, who did an outstanding job on Thursday evening.</p>
<p>Here is what some of our new members had to say:<br />
<a id="image_10692905" href="http://www.meetup.com/flashon/members/10692905/"><img class="alignleft" style="margin-right: 10px;" src="http://photos4.meetupstatic.com/photos/member/1/8/0/f/thumb_8286159.jpeg" alt="" width="60" height="80" /></a><a href="http://www.meetup.com/flashon/members/10692905/">Tony Constantinides</a><br />
“ Great meetup and very informative. Many  good issues were raised at the meeting by developers which will lead to a  followup meetup which will be hands-on hopefully. With Mobile nothing beats hands on with the fun devices! The  possibilities of Android  development with TV, tablets and mobile seem endless! ”</p>
<p><a id="image_10022903" href="http://www.meetup.com/flashon/members/10022903/"><img class="alignleft" style="margin-right: 10px;" src="http://photos1.meetupstatic.com/photos/member/c/f/d/9/thumb_11093209.jpeg" alt="" width="75" height="75" /></a><a href="http://www.meetup.com/flashon/members/10022903/">Drew Dara-Abrams</a><br />
“ A useful introductory presentation and  discussion. The mix of formal presentation and informal question and  discussion worked well. ”</p>
<p><span style="color: #ffffff;">.</span></p>
<p><a id="image_5616963" href="http://www.meetup.com/flashon/members/5616963/"><img class="alignleft" style="margin-right: 10px;" src="http://img1.meetupstatic.com/img/noPhoto_50.gif" alt="" width="50" height="50" /></a><a href="http://www.meetup.com/flashon/members/5616963/">Aaron Tong</a><br />
“ This was a great meetup! Lets have more of the same! ”</p>
<p><span style="color: #ffffff;">.</span></p>
<p>As promised, here is the presentation that Oswald and I gave (skip to page 30 for the links):</p>
<div style="width:425px" id="__ss_5767172"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/steveonjava/android-flash-development" title="Android Flash Development">Android Flash Development</a></strong><object id="__sse5767172" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=androidflashdevelopment-101113064109-phpapp02&#038;stripped_title=android-flash-development&#038;userName=steveonjava" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5767172" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=androidflashdevelopment-101113064109-phpapp02&#038;stripped_title=android-flash-development&#038;userName=steveonjava" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/steveonjava">Stephen Chin</a>.</div>
</div>
<p>If you haven&#8217;t already, sign up for the Flash On meetup group to get informed of upcoming events:<br />
<a href="http://www.meetup.com/flashon/">http://www.meetup.com/flashon/</a></p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/flash-on-group-kicked-off/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/flash-on-group-kicked-off/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash On&#8230; Meetup Premiere</title>
		<link>http://flash.steveonjava.com/flash-on-meetup-premiere/</link>
		<comments>http://flash.steveonjava.com/flash-on-meetup-premiere/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 08:29:08 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[meetup]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1658</guid>
		<description><![CDATA[I am pleased to announce the Flash On&#8230; user group that I am kicking off together with Keith Sutton, Oswald Campesato, and Justin Webb.  The focus is Flash on consumer devices from Mobile to Tablet to TV. Oswald and I will be doing the inaugural presentation on Flash mobile technologies this evening.  You can catch [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fflash-on-meetup-premiere%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Flash%20On...%20Meetup%20Premiere%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/flash-on-meetup-premiere/";
		var dzone_title = "Flash On&#8230; Meetup Premiere";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>I am pleased to announce the <a href="http://meetup.com/flashon/">Flash On&#8230; user group</a> that I am kicking off together with Keith Sutton, Oswald Campesato, and Justin Webb.  The focus is Flash on consumer devices from Mobile to Tablet to TV.</p>
<p>Oswald and I will be doing the <a href="http://www.meetup.com/flashon/calendar/15056595/">inaugural presentation</a> on Flash mobile technologies this evening.  You can catch the live stream on Adobe Connect here:</p>
<p><a href="http://experts.na3.acrobat.com/flashondevices/">http://experts.na3.acrobat.com/flashondevices/</a><br />
(Stream starts at 7PM PST!)</p>
<p>For those of you who haven&#8217;t been following the Flash Mobile headlines, there have been a lot of great announcements that make this platform worth developing for:</p>
<p><strong>Mobile</strong></p>
<ul>
<li>With the <a href="http://get.adobe.com/air/">AIR 2.5 release</a>, Android devices are fully supported</li>
<li>Apple has <a href="http://www.apple.com/pr/library/2010/09/09statement.html">relaxed their license</a> to allow Flash-based applications in the App Store</li>
<li>Similar announcements have come from other vendors such as <a href="http://pressroom.palm.com/releasedetail.cfm?ReleaseID=519951">Palm</a>, <a href="http://www.engadget.com/2010/10/25/adobe-confirms-flash-player-10-1-is-coming-to-blackberry-window/">Windows 7, and others</a></li>
</ul>
<p><strong>TV</strong></p>
<ul>
<li><a href="http://www.google.com/tv/features.html">Google TV</a> prominently features Flash support</li>
<li> Adobe also announced <a href="http://eon.businesswire.com/news/eon/20101024005146/en/Adobe-Extends-AIR-Applications-Screens">AIR support for Samsung devices</a> such as Smart TVs and Blu-ray Players</li>
</ul>
<p><strong>Tablet</strong></p>
<ul>
<li> Blackberry announced <a href="http://us.blackberry.com/newsroom/news/press/release.jsp?id=4674">Adobe AIR support</a> for their Playbook Tablet</li>
</ul>
<p>Here is an excerpt from the Adobe Max 2010 keynote that shows off the Blackberry Playbook Tablet running Flash:<br />
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/zyJVNK7aSW4?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zyJVNK7aSW4?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>When put together, Flash is well poised to become the defacto standard for building rich user experiences across different screens.</p>
<p>We will cover all this and more in our <a href="http://www.meetup.com/flashon/calendar/15056595/">presentation</a> tonight.  As usual, we will have high production values for the talk with side-by-side presenter video and slides plus a chat area to ask questions.  I hope to see you there!</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/flash-on-meetup-premiere/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/flash-on-meetup-premiere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Blog Categories&#8230;  JavaFX, Agile, and Flash</title>
		<link>http://flash.steveonjava.com/new-blog-categories-javafx-agile-and-flash/</link>
		<comments>http://flash.steveonjava.com/new-blog-categories-javafx-agile-and-flash/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 12:25:38 +0000</pubDate>
		<dc:creator>steveonjava</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[categories]]></category>

		<guid isPermaLink="false">http://steveonjava.com/?p=1610</guid>
		<description><![CDATA[For those of you following my blog, I have setup some top level categories and matching subdomains to make easier to get just the information you need. All of my blog posts will fall in one of the following three categories: JavaFX What I will be posting: Information on the latest JavaFX developments, such as [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: left;margin-right: 0.75em;; margin-top: 4px; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fflash.steveonjava.com%252Fnew-blog-categories-javafx-agile-and-flash%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbLcpR8%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22New%20Blog%20Categories...%20%20JavaFX%2C%20Agile%2C%20and%20Flash%22%20%7D);"></div>
<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://flash.steveonjava.com/new-blog-categories-javafx-agile-and-flash/";
		var dzone_title = "New Blog Categories&#8230;  JavaFX, Agile, and Flash";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>For those of you following my blog, I have setup some top level categories and matching subdomains to make easier to get just the information you need.</p>
<p>All of my blog posts will fall in one of the following three categories:</p>
<h2>JavaFX</h2>
<p>What I will be posting: Information on the latest JavaFX developments,  such as JavaFX 2.0 and alternative languages for coding JavaFX. I will  also include information on the <a href="http://visage-lang.org/">Visage project</a> including any preview  releases.</p>
<p><a href="http://javafx.steveonjava.com/"><img class="alignnone size-full wp-image-1615" title="Javafx-logo" src="http://steveonjava.com/wp-content/uploads/2010/11/Javafx-logo.png" alt="" width="196" height="91" /></a><br />
URL: <a href="http://javafx.steveonjava.com/">http://javafx.steveonjava.com/</a><br />
RSS: <a href="http://javafx.steveonjava.com/feed/">http://javafx.steveonjava.com/feed/</a></p>
<h2>Agile</h2>
<p>What I will be posting: Agile development practices with a focus on scaling Agile to large  enterprises. This includes updates on Apropos/Stratus and new  presentations on Agile Portfolio Management that I give.</p>
<p><a href="http://agile.steveonjava.com/"><img class="alignnone size-thumbnail wp-image-1612" title="Lean-Agile-Scrum-XP" src="http://steveonjava.com/wp-content/uploads/2010/11/Lean-Agile-Scrum-XP-150x150.gif" alt="" width="150" height="150" /></a><br />
URL: <a href="http://agile.steveonjava.com/">http://agile.steveonjava.com/</a><br />
RSS: <a href="http://agile.steveonjava.com/feed/">http://agile.steveonjava.com/feed/</a></p>
<h2>Flash</h2>
<p>What I will be posting: Flash and Flex development for mobile and  consumer devices. This topic will get a lot of activity over the next  couple months as I launch the new <a href="http://www.meetup.com/flashon/">Flash On&#8230;</a> user group and work on some <a href="http://proandroidflash.com/">Pro Android Flash</a> titles for Apress.</p>
<p><a href="http://flash.steveonjava.com/"><img class="alignnone size-medium wp-image-1613" title="flash_flex_air" src="http://steveonjava.com/wp-content/uploads/2010/11/flash_flex_air-300x131.jpg" alt="" width="300" height="131" /></a></p>
<p>URL: <a href="http://flash.steveonjava.com/">http://flash.steveonjava.com/</a><br />
RSS: <a href="http://flash.steveonjava.com/feed/">http://flash.steveonjava.com/feed/</a></p>
<h2>Or Everything&#8230;</h2>
<p>Of course, if you want to see all of my posts you can continue coming to <a href="http://steveonjava.com/">http://steveonjava.com/</a> and keep your existing <a href="http://steveonjava.com/feed/">RSS feed</a>.</p>
<p>I hope this makes it easier to follow the information you are interested in.  Feel free to give me feedback on the site changes in the comments.</p>
<div class="plus-one-wrap"><g:plusone href="http://flash.steveonjava.com/new-blog-categories-javafx-agile-and-flash/"></g:plusone></div><div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://flash.steveonjava.com/new-blog-categories-javafx-agile-and-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

