<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<channel>
<title>The Fishbowl</title>
<link>http://fishbowl.pastiche.org/</link>
<description>tail -f /dev/mind &gt; blog</description>
<dc:language>en-us</dc:language>
<dc:creator>cmiller@pastiche.org</dc:creator>
<dc:date>2008-06-25T11:05:17+10:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.64" />
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>

<item>
<title>Advice to public speakers: using microphones</title>
<link>http://fishbowl.pastiche.org/2008/06/25/advice_to_public_speakers_using_microphones</link>
<description><![CDATA[<p>At some point in your career, you&#8217;re probably going to have to stand up and speak in front of a room full of people. If you&#8217;re a developer you could be giving a presentation at a user group or conference, or you could just have been called on to address a staff meeting. If the room and audience is large enough, you&#8217;ll be wearing, holding, or standing in front of a microphone.</p>

<p><strong>Speak to the audience, not the microphone.</strong></p>

<p>Most people who aren&#8217;t used to it talk as if they are speaking to the microphone. Intuitively, this makes sense because the whole point of having a microphone is so it can pick up your voice and deliver it to the audience:</p>

<p><img src="http://fishbowl.pastiche.org/archives/pictures/talking-to-mic.png" width="352" height="212" title="Talking to the microphone" alt=""/></p>

<p>The problem is that a microphone can only amplify what it is given to work with. If you are talking only as far as the microphone, the voice that reaches the mic will be too quiet to amplify effectively. Even if you increase the gain your voice is still going to sound weak, and there&#8217;s only so far you can push it before the microphone starts picking up too much ambient noise and you&#8217;re competing with your own feedback.</p>

<p><img src="http://fishbowl.pastiche.org/archives/pictures/talking-through-mic.png" width="352" height="212" title="Talking through the microphone" alt=""/></p>

<p>The best way to use a microphone is to pretend it isn&#8217;t there. Talk to the audience, project your voice like you&#8217;re speaking to a room full of people, and just put the microphone in the way.</p>

<p><strong>Bonus feature: lapel microphones</strong></p>

<p>Sometimes you&#8217;ll be given a clip-on lapel mic. You&#8217;ve probably seen these things used on <span class="caps">TV,</span> they get clipped on halfway down someone&#8217;s collar. This is because on <span class="caps">TV</span> they have a lot more control over ambient noise, acoustics and the audience than you ever will.</p>

<p>If you get given a lapel microphone, all the above advice applies &#8212; if you don&#8217;t speak clearly and loudly, it won&#8217;t pick up what you&#8217;re saying &#8212; with one additional factor. <strong>Move it up.</strong> Don&#8217;t hang the mic halfway down your chest, clip it as close to your throat as you can. That way you&#8217;ll at least give it a half chance of picking up what you&#8217;re saying.</p>

<p>And if it&#8217;s not doing the job, don&#8217;t be afraid to unclip it and hold it in front of your mouth.</p>]]> </description>
<guid isPermaLink="false">2253@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-06-25T11:05:17+10:00</dc:date>
</item>
<item>
<title>Inbox Hero</title>
<link>http://fishbowl.pastiche.org/2008/05/07/inbox_hero</link>
<description><![CDATA[<p>The Internet is full of articles on how to manage email, and I&#8217;m pretty sure I&#8217;ve read every one of them over the last few years. Despite this, I&#8217;ve never been able to stick to any of these systems long enough to pronounce any of them a success.</p>

<p>Hello. My name is Charles Miller, and the last time I regularly cleared my inbox was 1997.</p>

<p>Until now.</p>

<p>Almost by accident, by combining a little from <a href="http://www.43folders.com/izero">column A</a>, a little from <a href="http://www.guardian.co.uk/technology/2008/apr/29/email.filter">column B</a> and a <strong>lot</strong> of <a href="http://putthingsoff.com/inbox-heaven/">column C</a>, I seem to have stumbled on a technique that works for me. I&#8217;ve been regularly processing all my incoming mail within a working day of it arriving for the last five weeks, and the system seems comfortable enough that I can&#8217;t see myself falling off the wagon any time soon.</p>

<p>Because I know you find these things frightfully interesting, here are the details.</p>

<p><strong>Infrastructure</strong></p>

<p>All my mail comes into <span class="caps">IMAP</span> boxes. <a href="http://putthingsoff.com/inbox-heaven/">Inbox Heaven</a> is adamant I should be using GMail, but I disagree with pretty much every reason given. The advantages of <span class="caps">IMAP</span> are:</p>

<ul><li>My email is available uniformly across multiple devices</li>
<li>My mail clients cache mail locally and update in the background to reduce annoying network lag</li>
<li>My mail clients can aggregate mail from multiple sources&#8230; or not if I don&#8217;t want to deal with my personal mail on my office workstation</li>
<li>Working offline is an option (albeit not one I take advantage of very often)</li>
<li><span class="caps">IMAP</span> is an open protocol with hundreds of implementations, so I don&#8217;t have to rely on the kindess of strangers when time comes to change mail clients or move to the next great mail-storage system</li>
</ul>

<p>(A couple of people emailed me to point out that GMail supports <span class="caps">IMAP,</span> which might make it worthwhile thanks to the server-side spam-filtering.)</p>

<p>The main disadvantages of using <span class="caps">IMAP</span> are that my reliance on client-side spam filtering, flagging and smart folder-ing make this system entirely useless on my iPhone. Which is good. The moment I&#8217;m so tied to email that I need to read it from my phone is the day I need to throw said phone away.</p>

<p>My mail client of choice is Apple&#8217;s Mail.app. I&#8217;m sure this system is do-able in other clients, though. In Mail.app, I create two smart folders:</p>

<ul><li>Unread mail in all accounts</li>
<li>Flagged mail in all accounts</li>
</ul>

<p>Unless I&#8217;m hunting down a message in my archives, these are the only two folders I read.</p>

<p><strong>The Process</strong></p>

<p>A lot of Inbox Zero primers tell you to only have your mail client check for mail once or twice a day, and subsequently force you to deal with your mail in large chunks. This is what broke me every time. I&#8217;d hit the &#8220;Get new mail&#8221; button and be immediately buried under the boring task of sorting that huge slab of email before I could continue on with my life.</p>

<p>I follow the <em>Inbox Heaven</em> approach instead. My day is chock-full of <a href="http://xkcd.com/303/">short periods of inactivity</a>, and when I have one, I&#8217;ll alt-tab into Mail and cull the contents of the <em>Unread</em> smart folder. Culling is a simple process:</p>

<ul><li>Sort the folder by subject</li>
<li>At most, skim-read the message (many messages can be culled by subject-line alone).</li>
<li>If the message is spam, junk it (cmd-shift-J)</li>
<li>If the message is <a href="http://www.urbandictionary.com/define.php?term=tl%3Bdr">tl; dr</a> but you might want to read it later, flag it (cmd-alt-L).</li>
<li>If the message needs a reply or further action, flag it</li>
<li>If the message needs to be kept (receipts, correspondance), copy it to the appropriate archive folder (thanks to smart mailboxes, once you&#8217;ve flagged a mail you can archive it immediately and still have it available to act on)</li>
<li>Otherwise, delete</li>
</ul>

<p>One or two times a day, go through the &#8220;flagged messages&#8221; folder and work out what else to do with them.</p>

<p><strong>Why this works for me</strong></p>

<p>The biggest reason I&#8217;ve stuck with this when other Inbox Zero systems failed me is that it mostly works in &#8220;stolen time&#8221;. Even with the most efficient system in the world, slogging through mounds of email is <em>dull</em>, and looking forward to an hour of dedicated email maintenance is a great recipe for just giving up and letting it get on top of you.</p>

<p>What&#8217;s really dumb is that I didn&#8217;t come up with this on my own, I had to crib it from other sources. Really, this is <i>exactly how I&#8217;ve kept on top of <span class="caps">RSS</span></i> for the last year. So much so that I&#8217;m seriously considering taking advantage of Mail&#8217;s built-in <span class="caps">RSS</span> support so that my feed-reading and email-reading can just become one process.</p>]]> </description>
<guid isPermaLink="false">2251@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-05-07T12:34:38+10:00</dc:date>
</item>
<item>
<title>Cluetrainwreck</title>
<link>http://fishbowl.pastiche.org/2008/04/19/cluetrainwreck</link>
<description><![CDATA[<p>A week or two ago, <a href="http://www.techcrunch.com">TechCrunch</a>&#8217;s Michael Arrington had a problem with his Comcast Internet access, and tore into the company over <a href="http://www.twitter.com">Twitter</a>, causing the usual minor <a href="http://www.techcrunch.com/2008/04/06/comcast-twitter-and-the-chicken-trust-me-i-have-a-point/">blog-storm</a>.</p>

<p>Comcast&#8217;s reaction to this was interesting. They <a href="http://twitter.com/comcastcares">opened a Twitter account</a> to watch for and respond to as many mentions of their company as they could.</p>

<p>At the face of it, this isn&#8217;t a bad idea. I&#8217;ve got a couple of similar keyword watches on Twitter myself, and have been known score some cheap goodwill points for my employer by following up on the occasional alert. I just can&#8217;t help thinking that there&#8217;s something in the big company <span class="caps">DNA</span> that is unable to adapt to this kind of public-but-personal service.</p>

<p>Here are some direct quotes from the &#8220;comcastcares&#8221; Twitter account, all from the last twenty-four hours.</p>

<ul><li>&#8220;I do hope we will be able to change any negative perception&#8221; <a href="http://twitter.com/comcastcares/statuses/792244351">#</a></li>
<li>&#8220;I hope we can change your perception.&#8221; <a href="http://twitter.com/comcastcares/statuses/792066708">#</a></li>
<li>&#8220;I hope I can change your perception of Comcast!&#8221; <a href="http://twitter.com/comcastcares/statuses/791929078">#</a></li>
<li>&#8220;How can we change your perception?&#8221; <a href="http://twitter.com/comcastcares/statuses/791738734">#</a></li>
</ul>

<p>When a phrasing like this is (a) so unlike normal speech, and (b) repeated so often, it&#8217;s pretty clear that it&#8217;s being used as a matter of policy. Some meeting was had to whiteboard the perfect response that sounds concerned and proactive, but admits absolutely no fault on the part of the carrier.</p>

<p>Which is a problem. When someone complains, they want someone to ask them &#8220;What&#8217;s wrong?&#8221; and be in a position to fix it. They don&#8217;t want to hear that really everything is fine, and it&#8217;s <i>their perception that&#8217;s at fault</i>. It&#8217;s no wonder people <a href="http://twitter.com/gpk3/statuses/791966083">sometimes get pissed off by the response</a>.</p>

<p>Joining in the online conversation is a great way to connect to your customers. But only if you&#8217;re prepared to be <i>human</i> and <i>honest</i>.</p>]]> </description>
<guid isPermaLink="false">2249@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-04-19T11:37:34+10:00</dc:date>
</item>
<item>
<title>Firefox Bug 426702</title>
<link>http://fishbowl.pastiche.org/2008/04/03/firefox_bug_426702</link>
<description><![CDATA[<p>What my eyes see:</p>

<p><img src="http://fishbowl.pastiche.org/archives/pictures/firefox-exceptions-dialog-1.png" width="399" height="478" alt="A dialog with two buttons at the bottom: Remove Site, and Remove All Sites" title="Firefox 2 and 3"></p>

<p>What my brain sees:</p>

<p><img src="http://fishbowl.pastiche.org/archives/pictures/firefox-exceptions-dialog-2.jpg" width="399" height="478" alt="A dialog with two buttons at the bottom: Cancel and OK" title="Skitch FTW"></p>]]> </description>
<guid isPermaLink="false">2245@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-04-03T16:29:25+10:00</dc:date>
</item>
<item>
<title>The Song that Never Ends</title>
<link>http://fishbowl.pastiche.org/2008/03/31/the_song_that_never_ends</link>
<description><![CDATA[<p>The process goes something like this:</p>

<ol><li>FooCorp offers some service that involves the hosting, distribution or modification of user-generated content</li>
<li>Company sends memo to lawyers: &#8220;we need a <span class="caps">EULA</span>&#8221;</li>
<li>Lawyers panic. How can FooCorp possibly protect itself from all possible avenues of litigation when their entire service is predicated on processing digital copies of someone else&#8217;s copyright material?</li>
<li>Lawyers put a standard boiler-plate clause in the <span class="caps">EULA</span> granting FooCorp a &#8220;royalty-free, nonexclusive, perpetual, irrevocable, and fully sublicensable license to use, distribute, derive revenue or other remuneration from, reproduce, modify, adapt, publish, translate, publicly perform and publicly display such Content (in whole or in part) and to incorporate such Content into other Materials or works in any format or medium now known or later developed.&#8221;</li>
<li>Service is launched.</li>
<li>Within minutes, someone actually bothers to read the <span class="caps">EULA,</span> and points out that this clause is <strong>complete bullshit</strong>.</li>
<li>Users of said service revolt</li>
<li>Company retreats with egg on its face and rewrites <span class="caps">EULA</span></li>
</ol>

<p>The first time I remember seeing this happen was when Geocities was bought by Yahoo back in 1999. Why, then, is it <i>still happening <a href="http://arstechnica.com/news.ars/post/20080329-adobe-joins-list-of-companies-not-reading-own-eulas.html">today</a></i>?</p>

<p>As more and more of our interactions with companies are governed by explicit legal agreements, companies need to realise that <b>your legal terms are part of the public face of your company</b>. The clauses in your <span class="caps">EUL</span>As are the most explicit evidence available of the regard in which you hold your customers, more than anything else because you know somebody has sweated over them word for word to give them a precise, legally binding interpretation.</p>

<p>(Similarly, your employment contracts say what you really think about your employees once the feel-good bullshit has been swept out of the way.)</p>

<p>Adobe don&#8217;t want to claim ownership of your photos any more than Yahoo wanted to ruthlessly exploit a few hundred thousand pastel-coloured <i>Charmed</i> fan-sites back in 1999. It&#8217;s just a lot easier, in the face of the possibility that some legal edge-case in copyright law might expose you to damages later on, to claim you have the right to do anything you want &#8220;just in case&#8221;.</p>

<p>Often when a lawyer makes such an ambit claim, there will be another lawyer on the other end ready to strike a bargain somewhere in the middle. Other times there will be a large number of disconnected third parties who either won&#8217;t read the fine print, or who figure there&#8217;s nothing they can do to change the terms.</p>

<p>The Internet turns all these disconnected users into a community, though, and turns what used to be the private acceptance of an unavoidable <span class="caps">EULA</span> into an exercise in collective bargaining.</p>

<p>Most companies take great pains to make sure their public-facing statements  present the company in the correct light. It&#8217;s about time lawyers were subject to the same processes.</p>

<p>(Further reading: <a href=http://www.eff.org/wp/dangerous-terms-users-guide-eulas">Dangerous Terms: <span class="caps">A </span>User&#8217;s Guide to <span class="caps">EUL</span>As</a> by the <span class="caps">EFF</span>)</p>]]> </description>
<guid isPermaLink="false">2244@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-03-31T14:57:01+10:00</dc:date>
</item>
<item>
<title>An iPhone SDK Halo Effect?</title>
<link>http://fishbowl.pastiche.org/2008/03/07/an_iphone_sdk_halo_effect</link>
<description><![CDATA[<p>The <a href="http://developer.apple.com/iphone/">iPhone <span class="caps">SDK</span></a> was announced today, and it has a few interesting characteristics. The environment for developing iPhone apps is:</p>

<ul><li>Mac <span class="caps">OS X</span></li>
<li>XCode</li>
<li>Objective-C</li>
<li>Cocoa</li>
</ul>

<p>Of course, some of these layers can be quite thin &#8212; I doubt any of the games demonstrated today used Cocoa or Obj-C for more than was necessary to set up an OpenGL context. On the other hand, the common refrain from the demonstrators was: &#8220;We&#8217;d never done any Mac programming before, and&#8230; hey, look what we came up with!&#8221;</p>

<p>If the iPhone continues its strong showing in the smart phone market, which today&#8217;s announcements seem to set it on the road to doing, there&#8217;s going to be a demand for iPhone developers in the mobile space. Which means there&#8217;s going to be a bunch of people learning Mac <span class="caps">OS X</span> development who wouldn&#8217;t otherwise have given it a look.</p>

<p>One imagines that kind of injection of new blood can&#8217;t be bad for the platform as a whole.</p>]]> </description>
<guid isPermaLink="false">2241@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-03-07T21:45:56+10:00</dc:date>
</item>
<item>
<title>JSR-666 Extension: Unthrowable Exceptions</title>
<link>http://fishbowl.pastiche.org/2008/03/07/jsr666_extension_unthrowable_exceptions</link>
<description><![CDATA[<p>The following is a not uncommon occurrence in Java:

<pre>try {
    s = new String(byteArray, "UTF-8");
} catch (UnsupportedEncodingException e) {
    throw new Error("UTF-8 is missing??");
}</pre>

<p>This code is the result of two conflicting factors. On one hand, since the constructor in question takes an arbitrary character encoding, the case of the encoding being unavailable must be taken into account. On the other hand, 90% of code that calls this constructor will be explicitly invoking a character set that is required to be provided with the Java Runtime Environment, and its absence would be an error serious enough to justify terminating the VM entirely.

<p>Similar structures can be found in code that performs cryptography or reflection.

<p>As such, the JSR-666 expert group recommends the introduction of the <code>yoda</code> code-word to the Java language. This keyword commands that the virtual machine "Do, or do not", where there is no corresponding <code>try</code>.

<p>While in yoda-mediated code, any matching exception will automatically be caught and rethrown as an <a href="http://java.sun.com/javase/6/docs/api/java/lang/AssertionError.html">AssertionError</a> (even if assertions are otherwise disabled):

<pre>yoda (UnsupportedEncodingException) {
    String s = new String(byteArray, "UTF-8");
}</pre >

<p>Or at the method level:

<pre>public void myMethod() 
    yodas UnsupportedEncodingException { ... }</pre>

<p>Warning: the <code>yoda</code> keyword should <b>only</b> be used in places where the presence of an exception would indicate the Java Runtime Environment is misconfigured or broken. Misusing the keyword may cause a great disturbance in the Virtual Machine, as if millions of voices suddenly cried out in terror and were suddenly silenced

<p>This proposal acts as a companion to the <a href="http://fishbowl.pastiche.org/2008/02/13/jsr666_extension_exception_types">previous JSR-666 exception handling proposal</a>.]]> </description>
<guid isPermaLink="false">2240@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-03-07T21:24:48+10:00</dc:date>
</item>
<item>
<title>Java Developers...</title>
<link>http://fishbowl.pastiche.org/2008/03/04/java_developers</link>
<description><![CDATA[<p>A recent post on <a href="http://www.atlassian.com">our</a> internal <a href="http://www.atlassian.com/software/confluence">wiki</a> asked for T-shirt slogans of the style: &#8220;Java developers do it with&#8230;&#8221;. I didn&#8217;t quite stick to the format, but here are my submissions for posterity:</p>

<ol><li>Java: because chicks dig the strong, static type</li>
<li>Java developers do it with <span style="color: #999999">java.lang.</span>Class</li>
<li>Java: <a href="http://fishbowl.pastiche.org/2004/03/17/halfway_between_the_gutter_and_the_stars">dragging C++ programmers halfway to <span class="caps">LISP</span></a> since 1995</li>
<li>Java: making Smalltalk nerds cry since 1995</li>
<li>Java developers do it with primitive types</li>
<li>Java developers do it with 0xb6-0xb9</li>
<li>Java developers do it with <a href="http://www.google.com/search?client=safari&amp;rls=en-au&amp;q=java+is+the+new+cobol"><span class="caps">COBOL</span>&#8217;s rotting corpse</a></li>
</ol>

<p>I actually want #6 on a t-shirt. <a href="http://www.bright-green.com/">Alan Green</a> wins the &#8220;nerd of the day&#8221; award for being the first to get the reference.</p>

<p>On a related note, I spent a lot of yesterday trying to come up with a Java byte-code joke. The best (and this is really stretching the definition of &#8216;best&#8217;) I could come up with was the following:</p>

<p><span class="caps">Q. </span>What did the <code>invokespecial</code> say to the <code>invokevirtual</code>?</p>

<p><span class="caps">A. I</span>&#8216;m <code>super()</code>, thanks for asking!</p>

<p>Thank-you, I&#8217;ll be here all week.</p>]]> </description>
<guid isPermaLink="false">2239@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-03-04T08:58:08+10:00</dc:date>
</item>
<item>
<title>Scala is to Java as..</title>
<link>http://fishbowl.pastiche.org/2008/03/03/scala_is_to_java_as</link>
<description><![CDATA[<p>I was reading my preview of <a href="http://www.artima.com/shop/forsale">the Artima Scala book</a> over the weekend when I had a sudden moment of clarity.</p>

<blockquote><p>In Scala, generic types have by default non-variant subtyping. That is, with Queue defined as above, queues with different element types would never be in a subtype relation. However, you can demand co-variant subtyping of queues by changing the first line of the definition of class Queue as follows.<p>class Queue[+T] { &#8230; }</p>

<p>Prefixing a formal type parameter with a + indicates that subtyping is co-variant in that parameter. Besides +, there is also a prefix - which indicates contra-variant subtyping. If Queue was defined</p>

<p>class Queue[-T] { &#8230; }</p>

<p>then if T is a subtype of type S this would imply that Queue[S] is a subtype of Queue[T] (which in the case of queues would be rather surprising!).</blockquote></p>

<p>Scala is a multi-paradigm language that many in the developer intelligentsia are annointing as the &#8216;successor&#8217; to Java.</p>

<p>Its syntax is based on Java&#8217;s, and it remains compatible enough that you can call existing Java code and libraries directly from Scala, just as you can expose Scala objects within Java code. However, it brings along an improved type system, first-class support for functional programming, an actor system that imitates Erlang, and so on. The cost of all this is the addition of a not-insignificant chunk of complexity to the language.</p>

<p>That&#8217;s right.</p>

<p>Scala is to Java as C++ is to <span class="caps">C.</span></p>

<p>Seeing as Java <a href="http://fishbowl.pastiche.org/2004/03/17/halfway_between_the_gutter_and_the_stars">started off as</a> the language that <em>removed</em> and <em>simplified</em> a lot of the stuff from C++ that developers tended to shoot themselves in the feet with, I find myself wondering more what language might bill itself as Scala&#8217;s successor, and how it might distill the best parts of that language to a more manageable, coherent whole.</p>

<p>(The first smart-arse to answer &#8220;LISP&#8221; wins a swift kick in the nuts.)</p>]]> </description>
<guid isPermaLink="false">2238@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-03-03T12:09:12+10:00</dc:date>
</item>
<item>
<title>Apple TV 2.0 First Impressions</title>
<link>http://fishbowl.pastiche.org/2008/02/14/apple_tv_20_first_impressions</link>
<description><![CDATA[<p>The Apple <span class="caps">TV 2.0</span> update was, to the best of my recollection, the worst (successful) software installation experience I&#8217;ve ever had from Apple.</p>

<p>It wasn&#8217;t that the upgrade took 15 minutes from the end of the download to the time the unit booted into its new interface. Given the entire <span class="caps">OS</span> was being upgraded under the hood, I sort of expected that. The problem was that nowhere along the way did I have any idea how the upgrade was progressing, or even if it was progressing at all.</p>

<p>The unit rebooted. A shiny Apple logo appeared and a progress-bar inched from empty to complete beneath it. Then the unit rebooted again, the logo appeared with the progress-bar back at zero and the process began again. By the third repetition I jumped on the Internet to be reassured by various forums that this was, in fact, normal, and after the fifth restart I should have a working Apple <span class="caps">TV.</span></p>

<p>This post was originally going to be a list of all the little things I thought were wrong or missing with the new update of the Apple <span class="caps">TV,</span> but in composing the article I realised that <a href="http://fishbowl.pastiche.org/2004/04/21/meditations_on_the_first_version">such articles generally annoy me</a>, and really the one example above would suffice<sup>1</sup>.</p>

<p>The installation experience is one of those <a href="http://windowshelp.microsoft.com/Windows/en-US/help/2e680b8d-211e-41c5-a0bf-9ccc6d7e62a21033.mspx">things that Apple usually gets right</a>. The upgrade of the Apple <span class="caps">TV</span> wasn&#8217;t bad <i>compared to other devices</i>, it just wasn&#8217;t an Apple experience. (On reflection, this is a sad sign of how little faith I have that software will meet even my lowest standards)</p>

<p>Similarly, my first impression of the Apple <span class="caps">TV 2.0</span> is that it is a perfectly serviceable device that allows me to play media from my iTunes libraries, and allows me to buy and rent movies and music from the iTunes store<sup>2</sup>&#8230; it just feels like Apple outsourced the design.</p>

<p>When trying out a new Apple product you <i>expect</i> those moments of &#8220;Wow, this is how this should be done, why didn&#8217;t anyone else think of that?&#8221; The moments where you realise some long-held assumption about how such devices should work is wrong. These moments are what&#8217;s lacking from the Apple <span class="caps">TV. </span>At the same time, so many things feel phoned in, from the cluttered main menu, to the painfully clumsy on-screen keyboard, to the way the photo gallery refuses to let you view your albums as anything but a slideshow.</p>

<p>It just seems that the Apple <span class="caps">TV</span> isn&#8217;t getting the design attention or the commitment to &#8220;thinking different&#8221; that are the hallmark of the Apple experience. And that, more than anything else, might be the biggest threat to <a href="http://www.engadget.com/2007/05/30/steve-jobs-live-from-d-2007/">Steve&#8217;s hobby</a>.</p>

<p><hr></p>

<p><sup>1</sup> <span class="caps">OK,</span> so a few more snuck in later<br />
<sup>2</sup> <a href="http://blogs.atlassian.com/news/2007/12/h1_interview_wi.html">Girlfriend</a> with a <span class="caps">US</span> iTunes account <a href="http://www.urbandictionary.com/define.php?term=ftw"><span class="caps">FTW</span></a>!</p>]]> </description>
<guid isPermaLink="false">2234@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-02-14T14:50:50+10:00</dc:date>
</item>
<item>
<title>JSR-666 Extension: Exception Types</title>
<link>http://fishbowl.pastiche.org/2008/02/13/jsr666_extension_exception_types</link>
<description><![CDATA[<p>As an extension to the <a href="http://fishbowl.pastiche.org/2003/02/03/jsr666"><span class="caps">JSR</span>-666</a> specification, the expert group would like to suggest the following enhancement to the Java Language Specification:</p>

<p><b>Problem:</b></p>

<p>When checking preconditions in Java code, it is very common to check whether some method argument is null, and throw an exception if it is. There are two equally valid exceptions that may be used in this case: <code>IllegalArgumentException</code> and <code>NullPointerException</code>. The decision to use one over the other is often the cause of holy wars, and can consume a great deal of productivity on internal mailing-lists and blogs.</p>

<p><b>Solution:</b></p>

<p>As such, we recommend the introduction of a new exception type:</p>

<p><code>throw new SchrödingerException&lt;NullPointerException, IllegalArgumentException&gt;("Value should not be null.");</code></p>

<p>(The umlaut is required, in accordance with <a href="http://fishbowl.pastiche.org/2003/03/19/jsr666_extended_operator_set">previous discussion</a>)</p>

<p><code>SchrödingerException</code> instances will be of <i>indeterminate type</i> until they are first accessed in such a way as their type must be explicitly decided one way or another. At that point, the exception will &#8220;collapse&#8221; into one or other of the provided exception types.</p>

<p>It is impossible to determine if any exception is a <code>SchrödingerException</code>, as any attempt to examine or test its type will cause the exception identity to collapse to one of the supplied &#8220;stable&#8221; classes. It is also impossible to influence the final type of a <code>SchrödingerException</code> through external interference, including reflection, <span class="caps">JVM</span> instrumentation or byte-code enhancement, as any too-close examination of the exception will cause it to collapse prematurely.</p>

<p>(Further <span class="caps">JSR</span>-666 specifications: <a href="http://www.bright-green.com/blog/2003_02_03/jsr_666_programmability_enhanc.html">here</a>, <a href="http://fishbowl.pastiche.org/2003/03/19/jsr666_extended_operator_set">here</a>, <a href="http://blogs.atlassian.com/rebelutionary/archives/2003/08/jsr666_the_that.html">here</a>)</p>]]> </description>
<guid isPermaLink="false">2233@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-02-13T16:08:34+10:00</dc:date>
</item>
<item>
<title>Facebook for Dummies</title>
<link>http://fishbowl.pastiche.org/2008/02/08/facebook_for_dummies</link>
<description><![CDATA[<p>Late at night, you see a woman at the other end of the bar. She&#8217;s talking to a friend of yours. He calls you over. You say hello and offer to buy her a drink.</p>

<p>&#8220;Sure,&#8221; she replies. &#8220;Just give me the keys to your apartment so I can move my stuff in. Oh, and introduce me to all your mates while you&#8217;re at it.&#8221;</p>

<p>This, in a nutshell, is how Facebook apps work, and why 95% of the time I get a notification from such an application I end up annoyed.</p>

<p>Most Facebook apps don&#8217;t need any more information about me to function than my name, my unique <span class="caps">ID</span> and possibly a link to my profile photo. There is no need to ask me to <i>make a commitment</i> to any app I am merely visiting, nor is there any need to ask me to invite my friends, beyond the obvious observation that the business model for so many of these apps is based entirely on <i>tricking acquaintances into spamming each other</i>.</p>

<p>The whole model is broken. User-hostile, pyramid-shaped and broken.</p>]]> </description>
<guid isPermaLink="false">2232@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-02-08T10:43:38+10:00</dc:date>
</item>
<item>
<title>Meraki&apos;s Shipment of Fail</title>
<link>http://fishbowl.pastiche.org/2008/02/05/merakis_shipment_of_fail</link>
<description><![CDATA[<p><a href="http://www.flickr.com/photos/cmiller/sets/72157603757029979/">For obvious reasons</a>, I&#8217;m quite pleased with my new apartment. One problem, however, is that it is a total nightmare as far as setting up Wi-Fi goes.</p>

<p>One problem, however, is that the apartment is long, thin, and oddly-shaped enough that the points I want to link via Wi-Fi are inevitably separated by at least two external walls. And when the Ghostbusters (investigating the source of the psychic disturbance on the roof of my apartment block) pull out the blueprints, I can just picture Harold Ramis asking &#8220;What kind of madman would clad an entire building in a Faraday cage?&#8221;</p>

<p>For this reason (and because they&#8217;re <a href="http://www.freesydneywireless.com">generally cool</a>), I decided to order a couple of <a href="http://meraki.com/oursolution/hardware/mini/">Meraki Mini</a> Wi-fi repeaters to dot through my apartment, hopefully connecting all the rooms reliably (with some signal left over for the rest of Kirribilli).</p>

<p>Then I discovered that the shipping cost for my three repeaters (RRP: <span class="caps">US</span>$49 each) was a mind-boggling $62.</p>

<p>I&#8217;m attempting to <a href="http://www.facebook.com/topic.php?uid=12590690161&amp;topic=4442&amp;ref=mf">harness the power of social networking to work around this issue</a>,  but really, if your only shipping option is going to set me back <i>more than a third of what I&#8217;m paying for the goods</i>, there&#8217;s only one thing that springs to mind:</p>

<p><img src="http://fishbowl.pastiche.org/archives/pictures/shipment-of-fail.jpg" width="480" height="336" alt="FAIL!" title="via the Fail Blog"></p>]]> </description>
<guid isPermaLink="false">2231@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-02-05T16:57:16+10:00</dc:date>
</item>
<item>
<title>How to break HTML by pretending to support it.</title>
<link>http://fishbowl.pastiche.org/2008/01/24/how_to_break_html_by_pretending_to_support_it</link>
<description><![CDATA[<p><a href="http://ln.hixie.ch/">Ian Hickson</a>, on <a href="http://alistapart.com/articles/beyonddoctype">Microsoft&#8217;s plans to add a new compatibility mode in <span class="caps">IE8</span></a>:</p>

<blockquote><p>If Web authors actually use this feature, and if <span class="caps">IE</span> doesn&#8217;t keep losing market share, then eventually this will cause serious problems for <span class="caps">IE</span>&#8217;s competitors — instead of just having to contend with reverse-engineering <span class="caps">IE</span>&#8217;s quirks mode and making the specs compatible with <span class="caps">IE</span>&#8217;s standards mode, the other browser vendors are going to have to reverse engineer every major <span class="caps">IE</span> browser version, and end up implementing these same bug modes themselves. It might actually be quite an effective way of dramatically increasing the costs of entering or competing in the browser market. (This is what we call &#8220;anti-competitive&#8221;, or &#8220;evil&#8221;.) [<a href="http://ln.hixie.ch/?start=1201080691&amp;count=1">source</a>]</p></blockquote>

<p>If they go with their current plans, Microsoft will be attempting to redefine &#8220;standard&#8221; as &#8220;what <span class="caps">IE7</span> does&#8221;, and everything else as an extension that needs to be opted into. They feel entirely justified in doing so because from their perspective, <span class="caps">IE</span>&#8217;s market-share <i>makes</i> it the standard.</p>]]> </description>
<guid isPermaLink="false">2230@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-01-24T12:01:25+10:00</dc:date>
</item>
<item>
<title>Heavier than Air</title>
<link>http://fishbowl.pastiche.org/2008/01/22/heavier_than_air</link>
<description><![CDATA[<p>When Apple first introduced the iPod, it was greeted with the now classic <a href="http://apple.slashdot.org/article.pl?sid=01/10/23/1816257&amp;tid=107">Slashdot lead</a>: &#8220;No wireless. Less space than a nomad. Lame.&#8221;  When Apple first introduced the iPod Mini, the pundit consensus was that, at only $50 less than the iPod classic, <a href="http://whatdoiknow.org/archives/001423.shtml">nobody would buy a device with a quarter of the hard drive space of its older brother</a>.</p>

<p>(John Gruber&#8217;s <a href="http://daringfireball.net/2004/01/agitators">rebuttal</a> is fun to read in hindsight, as the Mini went on to out-sell the Classic iPod)</p>

<p>You can go back further. Every single generation of iMac has been greeted with complaints that there are no expansion slots, you can&#8217;t upgrade it, you can&#8217;t replace the screen, and in the case of the original iMac it was missing that most vital of peripherals, the 3.5 inch floppy drive.</p>

<p>The tech press, it seems, has a bad record on judging products on criteria you can&#8217;t fit on a feature matrix.</p>

<p>Which is a problem, because feature matrices <i>suck</i>. A feature matrix says: &#8220;Here is what everyone else is doing. To be competitive you must do the same.&#8221; Where&#8217;s the differentiation? Where&#8217;s the innovation in doing exactly what everyone else does, ticking the boxes, shaving off one or two points in each row so you get the green tick?</p>

<p>Ever watch <a href="http://www.topgear.com/">Top Gear</a> review a car? There&#8217;s always the point in the review where they run through the list of cars that are cheaper, more powerful and better fitted-out&#8230; but just aren&#8217;t half as fun to drive. If it were up to most tech pundits you would buy a car from a spec sheet &#8212; horsepower, miles per gallon, price, optional extras &#8212; without ever sitting behind the wheel and giving it a run around the block.</p>

<p>Enter the MacBook Air, a device that is under-powered, has too small a hard drive, has only one <span class="caps">USB</span> port, lacks firewire, a replaceable battery, wired ethernet and an optical drive. Sure-fire flop, right? Even those sites willing to give the Air a look have labeled it as a &#8220;secondary&#8221; machine, only suitable for those rich (or geeky) enough to own more than one Mac. That&#8217;s an opinion I can sympathise with because if I were to buy an Air (a distinct possibility), that&#8217;s the role it would play.</p>

<p>I have to remind myself, though, that I am not a normal person. Nor are most people who write for tech weblogs. I think the step that Apple is taking with the MacBook Air is much like the one they took when they decided to ship the iMac without a floppy drive. They know where the world is going, and they want to be there first.</p>

<p>If you think about it, everything that Apple have left off the MacBook Air is something that 90% of the population don&#8217;t need 90% of the time. If my MacBook Pro didn&#8217;t have Firewire, or only had one <span class="caps">USB</span> port, or even didn&#8217;t have an optical drive, I don&#8217;t think I&#8217;d even notice more than once a month, and I&#8217;d not find it hard to compensate for their absence those few times.</p>

<p>Don&#8217;t think of the Air as a secondary machine, think of it as a primary machine, with headless appliances like Time Capsule and the Apple <span class="caps">TV</span> filling in the space around it. All that&#8217;s really missing is some &#8220;myLife&#8221; storage appliance to hold overflow of mail, documents, Photos, videos and music when that 80GB internal drive fills up.</p>]]> </description>
<guid isPermaLink="false">2229@http://fishbowl.pastiche.org/</guid>
<dc:subject>nerd</dc:subject>
<dc:date>2008-01-22T11:49:48+10:00</dc:date>
</item>


</channel>
</rss>
