<?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>cavemonkey50.com &#187; Code</title>
	<atom:link href="http://cavemonkey50.com/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://cavemonkey50.com</link>
	<description>Tech in the eyes of cavemonkey50.</description>
	<lastBuildDate>Mon, 25 May 2009 17:30:08 +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>Plugin Migration to Spiral Web Consulting w/ New Version Releases!</title>
		<link>http://cavemonkey50.com/2009/03/plugin-migration-to-spiral-web-consulting-w-new-version-releases/</link>
		<comments>http://cavemonkey50.com/2009/03/plugin-migration-to-spiral-web-consulting-w-new-version-releases/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 00:56:09 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Site News]]></category>
		<category><![CDATA[google analyticator]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[podcasting]]></category>
		<category><![CDATA[spiralwebconsulting]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1514</guid>
		<description><![CDATA[I have decided to move Google Analyticator and Podcasting to my new company, Spiral Web Consulting. We have created a new plugin site and set up a forum to help with support requests. The long awaited release of Podcasting 2.0 has arrived! In this release, we have done the following: Podcasting is now supported by [...]]]></description>
			<content:encoded><![CDATA[<p>I have decided to move Google Analyticator and Podcasting to my new company, Spiral Web Consulting. We have created a <a href="http://plugins.spiralwebconsulting.com/">new plugin site</a> and set up a <a href="http://plugins.spiralwebconsulting.com/forums/">forum</a> to help with support requests.</p>
<p><span id="more-1514"></span>The long awaited release of Podcasting 2.0 has arrived! In this release, we have done the following:</p>
<ul>
<li>Podcasting is now supported by Spiral Web Consulting.</li>
<li>Corrects feed URL issues when a category with the name &#8220;podcast&#8221; existed. <em>Note:</em> Due to this change, the URL for format feeds has changed slightly.</li>
<li>Fixes a bug that prevented new enclosures from being added.</li>
<li>Converts Podcasting to a class-based plugin. This will make adding new features easier.</li>
<li>Drastically improves new/edit enclosure interface to conform with WordPress 2.7 design standards.</li>
<li>Adds an option to disable WordPress&#8217; automatic enclosing of file URLs.</li>
<li>Allows HTML to be entered in the text fields surrounding players.</li>
<li>Adds an option to use the video player for audio files.</li>
<li>Adds support for handling 404 error situations more gracefully.</li>
</ul>
<p>For more information on Podcasting 2.0, please check out the <a href="http://plugins.spiralwebconsulting.com/podcasting.html/">Podcasting section</a> of Spiral Web Consulting’s new plugin site.</p>
<p>Google Analyticator 3.0 has also been released! In this release, we have done the following:</p>
<ul>
<li>Google Analyticator is now supported by Spiral Web Consulting.</li>
<li>Corrects bugs preventing both external and download link tracking from working.</li>
<li>Adds settings to configure the external and download link tracking prefixes.</li>
<li>Changes the way disabling admin tracking works. Now uses a line of code instead of removing the tracking code altogether. This will allow features like the site overlay to work.</li>
</ul>
<p>For more information on Google Analyticator 3.0, please check out the <a href="http://plugins.spiralwebconsulting.com/analyticator.html/">Google Analyticator section</a> of Spiral Web Consulting’s new plugin site.</p>
<p>I would also like to announce the release of our newest plugin, <a href="http://plugins.spiralwebconsulting.com/svntweet.html">SVN Tweet</a>. SVN Tweet is a newly developed Beanstalk to Twitter Web API. This script is developed specifically for using the Beanstalk Web Hooks integration technique. This script will take the information given by Beanstalk from every commit message, strip unnecessary characters, and then pass the correct message to Twitter. This will eliminate extra characters that may be submitted to Twitter by Beanstalk using their normal Twitter integration. This will also allow more of the actual commit message to be displayed because of Twitter&#8217;s 140-character limit. </p>
<p>If you like these plugins, feel free to assist us in supporting these plugins by using our new <a href="http://plugins.spiralwebconsulting.com/forums/">User-to-User Support Forum</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2009/03/plugin-migration-to-spiral-web-consulting-w-new-version-releases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Track Plugin Development</title>
		<link>http://cavemonkey50.com/2009/03/track-plugin-development/</link>
		<comments>http://cavemonkey50.com/2009/03/track-plugin-development/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 00:09:20 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Site News]]></category>
		<category><![CDATA[google analyticator]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[podcasting]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1507</guid>
		<description><![CDATA[I know many of you have been eagerly awaiting new, improved versions of both Podcasting and Google Analyticator. My goal of overhauling both plugins is an ambitious one, and I promise will be completely worth the wait. While neither update is ready yet, I&#8217;m happy to announce tracking the progress of both plugins will be [...]]]></description>
			<content:encoded><![CDATA[<p>I know many of you have been eagerly awaiting new, improved versions of both <a href="http://cavemonkey50.com/code/podcasting/">Podcasting</a> and <a href="http://cavemonkey50.com/code/google-analyticator/">Google Analyticator</a>. My goal of overhauling both plugins is an ambitious one, and I promise will be completely worth the wait. While neither update is ready yet, I&#8217;m happy to announce tracking the progress of both plugins will be easier than ever.</p>
<p>Starting today, there is now <a href="http://twitter.com/SWC_Plugins">a Twitter account called SWC_Plugins</a>. The latest development news (a.k.a. svn commit information for those of you in the know) will constantly be available there for your viewing. Work is occurring on both plugins almost daily at the moment, so feel free to start following that account for your latest development news.</p>
<p>For those of you looking for a status update, today I just finished converting Podcasting to an easier to manage, class-based plugin. This update was long over due on my end, and will make development much easier in the future. With the completion of the class conversion, comes a very important fix for those of you having issues adding new files. There is no ETA on the version at the moment, but I promise it&#8217;s not far away.</p>
<p>As for Google Analyticator, I&#8217;m very well aware that external links are not currently being tracked. This is very high on my list of things to fix. Again, no ETA, but sooner rather than later.</p>
<p><small>P.S. For the smart ones, yes, there is a big announcement coming for my plugins, as well as my freelance career in general. Stay tuned, this is going to be good!</small> </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2009/03/track-plugin-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My WordPress Plugins Are 2.7 Compatible</title>
		<link>http://cavemonkey50.com/2008/12/my-wordpress-plugins-are-27-compatible/</link>
		<comments>http://cavemonkey50.com/2008/12/my-wordpress-plugins-are-27-compatible/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:01:09 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[podcasting]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1479</guid>
		<description><![CDATA[Great news. I spent some time the past fews days updating my plugins, and now all supported plugins are WordPress 2.7 compatible. This means you can upgrade without worries later tonight or tomorrow and continue enjoying my plugins. In fact, for those Podcasting users out there, you&#8217;ll be enjoying Podcasting even more. Over the past [...]]]></description>
			<content:encoded><![CDATA[<p>Great news. I spent some time the past fews days updating <a href="http://cavemonkey50.com/code/">my plugins</a>, and now all supported plugins are <a href="http://codex.wordpress.org/Version_2.7">WordPress 2.7</a> compatible. This means you can upgrade without worries later tonight or tomorrow and continue enjoying my plugins.</p>
<p>In fact, for those <a href="http://cavemonkey50.com/code/podcasting/">Podcasting</a> users out there, you&#8217;ll be enjoying Podcasting even more. Over the past few months I have been slaving away adding more features to Podcasting. That release is now available. While 2.0 is still not out of beta, I feel confident enough with my code to call it the official version. Let me know what you think of the new version.</p>
<p><span id="more-1479"></span>Finally, you will also notice there are quite a few plugins that I have dropped support for. These are plugins that never really found a great user base or are now obsolete. I only have so much time to work with, so unfortunately those plugins are no longer supported. If anyone wants to take over the development of any of those plugins, feel free to. I will happily give you commit access and a redirect if you&#8217;re committed to maintaining the plugin. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/12/my-wordpress-plugins-are-27-compatible/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 11 Status</title>
		<link>http://cavemonkey50.com/2008/08/soc-atompub-week-11-status/</link>
		<comments>http://cavemonkey50.com/2008/08/soc-atompub-week-11-status/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 21:27:14 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1431</guid>
		<description><![CDATA[Week 11 of the Summer of Code brought the ending to a summer long problem, the MT WSSE authentication issue. The MT importer is now officially a reality, and I am happy to say I will be able to complete my original set goals. Fixing My MT WSSE Authentication Problem Earlier this week I received [...]]]></description>
			<content:encoded><![CDATA[<p>Week 11 of the Summer of Code brought the ending to a summer long problem, the MT WSSE authentication issue. The MT importer is now officially a reality, and I am happy to say I will be able to complete my original set goals.</p>
<h3>Fixing My MT WSSE Authentication Problem</h3>
<p>Earlier this week I received a great deal of help from two Movable Type developers, Mark Paschal and Byrne Reese. After <a href="http://cavemonkey50.com/2008/08/soc-atompub-week-10-status/">finding the source of my issue</a>, Mark took a closer look at the specific problem. <a href="http://cavemonkey50.com/2008/08/soc-atompub-week-10-status/#comment-83542">His diagnosis</a>: I had a bug in my end of the WSSE authentication.</p>
<p><span id="more-1431"></span>After spending numerous weeks working with the <a href="http://www.tbray.org/ape/">Atom Protocol Exerciser</a>, I came to rely on it as a crutch. Whenever my Atom retrieval failed, the APE always succeeded. Well, that turned out to be a bad habit. Movable Type&#8217;s WSSE authentication was implemented differently than the APE, and thus the APE was useless against it. So, when I ran into a problem with my code and the APE didn&#8217;t work either, I assumed the issue was on MT&#8217;s end. That was simply not the case.</p>
<p>After Marked looked at my code, he informed me my nonces were repeating. The AtomPub library I had be using did not rebuild the nonce after each sequential request, and therefore failed to authenticate on the second Atom request, the list of posts. After I added a snippet of code Mark suggested, everything started authenticating perfectly.</p>
<p>So, this entire issue came down to one line of code on my end, and it could have been completely avoided had a took a closer look at my end of the code. Had I approached the problem differently, I am confident I would have found the repeating nonces, but I didn&#8217;t even look in that direction. I will definitely be taking this programming lesson with me into future projects.</p>
<h3>The Status of the Movable Type Importer</h3>
<p>Now that everything is authenticating, the MT importer is not far behind. I&#8217;m currently putting the finishing touches on some changes I had to make that differed from TypePad. Once those changes have been made, the importer should be working fine. I expect the MT importer to be completed over the next couple of days, and I should finally have everything submitted to WordPress&#8217; Trac. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/08/soc-atompub-week-11-status/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 10 Status</title>
		<link>http://cavemonkey50.com/2008/08/soc-atompub-week-10-status/</link>
		<comments>http://cavemonkey50.com/2008/08/soc-atompub-week-10-status/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 03:57:46 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1426</guid>
		<description><![CDATA[I have great news this week. I have finally figured out the whole Movable Type authentication debacle. The WSSE Authentication Problem I want to preface my findings with this advisory. I do not have a full understanding of Perl, and my statements may be wrong. If anyone can correct me, please do. I would rather [...]]]></description>
			<content:encoded><![CDATA[<p>I have great news this week. I have finally figured out the whole Movable Type authentication debacle.</p>
<h3>The WSSE Authentication Problem</h3>
<p>I want to preface my findings with this advisory. I do not have a full understanding of Perl, and my statements may be wrong. If anyone can correct me, please do. I would rather be told I&#8217;m completely wrong than continue down the wrong path.</p>
<p><span id="more-1426"></span>Late last night while inspecting MT&#8217;s Atom API code, I found the troublesome line of code (/lib/MT/AtomServer.pm, line 168-170):</p>
<pre><code>if ($nonce_record &amp;&amp; $nonce_record-&gt;id eq $auth-&gt;{Nonce}) {
        return $app-&gt;auth_failure(403, &quot;Nonce already used&quot;);
}</code></pre>
<p>When commenting out this line of code, the authentication passed, and I was finally seeing a list of posts stored in Movable Type&#8217;s database. Once I realized this was the problematic line, I started investigating what this line is doing. From my limited understanding of Perl, this line is checking to see if the nonce has been used in the past. If it has, the check fails to authenticate.</p>
<p>Once I realized this, I looked at my nonces being sent. I verified each nonce generated was different from the last one, eliminating the possibility of the problem being on my end. This tells me somehow Movable Type is incorrectly adding the current nonce to the list of previous nonces before performing that check.</p>
<p>Looking at the slightly bigger picture:</p>
<pre><code>my $app = shift;
my $auth = $app-&gt;get_auth_info
    or return $app-&gt;auth_failure(401, &quot;Unauthorized&quot;);
for my $f (qw( Username PasswordDigest Nonce Created )) {
    return $app-&gt;auth_failure(400, &quot;X-WSSE requires $f&quot;)
        unless $auth-&gt;{$f};
}
require MT::Session;
my $nonce_record = MT::Session-&gt;load($auth-&gt;{Nonce});

if ($nonce_record &amp;&amp; $nonce_record-&gt;id eq $auth-&gt;{Nonce}) {
    return $app-&gt;auth_failure(403, &quot;Nonce already used&quot;);
}
$nonce_record = new MT::Session();
$nonce_record-&gt;set_values({
    id =&gt; $auth-&gt;{Nonce},
    start =&gt; time,
    kind =&gt; &#39;AN&#39;
});
$nonce_record-&gt;save();</code></pre>
<p>From what I&#8217;m understanding, the code appears to add the nonce to the record after checking, however, the nonce is passed through MT::Session-&gt;load before the check is performed, indicating that may the source of the issue. Sure enough, MT::Session-&gt;load is the problem. After replacing the passed nonce with a blank string, the nonce is no longer in the list of previous nonces and the check passes.</p>
<p>I have notified Movable Type&#8217;s developers of this problem, and I hope to hear back soon. The good news is once this error is resolved in Movable Type, the importer should work wonders. The bad news is it may be a bit until the next version of MT is released or the bug is fixed. I&#8217;ll try to keep everyone updated on the status as I hear back from the developers.</p>
<h3>Future Branches of the Atom Importer</h3>
<p>Beyond working with Movable Type, after talking with Lloyd this week, we have decided to look into the possibility of porting the importer to other platforms; namely Vox and WordPress itself. We talked about Vox as there is currently no importer at all, as Vox lacks export methods and APIs such as XML-RPC. The idea for WordPress came up because we thought it might be a great way to move a blog from location to location without having to deal with export files.</p>
<p>Over the next week I will be looking at creating those branches of the importer. Thankfully, since the Atom API is a standard, I should be able to quickly and easily make the ports. We&#8217;ll see how that goes next week. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/08/soc-atompub-week-10-status/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 8 Status</title>
		<link>http://cavemonkey50.com/2008/07/soc-atompub-week-8-status/</link>
		<comments>http://cavemonkey50.com/2008/07/soc-atompub-week-8-status/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 21:09:01 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1422</guid>
		<description><![CDATA[Week 8 of the Summer of Code was nothing short of a roller coaster ride. At some points I wanted to tear my hair out, other times I was jumping for joy. Here is what went down this week: Bad: Regular Expressions Are Not My Thing While working towards media importing this week, I had [...]]]></description>
			<content:encoded><![CDATA[<p>Week 8 of the Summer of Code was nothing short of a roller coaster ride. At some points I wanted to tear my hair out, other times I was jumping for joy. Here is what went down this week:</p>
<h3>Bad: Regular Expressions Are Not My Thing</h3>
<p>While working towards media importing this week, I had to write a few regex statements. I&#8217;ll admit it, I completely suck at regular expressions. They bring me back to my not so fond days of <a href="http://en.wikipedia.org/wiki/Discrete_mathematics">Discrete Mathmatics</a>; days I would rather forget. Regardless, I managed to get through them and ended with some working code.</p>
<p><span id="more-1422"></span><br />
<h3 class='more'>Good: Faster Response Times From TypePad</h3>
<p>I noticed while working on media importing, TypePad&#8217;s server have greatly increased in speed this week. I found that importing took roughly half the time it did in the previous week, with no code optimizations on my part. The speed increases managed to stay consistent through the week, so I&#8217;m hoping the changes are here to stay.</p>
<h3>Bad: Media Importing is Near Impossible</h3>
<p>Wednesday came to a grinding halt when I noticed there was no way to reliably import media by parsing images from posts. There are several reasons to this:</p>
<ul>
<li>TypePad has two different methods for uploading images.</li>
<li>The markup TypePad generates for images is unclean and is not standardized. Users have the ability to modify the output code template.</li>
<li>TypePad puts the full size image on a separate HTML page that is linked to via a URL that tells nothing about the original file. Due to this, it is near impossible to link the full size image with the originating link.</li>
</ul>
<p>So, media importing is unfortunately looking very glum. I will try to come up with something since importing media is a crucial feature in my book, but I&#8217;m not sure what. More on this in the coming weeks.</p>
<h3>Good: WordPress 2.6 Released</h3>
<p>The new version of WordPress was released this week, and I was happy for several reasons. First off, I was able update my blog and take advantage of the new features, but more importantly, trunk is going bleeding again. Hopefully in the next week or so the TypePad importer should land in trunk. Stay on the lookout!</p>
<h3>Good/Bad: Headway Made on Movable Type Authentication Issue</h3>
<p>I managed to get in touch with the developer over at Six Apart who originally wrote Movable Type&#8217;s Atom API implementation. The good news is he confirmed I&#8217;m not crazy and MT is authenticating differently than TypePad. The bad news is he couldn&#8217;t remember off hand what is different with the implementation.</p>
<p>From what it sounds like, MT is not following the <a href="http://www.rfc-editor.org/rfc/rfc5023.txt">RFC 5023</a> spec in regards to WSSE, simply because the specification was not standardized when the original code was written. I&#8217;m not sure where this leaves me, because I don&#8217;t really know what is different with authentication at the moment. Also, I&#8217;m unsure if Movable Type will correct the authentication difference in the near future.</p>
<p>At the moment, it appears I will be brushing up on my Perl skills and looking at the source code for Movable Type next week. With a little luck, this issue will finally be ironed out. Who knows, maybe I&#8217;ll even figure out something for media importing next week as well. Right now, I&#8217;m just hoping next week is the week of miracles. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/07/soc-atompub-week-8-status/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 7 Status</title>
		<link>http://cavemonkey50.com/2008/07/soc-atompub-week-7-status/</link>
		<comments>http://cavemonkey50.com/2008/07/soc-atompub-week-7-status/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 19:22:35 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1414</guid>
		<description><![CDATA[In short, this past week of the Summer of Code has been a rebuilding and planning week. In addition to filling out midterm surveys and reports, I shifted gears toward media importing. Why Import Media? The first question I asked myself this week is why should TypePad&#8217;s media be imported into WordPress. This was a [...]]]></description>
			<content:encoded><![CDATA[<p>In short, this past week of the Summer of Code has been a rebuilding and planning week. In addition to filling out midterm surveys and <a href="http://comox.textdrive.com/pipermail/wp-hackers/2008-July/020902.html">reports</a>, I shifted gears toward media importing.</p>
<h3>Why Import Media?</h3>
<p>The first question I asked myself this week is why should TypePad&#8217;s media be imported into WordPress. This was a relatively easy question to answer. TypePad, being a paid service, <a href="http://support.typepad.com/cgi-bin/typepad.cfg/php/enduser/std_adp.php?p_faqid=95&#038;p_created=1125529468&#038;p_sid=36jBKv8j&#038;p_lva=&#038;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MTEmcF9wcm9kcz0mcF9jYXRzPTAmcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1jYW5jZWw*&#038;p_li=&#038;p_topview=1">will delete and remove all content when canceled</a>. This includes images uploaded and stored in TypePad&#8217;s cloud. So, importing images and the like is important if a TypePad switcher does not want to see broken images all over the place.</p>
<p><span id="more-1414"></span><br />
<h3 class='more'>Can TypePad Media Be Imported?</h3>
<p>After determining media importing is essential, I explored my options for getting media into WordPress. Thankfully, TypePad has an AtomAPI for their web galleries. Unfortunately, from my testing this Atom API does not include single image uploads. So, the Atom API may be out of the question for media importing.</p>
<p>Since Atom API media importing appears out of the question, I started looking at their XML-RPC documentation. To no surprise, they do not have a method for retrieving media through XML-RPC. Therefore, I&#8217;m left with one option: finding media through URLs during the import process.</p>
<p>Sadly, this option is not ideal. For one, it will add time to the already slow import process. Also, this option will force media to be imported at the time of the initial import, since the content can only easily be traversed during the post import. So, I&#8217;m not too pleased with my options.</p>
<h3>Next Week</h3>
<p>Next week I plan on starting to code the media importing during the import process. I plan on making this optional, since it will most likely add significant time to the import process. However, before I do that, I will go through my options one more time. If anyone thinks of any alternatives from now until then, I&#8217;d love to hear them. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/07/soc-atompub-week-7-status/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 6 Status</title>
		<link>http://cavemonkey50.com/2008/07/soc-atompub-week-6-status/</link>
		<comments>http://cavemonkey50.com/2008/07/soc-atompub-week-6-status/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 02:26:47 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1413</guid>
		<description><![CDATA[Time is flying. The conclusion of this week marks the midway point of the Summer of Code, and the supposed ready for core date I set back in the beginning of summer. So, how did I stack up? This Week This week saw the addition of Atom URI detection based on the straight blog URL. [...]]]></description>
			<content:encoded><![CDATA[<p>Time is flying. The conclusion of this week marks the midway point of the Summer of Code, and the supposed <a href="http://groups.google.com/group/wordpress-soc-2008/web/movable-type-typepad-atompub-based-content-importer">ready for core date</a> I set back in the beginning of summer. So, how did I stack up?</p>
<h3>This Week</h3>
<p>This week saw the addition of Atom URI detection based on the straight blog URL. To detect the Atom URI, I have to parse the HTML page for the RSD page, then parse the RSD page for the Atom URI. It&#8217;s a multi-step process, but the most reliable should TypePad ever change the Atom URI on me. In fact, I&#8217;d like to mention that every single URI (comments, paging, etc) is automatically detecting within the importer, so the importer should be URI future proof.</p>
<p><span id="more-1413"></span>In addition to AtomPub URI detection, I added a progress bar this week. I thought this would be a huge process, but thankfully the coding was relatively simple. I learned some techniques to force PHP to dump the output buffer, essentially updating the page. Paired with some simple Javascript, I was able to create a fairly responsive progress bar. I chose this method over a completely Javascript method since the Javascript method would require additional time to run (I can explain this technically if anyone wants to know why).</p>
<h3>Overall Status</h3>
<p>Since we&#8217;re at the midway point, I thought now would be a great time to look back at the overall status. As I mentioned earlier in the post, I choose this date as the ready for core inclusion date. Since the release cycle for WordPress 2.6 has been pushed up, core inclusion will most likely be pushed back since the AtomPub importer will not be ready for 2.6. Regardless of the actual core inclusion, the deadlines have not changed in my mind.</p>
<p>According <a href="http://groups.google.com/group/wordpress-soc-2008/web/movable-type-typepad-atompub-based-content-importer">my requirements for core inclusion</a>, by now the importer should be converting AtomPub data in to actual WordPress data. That&#8217;s occurring, so I&#8217;m definitely still on track.</p>
<h3>The Second Half</h3>
<p>So, where&#8217;s the importer going from here? Well, I plan to start working on the media importing portion of the importer next week. I&#8217;m figuring that may take at least two weeks. By then, WordPress 2.6 should be near release, so core inclusion can be considered once trunk goes bleeding again. After the importer is included in core, I can start getting real feedback from users. That should allow me to find and fix bugs, in addition to working on speed enhancements on a much larger scale.</p>
<h3>The Importer In Action</h3>
<p>I thought I would leave you this week with a look at the importer action. A few notes for the video:</p>
<ol>
<li>The first item takes a while to display since the first 20 posts need to be requested, plus two requests for comments, in additional to the standard trackback and draft checks.</li>
<li>I would like to add a throbber to the in progress page to make the wait for the first post less painful.</li>
<li>You&#8217;ll notice the importer semi-stall after 20 posts. This is because it needs to request another group of 20 posts.</li>
<li>By the time the average WordPress user sees this, I would really love to see the importer work ever faster than this, and will strive the second half to make that happen.</li>
</ol>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="537" height="41g" id="viddler"><param name="movie" value="http://www.viddler.com/player/2abc26f1/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/2abc26f1/" width="537" height="416" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler" ></embed></object> </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/07/soc-atompub-week-6-status/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 5 Status</title>
		<link>http://cavemonkey50.com/2008/06/soc-atompub-week-5-status/</link>
		<comments>http://cavemonkey50.com/2008/06/soc-atompub-week-5-status/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 23:35:36 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1412</guid>
		<description><![CDATA[Another week down, another step closer to a working AtomPub importer. Unfortunately, week 5 went anything but according to plan. Sure, I fixed the bugs found at the end of last week, but new issues came to light, requiring changes in the week&#8217;s plan. New Issues Found Additional testing early in the week by my [...]]]></description>
			<content:encoded><![CDATA[<p>Another week down, another step closer to a working AtomPub importer. Unfortunately, week 5 went anything but according to plan. Sure, I fixed the <a href="http://cavemonkey50.com/2008/06/soc-atompub-week-4-status/">bugs found at the end of last week</a>, but new issues came to light, requiring changes in the week&#8217;s plan.</p>
<h3>New Issues Found</h3>
<p>Additional testing early in the week by my mentor Lloyd brought forth some coding challenges. First off, Lloyd found a few error messages on import. Those were quickly resolved, but once Lloyd made it past the error messages, he found the performance of the importing to be subpar.</p>
<p><span id="more-1412"></span>After adding some performance measurements to the importer, the source of the problem was revealed. The multiple requests of different feeds of data adds up over time. Essentially, for every post the importer needs to ping the post URL to check for a 404 (draft status), request the comments feed, and request the trackbacks XML-RPC data. Each post was taking over a second, quickly adding up over time.</p>
<h3>Progress, Progress, Progress</h3>
<p>Unfortunately, nothing can be done at this time to lower the request time; the feed requests are at the mercy of the internet. However, the notifications can be enhanced so a user is not wondering why the importer has not finished.</p>
<p>So, after discussing the issue with Lloyd, I think a progress bar is needed in this situation. Unfortunately, due to the nature of PHP applications, I can&#8217;t just add a progress bar out of nowhere. I will need to modularize the importer into a more AJAXy interface, so an AJAX progress bar can be updated with the import status. I will begin looking at solutions for this later in the upcoming week.</p>
<h3>Even More Issues</h3>
<p>The performance issues was not my only problem this week. Lloyd found that when importing from a blog with 3,000 entries, the importer ran out of memory. Surprisingly, it ran out of memory around 130MB, which would be crazy under a normal web server, given PHP is typically limited to 16MB of RAM.</p>
<p>Once this issue was pointed out to me, I quickly found the problem. I had been putting all entries in a massive array before looping through them to import. So, to correct this I limited the importer to batches of 20 posts at a time, freeing the memory between each set of posts. This appears to have corrected the problem.</p>
<p>In addition to the memory leak, I found out that the comments feed has the same 20 comments as time restriction that the main feed had. Already familiar with the issue for the main feed, I corrected that issue and all comments started to be imported.</p>
<h3>Outlook Looks Good</h3>
<p>Despite the massive amounts of issues discovered this week, I think the future of the importer is looking better than ever. Some major hurdles were overcome this week, and because of that, this week ends with a more memory efficient, error-free version of the importer.</p>
<p>With the new discoveries, obviously the plan has been changed a bit. Currently, I&#8217;m looking at finally (and yes, I mean finally) writing the code to automatically detect the Atom API feed at the beginning of next week. From there, I will begin working on updating the interface to be more AJAXy, providing notifications along the way. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/06/soc-atompub-week-5-status/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 4 Status</title>
		<link>http://cavemonkey50.com/2008/06/soc-atompub-week-4-status/</link>
		<comments>http://cavemonkey50.com/2008/06/soc-atompub-week-4-status/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 03:33:04 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1410</guid>
		<description><![CDATA[Now completing the fourth week of coding, the AtomPub importer is finally starting to take shape. This week I managed to retrieve trackbacks, successfully start importing the previously retrieved data into WordPress, and added a user interface enhancement. Trackbacks Are Go If you remember last week, I had some difficulties getting trackbacks working. Well, thankfully [...]]]></description>
			<content:encoded><![CDATA[<p>Now completing the fourth week of coding, the AtomPub importer is finally starting to take shape. This week I managed to retrieve trackbacks, successfully start importing the previously retrieved data into WordPress, and added a user interface enhancement.</p>
<h3>Trackbacks Are Go</h3>
<p>If you remember last week, I had some <a href="http://cavemonkey50.com/2008/06/soc-week-3-status/">difficulties getting trackbacks working</a>. Well, thankfully that is no longer the case. Earlier this week <a href="http://joseph.randomnetworks.com/">Joseph Scott</a> helped me figure out the code needed for accessing TypePad&#8217;s XML-RPC API. With this addition, all standard blog data is now being imported.</p>
<p><span id="more-1410"></span><br />
<h3 class='more'>Importing is Go</h3>
<p>After solving the trackback dilemma, I started working on actually importing the array&#8217;s retrieved from the AtomPub server. Since much of the import code is shared between other WordPress importers, this process went fairly quickly. I only needed to make a few minor adjustments on some code, and by Thursday arrays were becoming rows in WordPress&#8217; database.</p>
<h3>Notifications Are Go</h3>
<p>After testing importing several times, a logical enhancement occurred to me. Occasionally the AtomPub server can take a while to respond and feed the data into WordPress. During this time, a user would be sitting at the initial page with no notification of activity other than the browser&#8217;s loading notification. This event could have raised suspicions that the page was not loading, when in fact everything was working perfectly. So, I added a small <a href="http://en.wikipedia.org/wiki/Throbber">throbber</a> and message text while the importing occurs. The enhancement is small, but it should bring a piece of mind to those getting antsy.</p>
<p><img src="http://cavemonkey50.com/wp-content/uploads/2008/06/throbber.png" alt="AtomPub Throbber" title="AtomPub Throbber" width="500" height="26" class="alignnone size-full wp-image-1411 noborder" /></p>
<h3>Bugs Are Go</h3>
<p>What would a coding project be without bugs. Today, my mentor Lloyd notified me of several small bugs. It turns out the importer has been generating warning messages left and right. I&#8217;ve been oblivious to this since apparently <a href="http://www.mamp.info/en/index.php">MAMP</a> had PHP error reporting disabled. I have since <a href="http://www.jhuskisson.com/code-tidbits/re-enabling-error-reporting-in-mamp">enabled error reporting</a>, and will start fixing the small bugs early next week.</p>
<p>Unfortunately, a major bug was also discovered. Lloyd found that only 20 entries will import. Since I&#8217;ve been working with only a few entries at a time, I had not run into this problem yet. I suspect the issue is with the AtomPub server, and an additional request will be needed for each set entries over 20. I&#8217;ll know more next week when I take a closer look at the issue.</p>
<h3>Ronald is coding &#8230;and he has a plan.</h3>
<p>I hope someone gets the above reference. Anyway, as you may have guessed, the early part of next week will focus solely on tackling the bugs found today. Hopefully the issues will not be problematic so I can begin the next task: allowing users to select an author to import all entries under. Once the author override code is committed, the next step on my coding agenda is to finally write the code to automatically the detect the AtomPub URL based on the website&#8217;s blog address. Those three items should keep me busy next week, and as always, I&#8217;ll let you know next week how the coding went. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/06/soc-atompub-week-4-status/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 3 Status</title>
		<link>http://cavemonkey50.com/2008/06/soc-week-3-status/</link>
		<comments>http://cavemonkey50.com/2008/06/soc-week-3-status/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 02:42:38 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1408</guid>
		<description><![CDATA[Week 3 of the Summer of Code has been by far the most productive week yet. The main focus of this week was to parse the AtomPub data into a PHP array, and I&#8217;m pleased to say this was a success. The XML Parser I started the week off by writing the custom XML parser [...]]]></description>
			<content:encoded><![CDATA[<p>Week 3 of the Summer of Code has been by far the most productive week yet. The main focus of this week was to parse the AtomPub data into a PHP array, and I&#8217;m pleased to say this was a success.</p>
<h3>The XML Parser</h3>
<p>I started the week off by writing the custom XML parser I talked about <a href="http://cavemonkey50.com/2008/06/soc-atompub-week-2-status/">last week</a>. To do this, I researched several different methods for utilizing PHP&#8217;s <a href="http://www.php.net/xml_parse">xml_parse function</a>. Since the parsing occured on an established standard where the tag names will not change on me, I decided to parse the tags based on a tag name <a href="http://www.php.net/switch">switch</a>. This worked well until I started running into nested tags. Although, that problem was quickly resolved with the use of a few class variables.</p>
<p><span id="more-1408"></span><br />
<h3 class='more'>Missing Data</h3>
<p>Once the XML was in a parsed array, I began looking over the array and envisioned how this data would import into WordPress. During this process, I realized the AtomPub feed was missing two bits of key data: the draft status of posts and a list of trackbacks. I immediately began looking into possible workarounds.</p>
<p>While I investigated solutions, my mentor Lloyd discussed the missing data with Six Apart. We were assured support for <a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html#rfc.section.13.1.1">app:draft</a> was on their todo list, but they did not commit to any date for availability. So, Lloyd gave me the go ahead for workarounds.</p>
<p>To solve the draft problem, I ended up creating a 404 checker. Assuming that drafts will not be published, the URL for the post should result in a 404. Knowing this, while posts are imported I loop through the URLs and check the HTTP status codes. The workaround certainly isn&#8217;t the best as it&#8217;s resource intensive, but for the time being it works.</p>
<p>After fixing the draft problem, I looked into solutions for the missing trackbacks. I found <a href="http://www.sixapart.com/developers/xmlrpc/movable_type_api/mtgettrackbackpings.html">this function</a> on TypePad&#8217;s XML-RPC developer site, however, attempts to implement the function call have failed me. So, I continued to search for alternatives.</p>
<p>I found out today that Movable Type has a <a href="http://www.movabletype.org/documentation/trackback_manual.html#trackback%20ping%20format">hidden RSS feed for trackbacks</a>. I tested this and indeed is it true. Unfortunately, TypePad does not seem to have this feed. My guess is this is because of their <a href="http://www.typepad.com/pricing/">premium pricing model</a>, removing support for additional and custom templates in the lower tiers. If anyone happens to know the super-secret URL for a post&#8217;s trackbacks on TypePad, I would love to know, but I truly believe that feed does not exist.</p>
<p>Therefore, the search for a trackback solution continues. For the time being this is being put on the back-burner. When I get some free time over the next couple of weeks or during the second half of the Summer of Code I will revisit this problem, but at the moment trackback support is being forgone.</p>
<h3>Next Week&#8217;s Plan</h3>
<p>So, what&#8217;s up for next week? Early next week I plan on working on the actual importing of data into WordPress. All the arrays are prepped and the functions are ready, so the importing process should go fairly quickly. I&#8217;m actually anticipating finishing up the import code by the middle of next week, but if things don&#8217;t go to plan I have until the end of the following week. Should I finish early, I will revisit some of the priority two items accumulated over the past few weeks. With a little luck, next week will bring a functioning importer with some additional fixes. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/06/soc-week-3-status/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SoC: AtomPub Week 2 Status</title>
		<link>http://cavemonkey50.com/2008/06/soc-atompub-week-2-status/</link>
		<comments>http://cavemonkey50.com/2008/06/soc-atompub-week-2-status/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 02:31:20 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1407</guid>
		<description><![CDATA[While I didn&#8217;t blog about last week&#8217;s status, significant progress has been made in parsing TypePad and Movable Type AtomPub feeds (well, parsing TypePad feeds). This week started off by completing more research on the AtomPub spec. In order to parse an AtomPub feed, I had to learn about X-WSSE authentication. From there, I found [...]]]></description>
			<content:encoded><![CDATA[<p>While I didn&#8217;t blog about <a href="http://groups.google.com/group/wordpress-soc-2008/t/baf8e2a27f76b3aa">last week&#8217;s status</a>, significant progress has been made in parsing TypePad and Movable Type AtomPub feeds (well, parsing TypePad feeds). This week started off by completing more research on the AtomPub spec. In order to parse an AtomPub feed, I had to learn about <a href="http://www.xml.com/pub/a/2003/12/17/dive.html">X-WSSE authentication</a>. From there, I found a great <a href="http://scripts.ringsworld.com/content-management/webpad-3.0-personal/plugins/-blogging/class.wsse.php.html">X-WSSE class</a> that <a href="http://groups.google.com/group/wordpress-soc-2008/t/8bd7ae6d7cb17eb">I included</a> in my test version of WordPress. Then, the fun began.</p>
<h3>Movable Type Hates Me</h3>
<p>Almost immediately, I was retrieving the RAW XML of TypePad&#8217;s AtomPub feed. Unfortunately, I could not say the same for Movable Type. Due to some server configuration issues on my end or possibly a bug in Movable Type, I am unable to retrieve Movable Type AtomPub feeds at the moment. I&#8217;ve tried <a href="http://www.tbray.org/ape/">various</a> <a href="http://www.witha.jp/eXeries/software/">methods</a> of parsing the feed and each method returns <a href="http://mt.cavemonkey50.com/mt/mt-atom.cgi/weblog">the same cryptographic error message</a>. I&#8217;ve called in the experts (my mentor, Lloyd) to help me, but if anyone has any clue as to why Movable Type hates me, I would appreciate the feedback.</p>
<p><span id="more-1407"></span><br />
<h3 class='more'>Parsing the Feed</h3>
<p>Regardless of the error, I kept on trucking with the TypePad AtomPub feed, knowing that Movable Type will fall in line once I can figure out my retrieval problems. Working with TypePad&#8217;s feed, I started trying different methods of Atom parsing. I first tried WordPress&#8217; built in <a href="http://magpierss.sourceforge.net/">Magpie</a> parser, but due to Magpie not supporting Atom 1.0, that was little help. I then tried some <a href="http://www.php.net/manual/en/ref.xml.php">code snippets on php.net</a>, but unfortunately none of the snippets parsed in the manner I required. So, I started <a href="http://www.php.net/manual/en/ref.xml.php">writing my own basic XML parser</a>.</p>
<p>That&#8217;s where I stand today. This coming week I will continue writing my custom XML parser, completing the parser by the end of next week. The goal is to have all AtomPub data in array, so I certainly have my work cut out for me. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/06/soc-atompub-week-2-status/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Summer of Code 2008 Kickoff</title>
		<link>http://cavemonkey50.com/2008/05/summer-of-code-2008-kickoff/</link>
		<comments>http://cavemonkey50.com/2008/05/summer-of-code-2008-kickoff/#comments</comments>
		<pubDate>Mon, 26 May 2008 20:16:06 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1405</guid>
		<description><![CDATA[Google&#8217;s Summer of Code 2008 is officially underway! This year I am working on creating an AtomPub-based content importer for WordPress. The goal is to import entries and other content from Movable Type and TypePad into WordPress in as few clicks as possible. Since the AtomPub spec (RFC 5023) is so new, this should prove [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/soc/2008/">Google&#8217;s Summer of Code 2008</a> is officially underway! This year I am working on creating an <a href="http://groups.google.com/group/wordpress-soc-2008/web/movable-type-typepad-atompub-based-content-importer">AtomPub-based content importer for WordPress</a>. The goal is to import entries and other content from Movable Type and TypePad into WordPress in as few clicks as possible.</p>
<p>Since the AtomPub spec (<a href="http://www.ietf.org/rfc/rfc5023.txt">RFC 5023</a>) is so new, this should prove to be an interesting summer. I will be one of the first to implement a real world use of AtomPub, and I suspect documentation will be scarce. Regardless, I am up for the challenge and can&#8217;t wait to see how the end product turns out.</p>
<p>If you&#8217;re interested in the progress of this project, just stayed tuned to this blog. I will be blogging weekly updates on my progress, so you will always know where I stand. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/05/summer-of-code-2008-kickoff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>To iPhone Development and Beyond!</title>
		<link>http://cavemonkey50.com/2008/04/to-iphone-development-and-beyond/</link>
		<comments>http://cavemonkey50.com/2008/04/to-iphone-development-and-beyond/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 23:22:57 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[The Real Life]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1399</guid>
		<description><![CDATA[When Apple first unveiled the iPhone and iPod touch&#8217;s SDK I welcomed it with joy. Watching the keynote filled my mind with excitement as the SDK appeared extremely powerful for developers. I envisioned future applications I would be using, however, the thought of developing my own application never crossed my mind. Now four weeks later, [...]]]></description>
			<content:encoded><![CDATA[<p>When Apple first unveiled the iPhone and iPod touch&#8217;s <abbr title="Software Development Kit">SDK</abbr> I welcomed it with joy. Watching the keynote filled my mind with excitement as the SDK appeared extremely powerful for developers. I envisioned future applications I would be using, however, the thought of developing my own application never crossed my mind.</p>
<p>Now four weeks later, I am seriously considering developing my first non-web application. The iPhone seems like the perfect platform for such a task, thanks to its powerful SDK and numerous development tools.</p>
<p><span id="more-1399"></span><br />
<h3 class='more'>The Beginnings of Native Application Development</h3>
<p>I know what you&#8217;re thinking. Why haven&#8217;t I developed a native application yet? Well, while I know C++ and Java, neither of my courses ever entered the realm of graphical user interfaces. Everything I have done thus far with native application development has been strictly confined to the command-line. Not very helpful in today&#8217;s GUI-driven world. Also, while C++ is useful on the Windows side, Mac OS X is strictly Objective-C, presenting a minor barrier to my development entrance.</p>
<p>That is all about to change, though. I just scheduled a required course next semester in object-oriented programming. If I am unable to learn Objective-C on my own, <a href="http://bulletins.psu.edu/bulletins/bluebook/university_course_descriptions.cfm?letter=I&#038;courselong=IST%7c311%7clatest">IST 311</a> should help me fill in the gaps.</p>
<p>Although, more importantly, the iPhone SDK offers something I have yet to fully discover in Mac OS X development: an interface builder. The iPhone interface builder looks drop-dead simple, hopefully helping me cross over into GUI development.</p>
<h3>Picking an Application to Develop</h3>
<p>Now that the technical hurdles have been overcome, the real challenge lies ahead. I need to come up with an application to develop. While I&#8217;m learning I will stick to simplistic applications, such as &#8220;Hello World&#8221; and others, however eventually I would love to develop an application that others will use. That should not be difficult as the iPhone, being a new platform, will have numerous voids to fill.</p>
<p>I will be sure to keep you updated in my crossover into native application development. In the mean time, if anyone has any ideas for applications, I would enjoy hearing them. I am trying to stay unique, as I am certain when the Apple Store is launched there will be a plethora of To Do applications and so on, but do not hold back on your suggestions. Anyway, I hope to see you on the flip-side, a native iPhone application, soon. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/04/to-iphone-development-and-beyond/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Long Time, No Blog: Catching Up</title>
		<link>http://cavemonkey50.com/2008/04/long-time-no-blog-catching-up/</link>
		<comments>http://cavemonkey50.com/2008/04/long-time-no-blog-catching-up/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 21:48:14 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[On the Web]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[The Real Life]]></category>
		<category><![CDATA[cell phone]]></category>
		<category><![CDATA[freenas]]></category>
		<category><![CDATA[motorola]]></category>
		<category><![CDATA[paul stamatiou]]></category>
		<category><![CDATA[south park]]></category>
		<category><![CDATA[verizon]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[z6tv]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/?p=1397</guid>
		<description><![CDATA[Over the past few months, I&#8217;ve neglected regular posts. I don&#8217;t like that one bit. Many interesting articles have passed me by, and I&#8217;m not going to let that happen again. While I can&#8217;t promise a complete turnaround, I will promise I&#8217;ll do my best to catch you up, starting right now. Phone Review: Motorola [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few months, I&#8217;ve neglected regular posts. I don&#8217;t like that one bit. Many interesting articles have passed me by, and I&#8217;m not going to let that happen again. While I can&#8217;t promise a complete turnaround, I will promise I&#8217;ll do my best to catch you up, starting right now.</p>
<h3>Phone Review: Motorola RIZR Z6tv</h3>
<p>Back in November <a href="http://cavemonkey50.com/2007/11/a-video-update/">I purchased a new phone</a>, and I promised I would review it. While this will be no spectacular review, here are my thoughts on my new phone.</p>
<p><span id="more-1397"></span>I absolutely love the RIZR Z6tv. Although the Z6tv has nowhere near the functionality of the iPhone (I have an iPod touch for that), it functions just fine as a traditional cellular headset. The features are great, all Bluetooth profiles are enabled, the new Verizon user interface is a welcome improvement, and the reception is marvelous. In fact, I would say the reception is the best &#8220;new&#8221; feature of the phone. I&#8217;m seeing coverage in areas where I previously had little to no signal, and I&#8217;m picking up EVDO in areas where I previously had a weak 1x signal. If you&#8217;re in the market for a traditional cell phone with Verizon, I would not hesitate picking up a Motorola RIZR Z6tv.</p>
<h3>FreeNAS Revisted</h3>
<p>Early February, <a href="http://paulstamatiou.com/">Paul Stamatiou</a> managed to generate some buzz with his <a href="http://paulstamatiou.com/2008/01/25/diy-200-dollar-pc">200 Dollar PC series</a>. I took the bait and ended up significantly upgrading <a href="http://cavemonkey50.com/2007/06/freenas-a-free-powerful-nas/">my FreeNAS box</a>. While I had originally planned the upgrade purely around saving space with the Mini-ITX form factor, a few weeks later I found myself completely overhauling the storage as well. I&#8217;m glad I did, as my FreeNAS box is now my central storage hub. I backup with Time Machine, rsync website backups, connect remotely over FTP, and store nearly every season of my favorite television shows directly to <a href="http://www.flickr.com/photos/cavemonkey50/sets/72157603860573127/">my small, slick server</a>. Here are the specs to get your geek on:</p>
<ul>
<li>Apex MI-100 Mini-ITX Case</li>
<li>Intel BLKD201GLYL Mini-ITX Motherboard with Integrated Celeron 215</li>
<li>Kingston 512MB DDR2 RAM</li>
<li>3x500GB Western Digital Caviar Hard Drives in 1TB RAID5</li>
<li>Secondary NIC for Wireless and Wired Backups</li>
<li>External USB 320GB Seagate Barracuda (Time Machine)</li>
</ul>
<h3>WordPress 2.5</h3>
<p>I&#8217;d like to now give an awesome shout-out to the <a href="http://wordpress.org/about/">WordPress commit crew</a> and <a href="http://happycog.com/">Happy Cog</a> for a great release of WordPress 2.5. I&#8217;ve upgraded my blog earlier this week and couldn&#8217;t be happier. I thought WordPress 2.3 was amazing from a developer standpoint, but you blew that out of the water with an even better user release. Here&#8217;s to many more.</p>
<p>With that said, earlier in the week I completed <a href="http://cavemonkey50.com/code/">my plugin and theme</a> upgrades to WordPress 2.5. All plugins that I currently support should now work fine under WordPress 2.5. However, WordPress 2.3 users be weary. I dropped support for WordPress 2.3 in the majority of my releases to help speed up adoption of WordPress 2.5.</p>
<h3>Funny Moment of the Week</h3>
<p>I&#8217;d like to bring this post to close with perhaps the greatest moment of this South Park season so far. I don&#8217;t want to spoil the funny, so just sit back and enjoy the next two clips. If you like what you see, <a href="http://www.southparkstudios.com/episodes/165203">watch the full episode</a>.</p>
<p><embed src="http://media.mtvnservices.com/mgid:cms:item:southparkstudios.com:165195:" type="application/x-shockwave-flash" wmode="window" width="480" height="360" allowFullscreen="true" allowScriptAccess="always"></embed></p>
<p><embed src="http://media.mtvnservices.com/mgid:cms:item:southparkstudios.com:165196:" type="application/x-shockwave-flash" wmode="window" width="480" height="360" allowFullscreen="true" scriptAccess="always"></embed> </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/04/long-time-no-blog-catching-up/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>My Proposal for Google&#8217;s Summer of Code 2008</title>
		<link>http://cavemonkey50.com/2008/03/my-proposal-for-googles-summer-of-code-2008/</link>
		<comments>http://cavemonkey50.com/2008/03/my-proposal-for-googles-summer-of-code-2008/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 01:28:05 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[movable type]]></category>
		<category><![CDATA[summer of code]]></category>
		<category><![CDATA[typepad]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/2008/03/my-proposal-for-googles-summer-of-code-2008/</guid>
		<description><![CDATA[Summer is quickly coming upon us, and it&#8217;s that time of year to start working on Summer of Code proposals. As you may remember, I participated in the Summer of Code last summer by creating a podcasting plugin for WordPress. This year I hope to participate again, adding something that will hopefully be included in [...]]]></description>
			<content:encoded><![CDATA[<p>Summer is quickly coming upon us, and it&#8217;s that time of year to start working on <a href="http://code.google.com/soc/2008/">Summer of Code</a> proposals. As you may remember, <a href="http://cavemonkey50.com/2007/04/im-participating-in-googles-summer-of-code-2007/">I participated in the Summer of Code last summer</a> by creating <a href="http://cavemonkey50.com/code/podcasting/">a podcasting plugin for WordPress</a>. This year I hope to participate again, adding something that will hopefully be included in WordPress&#8217; core: an AtomPub-based content importer for <a href="http://www.movabletype.com/">Movable Type</a> and <a href="http://www.typepad.com/">TypePad</a>. What follows is my proposal. Any and all feedback is welcome.</p>
<h3>What is AtomPub?</h3>
<p>AtomPub is an established standard for editing web resources (RFC 5023). Through AtomPub, content and media can be retrieved and edited with ease. Many content management systems have started implementing the standard, including WordPress as of version 2.3. Movable Type and TypePad, the targeted import environments, have added official support as of the beginning of this year.</p>
<p><span id="more-1396"></span><br />
<h3 class='more'>What would an AtomPub-based Movable Type / TypePad Importer Bring to WordPress?</h3>
<p>The number one added benefit of an AtomPub-based importer would be convenience. Currently, importing from Movable Type / TypePad requires an export file to be created. While uploading this file is easy enough, the process could be simplified.</p>
<p>By importing through AtomPub, only the URL location of the former blog and login credentials are needed; similar to the way the current Blogger importer works. The importer would be able to retrieve all required content information and complete the process with a single click, entirely over the internet.</p>
<h3>My Proposed Solution</h3>
<ul>
<li>Import all content information (posts, pages, categories, tags, etc) from an AtomPub-based Movable Type / TypePad installation in as few clicks as possible.</li>
<li>Investigate providing a media import option. This option, if feasible, would import all media (pictures, etc) from a TypePad / Movable Type installation into WordPress 2.5&#8242;s new media manager, copying the content to /wp-content as needed.</li>
<li>Investigate the possibility of extending AtomPub-based importers to other blogging platforms.</li>
</ul>
<h3>Additional Information</h3>
<ul>
<li><a href="http://www.ietf.org/rfc/rfc5023.txt">AtomPub RFC Spec</a></li>
<li><a href="http://codex.wordpress.org/AtomPub">WordPress&#8217; AtomPub Support</a></li>
<li><a href="http://www.movabletype.org/2007/12/atompub_support_and_new_edit_a.html">Movable Type&#8217;s Announcement of AtomPub Support</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/03/my-proposal-for-googles-summer-of-code-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.5 and My Plugins / Themes</title>
		<link>http://cavemonkey50.com/2008/03/wordpress-25-and-my-plugins-themes/</link>
		<comments>http://cavemonkey50.com/2008/03/wordpress-25-and-my-plugins-themes/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 03:05:38 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[On the Web]]></category>
		<category><![CDATA[Site News]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/2008/03/wordpress-25-and-my-plugins-themes/</guid>
		<description><![CDATA[If everything went according to plan, WordPress 2.5 should be out about now. Unfortunately, I have no clue as I&#8217;m currently on a plane heading to Las Vegas, Nevada for Spring Break. If WordPress 2.5 has been released, I just wanted to let the users of my plugins and themes know I now have 2.5 [...]]]></description>
			<content:encoded><![CDATA[<p>If everything went according to plan, <a href="http://wordpress.org/">WordPress 2.5</a> should be out about now. Unfortunately, I have no clue as I&#8217;m currently on a plane heading to Las Vegas, Nevada for Spring Break. If WordPress 2.5 has been released, I just wanted to let the users of <a href="http://cavemonkey50.com/code/">my plugins and themes</a> know I now have 2.5 compatible versions. If I was unable to get a WordPress 2.5 version out the door, there should be a notice on the plugin page giving update information.</p>
<p>Feel free to <a href="http://cavemonkey50.com/code/">email me</a> any problems you experience, and I will address them when I return from Spring Break. Enjoy WordPress 2.5, and I will talk to you later this week. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/03/wordpress-25-and-my-plugins-themes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google Analyticator 2.0</title>
		<link>http://cavemonkey50.com/2008/02/google-analyticator-20/</link>
		<comments>http://cavemonkey50.com/2008/02/google-analyticator-20/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 00:53:19 +0000</pubDate>
		<dc:creator>Ronald Heft</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google analyticator]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://cavemonkey50.com/2008/02/google-analyticator-20/</guid>
		<description><![CDATA[As you probably have noticed, I&#8217;ve been very busy lately. I am working to expand my freelance business, all while maintaining good grades in college. So, I had to cut some corners. I fell apart on updating my blog and some of my plugins have lagged behind. Thankfully, today I finally break the silence with [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably have noticed, I&#8217;ve been very busy lately. I am working to expand <a href="http://ronaldheft.com/">my freelance business</a>, all while maintaining good grades in college. So, I had to cut some corners. I fell apart on updating my blog and some of my plugins have lagged behind. Thankfully, today I finally break the silence with this update (I still plan on actually writing something just for the blog later this week).</p>
<p>A few minutes ago I released <a href="http://cavemonkey50.com/code/google-analyticator/">Google Analyticator 2.0</a>. If you&#8217;re new to my plugins, Google Analyticator is a WordPress-based <a href="http://www.google.com/analytics/">Google Analytics</a> tracking plugin. Version 2.0 adds support for <a href="http://analytics.blogspot.com/2007/12/announcing-new-graphing-tools-gajs.html">Google&#8217;s latest tracking code (ga.js)</a>, and brings along all the great new tracking features with it. <a href="http://cavemonkey50.com/code/google-analyticator/">Check out the new version</a> over in the <a href="http://cavemonkey50.com/code/">code section</a> of my site. </p>
]]></content:encoded>
			<wfw:commentRss>http://cavemonkey50.com/2008/02/google-analyticator-20/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
