<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thought Palace &#187; Me</title>
	<atom:link href="http://jens.mooseyard.com/category/me/feed/" rel="self" type="application/rss+xml" />
	<link>http://jens.mooseyard.com</link>
	<description>Little boxes made of words, by Jens Alfke</description>
	<lastBuildDate>Tue, 09 Feb 2010 17:58:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Music I Liked Of 2009</title>
		<link>http://jens.mooseyard.com/2009/12/the-music-i-liked-of-2009/</link>
		<comments>http://jens.mooseyard.com/2009/12/the-music-i-liked-of-2009/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 18:31:35 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Me]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=388</guid>
		<description><![CDATA[Every year the Albums Of The Year lists seem more and more removed from my experience. (Most of the time I haven't heard a single album on the list.) Worse, we're now getting into the Of The Decade lists, making me realize how long this has been going on*. If you ask me the top albums of the '80s or '90s, I don't have too much trouble rattling off a bunch of names. But this decade? I get confused and have to start thinking hard and looking through the back covers of my mix CDs. Why is that? <i>[Ed.: it's because you're getting old. Duh.]</i>

Let me start with this year, 2009. What was good? Hm; my prosthetic brain units at iTunes and last.fm tell me that it's...]]></description>
			<content:encoded><![CDATA[	<p>Every year the Albums Of The Year lists seem more and more removed from my experience. (Most of the time I haven&#8217;t heard a single album on the list.) Worse, we&#8217;re now getting into the Of The Decade lists, making me realize how long this has been going on*. If you ask me the top albums of the &#8216;80s or &#8216;90s, I don&#8217;t have too much trouble rattling off a bunch of names. But this decade? I get confused and have to start thinking hard and looking through the back covers of my mix CDs. Why is that? <i>[Ed.: it&#8217;s because you&#8217;re getting old. Duh.]</i></p>

	<p>Let me start with this year, 2009. What was good? Hm; my prosthetic brain units at iTunes and last.fm tell me that it&#8217;s:</p>

	<p>&bull; <strong>Dysrhythmia</strong>, &quot;<a href="http://www.myspace.com/dysrhythmiaband">Psychic Maps</a>&quot; [jaw-dropping instrumental math-metal, will have you banging your head in 7/13 time.]</p>

	<p>&bull; <strong>Isis</strong>, &quot;<a href="http://pitchfork.com/reviews/albums/13009-wavering-radiant/">Wavering Radiant</a>&quot; [post-metal? huge lowercase-&#8217;p&#8217; progressive epics. so good I&#8217;m willing to overlook the cookie-monster vocals.]</p>

	<p>&bull; <strong>Pelican</strong>, &quot;<a href="http://www.emusic.com/album/Pelican-Ephemeral-MP3-Download/11487598.html">Ephemeral</a>&quot; <span class="caps">EP </span>[is it post-rock with big riffs? or restrained brainy instrumental metal?]</p>

	<p>&bull; <strong>Apricot Rail</strong>, &quot;<a href="http://music.hiddenshoal.com/artists/apricot-rail/">Apricot Rail</a>&quot; [ok, this is instrumental-post-rock for sure, but atypically cheerful, kind of like Do Make Say Think. they&#8217;ve even got oboes omg!]</p>

	<p>&bull; <strong>The Happy Hollows</strong>, &quot;<a href="http://www.myspace.com/thehappyhollows">Spells</a>&quot; [this is the token recognizably-indie-rock album on the list. are they secretly Deerhoof covering the Pixies? Or Lush covering Interpol? also, they are <a href="http://www.rockscope.com/article/259/Happy-Hollows---Spaceland">hella cute</a> and I can&#8217;t wait to see them live]</p>

	<p>&bull; <strong>Dirty Projectors</strong>, &quot;<a href="http://westernvinyl.com/artists/dirty_projectors.html">Bitte Orca</a>&quot; [I still can&#8217;t figure this out, with its Afrobeat guitar lines, intricate interlocking vocals, weird rhythms and weirder lyrics. ok, that description makes it sound like &quot;Remain In Light&quot;, which it isn&#8217;t at all like, but maybe is somehow.]</p>

	<p>&bull; <strong>Elisa Luu</strong>, &quot;<a href="http://agora.hiddenshoal.com/index.php?main_page=product_info&#038;cPath=42&#038;products_id=117">Chromatic Sigh</a>&quot; [can I say &quot;eclectic&quot; with a straight face? really interesting electronic music, clearly song-like, ranging between poles of rock and ambient.]</p>

	<p>&bull; <strong>Anduin + Jasper TX</strong>, &quot;<a href="http://www.boomkat.com/item.cfm?id=177591">The Bending Of Light</a>&quot; [guitar-based drone. majestic.]</p>

	<p>&bull; <strong>Brock van Wey</strong>, &quot;<a href="http://www.popmatters.com/pm/review/116078-brock-van-wey-white-clouds-drift-on-and-on/">White Clouds Drift On And On</a>&quot; [exactly what it sounds like. it comes with or without beats, your choice.]</p>

	<p>&bull; <strong>Eluder</strong>, &quot;<a href="http://www.archaichorizon.com/releases/ah030/ah030.html">Drift</a>&quot; [exactly what it sounds like, too. careful with this one, some people have had trouble returning to earth afterwards.]</p>

	<p>&bull; <strong>J&oacute;nsi &#038; Alex</strong>, &quot;<a href="http://jonsiandalex.com/">Riceboy Sleeps</a>&quot; [Sigur R&oacute;s guitarist and his boyfriend do Stars Of The Lid. delicious in small doses.]</p>

	<p>&bull; <strong>Victoire</strong>, &quot;<a href="http://www.emusic.com/features/spotlight/2009_200903-qa-selects-victoire.html">A Door Into The Dark</a>&quot; <span class="caps">EP </span>[a string ensemble that embraces electronics as a natural part of their sound]</p>

	<p>&bull; <strong>Sub</strong>, &quot;<a href="http://www.plainaudio.com/dnb/releases/pp030md.html">Id</a>&quot; <span class="caps">EP </span>[nothing new, but basically the best Photek tracks I&#8217;ve heard in ten years.]</p>

	<p>PS: there might be some last minute additions to this list if Kate Simko&#8217;s &quot;Sounds Of The Atom Smashers&quot; and Concern&#8217;s &quot;Truth And Distance&quot; live up to their potential.<br />
<span class="caps">PPS</span>: ZOMG I forgot Sunn O)))&#8217;s stark and forbidding &quot;Monoliths And Dimensions&quot;, whose final track &quot;Alice&quot; is deserving of a space up there.<br />
<span class="caps">PPPS</span>: Yes, a mix of this stuff is forthcoming&#8230;</p>

	<p><span style="font-size: smaller; ">* It&#8217;s not like I&#8217;ve been having trouble finding great new music, or that I resent other people for all picking different music than me; but it&#8217;s a little sad to not be part of the zeitgeist. Long ago it was really important to me whether punk and new wave would break dinosaur rock&#8217;s lock on the mainstream, or whether little-known underground bands like the Cure or the Pixies would get the recognition they deserved. I think the peak of my with-it-ness was circa 1990-91 when I could rattle off the name of every shoegazer band that mattered and I treated every issue of Melody Maker as a shopping list to take with me to the import bin at Tower to find the next Cranes or Chapterhouse.</span></p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/12/the-music-i-liked-of-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ottoman Status</title>
		<link>http://jens.mooseyard.com/2009/12/ottoman-status/</link>
		<comments>http://jens.mooseyard.com/2009/12/ottoman-status/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:12:16 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=386</guid>
		<description><![CDATA[Yes, I'm still working on Ottoman (my append-only multiversion-concurrent storage library). As the code grows in size and complexity, so it grows in its resistance to being changed. But I just pushed "my latest changes":http://bitbucket.org/snej/ottoman/changesets/ up to bitbucket.org. What's new? ...]]></description>
			<content:encoded><![CDATA[	<p>Yes, I&#8217;m still working on Ottoman (my append-only multiversion-concurrent storage library). As the code grows in size and complexity, so it grows in its resistance to being changed, but as Piet Hein said and I never tire of quoting:</p>

	<blockquote><em>Problems worthy of attack</em><br />
<em>Prove their worth by fighting back.</em></blockquote>

	<p>I just pushed <a href="http://bitbucket.org/snej/ottoman/changesets/" title="">my latest changes</a> up to bitbucket.org. What&#8217;s new?</p>

	<p><strong>Variable-sized top-level index.</strong> Previously, the hash data structure used a top level array of 256 hashtables. I&#8217;ve now made that &#8216;256&#8217; a variable that scales with the number of records. This saves a lot of room for smaller datasets. (Sounds easy, right? I thought so too. But it ended up triggering significant changes to the file format and algorithms and took a lot of debugging.)</p>

	<p><strong>The return of the trees! part un.</strong> I started this as a project to learn about B+trees, but when I got to the point of implementing the append-only multiversion stuff I did it with hashtables first because it&#8217;s more straightforward that way, and the tree code went into the freezer. Well, it&#8217;s back now. There is a &#8220;new&#8221; <a href="http://bitbucket.org/snej/ottoman/src/tip/src/Tree.h" title="">Tree</a> class that can be used to read and write persistent B+trees. It&#8217;s not yet integrated into the top-level Ottoman class, though, so you can only use it on its own, not intermixed with hash-tables, and without the <span class="caps">API</span> for tracking versions.</p>

	<p>The next task is of course to integrate the tree <span class="caps">API</span> into the Ottoman class. But more than that, it will be entwined with the hashtable such that trees will serve as searchable indexes into the data store. So the hashtable will provide extremely fast but unordered access via a unique &#8220;record ID&#8221;, but you can build as many indexes as you like that will use ordered secondary keys (of your choice) to look up hash values.</p>

	<p>At that point, I believe Ottoman will be ready to serve as a substrate for <span class="caps">HTML</span> local data storage, for <a href="http://jchrisa.net/drl/_design/sofa/_show/post/HTML5-Storage-Continues" title="">implementing a CouchDB-compatible database</a> (a la <a href="http://github.com/jchris/WebWorkerStorage/blob/master/JSONDB.md" title=""><span class="caps">JSONDB</span></a>), or for other fun databasey purposes.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/12/ottoman-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZSync</title>
		<link>http://jens.mooseyard.com/2009/11/zsync/</link>
		<comments>http://jens.mooseyard.com/2009/11/zsync/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 01:51:03 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[Peer-to-Peer]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=384</guid>
		<description><![CDATA["ZSync":http://www.zarrastudios.com/ZSync/ZSync.html is a new Mac/iPhone library that uses my "BLIP":http://bitbucket.org/snej/mynetwork/wiki/BLIP/Overview P2P networking protocol.]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.zarrastudios.com/ZSync/ZSync.html" title="">ZSync</a> is a new Mac/iPhone library that uses my <a href="http://bitbucket.org/snej/mynetwork/wiki/BLIP/Overview" title=""><span class="caps">BLIP</span></a> P2P networking protocol:</p>

	<blockquote>&#8220;ZSync is an open source syncing library designed to allow easy syncing of data between an iPhone/iPod Touch and the <span class="caps">OS X </span>Desktop.<br />
ZSync utilizes the <span class="caps">BLIP</span> library and Apple&#8217;s Sync Services to allow easy and seamless syncing of data.&#8221;</blockquote>

	<p>It&#8217;s still in early development though, with a first public release expected in January:</p>

	<blockquote>Right now the code is in a private GitHub repository while the initial framework and protocols are fleshed out.  This is expected to go public in January of 2010.  Until then we are keeping the development team very small so that we can flesh out the design without a lot of overhead.</blockquote>

	<p>This looks like it&#8217;ll be super useful for iPhone apps that want to integrate with their Mac siblings, especially since their design won&#8217;t require you to have the Mac app running while you sync.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/11/zsync/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Lost Lesson Of Instant Typing</title>
		<link>http://jens.mooseyard.com/2009/10/the-lost-lesson-of-instant-typing/</link>
		<comments>http://jens.mooseyard.com/2009/10/the-lost-lesson-of-instant-typing/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 22:00:10 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[Social Software]]></category>
		<category><![CDATA[iChat]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=351</guid>
		<description><![CDATA[	Farhad Manjoo writing in Slate about Google Wave:

	The trouble is, everything you type into Wave is transmitted live, in real time&#8212;every keystroke was getting sent to Zach just as I hit it. This made me too self-conscious to get my thoughts across.

	&#8230; Maybe I should just delete what I&#8217;d written and say, &#8220;Twitter works because it&#8217;s simple.&#8221; But I couldn&#8217;t do that, because Zach was watching me. He could see me struggling right now&#8212;he could see that I&#8217;d gotten myself stuck in a textual cul-de-sac and that I was desperately searching for a way out without looking foolish. Now I saw Zach beginning to type: &#8220;Don&#8217;t let the live-typing get you down!&#8221; The game was up; what was the point of making a point now? I ended my thought clumsily and then resolved never to attempt to say anything very deep on Wave.

	The same thing happened seven years ago with the live-typing feature that I implemented in iChat 1.0 (which was only supported for Bonjour chats.) I thought it was an awesome idea, and I&#8217;d wanted to have it in a chat program since about 1997. But it turned out that, in actual use, people hated it, for exactly the [...]]]></description>
			<content:encoded><![CDATA[	<p>Farhad Manjoo <a href="http://www.slate.com/id/2232311/pagenum/all" title="">writing in Slate</a> about Google Wave:</p>

	<blockquote>The trouble is, everything you type into Wave is transmitted live, in real time&#8212;every keystroke was getting sent to Zach just as I hit it. This made me too self-conscious to get my thoughts across.</blockquote>

	<blockquote>&#8230; Maybe I should just delete what I&#8217;d written and say, &#8220;Twitter works because it&#8217;s simple.&#8221; But I couldn&#8217;t do that, because Zach was watching me. He could see me struggling right now&#8212;he could see that I&#8217;d gotten myself stuck in a textual cul-de-sac and that I was desperately searching for a way out without looking foolish. Now I saw Zach beginning to type: &#8220;Don&#8217;t let the live-typing get you down!&#8221; The game was up; what was the point of making a point now? I ended my thought clumsily and then resolved never to attempt to say anything very deep on Wave.</blockquote>

	<p>The same thing happened seven years ago with the live-typing feature that I implemented in iChat 1.0 (which was only supported for Bonjour chats.) I thought it was an awesome idea, and I&#8217;d wanted to have it in a chat program since about 1997. But it turned out that, in actual use, people hated it, for exactly the reasons Manjoo describes: it makes you self-conscious. We took it out in the next release.</p>

	<p>(Interestingly, I hate video chat for a very similar reason. Somehow, the fact that my picture is being shown in real time to the remote person makes me horrifically self-conscious, even though it wouldn&#8217;t bother me at all to talk face-to-face with that person. I don&#8217;t know whether it&#8217;s the little preview on my screen, or the fact that the person is spookily both present and not-present, but the few times I&#8217;ve tried video-chat have been really unpleasant.)</p>

	<p>I&#8217;m usually on the side of more technology. I believe that our online communications tools are still horribly primitive and have only scratched the surface of what&#8217;s possible. But this was a case where more technology was bad.</p>

<pre>The low-tech alternative that lots of people use in IM,
is to write in short fragments,
each a separate message,
so the other person can see them one by one
without waiting for you to finish the whole sentence.</pre>

	<p>The difference is that you&#8217;re in control over when to send a partial message, and the other person knows you&#8217;re in control, and so on. I still think it might be possible to do this in a higher-tech way, like using a hot-key to send a partial message on demand without having the funky line-breaks, but the current approach isn&#8217;t so bad as long as you&#8217;re not embarrassed about unintentional free verse.</p>

	<p>I could have told the Wave people about what I&#8217;d learned, except I didn&#8217;t know Wave existed until April (shortly before the public announcement), and even then I was just some guy lost in the crowd at the demos&#8230;.</p>

	<p>Part of the problem, in both cases, is that live typing is one of those Cool Demo Features that looks really awesome when showing off the app. Features like that can be dangerous because they are legitimately very useful during the app&#8217;s gestation, when exciting demos are a key survival trait; but then they can&#8217;t be removed later on because they&#8217;re so well-known, even if they turn out to be useless. Sometimes these features aren&#8217;t actually harmful to the user experience, they just make the code more complex and harder to maintain. Instant typing is both, unfortunately. (The clever sync algorithms and rapid-fire network messages Wave uses would be needed even without live typing, but the fact that they have to run on every few keystrokes, not just every minute or so, pushes those things so much harder.)</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/10/the-lost-lesson-of-instant-typing/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Announcing Ottoman</title>
		<link>http://jens.mooseyard.com/2009/09/announcing-ottoman/</link>
		<comments>http://jens.mooseyard.com/2009/09/announcing-ottoman/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 03:51:29 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[ottoman]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=341</guid>
		<description><![CDATA[h2. "Ottoman":http://bitbucket.org/snej/ottoman/wiki/Home is a lightweight, reliable key-value store with multi-version concurrency control.

!http://bitbucket.org/snej/ottoman/wiki/ottoman.jpg!

A key-value store is a persistent on-disk dictionary that maps arbitrary keys (usually short text strings) to arbitrary values (binary data of any length). There's already a large and venerable family of libraries that do this, often referred to by the name "db". Notable members include "dbm":http://en.wikipedia.org/wiki/Dbm, "Berkeley DB":http://www.oracle.com/database/berkeley-db/index.html, "cdb":http://cr.yp.to/cdb.html and "Tokyo Cabinet":http://tokyocabinet.sourceforge.net. What makes "Ottoman":http://bitbucket.org/snej/ottoman/wiki/Home different?]]></description>
			<content:encoded><![CDATA[	<p><a href="http://mooseyard.com/Jens/2009/09/i-has-a-hash-table/" title="">As promised</a> &#8230;</p>

	<h2><a href="http://bitbucket.org/snej/ottoman/wiki/Home" title="">Ottoman</a> is a lightweight, reliable key-value store with multi-version concurrency control.</h2>

	<p><img src="http://bitbucket.org/snej/ottoman/wiki/ottoman.jpg" alt="" border="0" /></p>

	<p>A key-value store is a persistent on-disk dictionary that maps arbitrary keys (usually short text strings) to arbitrary values (binary data of any length). There&#8217;s already a large and venerable family of libraries that do this, often referred to by the name &#8220;db&#8221;. Notable members include <a href="http://en.wikipedia.org/wiki/Dbm" title="">dbm</a>, <a href="http://www.oracle.com/database/berkeley-db/index.html" title="">Berkeley DB</a>, <a href="http://cr.yp.to/cdb.html" title="">cdb</a> and <a href="http://tokyocabinet.sourceforge.net" title="">Tokyo Cabinet</a>. What makes <a href="http://bitbucket.org/snej/ottoman/wiki/Home" title="">Ottoman</a> different?</p>

	<ol>
		<li>It tries to provide <a href="http://bitbucket.org/snej/ottoman/wiki/Storage" title=""><strong>extremely reliable storage</strong></a>, immune to <a href="http://bitbucket.org/snej/ottoman/wiki/Corruption" title="">file corruption</a> caused by operating system crashes or power failure while writing.</li>
			<li>It <strong>stores past versions</strong> of the database, as a useful side-effect of the way it works. Applications can use this to provide features like snapshots, timelines or persistent undo. (You can prune old versions, for space or privacy reasons, by writing a fresh copy of the file.)</li>
			<li>It has <strong>very low memory overhead</strong>. The file and its contents are memory-mapped, so even large values can be accessed without having to copy them into the heap. (Opening a database only mallocs a few hundred bytes!)</li>
			<li>It allows <strong>concurrent read/write access</strong> by multiple processes. <strong>Optimistic concurrency</strong> &#8212; as used by version-control systems like Subversion &#8212; keeps file locking to a minimum: readers are //never// blocked at all, and writers are only blocked briefly (clients can&#8217;t lock the database for arbitrary periods, only for as long as it takes the accumulated changes to be written to disk.)</li>
	</ol>

	<p>Why is it named after a footstool? First, as an homage to <a href="http://couchdb.apache.org" title="">CouchDB</a>. Secondly, it turns out <a href="http://images.google.com/images?q=storage%20ottoman" title="">ottomans can be used for storage</a>. Third, because I have a mild fascination with <a href="http://en.wikipedia.org/wiki/Ottoman_empire" title="">Asian and Islamic history</a>.</p>

	<p><a href="http://bitbucket.org/snej/ottoman/wiki/Home" title="">_&#8230;Read more at the project home page!_</a></p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/09/announcing-ottoman/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Long-Overdue Upgrade</title>
		<link>http://jens.mooseyard.com/2009/09/long-overdue-upgrade/</link>
		<comments>http://jens.mooseyard.com/2009/09/long-overdue-upgrade/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 05:11:32 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Me]]></category>

		<guid isPermaLink="false">http://jens.mooseyard.com/?p=328</guid>
		<description><![CDATA[	I finally bit the bullet and upgraded to the latest WordPress from the seriously prehistoric version I used to run (I think it was 2.0.4 or something like that.) With the current attacks against older versions, it finally seemed like a worthwhile thing to waste an afternoon on. :-P

	Almost everything should work more or less the same. I&#8217;ve taken the opportunity to move to a subdomain&#8212;jens.mooseyard.com&#8212;but the old URLs redirect. The theme is different, because my hacked-up, customized old theme probably wouldn&#8217;t have survived the upgrade intact. I can&#8217;t say I like this one better, but it&#8217;ll do.

The only data loss I know of is the email subscriptions. If you were subscribed to the comments of any prior post, that&#8217;s gone now. If you still have something new to say, you can post it and check the &#8220;Subscribe&#8221; checkbox, and then you&#8217;ll get emails again.
 ]]></description>
			<content:encoded><![CDATA[	<p>I finally bit the bullet and upgraded to the latest WordPress from the seriously prehistoric version I used to run (I think it was 2.0.4 or something like that.) With the current attacks against older versions, it finally seemed like a worthwhile thing to waste an afternoon on. :-P</p>

	<p>Almost everything should work more or less the same. I&#8217;ve taken the opportunity to move to a subdomain&#8212;jens.mooseyard.com&#8212;but the old URLs redirect. The theme is different, because my hacked-up, customized old theme probably wouldn&#8217;t have survived the upgrade intact. I can&#8217;t say I like this one better, but it&#8217;ll do.<br />
<span id="more-328"></span><br />
The only data loss I know of is the email subscriptions. If you were subscribed to the comments of any prior post, that&#8217;s gone now. If you still have something new to say, you can post it and check the &#8220;Subscribe&#8221; checkbox, and then you&#8217;ll get emails again.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/09/long-overdue-upgrade/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>I’m Building Me A B-Tree</title>
		<link>http://jens.mooseyard.com/2009/08/im-building-me-a-b-tree/</link>
		<comments>http://jens.mooseyard.com/2009/08/im-building-me-a-b-tree/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 17:16:21 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[ottoman]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/08/im-building-me-a-b-tree/</guid>
		<description><![CDATA[	The other day I took it into my head to implement a B+tree. Why? Because they sound neat, and I&#8217;ve done hardly any serious programming with trees in my career. (Someone, I think Buzz Andersen, once noted that there are two kinds of programmers: those who do think in terms of trees, and those who do everything with hash tables. I&#8217;m in the latter camp.)

	And also because I&#8217;m a big fan of CouchDB, and really admire its elegant storage model. It&#8217;s an on-disk B-tree&#8212;no surprises there&#8212;but the file is append-only, which both makes it impervious to crash-related corruption, provides nearly lockless concurrency, and makes it easy to access earlier revisions.

	[In a nutshell: Updated data values or tree nodes are appended to the file instead of overwriting the earlier versions. Since updating a node changes its location, its parent node needs to be updated too to point to the new location. This recurses up the tree, meaning any change ends up with a new root node written at the very end of the file. In fact, when you open the file you find the root by looking at the very end. Since no data is ever changed, once you open the [...]]]></description>
			<content:encoded><![CDATA[	<p>The other day I took it into my head to implement a <a href="http://en.wikipedia.org/wiki/B%2Btree" title="">B+tree</a>. Why? Because they sound neat, and I&#8217;ve done hardly any serious programming with trees in my career. (Someone, I think Buzz Andersen, once noted that there are two kinds of programmers: those who do think in terms of trees, and those who do everything with hash tables. I&#8217;m in the latter camp.)</p>

	<p>And also because I&#8217;m a big fan of <a href="http://couchdb.apache.org" title="">CouchDB</a>, and really admire its elegant storage model. It&#8217;s an on-disk B-tree&#8212;no surprises there&#8212;but <a href="http://horicky.blogspot.com/2008/10/couchdb-implementation.html" title="">the file is append-only</a>, which both makes it impervious to crash-related corruption, provides nearly lockless concurrency, and makes it easy to access earlier revisions.</p>

	<blockquote>[In a nutshell: Updated data values or tree nodes are appended to the file instead of overwriting the earlier versions. Since updating a node changes its location, its parent node needs to be updated too to point to the new location. This recurses up the tree, meaning any change ends up with a new root node written at the very end of the file. In fact, when you open the file you find the root by looking at the very end. Since no data is ever changed, once you open the file you&#8217;re impervious to changes made by other writers since they don&#8217;t affect anything you&#8217;re looking at.]</blockquote>

	<p>I&#8217;d love to use something like that for various projects, but as CouchDB is implemented in the exotic functional language Erlang, I can&#8217;t really use its storage layer as-is. So: could I implement something like it in C++?</p>

	<p>Thus far I have a working in-memory B+tree implementation. Inserts and deletes work, and I&#8217;m working on the iterator. Even this much was harder to get working than it should have been, or so it feels. But that always seems to be true&#8212;algorithms sound straightforward when you read about them, but putting them into practice exposes you to all the details and subtleties inherent in hand-waving like &#8220;now merge the node with a neighbor&#8221;.</p>

	<p>Actually I haven&#8217;t implemented a straight B+tree, rather <a href="http://www.cs.tau.ac.il/~ohadrode/papers/btree_TOS.pdf" title="">a &#8216;top-down&#8217; variant described by Ohad Rodeh</a> that&#8217;s better suited to this type of application because it changes fewer numbers of interior nodes during an update.</p>

	<p>What&#8217;s next?</p>

	<ul>
		<li>Support for string keys (so far it just handles ints)</li>
		<li>Serializing nodes to/from disk</li>
		<li>Keeping track of which nodes are touched during an operation, and appending those to the file</li>
		<li>Writing a trailer to the file to mark a successful update (and to link back to the previous trailer, for historical purposes.)</li>
	</ul>

	<p>Sounds straightforward, but of course the devil&#8217;s in the details.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/08/im-building-me-a-b-tree/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>iTunes 9 Deja Vu</title>
		<link>http://jens.mooseyard.com/2009/08/itunes-9-deja-vu/</link>
		<comments>http://jens.mooseyard.com/2009/08/itunes-9-deja-vu/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 17:30:33 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Social Software]]></category>

		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/08/itunes-9-deja-vu/</guid>
		<description><![CDATA[	AppleInsider reports on the iTunes 9 rumors:

	&#8220;The social networking integration that we reported iTunes 9 would have seems to be part of a bigger social networking push by Apple,&#8221; the report states. &#8220;We&#8217;ve been informed that Apple has plans to tie iTunes 9 into a &#8220;Social&#8221; application that they plan to release in the future.&#8221;

	This sounds like the kind of app (though separate from iTunes) that Jessica Kahn and I kept trying in vain to get Apple to build, circa 2003-2005. Maybe they&#8217;ll get some use out of our abandoned prototypes.

	The report goes on to say that the new application would allow users to share their listening habits with friends [and] send music to friends&#8221;

	Mike Estee and I had actually prototyped this in iChat in 2003, but the feature never got approved since there were so many more important things to add, like 3-way video conferencing. (Plus the fact that Apple execs turned white as a sheet if you said the words &#8220;send music&#8221; near them.)

	Anyway, personal bitterness aside, I think it&#8217;s really amusing that Apple keeps shoving the kitchen sink into iTunes, since that has to be the single nastiest, hardest-to-extend codebase they have &#8212; it&#8217;s their last remaining [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.appleinsider.com/articles/09/08/11/apple_rumored_to_create_social_media_consolidation_client.html" title="">AppleInsider reports on the iTunes 9 rumors</a>:</p>

	<blockquote>&#8220;The social networking integration that we reported iTunes 9 would have seems to be part of a bigger social networking push by Apple,&#8221; the report states. &#8220;We&#8217;ve been informed that Apple has plans to tie iTunes 9 into a &#8220;Social&#8221; application that they plan to release in the future.&#8221;</blockquote>

	<p>This sounds like the kind of app (though separate from iTunes) that Jessica Kahn and I kept trying in vain to get Apple to build, circa 2003-2005. Maybe they&#8217;ll get some use out of our abandoned prototypes.</p>

	<blockquote>The report goes on to say that the new application would allow users to share their listening habits with friends [and] send music to friends&#8221;</blockquote>

	<p>Mike Estee and I had actually prototyped this in iChat in 2003, but the feature never got approved since there were so many more <em>important</em> things to add, like 3-way video conferencing. (Plus the fact that Apple execs turned white as a sheet if you said the words &#8220;send music&#8221; near them.)</p>

	<p>Anyway, personal bitterness aside, I think it&#8217;s really amusing that Apple keeps shoving the kitchen sink into iTunes, since that has to be the single nastiest, hardest-to-extend codebase they have &#8212; it&#8217;s their last remaining Carbon app, with a foundation that dates back to Casady &#038; Greene&#8217;s SoundJam, circa 1998.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/08/itunes-9-deja-vu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Career Update, Part ++n</title>
		<link>http://jens.mooseyard.com/2009/07/career-update-part-n/</link>
		<comments>http://jens.mooseyard.com/2009/07/career-update-part-n/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 01:31:24 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/07/career-update-part-n/</guid>
		<description><![CDATA[	I&#8217;ve been working at Google since last August. The Big G&#8217;s hiring process is rather weird&#8212;when you interview, it&#8217;s not for any specific team. It&#8217;s only after you get an offer that you decide which team to join, of the ones with open positions.

	I decided on Google Sites, which I knew and liked from its days as JotSpot, a hosted wiki with some powerful features. It ended up not being the right place for me, for a couple of reasons:

	
		Currently, Sites&#8217; priorities are in website publishing, as a replacement for Google Page Creator (which is being phased out soon.) It&#8217;s quite good at it, but I&#8217;m less interested in that than in collaboration features.
		Google&#8217;s server-side infrastructure is really, really, really huge and complex. There is an endless landscape of internal technologies and tools&#8212;the few that have been described in public (MapReduce, BigTable, Chubby, etc.) are just the tip of the iceberg. I have discovered that I am not very interested in this kind of stuff, and I quickly became frustrated by the deluge of technologies I needed to learn to get things done.
		Running a large web service is like running a nuclear power plant or an electric power grid. It [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve been working at Google since last August. The Big G&#8217;s hiring process is rather weird&#8212;when you interview, it&#8217;s not for any specific team. It&#8217;s only after you get an offer that you decide which team to join, of the ones with open positions.</p>

	<p>I decided on <a href="http://sites.google.com" title="">Google Sites</a>, which I knew and liked from its days as JotSpot, a hosted wiki with some powerful features. It ended up not being the right place for me, for a couple of reasons:</p>

	<ul>
		<li>Currently, Sites&#8217; priorities are in website publishing, as a replacement for Google Page Creator (which is being phased out soon.) It&#8217;s quite good at it, but I&#8217;m less interested in that than in collaboration features.</li>
		<li>Google&#8217;s server-side infrastructure is really, really, <em>really</em> huge and complex. There is an endless landscape of internal technologies and tools&#8212;the few that have been described in public (MapReduce, BigTable, Chubby, etc.) are just the tip of the iceberg. I have discovered that I am not very interested in this kind of stuff, and I quickly became frustrated by the deluge of technologies I needed to learn to get things done.</li>
		<li>Running a large web service is like running a nuclear power plant or an electric power grid. It requires 24/7/365 monitoring, and at that scale, anything that can go wrong will go wrong, and frequently does. I do not have the right temperament for working with this, especially not when it comes to taking turns carrying a pager that wakes me up at 4AM because some service&#8217;s latency has gone above 300ms.</li>
		<li>I&#8217;ve been vocal about my frustration with centralized systems; Google&#8217;s websites are kind of the ultimate in that (even though, ironically, they&#8217;re implemented as <span class="caps">P2P</span>-like networks internally, as I believe all large web operations are today.)</li>
	</ul>

	<p>The good news is that Google encourages transfers between teams, and makes it easy to do so. The near-total transparancy inside the company makes it easy to find out everything that&#8217;s going on, and there&#8217;s a well-designed website for engineering transfers that helps you find teams that need people. I even went to an internal job fair.</p>

	<p>I&#8217;ve now ended up working on <a href="http://www.google.com/chrome" title="">Chrome</a>, Google&#8217;s web browser. The team I&#8217;m on is responsible for implementing <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/" title=""><span class="caps">HTML 5</span></a> features, as well as designing and implementing other new features (for standardization) that will help web apps become as powerful as native apps. Much of what we do will go into the WebKit source tree, where it will also directly benefit Safari, Android, the Palm Pre, and other WebKit-based browsers.</p>

	<p>In fact, everything I work on (more or less) is going to be open source. Both the WebKit and Chromium source trees are public. You can view, if you care to, <a href="http://codereview.chromium.org/151095" title="">the one patch I&#8217;ve contributed so far</a> and <a href="http://codereview.chromium.org/150188" title="">the one that&#8217;s currently out for review</a>. That&#8217;s kind of mind-blowing, in a good way, to me, steeped as I am in the secrecy of Apple.</p>

	<p>I&#8217;m pretty excited by this. There are quite a lot of things I&#8217;m interested in working on&#8212;client-side storage, local apps, drag-and-drop, better font support, menus, even far-out stuff like peer-to-peer networking. Forward in all directions!</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/07/career-update-part-n/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Murky Mailing List And Progress Report</title>
		<link>http://jens.mooseyard.com/2009/05/murky-mailing-list-and-progress-report/</link>
		<comments>http://jens.mooseyard.com/2009/05/murky-mailing-list-and-progress-report/#comments</comments>
		<pubDate>Fri, 08 May 2009 20:14:54 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Me]]></category>

		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/murky-mailing-list-and-progress-report/</guid>
		<description><![CDATA[	I&#8217;ve set up a Google Groups mailing-list for Murky, my Mercurial version-control app. It&#8217;ll be for both developers and users of the app.

	Speaking of &#8220;developers&#8221;, I&#8217;ve been really pleased with the reaction to my initial source-dump to Bitbucket! So far, in nine days:

	
		79 people have subscribed to change notifications;
		10 people have forked the repository so they can modify the code;
		8 people have contributed to the code, fixing bugs and adding some new features;
		39 changesets have been committed to the repository;
		29 bug reports and feature suggestions have been filed,
		12 of which have been fixed.
	

	I&#8217;m especially happy about the patches I&#8217;ve received; I&#8217;ve gotten some in the past, but never this many or so quickly. Part of this is thanks to Bitbucket, which (like its inspiration, Github) makes it so easy to share code and manage contributions. I&#8217;ve been getting more contributions to MYNetwork as well, since hosting it there.

	My initial motivation was like Tom Sawyer whitewashing the fence&#8212;I was hoping someone else would take over the project, since I&#8217;d run out of steam and hadn&#8217;t done any work on it in a while. But what happened instead is that the attention got me enthused to work on it again, so I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve set up a <a href="https://groups.google.com/group/murky-app" title="">Google Groups mailing-list</a> for <a href="http://bitbucket.org/snej/murky/wiki/Home" title="">Murky</a>, my Mercurial version-control app. It&#8217;ll be for both developers and users of the app.</p>

	<p>Speaking of &#8220;developers&#8221;, I&#8217;ve been really pleased with the reaction to my initial <a href="http://bitbucket.org/snej/murky/src/tip/Source/" title="">source-dump</a> to Bitbucket! So far, in nine days:</p>

	<ul>
		<li><a href="http://bitbucket.org/snej/murky/zealots/" title="">79 people</a> have subscribed to change notifications;</li>
		<li><a href="http://bitbucket.org/snej/murky/descendants/" title="">10 people</a> have forked the repository so they can modify the code;</li>
		<li>8 people have contributed to the code, fixing bugs and adding some new features;</li>
		<li><a href="http://bitbucket.org/snej/murky/changesets/28b5bf11b6ca:c1069914bc82/" title="">39 changesets</a> have been committed to the repository;</li>
		<li><a href="http://bitbucket.org/snej/murky/issues/" title="">29 bug reports and feature suggestions</a> have been filed,</li>
		<li><a href="http://bitbucket.org/snej/murky/issues/?status=resolved&#038;status=invalid&#038;status=duplicate" title="">12 of which</a> have been fixed.</li>
	</ul>

	<p>I&#8217;m especially happy about the patches I&#8217;ve received; I&#8217;ve gotten some in the past, but never this many or so quickly. Part of this is thanks to <a href="http://bitbucket.org" title="">Bitbucket</a>, which (like its inspiration, Github) makes it so easy to share code and manage contributions. I&#8217;ve been getting more contributions to MYNetwork as well, since hosting it there.</p>

	<p>My initial motivation was like Tom Sawyer whitewashing the fence&#8212;I was hoping someone else would take over the project, since I&#8217;d run out of steam and hadn&#8217;t done any work on it in a while. But what happened instead is that the attention got me enthused to work on it again, so I&#8217;ve made a lot of progress on it this past week. That&#8217;s a good thing!, just not what I expected.</p>

	<p>Now I think it&#8217;s about time to put out an actual easy-to-download binary release of Murky, as some of the main bugs have been squashed and I have more confidence that it works for other people besides me. I&#8217;ll probably do that this weekend, and mention it here as well as on the new mailing list (don&#8217;t forget to subscribe.)</p>
 ]]></content:encoded>
			<wfw:commentRss>http://jens.mooseyard.com/2009/05/murky-mailing-list-and-progress-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->