<?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>0xDECAFBAD</title>
	<atom:link href="http://www.decafbad.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://decafbad.com/blog</link>
	<description>It's all spinning wheels and self-doubt until the first pot of coffee.</description>
	<pubDate>Mon, 04 Aug 2008 22:09:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-bleeding</generator>
	<language>en</language>
			<item>
		<title>Moz08: Rockslides and Blackouts and Bears - Oh My!</title>
		<link>http://decafbad.com/blog/2008/08/04/moz08-rockslides-and-blackouts-and-bears-oh-my</link>
		<comments>http://decafbad.com/blog/2008/08/04/moz08-rockslides-and-blackouts-and-bears-oh-my#comments</comments>
		<pubDate>Mon, 04 Aug 2008 21:15:23 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[moz08]]></category>

		<category><![CDATA[mozilla]]></category>

		<category><![CDATA[summit]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1270</guid>
		<description><![CDATA[Since the beginning, I've been a Mozilla fanboy.  But, up until very recently, I've only shown that as a user and a verbal supporter, with a shallow understanding or participation in what's really done in the Mozilla community.  Sure, I've checked out source code from time to time going back to the first [...]]]></description>
			<content:encoded><![CDATA[<p>Since the beginning, I've been a Mozilla fanboy.  But, up until very recently, I've only shown that as a user and a verbal supporter, with a shallow understanding or participation in what's really done in the Mozilla community.  Sure, I've checked out source code from time to time going back to the first code release, built and poked at it, but I've never really contributed back.</p>

<p>But now, I'm an employee of the Mozilla Corporation, and I feel like I found a little-known cheat code for getting into the place where all the cool stuff happens.  See, I just got back from this thing called the <a href="http://wiki.mozilla.org/Summit2008">Mozilla 2008 Firefox Plus Summit</a>—and if I was overwhelmed by the initial Mozilla Firehose after coming on-board, I'm entirely gobsmacked now.</p>

<p>The event—having taken place in the <a href="http://www.rumblingedge.com/2008/07/29/bear-with-me-while-you-sleep-at-whistler/">bear-infested</a>, <a href="http://www.cbc.ca/canada/british-columbia/story/2008/07/30/bc-highway-rockslide-whistler.html">rockslide-prone</a>, <a href="http://www.flickr.com/photos/albill/2720171490/">electricity-deficient</a> wilds of Whistler, BC in Canada—was attended by not only employees of the corporation itself, but a selection of invitees from around the Mozilla community.  Throughout the course of the event, I felt humbled by the efforts of everyone and have come away with a feeling that I really need to step up my game.  Somehow, it seems I managed to sneak into the place without having first run the decade-old traditional gauntlet of meritocracy and contribution.</p>

<p>Being a newbie of just a few months, I barely know anyone at Mozilla, so I was quite overwhelmed socially.  That the early-morning power loss also knocked out <a href="http://decafbad.com/blog/2004/12/03/if-you-snore-get-tested-for-sleep-apnea-now">my CPAP</a> and left me sick and surly on the last day didn't help my already introverted tendencies.  Nonetheless, I talked to a lot of people, attended a lot of sessions, partied a bit, played some Rock Band, and have a lot that's percolating in my brain-meats.  </p>

<p>There's plenty coming up to work on in my own assigned sphere of <a href="http://blog.mozilla.com/webdev/">webdev</a>—but I'm also pretty jazzed about the Mozilla Labs projects <a href="http://wiki.mozilla.org/Prism" title="Site-specific browsing with Gecko">Prism</a>, <a href="http://wiki.mozilla.org/Labs/Ubiquity" title="A language-based interface, verbing the web">Ubiquity</a>, and <a href="http://wiki.mozilla.org/Labs/Weave" title="Cross-browser data sync and secure third-party sharing">Weave</a>.  Not sure what I can do yet, but would like to do <em>something</em> to help out those efforts.  And maybe by the time of the next summit, I'll still be in the Mozilla sphere and will have met and helped a few more Mozillans with whom I can connect face-to-face.</p>

<p>There was also a lot of talk about the future and continuing mission of Mozilla, all very inspirational and telling me that this is the center of things where I've always wanted to be.  Now, I just have to work hard to make sure they're not sorry they hired me!  I'm running much slower than I'd like, since I feel I have a lot to catch up on while in the midst a lot of disruption and change—between the intensity of the last few months (or even the last year) and readjusting to being back in the Mitten with homeownership all anew and many plans having taken unexpected turns.  </p>

<p>But, things are shaping up in a sort of too-good-to-be-true configuration, and I suspect I'll be just fine if I sharpen up a bit and roll with the changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/08/04/moz08-rockslides-and-blackouts-and-bears-oh-my/feed</wfw:commentRss>
		</item>
		<item>
		<title>Delicious 2.0 is more than a pretty new face</title>
		<link>http://decafbad.com/blog/2008/08/04/delicious-20-is-more-than-a-pretty-new-face</link>
		<comments>http://decafbad.com/blog/2008/08/04/delicious-20-is-more-than-a-pretty-new-face#comments</comments>
		<pubDate>Mon, 04 Aug 2008 18:21:55 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[bookmarking]]></category>

		<category><![CDATA[delicious]]></category>

		<category><![CDATA[delicious20]]></category>

		<category><![CDATA[metablogging]]></category>

		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1239</guid>
		<description><![CDATA[I'm no longer at Yahoo! and I no longer work on Delicious, but I'm still a huge supporter.  And, since I'm pretty sure everyone over there is either burnt out or still insanely busy at the moment, it might be awhile before anyone tells the full story of what this relaunch offers.  As [...]]]></description>
			<content:encoded><![CDATA[<p>I'm no longer at Yahoo! and I no longer work on <a href="http://delicious.com">Delicious</a>, but I'm still a huge supporter.  And, since I'm pretty sure everyone over there is either burnt out or still insanely busy at the moment, it might be awhile before anyone tells the full story of what this relaunch offers.  As it is, even I only know a bit of what all went into this effort.</p>

<p>So, off the top of my head, I thought I might point out <strong>just a few</strong> of the easily-missed improvements the new site offers beyond the great new love-it-or-hate-it visual redesign that seems to have occupied most of the discussion I've seen so far:</p>

<p><strong>Search works and is incredibly fast.</strong>  In fact, search may really be the real star of the redesign show here—especially since del.icio.us often took 30 seconds or more for a simple search, rendering it all but useless.  Today, though, it's at ludicrous speed in comparison—and so finally, the real power of search applied to social bookmarking might start to shine with the critical mass of content found by real people using Delicious.</p>

<p>To scratch my own itch, I've created <a href="http://mycroft.mozdev.org/developer/devlist.html?email=l.m.orchard%40pobox.com">an unofficial OpenSearch search engine plugin for Delicious</a> on Mycroft.  Though I think it comes along with <a href="http://delicious.com/help/tools">the browser extensions</a>, I've yet to find this for <a href="http://mycroft.mozdev.org/developer/hosting.html">autodiscovery</a> from the site itself.</p>

<p><strong>The notes field in bookmarks has been expanded from 255 to 1000 characters.</strong>  Yes, this means that you can now include long running quotes from pages, or complete paragraphs of rambling discourse. </p>

<p><strong><a href="http://delicious.com/help/feeds">The feeds have all been overhauled and reorganized</a>.</strong>  An attempt at backward compatibility was made, but the old feed URLs are all deprecated.  Replacing these, there's now <a href="http://delicious.com/help/feeds">a common and consistent URL namespace for feeds across formats</a>.  </p>

<p>Almost all RSS feeds have <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> counterparts, and further feed formats could be considered.  Additionally, the old mix of RSS 1.0 and 2.0 has been dropped in favor of RSS 2.0 format across the board to support podcast and media enclosure elements consistently.  The <a href="http://delicious.com/help/tools">linkrolls, tagrolls, network badges, and tagometers</a> now all use the new JSONP feeds—and the widgets can be examined as example code in using the feeds.</p>

<p><strong>Tag bundles can now be viewed as combined bookmark views, complete with feeds.</strong>  This augments bundles from a simple visual organization tool to a more powerful content aggregation function.  Personally, I never had much use for tag bundles until now, but since they can actually be used to partition tags and bookmarks I might actually take the time to use them.  Check out these example URLs:</p>

<ul>
<li><a href="http://delicious.com/britta/bundle:art%2Fdesign">http://delicious.com/britta/bundle:art%2Fdesign</a></li>
<li><a href="http://feeds.delicious.com/v2/rss/britta/bundle:art%2Fdesign">http://feeds.delicious.com/v2/rss/britta/bundle:art%2Fdesign</a></li>
</ul>

<p><strong>Bundles now work for tags, network contacts, and subscriptions.</strong>  This means, for example, that you can partition your network contacts into topical groups.  From there, you can subscribe to those partitioned bookmarks in different folders in readers, or use the bundled bookmark views in mashups through JSON feeds.  Check out these example URLs:</p>

<ul>
<li><a href="http://delicious.com/network/bkerr/bundle:Brickyard">http://delicious.com/network/bkerr/bundle:Brickyard</a></li>
<li><a href="http://feeds.delicious.com/v2/rss/network/bkerr/bundle:Brickyard">http://feeds.delicious.com/v2/rss/network/bkerr/bundle:Brickyard</a></li>
</ul>

<p><strong>Network member and fan feeds now include the date when the contact was added.</strong>  Pro tip: Subscribe to fan feeds to see when new people have started following your bookmarks.</p>

<p><strong><a href="http://delicious.com/help/api">Several previously undocumented parts of the V1 API have now been documented</a>.</strong>  In particular, the following new parameter combinations have been used with the browser extensions for primitive bookmark sync:</p>

<ul>
<li>https://api.del.icio.us/v1/posts/all?hashes</li>
<li>https://api.del.icio.us/v1/posts/all?meta=yes</li>
<li>https://api.del.icio.us/v1/posts/all?fromdt={DT}&amp;todt={DT}</li>
<li>https://api.del.icio.us/v1/posts/all?start={##}&amp;results={##}</li>
</ul>

<p><strong>The posts/all API URL works again for users with large collections.</strong>  With my 11k+ bookmarks, del.icio.us was keeling over with the attempt to assemble and deliver my entire collection with a posts/all call.  Now, however, Delicious 2.0 appears able to handle this call for my account.</p>

<p><strong>Easter eggs have been rotated and recalibrated.</strong> No, I'm not going to tell you what or where or how many they are.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/08/04/delicious-20-is-more-than-a-pretty-new-face/feed</wfw:commentRss>
		</item>
		<item>
		<title>delicious 2.0 legacy bookmarklet fix</title>
		<link>http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix</link>
		<comments>http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix#comments</comments>
		<pubDate>Sat, 02 Aug 2008 23:34:28 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[bookmarklets]]></category>

		<category><![CDATA[delicious]]></category>

		<category><![CDATA[delicious2]]></category>

		<category><![CDATA[greasemonkey]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1231</guid>
		<description><![CDATA[As you've probably seen by now, Delicious 2.0 has launched.  It's an all new design and the whole thing has been rewritten from the ground up.  Most of the gripes I've seem like general dislike of change—which actually attests to the gargantuan effort put forth to reimplement the original from scratch in a [...]]]></description>
			<content:encoded><![CDATA[<p>As you've probably seen by now, <a href="http://blog.delicious.com/blog/2008/07/oh-happy-day.html">Delicious 2.0 has launched</a>.  It's an all new design and the whole thing has been rewritten from the ground up.  Most of the gripes I've seem like general dislike of change—which actually attests to the gargantuan effort put forth to reimplement the original from scratch in a whole new language and architecture.</p>

<p>That said, I found <a href="http://twitter.com/lmorchard/statuses/875002291">at least one little bug</a> that stops my usual bookmarklet flow.  And, what's really annoying is that, it's probably a bug in code I wrote at one point.  As it turns out, the original URL parameters for the bookmark posting form don't seem to be accepted anymore, so legacy bookmarklets may be broken.  I swore I tested that, since I've got some personal investment in it.</p>

<p>But, although I can't contribute code to the project anymore, I've at least still got <a href="http://www.greasespot.net/">Greasemonkey</a>.  And, through <a href="http://decafbad.com/2008/deliciouscom_legacy_book.user.js">this quick &amp; dirty user script</a>, I'm back to using my legacy bookmarking bookmarklets.  In case you're interested, <a href="javascript:u=%22USERNAME%22;q=location.href;e%20=%20%22%22%20+%20(window.getSelection%20?%20window.getSelection()%20:%20document.getSelection%20?%20document.getSelection()%20%20:%20document.selection.createRange().text);p=document.title;window.location.href=%22http://del.icio.us/%22+u+%22?jump=doclose&amp;noui&amp;tags=%22+encodeURIComponent(%22%s%22)+%22&amp;url=%22+encodeURIComponent(q)+%22&amp;description=%22+encodeURIComponent(p)+%20%20%22&amp;extended=%22%20+%20encodeURIComponent('%22'+e+'%22').replace(/%20/g,%20%22+%22);">here's my favorite Firefox keyword shortcut bookmarklet</a>—just select some text, type the keyword in the URL bar with some tags, and hit return.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix/feed</wfw:commentRss>
		</item>
		<item>
		<title>using Twitterrific with identi.ca</title>
		<link>http://decafbad.com/blog/2008/07/18/using-twitterrific-with-identica</link>
		<comments>http://decafbad.com/blog/2008/07/18/using-twitterrific-with-identica#comments</comments>
		<pubDate>Fri, 18 Jul 2008 22:56:18 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[identica]]></category>

		<category><![CDATA[laconica]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[twitterrific]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1224</guid>
		<description><![CDATA[Since identi.ca has introduced support for the Twitter API, switching Twitterrific over seems to be as easy as entering this command in a Terminal window:

defaults write com.iconfactory.Twitterrific baseUrl -string 'identi.ca/api'


The command to switch back is the following:

defaults write com.iconfactory.Twitterrific baseUrl -string 'twitter.com'


You'll also need to restart Twitterrific after each of these to see the change [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://identi.ca">identi.ca</a> <a href="http://www.scripting.com/stories/2008/07/18/identicaImplementsTheTwitt.html">has introduced support</a> for the <a href="http://twitter.com/help/api">Twitter API</a>, switching <a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> over seems to be as easy as entering this command in a <a href="http://www.osxterminal.com/launch_terminal/">Terminal</a> window:</p>

<pre><code>defaults write com.iconfactory.Twitterrific baseUrl -string 'identi.ca/api'
</code></pre>

<p>The command to switch back is the following:</p>

<pre><code>defaults write com.iconfactory.Twitterrific baseUrl -string 'twitter.com'
</code></pre>

<p>You'll also need to restart <a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> after each of these to see the change working.  </p>

<p>It took me awhile to figure this out, because I didn't realize that they'd hidden the details in plain sight.  You know, like, in the README file that comes with the Twitterrific download.  Sheesh.  Who reads those?</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/18/using-twitterrific-with-identica/feed</wfw:commentRss>
		</item>
		<item>
		<title>date-based pagination</title>
		<link>http://decafbad.com/blog/2008/07/17/date-based-pagination</link>
		<comments>http://decafbad.com/blog/2008/07/17/date-based-pagination#comments</comments>
		<pubDate>Thu, 17 Jul 2008 19:16:01 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[delicious]]></category>

		<category><![CDATA[pagination]]></category>

		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/2008/07/17/date-based-pagination</guid>
		<description><![CDATA[Here's a small idea I've not yet had the chance to try out on a large scale:  Time-based pagination in lieu of page-number-based pagination for personal content - ie. blogs, bookmarks, status updates, etc.  (You know, User Generated Content except I dislike the term.)

Page numbers change over time, while time-based URLs are stable. [...]]]></description>
			<content:encoded><![CDATA[<p>Here's a small idea I've not yet had the chance to try out on a large scale:  Time-based pagination in lieu of page-number-based pagination for personal content - ie. blogs, bookmarks, status updates, etc.  (You know, User Generated Content except I dislike the term.)</p>

<p>Page numbers change over time, while time-based URLs are stable.  Most people don't generate an unreasonable amount of stuff in a day, so a page-per-day might not be so bad.  But, if there's too much stuff, degenerate to a page-per-12-hours or whatnot.</p>

<p>Delicious used to have something like this in the web UI, back in the mists of 2003 or so, but Joshua got rid of it after a few design iterations.  The Delicious API is still somewhat based on it, which causes some confusion—but I tend to like it, thus this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/17/date-based-pagination/feed</wfw:commentRss>
		</item>
		<item>
		<title>Queue everything and delight everyone</title>
		<link>http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone</link>
		<comments>http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone#comments</comments>
		<pubDate>Fri, 04 Jul 2008 20:17:18 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[delicious]]></category>

		<category><![CDATA[laconica]]></category>

		<category><![CDATA[queues]]></category>

		<category><![CDATA[scaling]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1194</guid>
		<description><![CDATA[This is a blog post I've had simmering in my brainmeats for well over a year or two.  I'm suddenly inspired to break blog-radio-silence and get it out of my head.

From Let the microblogs bloom - RussellBeattie.com:

Once this is widely accepted (and I'm sure there are many that would argue with me), the thing [...]]]></description>
			<content:encoded><![CDATA[<p>This is a blog post I've had simmering in my brainmeats for well over a year or two.  I'm suddenly inspired to break blog-radio-silence and get it out of my head.</p>

<p>From <a href="http://www.russellbeattie.com/blog/let-the-microblogs-bloom">Let the microblogs bloom - RussellBeattie.com</a>:</p>

<blockquote>Once this is widely accepted (and I'm sure there are many that would argue with me), the thing that will separate these types of services won't be whether they stay up (ala Twitter), but how fast your subscription messages are updated. Some services might be smaller or offer more features but not update as quickly whereas others will pride themselves on being as close to real-time as possible. The key is that it's all about messaging, not publishing. (Oh, and this also facilitates federation as well, but that's another topic).</blockquote>

<p>See also: <a href="http://randomfoo.net/blog/id/4182">Rearchitecting Twitter: Brought to You By the 17th Letter of the Alphabet - random($foo)</a></p>

<p>One of the problems it seems most modern web apps face is the tendency to want to do everything all at once, and all in the same code that responds directly to a user.  Because, while you're in there building a user interface, it's <em>easy</em> to implement everything else that needs to happen in that same UI module or library.</p>

<p>Someone wants to post a bookmark?  Someone wants to post a message?  Well, of course you want the system to cross-reference and deliver that new piece of User Generated Content through every permutation of tag, recipient, keyword, and notification channel supported by your system.  </p>

<p><strong>But</strong>, do you <em>really</em> have to do everything all at once—while the person who generated that content is tapping his or her foot, waiting for the web interface to respond with feedback?  Are all of these things immediately vital to the person watching the browser spin, <em>right now</em>?  </p>

<p>No.  Your user wants to get on with things.  He or she wants to see the submitted content get accepted and, as feedback and confirmation, see it reflected in a personal view immediately.  Does it matter—to <em>this person</em>, at <em>this moment</em>—whether it shows up <em>simultaneously</em> in a friend's inbox, the public timeline, a global tag page, or even an RSS or Atom feed?</p>

<p>Again, no, simultaneity doesn't really matter—because no human beings actually appreciate it.  Instead, imagine a ripple effect of concentric social and attention contexts with associated people spreading out from the original submission.  (This probably rates the creation of a diagram someday.)  </p>

<ul>
<li><p>To make the person who's submitting something happy, offer feedback visible in their own personal context in under 50-200 milliseconds.  (That is, less than half-a-second at worst, in people terms.)</p></li>
<li><p>The next person to delight is someone following the first person's published content—and humanly speaking, delays of <em>tens of thousands of milliseconds</em> can be acceptable here.  (That is, 1-10 seconds at worst, in people terms.)</p></li>
<li><p>Finally, you can start worrying about strangers, allowing the content to propagate to tag pages, keyword tracking pages, and other public views—and I'd assert that delays of <em>hundreds of thousands of milliseconds</em> are acceptable here.  (That is, 1-2 minutes at worst, in people terms.)</p></li>
</ul>

<p>The idea here is that the social structure can help you scale, while still delighting people.  Even with these delays, the system is still better at getting the word out than the original content creator would be at notifying all the others involved with an out-of-band system like IM or email.  And that's at worst—on most good days, all the delays should tend to be on the order of seconds or less.</p>

<p>And how do you do all of this?  Use queues.  Sure, the original submission of content can and should be done all at once—just enough to get the content into the user's collection.  Then, queue a job for further processing and get out of the way.  In fact, just queue one job from the user interface—the processor of <em>that</em> queue can then queue further jobs for all the other individual processing tasks that are likely susceptible to plenty of parallel processing and horizontal scaling.</p>

<p>Meanwhile, the original user creating content has been thanked for their submission and life goes on.  In fact, their life may include going on to submit many more pieces of content in rapid succession, thanks to your delightfully responsive web user interface.  </p>

<p>And, in the end, that's really the purpose of a web-based content creation interface—accepting something as quickly as possible to make the user happy enough to continue submitting more.  The other part of the user interface, retrieval, serves simply to get the original content distributed as fast as can be reasonably expected.</p>

<p>Now, preparing for fast retrieval is another story.  The flip side to processing queues are message inboxes—expect content duplicated everywhere and fetched simply, rather than using cleverly expressed SQL joins that bring a system to its knees.  But, that's another post altogether. <img src='http://decafbad.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone/feed</wfw:commentRss>
		</item>
		<item>
		<title>on what should I hack next?</title>
		<link>http://decafbad.com/blog/2008/07/03/onwhat-should-i-hack-next</link>
		<comments>http://decafbad.com/blog/2008/07/03/onwhat-should-i-hack-next#comments</comments>
		<pubDate>Fri, 04 Jul 2008 01:15:53 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[polls]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1188</guid>
		<description><![CDATA[I know this isn't LiveJournal, but I just found what looks like a decent poll plugin for WordPress.  So, I'll try it out and solicit your opinion all at once:
]]></description>
			<content:encoded><![CDATA[<p>I know this isn't LiveJournal, but I just found what looks like a decent poll plugin for WordPress.  So, I'll try it out and solicit your opinion all at once:</p>

<p>Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/03/onwhat-should-i-hack-next/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why I&#8217;m playing with Laconica</title>
		<link>http://decafbad.com/blog/2008/07/03/why-im-playing-with-laconica</link>
		<comments>http://decafbad.com/blog/2008/07/03/why-im-playing-with-laconica#comments</comments>
		<pubDate>Thu, 03 Jul 2008 21:32:40 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[laconica]]></category>

		<category><![CDATA[microblogging]]></category>

		<category><![CDATA[openmicroblogging]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1177</guid>
		<description><![CDATA[I just posted a quick writeup on Laconica installation.  But, beyond the how, there's the why.  

As I mentioned in that entry, I've started and neglected at least two attempts at building a distributed Twitter clone.  That's mostly been a function of how busy I've been; how long I screwed around with [...]]]></description>
			<content:encoded><![CDATA[<p>I just posted <a href="http://decafbad.com/blog/2008/07/03/getting-laconica-up-and-running">a quick writeup</a> on Laconica installation.  But, beyond the how, there's the why.  </p>

<p>As I mentioned in that entry, I've started and neglected at least two attempts at building a distributed Twitter clone.  That's mostly been a function of how busy I've been; how long I screwed around with making my own PHP framework; how far I wandered playing with the look and feel; how well Twitter was working; and how bored I got.</p>

<p>As for Laconica, I'm somewhat displeased with the state of the Laconica code and the installation process—and it certainly needs many more features.  In other words, it's very itchy to me.  But, the important things are:</p>

<ul>
<li>It exists and it works.</li>
<li>Someone's actively hosting it.</li>
<li>Others are trying to install it.</li>
<li>Someone got off their ass and persisted long enough to get it to this point.</li>
</ul>

<p>That's more than I can say for my own efforts—because mere <a href="http://decafbad.com/blog/2002/08/26/ooobeh">ideas are worthless</a>—so maybe I can find a way to help. <img src='http://decafbad.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/03/why-im-playing-with-laconica/feed</wfw:commentRss>
		</item>
		<item>
		<title>Getting Laconica up and running</title>
		<link>http://decafbad.com/blog/2008/07/03/getting-laconica-up-and-running</link>
		<comments>http://decafbad.com/blog/2008/07/03/getting-laconica-up-and-running#comments</comments>
		<pubDate>Thu, 03 Jul 2008 20:21:35 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[laconica]]></category>

		<category><![CDATA[openmicroblogging]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1167</guid>
		<description><![CDATA[The latest mini-sensations to arrive through my firehoses are identi.ca, a Twitter-clone / microblogging site, and the Open Source software Laconica, which powers the aforementioned site.

Having started and neglected two Twitter cloning attempts of my own, Cuckoo and OpenInterocitor, seeing someone else carry the torch with any modicum of momentum is attractive to me.  [...]]]></description>
			<content:encoded><![CDATA[<p>The latest mini-sensations to arrive through my firehoses are <a href="http://identi.ca">identi.ca</a>, a Twitter-clone / microblogging site, and the Open Source software <a href="http://laconi.ca">Laconica</a>, which powers the aforementioned site.</p>

<p>Having started and neglected two Twitter cloning attempts of my own, <a href="http://decafbad.com/svn/trunk/Cuckoo">Cuckoo</a> and <a href="http://decafbad.com/svn/trunk/OpenInterocitor">OpenInterocitor</a>, seeing someone else carry the torch with any modicum of momentum is attractive to me.  So, I spent a little bit last night getting the code running on my own servers, and managed to do it twice:</p>

<ul>
<li><a href="http://decafbad.com/laconica">decafbad.com/laconica</a></li>
<li><a href="http://lmorchard.com/laconica">lmorchard.com/laconica</a></li>
</ul>

<p>See, the interesting thing promised by <a href="http://laconi.ca">Laconica</a>—and something I wanted in my own clones—is the ability to federate instances of the software.  That is, users on one <a href="http://laconi.ca">Laconica</a>-based site should be able to subscribe to the updates from users on another site, by way of the <a href="http://openmicroblogging.org/">OpenMicroblogging specification</a>.  Although federation isn't a silver bullet to a web-scale Twitter clone, I do think it's one of the most important bootstrap steps—but that's another blog post entirely.</p>

<p>Thus, since I'd like to see <em>you</em> run a Laconica site (or something like it) for mine to talk to, I figured I'd document how I got the thing running.  My server is running Ubuntu Gutsy, so your mileage may vary.  This is a long one, so check out the how-to after the jump...</p>

<p><span id="more-1167"></span></p>

<h2>Get the Laconica code</h2>

<p>I got my copy of the code by using <a href="http://darcs.net/"><code>darcs</code></a>, as described on <a href="http://laconi.ca/Main/Source">the Laconica source page</a>, like so:</p>

<pre><code>sudo apt-get install darcs
darcs get --partial http://laconi.ca/darcs/
</code></pre>

<p>But, if you can't or don't want to use <code>darcs</code> right now, you can <a href="http://laconi.ca/laconica-0.4.1.tar.gz">grab a Laconica tarball</a> to get started.</p>

<h2>Get modules and third-party prerequisites</h2>

<p>I had already installed PHP and Apache, along with lighttpd, on my server.  But, I found I needed a few more things.  So, here's a slew of packages you may or may not already have:</p>

<pre><code>sudo apt-get install libapache2-mod-php5 php5-cgi php5-cli php-pear php5-gd php5-mysql
</code></pre>

<p>Next, now that you've got PHP and PEAR, you can install some of the PEAR-based prerequisites:</p>

<pre><code>sudo pear channel-update pear.php.net
sudo pear install channel://pear.php.net/Validate-0.8.1
sudo pear install DB_DataObject
sudo pear install Mail
sudo pear install Net_SMTP
</code></pre>

<p>After this, there are a few libraries that need to be downloaded by hand.  For this, I created an <code>extlib/</code> directory to keep them in, separate from Laconica's own <code>lib/</code> which will be subject to updates to the software itself:</p>

<pre><code>mkdir extlib xfers
cd xfers
curl -O http://openidenabled.com/files/php-openid/packages/php-openid-2.1.1.zip    
curl -O http://michelf.com/docs/projets/php-markdown-1.0.1m.zip
curl -O http://oauth.googlecode.com/svn/code/php/OAuth.php
curl -O http://xmpphp.googlecode.com/files/xmpphp-0.1beta-r21.tar.gz
unzip php-markdown-1.0.1m.zip
cp 'PHP Markdown 1.0.1m/markdown.php' ../extlib/
unzip php-openid-2.1.1.zip
cp -r php-openid-2.1.1/Auth ../extlib/
cp OAuth.php ../extlib/
tar -zxf xmpphp-0.1beta-r21.tar.gz
cp xmpphp/*.php ../extlib/
cd ..
rm -rf xfers
</code></pre>

<h2>Set up MySQL tables</h2>

<p>I'll assume you already have MySQL installed.  To set up a database for Laconica, I did the following:</p>

<pre><code>mysql -uroot -p -e 'create database laconica';
mysql -uroot -p -e "grant all privileges on laconica.* to laconica@localhost identified by 'PASSWORD'";
mysql -uroot -p laconica &lt; db/laconica.sql
</code></pre>

<h2>Configure Laconica</h2>

<p>So far, I've found at least two config files that need tweaking—namely <code>config.php</code> and <code>dataobject.ini</code>.</p>

<p>The first thing I did to <code>config.php</code> was to add the following at around line 6 to account for my <code>extlib/</code> directory:</p>

<pre><code>#If you have downloaded libraries in random little places, you
#can add the paths here
define('INSTALLDIR', dirname(__FILE__));
set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/extlib');
</code></pre>

<p>The rest of the settings in <code>config.php</code> are somewhat self-explanatory.  These are the ones I changed for my installation:</p>

<pre><code>$config['site']['name'] = 'cafeonica';
$config['site']['server'] = 'decafbad.com';
$config['site']['path'] = 'laconica';
$config['site']['fancy'] = true;
$config['site']['theme'] = 'stoica';
$config['site']['email'] = 'l.m.orchard@pobox.com';
$config['site']['broughtby'] = '0xDECAFBAD';
$config['site']['broughtbyurl'] = 'http://decafbad.com/';
$config['db']['database'] = 'mysql://laconica:PASSWORD@localhost/laconica';
$config['db']['ini_laconica'] = $config['db']['schema_location'].'/stoica.ini';
</code></pre>

<p>After this, I tweaked the first few settings of <code>dataobject.ini</code> to the following: </p>

<pre><code>database = mysql://laconica:PASSWORD@localhost/laconica 
schema_location = /www/decafbad.com/docs/laconica/classes 
class_location = /www/decafbad.com/docs/laconica/classes 
require_prefix = /www/decafbad.com/docs/laconica/classes/
</code></pre>

<p>Be sure to substitute your own web server paths and passwords in all the above.  And finally, in order to allow the upload of avatar images, you'll need to tweak the permissions on the <code>avatar/</code> directory, like so:</p>

<pre><code>sudo chown -R www-data avatar
sudo chmod -R ug+rw avatar/
</code></pre>

<h2>Configure Web Server</h2>

<p>There isn't really much to configure if you're using Apache.  There's a file <code>htaccess.sample</code> that needs to be copied to <code>.htaccess</code>—this will put in place all the <code>mod_rewrite</code> rules necessary to support "fancy" URLs.</p>

<p>On the other hand, if you're okay with uglier URLs with query parameters and whatnot, leave <code>.htaccess</code> alone and use <code>$config['site']['fancy'] = false</code> in your <code>config.php</code>.  </p>

<p>For comparison, here are examples of non-fancy and fancy profile URLs:</p>

<ul>
<li>http://decafbad.com/laconica/index.php?action=showstream&amp;nickname=lmorchard</li>
<li>http://decafbad.com/laconica/lmorchard</li>
</ul>

<p>One catch to the non-fancy and fancy thing, though—if you start off with non-fancy URLs and later switch to fancy, all of the profiles registered before that switch will appear with non-fancy URLs in the timeline.  This is because the <code>profile</code> table stores the original URLs at registration in the <code>profileurl</code> column.  You could change these if you like, but there be dragons.</p>

<h3>Configure Lighttpd for "fancy" URLs (optional)</h3>

<p>If you're like me, though, you're using something other than Apache for your main web server.  Personally, I just got up and running with <a href="http://www.lighttpd.net/">lighttpd</a> not too long ago.  Alas, that means the <code>.htaccess</code> rewrite rules won't work directly.  </p>

<p>Admittedly, I am a novice to configuring <a href="http://www.lighttpd.net/">lighttpd</a>, so the following rules I added to my config could probably use some help:</p>

<pre><code>url.rewrite-final += (
    "^/laconica/index.php(.*)$" =&gt; "$0",

    "^/laconica/$" =&gt; "/laconica/index.php?action=public",
    "^/laconica/rss$" =&gt; "/laconica/index.php?action=publicrss",
    "^/laconica/xrds$" =&gt; "/laconica/index.php?action=publicxrds",

    "^/laconica/doc/about$" =&gt; "/laconica/index.php?action=doc&amp;title=about",
    "^/laconica/doc/contact$" =&gt; "/laconica/index.php?action=doc&amp;title=contact",
    "^/laconica/doc/faq$" =&gt; "/laconica/index.php?action=doc&amp;title=faq",
    "^/laconica/doc/help$" =&gt; "/laconica/index.php?action=doc&amp;title=help",
    "^/laconica/doc/im$" =&gt; "/laconica/index.php?action=doc&amp;title=im",
    "^/laconica/doc/openid$" =&gt; "/laconica/index.php?action=doc&amp;title=openid",
    "^/laconica/doc/openmublog$" =&gt; "/laconica/index.php?action=doc&amp;title=openmublog",
    "^/laconica/doc/privacy$" =&gt; "/laconica/index.php?action=doc&amp;title=privacy",
    "^/laconica/doc/source$" =&gt; "/laconica/index.php?action=doc&amp;title=source",

    "^/laconica/main/login$" =&gt; "/laconica/index.php?action=login",
    "^/laconica/main/logout$" =&gt; "/laconica/index.php?action=logout",
    "^/laconica/main/register$" =&gt; "/laconica/index.php?action=register",
    "^/laconica/main/openid(?:\?(.*)|$)$" =&gt; "/laconica/index.php?action=openidlogin&amp;$1",
    "^/laconica/main/remote(?:\?(.*)|$)$" =&gt; "/laconica/index.php?action=remotesubscribe&amp;$1",

    "^/laconica/main/subscribe$" =&gt; "/laconica/index.php?action=subscribe",
    "^/laconica/main/unsubscribe$" =&gt; "/laconica/index.php?action=unsubscribe",
    "^/laconica/main/confirmaddress$" =&gt; "/laconica/index.php?action=confirmaddress",
    "^/laconica/main/confirmaddress/(.*)$" =&gt; "/laconica/index.php?action=confirmaddress&amp;code=$1",
    "^/laconica/main/recoverpassword$" =&gt; "/laconica/index.php?action=recoverpassword",
    "^/laconica/main/recoverpassword/(.*)$" =&gt; "/laconica/index.php?action=recoverpassword&amp;code=$1",

    "^/laconica/settings/avatar$" =&gt; "/laconica/index.php?action=avatar",
    "^/laconica/settings/password$" =&gt; "/laconica/index.php?action=password",
    "^/laconica/settings/profile$" =&gt; "/laconica/index.php?action=profilesettings",
    "^/laconica/settings/openid$" =&gt; "/laconica/index.php?action=openidsettings",
    "^/laconica/settings/im$" =&gt; "/laconica/index.php?action=imsettings",

    "^/laconica/notice/new$" =&gt; "/laconica/index.php?action=newnotice",
    "^/laconica/notice/(\d+)$" =&gt; "/laconica/index.php?action=shownotice&amp;notice=$1",

    "^/laconica/user/(\d+)$" =&gt; "/laconica/index.php?action=userbyid&amp;id=$1",

    "^/laconica/(\w+)/subscriptions$" =&gt; "/laconica/index.php?action=subscriptions&amp;nickname=$1",
    "^/laconica/(\w+)/subscribers$" =&gt; "/laconica/index.php?action=subscribers&amp;nickname=$1",
    "^/laconica/(\w+)/xrds$" =&gt; "/laconica/index.php?action=xrds&amp;nickname=$1",
    "^/laconica/(\w+)/rss$" =&gt; "/laconica/index.php?action=userrss&amp;nickname=$1",
    "^/laconica/(\w+)/all$" =&gt; "/laconica/index.php?action=all&amp;nickname=$1",
    "^/laconica/(\w+)/all/rss$" =&gt; "/laconica/index.php?action=allrss&amp;nickname=$1",
    "^/laconica/(\w+)/foaf$" =&gt; "/laconica/index.php?action=foaf&amp;nickname=$1",

    "^/laconica/(\w+)$" =&gt; "/laconica/index.php?action=showstream&amp;nickname=$1"
)
</code></pre>

<h2>That's it (for now)</h2>

<p>And that's all I've got for you for now.  At this point, it looks like my two Laconica installs are mostly working.  I've not yet played with the XMPP bot, nor have I been able to see the <a href="http://openmicroblogging.org/">OpenMicroblogging</a> stuff working with remore subscriptions.  However, I have been able to log in via OpenID, so that's something.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/07/03/getting-laconica-up-and-running/feed</wfw:commentRss>
		</item>
		<item>
		<title>Putting the Sexy into Firefox Theme Browsing</title>
		<link>http://decafbad.com/blog/2008/06/16/putting-the-sexy-into-firefox-theme-browsing</link>
		<comments>http://decafbad.com/blog/2008/06/16/putting-the-sexy-into-firefox-theme-browsing#comments</comments>
		<pubDate>Mon, 16 Jun 2008 20:07:46 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[asides]]></category>

		<category><![CDATA[amo]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[mozilla]]></category>

		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1159</guid>
		<description><![CDATA[As mentioned back in week 3, I'd started work on bug 419647 to "add a sexy theme browser" to addons.mozilla.org.  

Well, I'm not sure about my success in imbuing it with the required sexiness, but it's at least been noticed by someone.  
]]></description>
			<content:encoded><![CDATA[<p>As mentioned back in <a href="http://decafbad.com/blog/2008/05/22/week-3-at-mozilla">week 3</a>, I'd started work on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=419647">bug 419647</a> to "add a sexy theme browser" to <a href="https://addons.mozilla.org/">addons.mozilla.org</a>.  </p>

<p>Well, I'm not sure about my success in imbuing it with the required sexiness, but it's at least <a href="http://www.ghacks.net/2008/06/15/firefox-themes-website-updated/">been noticed by someone</a>. <img src='http://decafbad.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/06/16/putting-the-sexy-into-firefox-theme-browsing/feed</wfw:commentRss>
		</item>
		<item>
		<title>Firefox 3 Download Day Mega Widget</title>
		<link>http://decafbad.com/blog/2008/06/16/firefox-3-download-day-mega-widget</link>
		<comments>http://decafbad.com/blog/2008/06/16/firefox-3-download-day-mega-widget#comments</comments>
		<pubDate>Mon, 16 Jun 2008 19:55:04 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[downloadday]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1148</guid>
		<description><![CDATA[Update: Oh, and rumor has it that this widget will switch to reporting on downloads, rather than pledges, once the main event has begun.

Update 2: It didn't quite go like clockwork, but this widget is now showing estimated downloads by countries, rather than pledges.

Thanks to the completion of bug 435967, I can offer this totally [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> Oh, and rumor has it that this widget will switch to reporting on downloads, rather than pledges, once the main event has begun.</p>

<p><strong>Update 2:</strong> It didn't <em>quite</em> go like clockwork, but this widget is now showing estimated downloads by countries, rather than pledges.</p>

<p>Thanks to the completion of <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=436967">bug 435967</a>, I can offer this totally unofficial hack of a mega widget (better late than never):</p>

<script type="text/javascript" src="http://decafbad.com/2008/download-day-top-ten.js"></script>

<p>If you'd like, you can include this on your own site with a Copy-and-Paste of the following:</p>

<p><textarea cols="80" rows="3"><script type="text/javascript" src="http://decafbad.com/2008/download-day-top-ten.js"></script></textarea></p>

<p>This is a total 2-hour cut, paste, reformat, and slight rejigger of <a href="http://kentbrewster.com/case-hardened-javascript/">Kent Brewster's work on Content Syndication with Case-Hardened JavaScript</a>.  Hopefully it works, because I'm <a href="http://catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">releasing early</a> before I've had a chance to check it out on anything besides the browsers in my lap.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/06/16/firefox-3-download-day-mega-widget/feed</wfw:commentRss>
		</item>
		<item>
		<title>Week 3 at Mozilla</title>
		<link>http://decafbad.com/blog/2008/05/22/week-3-at-mozilla</link>
		<comments>http://decafbad.com/blog/2008/05/22/week-3-at-mozilla#comments</comments>
		<pubDate>Fri, 23 May 2008 05:04:20 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1130</guid>
		<description><![CDATA[So, it's getting to the end of my third week at Mozilla, and I'm a part of the Planet now—hooray!  Having gotten a membership into that club, I feel like I should start making some noise about what I'm doing at work.  Having stayed mostly quiet about day job affairs thus far in [...]]]></description>
			<content:encoded><![CDATA[<p>So, it's getting to the end of my third week at Mozilla, and <a href="http://blog.mozilla.com/planet/2008/05/19/planet-addition-class-of-5192008/">I'm a part</a> of <a href="http://planet.mozilla.org/">the Planet now</a>—hooray!  Having gotten a membership into that club, I feel like I should start making some noise about what I'm doing at work.  Having stayed mostly quiet about day job affairs thus far in my career, it's going to take a bit to get used to a place as open as Mozilla.</p>

<p>Being a noob, I haven't started anything earthshaking yet.  But, I have gotten a couple of starter bugs thrown my way:</p>

<ul>
<li><p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395271">Bug 395271</a> - Use memcache to cache output pages for non logged in users </p>

<p><a href="http://wiki.mozilla.org/Sumo">SUMO</a> is <a href="http://support.mozilla.com/en-US/kb/Firefox+Support+Home+Page">support.mozilla.org</a>, a humongous and mostly volunteer-driven support effort for Mozilla products.  I've never really been to the site before myself, so this bug is an iceberg-tip intro to the effort for me.  I'm wading chest deep into <a href="http://tikiwiki.org">TikiWiki</a> and plonking memcached into the middle of it to try to make knowledge base wiki page views a lot less expensive.</p>

<p>Oh, and the source I'm working on is <a href="https://svn.mozilla.org/projects/sumo/">in subversion</a>.  Weird.  Like, you could go look at it right now, and tell me <a href="http://viewvc.svn.mozilla.org/vc?view=rev&amp;revision=13362">how bad</a> <a href="http://viewvc.svn.mozilla.org/vc?view=rev&amp;revision=13504">my code</a> is.</p></li>
<li><p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=419647">Bug 419647</a> - Add a sexy theme browser</p>

<p><a href="http://wiki.mozilla.org/Update:Remora">AMO</a> is <a href="https://addons.mozilla.org/en-US/firefox/">addons.mozilla.org</a>, another humongous effort to support distribution and developers of extensions for Firefox and more.  This is a site I've been to plenty of times, but never as an extension developer.  And so, here's another opportunity to start wading into the deep end.  For this particular bug, the goal is to work up a presentation of themes more easily scanned visually.</p>

<p>Nothing checked into SVN for this one yet, so you'll have to withhold ridicule for a little bit yet.</p></li>
</ul>

<p>I'm really working on squashing my nerd fanboy tendencies.  Because, I remember downloading the original Mozilla Open Source release, staying home from work to compile it on Windows with Visual Studio, and getting just one or two page views out of it before it fell over and caught on fire.  And of course, long before that, I remember using the original lizard in monochrome on a Sun workstation, freaking out over everything and looking up <a href="http://umsa7.ums.edu/~anniebw/earth2/">Earth 2</a> episode guides.</p>

<p>So, although I'm kinda subdued in general right now—subdued as in beat about the head and shoulders—I've got a serious amount of breathlessness going on while trying hard to just kinda be nonchalant.  <img src='http://decafbad.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/05/22/week-3-at-mozilla/feed</wfw:commentRss>
		</item>
		<item>
		<title>Markdown, Oh the Humanity</title>
		<link>http://decafbad.com/blog/2008/05/18/markdown-oh-the-humanity</link>
		<comments>http://decafbad.com/blog/2008/05/18/markdown-oh-the-humanity#comments</comments>
		<pubDate>Sun, 18 May 2008 08:18:09 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[markdown]]></category>

		<category><![CDATA[metablogging]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1124</guid>
		<description><![CDATA[I use Markdown to write for this blog, and I don't think I could write much online without it.  (Of course, that's not saying much lately—but nevermind that for now.)

Although I do appreciate all the effort put toward enhancing &#60;textareas&#62; on the web, I'm not a fan of WYSIWYG writing interfaces.  They hide [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://daringfireball.net/projects/markdown">Markdown</a> to write for this blog, and I don't think I could write much online without it.  (Of course, that's not saying much lately—but nevermind that for now.)</p>

<p>Although I do appreciate all the effort put toward enhancing <code>&lt;textareas&gt;</code> on the web, I'm not a fan of WYSIWYG writing interfaces.  They hide too much in an effort to make things "easy"—yet, for all that ease, they make me miss <a href="http://en.wikipedia.org/wiki/Wordperfect#Reveal_codes">Reveal Codes</a> in WordPerfect 5.1 for DOS.  Hell, I wish I could write books using <a href="http://daringfireball.net/projects/markdown">Markdown</a> instead of Microsoft Word.  (And, yeah, I know that some O'Reilly authors have written books in <a href="http://perldoc.perl.org/perlpod.html">perlpod</a>—but that's a bit too far even for me.)</p>

<p>Anyway, I think the issue is that it really bothers me to compose HTML in the same mental context as writing prose—HTML is too much like code.  Coding and <a href="http://www.merriam-webster.com/dictionary/prosing">prosing</a> are two different modes for me, and I don't like the constant context-switching thrash.  (And, yes, I've just learned today that <a href="http://www.merriam-webster.com/dictionary/prosing">prosing</a> is a word.)</p>

<p>So, apropos of this, there's been a <a href="http://www.jerf.org/iri/post/2520">thread</a> in the <a href="http://www.codinghorror.com/blog/archives/001116.html">blogophere</a> lately <a href="http://blog.wired.com/monkeybites/2008/05/a-million-littl.html">naysaying</a> non-HTML, wiki-text, and <a href="http://webseitz.fluxent.com/wiki/SmartAscii">smart-ASCII</a> formats.  They seem to be mostly attacking the idea from a technical perspective, where it's more like a usability problem to me.</p>

<p>I don't see where Jeff Atwood's "<a href="http://www.codinghorror.com/blog/archives/001116.html">Is HTML a Humane Markup Language?</a>" makes the case for HTML as humane.  As far as I can tell, the inhumanity is that markup schemes are harder to keep track of than HTML.  Yet, there's a kind of coder macho thing going on there that's decidedly not humane—i.e. real programmers should be fine with getting their eyes poked by angle brackets on a regular basis.</p>

<p>Anyway, I do agree that some of these formats are horrendous.  <a href="http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page">Wikipedia markup</a> and <a href="http://www.phpbb.com/community/faq.php?mode=bbcode">BBCode</a> are nasty in particular.  Though, <a href="http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page">Wikipedia markup</a> at least has some semantic purpose beyond HTML.  But, I can't follow from that to seeing how the whole idea is wrong.  </p>

<p>I used <a href="http://textile.thresholdstate.com/">Textile</a> for awhile, and then switched to <a href="http://daringfireball.net/projects/markdown">Markdown</a> when it came around.  At this point, I've been using <a href="http://daringfireball.net/projects/markdown">Markdown</a> since it came out in 2004.  I now plug <a href="http://daringfireball.net/projects/markdown">Markdown</a> into everything I can where I'll be doing any writing.  There's a version of <a href="http://daringfireball.net/projects/markdown">Markdown</a> in just about every language known to the web these days—you can even find <a href="http://attacklab.net/showdown/">Markdown in Javascript</a>.  I write notes to myself in <a href="http://daringfireball.net/projects/markdown">Markdown</a>, even when there's no URL to view it.  I've even used <a href="http://daringfireball.net/projects/markdown">Markdown</a> semi-consciously when writing by hand in a paper journal.</p>

<p>Perhaps I've said too much.  </p>

<p>Anyway, I'll expend as many brain cells as it takes to not need to compose raw HTML by hand in the course of writing.  As it happens, I can usually just use <a href="http://daringfireball.net/projects/markdown">Markdown</a>, so those brain cells were spent years ago.  And thus, I feel I've saved more brain cells in avoiding coding/<a href="http://www.merriam-webster.com/dictionary/prosing">prosing</a> thrash. So, it could just be personal preference, but I agree with the reasons why <a href="http://c2.com/cgi/wiki?WhyDoesntWikiDoHtml">the original wiki doesn't use HTML</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/05/18/markdown-oh-the-humanity/feed</wfw:commentRss>
		</item>
		<item>
		<title>Go Midwest, Young Man!</title>
		<link>http://decafbad.com/blog/2008/05/14/go-midwest-young-man</link>
		<comments>http://decafbad.com/blog/2008/05/14/go-midwest-young-man#comments</comments>
		<pubDate>Thu, 15 May 2008 01:01:37 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1092</guid>
		<description><![CDATA[Reminiscent of this time almost two years ago, it's been a busy period so far.  I've been working on another book, entitled Professional JavaScript Frameworks, and have changed jobs twice since leaving Yahoo! in early April.  

I think I'm done bouncing around now, though: As you may or may not already know, I've [...]]]></description>
			<content:encoded><![CDATA[<p>Reminiscent of this time <a href="http://decafbad.com/blog/2006/06/24/go-west-young-man">almost two years ago</a>, it's been a busy period so far.  I've been working on another book, entitled <a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-047038459X.html">Professional JavaScript Frameworks</a>, and have changed jobs twice <a href="http://twitter.com/lmorchard/statuses/787565793">since leaving Yahoo! in early April</a>.  </p>

<p>I think I'm done bouncing around now, though: As you may or may not already know, <a href="http://twitter.com/lmorchard/statuses/804009957">I've started working for the Mozilla Corporation</a>—I've <a href="http://people.mozilla.org/~lorchard/">got a username and everything</a>!  I'm a little overwhelmed at the moment by changes and drinking from a new firehose, so my enthusiasm may not yet be readily apparent.  But, remember that I'm a complete web geek—and it's hard to get closer to web geekery than this.</p>

<p>But, one of the nicest things about this new Mozilla gig is that I'm going to start telecommuting.  And the reason that's nice is because—and here's the next big thing—<a href="http://www.flickr.com/photos/missadroit/2493000246/">my wife and I have bought a beautiful house in Livonia, Michigan</a>, and we're moving back to the Midwest in a month and some change.</p>

<p>Why?  Because, after almost two years out here in the valley, we've discovered that being away from family and old friends while trying to make new friends and adjust to a very different locale was a lot harder than first imagined.  And, well, it would've been much longer than we'd've liked before we could have afforded a house at all—let alone something anything like what we'll be enjoying back in Michigan.</p>

<p>The thing is, though, I've still got a lot of love for the Bay Area and its goings on—I've been pining for this place since at least the age of eight, after all.  And, we have made a few good friends out here, despite the difficulties we've experienced.  </p>

<p>So luckily, this Mozilla gig looks like the ideal thing.  I'm hoping it will ensure regular return visits to enjoy <a href="http://superhappydevhouse.org/">SuperHappyDevHouses</a>, the scent of <a href="http://transplanted-californian.blogspot.com/2007/10/star-jasmine.html">star jasmine</a> in the summer, and amazing cloudless skies lasting for days.</p>

<p>But, on the other hand—although I'm certainly not relishing the thought of readjusting to cold, clouds, and snow in a few months—I'm getting excited about the prospects of being back in southeastern Michigan.  Our house will be pretty close to both Ann Arbor and Detroit, and it seems like some interesting things have started warming up since we left.  Also, I suspect (and hope) we'll discover a lot of friends and like-minded associates in short order upon our return.</p>

<p>Lots of change.  Very busy.  Not a little exciting.  But, I'm hopeful that things are going to get a lot better very soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/05/14/go-midwest-young-man/feed</wfw:commentRss>
		</item>
		<item>
		<title>In retrospect</title>
		<link>http://decafbad.com/blog/2008/04/26/in-retrospect</link>
		<comments>http://decafbad.com/blog/2008/04/26/in-retrospect#comments</comments>
		<pubDate>Sat, 26 Apr 2008 21:52:52 +0000</pubDate>
		<dc:creator>l.m.orchard</dc:creator>
		
		<category><![CDATA[entries]]></category>

		<guid isPermaLink="false">http://decafbad.com/blog/?p=1089</guid>
		<description><![CDATA[When I first created this blog back in February 2002, I was talking to myself and I knew it.  But, that didn't really matter: Since becoming newly digital in 1983, I'd already spent years plugging away at personal projects big and small, frequently abandoned, talking to myself all the time anyway.

So, blogging, I thought, [...]]]></description>
			<content:encoded><![CDATA[<p>When I first <a href="http://decafbad.com/blog/2002/02/14/ooooah">created this blog</a> back in February 2002, I was talking to myself and I knew it.  But, that didn't really matter: Since becoming <a href="http://decafbad.com/blog/2003/06/13/newly-digital">newly digital in 1983</a>, I'd already spent years plugging away at personal projects big and small, frequently abandoned, talking to myself all the time anyway.</p>

<p>So, blogging, I thought, would give me a real or imagined motivation to finish some projects.  The difference between writing a blog and working alone in the basement, is that there's a chance someone outside my physical neighborhood might catch a few mutterings and knock on my door to have a chat—rather than just walking a little faster and avoiding my house in the future, like the local neighbors usually do when I find myself really going off on a tear.  </p>

<p>Thus if someone, somewhere showed interest in things I was doing and describing—then maybe I might just stick with one or two of them long enough to declare a version worthy of a <a href="http://freshmeat.net/">freshmeat.net</a> release.  (It's been awhile, but that used to be my gold standard for Real Software.)</p>

<p>However, I've realized that occasional visitors won't magically help me finish software.  I've come to accept that I'm far too much a <a href="http://decafbad.com/blog/2006/05/26/confessions-of-a-serial-enthusiast">serial enthusiast</a> to release much at v1.0 without a paycheck or some other substantial incentive.  But that's okay, because tinkering with unfinished software still seems to attract occasional visitors.  And, where there are visitors, there are contacts and conversations.  And, where there are contacts and conversations, there's learning and fulfillment—two of my favorite things.</p>

<p>Apropos of conversations, though, I've gone <a href="http://decafbad.com/blog/2006/10/13/throttling-the-basement-hacker">habitually quiet</a> in the past few years.  I've gone from claiming that <a href="http://decafbad.com/blog/2006/05/03/hacking-is-my-world-of-warcraft">hacking is my World of Warcraft</a> to just getting <a href="http://decafbad.com/blog/2006/09/06/world-of-warcraft-is-my-world-of-warcraft">sucked into WoW proper</a>.  It's gotten to the point that I've wondered what I ever talked about here.  Yeah, <a href="http://decafbad.com/blog/2006/12/21/my-semi-annual-blogger-navel-gazing-post">I've written this kind of entry</a> <a href="http://decafbad.com/blog/2004/07/14/dork-funk">many times before</a>—but I don't feel it's gotten better.</p>

<p>I'm really out of the flow here, but I don't think giving it up is the right thing to do.  I've been doing some retrospection (in volumes <a href="http://decafbad.com/blog/2008/04/26/greatest-hits-vol-1-the-tinkery-bits">one</a> and <a href="http://decafbad.com/blog/2008/04/26/greatest-hits-vol-2-the-babble-bits">two</a>), and have been reviewing what I've done here.  I'm getting some ideas, and hoping I can get myself back into acting on them.</p>

<p>It might be a little while before I produce anything on a regular basis, because I'm currently working on a third book, entitled <a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-047038459X.html">Professional JavaScript Frameworks</a>.  And, on top of that, I've got <a href="http://twitter.com/lmorchard/statuses/787565793">a bit of a transition going on in my life right now</a>.  </p>

<p>But, waking things up here is something I'd like to make part of that transition.</p>
]]></content:encoded>
			<wfw:commentRss>http://decafbad.com/blog/2008/04/26/in-retrospect/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
