<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.4" -->
<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/"
	>

<channel>
	<title>Thought Palace</title>
	<link>http://mooseyard.com/Jens</link>
	<description>little boxes made of words</description>
	<pubDate>Sat, 04 Jul 2009 01:35:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>
	<language>en</language>
			<item>
		<title>Career Update, Part ++n</title>
		<link>http://mooseyard.com/Jens/2009/07/career-update-part-n/</link>
		<comments>http://mooseyard.com/Jens/2009/07/career-update-part-n/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 01:31:24 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Web</category>
	<category>Me</category>
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/07/career-update-part-n/</guid>
		<description><![CDATA[I've now ended up working on "Chrome":http://www.google.com/chrome, Google's web browser. The team I'm on is responsible for implementing "HTML 5":http://www.whatwg.org/specs/web-apps/current-work/multipage/ 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.

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, "the one patch I've contributed so far":http://codereview.chromium.org/151095 and "the one that's currently out for review":http://codereview.chromium.org/150188. That's kind of mind-blowing, in a good way, to me, steeped as I am in the secrecy of Apple.

I'm pretty excited by this. There are quite a lot of things I'm interested in working on -- 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!]]></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://mooseyard.com/Jens/2009/07/career-update-part-n/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Is There Any Point To Using The Keychain API On iPhone?</title>
		<link>http://mooseyard.com/Jens/2009/06/is-there-any-point-to-using-the-keychain-api-on-iphone/</link>
		<comments>http://mooseyard.com/Jens/2009/06/is-there-any-point-to-using-the-keychain-api-on-iphone/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 00:16:40 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/06/is-there-any-point-to-using-the-keychain-api-on-iphone/</guid>
		<description><![CDATA[I've always liked the Keychain technology in Mac OS X. Sure, the API is notoriously confusing and awkward, but the end-user benefits are compelling. The iPhone has a Keychain API too, but it's a _different_ API than the Mac OS one. At first glance it looks simpler and easier to use, and maybe it would be if it were properly documented, but in practice the item-storage part of it (the SecItem* functions) is incredibly frustrating because the documentation is both incomplete and just plain wrong.
After finishing filing a bunch of bug reports with Apple today, I had the crazy idea: _why should I be using the Keychain store at all on iPhone?_ Going through my list of reasons why the Keychain is a good thing, I realized that hardly any of them apply on the iPhone.
What you're left with is a rudimentary flat-file database, specialized for just a few data types, with a really clunky and badly documented API. Other than the fact that it happens to already exist, there's nothing about it that's as good as something you could write in a few hours using CoreData, or your favorite high-level SQLite API like FMDB or QuickLite, or even a property list.]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve always liked the Keychain technology in Mac <span class="caps">OS X</span>. Sure, the <span class="caps">API</span> is notoriously confusing and awkward, but the end-user benefits are compelling:</p>

	<ol>
		<li>Secure, encrypted storage for all passwords and keys.</li>
			<li>Items can be shared between applications&#8212;so in principle you don&#8217;t have to enter a given password more than once, since other apps will find the existing item in the keychain.</li>
			<li>Items have access control lists, so they can be restricted to certain apps.</li>
			<li>The user can &#8220;lock&#8221; the keychain, requiring a passphrase to be entered before there&#8217;s any further access to it. This happens by default when the system goes to sleep, which is a good security feature especially for laptops.</li>
			<li>If an app&#8217;s code changes, it has to ask permission to use the keychain again (protects against malicious code patches)</li>
	</ol>

	<p>For the past few weeks&#8217; worth of Copious Spare Time, I&#8217;ve been trying to get my <a href="http://bitbucket.org/snej/mycrypto/wiki/Home" title="">MYCrypto</a> framework, which is in part a friendly <span class="caps">API</span> to the Keychain, to run on iPhone. The iPhone has a Keychain <span class="caps">API</span>, but it&#8217;s a <em>different</em> API than the Mac OS one. At first glance it looks simpler and easier to use, and maybe it would be if it were properly documented, but in practice the item-storage part of it (the SecItem* functions) is incredibly frustrating because the documentation is both incomplete and just plain wrong.</p>

	<p>Currently I&#8217;ve gotten a lot of it working, but I&#8217;m stuck on some issues that seem like either major Keychain bugs or philosophical differences (parts of the <span class="caps">API</span> don&#8217;t seem to work at all with items that exist in memory but haven&#8217;t been persistently added to the Keychain store.) I&#8217;ve filed at least six bug reports to Apple in the last week, including the kind of basic unit tets that I would have hoped Apple QA engineers would have written before iPhone 2.0 ever went to developers. I&#8217;m very frustrated.</p>

	<h2>All this for what?</h2>

	<p>After finishing the bug reports, I had the crazy idea: <em>why should I be using the Keychain store at all on iPhone?</em> Going through my above list of benefits, I realized that hardly any of them apply:</p>

	<ol>
		<li>The iPhone security model relies on app sandboxing to protect data. Even malicious app code can&#8217;t reach the keychain file because it&#8217;s outside the app sandbox. <strike>(I have some data that implies that the file is in fact just a plaintext SQLite database, not the fancy encrypted store it is on <span class="caps">OS X</span>.)</strike> [ <em>Update:</em> I now have confirmation that <a href="http://developer.apple.com/DOCUMENTATION/Security/Conceptual/keychainServConcepts/02concepts/concepts.html#//apple_ref/doc/uid/TP30000897-CH204-DontLinkElementID_3" title="">the Keychain file is encrypted on the device and in backups</a>, making it secure against most attacks.]</li>
			<li>iPhone apps can&#8217;t share keychain items. Every app effectively has its own sandboxed keychain. So there&#8217;s no usability benefit of putting passwords in it.</li>
			<li>No sharing means no point in access control lists, of course.</li>
			<li>There&#8217;s no keychain passphrase or lock/unlock behavior on iPhone. Once you unlock the iPhone itself, all apps can access their keychains freely.</li>
			<li>Since all apps are signed, there&#8217;s no question of malicious patches.</li>
	</ol>

	<p><strike>So much for that. What you&#8217;re left with is a rudimentary flat-file database, specialized for just a few data types, with a really clunky and badly documented <span class="caps">API</span>. Other than the fact that it happens to already exist, there&#8217;s nothing about it that&#8217;s as good as something you could write in a few hours using CoreData, or your favorite high-level SQLite <span class="caps">API</span> like <span class="caps">FMDB</span> or QuickLite. Heck, for simple needs you could just use a property list, for example an NSDictionary mapping URLs to [username, password] pairs. It ought to be just as secure, because the sandbox prevents any other apps from being able to access the file.</strike></p>

	<p><em>Updated:</em> What you&#8217;re left with is an encrypted flat-file database, specialized for just a few data types, with a really clunky and badly documented <span class="caps">API</span>. As I wrote above, its functionality could be duplicated, with a better <span class="caps">API</span>, without much effort. The encryption part is significant, though, since its primary purpose is to keep keys and passwords safe. <span class="caps">A DIY</span> key database could be protected by encrypting it with a symmetric key, and then putting <em>that</em> key in the Keychain.</p>

	<p>I&#8217;m not sure where that leaves MYCrypto. I&#8217;m not sure I&#8217;m motivated to write a general-purpose version of this data store myself. If I can get some good answers and workaround to my Keychain <span class="caps">API</span> bug reports, I may just continue to tough it out.</p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/06/is-there-any-point-to-using-the-keychain-api-on-iphone/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Chatty + MYNetwork</title>
		<link>http://mooseyard.com/Jens/2009/05/chatty-mynetwork/</link>
		<comments>http://mooseyard.com/Jens/2009/05/chatty-mynetwork/#comments</comments>
		<pubDate>Sun, 24 May 2009 21:46:36 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/chatty-mynetwork/</guid>
		<description><![CDATA[As "foreshadowed":http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/, I've created a modified version of the "Chatty":http://www.mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/ iPhone sample app, which uses the "MYNetwork":http://bitbucket.org/snej/mynetwork/ library instead of custom networking code. You can "get it off of Bitbucket":http://bitbucket.org/snej/chatty/wiki/Home.]]></description>
			<content:encoded><![CDATA[	<p>As <a href="http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/" title="">foreshadowed</a>, I&#8217;ve created a modified version of the <a href="http://www.mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/" title="">Chatty</a> iPhone sample app, which uses the <a href="http://bitbucket.org/snej/mynetwork/" title="">MYNetwork</a> library instead of custom networking code. You can <a href="http://bitbucket.org/snej/chatty/wiki/Home" title="">get it off of Bitbucket</a>.</p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/05/chatty-mynetwork/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple Never Promised Us It Wouldn&#8217;t Be Evil</title>
		<link>http://mooseyard.com/Jens/2009/05/apple-never-promised-us-it-wouldnt-be-evil/</link>
		<comments>http://mooseyard.com/Jens/2009/05/apple-never-promised-us-it-wouldnt-be-evil/#comments</comments>
		<pubDate>Fri, 22 May 2009 16:37:25 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Ideas</category>
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/apple-never-promised-us-it-wouldnt-be-evil/</guid>
		<description><![CDATA[Here is the latest absurdity to come out of Apple's deeply, endemically fucked-up App Store approval process: Jamie Montgomerie's "Eucalyptus":http://th.ingsmadeoutofotherthin.gs/eucalyptus/ app, an e-book reader that can download public-domain books from Project Gutenberg -- about the most innocuous thing you could imagine, right? -- "gets rejected not once but _three times_":http://www.blog.montgomerie.net/whither-eucalyptus for containing "obscene, pornographic, offensive or defamatory content".

Leaving aside the issue of whether Apple has any business deciding what constitutes obscenity (a task that's driven grown Supreme Court justices to drink) --

And leaving aside also the fact that Apple's censors have three times now been too dim to comprehend that the application does not contain any books, obscene or otherwise, but downloads them from the Internet much like Safari --

No, the really outrageous issue is that the supposed obscenity here consists of a text-only English translation of the _Kama Sutra_. Apple specifically called out some pages of steamy advice for "when a man wishes to enlarge his _lingam_". (No, "really":http://www.blog.montgomerie.net/user/files/Whither%20Eucalyptus/Rejection2-1.PNG .)
]]></description>
			<content:encoded><![CDATA[	<p>Here is the latest absurdity to come out of Apple&#8217;s deeply, endemically fucked-up App Store approval process: Jamie Montgomerie&#8217;s <a href="http://th.ingsmadeoutofotherthin.gs/eucalyptus/" title="">Eucalyptus</a> app, an e-book reader that can download public-domain books from Project Gutenberg&#8212;about the most innocuous thing you could imagine, right?&#8212;<a href="http://www.blog.montgomerie.net/whither-eucalyptus" title="">gets rejected not once but <em>three times</em></a> for containing &#8220;obscene, pornographic, offensive or defamatory content&#8221;.</p>

	<p>Leaving aside the issue of whether Apple has any business deciding what constitutes obscenity (a task that&#8217;s driven grown Supreme Court justices to drink)&#8212;<br />
And leaving aside also the fact that Apple&#8217;s censors have three times now been too dim to comprehend that the application does not contain any books, obscene or otherwise, but downloads them from the Internet much like Safari&#8212;<br />
No, the really outrageous issue is that the supposed obscenity here consists of a text-only English translation of the <a href="http://en.wikipedia.org/wiki/Kama_sutra" title="">Kama Sutra</a>. Apple specifically called out some pages of steamy advice for &#8220;when a man wishes to enlarge his <em>lingam</em>&#8220;. (No, <a href="http://www.blog.montgomerie.net/user/files/Whither%20Eucalyptus/Rejection2-1.PNG" title="">really</a>.) [1]</p>

	<p>Now, Richard Burton had to get his 1883 translation of this ancient text <a href="http://en.wikipedia.org/wiki/Kama_sutra#Translations" title="">printed privately</a> when no publishers would accept it, but that was in the Victorian era. The current authoritative translation is nowadays published by that infamous smut peddler, Oxford University Press. Much harder-core fare like <em>Ulysses</em> and <em>Lady Chatterley&#8217;s Lover</em>&#8212;books which go so far as to use <em>recognizable English names</em> of the naughty bits&#8212;were judged after some controversy to be free of obscenity in the 1930s. By 1970 the obscenity statutes had been lifted from nearly all printed material, and nowadays anything goes&#8212;take a look at some of the e-books available for sale on the iTunes store.</p>

	<p>Montgomerie has now, humiliatingly, been driven to self-censorship: his latest message to Apple states &#8220;I have now submitted a new version that specifically blocks access to the Kama Sutra book you identified. Is this what you mean?&#8221;</p>

	<blockquote>[<b>Update, May 24:</b> <a href="http://www.blog.montgomerie.net/hither-eucalyptus" title="">Mongomerie reports</a> that on the 23rd he &#8220;received a phone call from an Apple representative. He was very complimentary about Eucalyptus.&#8221; The whole matter was, of course, resolved, and Eucalyptus is now <a href="http://tr.im/ptus" title="">available for purchase</a>.  A happy ending, certainly, and congratulations on the release! &#8230;But I don&#8217;t believe it invalidates my argument below. After all, this isn&#8217;t the first time an outrageous rejection has been reversed after mass humiliation of Apple. It&#8217;s the overall default policies and behaviors, and their chilling effects, that I&#8217;m complaining about, and there&#8217;s still no sign of those changing.]</blockquote>

	<h2>The &#8220;E&#8221; word.</h2>

	<p>I don&#8217;t think anyone but a card-carrying member of the Christian Coalition or Taliban would disagree that this was a <em>stupid</em> decision on Apple&#8217;s part. (And it was a considered decision, not a &#8216;glitch in the approval process&#8217;, given that Apple repeated it twice.)</p>

	<p>I feel the need to step up to a stronger word. How does <strong>evil</strong> sound?</p>

	<p>Hear me out. I&#8217;m not talking &#8220;evil&#8221; as in killing babies or nuclear blackmail, rather in the sense it&#8217;s meant in Google&#8217;s corny motto &#8220;Don&#8217;t Be Evil&#8221;, or alluded to in the older proverb &#8220;With great power comes great responsibility&#8221;. But yes, I do mean &#8220;evil&#8221; as malign, the opposite of good, etc. etc.</p>

	<p>Last year Apple put itself into an ethically very delicate situation with the App Store, by creating a market in which it has the sole power to make 3rd party software available (or to take it away). As has been amply discussed before, iPhone developers have no choice (if they want to be iPhone developers) but to put tremendous effort into developing the product, only finding out at the very end whether or not Apple will let it be sold.[2]</p>

	<p>There are definitely some good reasons for such a model, primarily that it helps keep the platform secure from malware, and that by preventing piracy it allows developers to collect a lot more revenues per user, allowing them to set prices far lower than those in other software markets.</p>

	<p>But in return Apple had the obligation to be very, very careful to be ethical, upright and transparent in its dealings with developers and the public, to minimize the dangers (of censorship, of conflicts of interest, of stifling innovation) inherent in its position.</p>

	<p>And being Apple, it completely and utterly fucked it up. Because it&#8217;s in Apple&#8217;s genetic code to be about as transparent as a lead brick. This has always annoyed the press, and it has frequently enraged developers, who suffer from the consequences of blank silence from Apple in between carefully-scripted <span class="caps">WWDC</span> keynotes and PR-scrubbed announcements. But in the context of the App Store, Apple&#8217;s inscrutability and arbitrariness has become actively malign.</p>

	<h2>Evil is as evil does.</h2>

	<p>I&#8217;m not saying that Apple <em>is</em> evil; it isn&#8217;t run by bluestockings or monopolists or cackling supervillains. But evil is a result of what you <em>do</em> [3], and actions are not excused by good intentions; in the real world those who do evil (excepting psychopaths) uniformly believe they&#8217;re working for the good.</p>

	<p>Apple&#8217;s App Store approval process has, over the past year, shown that the company is:</p>

	<ul>
		<li>acting like a Victorian-era book censor;</li>
		<li>quashing competition by blocking apps that improve on Apple&#8217;s products;</li>
		<li>blocking innovation by denying 3rd party apps access to the user&#8217;s legally-owned data (such as MP3s);</li>
		<li>attempting to deny end-users the freedom to do what they want with the hardware they bought and paid for (viz. its current efforts to have jailbreaking declared illegal);</li>
		<li>and causing undue hardship to small developers by arbitrarily withholding their ability to sell the apps they&#8217;ve developed.</li>
	</ul>

	<p>Nor has Apple engaged in the slightest bit of dialog with its developers and users to work through any of these issues. The best that&#8217;s happened is that, after much public ridicule, Apple has without comment released some apps that it had previously blocked.</p>

	<p>Maybe you think &#8220;evil&#8221; is too strong or melodramatic or exaggerated a word for this. Then feel free to substitute something that has fewer loaded connotations to you&#8212;&#8220;unethical&#8221; or &#8220;anticompetitive&#8221; or whatever. But if you&#8217;re one of those who, like me, has applied the &#8220;e&#8221; word to the past actions of Microsoft, or to groups that try to ban books from libraries, then I think there&#8217;s really no option but to use the same blunt language here and now.</p>

	<p><hr /><font size="-1"></p>

	<p>[1] By these standards, Apple should have banned its own Mail app, too. It sends me these kind of <em>lingam</em>-enlargment messages all the time.</p>

	<p>[2] This is arguably worse than the console video-game industry&#8217;s similar monopoly on approving games, because those companies listen to developer pitches up-front before development. (Also, this kind of restraint is much nastier when applied to all types of software, including books, than just to games.)</p>

	<p>[3] This semantic distinction is one I&#8217;m not sure Google gets either. &#8220;Don&#8217;t <em>Do</em> Evil&#8221; would have been a better motto. But in its defense, Google does in practice seem to understand its responsibilities and is admirably open about its actions.</font></p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/05/apple-never-promised-us-it-wouldnt-be-evil/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>A Bonjour / Chat Tutorial For iPhone Developers</title>
		<link>http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/</link>
		<comments>http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/#comments</comments>
		<pubDate>Wed, 20 May 2009 21:30:32 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/</guid>
		<description><![CDATA[MobileOrchard just published "a tutorial article by Peter Bakhyryev":http://www.mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/, describing an iPhone app called "Chatty" that acts as a simple peer-to-peer chat-room.

The source code is released under an MIT license. It's a well-written overview of everything from sockets to runloops to message framing, and it happens to basically describe what my MYNetwork framework does. So an alternate way to read the tutorial is as a description of things you _don't_ have to worry about if you're going to use MYNetwork ;-) Because honestly, the stuff he's describing can be a real mess to deal with, and isn't that the kind of thing that should be solved once and stuffed into a reusable framework?]]></description>
			<content:encoded><![CDATA[	<p>MobileOrchard just published <a href="http://www.mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/" title="">a tutorial article by Peter Bakhyryev</a>, describing a sample iPhone app called &#8220;Chatty&#8221; that acts as a simple peer-to-peer chat-room.</p>

	<blockquote>&#8220;In this tutorial, we are going to explore a simple chat application for the iPhone. It allows you to host your own chat room and advertise it on your local Wi-Fi network (in which case your app acts as a chat &#8220;server&#8221;) or find and join chat rooms hosted by other people on your network (acting as a chat &#8220;client&#8221;). Both announcement and discovery of chat rooms are implemented using Apple&#8217;s Bonjour protocol. The goal of this app is to show you how to use various networking-related frameworks available in the iPhone <span class="caps">SDK</span> version 2.x. The UI is minimal (consisting of only 3 simple views) &#8211; just enough to be able to play with the core functionality of the app without having to deal with complex UIKit code.&#8221;</blockquote>

	<p>It&#8217;s a well-written overview of everything from sockets to runloops to message framing, and it happens to basically describe what my <a href="http://bitbucket.org/snej/mynetwork/wiki/Home" title="">MYNetwork</a> framework does. So an alternate way to read the tutorial is as a description of things you <em>don&#8217;t</em> have to worry about if you&#8217;re going to use MYNetwork ;-) Because honestly, the stuff he&#8217;s describing can be a real mess to deal with, and isn&#8217;t that the kind of thing that should be solved once and stuffed into a reusable framework?</p>

	<p>Now I am seriously tempted to download the app, replace its networking and messaging code with MYNetwork, and see how small it comes out. If I do, I&#8217;ll be sure to post the results here.</p>

	<blockquote>[ <strong>Update:</strong> I actually did it. <a href="http://bitbucket.org/snej/chatty/wiki/Home" title="">Here&#8217;s my forked Chatty</a>.]</blockquote>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/05/a-bonjour-chat-tutorial-for-iphone-developers/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Murky Mailing List And Progress Report</title>
		<link>http://mooseyard.com/Jens/2009/05/murky-mailing-list-and-progress-report/</link>
		<comments>http://mooseyard.com/Jens/2009/05/murky-mailing-list-and-progress-report/#comments</comments>
		<pubDate>Fri, 08 May 2009 20:14:54 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Me</category>
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/murky-mailing-list-and-progress-report/</guid>
		<description><![CDATA[I've set up a "Google Groups mailing-list":https://groups.google.com/group/murky-app for "Murky":http://bitbucket.org/snej/murky/wiki/Home, my Mercurial version-control app. It'll be for both developers and users of the app.

Speaking of "developers", I've been really pleased with the reaction to my initial "source-dump":http://bitbucket.org/snej/murky/src/tip/Source/ to Bitbucket! So far, in nine days:

* "79 people":http://bitbucket.org/snej/murky/zealots/ have subscribed to change notifications;
* "10 people":http://bitbucket.org/snej/murky/descendants/ 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":http://bitbucket.org/snej/murky/changesets/28b5bf11b6ca:c1069914bc82/ have been committed to the repository;
* "29 bug reports and feature suggestions":http://bitbucket.org/snej/murky/issues/ have been filed,
* "12 of which":http://bitbucket.org/snej/murky/issues/?status=resolved&#038;status=invalid&#038;status=duplicate have been fixed.]]></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://mooseyard.com/Jens/2009/05/murky-mailing-list-and-progress-report/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Open Source Good, Giving Away Art Bad?</title>
		<link>http://mooseyard.com/Jens/2009/05/open-source-good-giving-away-art-bad/</link>
		<comments>http://mooseyard.com/Jens/2009/05/open-source-good-giving-away-art-bad/#comments</comments>
		<pubDate>Mon, 04 May 2009 06:05:38 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Ideas</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/05/open-source-good-giving-away-art-bad/</guid>
		<description><![CDATA[I just discovered that "a number of commercial artists are really insulted that Google approached them to create artwork, without offering to pay for it":http://drawger.com/taxman/?section=articles&#038;article_id=7693. This did seem unreasonable to me ... until I read further and saw that this is for the Chrome browser.

Now, Chrome is open source. (Technically the open source project is a separate thing called "Chromium", but that's mostly an organizational detail; the code is the same.) So when I compared this controversy to the rather different attitude of the many programmers who've gladly contributed to Chrome and WebKit (and thus also Safari) without pay ... I went "hmm".]]></description>
			<content:encoded><![CDATA[	<p>I just discovered that <a href="http://drawger.com/taxman/?section=articles&#038;article_id=7693" title="">a number of commercial artists are really insulted that Google approached them to create artwork, without offering to pay for it</a>. This did seem unreasonable to me &#8230; until I read further and saw that this is for the Chrome browser.</p>

	<p>Now, Chrome is open source. (Technically the open source project is a separate thing called &#8220;Chromium&#8221;, but that&#8217;s mostly an organizational detail; the code is the same.) So when I compared this controversy to the rather different attitude of the many programmers who&#8217;ve gladly contributed to Chrome and WebKit (and thus also Safari) without pay &#8230; I went &#8220;hmm&#8221;.</p>

	<p>There&#8217;s a long comment thread about this on <a href="http://kinokofry.livejournal.com/199482.html?view=1229114" title="">the LiveJournal of the talented cartoonist Rebecca Clements</a>. The craziest comment I saw was by one &#8220;Anonymous&#8221;:</p>

	<blockquote>&#8220;Good will never paid a bill or put shoes on my child. I admit there should be some caring people in the world. But Google being kind &#8230;so we all should be kind like them and give our work away? Come on give me a break. Someone in their executive chain of management has thought this through enough to realize it as a Public Relations &#8220;cool&#8221; thing to do to get more attention and drive people to Google as a source. It wasn&#8217;t because they feel like being kind and giving something away.&#8221; <a href="http://kinokofry.livejournal.com/199482.html?thread=1227578#t1227578" title="">*</a></blockquote>

	<p>Maybe I&#8217;m especially pissed off at this attitude because I just spent most of my weekend <a href="http://bitbucket.org/snej/murky/changesets/" title="">being kind and giving my work away</a> (as well as the work of several others). And I&#8217;m sure much of the software these complaining artists use was created for free by open-source programmers. Do they draw with The Gimp or Inkscape? Use Firefox or Chrome or Safari? Run Linux or <span class="caps">BSD</span>? Host their blogs with WordPress or LiveJournal? (Let&#8217;s just hope they&#8217;re not using pirated copies of Photoshop or CorelDraw&#8230;)</p>

	<p>So is there a double standard here, or am I missing something?</p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/05/open-source-good-giving-away-art-bad/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Murky: A Mercurial Client App</title>
		<link>http://mooseyard.com/Jens/2009/04/murky-a-mercurial-client-app/</link>
		<comments>http://mooseyard.com/Jens/2009/04/murky-a-mercurial-client-app/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 03:23:29 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Me</category>
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/04/murky-a-mercurial-client-app/</guid>
		<description><![CDATA[After repeated prodding, I've finally gotten off my butt and released *Murky*, a GUI client app for the Mercurial version-control system. I've been working on it for over a year, and using it a lot myself; I had always planned to open-source it "when it's ready", but never actually got around to doing the necessary cleanup and uploading.

I'm happy to say that Murky is finally blinking in the light of day, with "its own Mercurial [natch] repository on Bitbucket":http://bitbucket.org/snej/murky/wiki/Home.

Murky is by no means complete (or particularly polished) but here's what it can do:]]></description>
			<content:encoded><![CDATA[	<p>After repeated prodding, I&#8217;ve finally gotten off my butt and released <strong>Murky</strong>, a <span class="caps">GUI</span> client app for the <a href="http://selenic.com/mercurial" title="">Mercurial</a> version-control system. I&#8217;ve been working on it for over a year, and using it a lot myself; I had always planned to open-source it &#8220;when it&#8217;s ready&#8221;, but never actually got around to doing the necessary cleanup and uploading.</p>

	<p>I&#8217;m happy to say that Murky is finally blinking in the light of day, with <a href="http://bitbucket.org/snej/murky/wiki/Home" title="">its own Mercurial [natch] repository on Bitbucket</a>.</p>

	<h2>Setting Expectations</h2>

	<p><strong>Murky isn&#8217;t &#8220;done&#8221;, and this isn&#8217;t a 1.0, or even a beta, release.</strong> I&#8217;m not even providing a compiled app to download, just the source repository. No one but me has ever tested it. About nine months ago Murky became &#8220;good enough&#8221; for what I usually do, and I&#8217;m a happy customer, but I&#8217;ve lost the impetus to keep adding things to it. I hope some other people will grab the baton and improve it further. Then we can throw a party for a real 1.0 release, with several names on the About box.</p>

	<h2>Obligatory Screenshot</h2>

	<p><img src="http://bitbucket.org/snej/murky/wiki/Screenshot.png" alt="" border="0" /></p>

	<h2>Features</h2>

	<p>Here&#8217;s what it can do so far:</p>

	<ul>
		<li>Create a new repository from an existing folder</li>
		<li>Clone a remote (or local) repository</li>
		<li>View the revision history (log) of a repo as a table view, complete with * a visual graph showing the inheritance of revisions</li>
		<li>View the source tree, and the contents of files, from any past revision</li>
		<li>See which files were changed, added or removed in any revision</li>
		<li>Compare revisions of files, either visually with FileMerge, or as straight &#8216;diff&#8217; output</li>
		<li>Add or remove files from the local working tree</li>
		<li>Commit (or revert) changed files</li>
		<li>Update to a specific revision (past or present)</li>
		<li>Push to or pull from remote repositories</li>
		<li>Automatically detects filesystem changes made by other apps (or by the &#8216;hg&#8217; tool) and updates the display immediately</li>
	</ul>

 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/04/murky-a-mercurial-client-app/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>MYProjects now hosted on Bitbucket.org</title>
		<link>http://mooseyard.com/Jens/2009/04/myprojects-now-hosted-on-bitbucketorg/</link>
		<comments>http://mooseyard.com/Jens/2009/04/myprojects-now-hosted-on-bitbucketorg/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 05:47:16 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Computers</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/04/myprojects-now-hosted-on-bitbucketorg/</guid>
		<description><![CDATA[I've set up new homes for my various programming projects on "Bitbucket.org":http://bitbucket.org/snej, which is rather like "Github":http://github.com, only for Mercurial instead of Git. (<tt>hg clone github.com</tt>, perhaps?)

<a href="http://bitbucket.org/snej"><img src="http://bitbucket.org/m/img/logo_myriad.png" align="right" /></a>In addition to Mercurial repository hosting, each project gets a nice source browser, a wiki, and a bug-tracker.

To kick things off, I've put up a new release of "MYNetwork":http://bitbucket.org/snej/mynetwork/ ...]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve set up new homes for my various programming projects on <a href="http://bitbucket.org/snej" title="">Bitbucket.org</a>, which is rather like <a href="http://github.com" title="">Github</a>, only for Mercurial instead of Git. (<tt>hg clone github.com</tt>, perhaps?)</p>

	<p>In addition to Mercurial repository hosting, each project gets a nice source browser, a wiki, and a bug-tracker.</p>

	<p><a href="http://bitbucket.org/snej"><img src="http://bitbucket.org/m/img/logo_myriad.png" /></a></p>

	<p>To kick things off, I&#8217;ve put up a new release of <a href="http://bitbucket.org/snej/mynetwork/" title="">MYNetwork</a>. It doesn&#8217;t change the core functionality much, but it adds</p>
	<ul>
		<li>A new <a href="http://bitbucket.org/snej/mynetwork/src/tip/PortMapper/MYPortMapper.h" title="">PortMapper</a> class that lets you open up your <span class="caps">TCP</span>Listener to receive connections from outside your local network, when behind a <span class="caps">NAT</span>;</li>
		<li><a href="http://bitbucket.org/snej/mynetwork/src/tip/Bonjour/MYBonjourBrowser.h" title="">Bonjour</a> classes for browsing for network services.</li>
	</ul>

	<p>I&#8217;ve also restored the <a href="http://bitbucket.org/snej/mynetwork/wiki/BLIP/Protocol" title=""><span class="caps">BLIP</span> protocol documentation</a> that went <span class="caps">AWOL</span> when my own local project server died last year.</p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/04/myprojects-now-hosted-on-bitbucketorg/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>The Assassination of J.G. Ballard Considered As A Metafictional Homage</title>
		<link>http://mooseyard.com/Jens/2009/04/the-assassination-of-jg-ballard-considered-as-a-metafictional-homage/</link>
		<comments>http://mooseyard.com/Jens/2009/04/the-assassination-of-jg-ballard-considered-as-a-metafictional-homage/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 20:55:54 +0000</pubDate>
		<dc:creator>Jens Alfke</dc:creator>
		
	<category>Ideas</category>
	<category>Humor</category>
		<guid isPermaLink="false">http://mooseyard.com/Jens/2009/04/the-assassination-of-jg-ballard-considered-as-a-metafictional-homage/</guid>
		<description><![CDATA[<i>“Some people have suggested that mental illness is a kind of adaptation to the sort of circumstances that will arise in the future. As we move towards a more and more psychotic landscape, the psychotic traits are signs of a kind of Darwinian adaptation.”</i> --1998

h3. Abstract.

Numerous studies have been conducted upon patients in terminal paresis (GPI), placing the author J.G. Ballard in a series of simulated auto crashes, e.g. multiple pileups, head-on collisions, motorcade attacks (fantasies of Presidential assassinations remained a continuing preoccupation, subjects showing a marked polymorphic fixation on windshields and rear trunk assemblies). Powerful erotic fantasies of an anal-sadistic surrounded the image of the award-winning novelist.]]></description>
			<content:encoded><![CDATA[	<p><i>&#8220;Some people have suggested that mental illness is a kind of adaptation to the sort of circumstances that will arise in the future. As we move towards a more and more psychotic landscape, the psychotic traits are signs of a kind of Darwinian adaptation.&#8221;</i>&#8212;1998</p>

	<h3>Abstract.</h3>

	<p>Numerous studies have been conducted upon patients in terminal paresis (GPI), placing the author J.G. Ballard in a series of simulated auto crashes, e.g. multiple pileups, head-on collisions, motorcade attacks (fantasies of Presidential assassinations remained a continuing preoccupation, subjects showing a marked polymorphic fixation on windshields and rear trunk assemblies). Powerful erotic fantasies of an anal-sadistic nature surrounded the image of the award-winning novelist.</p>

	<h3>J.G. Ballard And The Conceptual Auto-Disaster.</h3>

	<p>J.G. Ballard died yesterday in his last car-crash. During his life he had rehearsed his death in many crashes, but this was his only true accident. Driven on a collision course towards the royal limousine, his car jumped the rails of the London Airport flyover and plunged through the roof of a bus filled with airline passengers. The crushed bodies of package tourists, like a h&#230;morrhage of the sun, still lay across the vinyl seats an hour later. Holding the arm of her chauffeur, the Princess Diana, with whom Ballard had dreamed of dying for so many months, stood alone under the revolving ambulance lights, a gloved hand to her throat.</p>

	<p>Could she see, in Ballard&#8217;s posture, the formula of the death he had devised for her? During the last weeks of his life Ballard had thought of nothing else but her death, a coronation of wounds he had staged with the devotion of an Earl Marshal. The walls of his apartment near the film studios at Shepperton were covered with the photographs he had taken with his zoom lens each morning as she left her hotel in London, from the pedestrian bridges above the westbound motorways, and from the roof of the multi-storey car-park at the studios. The magnified details of her knees and hands, of the inner surface of her thighs and the left apex of her mouth, he matched at his apartment with the photographs of grotesque wounds in a textbook of plastic surgery.</p>

	<p>Yesterday his body lay under the police arc-lights at the foot of the flyover, veiled by a delicate lacework of blood. The broken postures of his legs and arms, the bloody geometry of his face, seemed to parody the photographs of crash injuries that covered the walls of his apartment. Twenty yards away, illuminated by the revolving lamps, the princess hovered on the arm of her chauffeur. Ballard had dreamed of dying at the moment of her orgasm.</p>

	<p>Before his death Ballard had taken part in many crashes. As I think of Ballard I see him in the stolen cars he drove and damaged, the surfaces of deformed metal and plastic that for ever embraced him.</p>

	<h3>The Voices Of Time.</h3>

	<p>You&#8217;re not alone, Ballard, don&#8217;t think you are. These are the voices of time, and they&#8217;re all saying goodbye to you.<br />
Every particle in your body, every grain of sand, every galaxy carries the same signature.<br />
You know what the time is now,<br />
so what does the rest matter?</p>

	<h3>References.</h3>

	<ul>
		<li>Ballard, J.G. <a href="http://en.wikipedia.org/wiki/The_Voices_of_Time" title="">&#8220;The Voices Of Time&#8221;</a> [1962]</li>
		<li>Ballard, J.G. <a href="http://info.interactivist.net/node/3244" title="">&#8220;Why I Want To Fuck Ronald Reagan&#8221;</a> [1967]</li>
		<li>Ballard, J.J. <i><a href="http://www.amazon.com/Atrocity-Exhibition-Flamingo-Modern-Classics/dp/0007116861" title="">The Atrocity Exhibition</a> </i> [1969]</li>
		<li>Ballard, J.G. <i><a href="http://www.amazon.com/Crash-Novel-J-G-Ballard/dp/0312420331" title="">Crash</a> </i> [1973]</li>
	</ul>

	<p><i>[For the perplexed or appalled: This is a pastiche assembled out of bits of Ballard&#8217;s best-known works, with the names changed around. I claim no ownership of these words nor personal identification with their opinions.]</i></p>
 ]]></content:encoded>
			<wfw:commentRSS>http://mooseyard.com/Jens/2009/04/the-assassination-of-jg-ballard-considered-as-a-metafictional-homage/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
