<?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>Doug McCune &#187; Uncategorized</title>
	<atom:link href="http://dougmccune.com/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://dougmccune.com/blog</link>
	<description>A blog about Adobe Flex</description>
	<lastBuildDate>Thu, 01 Jul 2010 14:06:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>What do you do with a giant head?</title>
		<link>http://dougmccune.com/blog/2010/01/29/what-do-you-do-with-a-giant-head/</link>
		<comments>http://dougmccune.com/blog/2010/01/29/what-do-you-do-with-a-giant-head/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 05:25:06 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=1106</guid>
		<description><![CDATA[You make it vacuum your floor of course. Inspired by this fantastic piece of work by Eric Testroete, my friend and I created my very own paper craft giant head (my buddy Todd did all the hard work of the 3D modeling and texturing). Of course, once you have such an amazing giant head, you [...]]]></description>
			<content:encoded><![CDATA[<p>You make it vacuum your floor of course.</p>
<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/EKe-s74LkEQ&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/EKe-s74LkEQ&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p>Inspired by this <a href="http://testroete.com/index.php?location=head">fantastic piece of work</a> by  Eric Testroete, my friend and I created my very own paper craft giant head (my buddy <a href="http://www.tespirit.com/portfolio/">Todd</a> did all the hard work of the 3D modeling and texturing). Of course, once you have such an amazing giant head, you need to figure out what the hell to do with it. And so boredom on a Friday night plus a few beers plus a giant head plus a roomba equals a magical vacuuming head!</p>
<p>A few more pictures of the head in action:<br />
<a href="http://dougmccune.com/blog/wp-content/uploads/2010/01/giant_head.jpg" title="giant_head"><img src="http://dougmccune.com/blog/wp-content/uploads/2010/01/giant_head.thumbnail.jpg" alt="giant_head" align="none" width="400" height="265" class="attachment wp-att-1107 " /></a></p>
<p><a href="http://dougmccune.com/blog/wp-content/uploads/2010/01/gianthead2.jpg" title="gianthead2"><img src="http://dougmccune.com/blog/wp-content/uploads/2010/01/gianthead2.thumbnail.jpg" alt="gianthead2" align="none" width="265" height="400" class="attachment wp-att-1110 " /></a><br />
(*not my baby)</p>
<p>As I figure out more shenanigans to get into with my giant head I&#8217;m sure I&#8217;ll post more ridiculous photos and videos.</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2010/01/29/what-do-you-do-with-a-giant-head/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>My 2010 change: I&#8217;m not a Flex Developer</title>
		<link>http://dougmccune.com/blog/2010/01/01/my-2010-change-im-not-a-flex-developer/</link>
		<comments>http://dougmccune.com/blog/2010/01/01/my-2010-change-im-not-a-flex-developer/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 20:57:46 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=886</guid>
		<description><![CDATA[This is the time of year when people are making their resolutions, mapping out their big life changes for the coming year, and thinking ahead about what the future holds. I&#8217;m not one for resolutions, never have been. But I like the idea of taking stock of where you stand and thinking about changes you [...]]]></description>
			<content:encoded><![CDATA[<p>This is the time of year when people are making their resolutions, mapping out their big life changes for the coming year, and thinking ahead about what the future holds. I&#8217;m not one for resolutions, never have been. But I like the idea of taking stock of where you stand and thinking about changes you want to make.</p>
<p>And so to usher in 2010 I&#8217;ve decided to make a change: I&#8217;m removing &#8220;Adobe Flex Developer&#8221; from the title of my blog. The title used to read <del datetime="2010-01-01T20:20:59+00:00">Doug McCune &#8211; Adobe Flex Developer</del>. It will now read: <strong>Doug McCune &#8211; Data Visualization Engineer</strong>. Oooh, aaah.</p>
<p>This isn&#8217;t a change in anything other than my own mentality, but for me it is indeed significant. I&#8217;ll still be using largely the same tools, meaning I&#8217;ll be writing Flex applications and using ActionScript as my main language. I&#8217;m not changing jobs. My day-to-day work on Monday will be the same as my day-to-day work yesterday. This is a change in how I see myself, and most importantly how I see myself growing in the future.</p>
<p><a href="http://dougmccune.com/blog/2007/10/31/flex-changed-my-life/">Flex has been good to me</a>, it provided a platform on which I could launch a career. Defining myself as a Flex Developer worked well and gave me enough room to grow. Within the small Flex community there were challenges, constantly new things to learn, and more than enough to keep me intellectually interested. The technology itself held my focus and through that focus I grew as a software developer. </p>
<p>But now that &#8220;Flex Developer&#8221; designation is a box that&#8217;s constricting rather than enabling. I gave a <a href="http://dougmccune.com/blog/2009/05/29/slides-code-and-links-from-my-cool-shit-presentation-at-360flex-indy/">talk at 360|Flex in Indianapolis</a> in which I talked about burning out. I explained that I had hit a point with the technology where the simply wasn&#8217;t enough left to keep me excited and passionate. As a side note, I love the fact that right on the first page of Google results for my name is an image of me standing in front of a slide that says &#8220;FUCK FLEX&#8221; <img src='http://dougmccune.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  How fitting.</p>
<p><img src="http://dougmccune.com/blog/wp-content/uploads/2010/01/fuck_flex.jpg" alt="fuck_flex" align="none" width="450" height="482" class="attachment wp-att-891 " style="margin-bottom:15px;" /></p>
<p>The work I&#8217;ve been doing on <a href="http://www.spatialkey.com">SpatialKey</a> has developed my interest in the field of data visualization, which is a field with an amazingly rich history and a field I see rising in importance in the years ahead. <strong>Most importantly, it&#8217;s a field I don&#8217;t know much about.</strong> There is so much to learn, from new tools and languages (R, map-reduce, Processing) to historical visualization techniques (cartography alone has such an amazing history) to modern data never before available (the <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2315">human genome is on Amazon AWS</a>). The field as it is right now gets me pumped up, and it&#8217;s a field that will experience explosive growth in the coming decade. </p>
<p>So starting in 2010 I won&#8217;t be identifying myself as a Flex developer. Flex will still be the tool I choose to use for my work, but it isn&#8217;t part of my identity like it used to be. I&#8217;m a data visualization engineer. And I&#8217;m excited.</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2010/01/01/my-2010-change-im-not-a-flex-developer/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Dorky Data Visualization Pumpkin: Minard&#8217;s Graph of Napoleon&#8217;s March</title>
		<link>http://dougmccune.com/blog/2009/10/31/dorky-data-visualization-pumpkin-minards-graph-of-napoleons-march/</link>
		<comments>http://dougmccune.com/blog/2009/10/31/dorky-data-visualization-pumpkin-minards-graph-of-napoleons-march/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 15:37:25 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=658</guid>
		<description><![CDATA[Happy Halloween! This is the dorkiest pumpkin I&#8217;ve ever carved. For those of you into data visualization or mapping, maybe you can recognize it: This is a pumpkin representation of Charle&#8217;s Minard&#8216;s visualization of Napoleon&#8217;s march into Russia in 1812. This graphic is considered by some (ie Edward Tufte) to be the &#8220;best statistical graphic [...]]]></description>
			<content:encoded><![CDATA[<p>Happy Halloween! This is the dorkiest pumpkin I&#8217;ve ever carved. For those of you into data visualization or mapping, maybe you can recognize it:</p>
<p><a href="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_1.jpg" title="napoleon_pumpkin_1"><img src="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_1.thumbnail.jpg" alt="napoleon_pumpkin_1" align="none" width="450" height="347" class="attachment wp-att-655 " /></a></p>
<p>This is a pumpkin representation of <a href="http://en.wikipedia.org/wiki/Charles_Joseph_Minard">Charle&#8217;s Minard</a>&#8216;s visualization of Napoleon&#8217;s march into Russia in 1812. This graphic is considered by some (ie <a href="http://www.edwardtufte.com">Edward Tufte</a>) to be the &#8220;best statistical graphic ever drawn.&#8221; The graph shows the size of Napoleon&#8217;s army as they marched to and from Moscow. You can see how the army shrank as they approached Moscow. Once they reached Moscow they found the city had been abandoned and burned. Then they marched back home, except it was through a brutal Russian winter and nearly killed the remaining army. By the time they return home you can see the size of the army is just a small trickle. </p>
<p><a href="http://en.wikipedia.org/wiki/File:Minard.png" title="minard_small"><img src="http://dougmccune.com/blog/wp-content/uploads/2009/10/minard_small.jpg" alt="minard_small" align="none" width="450" height="214" class="attachment wp-att-664 " /></a></p>
<p>Beyond just the two charts of the march to and from Moscow, the graphic also serves as a map, with the paths indicating where the troops were geographically. And below the map is a temperature chart that visualizes how severe the winter weather was, which correlates with some of the major drops in troops on the way home.</p>
<p>The carved pumpkin ended up being very hard to take a photo of because the graph wraps around over half the pumpkin&#8217;s circumference. So I tried to take a few pictures to get the different sides. I carved the march to and from Moscow, as well as the temperature chart along the bottom.</p>
<p><a href="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_2.jpg" title="napoleon_pumpkin_2"><img src="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_2.thumbnail.jpg" alt="napoleon_pumpkin_2" align="none" width="450" height="347" class="attachment wp-att-656 " /></a></p>
<p><a href="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_3.jpg" title="napoleon_pumpkin_3"><img src="http://dougmccune.com/blog/wp-content/uploads/2009/10/napoleon_pumpkin_3.thumbnail.jpg" alt="napoleon_pumpkin_3" align="none" width="450" height="347" class="attachment wp-att-657 " /></a></p>
<p>Hope everyone has a great Halloween tonight!</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2009/10/31/dorky-data-visualization-pumpkin-minards-graph-of-napoleons-march/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slides and Code from my CFUnited Presentation: Using Open Source Flex and AS3 Projects</title>
		<link>http://dougmccune.com/blog/2009/08/15/slides-and-code-from-my-cfunited-presentation-using-open-source-flex-and-as3-projects/</link>
		<comments>http://dougmccune.com/blog/2009/08/15/slides-and-code-from-my-cfunited-presentation-using-open-source-flex-and-as3-projects/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 19:22:14 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=607</guid>
		<description><![CDATA[Here are the slides and the code samples I presented at CFUnited. You can also download the PDF of the slides if you want. Adobe Open Source Media Framework + FlexLingo This demo uses Adobe&#8217;s OSMF project to synchronize subtitles with video. This was the demo that I used to create the Hitler Goes to [...]]]></description>
			<content:encoded><![CDATA[<p>Here are the slides and the code samples I presented at CFUnited.<br />
<object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfunited-ridingcoattails-090814141253-phpapp01&#038;rel=0&#038;stripped_title=doug-mccune-using-open-source-flex-and-actionscript-projects" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfunited-ridingcoattails-090814141253-phpapp01&#038;rel=0&#038;stripped_title=doug-mccune-using-open-source-flex-and-actionscript-projects" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<p>You can also <a href="http://dougmccune.com/conferences/cfunited2009/DougMcCune_CFUnited_RidingCoattails.pdf">download the PDF of the slides</a> if you want.</p>
<p><strong>Adobe Open Source  Media Framework + FlexLingo</strong><br />
This demo uses Adobe&#8217;s OSMF project to synchronize subtitles with video. This was the demo that I used to create the Hitler Goes to CFUnited video I posted before. You can seek around the video and OSMF makes sure to show the right subtitles. Then you can click on the different flag icons in the demo to use the FlexLingo library to translate the subtitle text to other languages (using Google translation API).</p>
<p><a href="http://dougmccune.com/conferences/cfunited2009/osmf_example/srcview/index.html">View the source</a><br />
This demo is made with Flex 4, so to use the source code you&#8217;ll need to be able to build a Flex 4 project.</p>
<p><strong>Axiis + Tweetr</strong><br />
The second demo I showed used the Axiis framework to create a chart of trending Twitter topics that have associated pictures on TwitPic. Unfortunately there&#8217;s no crossdomain file in place for TwitPic images, so I can&#8217;t run a live version of this app (but running locally works fine).</p>
<p><a href="http://dougmccune.com/conferences/cfunited2009/axiis_example/srcview/">View the source</a><br />
This demo is also made with Flex 4, so to use the source code you&#8217;ll need to be able to build a Flex 4 project.</p>
<p><strong>Safe Sexting</strong><br />
The third demo I showed was the &#8220;Safe Sexting&#8221; app that uses the Marilena library for facial detection and uses Pixel Bender to automatically blur out your face. This demo was also shown in 360|Flex Indianapolis. You can read a bit more about this demo in a <a href="http://dougmccune.com/blog/2009/05/29/slides-code-and-links-from-my-cool-shit-presentation-at-360flex-indy/">previous post about the 360|Flex presentation</a>.</p>
<p><a href="http://dougmccune.com/360Flex_Indy/safesexting/SafeSexting.html">Run the demo</a> | <a href="http://dougmccune.com/360Flex_Indy/safesexting/srcview">View the source</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2009/08/15/slides-and-code-from-my-cfunited-presentation-using-open-source-flex-and-as3-projects/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid)</title>
		<link>http://dougmccune.com/blog/2009/02/08/analyzing-the-size-of-the-flex-framework-or-why-i-hate-the-advanceddatagrid/</link>
		<comments>http://dougmccune.com/blog/2009/02/08/analyzing-the-size-of-the-flex-framework-or-why-i-hate-the-advanceddatagrid/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 02:40:36 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=437</guid>
		<description><![CDATA[In my recent Flasher Magazine interview I talked about how much I dislike the &#8220;advanced&#8221; classes in the Flex SDK that were shipped with Flex 3, namely the AdvancedDataGrid, the OLAPDataGrid, and the grouping and hierarchical collection classes. I also said that I thought that all the list-based controls (DataGrid, Tree, List, etc) were too [...]]]></description>
			<content:encoded><![CDATA[<p>In my recent <a href="http://www.flashermag.com/">Flasher Magazine</a> interview I talked about how much I dislike the &#8220;advanced&#8221; classes in the Flex SDK that were shipped with Flex 3, namely the AdvancedDataGrid, the OLAPDataGrid, and the grouping and hierarchical collection classes. I also said that I thought that all the list-based controls (DataGrid, Tree, List, etc) were too bloated and slow and that they should all be rewritten from scratch. I realized that that sounds a bit harsh, so I wanted to try to back up those statements with some code metrics.</p>
<p>I&#8217;ve <a href="http://spreadsheets.google.com/pub?key=pc0wr7-EElPPcmh0fh_hFJQ">put together a spreadsheet</a> that includes each class in the Flex framework, including charting and the advanced data visualization package. This shows the number of lines of code in each file, breaking down the total number of blank lines, comment lines, and actual code lines. I&#8217;ve colored the rows to indicate if the class belongs to the advanced data visualization package of Flex 3 (yellow), the charting framework (blue), the AIR SDK (red), or the open source Flex SDK (white).</p>
<p>Here are the top 20 classes, ordered by actual lines of code (not counting comments and whitespace):<br />
<img src="http://dougmccune.com/blog/wp-content/uploads/2009/02/screenshot086.jpg" alt="screenshot086" align="none" width="552" height="391" class="attachment wp-att-438 " /></p>
<p>To get these numbers, I used a free program called <a href="http://cloc.sourceforge.net/">cloc</a> to analyze the source code. <a href="http://cloc.sourceforge.net/">Cloc</a> is a perl script that analyzes a bunch of different languages, including ActionScript.</p>
<p>For the full list, check out the <a href="http://spreadsheets.google.com/pub?key=pc0wr7-EElPPcmh0fh_hFJQ">spreadsheet</a>. <strong>This is for version 3.0.0 of the Flex SDK</strong>, it does not include anything released in SDK versions 3.0.2 or 3.2 or any of the new Flex 4 classes.</p>
<p>So just look at that list of top classes. Out of the top five, three of them are the new classes for the AdvancedDataGrid. It&#8217;s also worth nothing that AdvancedListBase and AdvancedDataGridBaseEx are not used for anything other than base classes for AdvancedDataGrid. If you look at the inheritance chain for AdvancedDataGrid, it looks like this: 	</p>
<p>UIComponent<br />
ScrollControlBase<br />
AdvancedListBase (4,553 lines of code, 8,573 total)<br />
AdvancedDataGridBase (1,184 lines of code, 2,084 total)<br />
AdvancedDataGridBaseEx (4,503 lines of code, 7,428 total)<br />
AdvancedDataGrid (5,385 lines of code, 8,432 total)</p>
<p>That means that the entire codebase for the AdvancedDataGrid is 15,605 lines of code (26,517 if you include comments and whitespace). That&#8217;s 7% of the entire Flex codebase in those 4 classes. Note that this is not including ScrollControlBase or UIComponent, only the new classes in Flex 3. Also note that AdvancedDataGrid doesn&#8217;t inherit from ListBase or DataGrid at all, and ListBase is the second largest class in the entire framework.</p>
<p>So this means that when I run into a bug in the AdvancedDataGrid (which has happened <strong>a lot</strong>), I&#8217;ve got about 30,000 lines of code to wade through to try to debug my problem. No thank you. </p>
<p>The other two out of the top five are ListBase (which is why I said the entirety of the list classes is too big) and UIComponent (which I think is understandable, and I haven&#8217;t run into too many problems that have root causes in UIComponent, unlike ListBase which continues to be a big headache for me). Then number 6 on the list is DataGrid (oh, but don&#8217;t forget about #12 on the list, DataGridBase). If you group all list-based classes together (meaning the advanced classes and the original list/datagrid/tree classes), you&#8217;ve got 9 out of the top 20. </p>
<p><strong>Code quality</strong><br />
This post is only about raw numbers. There&#8217;s an entirely different topic of code quality that I can write post after post about when it comes to the quality of the AdvancedDataGrid (and related classes). They use noticeably different coding conventions, they deviate dramatically from the best practices employed by the other components, and they are plagued by performance problems. But that discussion is for another post. For now I just wanted to point out the shear massive volume of code that you&#8217;re using when you use these classes.</p>
<p><strong>Am I being too harsh?</strong><br />
Some would argue that the classes have to be big, given that they do so much. After all, it is called the <strong>Advanced</strong>DataGrid, it&#8217;s doing crazy advanced stuff. I call bullshit on that argument. In my opinion, I just don&#8217;t think there&#8217;s an excuse for such massive classes. They make developers lives miserable when trying to debug, but I also think it is indicative of a sloppy coding style. The mentality sort of seems to be &#8220;throw more code at the problem until you get it to work.&#8221; Check out the expandItem method of AdvancedDataGrid. It&#8217;s 445 lines long &#8211; this single <strong>method</strong> is longer than 80% of all the other Flex <strong>classes</strong> in the framework (yes, I checked how many classes are under 445 total lines). That method even includes a spectacular commented out block of code with this comment: </p>
<blockquote><p>// Dont know why this is done<br />
// So, commenting it and using the rowHeight instead</p></blockquote>
<p>Awesome. I guess as long as it passes the unit tests go ahead and ship it <img src='http://dougmccune.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2009/02/08/analyzing-the-size-of-the-flex-framework-or-why-i-hate-the-advanceddatagrid/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Accessing SVN Repositories with ActionScript</title>
		<link>http://dougmccune.com/blog/2009/01/20/accessing-svn-repositories-with-actionscript/</link>
		<comments>http://dougmccune.com/blog/2009/01/20/accessing-svn-repositories-with-actionscript/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 16:47:13 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/?p=390</guid>
		<description><![CDATA[I&#8217;ve been working on an ActionScript library that can load revision history from Subversion (SVN) repositories. This is something that I&#8217;ve had in the back of my mind for about a year now and finally sat down and figured out a way to do it. I remember seeing a post way back in September of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on an ActionScript library that can load revision history from Subversion (SVN) repositories. This is something that I&#8217;ve had in the back of my mind for about a year now and finally sat down and figured out a way to do it. I remember <a href="http://onflash.org/ted/2006/09/svn-client-with-flashnetsocket-in.php">seeing a post</a> way back in September of 2006 on Ted Patrick&#8217;s blog talking about someone who had written a SVN library using the Socket class. As far as I could tell, this was the only mention of the project, and it was never released publicly. So I decided to figure out how I could read SVN revision history with AS3. I&#8217;m releasing the library in its current state (more on that in a second) as an open source project. </p>
<p><strong>Quick demo and the code</strong><br />
Since I know people don&#8217;t like reading, I&#8217;ll post the code at the beginning of this post and show some screenshots and a demo AIR app that uses the library. If you want to tune out after this, it&#8217;s cool, I understand.<br />
Download <a href="http://dougmccune.com/flex/as3svnlib/as3svnlib_source.zip">as3svnlib source code</a>, or just the <a href="http://dougmccune.com/flex/as3svnlib/as3svnlib.swc">compiled swc file</a>.</p>
<p><strong>Demo</strong><br />
Since this uses socket communication on port 80, which is off limits under normal circumstances due to Flash player security restrictions, you have to run the demo as an AIR app. Lame, I know. You can install <a href="http://dougmccune.com/flex/as3svnlib/as3svnlib_example.air">this tiny AIR app</a> to try out the library if you want. The demo app will let you enter the URL of a repository and load the last few revisions. The repository must be publicly accessible for the demo to work (note that the library itself allows you to use basic authentication, but I didn&#8217;t build support for that into the simple demo).</p>
<p>The screenshot below shows the bare-bones example AIR app. You can enter a URL for a SVN repo and then you can load the latest revision number or you can load the last 50 revisions. That&#8217;s all you can do in the app, but with the library you can get more detailed information about all the revisions and you can decide exactly which revisions you want to load (or load all of them).<br />
<a href="http://dougmccune.com/blog/wp-content/uploads/2009/01/screenshot053.png" title="screenshot053"><img src="http://dougmccune.com/blog/wp-content/uploads/2009/01/screenshot053.thumbnail.png" alt="screenshot053" align="none" width="313" height="400" class="attachment wp-att-404 " /></a><br />
You can <a href="http://dougmccune.com/flex/as3svnlib/as3svnlib_example.air">download the example AIR app</a> if you want to see if it works with your SVN repo (again, note that this demo app won&#8217;t work with URLs behind authentication, but read below about how to do that). View-source is enabled on the AIR app itself once you install it, or you can view the <a href="http://dougmccune.com/flex/as3svnlib/example_srcview/">source of the example here</a>.</p>
<p><strong>The scope of this library</strong><br />
My immediate goal was to load revision history, complete with commiter name, date, comment, and ideally more detailed information about which files were affected or scope of the changes. I was not looking to build a full SVN client capable of committing changes or doing diffs or anything fancy like that. </p>
<p><strong>How I went about it</strong><br />
I first started thinking I would implement a legit SVN client that would connect to a server using a socket connection and use the <a onclick="javascript:pageTracker._trackPageview('/outgoing/svn.collab.net/repos/svn/trunk/subversion/libsvn_ra_svn/protocol');"  href="http://svn.collab.net/repos/svn/trunk/subversion/libsvn_ra_svn/protocol">SVN protocol</a> to communicate. I read up on the protocol and it didn&#8217;t seem all that complex, especially if I was going to limit myself to read-only operations. However, when I first started down this road I realized I didn&#8217;t know shit about doing socket communication in ActionScript. So I downloaded <a href="http://code.google.com/p/as3httpclientlib/">as3httpclientlib</a> (current source is at github <a href="http://github.com/gabriel/as3httpclient/tree/master">here</a>), which is an AS3 library for doing HTTP communication written by <a href="http://rel.me/">Gabriel Handford</a>. My goal was to use that project to learn how to do my own socket stuff and then build my SVN library. </p>
<p>But once I got my head around the http client stuff I learned something even more important. Turns out that most <a href="http://svnbook.red-bean.com/en/1.0/ch06s04.html">SVN installations include an Apache server</a> that lets you browse the repo with a web interface. What&#8217;s even more interesting is that <a href="http://subversion.tigris.org/webdav-usage.html">Subversion uses the WebDAV protocol</a> as well, which is a protocol based on HTTP for source control. Suddenly I had a new option that didn&#8217;t require writing my own full-on SVN client. Fuck yeah! Less work for me!</p>
<p>So I extended as3httpclientlib and added in some basic support for WebDav (namely the PROPFIND request and a basic REPORT request). Then I added in support for some custom reports that Subversion uses, namely <strong>log-report</strong>. All the reports that Subversion supports via WebDav are <a href="http://svn.collab.net/repos/svn/trunk/notes/webdav-protocol">documented here</a>. When you request a report you send a custom HTTP request to the server and fill the request body with some XML that defines what kind of report you want. Then the server sends back its response in XML.</p>
<p>Then I was able to use simple XML parsing to read my list of revisions, which included revision number, creator name, date, comment, and details about all the files that were added, removed, modified, etc. Easy breezy.</p>
<p><strong>Most basic use of the library</strong><br />
To use the library you interact with the SVNClient class. This class is used to fire off all your requests (either to get the latest revision number or to get specific sets of revisions). All requests are asynchronous, so you need to add an event listener to the SVNClient class, then send off your request, and then handle the result.</p>
<div width="450" style="overflow:auto">
<pre>
<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
	creationComplete="getLatest()"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import com.dougmccune.subversion.SVNRevision;
			import com.dougmccune.subversion.events.SVNRevisionListEvent;
			import com.dougmccune.subversion.SVNClient;

			private var client:SVNClient;

			private function getLatest():void {
				client = new SVNClient();
				client.addEventListener(SVNRevisionListEvent.REVISIONS_LOADED, revisionsLoadedHandler);
				client.getLatestRevisions("http://opensource.adobe.com/svn/opensource/flex", 25);
			}

			private function revisionsLoadedHandler(event:SVNRevisionListEvent):void {
				for each(var revision:SVNRevision in event.revisions) {
					trace("Revision #" + revision.revisionNumber + " committed by " + revision.creatorName);
				}
			}
		]]&gt;

	&lt;/mx:Script&gt;
&lt;/mx:WindowedApplication&gt;</code>
</pre>
</div>
<p>Or here&#8217;s another very simple example that uses all MXML:</p>
<div width="450"  style="overflow:auto">
<pre>
<code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:subversion="com.dougmccune.subversion.*"
	layout="vertical"&gt;

	&lt;subversion:SVNClient id="client" revisionsLoaded="grid.dataProvider = event.revisions" /&gt;

	&lt;mx:HBox width="100%"&gt;
		&lt;mx:TextInput width="100%" id="repoInput" text="http://opensource.adobe.com/svn/opensource/flex" /&gt;
		&lt;mx:Button label="Load" click="client.getLatestRevisions(repoInput.text, 25)" /&gt;
	&lt;/mx:HBox&gt;

	&lt;mx:DataGrid id="grid" width="100%" height="100%"&gt;
		&lt;mx:columns&gt;
			&lt;mx:DataGridColumn dataField="revisionNumber" headerText="#" width="40" /&gt;
			&lt;mx:DataGridColumn dataField="creatorName" /&gt;
			&lt;mx:DataGridColumn dataField="date" /&gt;
			&lt;mx:DataGridColumn dataField="comment" showDataTips="true" /&gt;

		&lt;/mx:columns&gt;
	&lt;/mx:DataGrid&gt;

&lt;/mx:WindowedApplication&gt;</code>
</pre>
</div>
<p><strong>Accessing repositories with authentication</strong><br />
The library supports using basic HTTP authentication to access repositories as well. Essentially all you have to do is pass the username and password into the SVNClient constructor, so instead of just calling <code>var client:SVNClient = new SVNClient()</code>, you would call something like <code>var client:SVNClient = new SVNClient("username", "password");</code>. Note that just like with all browser HTTP basic authentication, the password is sent using a Base 64 hash that is easily decoded.</p>
<p>But for a more secure connection, thanks to the SSL stuff that&#8217;s included in the as3crypto library and used in the as3httpclientlib library, you can also access SVN repos using HTTPS. If there are repositories that use Digest (as opposed to Basic) HTTP authentication, I do not currently support that. Frankly, I don&#8217;t have any repos I use that use digest authentication, so I don&#8217;t have any way to test it (or desire to write it).</p>
<p><strong>Going further</strong><br />
If I was going to build a full featured SVN client I would probably still try to do a custom socket approach that spoke the SVN protocol. The WebDav interface seems a bit limited compared to &#8220;real&#8221; Subversion commands, and I would be worried that it wouldn&#8217;t be good enough. However, WebDav does support stuff like updating files and committing changesets, so I think you could add in some basic committing functionality and still use the WebDav approach. I don&#8217;t have any immediate plans to do any of this, for now I&#8217;m happy with the capability of reading from a repository (I&#8217;ll write more later about an application I&#8217;m working on that uses this library). But if you&#8217;re interested in taking this code and adding in more support for things like checking out full revisions, committing changes, etc., please be my guest. </p>
<p><strong>License</strong><br />
Since this uses the <a href="http://code.google.com/p/as3crypto/">as3crypto</a> library, which is licensed under the <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD license</a>, I&#8217;m not entirely sure what that means for my code. I&#8217;d like to say mine&#8217;s MIT, but if I have to say it&#8217;s New BSD (which is almost just as flexible), then I guess I&#8217;ll say it&#8217;s New BSD. I think that really just means that I need to include the license file that contains copyright information in it when I redistribute the as3crypto library (which I have done). So you can pretty much do whatever you want.</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2009/01/20/accessing-svn-repositories-with-actionscript/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>I have 100 followers on Twitter!</title>
		<link>http://dougmccune.com/blog/2008/10/19/i-have-100-followers-on-twitter/</link>
		<comments>http://dougmccune.com/blog/2008/10/19/i-have-100-followers-on-twitter/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 16:53:59 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/2008/10/19/i-have-100-followers-on-twitter/</guid>
		<description><![CDATA[Which I consider pretty amazing since I&#8217;ve never sent a single tweet. That pretty much puts my follower to tweet ratio at Infinity. follow dougmccune at http://twitter.com You can be one of the cool kids too and follow me on Twitter. Twitter&#8217;s pretty much the best service in the entire world, and I simply can&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Which I consider pretty amazing since I&#8217;ve never sent a single tweet. That pretty much puts my follower to tweet ratio at Infinity.</p>
<div style="width:176px;text-align:center"><embed width="176" height="176" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" name="twitter_badge" quality="high" flashvars="color1=10053375&#038;type=user&#038;id=2738151" src="http://static.twitter.com/flash/twitter_badge.swf"/><br />
<a href="http://twitter.com/dougmccune" style="font-size: 10px; color: rgb(153, 102, 255); text-decoration: none;">follow dougmccune at http://twitter.com</a></div>
<p>You can be one of the cool kids too and <a href="http://twitter.com/dougmccune">follow me on Twitter</a>. Twitter&#8217;s pretty much the best service in the entire world, and I simply can&#8217;t live without it. </p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2008/10/19/i-have-100-followers-on-twitter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Code samples from Adobe Flex 3.0 For Dummies</title>
		<link>http://dougmccune.com/blog/2008/09/01/code-samples-from-adobe-flex-30-for-dummies/</link>
		<comments>http://dougmccune.com/blog/2008/09/01/code-samples-from-adobe-flex-30-for-dummies/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 03:57:13 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Flex for Dummies]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/2008/09/01/code-samples-from-adobe-flex-30-for-dummies/</guid>
		<description><![CDATA[The compiled list of code samples from our Flex for Dummies book have been posted on the dedicated Flex for Dummies page of my blog. Each chapter (other than chapters 1, 4, 19, and 20) contains source code samples, and you can browse through them all online or download the code to run in Flex [...]]]></description>
			<content:encoded><![CDATA[<p>The compiled list of code samples from our <a href="http://www.amazon.com/gp/product/0470277920?ie=UTF8&#038;tag=dougmccune-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470277920">Flex for Dummies</a> book have been posted on the dedicated <a href="http://dougmccune.com/blog/flex-for-dummies/">Flex for Dummies page</a> of my blog. Each chapter (other than chapters 1, 4, 19, and 20) contains source code samples, and you can browse through them all online or download the code to run in Flex Builder yourself. We&#8217;ve double and triple checked everything to make sure it&#8217;s all error-free. </p>
<p><a href="http://dougmccune.com/blog/flex-for-dummies/">Download the code here.</a></p>
<p><img id="image326" src="http://dougmccune.com/blog/wp-content/uploads/2008/09/screenshot071.jpg" alt="screenshot071.jpg" height="228" width="248" class="imageframe" align="right" style="margin-left:10px; margin-bottom:10px;" />You&#8217;ll see that each chapter contains two links, one to view the source code online and one to download a zip file. If you view the code online you can browse through each of the code listings for the chapter right in your web browser (and cut and paste to try running the sample yourself in Flex Builder). If you download the zip file you can get all the source files on your computer and load them right into Flex Builder yourself. Each chapter was created as a separate Flex project, so you can just create a new project for whichever chapter you like and copy over the files that are in the zip.</p>
<p>We&#8217;re still pulling together the last of the samples, so the code for chapters 2, 8, and 12 is on its way. We hope to have those chapters posted by the end of the week. My sincere apologies for not having the code samples online immediately when the book shipped. Wrapping up the creation and production of a book like this was a whirlwind of activity, and we certainly slipped a little in getting the code online. </p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2008/09/01/code-samples-from-adobe-flex-30-for-dummies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why did I stop blogging?</title>
		<link>http://dougmccune.com/blog/2008/08/02/why-did-i-stop-blogging/</link>
		<comments>http://dougmccune.com/blog/2008/08/02/why-did-i-stop-blogging/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 23:20:12 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/2008/08/02/why-did-i-stop-blogging/</guid>
		<description><![CDATA[I haven&#8217;t been blogging like I used to. It&#8217;s been a month since my last post (and that was just a silly cartoon). I&#8217;ve been thinking about why this is, and there are some typical expected reasons (busy work schedule, extra non-work commitments, a recent move, etc etc). This is all part of why I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t been blogging like I used to. It&#8217;s been a month since my last post (and that was just a silly cartoon). I&#8217;ve been thinking about why this is, and there are some typical expected reasons (busy work schedule, extra non-work commitments, a recent move, etc etc). This is all part of why I&#8217;ve fallen off the blogging wagon, but it&#8217;s not the whole story. This post is a bit of a dive into my psychology, trying to get at why I blog and where I&#8217;m trying to get to in my life. This isn&#8217;t a technical post and it&#8217;s not really even about Flex. It&#8217;s about me and my brain and my feelings. So if you don&#8217;t like mushy crap, you can stop reading.</p>
<p>First, the standard stuff:</p>
<ul>
<li><strong>Intense work</strong><br />
I took a full-time gig with <a href="http://universalmind.com/">Universal Mind</a> and we&#8217;re about to launch the product that I&#8217;ve been working on for a very long time. It&#8217;s one thing to work on a consulting gig where you walk in, do your shit, and get out. This is different. This product has so much of my time and energy invested in it. It&#8217;s my baby, and because I&#8217;m so invested, it consumes more of my mental time than any consulting project ever did. It&#8217;s not like I work 100 hour weeks for UM, I work normal hours. But my head doesn&#8217;t shut off when I commit my night&#8217;s changes and walk away from the computer. So that means I&#8217;m thinking about Flex for a huge portion of my non-work hours.</li>
<li><strong>Writing Flex for Dummies</strong><br />
<a href="http://www.amazon.com/gp/product/0470277920?ie=UTF8&#038;tag=dougmccune-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470277920">Flex For Dummies</a> basically took over my weekends for 7 months of my life. I wrote from Friday night to Sunday night (our deadlines were Monday and I usually turned in a chapter around 1 am). I didn&#8217;t go out, I didn&#8217;t go on weekend trips. And the last thing I wanted to do was blog. But that process is over and the book&#8217;s about to come out! I now have my weekends back, but I also have a new appreciation for my free time. I used to do a lot of blog posts over the weekends, now sitting in front of the computer is the last thing I want to do. </li>
<li><strong>Moving in with my girlfriend</strong><br />
It&#8217;s been about a month since I moved from San Francisco to Berkeley and moved in with my girlfriend. So I was dealing with the whole packing and moving thing, and also adjusting to the new living situation. Things have been fantastic since moving in, and this is another reason I&#8217;m not blogging as much. After a day of work I&#8217;d much rather go to dinner with my girlfriend and spend time hanging out with her instead of sitting in front of my monitor writing code.</li>
</ul>
<p>So that&#8217;s all the stuff that I&#8217;d tell you if you asked me why I haven&#8217;t been blogging. &#8220;Man, I&#8217;ve just been so busy, I can&#8217;t find the time.&#8221; There&#8217;s a lot of truth to that, I certainly don&#8217;t want it to sound like I haven&#8217;t been busy. But largely the &#8220;I&#8217;ve been busy&#8221; excuse is bullshit.  So why haven&#8217;t I been blogging? </p>
<p><strong>I&#8217;m not hungry anymore.</strong></p>
<p>Now we&#8217;re getting to the meat of this. I&#8217;ve been thinking about what drives me to blog and reflecting on the past year and a half. I&#8217;ve had a crazy ride. I went from being an unknown kid learning ActionScript and Flex to being a semi-famous-within-a-very-specific-geek-circle, book-writing, highly-paid, influential expert (and yeah, clearly you can tell that it&#8217;s all gone to my head). And it all happened in a year. My salary multiplied, I was speaking at conferences, I had a book deal. That&#8217;s some seriously crazy shit. That wasn&#8217;t entirely my plan from day one, although as things started picking up steam I started aiming higher and higher. I wanted to be famous. I wanted people to think I was good. I wanted to be in demand, to be sought after. </p>
<p>And so now what? What&#8217;s the next step? I&#8217;ve got a stellar job, I make bank, my book&#8217;s about to come out, I&#8217;ve got a reputation I&#8217;m proud of, and I&#8217;m being flown halfway around the world to speak at a conference. The people that I thought were rockstars, that I learned so much from while I was getting started (and still do every day); they all know who I am now (some of them are even good friends). </p>
<p>I used to be so hungry to prove myself. If someone had a coding problem they couldn&#8217;t solve I wanted to be the guy who showed everyone how to do it. I wanted people to stop and say &#8220;woah, where the fuck did this guy come from?&#8221; And now that I got that I guess I feel a bit drained. That fire to be the best, to be known, is dampened. I&#8217;m not saying I&#8217;m the best, I&#8217;m just saying I no longer care like I used to.</p>
<p><strong>The Tech</strong><br />
There&#8217;s also a technology aspect to this. I&#8217;m starting to feel like I&#8217;ve taken Flex as far as it will go. I started proving small things; how to make little components, or how to hack some piece of the Flex framework. And I rode that until I knew Flex inside and out. I hit every brick wall (I climbed over or busted through some). And it was all so challenging and rewarding. I was unlocking secrets, uncovering things people didn&#8217;t know. But in terms of intellectual curiosity I&#8217;ve exhausted Flex 2 and 3. Of course there&#8217;s always new stuff in Flash Player 10 and Flex 4 that is going to be really interesting. But my interest has been shifting. I don&#8217;t want to solve small problems with a component or with a framework. I want big problems. I want new problems. I want real problems. I want to solve something that&#8217;s not just a technical detail. </p>
<p>I&#8217;m not ditching Flex or ActionScript. On the contrary, I feel like I&#8217;ve gotten to the point with the technology that I&#8217;m supposed to be: Flex and ActionScript are just tools to solve problems, not problems in themselves. When I started blogging Flex was a problem I was chipping away at, hacking together examples and tweaking the framework to get it to serve my needs. Now I want to move beyond that, and take on problems that are information problems on their own, and Flex just happens to be the best tool I have at my disposal.</p>
<p><strong>The Next Step</strong><br />
I&#8217;ve been reading a good bit about information visualization as a field of research and soaking in as much as I can. The product I&#8217;ve been working on for Universal Mind takes geographic information visualization to a level that nobody&#8217;s done yet on the web (I put the &#8220;on the web&#8221; qualifier there, but I hope we&#8217;re working on stuff that pushes limits for any software, online or offline). And that&#8217;s just scratching the surface. There&#8217;s a ton room for innovation in the geo space. It&#8217;s a field that has so much potential but is stifled by a few big players and their ideas about how things are supposed to work. So I&#8217;m hoping I can help shake that up a bit. But geospatial information is just one small piece of the whole pie. I want to visualize everything. I want to create new ways of seeing data. And this is a field without limits. There is no end to the possible innovation.</p>
<p>So in the months ahead I hope to use this blog as an experimental proving ground for my forays into data visualization. I&#8217;m doing a lot of this for work, which is awesome because that means I get paid to do interesting work, but it has the downside that I often can&#8217;t share code. I imagine there will be more posts that are examples of what we&#8217;ve done (videos or live apps) that don&#8217;t show exactly how we did it. That sucks, but I think there&#8217;s still a lot to be said for showing off inspirational stuff. I&#8217;m also going to be trying to refocus on blogging small experiments in data visualization. </p>
<p>So if you&#8217;ve made it this far I&#8217;m impressed you read through my psycho-babble ramblings (or maybe you just skipped to the end looking for something worthwhile). From here on out I&#8217;ll probably keep the &#8220;dive into Doug&#8217;s head&#8221; type of posts like this to a minimum, and get back to blogging cool tech.</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2008/08/02/why-did-i-stop-blogging/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>My father supports my Flex work</title>
		<link>http://dougmccune.com/blog/2008/05/17/my-father-supports-my-flex-work/</link>
		<comments>http://dougmccune.com/blog/2008/05/17/my-father-supports-my-flex-work/#comments</comments>
		<pubDate>Sat, 17 May 2008 20:37:24 +0000</pubDate>
		<dc:creator>Doug</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dougmccune.com/blog/2008/05/17/my-father-supports-my-flex-work/</guid>
		<description><![CDATA[No joke, I just got this shirt in the mail from my dad. Thanks Dad.]]></description>
			<content:encoded><![CDATA[<p>No joke, I just got this shirt in the mail from my dad. </p>
<p><a class="imagelink" href="http://dougmccune.com/blog/wp-content/uploads/2008/05/photo-56.jpg" title="photo-56.jpg"><img id="image292" src="http://dougmccune.com/blog/wp-content/uploads/2008/05/photo-56.thumbnail.jpg" alt="photo-56.jpg" height="300" width="400" class="imageframe" /></a></p>
<p>Thanks Dad.</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmccune.com/blog/2008/05/17/my-father-supports-my-flex-work/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
