<?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>Nobien &#187; AIR</title>
	<atom:link href="http://blog.nobien.net/category/air/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nobien.net</link>
	<description>A nerd blog about nerdy things by ... nerdy guys?</description>
	<lastBuildDate>Mon, 19 Jul 2010 14:27:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Proof-Of-Concept: A Simple UI for Running Ant Targets Built with Adobe AIR 2.0</title>
		<link>http://blog.nobien.net/2010/06/16/proof-of-concept-a-simple-ui-for-running-ant-targets-built-with-adobe-air-2-0/</link>
		<comments>http://blog.nobien.net/2010/06/16/proof-of-concept-a-simple-ui-for-running-ant-targets-built-with-adobe-air-2-0/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 23:53:21 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=236</guid>
		<description><![CDATA[I've really been getting into Apache Ant lately. I really enjoy using it to manage various build processes when working on Flash projects. So when I found out that AIR 2.0 can invoke a native process I immediately thought that it'd be cool to learn how to use that capability to make an app that presents [...]]]></description>
			<content:encoded><![CDATA[<p>I've really been getting into <a href="http://ant.apache.org/">Apache Ant</a> lately. I really enjoy using it to manage various build processes when working on Flash projects. So when I found out that AIR 2.0 can invoke a native process I immediately thought that it'd be cool to learn how to use that capability to make an app that presents a UI for a given Ant build file and then be able to run its various targets from that UI. Thus I created a simple application that I'm calling, for the time being, rANT.</p>
<p>It took me a while to figure things out entirely but in the end I'm happy to have learned how to use <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeProcess.html">flash.desktop.NativeProcess</a>. Unfortunately, in order to realize my idea faster, I ignored the fact that the application would really depend on a user's system. For instance, I have Ant installed in such a way that its available as a system command so I can run it from the command line like any old DOS command. I know not everyone is setup like this andwould require knowing where Ant is installed on a user's system. Additionally, Ant doesn't come with a good old fashioned .exe file for Windows so I invoked Ant via C:\windows\system32\cmd.exe. Here's some pseudo code that comes straight from my application...</p>
<p><script src="http://gist.github.com/441446.js?file=PseudoAntProcess.as"></script></p>
<p>Another (little) thing was that Adobe isn't very clear about the fact that you need to package your application in a native installer in order to use the 'extendedDesktop' profile.  Took me a while to figure it out, but the good news its pretty darn easy to package a native installer from a .air file.</p>
<p>At any rate, its by no means ready for the public, but I wanted to share my work thus far to see if anyone else would be interested in an application such as this. So here's how it looks and works so far:</p>
<p>When you start the application you're presented with a screen that allows you to load a build file...</p>
<p><a href="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-01.jpg"><img class="aligncenter size-medium wp-image-237" title="rANT-Screenshot-01" src="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-01-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>Once the file is loaded it displays information about the build file and a list of its available targets...</p>
<p><a href="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-02.jpg"><img class="aligncenter size-medium wp-image-238" title="rANT-Screenshot-02" src="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-02-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>You can then select a task and run it. Here you can see the output in the TextArea component from when I ran the <em>compile-docs</em> target...</p>
<p><a href="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-03.jpg"><img class="aligncenter size-medium wp-image-239" title="rANT-Screenshot-03" src="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-03-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>Some of my targets require arguments to be passed in for them to work. For instance, my <em>compile-and-debug</em> target requires a debugLevels parameter that specifies the various debug levels (info, status, etc.) to output to the debugging console (which happens to be <a href="http://demonsterdebugger.com/">de MonsterDebugger</a>). So I created a little panel that lets me specify parameters for the target...</p>
<p><a href="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-04.jpg"><img class="aligncenter size-medium wp-image-240" title="rANT-Screenshot-04" src="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-04-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>Lastly, here you can see the output from the compile-and-debug target after running it with the passed in parameters...</p>
<p><a href="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-05.jpg"><img class="aligncenter size-medium wp-image-241" title="rANT-Screenshot-05" src="http://www.nobien.net/blog/wp-content/uploads/2010/06/rANT-Screenshot-05-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>So thats it! And if anyone thinks this would be useful to them leave some comments and/or ideas.</p>
<p>P.S. I built it with <a href="http://www.robotlegs.org/">robotlegs</a> <img src='http://www.nobien.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2010/06/16/proof-of-concept-a-simple-ui-for-running-ant-targets-built-with-adobe-air-2-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Get yourself to NYC for Flash and the City</title>
		<link>http://blog.nobien.net/2010/01/29/get-yourself-to-nyc-for-flash-and-the-city/</link>
		<comments>http://blog.nobien.net/2010/01/29/get-yourself-to-nyc-for-flash-and-the-city/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 16:32:07 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=195</guid>
		<description><![CDATA[I had the pleasure of hanging out with Elad Elrom last night. He's one of the organizers of the upcoming Flash and the City conference here in NYC. I highly recommend attending this conference for the following reasons: 1. Its in F*ckin' New York City! I know NYC isn't for everyone but there's everything you [...]]]></description>
			<content:encoded><![CDATA[<p>I had the pleasure of hanging out with <a href="http://www.elromdesign.com/blog" target="_blank">Elad</a> <a href="http://www.twitter.com/EladElrom" target="_blank">Elrom</a> last night. He's one of the organizers of the upcoming <a href="http://www.flashandthecity.com/" target="_blank">Flash and the City</a> conference here in NYC. I highly recommend attending this conference for the following reasons:</p>
<p><strong>1. Its in F*ckin' New York City!</strong><br />
I know NYC isn't for everyone but there's everything you could imagine here. On top of learning and getting inspired about Flash you'll have everything NYC has to offer at your finger tips. The organizers of the conference know this and have created what they call the "City Track". They've organized a few "field trips" throughout the city that you can tag along with. Just think of all the cool stuff you'll be able to check out, eat, and do while you're here!</p>
<p><strong>2. Its at the 3-Legged Dog Art &amp; Technology Center</strong><br />
This place is just plain cool. Its entirely artist-run and have been supporting the arts in NYC since the center was built in 2006 just three blocks south of the WTC site. Personally, it feels good to be supporting such an organization.</p>
<p><strong>3. The ridiculously good list of attending speakers</strong><br />
ZOMG! Srsly u guys! There hasn't been a large Flash conference in NYC...since...I don't know...2004? And that one pretty much sucked. But just look at the <a href="http://blog.flashandthecity.com/speakers/" target="_blank">list of speakers</a>! If you don't recognize the names, just trust me on this. They're are some really sharp people speaking about some great developments in the industry.</p>
<p><strong>4. The Price is Right</strong><br />
Tickets right now are $299 (but lets just be real and say $300). In comparison to other conferences, this is CHEAP, especially for NYC standards.  And if you keep your ear in the community (Twitter, blogs, etc), you might even be able to find a coupon code!</p>
<p>I'd say these are my main reasons for anyone to attend the conference right now. I'm sure I'll come up with more and if I do, I'll update this post. Naturally, I plan on attending seeing as I live here and I hope to see you along with my other friends and colleagues here as well! It's gonna be a blast.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2010/01/29/get-yourself-to-nyc-for-flash-and-the-city/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Media Framework (Sprint 8) Bug in NetStreamPlayTrait and NetStreamTimeTrait?</title>
		<link>http://blog.nobien.net/2009/12/28/open-source-media-framework-sprint-8-bug-in-netstreamplaytrait-and-netstreamtimetrait/</link>
		<comments>http://blog.nobien.net/2009/12/28/open-source-media-framework-sprint-8-bug-in-netstreamplaytrait-and-netstreamtimetrait/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 22:01:45 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=184</guid>
		<description><![CDATA[Over the last two months or so I've been keeping my eyes on Adobe's Open Source Media Framework (OSMF) project. I started fiddling around with Sprint 7, seeing if I could build a progressive video player component on top of it. My first impression was that the project was still in its infancy solely based [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last two months or so I've been keeping my eyes on Adobe's <a href="http://www.opensourcemediaframework.com/">Open Source Media Framework</a> (OSMF) project. I started fiddling around with Sprint 7, seeing if I could build a progressive video player component on top of it. My first impression was that the project was still in its infancy solely based on the naming conventions of the framework's events. It just didn't feel intuitive. Additionally, there seemed to be some bugs surrounding the seeking of progressive videos. Alas, the development team has made some major improvements in Sprint 8 with regards to both of these items.</p>
<p>Upon downloading Sprint 8 I was immediately happy with the renaming of the framework event classes. They make much more sense now. Seeking progressive videos seemed to have improved as well, but I was still experiencing some buggy behavior when continuously scrubbing a progressive video.</p>
<p><span id="more-184"></span></p>
<p>My conclusion is that there is a bug in the NetStreamPlayTrait class and NetStreamTimeTrait classes. Basically, the NetStream.Play.Stop status code is sometimes dispatched when it shouldn't be. For instance, when I continuously scrub a video using the seek() method, there are times at which the aforementioned status code is dispatched when the playhead isn't at the very end of the video. More specifically, when I scrub to the end of the video for the first time the status code is dispatched and caught by the mentioned framework classes. Thus, this causes two things to happen.</p>
<p>First, the NetStreamTimeTrait class dispatches a TimeEvent.DURATION_REACHED event whenever this status code is received. Thus, the MediaPlayer redispatches this event at times when the playhead is not at the end, causing registered listeners to think the playback has completed when it hasn't. This was very strange, so I put some trace statements in the onNetStatus event handler of this class to check the currentTime and duration properties. When this event was dispatched during continuous scrubbing these values were never the same and often not close to being equal at all. Even when the video reached the duration during playback, these values weren't always equal. In one case the currentTime property was larger than the duration by one decimal place. I'm guessing this is a discrepancy between the NetStream.time property and the value of the duration provided by the meta data. At any rate, I thought it might be good to add a condition into the status handler to check if the currentTime was equal to the duration, thus verifying the playhead has in fact truly reached the end of the video. First, I edited the currentTime setter to look like this:</p>
<pre class="actionscript">override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> currentTime<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">min</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0066CC;">duration</span>, <span style="color: #0066CC;">netStream</span>.<span style="color: #0066CC;">time</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre>
<p>This ensures that the currentTime is never larger than the duration and avoids the bug I described earlier. Next I added a condition into the onNetStatus handler of the NetStream.Play.Stop code. It now looks like this:</p>
<pre class="actionscript"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onNetStatus<span style="color: #66cc66;">&#40;</span>event:NetStatusEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">info</span>.<span style="color: #006600;">code</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">case</span> NetStreamCodes.<span style="color: #006600;">NETSTREAM_PLAY_STOP</span>:
            <span style="color: #808080; font-style: italic;">// For progressive,	NetStream.Play.Stop means the duration</span>
            <span style="color: #808080; font-style: italic;">// was reached.  But this isn't fired for streaming.</span>
            <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>NetStreamUtils.<span style="color: #006600;">isRTMPResource</span><span style="color: #66cc66;">&#40;</span>resource<span style="color: #66cc66;">&#41;</span> == <span style="color: #000000; font-weight: bold;">false</span> &amp;&amp;
                currentTime == <span style="color: #0066CC;">duration</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#123;</span>
                processDurationReached<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>
            <span style="color: #b1b100;">break</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>Notice the additional condition to check if the currentTime is equal to the duration. This ensures that the TimeEvent.DURATION_REACHED event isn't dispatched until the playhead time has reached the duration. These two fixes took care of the TimeEvent.DURATION_REACHED event from being dispatched when it shouldn't be, however I was still experiencing a problem when I tried to resume playback of the progressive video if I happened to scrub it to the end.</p>
<p>Just as in the NetStreamTimeTrait class, the NetStreamPlayTrait class handles the NetStream.Play.Stop status code. As mentioned, the status code tends to get dispatched when it shouldn't, especially when continuously scrubbing and you happen to scrub to the end of the video. So, in the NetStreamPlayTrait class is that when this status code is dispatched, the following code is executed:</p>
<pre class="actionscript"><span style="color: #b1b100;">case</span> NetStreamCodes.<span style="color: #006600;">NETSTREAM_PLAY_STOP</span>:
    <span style="color: #808080; font-style: italic;">// Fired when streaming connections buffer, but also when</span>
    <span style="color: #808080; font-style: italic;">// progressive connections finish.  In the latter case, we</span>
    <span style="color: #808080; font-style: italic;">// halt playback.</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>urlResource != <span style="color: #000000; font-weight: bold;">null</span> &amp;&amp;
        NetStreamUtils.<span style="color: #006600;">isRTMPStream</span><span style="color: #66cc66;">&#40;</span>urlResource.<span style="color: #0066CC;">url</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #808080; font-style: italic;">// Explicitly stop to prevent the stream from restarting on seek();</span>
        streamStarted = <span style="color: #000000; font-weight: bold;">false</span>;
        <span style="color: #0066CC;">stop</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">break</span>;</pre>
<p>So for progressive videos, the streamStarted property is set to false and the video is stopped. Confused, I followed the stop method around and determined that is just pauses the NetStream object. Then I looked around for where the streamStarted property is used and found it being used within the processPlayStateChange() method. From what I can tell it's used to denote if stream/video data exists in the NetStream object. Why would this be set to false for a progressive video's NetStream.Play.Stop status? Is not the video data still in memory? So I commented out that line and the code now looks like this:</p>
<pre class="actionscript"><span style="color: #b1b100;">case</span> NetStreamCodes.<span style="color: #006600;">NETSTREAM_PLAY_STOP</span>:
    <span style="color: #808080; font-style: italic;">// Fired when streaming connections buffer, but also when</span>
    <span style="color: #808080; font-style: italic;">// progressive connections finish.  In the latter case, we</span>
    <span style="color: #808080; font-style: italic;">// halt playback.</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>urlResource != <span style="color: #000000; font-weight: bold;">null</span> &amp;&amp;
        NetStreamUtils.<span style="color: #006600;">isRTMPStream</span><span style="color: #66cc66;">&#40;</span>urlResource.<span style="color: #0066CC;">url</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #808080; font-style: italic;">// Explicitly stop to prevent the stream from restarting on seek();</span>
        <span style="color: #808080; font-style: italic;">//streamStarted = false;</span>
        <span style="color: #0066CC;">stop</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">break</span>;</pre>
<p>Upon testing my video player my continuous scrubbing seems to behave properly! Woohoo! Now let me just say that I have not tested this extensively and I know that OSMF is still in development. I could very well have created a new bug by doing this, but at least things are behaving the way I would assume they would now.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2009/12/28/open-source-media-framework-sprint-8-bug-in-netstreamplaytrait-and-netstreamtimetrait/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New Flash Community Developments: Robotlegs and Signals</title>
		<link>http://blog.nobien.net/2009/12/14/new-flash-community-developments-robotlegs-and-signals/</link>
		<comments>http://blog.nobien.net/2009/12/14/new-flash-community-developments-robotlegs-and-signals/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 21:19:10 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=178</guid>
		<description><![CDATA[I've come to realize that I'm always a bit hesitant to change. I was late to get a cell phone, late to join Facebook, late to join Twitter, and often late to look into developments within the Flash community. Lately I've been trying to change how often I tune into Flash community developments. As of [...]]]></description>
			<content:encoded><![CDATA[<p>I've come to realize that I'm always a bit hesitant to change. I was late to get a cell phone, late to join Facebook, late to join Twitter, and often late to look into developments within the Flash community. Lately I've been trying to change how often I tune into Flash community developments. As of late I've stumbled across two projects that struck my fancy: <a href="http://www.robotlegs.org/">Robotlegs</a> and <a href="http://github.com/robertpenner/as3-signals">Signals</a>. Robotlegs is a lightweight MVCS architecture that is very focused on dependency injection. Signals is the result of Robert Penner's frustration with the Flash Player's native event system. Thus he has created an event system inspired by C# events and signals/aslots in Qt. Both looked like interesting projects so I decided to dive into them further. I'll start with robotlegs.</p>
<p><span id="more-178"></span></p>
<p>Having some experience with PureMVC and even having some pleasant success with it, I was quite intrigued by some claims that robotlegs is "<a href="http://jessewarden.com/2009/10/how-to-use-robotlegs-on-top-of-gaia-part-1-of-3-quickstart.html">PureMVC done right</a>". Hmm...At any rate, I can't help but be intrigued by a claim such as this and I always enjoy looking reading about developers' often unwavering opinions about how an MVC pattern should be implemented. So after reading the docs, development forums and checking out the examples, I feel that robotlegs is a great concept and has fulfilled its development philosophy very well. It seems to me that its primary focus has been the use of dependency injection. This allows you to keep the layers of your application nicely decoupled. In my early research, I was a bit annoyed by the fact that the injection module, <a href="http://github.com/tschneidereit/SwiftSuspenders">SwiftSuspenders</a>, was only compatible with the mxmlc compiler. However, the latest version includes the ability to use XML to configure the injection points so I can now use it with the Flash IDE. Yes, I, <em>and a lot of other people</em>, still use the Flash IDE to compile applications.</p>
<p>My only complaint about Robotlegs is very subjective. And let me preface this with the fact that I'm not a classically trained developer (I have a degree in design, not computer science). But Robotlegs was rather difficult to get my head partially wrapped around. More specifically, <a href="http://en.wikipedia.org/wiki/Dependency_injection">dependency injection</a> was, and still is, rather difficult for me to understand. I understand the point of it, but how its implemented in Robotlegs still seems like magic to me. And because I don't understand the dependency injection all that well, its hard for me to feel really comfortable using the framework to develop anything. In comparison, what I really like about <a href="http://puremvc.org/">PureMVC</a> was that it was pretty easy to learn and the core concepts are also easy to understand (at least to me). Regardless, this is not to say that Robotlegs is any better or worse than PureMVC.</p>
<p>Unlike my apprehensiveness for Robotlegs, I am really excited about Robert Penner's <a href="http://github.com/robertpenner/as3-signals">Signals</a> project. I stumbled across this project while researching Robotlegs. I didn't quite understand it at first, but after checking out the source and giving a go I became instantly hooked on the idea and hope I can integrate it into my future projects. Basically what Penner has done is create an event/notification system that can pass around strongly typed objects to listeners instead of the native/traditional <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/Event.html">Event</a> object. Signals are, to put it simply, an object that represents an event. Thus a signal object has its own API for registering and unregistering listeners. Signals also gives you the ability to define the types of signals an object should possess in your interfaces. This fulfills one of my biggest wishes for interfaces: a way to define the types of events an object should have to dispatch. As of now the project seems to still be in development with Penner experimenting how to make working with native events a bit easier. I highly recommend looking into his work, but don't expect much as he's apparently in Thailand until the beginning of January.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2009/12/14/new-flash-community-developments-robotlegs-and-signals/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>AIR:CMR &#8211; Free Books? Academia?</title>
		<link>http://blog.nobien.net/2009/10/08/aircmr-free-books-academia/</link>
		<comments>http://blog.nobien.net/2009/10/08/aircmr-free-books-academia/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 12:25:43 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=118</guid>
		<description><![CDATA[I just received a couple copies of the Chinese translation of Adobe AIR -Create Modify Reuse. It's pretty exciting to see your book translated into other languages, even if you can't read them. I'd like to donate them to a High School or College. Would anyone in academia like a Chinese or Spanish translated copy [...]]]></description>
			<content:encoded><![CDATA[<p>I just received a couple copies of the Chinese translation of <a href="http://www.amazon.com/Adobe-AIR-Create-Modify-Programmer/dp/0470182075/ref=sr_1_4?ie=UTF8&s=books&qid=1255004549&sr=8-4">Adobe AIR -Create Modify Reuse</a>. It's pretty exciting to see your book translated into other languages, even if you can't read them. </p>
<p>I'd like to donate them to a High School or College. Would anyone in academia like a <strong>Chinese </strong><em>or <strong>Spanish </strong></em>translated copy of our <a href="http://www.amazon.com/Adobe-AIR-Create-Modify-Programmer/dp/0470182075/ref=sr_1_4?ie=UTF8&s=books&qid=1255004549&sr=8-4">book</a>? I'd prefer to hear from people who instruct New Media or IT courses, or is involved with a school's library. </p>
<p>I will only ship these to a school address. No home addresses. No student dorms and housing. Please email me at aircmr "@" nobien.net.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2009/10/08/aircmr-free-books-academia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIR Create-Modify-Reuse</title>
		<link>http://blog.nobien.net/2008/05/26/air-create-modify-reuse/</link>
		<comments>http://blog.nobien.net/2008/05/26/air-create-modify-reuse/#comments</comments>
		<pubDate>Mon, 26 May 2008 23:45:40 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.nobien.net/?p=67</guid>
		<description><![CDATA[Back on the 25th of April, I posted a little something about us (Matt &#038; me ... and Toddly Anderson) releasing a certain book entitled Adobe AIR, Create-Modify-Reuse, published by Wiley &#038; Sons. Well, at that time, MXNA was down, so only a few regular viewers saw it. So I figured I'd just throw it [...]]]></description>
			<content:encoded><![CDATA[<p>Back on the 25th of April, I posted a little something about us (Matt & me ... and <a href="http://www.custardbelly.com/blog/" target="new">Toddly Anderson</a>) releasing a certain book entitled <a href="http://www.amazon.com/Adobe-AIR-Create-Modify-Programmer/dp/0470182075/002-0497366-7052004?SubscriptionId=1YNZ339ZCHHAKYFSY702" target="new">Adobe AIR, Create-Modify-Reuse</a>, published by Wiley & Sons.</p>
<p>Well, at that time, MXNA was down, so only a few regular viewers saw it. So I figured I'd just throw it out there again that our book came out. It's a book featuring eleven applications that you can use "out of the box" and hopefully use to create your own rendition using Adobe Flex 3 and AIR. If you do create your own app based on ours, or found the book useful in guiding your own creation, we encourage you to tell us about it.</p>
<p>Also, you should pick up the <a href="http://www.amazon.com/gp/product/0596529856/ref=s9subs_c2_img1-2871_p?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=17QQMBQ720TS6T3W2QPM&pf_rd_t=101&pf_rd_p=278240301&pf_rd_i=507846">Flex 3 Cookbook</a> by friends Josh Noble and Toddly Anderson (again). Another book (that will be awesome) is <a href="http://www.amazon.com/Adobe-AIR-Action-Joseph-Lott/dp/1933988487/ref=sr_1_6?ie=UTF8&s=books&qid=1211845320&sr=1-6" target="new" >Adobe AIR in Action</a> and was written by my old co-workers Joey Lott, Katheryn Rotondo, Sam Ahn and Ash Atkins (also the tech-editor of our book).</p>
<p>So now that you're about $80 in the hole, I'll let you be.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nobien.net/2008/05/26/air-create-modify-reuse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
