<?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"
	>

<channel>
	<title>loggedoff.org</title>
	<atom:link href="http://loggedoff.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://loggedoff.org</link>
	<description>leveraging technology to enhance everyday life</description>
	<pubDate>Mon, 27 Aug 2007 14:09:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Using WordPress as a CMS</title>
		<link>http://loggedoff.org/articles/2007/02/17/using-wordpress-as-a-cms/</link>
		<comments>http://loggedoff.org/articles/2007/02/17/using-wordpress-as-a-cms/#comments</comments>
		<pubDate>Sun, 18 Feb 2007 05:37:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[]]></category>

		<guid isPermaLink="false">http://loggedoff.org/articles/2007/02/17/using-wordpress-as-a-cms/</guid>
		<description><![CDATA[For a recent project I needed to setup an Intranet. I was hoping to find a system that would allow different departments to add and update their sections and have all of the navigation, search, etc built in. I tried out a number of content management systems, wikis, and blogging packages. None of them seemed [...]]]></description>
			<content:encoded><![CDATA[<p>For a recent project I needed to setup an Intranet. I was hoping to find a system that would allow different departments to add and update their sections and have all of the navigation, search, etc built in. I tried out a number of content management systems, wikis, and blogging packages. None of them seemed to be a good fit. Simplicity for the editors was a key factor as was simplicity of maintenance.</p>
<p>To start, I spent some time on <a href="http://opensourcecms.com/">Open Source CMS</a> playing with the various CMS tools out there. This was an a very valuable tool that made it possible to try out a number of content management systems without spending the time to install them. After playing with them, I decided to pursue installing <a href="http://drupal.org/">Drupal</a>. I installed it and played around with it for a while to get familiar with the administrative interface and more importantly, to get a feel for what the contributors would experience. I ended up frustrated with the lack of usability for contributors.</p>
<p>I moved on to wikis to see if one of them would fit the bill. I installed <a href="http://twiki.org/">TWiki</a> and <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> to try them out. In past lives I had experienced Intranets that were not kept up to date because the editing process was poorly understood or too cumbersome (or both). From that perspective, a wiki seemed like it would be a match. Unfortunately, while very simple to keep the content up to date, none of the WYSIWYG tools provided a good enough interface for the contributors.</p>
<p>As one last effort to avoid using <a href="http://www.adobe.com/products/contribute/">Adobe Contribute</a> with static pages, I thought I would investigate using <a href="http://wordpress.org/">WordPress</a>. A <a href="http://myhep.com/">friend</a> mentioned that he had used it for some simple sites. I really like the cleanliness of WordPress. Unfortunately, out of the box it wasn&#8217;t going to meet my needs. I did some research via Google, finding a number of people attempting to shoehorn WordPress into the role of a CMS. I found a number of blogs detailing some steps to get WordPress closer to a CMS:</p>
<ul>
<li><a href="http://www.onlamp.com/pub/a/onlamp/2006/04/20/from-weblog-to-cms.html">From Weblog to CMS with WordPress</a></li>
<li><a href="http://www.grahamazon.com/wordpress-as-cms/">WordPress as CMS</a></li>
<li><a href="http://www.bloggingpro.com/archives/2006/08/26/feature-5-reasons-to-use-wordpress-as-cms/">Feature: 5 Reasons to Use WordPress as CMS</a></li>
<li><a href="http://www.blazenewmedia.com/articles/five-wordpress-cms-enabling-plugins">Five Wordpress &quot;CMS Enabling&quot; Plugins</a></li>
</ul>
<p>From those entries I came up with the following plug-ins that seemed necessary to get what I wanted:</p>
<ul>
<li><a href="http://www.dagondesign.com/articles/sitemap-generator-plugin-for-wordpress/">Dagon Design Sitemap Generator</a></li>
<li><a href="http://dancameron.org/wordpress/wordpress-plugins/search-everything-wordpress-plugin/">Search Everything</a></li>
<li><a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">Role Manager</a></li>
<li><a href="http://www.blog.mediaprojekte.de/cms-systeme/wordpress/wordpress-plugin-search-hilite/">Search_Hilite</a></li>
<li><a href="http://plugins.baptiste.us/plugins/xinha4wp/">Xinha4WP</a></li>
</ul>
<p>The final piece that made me think it would all be possible was the Xinha4WP plugin. The contributors wanted to be able to have rich editing capability and Xinha provided the support I needed. Role Manager also is a critical piece to allow each person to have the appropriate permissions for editing and adding content.</p>
<p>The final coup was finding a lead on the <a href="http://maisonbisson.com/blog/post/10834/">MaisonBisson</a> blog that would allow contributors to use existing applications like ecto, MarsEdit, or Contribute to create and edit content. The post appears to focus on an older version of WordPress, but I was able to get it working with WordPress 2.1 with only the following change to the wp_get_recent_posts function in wp-includes/post.php:</p>
<p>Find:</p>
<blockquote><p><code>$sql = &quot;SELECT * FROM $wpdb-&gt;posts WHERE post_type = 'post' ORDER BY post_date DESC $limit&quot;;</code></p></blockquote>
<p>Change to:</p>
<blockquote><p><code>$sql = &quot;SELECT * FROM $wpdb-&gt;posts WHERE post_type IN ('post', 'page') ORDER BY post_date DESC $limit&quot;;</code></p></blockquote>
<p>Shazam. Now I have a solution that meets all of my requirements! Now to see if it isn&#8217;t already too late to reverse the Adobe Contribute + static pages decision that was already made.</p>
<p>&nbsp;</p>
<p><strong>[UPDATE]</strong> The Role Manager plugin mentioned above is not compatible with WordPress 2.1 and later. It has been updated and is now available here: <a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">http://www.im-web-gefunden.de/wordpress-plugins/role-manager/</a>.<br />&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://loggedoff.org/articles/2007/02/17/using-wordpress-as-a-cms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>API Projects for 37signals&#8217; Applications</title>
		<link>http://loggedoff.org/articles/2006/07/20/api-projects-for-37signals-applications/</link>
		<comments>http://loggedoff.org/articles/2006/07/20/api-projects-for-37signals-applications/#comments</comments>
		<pubDate>Thu, 20 Jul 2006 21:07:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
I just finished hooking up Marshmallow to put some automatic notifications into my Campfire chat and found that getting APIs hooked up and seeing two otherwise disconnected systems work together is just as fun now as it was back when I was just learning to write software. There is something satisfying about seeing the result.


I [...]]]></description>
			<content:encoded><![CDATA[<p>
I just finished hooking up Marshmallow to put some automatic notifications into my Campfire chat and found that getting APIs hooked up and seeing two otherwise disconnected systems work together is just as fun now as it was back when I was just learning to write software. There is something satisfying about seeing the result.
</p>
<p>
I decided to compile a list of the various projects that are using the APIs from <a href="http://37signals.com">37signals</a> to integrate various projects together. I haven&#8217;t actually used the Backpack APIs, but once I got going on the list, I figured I would finish the job and include all the products. These projects are not all using published APIs, but why not err on the side of a more interesting list of integrations rather than only look at official API use:
</p>
<p>
<strong>Basecamp</strong> (<a href="http://www.basecamphq.com/api/">API Docs</a>)
</p>
<ul>
<li><a href="http://loggedoff.org/telescope.html">Telescope</a></li>
<li><a href="http://blinksale.com">Blinksale</a></li>
<li><a href="http://luckymonk.com/articles/2006/05/31/scout-tablet-pc-basecamp">Scout</a></li>
<li><a href="http://www.projectdetail.com/">BCTix</a></li>
<li><a href="http://www.tickspot.com/">Tick</a></li>
<li><a href="http://basecamp.helicoid.net/login">Basecamp mobile</a></li>
<li><a href="http://www.sproutit.com/">Mailroom</a> (<a href="http://www.sproutit.com/articles/bigact/534">Blog entry</a>)</li>
<li><a href="http://www.webtypes.com/2006/03/31/subversion-post-commit-hook-using-basecamp-api">Subversion Post-Commit Hook</a></li>
<li><a href="http://futuretrack5.com/articles/2006/04/11/basecamp-api-in-xhtmlized">Futuretrack5</a></li>
<li><a href="http://www.clearwired.com/sundial/">Sundial</a></li>
</ul>
<p>
<strong>Backpack</strong> (<a href="http://www.backpackit.com/api/">API Docs</a>)
</p>
<ul>
<li><a href="http://infinitenil.com/packrat/">PackRat</a></li>
<li><a href="http://radar.oreilly.com/book/">O&#8217;Reilly Radar Books</a></li>
<li><a href="http://chipt.com/">Backpack Dashboard Widget</a></li>
<li><a href="http://www.celltell.tv/backpack/">cellTell voiceNote</a></li>
</ul>
<p>
<strong>Campfire</strong> (no official API)
</p>
<ul>
<li><a href="http://habtm.com/articles/2006/04/14/meet-marshmallow-the-campfire-bot">Marshmallow</a></li>
<li><a href="http://karppinen.fi/pyro/">Pyro</a></li>
</ul>
<p>
<strong>Ta-da List</strong> (no official API)
</p>
<ul>
<li><a href="http://habtm.com/articles/2006/04/14/meet-marshmallow-the-campfire-bot">Ta-da List Widget</a></li>
</ul>
<p>
I am sure there are more than this and I will make an attempt to keep this list up to date as new projects surface. If you are cooking something with an API or are aware of another project using on of these APIs, let&#8217;s hear about it.
</p>
<p>H<strong>API</strong> integrating!</p>
<p>&nbsp;</p>
<p><a target="_blank" href="http://www.digg.com/submit?phase=2&amp;url=http://loggedoff.org/articles/2006/07/20/api-projects-for-37signals-applications">Digg this</a>
</p>
<p style="text-align: right; font-size: 10px;">Technorati Tags: <a rel="tag" href="http://www.technorati.com/tag/37signals">37signals</a>, <a rel="tag" href="http://www.technorati.com/tag/api">api</a>, <a rel="tag" href="http://www.technorati.com/tag/backpack">backpack</a>, <a rel="tag" href="http://www.technorati.com/tag/basecamp">basecamp</a>, <a rel="tag" href="http://www.technorati.com/tag/campfire">campfire</a></p>
]]></content:encoded>
			<wfw:commentRss>http://loggedoff.org/articles/2006/07/20/api-projects-for-37signals-applications/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating a Dashboard Widget for Basecamp with Dashcode</title>
		<link>http://loggedoff.org/articles/2006/07/14/creating-a-dashboard-widget-for-basecamp-with-dashcode/</link>
		<comments>http://loggedoff.org/articles/2006/07/14/creating-a-dashboard-widget-for-basecamp-with-dashcode/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 21:54:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Before I picked up a new MacBook Pro, I knew I wanted to write a Dashboard Widget for Basecamp. What I didn&#8217;t know was that I would also get to try out Apple&#8217;s yet to be officially released Dashcode. A couple of months ago, after the MacBook Pro&#8217;s started shipping, news surfaced that this widget [...]]]></description>
			<content:encoded><![CDATA[<p>Before I picked up a new MacBook Pro, I knew I wanted to write a Dashboard Widget for <a href="http://basecamphq.com/?referrer=jacobsen">Basecamp</a>. What I didn&#8217;t know was that I would also get to try out Apple&#8217;s yet to be officially released Dashcode. A couple of months ago, after the MacBook Pro&#8217;s started shipping, news surfaced that this widget development environment was accidentally included on the DVD&#8217;s that shipped with the laptops.</p>
<p>At around the same time the Dashcode news was wandering around the Mac-centric blogs, <a href="http://37signals.com">37signals</a> released an <a href="http://www.basecamphq.com/api">API for Basecamp</a>. I have been using Basecamp to keep track of our home remodeling project. I decided to take a crack at writing a Dashboard Widget that leveraged the Basecamp API and RSS feed. What follows is a summary of my experiences with Dashcode and with the Basecamp API while creating Telescope&#8211;a Dashboard Widget for Basecamp.</p>
<p><img width="377" height="247" border="0" align="right" alt="DashcodeTemplates.png" src="http://loggedoff.org/files/DashcodeTemplates.png" />Having never written a widget before, I wasn&#8217;t quite sure what was in store. The first screen that appears when launching Dashcode gives an option to start a new project from a predefined template. The three that are included in the MacBook Pro version are Custom, Countdown, and Blog Viewer (really just an RSS reader). As I knew I would be leveraging the Basecamp RSS feed, I chose the Blog Viewer template. Having been through the process once now, I would probably choose to start from the Custom template. I ended up spending a fair amount of time understanding the generated code and ultimately stripped out a bunch of code that I didn&#8217;t need for Telescope. One annoying bug in the generated source was one that made me think the whole thing wasn&#8217;t working and almost pushed me to ditch the idea of using Dashcode for Telescope. It turned out to be a bug in the template code that was attempting to filter the RSS feed to the last n days, causing me to think that the RSS viewer was broken altogether. After fixing that, things looked good to go.</p>
<p>Working with the layout, I encountered my first few bugs with Dashcode. I found that working with the graphical layout tool was a sometimes unpredictable experience&#8211;crashing Dashcode four or five times. At first I thought it was going to be a fruitless exercise due to the bugs. However, after deciding to give it a second shot after a frustrating initial attempt, I was able to avoid the bugs and make some real progress. The bug that was the most annoying was one that crashed Dashcode when editing text label in the layout. Avoiding complete edits of the labels seemed to minimize the crashes.</p>
<p>With the initial layout complete, the crashing was much less frequent. The editor worked well, providing syntax highlighting for the CSS, Javascript, and HTML files, block indenting, keyword completion, line numbers, the ability to jump to functions, and set and clear breakpoints. It&#8217;s not as complete as TextMate, but the integration with the debug environment makes it very useful.</p>
<p>The debugging capability was probably the most useful part of Dashcode. The key features that helped here were breakpoints, quick start/stop of widgets, the stack frame, and the Javascript evaluator. Building Telescope was the first time I had worked with XMLHttpRequest so the stack frame and evaluator were especially helpful in understanding the results I was getting back from the Basecamp API. It was pretty handy to be able to type something like this into the evaluator and see the result:</p>
<div class="typocode">
<pre><code class="typocode_javascript">milestones[0].getElementsByTagName(&quot;milestone&quot;)[i].getElementsByTagName(&quot;completed&quot;)[0].firstChild.nodeValue</code></pre>
</div>
<p>Then you can drop the snippet into the code and quickly restart the widget and see it in action. Much faster and more flexible than putting in alert statements or using the stack frame.</p>
<p>After using the evaluator to become familiar with navigating the XML results, I will probably use <a href="http://prototype.conio.net/">Prototype</a> next time. It was a good learning experience, but I think using Prototype would have been quicker and easier.</p>
<p>One area that took some trial and error was the handling of HTTP authentication. XMLHttpRequest.open supports two ways of doing this. One with the username and password passed as independent parameters to open:</p>
<div class="typocode">
<pre><code class="typocode_javascript">
url = &quot;http://hostname.clientsection.com/project/list&quot;;
projectMilestones.open(&quot;GET&quot;, url, true, basecampUsername, basecampPassword);
</code></pre>
</div>
<p>and the other with the username and password encoded into the URL string as in </p>
<div class="typocode">
<pre><code class="typocode_javascript">
url = &quot;http://&quot; + basecampUsername + &quot;:&quot; + basecampPassword + &quot;@hostname.clientsection.com/project/list&quot;;
projectMilestones.open(&quot;GET&quot;, url, true);
</code></pre>
</div>
<p>I was only successful with the version with the username and password encoded into the URL.</p>
<p>One thing I was grateful for was the simplicity of the Basecamp API. The basic function of Telescope is to give a quick snapshot of current project status. The Basecamp RSS feed give the last 25 changes made. Whether this is for a specific project or all projects, depends on whether you use the project specific feed or the general account feed. Generally, Telescope is more useful when using the general account feed because it allows you to filter the events based on project. The project list comes from the Basecamp API&#8211;giving the user the ability to see updates for any active project.</p>
<p><img width="400" height="274" border="0" align="left" alt="Telescope Screenshot" src="http://loggedoff.org/files/screenshot.png" />In addition to pulling the list of active projects through the API, Telescope also retrieves the milestones for the selected project and displays the next milestone (or the earliest overdue milestone). </p>
<p>With the milestone API you can either pull all milestones for a project or milestones in a specific state. Unfortunately, I wanted both upcoming and overdue. Not wanting to load the server unnecessarily, I asked Jamis (37signals&#8217; Basecamp API wizard) whether more small requests or fewer larger requests were preferable. He indicated a preference for fewer requests so I retrieved all milestones and filtered out the completed ones within Telescope.</p>
<p>This leads me to another topic. I wanted to allow the server to distinguish Telescope from other API requests so 37signals could let me know if Telescope was causing undue load on the servers. I have read a number of threads from server administrators complaining about widgets that refresh too often or otherwise load the servers with no perceived benefit to the widget user. I highly encourage widget creators to be sensitive to those running the applications on which the widgets depend.</p>
<p>One solution I came up with for this still hasn&#8217;t worked. It seemed like the perfect approach would be to set the User-Agent header to Telescope so that it appeared as a unique application in the server logs. In theory this should work, but for some reason, the User-Agent string was not getting updated. Here is the snippet that I will eventually try from another environment to determine if this is an issue with the Dashboard Engine:</p>
<div class="typocode">
<pre><code class="typocode_javascript">projectMilestones.open(&quot;GET&quot;, milestoneURL, true);
projectMilestones.setRequestHeader('User-Agent', userAgent);
</code></pre>
</div>
<p>I will leave the code in on the hope that in some Dashboard Engine update it starts working. In the mean time, I have added a custom header (X-User-Agent) to distinguish Telescope. Unfortunately, most analysis tools won&#8217;t be looking for that so it will require manual analysis to determine what sort of load Telescope is putting on the applications.</p>
<p>Overall, I have had a very positive experience on all fronts with these new toys: MacBook Pro, Basecamp API, and Dashcode. Hopefully folks will find my exercise useful; either through using Telescope or for the background on the Basecamp API or Dashcode. I hope to extend Telescope in the future. Let me know how you are using it and what you think it should do. </p>
<p>Happy Basecamping!</p>
<p><a target="_blank" href="http://www.digg.com/submit?phase=2&amp;url=http://loggedoff.org/articles/2006/07/14/creating-a-dashboard-widget-for-basecamp-with-dashcode">Digg this</a>
</p>
<p>Technorati Tags:<br />
<a rel="tag" href="http://technorati.com/tag/dashcode">dashcode</a>, <a rel="tag" href="http://technorati.com/tag/basecamp">basecamp</a>, <a rel="tag" href="http://technorati.com/tag/dashboard">dashboard</a></p>
]]></content:encoded>
			<wfw:commentRss>http://loggedoff.org/articles/2006/07/14/creating-a-dashboard-widget-for-basecamp-with-dashcode/feed/</wfw:commentRss>
		</item>
		<item>
		<title>loggedoff.org</title>
		<link>http://loggedoff.org/articles/2006/07/05/loggedoff-org/</link>
		<comments>http://loggedoff.org/articles/2006/07/05/loggedoff-org/#comments</comments>
		<pubDate>Wed, 05 Jul 2006 06:39:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[First off, a little background on the domain name. Our family likes to listen to all sorts of music. With four kids under the age of 9, we often have opportunities to listen to a wide range of children&#8217;s music. One of our favorites is Tom Chapin. He has a lot or music that the [...]]]></description>
			<content:encoded><![CDATA[<p>First off, a little background on the domain name. Our family likes to listen to all sorts of music. With four kids under the age of 9, we often have opportunities to listen to a wide range of children&#8217;s music. One of our favorites is <a href="http://www.tomchapin.com/">Tom Chapin</a>. He has a lot or music that the kids really enjoy. A few years back we bought one of his albums for adults &#8212; <a href="http://members.aol.com/chapinfo/tc/tccg.html">Common Ground</a>. </p>
<p>There are some great songs, but one stood out to us as we were driving back one summer from a family vacation. It  is called <em>My Electronic Vacation</em>. I haven&#8217;t been able to find it online, so just order the whole CD from his site. It is worth it. Anyway, the song makes fun of those of us who start to twitch when our Treo&#8217;s can&#8217;t get signal to download our email. The loggedoff.org comes from the epitaph of our tombstones, as we lie dead &#8212; unable to check our email.</p>
<p>As for what I will be writing about on this blog; well, I am not quite sure yet, but <a href="http://www.apple.com/downloads/dashboard/">Dashboard Widgets</a>, small business software, HOWTO&#8217;s for things I couldn&#8217;t already find written up, Mac-based media centers, and someday maybe some suggestions for how to get logged off and back to real life.</p>
]]></content:encoded>
			<wfw:commentRss>http://loggedoff.org/articles/2006/07/05/loggedoff-org/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
