<?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>Destroy Today &#187; AIR</title>
	<atom:link href="http://destroytoday.com/blog/tag/air/feed/" rel="self" type="application/rss+xml" />
	<link>http://destroytoday.com/blog</link>
	<description>Jonnie is loving SF.</description>
	<lastBuildDate>Fri, 27 Aug 2010 17:03:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>DestroyTwitter 2.1: Return of the Themes</title>
		<link>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-return-of-the-themes/</link>
		<comments>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-return-of-the-themes/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 05:19:00 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1978</guid>
		<description><![CDATA[I&#8217;ve been sitting on this update for a few weeks now, but the recent move to San Francisco has kidnapped my spare-time. Now that I&#8217;m almost settled, I was able to take advantage of the weekend to prepare for this launch. The most anticipated feature in 2.1 is themes. This was a popular feature in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://destroytwitter.com" target="_blank"><img class="alignnone size-full wp-image-1979" title="dt2_themes" src="http://destroytoday.com/blog/wp-content/uploads/2010/08/dt2_themes.jpg" alt="" width="645" height="340" /></a></p>
<p>I&#8217;ve been sitting on this update for a few weeks now, but the recent move to San Francisco has kidnapped my spare-time. Now that I&#8217;m almost settled, I was able to take advantage of the weekend to prepare for this launch. The most anticipated feature in 2.1 is themes. This was a popular feature in 1.x that didn&#8217;t make it into the initial 2.0 release due to time constraints. Now it&#8217;s back, but greatly improved, using CSS instead of XML. Keep in mind, it&#8217;s not fully functional CSS—it&#8217;s AS3-supported, so you can only modify specific properties. Even so, the number of elements you can customize has been multiplied fourfold.</p>
<p>With the reintroduction of themes, I&#8217;ve decided to make a few other changes. First of all, the Theme Builder is no more. Since CSS is much more familiar to most and there are dozens more parameters, it doesn&#8217;t make sense to maintain it. Also, it allowed anyone and their grandma to upload a theme to the depot. This was great for usability, but unfortunately, it flooded the site with thousands of themes that went unused. At the moment, 2.1 is bundled with a handful of themes and there&#8217;s no directory on the site. I did set up a <a href="http://support.destroytwitter.com/discussions/suggestions/61-theme-directory" target="_blank">section on the support site</a> to upload themes and I&#8217;ll showcase the standouts on the website.</p>
<p>Regarding the thousands of previously created themes from 1.x, you can still install them in 2.1, but you might need to tweak certain elements that didn&#8217;t exist in 1.x. In Preferences, click &#8216;Install theme&#8230;&#8217; and select the .dtwt file. It&#8217;ll automatically convert it to a CSS file in the themes folder, where you can open it in your favorite text editor. From there, you can change the theme, save it, then click &#8216;Reload current theme&#8217; to see the updated look. If you&#8217;re working on a certain section of the app and don&#8217;t want to go back to Preferences to click the reload link each time, you can use the hotkey Command+Option+Shift+R on Mac or Control+Option+Shift+R on PC.</p>
<p>If you&#8217;re all set and ready to go, either download 2.1 from the <a href="http://destroytwitter.com/" target="_blank">DestroyTwitter website</a> or simply update from the app if you have it installed already.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-return-of-the-themes/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>AIR 2.0 and Flash Player 10.1 are live</title>
		<link>http://destroytoday.com/blog/2010/06/air-2-0-and-flash-player-10-1-are-live/</link>
		<comments>http://destroytoday.com/blog/2010/06/air-2-0-and-flash-player-10-1-are-live/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 20:10:53 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1917</guid>
		<description><![CDATA[It&#8217;s a big day in Adobeland—both AIR 2.0 and Flash Player 10.1 make their debuts. Lucky for me, they arrive just in time for the soon-to-be-released DestroyTwitter 2.0, which relies on a few fancy features in the new runtime. I&#8217;m planning for a June 21st launch, so mark your calendars and make sure you install [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://get.adobe.com/air/" target="_blank"><img class="alignnone size-full wp-image-1934" title="air2" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/air21.jpg" alt="air2" width="645" height="334" /></a></p>
<p>It&#8217;s a big day in Adobeland—both <a href="http://get.adobe.com/air/" target="_blank">AIR 2.0</a> and <a href="http://get.adobe.com/flashplayer" target="_blank">Flash Player 10.1</a> make their debuts. Lucky for me, they arrive just in time for the soon-to-be-released DestroyTwitter 2.0, which relies on a few fancy features in the new runtime. I&#8217;m planning for a June 21st launch, so mark your calendars and make sure you install AIR.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/06/air-2-0-and-flash-player-10-1-are-live/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Displaying a context menu via hotkey crashes AIR</title>
		<link>http://destroytoday.com/blog/2010/03/displaying-a-context-menu-via-hotkey-crashes-air/</link>
		<comments>http://destroytoday.com/blog/2010/03/displaying-a-context-menu-via-hotkey-crashes-air/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 16:05:20 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1786</guid>
		<description><![CDATA[I love hotkeys and I try to build them into all of my apps. They greatly improve the desktop app experience, especially for the anti-mouse crowd. I recently thought of a handy way of using a hotkey—display a context menu upon pressing the spacebar with an item selected. This feature would be so sweet&#8230; if [...]]]></description>
			<content:encoded><![CDATA[<p>I love hotkeys and I try to build them into all of my apps. They greatly improve the desktop app experience, especially for the anti-mouse crowd. I recently thought of a handy way of using a hotkey—display a context menu upon pressing the spacebar with an item selected. This feature would be so sweet&#8230; if it worked.</p>
<p>I quickly typed up the implementation and tried it. Expecting to see a context menu, I was dumbfounded to see ADL crash without a single RTE stack trace. Here&#8217;s an example of the code that causes the crash every time:</p>
<p><script src="http://gist.github.com/346817.js?file=ContextMenuHotkeyBug.as"></script></p>
<p>At first, I thought it might be an ADL issue, so I compiled the AIR file, installed it, and the insanity continued. Instead of crashing instantly as the app did running on ADL, it first displayed this alert:</p>
<p><img class="alignnone size-full wp-image-1787" title="contextmenuhotkeybug" src="http://destroytoday.com/blog/wp-content/uploads/2010/03/contextmenuhotkeybug1.gif" alt="contextmenuhotkeybug" width="645" height="212" /></p>
<p>Let me known, I&#8217;m running the most recent build of AIR. Upon clicking &#8216;OK&#8217;, the app quits. I can run the app all day and a soon as I trigger the context menu to display, this alert appears. I checked the Console and found this:</p>
<p><script src="http://gist.github.com/346817.js?file=ContextMenuHotkeyBug.log"></script></p>
<p>I also added the full crash reports in the <a href="http://gist.github.com/346817" target="_blank">Gist</a>. I&#8217;m not sure what it all means, but I filed the bug with Adobe and can only hope it&#8217;s fixed sooner than later—this feature would be too cool.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/03/displaying-a-context-menu-via-hotkey-crashes-air/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dwarf adds unit types and tool position to its arsenal</title>
		<link>http://destroytoday.com/blog/2010/02/dwarf-adds-unit-types-and-tool-position-to-its-arsenal/</link>
		<comments>http://destroytoday.com/blog/2010/02/dwarf-adds-unit-types-and-tool-position-to-its-arsenal/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 19:03:00 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Dwarf]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1739</guid>
		<description><![CDATA[I&#8217;ve been working on Dwarf little by little and finally built one of the most requested features—unit types. The five available unit types are pixels, picas, centimeters, inches, and percent. Inches have dotted lines for quarter inches and percent always displays 100% on the ruler, but scales its grid to show ten columns and ten [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/destroytoday/Dwarf/downloads"><img class="alignnone size-full wp-image-1740" title="Dwarf unit types" src="http://destroytoday.com/blog/wp-content/uploads/2010/02/dwarf_units1.gif" alt="Dwarf unit types" width="645" height="430" /></a></p>
<p>I&#8217;ve been working on <a href="http://github.com/destroytoday/Dwarf/downloads" target="_blank">Dwarf</a> little by little and finally built one of the most requested features—unit types. The five available unit types are pixels, picas, centimeters, inches, and percent. Inches have dotted lines for quarter inches and percent always displays 100% on the ruler, but scales its grid to show ten columns and ten rows. At the moment, the units are based on a 72 dpi screen, but I&#8217;ll be adding an option to change the dpi, since most screens aren&#8217;t 72. If anyone has suggestions for that other than using a list, let me know.</p>
<p><a href="http://github.com/destroytoday/Dwarf/downloads"><img class="alignnone size-full wp-image-1741" title="dwarf_units_toolbar" src="http://destroytoday.com/blog/wp-content/uploads/2010/02/dwarf_units_toolbar1.jpg" alt="dwarf_units_toolbar" width="645" height="100" /></a></p>
<p>The unit type is selected by clicking the menu at the right of the toolbar. It prompts a context menu with the options. Dwarf remembers which unit type you used last, so it&#8217;ll remain the same next time you startup. Along with unit types, I included positions and dimensions in the toolbar. This is mostly for the position, but I thought dimensions look nice up there too. At the moment, the position is in relation to the main screen, but the next build improves multi-screen support. You will be able to specify which screen to relate the position to. This also comes in handy for moving guides from screen to screen.</p>
<p>If you&#8217;re already a Dwarf user, start up for the update, or <a href="http://github.com/destroytoday/Dwarf/downloads" target="_blank">download it</a> from GitHub. And, as always, let me know what you think in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/02/dwarf-adds-unit-types-and-tool-position-to-its-arsenal/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Intro to Dwarf</title>
		<link>http://destroytoday.com/blog/2010/02/intro-to-dwarf/</link>
		<comments>http://destroytoday.com/blog/2010/02/intro-to-dwarf/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 18:12:43 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Dwarf]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1722</guid>
		<description><![CDATA[I&#8217;ve been working on Dwarf over the past few days and decided it&#8217;s time to give a little introduction on its key features. Be sure to view fullscreen with no scaling to see it at 100%. The prerelease of Dwarf available to download on GitHub and the source code is hosted there as well. I&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="645" height="363" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9159573&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=007998&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="645" height="363" src="http://vimeo.com/moogaloop.swf?clip_id=9159573&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=007998&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I&#8217;ve been working on Dwarf over the past few days and decided it&#8217;s time to give a little introduction on its key features. Be sure to view fullscreen with no scaling to see it at 100%. The prerelease of Dwarf available to <a href="http://github.com/destroytoday/Dwarf/downloads" target="_blank">download</a> on GitHub and the <a href="http://github.com/destroytoday/Dwarf" target="_blank">source code</a> is hosted there as well. I&#8217;ll be rolling out the official 1.0 build pretty soon—I just need to add a few more key features.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/02/intro-to-dwarf/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Dwarf gets new life and is now open source</title>
		<link>http://destroytoday.com/blog/2010/01/dwarf-gets-new-life-and-is-now-open-source/</link>
		<comments>http://destroytoday.com/blog/2010/01/dwarf-gets-new-life-and-is-now-open-source/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:18:30 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Dwarf]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1716</guid>
		<description><![CDATA[A recent AIR prerelease drop broke Dwarf. I&#8217;m actually not surprised, since it uses a pretty ghetto hack—displaying a transparent window fullscreen and using &#8216;virtual&#8217; windows. Because Dwarf is such an integral part of my everyday workflow and it&#8217;s such a small app, I figured I could easily rewrite it within a day or two. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1717" title="Dwarf on Git" src="http://destroytoday.com/blog/wp-content/uploads/2010/01/dwarf_on_git1.gif" alt="Dwarf on Git" width="645" height="430" /></p>
<p>A recent AIR prerelease drop broke Dwarf. I&#8217;m actually not surprised, since it uses a pretty ghetto hack—displaying a transparent window fullscreen and using &#8216;virtual&#8217; windows. Because Dwarf is such an integral part of my everyday workflow and it&#8217;s such a small app, I figured I could easily rewrite it within a day or two. I&#8217;ve been on such a code-sharing high, that I started <a href="http://github.com/destroytoday/Dwarf" target="_blank">a new Git repository for it</a> where you can find my work in progress. So far, I have a single ruler working with a semi-functional Mac toolbar. Everything should be complete either tonight or tomorrow, so keep an eye out.</p>
<p>On a legal note, the source code is provided under the <a href="http://github.com/destroytoday/Dwarf/blob/master/README" target="_blank">GNU General Public License (GPL)</a>, so you can reuse and modify the code all you want as long as it&#8217;s still free. If you&#8217;d like to use it for commercial purposes, let&#8217;s talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/01/dwarf-gets-new-life-and-is-now-open-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing TwitterAspirin: an AS3 Twitter API painkiller</title>
		<link>http://destroytoday.com/blog/2010/01/introducing-twitteraspirin-an-as3-twitter-api-painkiller/</link>
		<comments>http://destroytoday.com/blog/2010/01/introducing-twitteraspirin-an-as3-twitter-api-painkiller/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:01:58 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[DestroyTwitter]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1704</guid>
		<description><![CDATA[A couple months ago, I started working on a Twitter component for my current project at Adobe. I went into this knowing I&#8217;d have to finally face the beast&#8230; OAuth. Just about every well-known Twitter client out there uses Basic Auth—and for a reason. It&#8217;s easy, what the user expects, and gives your app more [...]]]></description>
			<content:encoded><![CDATA[<p>A couple months ago, I started working on a Twitter component for my current project at Adobe. I went into this knowing I&#8217;d have to finally face the beast&#8230; OAuth. Just about every well-known Twitter client out there uses Basic Auth—and for a reason. It&#8217;s easy, what the user expects, and gives your app more credibility—there&#8217;s no requirement to leave to authenticate through the browser like with OAuth.</p>
<p>About five or six months ago, Twitter decided to enforce the transition. From then on, any application that uses the API must use OAuth in order to see &#8220;via [your app]&#8221; on tweets published with it—otherwise, it would display &#8220;via API.&#8221; Since &#8220;via&#8221; is where apps get probably 90% of their referrals, this was a big deal. Luckily for me, <a href="http://destroytwitter.com" target="_blank">DestroyTwitter</a> existed before that time and Twitter decided not to push the change on the veteran apps. Recently, however, the bad news spread that Basic Auth would be deprecated in June. This means every Twitter app must transition to the pain that is OAuth.</p>
<p>After developing the <a href="http://destroytoday.com/blog/2009/10/adobe-max-companion-launched/" target="_blank">MAX Companion</a> this past fall and now the more generalized version, I found myself rewriting the Twitter component each time. After a while, the Twitter API code I wrote for DestroyTwitter began to merge with the actual implementation, so it was no longer a standalone library that could easily be used by other projects. These past few months, I&#8217;ve been learning a great deal about framework architecture and design patterns. It has led me to realize I need to start fresh.</p>
<p>With all that being said, I&#8217;d like introduce a library I started working on two days ago. I call it <a href="http://github.com/destroytoday/TwitterAspirin" target="_blank">TwitterAspirin</a>. It&#8217;s an AS3 Twitter API library that eases the pain, providing developers with a very powerful tool for communicating with Twitter. Though it&#8217;s still a newborn at the moment, I see potential already. The library is built on <a href="http://robotlegs.org/" target="_blank">RobotLegs</a> and uses <a href="http://github.com/robertpenner/as3-signals" target="_blank">AS3 Signals</a> instead of events. It&#8217;s hosted on <a href="http://github.com" target="_blank">GitHub</a>, so the source code will always be available to the public. And, after last night&#8217;s commit, its OAuth functionality is complete. Here&#8217;s how to use it:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> com.destroytoday.twitteraspirin.Twitter;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Test extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #009900;">// set application consumer key and secret</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> twitter<span style="color: #000000; font-weight: bold;">:</span>Twitter = <span style="color: #0033ff; font-weight: bold;">new</span> Twitter<span style="color: #000000;">&#40;</span>consumerKey, consumerSecret<span style="color: #000000;">&#41;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> Test<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">// add signal listeners</span>
			twitter.oauth.requestTokenSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>requestTokenHandler<span style="color: #000000;">&#41;</span>;
			twitter.oauth.accessTokenSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>accessTokenHandler<span style="color: #000000;">&#41;</span>;
			twitter.oauth.verifyAccessTokenSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>verifyAccessTokenHandler<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">// click the 'Authorize' button to get the request token</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> authorizeClickHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			twitter.oauth.getRequestToken<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">// upon receiving the request token, open Twitter in the browser to authorize</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> requestTokenHandler<span style="color: #000000;">&#40;</span>oauth<span style="color: #000000; font-weight: bold;">:</span>OAuth, token<span style="color: #000000; font-weight: bold;">:</span>OAuthToken<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">navigateToURL</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLRequest</span><span style="color: #000000;">&#40;</span>oauth.getAuthorizeURL<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">// return with the provided pin and click the 'Activate' button to get the access token</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> activateClickHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			twitter.oauth.getAccessToken<span style="color: #000000;">&#40;</span>pin<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">// upon receiving the access token, verify it</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> accessTokenHandler<span style="color: #000000;">&#40;</span>oauth<span style="color: #000000; font-weight: bold;">:</span>OAuth, token<span style="color: #000000; font-weight: bold;">:</span>OAuthToken<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			oauth.verifyAccessToken<span style="color: #000000;">&#40;</span>token<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">// done</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> verifyAccessTokenHandler<span style="color: #000000;">&#40;</span>oauth<span style="color: #000000; font-weight: bold;">:</span>OAuth, token<span style="color: #000000; font-weight: bold;">:</span>OAuthToken<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>As you can see, it&#8217;s extremely easy to use. Not only that, it provides great flexibility. Many libraries are simple to implement, but don&#8217;t allow the developer access to certain aspects of the process. With TwitterAspirin, each method returns the loader involved with the operation, giving developers the ability to listen for errors, cancel the operation, or attain the raw API data. The library also uses loader pools to recycle instances, so you can submit a tweet and, while it&#8217;s loading, submit another—you don&#8217;t have to wait for the first operation to finish. Then, once the operation is complete, the loader is disposed and returned to the pool, which optimizes performance and memory usage.</p>
<p>I&#8217;m really excited to see where TwitterAspirin goes and I have nothing but great expectations. Be sure to follow along with development and fork whenever you like.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/01/introducing-twitteraspirin-an-as3-twitter-api-painkiller/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Introducing the XMLLoader class</title>
		<link>http://destroytoday.com/blog/2010/01/introducing-the-xmlloader-class/</link>
		<comments>http://destroytoday.com/blog/2010/01/introducing-the-xmlloader-class/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 14:43:45 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1700</guid>
		<description><![CDATA[I started the XMLLoader class a few months back, but didn&#8217;t post right away because it needed a lot of cleanup. Not cleanup in the sense of performance improvement or refactoring—it simply used my old programming style, full of dollar signs and underscores. If anyone remembers seeing my code in that form, I deeply apologize [...]]]></description>
			<content:encoded><![CDATA[<p>I started the <a href="http://github.com/destroytoday/DestroyFramework/blob/master/src/com/destroytoday/net/XMLLoader.as" target="_blank">XMLLoader</a> class a few months back, but didn&#8217;t post right away because it needed a lot of cleanup. Not cleanup in the sense of performance improvement or refactoring—it simply used my old programming style, full of dollar signs and underscores. If anyone remembers seeing my code in that form, I deeply apologize for the pain it must have caused your eyes.</p>
<p>So why an <em>XMLLoader</em> class?—because 99% of the data I load with AS3/AIR is in XML format. I stay far from JSON when possible because in AS3 it&#8217;s slower than a slug on its day off. XML is native and uses E4X, which lets developers navigate its information just like you would an AS3 tree. I load XML so often, I found myself copying and pasting the same code each time I&#8217;d need it—this is the clearest indicator that a class must be written.</p>
<p>Parsing String data to XML poses an issue that many don&#8217;t know about. I only discovered it because of the Twitter API. The API is so janked, it sometimes returns the HTML error page instead of the XML response. It wouldn&#8217;t be so bad if it weren&#8217;t for an image tag in the HTML that isn&#8217;t closed. This immediately throws an &#8220;XML parser failure: element is malformed&#8221; error. Using try/catch is the only way to avoid this. That&#8217;s why I wrote it into <em>XMLLoader</em>. It automatically handles the data, attempts to parse it, and, if there are any errors, the load stops and dispatches an error signal.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> com.destroytoday.net.XMLLoader;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Test extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span>XMLLoader;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> Test<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">loader</span> = <span style="color: #0033ff; font-weight: bold;">new</span> XMLLoader<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">loader</span>.retryCount = <span style="color: #000000; font-weight:bold;">2</span>;
			<span style="color: #004993;">loader</span>.includeResponseInfo = <span style="color: #0033ff; font-weight: bold;">true</span>;
&nbsp;
			<span style="color: #004993;">loader</span>.openSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>loaderOpenHandler<span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">loader</span>.completeSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>loaderCompleteHandler<span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">loader</span>.errorSignal.<span style="color: #004993;">add</span><span style="color: #000000;">&#40;</span>loaderErrorHandler<span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">loader</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://search.twitter.com/search.atom?q=destroytoday&quot;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> loaderOpenHandler<span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span>XMLLoader<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> loaderCompleteHandler<span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span>XMLLoader, <span style="color: #004993;">data</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">XML</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span>, <span style="color: #004993;">data</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> loaderErrorHandler<span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span>XMLLoader, <span style="color: #004993;">error</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>, <span style="color: #004993;">message</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span>, <span style="color: #004993;">error</span>, <span style="color: #004993;">message</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span>.responseStatus<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Speaking of signals, <em>XMLLoader</em> is the first class in <a href="http://github.com/destroytoday/DestroyFramework" target="_blank">DestroyFramework</a> to use <a href="http://robertpenner.com/flashblog/" target="_blank">Robert Penner&#8217;s</a> <a href="http://github.com/robertpenner/as3-signals" target="_blank">AS3 Signals</a> instead of events. If you have to ask why, you haven&#8217;t been programming in AS3 long enough. Each <em>XMLLoader</em> instance has signals for <em>open</em>, <em>complete</em>, <em>error</em>, and <em>cancel</em>. The class also includes a <em>retryCount</em> property that indicates how many times to attempt to load a URL before calling it quits. Since some APIs can be down one second, then up the next, this feature really comes in handy. It&#8217;s mainly intended for handling the beloved fail whale.</p>
<p>The last two features include a <em>cancel</em> method and an <em>includeResponseInfo</em> property. Sure, <em>URLLoader</em> has a cancel method, <em>close</em>, but an exception is thrown if you call <em>close</em> when no operation is in progress. This makes sense, but the runtime shouldn&#8217;t close down shop when it happens. <em>XMLLoader</em> instead cancels and dispatches the <em>cancel</em> signal when the cancel method is called, and if no operations are in progress, it simply does nothing.</p>
<p>The <em>includeResponseInfo</em> property is an incredibly easy way to tell the loader to return the response status code and headers upon success or fail. Without <em>XMLLoader</em>, you could get this information with an event listener and the appropriate handler, but it&#8217;s far easier to flick a switch. In all honesty, I&#8217;ve neglected to retrieve this info using <em>URLLoader</em> in the past simply because it&#8217;s such a verbose process. Now that it only requires setting the property to <em>true</em>, I know I&#8217;ll use it more often than not.</p>
<p>As always, the <a href="http://github.com/destroytoday/DestroyFramework/blob/master/src/com/destroytoday/net/XMLLoader.as" target="_blank">source code</a> is available on <a href="http://github.com" target="_blank">GitHub</a>. Be sure to keep watch—my account will be pretty active these next few weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/01/introducing-the-xmlloader-class/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Introducing the ApplicationUtil class</title>
		<link>http://destroytoday.com/blog/2009/12/introducing-the-applicationutil-class/</link>
		<comments>http://destroytoday.com/blog/2009/12/introducing-the-applicationutil-class/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:23:05 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1639</guid>
		<description><![CDATA[Yesterday, during my weekly football &#8220;service&#8221;, I spent a few minutes starting the ApplicationUtil class. So far, it consists of only two methods, getVersion and closeOpenWindows. The first accesses the application descriptor and returns the application&#8217;s version. closeOpenWindows is a necessity I learned in the Apollo days from Christian Cantrell. I had issues with my [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, during my weekly football &#8220;service&#8221;, I spent a few minutes starting the <a href="http://github.com/destroytoday/DestroyFramework/blob/master/src/com/destroytoday/util/ApplicationUtil.as" target="_blank">ApplicationUtil</a> class. So far, it consists of only two methods, <code>getVersion</code> and <code>closeOpenWindows</code>. The first accesses the application descriptor and returns the application&#8217;s version. <code>closeOpenWindows</code> is a necessity I learned in the Apollo days from <a href="http://blogs.adobe.com/cantrell/" target="_blank">Christian Cantrell</a>. I had issues with my first AIR app, <a href="http://destroytoday.com/releases/DestroyFlickr108B.zip" target="_blank">DestroyFlickr</a>, where it wouldn&#8217;t quit, even if all of the visible windows were closed. I commonly use window visibility to show/hide utility windows, so the invisible ones were hanging around, keeping the app open. This method runs a quick loop to close all open windows, visible or not. It also includes an <code>andQuit</code> argument that, when true, sets <code>autoExit</code> to true, which quits the app upon close of the windows. Here&#8217;s some unnecessary example code to give this post more character:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">version</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = ApplicationUtil.getVersion<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">version</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// v1</span>
&nbsp;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NativeApplication.nativeApplication.openedWindows.<span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// 3</span>
ApplicationUtil.closeOpenWindows<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NativeApplication.nativeApplication.openedWindows.<span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// 0</span>
&nbsp;
<span style="color: #009900;">// suppose three windows are open again</span>
ApplicationUtil.closeOpenWindows<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// closes windows and quits before trace is called</span>
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NativeApplication.nativeApplication.openedWindows.<span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span>;</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2009/12/introducing-the-applicationutil-class/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing the Console class and debug package</title>
		<link>http://destroytoday.com/blog/2009/12/introducing-the-console-class-and-debug-package/</link>
		<comments>http://destroytoday.com/blog/2009/12/introducing-the-console-class-and-debug-package/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 05:33:36 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1611</guid>
		<description><![CDATA[I realized I need a more&#8230;official&#8230;way of debugging my apps, so I wrote the Console class. It&#8217;s primary function is to record activity to a specified log file. So far, I have a few methods that write entries—success, error, cancel, and print. I definitely plan to add more, but these are the main ones I [...]]]></description>
			<content:encoded><![CDATA[<p>I realized I need a more&#8230;official&#8230;way of debugging my apps, so I wrote the <a href="http://github.com/destroytoday/DestroyFramework/blob/master/src/com/destroytoday/debug/Console.as" target="_blank">Console</a> class. It&#8217;s primary function is to record activity to a specified log file. So far, I have a few methods that write entries—<em>success</em>, <em>error</em>, <em>cancel</em>, and <em>print</em>. I definitely plan to add more, but these are the main ones I intend to use in the near future. Since the name &#8220;trace&#8221; is off limits in AS3, I referenced my PHP background and named the <em>trace</em> method, &#8220;print&#8221;.</p>
<p>The class also includes the ability to automatically trace entries to Eclipse&#8217;s console along with writing them to a file. Files are written asynchronously, but I also added a delay property that combines entries, so the writing process is less likely to slow down the app. Taking advantage of AIR 2.0&#8242;s UncaughtErrors feature, the Console automatically logs fatal errors and their stack traces, if possible. Here&#8217;s an example of its usage:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> path<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = File.applicationStorageDirectory.nativePath;
&nbsp;
<span style="color: #009900;">// params: log file path, LoaderInfo</span>
<span style="color: #009900;">// automatically writes a session start entry to the log</span>
Console.<span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span>path, <span style="color: #004993;">loaderInfo</span><span style="color: #000000;">&#41;</span>;
&nbsp;
Console.<span style="color: #004993;">delay</span> = <span style="color: #000000; font-weight:bold;">1000</span>;
Console.traceError = <span style="color: #0033ff; font-weight: bold;">true</span>;
&nbsp;
<span style="color: #009900;">// params: id, message</span>
Console.success<span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;wp post&quot;</span>, <span style="color: #990000;">&quot;wrote blog post&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// params: id, message</span>
Console.<span style="color: #004993;">error</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;wp post&quot;</span>, <span style="color: #990000;">&quot;previous post was depressing&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// params: id, message</span>
Console.<span style="color: #004993;">cancel</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Christmas&quot;</span>, <span style="color: #990000;">&quot;why would you want to do that?&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// params: message</span>
Console.<span style="color: #004993;">print</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;this is a test&quot;</span><span style="color: #000000;">&#41;</span>;</pre></td></tr></table></div>


<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#91;</span>Fri Dec <span style="">18</span> 00:<span style="">31</span>:<span style="">31</span> GMT-0500 <span style="">2009</span><span class="br0">&#93;</span> Session Start
<span class="br0">&#91;</span>Fri Dec <span style="">18</span> 00:<span style="">31</span>:<span style="">31</span> GMT-0500 <span style="">2009</span><span class="br0">&#93;</span> <span class="br0">&#91;</span>success<span class="br0">&#93;</span> <span class="br0">&#91;</span>wp post<span class="br0">&#93;</span> wrote blog post
<span class="br0">&#91;</span>Fri Dec <span style="">18</span> 00:<span style="">31</span>:<span style="">31</span> GMT-0500 <span style="">2009</span><span class="br0">&#93;</span> <span class="br0">&#91;</span>error<span class="br0">&#93;</span> <span class="br0">&#91;</span>wp post<span class="br0">&#93;</span> previous post was depressing
<span class="br0">&#91;</span>Fri Dec <span style="">18</span> 00:<span style="">31</span>:<span style="">31</span> GMT-0500 <span style="">2009</span><span class="br0">&#93;</span> <span class="br0">&#91;</span>cancel<span class="br0">&#93;</span> <span class="br0">&#91;</span>Christmas<span class="br0">&#93;</span> why would you want to do that?
<span class="br0">&#91;</span>Fri Dec <span style="">18</span> 00:<span style="">31</span>:<span style="">31</span> GMT-0500 <span style="">2009</span><span class="br0">&#93;</span> <span class="br0">&#91;</span>print<span class="br0">&#93;</span> this is a test</pre></div></div>

<p>I do expect to build the class over time, eventually adding TextField support. In the meantime, the <a href="http://github.com/destroytoday/DestroyFramework/blob/master/src/com/destroytoday/debug/Console.as" target="_blank">source code</a> is available on GitHub.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2009/12/introducing-the-console-class-and-debug-package/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
