<?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; DestroyTwitter</title>
	<atom:link href="http://destroytoday.com/blog/tag/destroytwitter/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.1: All about the little things</title>
		<link>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-1-all-about-the-little-things/</link>
		<comments>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-1-all-about-the-little-things/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 16:56:02 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=2004</guid>
		<description><![CDATA[(I didn&#8217;t have any worth-while screenshots to show, so enjoy this photo of Adobe co-worker Matt Kursmark.) I&#8217;d like to introduce DestroyTwitter 2.1.1 as a subtle update that carries a handful of improvements. First and foremost, there is now an option in the &#8216;Retweet Format&#8217; preference for &#8216;native&#8217;. Many have asked for and/or demanded it, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-2006" title="destroytwitter211" src="http://destroytoday.com/blog/wp-content/uploads/2010/08/destroytwitter211.jpg" alt="" width="645" height="430" /></a></p>
<p>(I didn&#8217;t have any worth-while screenshots to show, so enjoy this photo of Adobe co-worker Matt Kursmark.)</p>
<p>I&#8217;d like to introduce <a href="http://destroytwitter.com/" target="_blank">DestroyTwitter 2.1.1</a> as a subtle update that carries a handful of improvements. First and foremost, there is now an option in the &#8216;Retweet Format&#8217; preference for &#8216;native&#8217;. Many have asked for and/or demanded it, so I&#8217;m glad I&#8217;m finally able to deliver. What differs with this method of retweeting is its appearance upon submitting—if you&#8217;ve already seen the tweet you&#8217;re retweeting in your home timeline, you&#8217;ll simply receive an alert indicating success. If the original tweet hasn&#8217;t made an appearance in your home timeline, your retweet will drop in like the other formats. The reason behind this is Twitter only shows one copy of each tweet in your home timeline, even if that second copy is from you. Confusing? That&#8217;s Twitter for you.</p>
<p>Along with native retweets comes two welcomed features in the image service arena. Imgur joins the family of available services, though only anonymous support at the moment. Individual accounts will be supported in a future update. Also, image services now include the tweet&#8217;s text as the title or accompanying message of the image. You can thank <a href="http://twitter.com/imjameshall" target="_blank">@imjameshall</a> for that suggestion.</p>
<p>In the Profile panel, you can now see how many lists the specified user belongs to. You can also click &#8216;view mentions&#8217; to see tweets that have mentioned that user. Regarding fixes, I closed a number of runtime errors, which is always nice. I also fixed the image viewer scaling dimensions. Apparently, at certain ratios, the scaling was off.</p>
<p>That&#8217;s about it for this update, except for one undocumented feature I will keep to myself. If you read my blog, however, you&#8217;ll know what it is right away. If you&#8217;re a DestroyTwitter native, you should&#8217;ve been prompted for the update by now. Otherwise, download it from the <a href="http://destroytwitter.com/" target="_blank">website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/08/destroytwitter-2-1-1-all-about-the-little-things/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>DestroyTwitter 2.0 sends 1 million tweets in 7 weeks</title>
		<link>http://destroytoday.com/blog/2010/08/destroytwitter-2-0-sends-1-million-tweets-in-7-weeks/</link>
		<comments>http://destroytoday.com/blog/2010/08/destroytwitter-2-0-sends-1-million-tweets-in-7-weeks/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 20:13:48 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1989</guid>
		<description><![CDATA[After releasing DestroyTwitter 2.0 back in June, I&#8217;m thrilled to announce it has reached the one million tweet milestone this past Friday, just shy of seven weeks. Once I added Google Analytics to Dwarf, I decided to include it in DestroyTwitter as well, tracking tweets, installs, and updates. Unfortunately, I didn&#8217;t think of using it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1990" title="million" src="http://destroytoday.com/blog/wp-content/uploads/2010/08/million.gif" alt="" width="645" height="191" /></a></p>
<p>After releasing <a href="http://destroytwitter.com" target="_blank">DestroyTwitter</a> 2.0 back in June, I&#8217;m thrilled to announce it has reached the one million tweet milestone this past Friday, just shy of seven weeks. Once I added Google Analytics to Dwarf, I decided to include it in DestroyTwitter as well, tracking tweets, installs, and updates. Unfortunately, I didn&#8217;t think of using it for DestroyTwitter 1.x, so there&#8217;s nothing to compare this milestone to. Nevertheless, we&#8217;re going full speed ahead, averaging 30,000 tweets and 450 unique installs each day.</p>
<p>Its success to this day has been solely from word-of-mouth—something I&#8217;ve always been proud of. Keep spreading the word and I&#8217;ll do my best to continue growing DestroyTwitter in the right direction.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/08/destroytwitter-2-0-sends-1-million-tweets-in-7-weeks/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<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>Introducing DestroyTwitter 2.0</title>
		<link>http://destroytoday.com/blog/2010/06/introducing-destroytwitter-2-0/</link>
		<comments>http://destroytoday.com/blog/2010/06/introducing-destroytwitter-2-0/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 19:38:06 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1951</guid>
		<description><![CDATA[Finally. That&#8217;s all I can say after almost a year of on and off development, numerous rewrites, and a lengthy break. I have too much to say about DestroyTwitter 2.0, so I&#8217;m going to run through some of a big improvements and leave the rest to be discovered. Complete Window Resizing For those updating from [...]]]></description>
			<content:encoded><![CDATA[<p>Finally. That&#8217;s all I can say after almost a year of on and off development, numerous rewrites, and a lengthy break. I have too much to say about DestroyTwitter 2.0, so I&#8217;m going to run through some of a big improvements and leave the rest to be discovered.</p>
<h4>Complete Window Resizing</h4>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1953" title="fullscreen" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/fullscreen1.jpg" alt="fullscreen" width="645" height="409" /></a></p>
<p>For those updating from 1.x, you could resize the window vertically and use &#8216;Wider Workspace&#8217; mode to view three canvases at once. No more! If you want to go fullscreen, go for it. If you&#8217;re weird and want to show Mentions and half of Home, feel free. And if you resize the window to within 40px of a canvas&#8217;s edge, it&#8217;ll snap to that canvas.</p>
<h4>More Accessible Settings</h4>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1957" title="stream_settings" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/stream_settings1.jpg" alt="stream_settings" width="645" height="523" /></a></p>
<p>Instead of placing every setting and its grandma under Preferences, I decided to relocate a few. Now, if you want to change the refresh rate of a canvas, you can do it straight from the canvas. These menus also provide you with the hotkeys that match the function, so you no longer need to reference the documentation.</p>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1956" title="services" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/services1.jpg" alt="services" width="645" height="353" /></a></p>
<p>Composing tweets is where the settings relocation really shines. Instead of closing the drawer and heading to preferences just to change your URL shortener or image service, you can do so straight from the drawer itself.</p>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1955" title="search_menu" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/search_menu1.jpg" alt="search_menu" width="645" height="523" /></a></p>
<p>The search history is also a context menu now with a dedicated item for clearing the history or the current search.</p>
<h4>Preferences Galore</h4>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1954" title="preferences" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/preferences1.jpg" alt="preferences" width="644" height="530" /></a></p>
<p>Though many of the settings have been moved, a ton still reside in the Preferences canvas. There are now three different font sizes for the older folk, icon sizes (including none), and a few tweetflow options.</p>
<h4>Improved Filtering</h4>
<p><a href="http://destroytwitter.com"><img class="alignnone size-full wp-image-1952" title="filter" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/filter1.jpg" alt="filter" width="644" height="530" /></a></p>
<p>Filters in 2.0 were known as &#8216;Rules&#8217; in 1.x. Now, they have their own drawer that can be accessed straight from the canvas without heading to Preferences. You can filter users, keywords, AND sources. This means if you&#8217;re like me and hate check-in services like Foursquare and Gowalla, add them to the sources filter and boom goes the dynamite.</p>
<h4>Easter Eggs</h4>
<p>2.0 includes a number of goodies that aren&#8217;t exactly obvious at first. I plan to add documentation sooner than later, so you can check them all out. Two worth mentioning for now are multi-touch navigation and scrolling through unread tweets. The first only for devices that support gestures, like Macbook Pros. You can three-finger swipe from canvas to canvas. If you&#8217;re tired of scrolling through trying to find the next unread tweet, simply hold alt when arrowing up or down. It&#8217;ll select and scroll to the next unread tweet in that direction if one exists.</p>
<h4>A Few Missing Features from 1.x</h4>
<p>Many of you will notice a number of features that exist in 1.x, but didn&#8217;t make it to 2.0 (yet). The biggest two that are sure to affect a good number of people are Themes and Groups. Because of Twitter&#8217;s approaching deadline for the OAuth cutoff, I didn&#8217;t have the time needed to implement these and fully test them. Even though Twitter extended the deadline, I wanted to stick to my launch date. Themes will definitely be in 2.1 and Lists (formally Groups) will be in 2.2 or even earlier.</p>
<p>Since these features are pretty important to some users, I decided to change 2.0&#8242;s application ID, so if you want to continue using 1.7, you can. Installing 2.0 won&#8217;t overwrite 1.7. The unfortunate part of this is 1.7 won&#8217;t prompt for an update, however, you can run them side-by-side until the OAuth cutoff in August if you need multiple accounts.</p>
<p>There are billions of other improvements and changes, so be sure to explore a bit. Also, take note of memory usage. After a few solid weeks of testing, we&#8217;ve seen usage as low as 25mb. Not once have I seen it reach 70mb—and that&#8217;s after 24 hours of usage.</p>
<h4>PLEASE READ</h4>
<p>Now, this morning I had a number of issues with the <a href="http://destroytwitter.com" target="_blank">destroytwitter.com</a> domain, so it might still be propagating throughout the world. Also, make sure your address isn&#8217;t using the https URL. If it doesn&#8217;t load for you, you can <a href="http://destroytoday.com/destroytwitter/releases/stable/DestroyTwitter2.zip" target="_blank">download 2.0 here</a>.</p>
<p>Enjoy it and if you have any feedback, bugs, or questions, hit up the new support site: <a href="http://support.destroytwitter.com" target="_blank">http://support.destroytwitter.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/06/introducing-destroytwitter-2-0/feed/</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
		<item>
		<title>Poll: Why do you use DestroyTwitter?</title>
		<link>http://destroytoday.com/blog/2010/06/poll-why-do-you-use-destroytwitter/</link>
		<comments>http://destroytoday.com/blog/2010/06/poll-why-do-you-use-destroytwitter/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 22:27:44 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DestroyTwitter]]></category>
		<category><![CDATA[Poll]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1948</guid>
		<description><![CDATA[I&#8217;m gathering a list of highlights and would love to get everyone&#8217;s input. Why do you use DestroyTwitter over other apps? What features do you use and appreciate the most? Its light weight? Its abundance of hotkeys? Its long list of preferences? You tell me.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m gathering a list of highlights and would love to get everyone&#8217;s input. Why do you use DestroyTwitter over other apps? What features do you use and appreciate the most? Its light weight? Its abundance of hotkeys? Its long list of preferences? You tell me.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/06/poll-why-do-you-use-destroytwitter/feed/</wfw:commentRss>
		<slash:comments>70</slash:comments>
		</item>
		<item>
		<title>DestroyTwitter 2.0 Beta testers needed!</title>
		<link>http://destroytoday.com/blog/2010/06/destroytwitter-2-0-beta-testers-needed/</link>
		<comments>http://destroytoday.com/blog/2010/06/destroytwitter-2-0-beta-testers-needed/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 23:49:48 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1936</guid>
		<description><![CDATA[It&#8217;s time. I need 100 testers to run through every aspect of DestroyTwitter 2.0 and report any bugs they come across. Up to the task? Request an invite. [update] &#8211; The invites were sent out this morning. If you didn&#8217;t get one, don&#8217;t sweat—the public release will be out next week.]]></description>
			<content:encoded><![CDATA[<p><a href="http://destroytwitter.com/beta/" target="_blank"><img class="alignnone size-full wp-image-1940" title="beta_invite" src="http://destroytoday.com/blog/wp-content/uploads/2010/06/beta_invite1.gif" alt="beta_invite" width="645" height="322" /></a></p>
<p><strike>It&#8217;s time. I need 100 testers to run through every aspect of DestroyTwitter 2.0 and report any bugs they come across. Up to the task? <a href="http://destroytwitter.com/beta/" target="_blank">Request an invite</a>.</strike></p>
<p><span class="blue">[update]</span> &#8211; The invites were sent out this morning. If you didn&#8217;t get one, don&#8217;t sweat—the public release will be out next week.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/06/destroytwitter-2-0-beta-testers-needed/feed/</wfw:commentRss>
		<slash:comments>16</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>OAuthocalypse is on the horizon</title>
		<link>http://destroytoday.com/blog/2010/04/oauthocalypse-is-on-the-horizon/</link>
		<comments>http://destroytoday.com/blog/2010/04/oauthocalypse-is-on-the-horizon/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 20:12:52 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DestroyTwitter]]></category>
		<category><![CDATA[Future]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1852</guid>
		<description><![CDATA[Since the beginning, Twitter has supported Basic Auth as a form of authentication. On June 30th, however, they plan to pull the plug. If you&#8217;re unfamiliar with authentication processes, Basic Auth involves attaching the user&#8217;s username and password to a request header. It&#8217;s as simple as can be for developers, but not exactly safe for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.countdowntooauth.com/" target="_blank"><img class="alignnone size-full wp-image-1864" title="twitter_oauth" src="http://destroytoday.com/blog/wp-content/uploads/2010/04/twitter_oauth2.gif" alt="twitter_oauth" width="645" height="192" /></a></p>
<p>Since the beginning, Twitter has supported <a href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank">Basic Auth</a> as a form of authentication. On June 30th, however, they plan to pull the plug. If you&#8217;re unfamiliar with authentication processes, Basic Auth involves attaching the user&#8217;s username and password to a request header. It&#8217;s as simple as can be for developers, but not exactly safe for users. Although many developers wouldn&#8217;t even consider tampering with a user&#8217;s account, the dark side still lingers.</p>
<p>Because of this, <a href="http://oauth.net/" target="_blank">OAuth</a> was introduced to keep users&#8217; passwords out of 3rd party hands. Instead, an access token is given to the 3rd party for each user. With it, they can call any of the methods in the API that Basic Auth could, but users can feel safe knowing only Twitter holds their passwords. Though this sounds all well and good, it certainly has its downsides.</p>
<p><a href="http://apiwiki.twitter.com/Authentication" target="_blank"><img class="alignnone size-full wp-image-1877" title="twitter_oauth" src="http://destroytoday.com/blog/wp-content/uploads/2010/04/twitter_oauth11.gif" alt="twitter_oauth" width="645" height="385" /></a></p>
<p>For one, the login process isn&#8217;t as smooth—for both the user and the developer. This diagram compares the user experience of Basic Auth versus OAuth. As you can see, OAuth is a bit long-winded. It&#8217;s even worse for the 3rd party. They bear the burden of encoding and signature parsing. From a user experience standpoint, the worst part of the OAuth process lies in the last three steps. Twitter is not a bank. Requiring the user to copy, paste, and authenticate a pin adds three unnecessary steps.</p>
<p><a href="http://www.flickr.com/services/api/auth.howto.desktop.html" target="_blank"><img class="alignnone size-full wp-image-1878" title="flickr_auth" src="http://destroytoday.com/blog/wp-content/uploads/2010/04/flickr_auth11.gif" alt="flickr_auth" width="645" height="184" /></a></p>
<p>Prior to <a href="http://destroytwitter.com" target="_blank">DestroyTwitter</a>, I developed <a href="http://destroytoday.com/releases/DestroyFlickr108B.zip" target="_blank">DestroyFlickr</a>, which authenticates with <a href="http://flickr.com" target="_blank">Flickr</a> to access its API. <a href="http://www.flickr.com/services/api/auth.howto.desktop.html" target="_blank">This process</a> involves entering a username in the app, which opens Flickr.com, asks you to login if you haven&#8217;t already, then verifies that you&#8217;d like to authorize this app. Finally, return to the app and you&#8217;re good to go.</p>
<p>Now, Twitter does have an alternative authentication method—<a href="http://apiwiki.twitter.com/Twitter-REST-API-Method:-oauth-access_token-for-xAuth" target="_blank">xAuth</a>. Imagine if Basic Auth and OAuth had a baby. The process is the same for the user as Basic Auth, but the 3rd party is given an access token, just like with OAuth. There&#8217;s one problem—it still divulges the user&#8217;s password to the 3rd party, just like Basic Auth. Even though Twitter says, &#8220;Storage of Twitter usernames and passwords is forbidden,&#8221; this single sentence isn&#8217;t going to stop a malicious 3rd party from exploiting users.</p>
<p>Let&#8217;s look at one last issue that arises with OAuth. For Twitter app developers, how do you authenticate with services like Twitpic?—with the user&#8217;s username and password. If the 3rd party can&#8217;t store users&#8217; credentials, it&#8217;s impossible for them to authenticate with the service. Unless Twitter releases <a href="http://mehack.com/oauth-echo-delegation-in-identity-verificatio" target="_blank">this proposed echo method</a> with enough time to implement, you will either see a massive drop in Twitter service usage or Twitter app developers will ignore the no-storage rule and put us back at square one.</p>
<p>Keep in mind, a lot can change between now and June. Let&#8217;s hope Twitter improves the user experience by removing the need for a pin. Let&#8217;s look forward to a way to communicate with services without sharing users&#8217; credentials. With enough of a heads-up, June 30th will just be another day. If, however, Twitter makes a change in the eleventh hour, we might see a number of frantic developers.</p>
<p><span class="blue">[update]</span> &#8211; Twitter updates <a href="http://dev.twitter.com/auth" target="_blank">OAuth docs</a> to prepare developers for June.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2010/04/oauthocalypse-is-on-the-horizon/feed/</wfw:commentRss>
		<slash:comments>8</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>Taking a break from DestroyTwitter</title>
		<link>http://destroytoday.com/blog/2009/12/taking-a-break-from-destroytwitter/</link>
		<comments>http://destroytoday.com/blog/2009/12/taking-a-break-from-destroytwitter/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 16:52:26 +0000</pubDate>
		<dc:creator>jonhallman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[DestroyTwitter]]></category>

		<guid isPermaLink="false">http://destroytoday.com/blog/?p=1615</guid>
		<description><![CDATA[It has been exactly one year since I decided to enter the Twitter app world with DestroyTwitter. Within this year, there has been 45 public releases and over 300,000 installs. After working tirelessly on it, all the while juggling college and a job, it&#8217;s time to take a break. As much as I love developing [...]]]></description>
			<content:encoded><![CDATA[<p>It has been exactly one year since I decided to enter the Twitter app world with <a href="http://destroytwitter.com" target="_blank">DestroyTwitter</a>. Within this year, there has been 45 public releases and over 300,000 installs. After working tirelessly on it, all the while juggling college and a job, it&#8217;s time to take a break. As much as I love developing DestroyTwitter, I want to experience a life away from the computer for those hours after 5 pm.</p>
<p>Anyone who knows me has probably seen me in front of a computer more often than not. And with every year that goes by, I feel one step closer to burning out. I want to be able to code for as long as I can, but I know it isn&#8217;t healthy to maintain my current pace. In college, the morning/day/night work schedule made sense—I was surrounded by peers who worked around the clock as well. Now that I have a full-time job and a family, it&#8217;s time to balance the work with a period of downtime and recreation.</p>
<p>I will continue to respond to emails regarding DestroyTwitter as best I can, but I have no plans to post the source code. If you have any questions, feel free to ask them in the comments. It has been a fun year and I can&#8217;t thank you enough for contributing to the project.</p>
]]></content:encoded>
			<wfw:commentRss>http://destroytoday.com/blog/2009/12/taking-a-break-from-destroytwitter/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
	</channel>
</rss>
