<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Ken Sheppardson</title>
 
 <link href="http://www.kensheppardson.com/" />
 <updated>2012-02-04T15:44:24Z</updated>
 <id>http://www.kensheppardson.com/</id>
 <author>
   <name>Ken Sheppardson</name>
   <email>blog@kshep.net</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/KenSheppardson" /><feedburner:info uri="kensheppardson" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Happy New Year!</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/xrSVZKU834I/" />
   <updated>2012-01-01T11:48:05Z</updated>
   <id>http://www.kensheppardson.com/2012/01/01/happy_new_year</id>
   <content type="html">&lt;p&gt;It's a new year, and things are changing. I've moved from Change.org
over to &lt;a href="http://crowdflower.com"&gt;CrowdFlower&lt;/a&gt; where I'll be heading
up the web operations team. This past year was a bit of a roller coaster
ride going from TWiT to Change.org to CrowdFlower, but I don't regret
any of it, feel like each move was a step forward, met some great people
along the way, and I'm excited for the year ahead with CrowdFlower.&lt;/p&gt;

&lt;p&gt;Speaking of web operations, I feel a little guilty that my personal sites are
still hosted on a Fedora 9 Linode instance (even after 795 days of uptime) and
as I move over to a new Ubuntu 10.04 instance provisioned with Chef, I'm also
dumping WordPress for &lt;a href="https://github.com/mojombo/jekyll/wiki"&gt;Jekyll&lt;/a&gt; (&lt;a href="/2008/12/24/trying-out-jekyll/"&gt;again&lt;/a&gt;)
with a little simpler site design.&lt;/p&gt;

&lt;p&gt;I hope the new infastructure will encourage me to write a bit more, particularly
some thoughts on the philosphy of and tools related to "&lt;a href="http://en.wikipedia.org/wiki/DevOps"&gt;DevOps&lt;/a&gt;".&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/xrSVZKU834I" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2012/01/01/happy_new_year/</feedburner:origLink></entry>
 
 <entry>
   <title>What's Up?</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/zSl_JYKbl8U/" />
   <updated>2011-11-02T10:21:31Z</updated>
   <id>http://www.kensheppardson.com/2011/11/02/whats-up</id>
   <content type="html">&lt;p&gt;So I'll never be a particularly prolific blogger. That's pretty obvious at
this point. I do have a few lessons learned and tools to share that'll
eventually either appear here or on the &lt;a href="http://techblog.change.org"&gt;Change.org Tech
Blog&lt;/a&gt;, but meanwhile I'm most active over on
&lt;a href="https://plus.google.com/115130760540851771472"&gt;Google+&lt;/a&gt; these days. I think
it might also be time to abandon Wordpress and give
&lt;a href="http://kshep.posterous.com"&gt;Posterous&lt;/a&gt; or &lt;a href="http://kshep.tumblr.com"&gt;Tumblr&lt;/a&gt;
another shot. Something with a bit less friction might make publishing a bit
less... intimidating.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/zSl_JYKbl8U" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2011/11/02/whats-up/</feedburner:origLink></entry>
 
 <entry>
   <title>I'm Joining TWiT</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/i3EB1g8etLs/" />
   <updated>2010-05-04T17:46:59Z</updated>
   <id>http://www.kensheppardson.com/2010/05/04/im-joining-twit</id>
   <content type="html">&lt;p&gt;&lt;img style="float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/7005/6605372251_8ea7625118_z.jpg"/&gt; For the past few months
I’ve been consulting with This Week in Tech (TWiT) helping build a new
&lt;a href="http://twit.tv/"&gt;TWiT.tv&lt;/a&gt; website. Last week &lt;a href="http://twitter.com/digitalkitty"&gt;Colleen
Kelly&lt;/a&gt;—who’s done an amazing job building out
TWiT’s studio, live &amp;amp; mobile streaming infrastructure, and IT systems—decided
she’s moving on from TWiT and accepting a position with Google. One thing led
to another, and I’m joining TWiT as their VP of Engineering. Stay tuned for
more on what we have on the drawing board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE (1/15/2011) - &lt;/strong&gt;After nine months I'm moving on from TWiT. The network is gearing up for a growth phase where what they'll need is a technical staff with specific experience in video production and studio management that really just isn't a fit with my background or interests. Over the years I've strayed far from my core interests (data analysis, systems modeling, and software development) and it's time to get back on track.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/i3EB1g8etLs" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2010/05/04/im-joining-twit/</feedburner:origLink></entry>
 
 <entry>
   <title>Why Cisco Will Buy Palm</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/3ZLqgFvgabY/" />
   <updated>2010-04-12T13:01:48Z</updated>
   <id>http://www.kensheppardson.com/2010/04/12/why-cisco-will-buy-palm</id>
   <content type="html">&lt;p&gt;&lt;img src="http://static.flickr.com/7148/6605372337_61aacd2684_z.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Bloomberg reported today that &lt;a href="http://www.bloomberg.com/apps/news?pid=20601087&amp;amp;sid=arvXvuu.DqW4"&gt;Palm is up for sale&lt;/a&gt;,
resulting in a &lt;a href="http://gizmodo.com/5514797/htc-may-buy-palm-to-fight-apple"&gt;flurry&lt;/a&gt; of &lt;a href="http://www.slashgear.com/palm-for-sale-tip-insiders-htc-lenovo-dell-others-in-running-1281160/"&gt;articles&lt;/a&gt; citing HTC and Lenova as two of the
most likely bidders. It certainly wouldn’t surprise me to see HTC pick them up
just to bolster their intellectual property portfolio and help solidify HTC’s
bid to be the leading anti-Apple. However, in the spirit of US Robotics
acquisition of Palm back in 1995 and attempts by 3Com to integrate Palm after
they merged with USR in 1997, I think there’s another bidder out there who can
and should grab Palm while they can: &lt;strong&gt;Cisco&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;em&gt;Later in the day yesterday outlets began reporting that Cisco is on the list of
companies that have, in fact, made a bid for Palm. Others include HTC, Lenova,
and Dell. Since then, there’s word that Lenova has &lt;/em&gt;&lt;a href="http://www.precentral.net/buyout-go-go-huawei-lenovo-no-comment-ceo"&gt;&lt;em&gt;walked away&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;]&lt;/p&gt;

&lt;p&gt;Here in no particular order are the reasons I think Cisco will make a bid for
Palm, and why I think they just might be the highest bidder:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cisco’s Consumer Aspirations&lt;/strong&gt; – With their acquisitions of Scientific Atlanta (set top boxes), Linksys (consumer grade networking hardware and VoIP solutions), and Flip (flash memory video recorders) Cisco has made it clear they’re moving into the consumer content production and delivery device business. Acquiring Palm would give them yet another delivery device line, the underlying operating system, and hand-held hardware expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Carrier Relationships&lt;/strong&gt; – Just as the Scientific Atlanta acquisition gave Cisco a seat at the table with cable companies and Linksys solidified their position with traditional ISPs when it comes to the residential “last mile”, acquiring Palm gives them similar connections with Sprint, Verizon, AT&amp;amp;T, etc. This will be important not only with respect to handsets, but as Cisco tries to compete with network access devices like the Novatel MiFi, Sierra Wireless Overdrive, and similar devices from Motorola.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WebOS&lt;/strong&gt; – Beyond the basic intellectual property portfolio that would give Cisco a stack of chips in the mobile device patent game, Palm webOS could serve as the basis for a wide variety of touch screen devices from Cisco in a number of form factors: VoIP phones, coffee table media devices, or future Flip devices, for example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talent&lt;/strong&gt; – It’s five miles from Palm’s campus in Sunnyvale over to Cisco’s headquarters in San Jose. Picking up Palm is a great way to get a local pool of handheld system design and engineering talent—including a large pool of ex-Apple talent—for use on any number of Cisco projects, but particularly portable consumer devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deeper Pockets&lt;/strong&gt; - HTC’s market cap is $8 billion. Lenova’s is $55 billion. Cisco’s is $152 billion. If it comes down to a bidding war, Cisco takes it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vindication &lt;/strong&gt;– Ken Wirt, Cisco VP of Consumer Marketing was SVP or Worldwide Marketing for Palm from 2001 to 2006. As one of the many Palm executives left by the wayside as Palm has struggled to find a winning game plan, you’d have to think Wirt would appreciate the opportunity to show what Palm could be with the resources of a parent company like Cisco behind it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/3ZLqgFvgabY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2010/04/12/why-cisco-will-buy-palm/</feedburner:origLink></entry>
 
 <entry>
   <title>Signs of Palm Mojo</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/lzk9gKFf6y0/" />
   <updated>2009-01-11T01:28:00Z</updated>
   <id>http://www.kensheppardson.com/2009/01/11/signs-of-palm-mojo</id>
   <content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt; – It turns out Blast Radius--an interactive agency that worked on
the Palm web site--also has &lt;/em&gt;&lt;a href="http://palmwebosblog.com/palm-webos/blast-radius-developed-palm-pre-marketing-strategy-palm-webos-and-mojo-sdk/"&gt;&lt;em&gt;an in-house toolkit called
Mojo&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. The toolkit described below is
the Blast Radius tookit and doesn’t seem to be related to webOS.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The new &lt;a href="http://www.palm.com/us/products/phones/pre/index.html"&gt;Palm Pre&lt;/a&gt; will
be the first phone to use Palm’s new webOS operating system and the Palm Mojo
framework. Apparently the SDK is in private beta at the moment, and there’s
not a whole lot of information on &lt;a href="http://developer.palm.com/"&gt;Palm’s developer site&lt;/a&gt;. However, it looks like Palm has rolled out
parts of Mojo on their site. If you visit the &lt;a href="http://www.palm.com/us/products/phones/pre/palm-pre-ces.html"&gt;Palm Pre CES launch video&lt;/a&gt; page at
Palm.com, and check out the source, you’ll notice they’re already including
mojo.js:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;    &lt;span class="c"&gt;&amp;lt;!-- GLOBAL JAVASCRIPT --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/assets/js/extlib/dojo/dojo.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/assets/js/dist/extlib.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/assets/js/dist/mojo.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/assets/js/palm-config.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/assets/js/palm/global.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I wonder if it’s a coincidence Palm also uses Dojo? Scanning the mojo.js file,
here’s a list of mojo mentions:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;      &lt;span class="nx"&gt;mojo&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Behavior&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Behavior&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Behavior&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Behavior&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getRequest&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getRequest&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onError&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onResponse&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rule&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;condition&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getRequest&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCommand&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCommands&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addIntercept&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addIntercepts&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addObserver&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addObservers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCommand&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCommandChain&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updateObservers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Map&lt;/span&gt;
      &lt;span class="nx"&gt;mojoControllerMap&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getInstance&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mapController&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mapControllers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setSiteMap&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Param&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Param&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setValue&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;constructor&lt;/span&gt;
      &lt;span class="nx"&gt;mojoControllers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;distinct&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fireEvent&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Events&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectQuery&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectQuery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_createSchema&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ObjectQuery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;select&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;
      &lt;span class="nx"&gt;mojoHelperValidation&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getInstance&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isEmailAddress&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLength&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPostalCode&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showElementErrors&lt;/span&gt;
      &lt;span class="nx"&gt;mojoHistory&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;History&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;History&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getInstance&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;History&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setDefault&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;History&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setHash&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Messaging&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Messaging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTopic&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Messaging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publish&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Messaging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscribe&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MessagingTopic&lt;/span&gt;
      &lt;span class="nx"&gt;mojoMessagingTopics&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Messaging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;unsubscribe&lt;/span&gt;
      &lt;span class="nx"&gt;mojoModel&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addObserver&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contains&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getReference&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;notify&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ModelReference&lt;/span&gt;
      &lt;span class="nx"&gt;mojoModelReferences&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeObserver&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set&lt;/span&gt;
      &lt;span class="nx"&gt;mojoObserve&lt;/span&gt;
      &lt;span class="nx"&gt;mojoObservers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;queryFirst&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;queryMatch&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Delegate&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Locator&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Locator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addService&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Locator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getService&lt;/span&gt;
      &lt;span class="nx"&gt;mojoServiceRegistry&lt;/span&gt;
      &lt;span class="nx"&gt;mojoServiceRegistry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;constructor&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;invoke&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setName&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setParams&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setUri&lt;/span&gt;
      &lt;span class="nx"&gt;mojoTemplateControllers&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toSentenceCase&lt;/span&gt;
      &lt;span class="nx"&gt;mojoValidationError&lt;/span&gt;
      &lt;span class="nx"&gt;mojoValidationGroup&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Logger&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_enabled&lt;/span&gt;
      &lt;span class="nx"&gt;mojo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/lzk9gKFf6y0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2009/01/11/signs-of-palm-mojo/</feedburner:origLink></entry>
 
 <entry>
   <title>Cleaning House</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/ymx_ASAaSWg/" />
   <updated>2009-01-04T01:26:40Z</updated>
   <id>http://www.kensheppardson.com/2009/01/04/cleaning-house</id>
   <content type="html">&lt;p&gt;The year end break finally gave me the time and motivation to take care of
something that’s been nagging me for some time. For the past five or ten
years, I’ve been hosting a dozen or so random little sites for friends and
family. If you’re reading this, you might just be in the same situation: the
friend whose theater production needed a site, your family member’s band,
another friend’s pre-Flickr site for publishing kid pictures.&lt;/p&gt;

&lt;p&gt;Each one of these sites was a quick little side project, and a great excuse to
try out [insert neat new technology]. In my case I’ve accumlated a standalone
Perl CGI site, a &lt;a href="http://gallery.menalto.com/"&gt;Gallery&lt;/a&gt; photo site, a
&lt;a href="http://www.masonhq.com/"&gt;Mason&lt;/a&gt; site for a band, not to mention my own
WordPress blog. Of course web hosting has evolved quite a bit in the past
decade, so each of these sites was originally built on a different host. MSEN
back in Michigan, Aimnet here in the Bay Area, then stints on Lunarpages,
Bluehost, and most recently MediaTemple’s GridService. Different sites on
different servers, MX records pointing all over the place, a mix of
registrars…it was ugly.&lt;/p&gt;

&lt;p&gt;So to start off the new year, it’s time to start fresh. All the sites have
been consolidated, refreshed, archived, backed-up, validated, and otherwise
cleaned up. In the process, I replaced a number of services and tools that
just weren’t working for me the way they used to. Here’s what’s in my toolbox
at this point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GoDaddy&lt;/strong&gt; – I can’t stand GoDaddy. Their DNS management UI was probably down literally 50% of the time I tried to access it. They’re relegated to registrar duties only at this point, but only because they’re cheap enough it’s not worth the time to transfer to someone marginally cheaper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.linode.com/"&gt;linode&lt;/a&gt;&lt;/strong&gt; – MediaTemple’s GridService was pretty slick, however for low traffic sites there always seems to be an initial lag that feels like they’re spinning the site up or something. I took a look at both linode and slicehost, both of which offer ~$20/mo packages with root access, your choice of Linux distributions, and nice management tools. Slicehost almost had my business, but their full-instance backup feature lost out in the end to linode’s DNS management and monitoring tool. Slicehosts’s DNS UI was particularly painful, requiring you to enter each record manually in an old-style web form vs. linode’s much more robust UI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://github.com/mojombo/jekyll"&gt;jekyll&lt;/a&gt;&lt;/strong&gt; – As &lt;a href="http://www.kensheppardson.com/2008/12/24/trying-out-jekyll/"&gt;I’ve described&lt;/a&gt;, I’m using git (with repositories hosted at github) and jekyll for revision control and site generation respectively. None of these small projects really requires a database back end or dynamically generated content, so a simple site generation tool like jekyll and the use of markdown/textile makes things easy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.lighttpd.net/"&gt;lighttpd&lt;/a&gt;&lt;/strong&gt; – I’m a long time Apache user, lighttpd really does just feel lighter and cleaner, particularly for these small static sites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.postfix.net/"&gt;postfix&lt;/a&gt;&lt;/strong&gt; – I suffered with sendmail long enough, editing one config file then converting it over into a format the app actually read. Sendmail is out, postfix is in. One config file, logical config options, and logs that seem slightly easier to monitor/mine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ruby &amp;amp; Python&lt;/strong&gt; – Perl and PHP are out. Ruby and Python are in. Life is better now.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;OK, I’m old school. I was sold on straight LAMP, sendmail, RedHat derivatives
(CentOS/Fedora), vi, etc. almost ten years ago, they’ve worked for me, and I
had better things to do than reconsider those choices. But I was really just
stuck in a rut. Times change, tools evolve, the web isn’t what it was 10 years
ago, and now is as good a time as any to re-examine what’s in your tool box.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/ymx_ASAaSWg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2009/01/04/cleaning-house/</feedburner:origLink></entry>
 
 <entry>
   <title>Trying out Jekyll</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/xLODdOtP4aI/" />
   <updated>2008-12-24T01:25:19Z</updated>
   <id>http://www.kensheppardson.com/2008/12/24/trying-out-jekyll</id>
   <content type="html">&lt;p&gt;As Tom Preston-Werner (author of Jekyll) describes it:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Jekyll is a simple, blog aware, static site generator. It takes a template
directory (representing the raw form of a website), runs it through Textile or
Markdown and Liquid converters, and spits out a complete, static website
suitable for serving with Apache or your favorite web server. Visit
&lt;a href="http://tom.preston-werner.com/"&gt;http://tom.preston-werner.com&lt;/a&gt; to see an
example of a Jekyll generated blog.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Jekyll is the engine behind &lt;a href="http://github.com/blog/272-github-pages"&gt;GitHub Pages&lt;/a&gt;, which is where I first heard about it.&lt;/p&gt;

&lt;p&gt;The thought of maintaining a site via a text editor (vi, in my case) and
pushing changes out from the command line gave me some major ‘90s deja vu, but
WordPress has always seemed a bit to “heavy” for me, so I thought I’d give
Jekyll a shot. Plus &lt;a href="http://www.metajack.im/"&gt;Jack Moffit&lt;/a&gt; and &lt;a href="http://dustin.github.com/"&gt;Dustin
Sallings&lt;/a&gt; were both talking about Jekyll, and in
fact Jack had already moved his site over from Movable Type to Jekyll. Plus I
just want to be one of the cool kids, so here we are.&lt;/p&gt;

&lt;p&gt;With the git/jekyll combo, a little CGI script that does a git pull and calls
Jekyll, and the web hook feature of &lt;a href="http://github.com/"&gt;github&lt;/a&gt;, I can edit
pages locally, commit them to a git repo, and when I’m ready to make changes
on the live site I can just do a “git push”. My changes are uploaded to
github, they hit the CGI script on kensheppardson.com, and the site is
rebuilt.&lt;/p&gt;

&lt;p&gt;I have a feeling this system will encourage me to post a bit more often. We’ll
see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 3/1/2009&lt;/strong&gt; – I’m back on WordPress, primarily to test out some add-ins, but I also miss WYSIWYG a bit.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/xLODdOtP4aI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/12/24/trying-out-jekyll/</feedburner:origLink></entry>
 
 <entry>
   <title>They're just making this up, aren't they?</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/xUWB15ZWc8A/" />
   <updated>2008-11-20T01:50:41Z</updated>
   <id>http://www.kensheppardson.com/2008/11/20/theyre-just-making-this-up-arent-they</id>
   <content type="html">&lt;p&gt;Over on FriendFeed Louis Gray
&lt;a href="http://friendfeed.com/e/75e10ae5-2ea9-8e3f-ce5b-e85bc50acf05/My-Twitter-profile-is-worth-1034-http-tweetvalue/"&gt;mentioned&lt;/a&gt; that his
&lt;a href="http://twitterank.com/?t=top50"&gt;Twitterank&lt;/a&gt; is #1, and his
&lt;a href="http://www.tweetvalue.com/"&gt;Tweetvalue&lt;/a&gt; is $1034. My Tweetvalue is $241, and
I couldn't really care less what my Twitterank is, as it seems they're just
making this stuff up. Here's how twitterank relates to tweetvalue for the top
50. I think I'm going to have to assign a value of $0 to Twitterank and a rank
of last to Tweetvalue.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/kshep/kROzmeEe2tZ8Iigw5nW8XSh8dFOFhTA55qCS3AIPOInlL8xdfVJ9T2k2dtyN/CropperCapture11.png" alt="" /&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/xUWB15ZWc8A" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/11/20/theyre-just-making-this-up-arent-they/</feedburner:origLink></entry>
 
 <entry>
   <title>Daily Identi.ca Activity</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/qEo92MzXbiU/" />
   <updated>2008-10-30T22:07:53Z</updated>
   <id>http://www.kensheppardson.com/2008/10/30/daily-identica-activity</id>
   <content type="html">&lt;p&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/kshep/A0dYZwYDct7WJtjn62HWngGHtYItknP3vVK9TTA8N1ElJnk6ykdAan36ghih/CropperCapture10.png"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/kshep/qZzCrLWdlLKzvmywoZyozE9O00ZkDyw8F4RmoEqIh9lVobwBlogMdQLq71t1/CropperCapture10.png.scaled.500.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Posted from &lt;a href="http://www.kshep.net/daily-identica-activity"&gt;kshep&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/qEo92MzXbiU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/10/30/daily-identica-activity/</feedburner:origLink></entry>
 
 <entry>
   <title>TWiT Army</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/Le3fly4tPEw/" />
   <updated>2008-08-24T15:32:16Z</updated>
   <id>http://www.kensheppardson.com/2008/08/24/twit-army</id>
   <content type="html">&lt;p&gt;&lt;a href="http://www.twitlive.tv/"&gt;Leo Laporte&lt;/a&gt; has launched an instance of
&lt;a href="http://www.laconi.ca"&gt;Laconi.ca&lt;/a&gt;, the open source microblogging platform that
powers &lt;a href="http://identi.ca"&gt;Identi.ca&lt;/a&gt;. Given that Leo has 53,810 followers on
Twitter at the moment, the &lt;a href="http://army.twit.tv"&gt;TWiT Army&lt;/a&gt; could have a
pretty significant impact on the microblogging landscape.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/Le3fly4tPEw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/08/24/twit-army/</feedburner:origLink></entry>
 
 <entry>
   <title>Simple Microblogging Transport Protocol</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/SiqmzEV515E/" />
   <updated>2008-07-05T13:58:11Z</updated>
   <id>http://www.kensheppardson.com/2008/07/05/simple-microblogging-transport-protocol</id>
   <content type="html">&lt;p&gt;&lt;img style="float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/7143/6605372393_dcbcb9f0e3_o.jpg"/&gt;
If you're reading this post, then you're probably familiar with
Twitter, FriendFeed, Plurk, Identi.ca, Pownce, Jaiku, Kwippy, and
perhaps three or four other "microblogging platforms". I apply the
term somewhat loosely here. One reason for that is I don't exactly
know what it's supposed to mean. Another is that many would argue
these services can't all be lumped into the same category because
Twitter is in no way like FriendFeed, or that one of the others
doesn't deserve to be on the list, or that Jaiku is dead, or that
we're all on crack. I'm not here to argue those points.&lt;/p&gt;

&lt;p&gt;Generally, I'd describe a "microblogging platform" as a system that allows
someone to share short messages with one or more of their online contacts or
broadcast to the public. These messages, when grouped by theme or topic, make
up "threads" or conversations. They can also be searched, forwarded, replied
to, etc. They're either little nuggets of our witty and insightful thinking
that we want to share with others, or they're information like "I'm out of
beans."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Twitter&lt;/strong&gt;&lt;br/&gt;
I am mad at Twitter. (To the person I know who works for Twitter, I'm not mad
at you. Honest.) I think I'll leave it at that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Answer to Your Prayers&lt;/strong&gt;&lt;br/&gt;
In response to Twitter's recent issues, many have suggested we need some sort
of open, decentralized Twitter-like microblogging network. Dave Winer, for
one, has &lt;a href="http://www.scripting.com/stories/2008/01/16/aDecentralizedT%0Awitter.html"&gt;written&lt;/a&gt; &lt;a href="http://www.scripting.com/stories/2008/05/05/boostra%0AppingADecentralized.html"&gt;extensively&lt;/a&gt; on the &lt;a href="http://www.scripting.com/stories/20%0A08/01/18/faqIsDecentralizedTwitterJ.html"&gt;subject&lt;/a&gt;. Steve Gillmor, Marc Canter, et al
have also discussed some sort of "&lt;a href="http://www.techcrunch.com/2008/06/01/plan-b/"&gt;Plan
B&lt;/a&gt;". That conversation has
fragmented out over the web and generated some very
&lt;a href="http://blog.broadbandmechanics.com/2008/06/live-mesh-could-be-%0Atwitter%E2%80%99s-plan-b-or-we-might-have-to-do-it-ourselves"&gt;interesting&lt;/a&gt;
&lt;a href="http://www.russellbeattie.com/blog/let-the-microblogs-bloom"&gt;technical&lt;/a&gt;
&lt;a href="http://decafbad.com/blog/2008/07/04/queue-everything-and-%0Adelight-everyone"&gt;discussions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unfortunately, I don't really enjoy trying to track down and wade through
other people's posts, technical specs, and standards documents. For example,
I'd hate to have to read both the &lt;a href="http://www.openmicroblogging.org/"&gt;OpenMicrobloggingProtocol
specification&lt;/a&gt; and the &lt;a href="http://www.xmpp.org/extensions/inbox/microblogging.html"&gt;Microblogging over
XMPP specification&lt;/a&gt;
and try to figure out how they each work, let alone which is better. So rather
than try to address anyone else's specific points or aggregate all that wisdom
and all those differing opinions into some consensus, I thought it would be
best to propose a new standard that should pretty much cover everything.&lt;/p&gt;

&lt;p&gt;Before I continue, I'll give you a chance to go check FriendFeed, Google
Reader, Twitter, and your email since this isn't a quick little 30 second
comment wrapped around someone else's article. You might have to set aside a
solid five minutes for this. Alright, ready to settle in? Here we go...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple Microblogging Transport Protocol (SMTP)&lt;/strong&gt;&lt;br/&gt;
[Note: I'd originally considered calling this the "Sheppardson Microblogging
Transport Protocol" but that seemed a bit too... well... long. Plus I expect
lots of folks would misspell my name.]&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unique User Address&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We're going to be building a global distributed system here, so each user will
need some sort of SMTP ID that's good across all the nodes that make up the
SMTP network. This is really an address, of sorts, that points to our
microblogging "home" node on the web. Our home node is where we usually post
and read our microblogging content. If someone wants to direct a message to
us, they can send it to the place specified by our SMTP ID. A reader can tell
who posted a particular microblog message by examining the author's SMTP ID.&lt;/p&gt;

&lt;p&gt;I propose we use the convention of username (e.g. kshep) followed by the
address of the SMTP system on which that users lives (in my case, kshep.net).
Let's string those together, perhaps separated by a special character of some
sort, to form a unique address for each user. I'd suggest either a # or a %,
e.g. "kshep#kshep.net" or perhaps "kshep%kshep.net".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Message Content Type &amp;amp; Size&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Users will probably want to publish and consume microblog content on a wide
variety of devices, so let's limit content to text. If a user wants to
reference a picture or a mixed media document of some sort, I'm sure someone
else can come up with some sort of standard for a short (tiny, even) text
string that we could insert into a message that will tell us where that
document is located on the network. Many users seem to enjoy microblogging to
and from their cell phones so let's say the messages can be no more than 140
characters long, which is apparently the longest message cell phones can
display unless it's 160 characters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;User Interface&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's likely that users will want to both generate and consume SMTP messages on
a variety of devices, so it's important that we support a variety of use cases
and UI layouts. We're more concerned with the development of the SMTP protocol
at this point, so it's probably not necessary to delve into the UI design too
much. However it's worth noting that we'll want to support posting/reading in
the web browser, cell phone, and perhaps even desktop clients of some sort.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Message Storage, Archiving &amp;amp; Search&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Much of the criticism of existing microblogging architectures has been
directed at their reliance on relational database systems, and some critics
have proposed a file system based approach for the next generation of
services. For example, a directory could be created for each user on an SMTP
server and microblog messages could be stored as text in this directory. This
would facilitate not just indexing and data mining techniques, but rendering
this stream of microblog messages in the UI wouldn't require expensive DB
access. Luckily we're dealing with very small messages here, relative to all
the streaming media usually carried across the internet, so the bandwidth and
storage requirements probably aren't that taxing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let the Games Begin&lt;/strong&gt;&lt;br/&gt;
As you can see, I haven't thought this out completely yet. It's probably 60%
baked at this point. I'd encourage you to leave comments, ask questions, and
raise issues. For example, it's not quite clear to me how you'd send an SMTP
message to everyone on a particular server, or what you'd do with a message
intended for someone on a remote server if that server is down, or how you'd
make sure the person sending you a message is who she says she is.&lt;/p&gt;

&lt;p&gt;Also, in order to get Steve Gillmor on board (and I do honestly hope he comes
on board. Seriously.) we need to figure out how to get track to work. This
means each SMTP server will probably need to examine and filter messages based
on their content and route those messages accordingly. Again, this is an
important area for further discussion and investigation.&lt;/p&gt;

&lt;p&gt;I do have one request: Please limit your conversation on the new SMTP
specification to the comments here on this post, as I want everyone to realize
this was my idea. Thanks in advance.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/SiqmzEV515E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/07/05/simple-microblogging-transport-protocol/</feedburner:origLink></entry>
 
 <entry>
   <title>Twitter Clones -- Deja Vu All Over Again</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/QZKsiwnl0po/" />
   <updated>2008-07-03T08:58:58Z</updated>
   <id>http://www.kensheppardson.com/2008/07/03/twitter-clones-deja-vu-all-over-again</id>
   <content type="html">&lt;p&gt;With all the talk of identi.ca, Plurk, Jaiku, FriendFeed, Twitter down time
and the chatter from folks looking for a stable, full-featured social
messaging service, I thought I might recycle an article from the archives.
Please forgive me for the re-post, and the slight license taken in the
translation.&lt;/p&gt;

&lt;hr /&gt;

&lt;pre&gt;
From: k...@aimnet.com (Ken Sheppardson)

Subject: Diary of a New &lt;strike&gt;Aimnet&lt;/strike&gt; Insti.ca Subscriber and an
Idea

Date: &lt;strike&gt;1995/11/30&lt;/strike&gt; 2008/07/03

Message-ID: [&lt;49jabf$hj1@news2.aimnet.com&gt;#1/1](http://groups.google.com/group
/ba.internet/msg/d50b4c55c2330ffc?dmode=source)

X-Deja-AN: 120577770

organization: &lt;strike&gt;Aimnet&lt;/strike&gt; Insti.ca Information Services

reply-to: k...@aimnet.com

newsgroups: aimnet.general,ba.internet

Well I'm in my second &lt;strike&gt;week&lt;/strike&gt; day as an &lt;strike&gt;Aimnet&lt;/strike&gt;
Insti.ca subscriber. I'm not impressed yet.

Tonight once again I'm unable to &lt;strike&gt;call into their Belmon POP&lt;/strike&gt;
get my XMPP account connected. (Only the second time, which puts this problem
relatively low on my list.) It keeps rejecting my login, so I'm in through
&lt;strike&gt;SF&lt;/strike&gt; Jaiku again. No answer on the first call, but I'm in on
the second. What's wrong with &lt;strike&gt;Belmont&lt;/strike&gt; Insti.ca I wonder. No
explanation &lt;strike&gt;in aimnet.announce&lt;/strike&gt; on Lucindi.ca or any other
&lt;strike&gt;aimnet group&lt;/strike&gt; FriendFeed room. It seems the support staff
doesn't read (or at least doesn't post to) their own &lt;strike&gt;groups&lt;/strike&gt;
corporate site.

It's been five or ten times now that I've seen the "Server does not have a DNS
entry" message from &lt;strike&gt;Netscape&lt;/strike&gt; Firefox when I try to access
&lt;strike&gt;http://www.aimnet.com&lt;/strike&gt; [www.identi.ca](http://www.identi.ca).
Strange that their own name server doesn't have an entry for their web server.
Ah...there it goes. In general I seem to be batting 30% or so in hitting
outside sites on the first try. What's wrong with the DNS server, I wonder.

It only takes 45-60 seconds for my home page to come up when I try
&lt;strike&gt;http://www.aimnet.com/~kens&lt;/strike&gt;,
[http://identi.ca/kshep](http://identi.ca/kshep) &lt;strike&gt;although it comes up
pretty much instantaneously when I try users.aimnet.com. Why so long

to redirect?&lt;/strike&gt;

Many problems. I'd suggest people stay away at this point. Of course I don't
know if this is typical &lt;strike&gt;in the bay area&lt;/strike&gt; or not. I've
certainly had more problems than I did with my previous provider:
&lt;strike&gt;Msen, in Ann Arbor, Michigan.&lt;/strike&gt; Jaiku, now part of Google
&lt;strike&gt;msen.com&lt;/strike&gt;  of course they had their share of problems
too...this certainly isn't an ad for them)

If there's anybody out there looking to provide a great service to the
Internet community, I've got an idea for you: Get an account with every
&lt;strike&gt;ISP&lt;/strike&gt; Twitter clone you can find. At regular intervals try to
log into each, check mail, read news, check web pages, check the number of
entries in passwd files, check disk usage %s on /usr volumes, then compile
stats on problems, busy signals, etc. Put it all together in a monthly
newsletter (&lt;strike&gt;real paper even&lt;/strike&gt;) and &lt;strike&gt;sell it in area
bookstores, computer stores, coffee shops, and anywhere else you can think
of.&lt;/strike&gt; give it away on your blog. I, for one, would &lt;strike&gt;pay somebody
$10 or so right this second for a

current copy.&lt;/strike&gt; leave you a comment.
&lt;/pre&gt;


&lt;p&gt;Whadya think?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/QZKsiwnl0po" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/07/03/twitter-clones-deja-vu-all-over-again/</feedburner:origLink></entry>
 
 <entry>
   <title>Summize is your Imaginary Friend</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/w0tSDPuL1Oc/" />
   <updated>2008-06-28T09:21:35Z</updated>
   <id>http://www.kensheppardson.com/2008/06/28/summize-is-your-imaginary-friend</id>
   <content type="html">&lt;p&gt;If anybody's keeping score, I'm one of those folks who thinks that IM, SMS,
email, &lt;a href="http://www.twitter.com/kshep"&gt;Twitter&lt;/a&gt;,
&lt;a href="http://friendfeed.com/kshep"&gt;FriendFeed&lt;/a&gt;, and perhaps another two or three
other services we haven't seen yet each have their place and that no one
service is likely to crush another, let alone all the others. I do find myself
spending more and more time on FriendFeed, however, and for information flow
that's not time sensitive, FriendFeed and &lt;a href="http://www.feedly.com/"&gt;Feedly&lt;/a&gt;
make up my dashboard.&lt;/p&gt;

&lt;p&gt;One very handy but somewhat hidden feature of FriendFeed is the "&lt;a href="http://friendfeed.com/settings/imaginary"&gt;Imaginary
Friend&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;This feature allows you to add a contact with one or more associated feeds for
individuals who don't yet have a FriendFeed account. It's also handy for
bringing feeds from other services into your FF flow. For example, you can
create an Imaginary Friend corresponding to a service like Summize, then add
feeds for the different searches you'd like to monitor. In other words, you
can reconstruct the Twitter "track" feature and have the results appear
directly in FriendFeed.&lt;/p&gt;

&lt;p&gt;To show you an example, let's just suppose the Twitter "Replies" tab is
disabled and you've sworn off Twitter until track and IM come back online, but
you don't want to miss messages addressed to you in Twitter. Your Imaginary
Friend Summize rides to the rescue:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Generate a feed URL on Summize&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First head off to Summize and perform whatever search you'd like to save. The
advanced search features are VERY handy, and let you do things like search for
all mentions of your Twitter ID that aren't in messages from you. For me, that
search string is "kshep -from:kshep"." Once you've performed that search
you'll find a link in the upper right corner of the results page with the URL
for your query. Right-click on the link and copy the link for future use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Create your Imaginary Friend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, over on FriendFeed go to the "friend settings" tab, choose "imaginary"
from the top nav bar, and enter the name of your new friend. Once you've
created this friend, you can add services associated with the friend just as
you would add feeds to your own account. In this case we'll pretend the
Summize search feed is just a blog. Go ahead and click on the "Blog" link and
enter the URL you generated in Step 1. If you'd like, you can add multiple
feeds to the Summize friend, one for every "track"-style search you'd like to
perform. Of course there's some latency in this approach that you don't have
to deal with when you're using the Twitter track feature, but with the track
feature offline for the foreseeable future and more and more users splitting
their time between the two services, sometimes you just have to take what you
can get.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/w0tSDPuL1Oc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/06/28/summize-is-your-imaginary-friend/</feedburner:origLink></entry>
 
 <entry>
   <title>FriendFeed Target Window Script</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/tkdgO7_CSuo/" />
   <updated>2008-06-27T14:49:28Z</updated>
   <id>http://www.kensheppardson.com/2008/06/27/friendfeed-target-window-script</id>
   <content type="html">&lt;p&gt;Here's a quick little Greasemonkey script that addresses one of the little
quirks in my FriendFeed workflow. I've set FriendFeed as my home page and
always have it open in a Firefox window. It updates automatically, with new
items appearing at the top of the page. About 95% of the time I right-click
on the links in items and open them in a
new window so I still have the FriendFeed home page open.&lt;/p&gt;

&lt;p&gt;After installing several of the &lt;a href="http://internetducttape.com/2008/03/20/greasemonkey-script-filter-friendfeed-by-service/"&gt;FriendFeed Greasemonkey
scripts&lt;/a&gt; over at Internet Duct Tape, I finally broke down and
wrote my own. This script updates all the links in the body of the page so
that they open in a "content" window, rather than window where the FriendFeed
page appears.&lt;/p&gt;

&lt;p&gt;Rather than duplicate a full tutorial on Greasemonkey and FriendFeed, I'd
suggest you check out the &lt;a href="http://internetducttape.com/2007/08/24/howto-use-firefox-greasemonkey-%0Auserscripts-screenshots/"&gt;tutorial on Internet Duct
Tape&lt;/a&gt;. Once you've done that, you should be able to follow
the link below to install the "Target Window" script.&lt;/p&gt;

&lt;p&gt;[ &lt;a href="http://userscripts.org/scripts/show/29262"&gt;FriendFeed Target Window Script&lt;/a&gt; ]&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/tkdgO7_CSuo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2008/06/27/friendfeed-target-window-script/</feedburner:origLink></entry>
 
 <entry>
   <title>OpenSocial First Impressions</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/FRi-Da1xppk/" />
   <updated>2007-11-04T18:32:03Z</updated>
   <id>http://www.kensheppardson.com/2007/11/04/opensocial-first-impressions</id>
   <content type="html">&lt;p&gt;This weekend I spent some
time experimenting with &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;
a bit and watching the flow of comments in Google's &lt;a href="http://groups.google.com/group/opensocial-api/"&gt;opensocial developer
forum&lt;/a&gt;. First of all, it's not
really of much use to me at the moment as they haven't yet launched the "Data"
part of their API, which will eventually allow RESTful access to profile data
on OpenSocial containers. That means I'm left to watch from the sidelines as
folks muddle through writing widgets. Bottom line: it seems like an early Beta
at best, and there are lots of unanswered questions ranging from security
concerns to how "open" the API revision process will be to how exactly new
members can join the OpenSocial "club". Unless you want to deal with early-
adopter/beta tester issues, give it a month or so before you jump onboard.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/FRi-Da1xppk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2007/11/04/opensocial-first-impressions/</feedburner:origLink></entry>
 
 <entry>
   <title>Enough Gear Already</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/A851mZy5_5w/" />
   <updated>2007-08-20T23:07:35Z</updated>
   <id>http://www.kensheppardson.com/2007/08/20/enough-gear-already</id>
   <content type="html">&lt;p&gt;It seems that in addition to collecting guitars, computer hardware, digital
cameras, unused calendars, planning systems and black Cordura bags I've also
gotten stuck collecting blogging and social networking accounts. Plaxo,
Linkedin, Flickr, Flixster, Facebook, Jaiku, Twitter, etc, etc. plus all the
little plug-ins for cross-posting and integration.&lt;/p&gt;

&lt;p&gt;It appears it's about time for a "code freeze" of sorts: That's it. No more
new systems. No more changes. It's time to actually make music, take pictures,
and write.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/A851mZy5_5w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2007/08/20/enough-gear-already/</feedburner:origLink></entry>
 
 <entry>
   <title>Making a Hipster PDA Case</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/R0VOGn98y7Y/" />
   <updated>2007-02-21T23:36:59Z</updated>
   <id>http://www.kensheppardson.com/2007/02/21/making-a-hipster-pda-case</id>
   <content type="html">&lt;p&gt;&lt;img style="float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/140/398433398_557ebf28bb_m.jpg"/&gt;
Like many folks I
fell onto the &lt;a href="http://www.davidco.com/"&gt;GTD&lt;/a&gt; bandwagon about a year ago after
stumbling upon &lt;a href="http://www.43folders.com/"&gt;43folders.com&lt;/a&gt;. One thing led to
another, and pretty quickly I found myself carrying a &lt;a href="http://www.43folders.com/2004/09/03/introducing-the-hipster-pda/"&gt;Hipster
PDA&lt;/a&gt;, better
know to anybody over thirty as "a stack of index cards." A traditional hPDA is
held together with a binder clip, but that just didn't work for me. The clip
would catch on things, the card edges would fray, and it just didn't seem like
an elegant solution to me. I'd look for something better whenever I was in an
office supply store, but never did find anything that seemed quite right.
Finally, I decided I'd just try to make something, and after 5 minutes in
Office Depot and 10 minutes with a paper cutter I had what I wanted: a clear
plastic holder that didn't add any substantial thickness or bulk but protected
the cards and provided easy access. After a few months, the holder was looking
a bit ragged, so I thought it was time to make a new one. Here's the process (A &lt;a href="http://www.flickr.com/photos/kshep/398433416/in/set-72157594549637867"&gt;full set of pictures&lt;/a&gt; is available on Flickr):&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;table&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src=" http://static.flickr.com/145/398433416_aedc5ee0d7_t.jpg "/&gt; &lt;/td&gt;&lt;td&gt;Avery Clear Binder Pockets (75423) come five to a pack. A pack is just over $3 including tax at any of the big three office supply houses (Office Depot, Office Max, or Staples)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/128/398433251_81eb376c3d_t.jpg"/&gt; &lt;/td&gt;&lt;td&gt;First, cut the lower right corner from the binder pocket. The sealed length on the side opposite the holes will become the bottom of the card holder. You can cut a rough blank that's 7 inches or so by 5.5 or 6 and trim it down to size.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/167/398433284_4d323439a0_t.jpg"/&gt; &lt;/td&gt;&lt;td&gt;The left side of the rough blank is the original fold in the pocket. The top is open, and the bottom is the sealed section.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/187/398433326_159eb0a8fe_t.jpg"/&gt; &lt;/td&gt;&lt;td&gt;Cut back along the sealed seam on the bottom leaving just over 3 inches intact, then cut the flap off (Just the upper layer, that is).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/171/398433354_24e6803b41_t.jpg"/&gt; &lt;/td&gt;&lt;td&gt;Stick as many cards as you're likely to carry in the pocket as a guide, then fold the cover flap over. You'll need to crease the cover fold firmly, but as hard as you might crease it, it will likely take several days before the cover sits flat.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;img style="clear: left; float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/188/398433378_2d1af402fb_t.jpg"/&gt; &lt;/td&gt;&lt;td&gt;The holder on the left has bounced around from shirt pocket to pants pocket to computer bag and back for the better part of six months. The holder on the right is new.&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/R0VOGn98y7Y" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2007/02/21/making-a-hipster-pda-case/</feedburner:origLink></entry>
 
 <entry>
   <title>Outlook "Sent Items" Hack</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/d89MwBb5xUM/" />
   <updated>2006-06-05T23:09:01Z</updated>
   <id>http://www.kensheppardson.com/2006/06/05/outlook-sent-items-hack</id>
   <content type="html">&lt;p&gt;For years, Outlook’s inability to have Sent Items go anywhere but the Sent
Items folder has been a little pet peeve of mine. It might seem a little
counterintuitive, but I really like everything I send to end up in my inbox
where I sort it, file it, set up a "next action" ala GTD, etc. Up until now
I'd just move the contents of my Sent Items folder to the Inbox folder every
once in a while. Well, reading CNXN's &lt;a href="http://cnxn.ca/NoFoldersTutorial.html"&gt;article on using Outlooks without
folders&lt;/a&gt; finally gave me a bit of a
nudge, and a quick google turned up the following bit of code. Open Outlook’s
Visual Basic editor, go to the ThisOutlookSession object, paste in the
following code, save, restart Outlook, and anything that appears in Sent Items
will immediately be moved ot the Inbox.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="vbnet"&gt;    &lt;span class="k"&gt;Public&lt;/span&gt; &lt;span class="k"&gt;WithEvents&lt;/span&gt; &lt;span class="n"&gt;SentItems&lt;/span&gt; &lt;span class="ow"&gt;As&lt;/span&gt; &lt;span class="n"&gt;Outlook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Items&lt;/span&gt;
    &lt;span class="k"&gt;Private&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt; &lt;span class="nf"&gt;Application_Startup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;SentItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;
    &lt;span class="n"&gt;Outlook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDefaultFolder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;olFolderSentMail&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;Items&lt;/span&gt;
    &lt;span class="k"&gt;End&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt;
    &lt;span class="k"&gt;Private&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt; &lt;span class="nf"&gt;Application_Quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;SentItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;Nothing&lt;/span&gt;
    &lt;span class="k"&gt;End&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt;
    &lt;span class="k"&gt;Private&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt; &lt;span class="nf"&gt;SentItems_ItemAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ByVal&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt; &lt;span class="ow"&gt;As&lt;/span&gt; &lt;span class="kt"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Move&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;
    &lt;span class="n"&gt;Outlook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDefaultFolder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;olFolderInbox&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;End&lt;/span&gt; &lt;span class="k"&gt;Sub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/d89MwBb5xUM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/06/05/outlook-sent-items-hack/</feedburner:origLink></entry>
 
 <entry>
   <title>Free SketchUp</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/wGHO85sgI2c/" />
   <updated>2006-04-27T08:00:35Z</updated>
   <id>http://www.kensheppardson.com/2006/04/27/free-sketchup</id>
   <content type="html">&lt;p&gt;SketchUp is a neat, intuitive 3D drawing program from a company called @Last.
Following Google's general modus operandi these days, and in complete
opposition to Microsoft's general approach, Google bought the company a little
while back and is "liberating" the software--or at least a version of it.
Their objective is certainly to make it as easy as possible to populate
&lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;, but that doesn't take anything away
from the fact that the software's just cool.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;img style="float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/53/135955431_eda2988bec_m.jpg"/&gt;
Google SketchUp--great name, huh?--
is a completely separate application from regular ol' SketchUp 5, which we've
renamed--get ready for this--SketchUp Pro 5. The free version can be
downloaded for $6000 (just wanted to see if you were paying attention) can be
downloaded for FREE from Google. It's perfect for people who love SketchUp but
who can't justify the price of SketchUp Pro. Do-it-yourself kitchen
remodelers, backyard rocket builders, basement model train obsessives; Google
SketchUp will let just about everyone build and show off their creations in
3D. I think it's a great day for 3D nerds everywhere, and I mean that in the
best possible way.&lt;/p&gt;

&lt;p&gt;[ &lt;a href="http://www.sketchup.com/index.php?id=1439"&gt;more&lt;/a&gt; ]&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/wGHO85sgI2c" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/04/27/free-sketchup/</feedburner:origLink></entry>
 
 <entry>
   <title>Back to Plaxo</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/VXOA7N57MdQ/" />
   <updated>2006-04-26T09:27:09Z</updated>
   <id>http://www.kensheppardson.com/2006/04/26/back-to-plaxo</id>
   <content type="html">&lt;p&gt;I've installed Plaxo more than once over the years, but in the end I was
always guilted into dropping it. Enough folks I know use it now, however, that
I'm back. Perhaps I'll stay with it this time since they're now "less evil"...&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Well, Plaxo has &lt;a href="http://blog.plaxo.com/archives/2006/03/a_little_less_i.html"&gt;finally
announced&lt;/a&gt; that
they’ve harassed enough people into joining and won’t be making it quite so
easy to for users to spam their entire address book. The words they chose
certainly tell us that, at least internally, they fully knew how miserable
they were making all of us&lt;/p&gt;

&lt;p&gt;-- &lt;a href="http://www.techcrunch.com/2006/03/22/plaxo-now-with-less-evil/"&gt;TechCrunch » Plaxo: Now With Less
Evil&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/VXOA7N57MdQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/04/26/back-to-plaxo/</feedburner:origLink></entry>
 
 <entry>
   <title>First Things First</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/-C_X6dL0OH8/" />
   <updated>2006-04-17T21:38:56Z</updated>
   <id>http://www.kensheppardson.com/2006/04/17/first-things-first</id>
   <content type="html">&lt;p&gt;It's occured to me over the past month that blogging makes much more sense for
folks who have some sort of blog entry-sized opinion to offer on a regular
basis. It's not clear that I do. In other words, it's good to have content
before you build a system for presenting that content. This site is probably
much more sandbox than soapbox, and I suspect it'll morph quite a bit over the
next few days/weeks.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/-C_X6dL0OH8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/04/17/first-things-first/</feedburner:origLink></entry>
 
 <entry>
   <title>Beyond Compare</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/NFToE874paQ/" />
   <updated>2006-03-19T07:08:46Z</updated>
   <id>http://www.kensheppardson.com/2006/03/19/beyond-compare</id>
   <content type="html">&lt;p&gt;If you're a software developer, web designer, or simply use files on more than
one computer, you need &lt;a href="http://www.scootersoftware.com/"&gt;Beyond Compare&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;img style="float: left; padding: 0px 10px 5px 0px;" src="http://static.flickr.com/19/114638235_6e15ac3e2a_m.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Beyond Compare is a powerful time-saving utility for comparing files and
folders on your Windows system.&lt;/p&gt;

&lt;p&gt;Use it to manage source code, keep folders in sync, compare program output,
and validate copies of your data. Beyond Compare can create a snapshot of a
live directory structure, and compare it against the live copy at a later
date.&lt;/p&gt;

&lt;p&gt;Beyond Compare helps you analyze differences in detail and carefully reconcile
them. It commands a wide range of file and text operations, as well as script
commands for automating tasks.&lt;/p&gt;

&lt;p&gt;-- &lt;a href="http://www.scootersoftware.%0Acom/moreinfo.php"&gt;http://www.scootersoftware.com/moreinfo.php&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I've used BC for years, and I use it almost every day. Not only is it the best
tool I've found for synchronizing files from my laptop or desktop PC to
various servers, but it's even saved me when I had to replace a bad hard drive
and selectively copy the contents of the old drive over to the new one. I
can't recommend it highly enough.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/NFToE874paQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/03/19/beyond-compare/</feedburner:origLink></entry>
 
 <entry>
   <title>For the Record</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/GWL3J3HFfzU/" />
   <updated>2006-03-05T18:40:01Z</updated>
   <id>http://www.kensheppardson.com/2006/03/05/for-the-record</id>
   <content type="html">&lt;p&gt;&lt;img style="float: right; margin: 0px 0px 5px 10px;" src="http://static.flickr.com/54/110343255_ff3f90434e_m.jpg"/&gt;
I can clearly remember sitting at my desk in
the Research Activities Building on the engineering campus of the University
of Michigan back in 1988 posting to USENET from a trusty old &lt;a href="http://www.citi.umich.edu/apollo-archive/"&gt;Apollo Domain
workstation&lt;/a&gt;. Apollo lost the
workstation battle to Sun and was absorbed by Hewlett-Packard in 1989. The
building where I shared an office was demolished in 1989 to make way for a
&lt;a href="http://www.fxbfoundation.org/ebldg.htm"&gt;shiny new one&lt;/a&gt; with a nice &lt;a href="http://www.fxbfoundation.org/maya.htm"&gt;green
lumpy lawn&lt;/a&gt;. I graduated and began the
process of forgetting most of what I learned. Little did I know that it would
be my USENET posts that would outlast pretty much everything else.&lt;/p&gt;

&lt;p&gt;&lt;img style="float: left; margin: 0px 10px 5px 0px;" src="http://static.flickr.com/37/110345723_d26e64ac4d_t.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;In 2001 Google
&lt;a href="http://www.google.com/press/pressrel/pressrelease48.html"&gt;acquired&lt;/a&gt; Deja.com
(aka &lt;a href="http://en.wikipedia.org/wiki/Dejanews"&gt;DejaNews&lt;/a&gt;). When they did so they
brought online and indexed Deja's entire USENET archive, dating back to
&lt;a href="http://www.google.com/googlegroups/archive_announce_20.html"&gt;1981&lt;/a&gt;. It turns
out that archive contained pretty much everything I'd ever written online.
It's more than a little strange and just a bit embarassing to have nearly
twenty years of material suddenly surface when you'd assumed it had all
floated off into electronic space long ago. I won't make that mistake again.&lt;/p&gt;

&lt;p&gt;To anyone reading this blog in 2026, please ignore everything I wrote from
1986 to 2005 or so. I had no idea what I was talking about.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/GWL3J3HFfzU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/03/05/for-the-record/</feedburner:origLink></entry>
 
 <entry>
   <title>Finally</title>
   <link href="http://feedproxy.google.com/~r/KenSheppardson/~3/C0CPP2guOtU/" />
   <updated>2006-02-21T21:52:52Z</updated>
   <id>http://www.kensheppardson.com/2006/02/21/finally</id>
   <content type="html">&lt;p&gt;I have a blog. I don't know how I got along so long without one. Now I just
eeed to post random rantings for the next few months and the next thing you
know &lt;a href="http://www.charlierose.com/"&gt;Charlie Rose&lt;/a&gt;, &lt;a href="http://www.npr.org/templates/rundowns/rundown.php?prgId=13"&gt;Terry
Gross&lt;/a&gt;, and &lt;a href="http://www.comedycentral.com/shows/the_daily_show/index.jhtml"&gt;Jon
Stewart&lt;/a&gt; will
all be thanking me for stopping by.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/KenSheppardson/~4/C0CPP2guOtU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.kensheppardson.com/2006/02/21/finally/</feedburner:origLink></entry>
 
 
</feed>

