<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Educated Guesswork</title>
        <link>http://www.educatedguesswork.org/</link>
        <description></description>
        <language>en</language>
        <copyright>Copyright 2012</copyright>
        <lastBuildDate>Mon, 09 Apr 2012 20:46:10 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Selecting IETF Travel Venues</title>
            <description><![CDATA[The IETF RTCWEB WG has been operating on a fast track with
an interim meeting between each IETF meeting. 
Since we needed to schedule a lot of meetings,
 thought it might be instructive to try to analyze a bunch
of different locations to figure out the best strategy. Here's
a lightly edited version of my post to the RTCWEB WG trying to
address this issue.
<P>
Note that I'm not trying to make any claims about what the best set of
venues is. It's obviously easy to figure out any statistic we want
about each proposed venue, but how you map that data to "best" is a
much more difficult problem. The space is full of Pareto optima,
and even if we ignore the troubling philosophical question of
interpersonal utility comparisons, there's some tradeoff
between minimal total travel time and a "fair" distribution of travel
times (or at least an even distribution).
<P>
<B>METHODOLOGY</B>
<BR>
The data below is derived by treating both people and venues as
airport locations and using travel time as our primary instrument.
<OL>
<LI>For each responder for the current Doodle poll, assign a home
   airport based on their draft publication history.  We're missing a
   few people but basically it should be pretty complete. Since 
   these people responded before the venue is known, it's at
   least somewhat unbiased.
<LI>Compute the shortest advertised flight between each home airport
   and the locations for each venue by looking at the shortest
   advertised Kayak flights around one of the proposed interim
   dates (6/10 - 6/13), ignoring price, but excluding "Hacker fares".
   [Thanks to Martin Thomson or helping me gather these.]
</OL>
<P>
This lets us compute statistics for any venue and/or combination
of venues, based on the candidate attendee list.
<P>
The three proposed venues:
<UL>
<LI>San Francisco (SFO)
<LI>Boston (BOS)
<LI>Stockholm (ARN)
</UL>
<P>
Three hubs not too distant from the proposed venues:
<UL>
<LI>London (LHR)
<LI>Frankfurt (FRA)
<LI>New York (NYC) (treating all NYC airports as the same location)
</UL>
Also, Calgary (YYC), since the other two chair locations (BOS and SFO)
were already proposed as venues, and I didn't want Cullen to feel
left out.
<P>
<B>RESULTS</B>
<BR>
Here are the results for each of the above venues, measured in total
hours of travel (i.e., round trip).
<PRE>
Venue         Mean         Median           SD
----------------------------------------------
SFO           13.5             11         12.2
BOS           12.3             11          7.5
ARN           17.0             21         10.7
FRA           14.8             17          7.3
LHR           13.3             14          7.5
NYC           11.5             11          5.8
YYC           14.9             13         10.2
SFO/BOS/ARN   14.3             13          3.6
SFO/NYC/LHR   12.7             11.3        3.7
</PRE>
XXX/YYY/ZZZ is a three-way rotation of XXX, YYY, and ZZZ. Obviously, mean
and median are intended to be some sort of aggregate measure of travel
time. I don't have any way to measure "fairness", but SD is intended
as some metric of the variation in travel time between attendees.
<P>
The raw data and software are attached. The files are:
<P>
<A HREF="http://www.educatedguesswork.org/venues/home-airports">home-airports</A>: the list of people's home airports
<BR>
<A HREF="http://www.educatedguesswork.org/venues/durations.txt">durations.txt</A>: the list of airport-airport durations</A>
<BR>
<A HREF="http://www.educatedguesswork.org/venues/doodle.txt">doodle.txt</A>: the attendees list
<BR>
<A HREF="http://www.educatedguesswork.org/venues/pairings">pairings</A>: the software to compute travel times<BR>
<A HREF="http://www.educatedguesswork.org/venues/doodle-out.txt">doodle-out.txt</A> -- the computed travel times for each attendee
<P>
This was a quick hack, so there may be errors here, but nobody has pointed
out any yet.
<P>
<B>OBSERVATIONS</B>
<BR>
Obviously, it's hard to know what the optimal solution is without
some model for optimality, but we can still make some observations
based on this data:
<P>
<LI>If we're just concerned with minimizing total travel time, then we
would always in New York, since it has both the shortest mean travel
time and the shortest median travel time, but as I said above, this
arguably isn't fair to people who live either in Europe or California,
since they always have to travel.</LI>
<LI>Combining West Coast, East Coast, and European venues has
comparable (or at least not too much worse) mean/median values than
NYC with much lower SDs. So, arguably that kind of mix is more fair.</LI>
<LI>There's a pretty substantial difference between hub and non-hub
venues. In particular, LHR has a median travel time 7 hours less than
ARN, and the SFO/NYC/LHR combination has a median/mean travel time
about 2 hours less than SFO/BOS/ARN (primarily accounted for by the
LHR/ARN difference). [Full disclosure, I've favored Star Alliance hubs
here, but you'd probably get similar results if, for instance, you
used AMS instead of LHR.]</LI>
</OL>
<P>
Obviously, your mileage may vary based on your location and feelings
about what's fair, but based on this data, it looks to me like a
three-way rotation between West Coast, East Coast, and European hubs
offers a good compromise between minimum cost and a flat distribution
of travel times.





]]></description>
            <link>http://www.educatedguesswork.org/2012/04/selecting_ietf_travel_venues.html</link>
            <guid>http://www.educatedguesswork.org/2012/04/selecting_ietf_travel_venues.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">IETF</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Overthinking</category>
            
            
            <pubDate>Mon, 09 Apr 2012 20:46:10 -0800</pubDate>
        </item>
        
        <item>
            <title>In which a misplaced greater than sign totally screws me over</title>
            <description><![CDATA[Something annoying but also instructive happened during my build of
Chromium today. Everything started when I checked out a clean version
and went to do a build, only to be greeted with the following
exciting error:
<PRE>
/Users/ekr/dev/chromium/src/third_party/WebKit/Source/WebCore/WebCore.gyp
ar: input.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: input.a: Inappropriate file type or format
rm: /Users/ekr/dev/chromium/src/out/Debug/obj.target/\
  webkit_system_interface/geni/adjust_visibility/self/cuDbUtils.o: No such file or directory
make: *** [out/Debug/libWebKitSystemInterfaceLeopardPrivateExtern.a] Error 1
make: *** Waiting for unfinished jobs....
</PRE>
<P>
Luckily, I've run into this problem before so I know what the problem is.
The script <code>third_party/WebKit/Source/WebCore/WebCore.gyp/mac/adjust_visibility.sh</code>,
which does some library mangling, uses <code>file</code> to determine
what kind of library it's dealing with. Unfortunately, it invokes
<code>file</code> with an unqualified name, and since MacPorts
wants to put itself at the beginning of <code>PATH</code> this
means that you get the file implementation from MacPorts which
has a slightly different output than the system file. The result
is that <code>adjust_visibility.sh</code> decides that you
have a thin version of <code>libWebKit...a</code> and tries
to run <code>ar</code> on it. When <code>ar</code> fails, so does
the build.
<P>
The fix here is to move MacPorts below <code>/usr/bin</code> in your
path. I'd already done this&mdash;or so I thought&mdash; but it
turned out that MacPorts had inserted itself twice in <code>.cshrc</code>
so I had to edit <code>.cshrc</code> and then run <code>source .cshrc</code>.
I did this, and after correcting a typo things looked good and I
and went to rerun the build, only to be greeted with:
<P>
<PRE>
  CXX(target) out/Debug/obj.target/base/base/sync_socket_posix.o
In file included from base/sync_socket_posix.cc:18:
./base/file_util.h:416:56: error: no type named 'set' in namespace 'std'
                                            const std::set<gid_t>& group_gids);
                                                  ~~~~~^
./base/file_util.h:416:59: error: expected ')'
                                            const std::set<gid_t>& group_gids);
                                                          ^
./base/file_util.h:413:44: note: to match this '('
BASE_EXPORT bool VerifyPathControlledByUser(const FilePath& base,
                                           ^
2 errors generated.
make: *** [out/Debug/obj.target/base/base/sync_socket_posix.o]
</PRE>
<P>
I know what you're thinking here&mdash;or at least what I thought&mdash;someone
forgot to <code>#include &lt;set&gt;</code> and for some reason the automated
builds didn't catch it, perhaps due to some conditional compilation problem
getting triggered on Lion. But checking the source quite clearly showed
that <code>set</code> was being included. Moreover, other STL containers
like <code>vector</code> work fine. Changing from clang to GCC didn't
help here, so eventually I reverted to <code>gcc -E</code>. For those of
you who don't know, this runs the preprocessor but not the compiler and
so is really useful for diagnosing this kind of include error. Here's
the relevant portion of the result:
<PRE>
# 18 "./base/file_util.h" 2





# 1 "./set" 1
# 24 "./base/file_util.h" 2
</PRE>
<P>
It's a little hard to read, but if you know what to look for, it's telling you
that instead of including <code>set</code> from <code>/Developer</code>, where
the system include files live, the compiler is getting it from the
local directory. Now, you might ask what the heck a file named
<code>set</code> is doing in the local directory, especially as
when I looked it was totally empty. Naturally, it was
my fault, but it took a minute to realize what. Remember I said that
I had to correct a typo in <code>.cshrc</code> but now what the typo
was. Well, the problem was that I had written:
<PRE>
&gt;set OSVER=`uname -r`
</PRE>
Instead of
<PRE>
set OSVER=`uname -r`
</PRE>
<P>
Of course, when I ran this it create a file called <code>set</code> in
the current directory and since the compile flags included the
current directory in the include path, the compiler duly included
it instead of the system include file. And since the file was
empty, there wasn't any definition of <code>std::set</code>
and we got a compile error. Time wasted by this error: 11 minutes
(not including writing this up).







]]></description>
            <link>http://www.educatedguesswork.org/2012/03/in_which_a_misplaced_greater_t.html</link>
            <guid>http://www.educatedguesswork.org/2012/03/in_which_a_misplaced_greater_t.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
            
            <pubDate>Sat, 03 Mar 2012 16:06:54 -0800</pubDate>
        </item>
        
        <item>
            <title>What the heck is going on with Tesla batteries?</title>
            <description><![CDATA[<I>Disclaimer: I am not a car guy. Read the following with that
in mind.</I>
<P>
As long-time EG readers will know, I've complained in the past that my
Prius has a feeble starter/electronics battery which is easy to
run down even by <A HREF="http://www.educatedguesswork.org/2008/04/important_safet_4.html">leaving the interior lights on.</A> This despite the fact that the 
Prius has a huge battery running the hybrid system to draw on. But I
certainly didn't want <A HREF="http://theunderstatement.com/post/18030062041/its-a-brick-tesla-motors-devastating-design">this.</A> Michael DeGusta reports
that if you leave your Tesla parked for a long time (like months),
then the car bleeds enough power off of the battery to run the
auxilary vehicle systems [parasitic load]
to drain it down into deep discharge
(and hance damage to the battery) territory:
<BLOCKQUOTE>
A Tesla Roadster that is simply parked without being plugged in will
eventually become a "brick". The parasitic load from the car's
always-on subsystems continually drains the battery and if the
battery's charge is ever totally depleted, it is essentially
destroyed. Complete discharge can happen even when the car is plugged
in if it isn't receiving sufficient current to charge, which can be
caused by something as simple as using an extension cord. After
battery death, the car is completely inoperable. At least in the case
of the Tesla Roadster, it's not even possible to enable tow mode,
meaning the wheels will not turn and the vehicle cannot be pushed nor
transported to a repair facility by traditional means.
<P>
The amount of time it takes an unplugged Tesla to die varies. Tesla's
Roadster Owners Manual [Full Zipped PDF] states that the battery
should take approximately 11 weeks of inactivity to completely
discharge [Page 5-2, Column 3: PDF]. However, that is from a full 100%
charge. If the car has been driven first, say to be parked at an
airport for a long trip, that time can be substantially reduced. If
the car is driven to nearly its maximum range and then left unplugged,
it could potentially "brick" in about one week.1 Many other scenarios
are possible: for example, the car becomes unplugged by accident, or
is unwittingly plugged into an extension cord that is defective or too
long.
<P>
When a Tesla battery does reach total discharge, it cannot be
recovered and must be entirely replaced. Unlike a normal car battery,
the best-case replacement cost of the Tesla battery is currently at
least $32,000, not including labor and taxes that can add thousands
more to the cost.
</BLOCKQUOTE>
<P>
There's been a lot of controversy about this report
(see, for instance, this <A HREF="http://www.itworld.com/it-managementstrategy/252452/false-scare-tesla">defense</A>), but Tesla's <A HREF="http://jalopnik.com/5887265/tesla-motors-devastating-design-problem">response</A> seems to by consistent
with DeGusta's basic argument, as does the letter 
that Jalopnik reproduces above:
<BR>
<BLOCKQUOTE>
All automobiles require some level of owner care. For example,
combustion vehicles require regular oil changes or the engine will be
destroyed. Electric vehicles should be plugged in and charging when
not in use for maximum performance. All batteries are subject to
damage if the charge is kept at zero for long periods of
time. However, Tesla avoids this problem in virtually all instances
with numerous counter-measures. Tesla batteries can remain unplugged
for weeks (even months), without reaching zero state of charge. Owners
of Roadster 2.0 and all subsequent Tesla products can request that
their vehicle alert Tesla if SOC falls to a low level. All Tesla
vehicles emit various visual and audible warnings if the battery pack
falls below 5 percent SOC. Tesla provides extensive maintenance
recommendations as part of the customer experience.
</BLOCKQUOTE>
<P>
At present, then, the agreed upon facts seem to be that:
<OL>
<LI>If you leave the Tesla's batteries at zero charge, battery
damage occurs.
<LI>If you leave a Tesla unplugged for long enough, even
with a charged battery, parasitic load from the vehicle
systems will eventually consume the battery's charge,
leaving you in state (1) above. [Note that this appears
to exceed the Lithium-Ion self-discharge rate, so it
likely is parasitic load.]
</OL>
<P>
The controversy really seems to be about who's fault
this is, namely whether the customer should have known better,
whether Tesla notified them correctly, etc. I don't have
a Tesla so I don't care about that. I'm much more interested
in the engineering question of what's going on and what,
if anything, can be done about it.
<P>
The parasitic load thing isn't totally unfamiliar territory, of
course. Any modern vehicle has electronics and those need
power, which they get from the battery. Some do a better
job than others.
My BMW R1200GS motorcycle, for instance, has this 
problem and the manual explicitly tells you to connect it to
a trickle charger (an expensive BMW model, of course, though
you can use a standard one if you're willing to do a tiny
bit of work) if you're not going to drive it for a while,
and I duly plug it into the wall whenever I get home.
If you don't do that, however, the worst you're going to be
out is new lead-acid battery, which depending on what
vehicle you have, leaves you out something like 
$50-$200, not $40,000.
<P>
However, the level of load we're talking about here
seems awful high. Remember that we're talking about a
battery capable of powering your car for 200 miles or
so on a single charge (53 kWh). In order to deplete
the battery in 11 weeks (~2000 hrs) you would need 
continuous battery consumption of around 30 W.
For comparison, a Macbook Air has a 50Wh battery
and gets something like 5 hours on a charge, so it's
like the Tesla is running 5 Airs at once 24x7.
It's natural to ask where all that power is
going, since you don't need anywhere near that
much to keep a vehicle on standby. One likely source seems
to be the battery cooling system, of which Wikipedia
<A HREF="http://en.wikipedia.org/wiki/Tesla_roadster#Battery_system">says</A>
"Coolant is pumped continuously through the ESS both when the car is running and when the car is turned off if the pack retains more than a 90% charge. The coolant pump draws 146 watts."
[Original reference and long discussion <A HREF="http://web.archive.org/web/20090608103323/http://teslafounders.wordpress.com/2008/10/12/wasting-energy-like-two-really-nice-refrigerators/">here</A>.
Note that this post is due to Martin Eberhard, one of the Tesla
Founders but apparently no longer with the company at the time he wrote it. Thanks
Wayback Machine for preserving this!]. 
<P>
Obviously, if you have a load this high, then you're going
to deplete the battery. The question then becomes whether
there is some way of avoiding permanent battery damage as
the depletion gets to dangerous levels. The natural 
thing to do is install some sort of cutoff that turns
off all power drain once you get close to that level.
This may end up blowing away a bunch of the car's
configuration (though really, it's not that hard to
store that stuff in flash memory, even though 
historically manufacturers have tended not to), but
surely it's cheaper to reboot your car than replace
the entire battery pack. However, if the power is
going to the cooling system and the cooling system
is doing something important, like keeping the
battery from being damaged by excessive heat, then
this may not help. 
<P>
Oh, one more thing. DeGusta claims that Tesla has the capability
to remotely monitor the battery and locate the car, and has
sent people out to fix it:
<P>
<BLOCKQUOTE>
In at least one case, Tesla went even further. The Tesla service
manager admitted that, unable to contact an owner by phone, Tesla
remotely activated a dying vehicle's GPS to determine its location and
then dispatched Tesla staff to go there. It is not clear if Tesla had
obtained this owner's consent to allow this tracking5, or if the owner
is even aware that his vehicle had been tracked. Further, the service
manager acknowledged that this use of tracking was not something they
generally tell customers about.
</BLOCKQUOTE>
<P>
If true, that would be... interesting.





]]></description>
            <link>http://www.educatedguesswork.org/2012/02/what_the_heck_is_going_on_with.html</link>
            <guid>http://www.educatedguesswork.org/2012/02/what_the_heck_is_going_on_with.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Misc</category>
            
            
            <pubDate>Sat, 25 Feb 2012 07:17:17 -0800</pubDate>
        </item>
        
        <item>
            <title>Protecting your encrypted data in the face of coercion</title>
            <description><![CDATA[Cryptography is great, but it's not so great if you get arrested and
<A
HREF="http://www.zdnet.com/blog/identity/judge-says-defendant-must-decrypt-files-fifth-amendment-not-at-issue/175?tag=mantle_skin;content">forced
to give up your cryptographic keys.</A> Obviously, you could claim that you've forgotten it
(remember that you need a really long key to thwart exhaustive
search attacks, so this isn't entirely implausible.) However, since
you <I>also</I> need to regularly be able to decrypt your data,
this means you need to be able remember your password, so it's
not entirely plausible either, which means that you might end up
sitting in jail for a long time due to a contempt citation.
This general problem has been floating around the cryptographic
community for a long term, where it's usually referred to as
"rubber hose cryptanalysis", with the idea being that the attacker
will torture you (i.e., beat you with a rubber hose) until you
give up the key. This <A HREF="http://xkcd.com/538/">xkcd</A> comic
sums up the problem. Being technical people, there's been a lot
of work on technical solutions, none of which are really
fantastic. (see the Wikipedia 
<A HREF="http://en.wikipedia.org/wiki/Deniable_encryption">deniable encryption</A>
page for one summary).
<P>
<I>Threat model</I>
<BR>
As usual, it's important to think about the threat model, which in 
this case is more complicated than it initially seems. We assume
that you have some encrypted data and that the attacker has
a copy of that data and of the encryption software you have
used. All they lack is the key. The attacker insists you
hand over the key and has some mechanism for punishing you
if you don't comply. Moreover, we need to assume that the attacker
isn't a sadist, so as long as there's no point in punishing you
further they won't. It's this last point that is the key to
all the technical approaches I know of, namely convincing the
attacker that they are unlikely to learn anything more by
punishing you further, so they might as well stop. Of course,
how true that assumption is probably depends on the precise
nature of the proceedings and how much it costs the attacker
to keep inflicting punishment on you. If you're being waterboarded
in Guantanamo, the cost is probably pretty low, so you probably
need to be pretty convincing.
<P>
<I>Technical Approaches</I>
<BR>
Roughly speaking, there seem to be two strategies for dealing with 
the threat of being legally obliged to give up your cryptographic
keys:
<UL>
<LI>Apparent Compliance/Deniable Encryption.
<LI>Verifiable Destruction
</UL>
<P>
<I>Apparent Compliance/Deniable Encryption</I>
<BR>
The idea behind an apparent compliance strategy is that you
pretend to give up your encryption key, but instead you give
up another key that decrypts the message to an innocuous
ciphertext. More generally, you want a cryptographic
scheme which produces a given ciphertext <I>C</I> which maps onto a series of
plaintexts <I>M_1, M_2, ... M_n</I> via a set of keys 
<I>K_1, K_2, ... K_n</I>. Assume for the moment that
only <I>M_n</I> is and <I>M_1, ... M_n-1</I> are either fake
or real (but convincing) non-sensitive data. So, when you
are captured, you reveal <I>K_1</I> and claim that you've
decrypted the data. If really pressed, you reveal
<I>K_2</I> and so on.
<P>
The reason that this is supposed to work is that the
attacker is assumed to not know <I>n</I>. However,
since they have a copy of your software, they presumably
know that it's multilevel capable, so they know that
there may be more than one key. They just don't know
if you've given them the last key. All the difficult
cryptographic problems are about avoiding revealing
<I>n</I>. There are fancy cryptographic ways to do this
(the original paper on this is by
<A HREF="http://eprint.iacr.org/1996/002">Canetti,
Dwork, Naor, and Ostrovsky</A>), but
consider one simple construction. Take each message
<I>M_i</I> and encrypt it with <I>K_i</I> to form
<I>C_i</I> and then
concatenate all the results to form <I>C</I>. The
decryption procedure given a single key is to decrypt
each of the sub-ciphertexts in turn and discard any
which don't decrypt correctly (assume there is some
simple integrity check.) Obviously, if you have
a scheme this trivial, then it's easy for an attacker
to see how many keys there are just by insisting you
provide keys for all the data, so you also pad <I>C</I>
with a bunch of random-appearing data which you really
can't decrypt at all, which in theory creates plausible
deniability. This is approximately what
<A HREF="http://www.truecrypt.org/">TrueCrypt</A>
does):
<P>
<BLOCKQUOTE>
Until decrypted, a TrueCrypt partition/device appears to consist of
nothing more than random data (it does not contain any kind of
"signature"). Therefore, it should be impossible to prove that a
partition or a device is a TrueCrypt volume or that it has been
encrypted (provided that the security requirements and precautions
listed in the chapter Security Requirements and Precautions are
followed). A possible plausible explanation for the existence of a
partition/device containing solely random data is that you have wiped
(securely erased) the content of the partition/device using one of the
tools that erase data by overwriting it with random data (in fact,
TrueCrypt can be used to securely erase a partition/device too, by
creating an empty encrypted partition/device-hosted volume within it).
</BLOCKQUOTE>
<P>
How well this works goes back to your threat model. The attacker
knows there is <I>some</I> chance that you haven't revealed
all the keys and maybe if they punish you further you will give them
up. So, whether you continue to get punished depends on their
cost/benefit calculations, which may be fairly unfavorable to
you. The problem is worse yet if the attacker has any way
of determining what correct data looks like. For instance,
in one of the early US court cases on this,
<A HREF="http://en.wikipedia.org/wiki/In_re_Boucher">In re Boucher</A>,
customs agents
had seen (or at least claimed to had seen) child pornography
on the defendant's hard drive and so would presumably have known
a valid decryption from an invalid one. Basically, in any setting
where the attacker has a good idea of what they are looking for
and/or can check the correctness of what you give them, a deniable
encryption scheme doesn't work very well, since the
whole scheme relies on uncertainty about when you have actually
given up the last key.
<P>
<I>Verifiable Destruction</I>
<BR>
An alternative approach that doesn't rely on this kind of ambiguity is
to be genuinely unable to encrypt the data and to have some way
of demonstrating this to the attacker. Hopefully, a rational
attacker won't continue to punish you once you've demonstrated that you
cannot comply. It's demonstrating part that's the real problem here.
Kahn and Schelling famously
sum up the problem of how to win at "chicken":
<P>
<BLOCKQUOTE>
Some teenagers utilize interesting tactics in playing "chicken."
The "skillful" player may get into the car quite drunk, throwing
whiskey bottles out the window to make it clear to everybody
just how drunk he is. He wears dark glasses so that it is 
obvious that he cannot see much, if anything. As soon as the
car reaches high speed, he takes the steering wheel and throws
it out the window. If his opponent is watching, he has won.
If his opponent is not watching, he has a problem;
</BLOCKQUOTE>
<P>
Of course, as Allan Schiffman once pointed out to me, the really
skillful player keeps a spare steering wheel in his car and throws
that out the window. And our problem is similar: demonstrating that
you have thrown out the data and/or key and you don't have a spare
lying around somewhere.
<P>
The technical problem then becomes constructing a system that
actually works. There are a huge variety of potential technical
options here, but at a high-level, it seems like solutions 
fall into two broad classes, active and passive. In an active
scheme, you actively destroy the key and/or the data.
For instance, you could have the key written on a piece of paper
which you eat, or there is a thermite charge on your computer
which melts it to slag when you press a button. In a passive
system, by contrast, no explicit action is required by you,
but you have some sort of deadman switch which causes the
key/data to be destroyed if you're captured. So, you might 
store the data in a system like <A HREF="http://vanish.cs.washington.edu/">Vanish</A> (although there are real questions about the security of Vanish per se),
or you have the key stored offsite with some provider who promises
to delete the key if you are arrested or if you don't check in every
so often.
<P>
I'm skeptical of how well active schemes can be made to work:
once it becomes widely known how any given commercial scheme works,
attackers will take steps to circumvent it. For instance,
if there is some button you press to destroy your data,
they might taser you and ask questions later to avoid you
pressing it. Maybe someone can convince me otherwise, but this
leaves us mostly with passive schemes (or semi-passive schemes
as discussed in a bit.) Consider the following strawman scheme:
<P>
<BLOCKQUOTE>
Your data is encrypted in the usual way, but part of the
encryption key is stored offsite in some location inaccessible
to the attacker (potentially outside their legal jurisdiction
if we're talking about a nation-state type attacker).
The encryption key is stored in a hardware security module,
and if the key storage provider doesn't hear from you 
(and you have to prove possession of some key) every
week (or two weeks or whatever), they zeroize the HSM, thus
destroying your key. It's obviously easy to build a system
like this where the encryption software automatically contacts
the key storage provider, proves possession, and thus resets
their deadman timer, so as long as you use your files every
week or so, you're fine.
</BLOCKQUOTE>
<P>
So, if you're captured, you just need to hold out until the
deadman timer expires and then the data really isn't recoverable
by you or anyone else. Of course, "not recoverable" isn't the
same as "provably not recoverable", since you could have kept
a backup copy of the keys somewhere&mdash;though the software could
be designed in a way that this was inconvenient, thus giving
some credibility to the argument that you did not. Moreover,
this design is premised on the assumption that there is actually
somewhere that you could store your secret data that the attacker
couldn't get it from. This may be reasonable if the attacker
is the local police, but perhaps less so if the attacker
is the US government. And of course any deadman system is
hugely brittle: if you forget your key or just don't refresh
for a while, your data is <I>gone</I>, which might be somewhat
inconvenient.
<P>
One thing that people often suggest is to have some sort of
limited-try scheme. The idea here is that the encryption
system automatically erases the data (and/or a master key)
if the wrong password/key is entered enough times. So, if you
can just convincingly lie <I>N</I> times and get the attacker
to try those keys, then the data is gone. Alternately, you
could have a "coercion" key which deletes all the data.
It's clear that you can't build anything like this in a software-only
system: the attacker will just image the underlying encrypted
data and write their own decryption software which doesn't
have the destructive feature. You can, however, build such
a system using hardware security modules (assume for now that
the HSM can't be broken directly.)
This is sort of a semi-passive scheme in that you are intentionally
destroying the data, but the destruction is produced by the
attacker keying in the alleged encryption key.
<P>
The big drawback with any verifiable destruction system is that
it leaves evidence that you could have complied but didn't;
in fact, that's the whole point of the system. But this means
that the attacker's countermove is to credibly commit to punishing
you for noncompliance after the fact. I don't think this question
has ever been faced for crypto, but it has been faced in other
evidence-gathering contexts. Consider, for instance, the case
of driving under the influence: California requires you to
take a breathalyzer or blood test as a condition of driving
<A HREF="http://www.dmv.ca.gov/pubs/vctop/d11_5/vc23612.htm">[*]</A>,
and refusal carries penalties comparable to those for being
convicted of DUI. One could imagine a more general legal regime
in which actively or passively allowing your encrypted data
to be destroyed once you have been arrested was itself illegal,
and with a penalty that was large enough that it would almost
never be worth refusing to comply
(obviously the situation would be different in extra-legal 
settings, but the general idea seems transferable.) I'll defer
to any lawyers reading this about how practical such a law
would actually be.
<P>
<I>Bottom Line</I>
<BR>
Obviously, neither of these classes of solution seems entirely 
satisfactory from the perspective of someone who is trying to keep
their data secret. On the other hand, it's not clear that this is
really a problem that admits of a good technical solution.
]]></description>
            <link>http://www.educatedguesswork.org/2012/02/protecting_your_encrypted_data.html</link>
            <guid>http://www.educatedguesswork.org/2012/02/protecting_your_encrypted_data.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">COMSEC</category>
            
            
            <pubDate>Sat, 11 Feb 2012 09:28:34 -0800</pubDate>
        </item>
        
        <item>
            <title>GIT Y U NO...</title>
            <description><![CDATA[You have to have used <A HREF="http://www.git-scm.com/">git</A> to
really understand this one, but...
<PRE>
[16] git checkout f4a56
Note: checking out 'f4a56'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at f4a560b... Foo
</PRE>
As you may have gathered from this long warning,
you most likely don't want to be in a detached
head setting, you probably just meant to create a branch or wanted
to rollback a commit but typed the wrong thing. Which is why
there are <A HREf="http://alblue.bandlem.com/2011/08/git-tip-of-week-detached-heads.html">lots</A>
<A HREF="http://eclipsesource.com/blogs/2011/05/29/life-lesson-be-mindful-of-a-detached-head/">of</A>
<A HREF="http://softwaregravy.wordpress.com/2010/11/05/detached-head-in-git/">pages</A> about
what this means and how to get yourself out. My contribution to this literature can be
found below the fold.
<P>





]]></description>
            <link>http://www.educatedguesswork.org/2012/01/git_y_u_no.html</link>
            <guid>http://www.educatedguesswork.org/2012/01/git_y_u_no.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
            
            <pubDate>Mon, 23 Jan 2012 19:01:34 -0800</pubDate>
        </item>
        
        <item>
            <title>What is this all this crap in my wallet?</title>
            <description><![CDATA[On my way to <A HREF="http://www.redrockcoffee.org/">Red Rock</A>
today to do some work, I looked in my wallet to see if I had enough
money to afford my hot chocolate (paying for a $3.50 drink with a 
credit card is a pretty lame move). Here's what I found:
<P>
<A HREF="http://educatedguesswork.org/blog-images/money.jpg">
<IMG SRC="http://educatedguesswork.org/blog-images/money.jpg" WIDTH="400">
</A>
<P>
After some sorting, it comes out as follows...
<TABLE CELLPADDING="10" BORDER="1">
<TR>
  <TD><B>Currency</B></TD>
  <TD><B>Count</B></TD>
  <TD><B>Value (nominal)</B></TD>
  <TD><B>Value (USD)</B></TD>
</TR>

<TR>
  <TD>USD</TD>
  <TD>3</TD>
  <TD>3</TD>
  <TD>3</TD>
</TR>

<TR>
  <TD>CAD</TD>
  <TD>7</TD>
  <TD>100</TD>
  <TD>98.55</TD>
</TR>

<TR>
  <TD>CZK</TD>
  <TD>2</TD>
  <TD>2100</TD>
  <TD>106.40</TD>
</TR>

<TR>
  <TD>GBP</TD>
  <TD>1</TD>
  <TD>10</TD>
  <TD>15.55</TD>
</TR>

<TR>
  <TD>EUR</TD>
  <TD>1</TD>
  <TD>20</TD>
  <TD>25.79</TD>
</TR>

<TR>
  <TD>INR</TD>
  <TD>1</TD>
  <TD>100</TD>
  <TD>1.99</TD>
</TR>

<TR>
  <TD>RUB</TD>
  <TD>9</TD>
  <TD>1570</TD>
  <TD>49.97</TD>
</TR>

<TR>
  <TD>Total</TD>
  <TD>24</TD>
  <TD>-</TD>
  <TD>301.25</TD>
</TR>
</TABLE>
<P>
In other words, out of 24 total pieces of paper valued at over $300,
I had three spendable pieces of paper valued at $3. Oh, and a couple
of United beverage vouchers which expire in 9 days.
I ended up going to the ATM.




]]></description>
            <link>http://www.educatedguesswork.org/2012/01/what_is_this_all_this_crap_in.html</link>
            <guid>http://www.educatedguesswork.org/2012/01/what_is_this_all_this_crap_in.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Misc</category>
            
            
            <pubDate>Sun, 22 Jan 2012 18:35:06 -0800</pubDate>
        </item>
        
        <item>
            <title>Does DNSSEC really interfere with SOPA/PIPA?</title>
            <description><![CDATA[You've of course heard by now that much of the Internet community
thinks that <A
HREF="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act">SOPA</A>
and <A HREF="http://en.wikipedia.org/wiki/PROTECT_IP_Act">PIPA</A> are bad, which is why on January 16, Wikipedia <A
HREF="http://wikimediafoundation.org/wiki/English_Wikipedia_anti-SOPA_blackout">shut
itself down</A>, Google had a black bar over their logo, etc. This
opinion is shared by much of the Internet technical
community, and in particular much has been made of the argument made
by Crocker et al. that
DNSSEC and PIPA are <A
HREF="http://www.circleid.com/pdf/PROTECT-IP-Technical-Whitepaper-Final.pdf">incompatible</A>. A number of the authors of the statement linked above
are friends of mine, and I agree with much of what they write in
it, but I don't find this particular line of argument that
convincing.
<P>
<I>Background</I>
<BR>
As background, DNS has two kinds of resolvers:
<UL>
<LI>Authoritative resolvers which host the records for a given
domain. 
<LI>Recursive resolvers which are used by end-users for
name mapping. Typically they also serve as a cache.
</UL>
<P>
A typical configuration is for end-user machines to use 
<A HREF="http://en.wikipedia.org/wiki/Dhcp">DHCP</A> to
get their network configuration data, including IP address
and the DNS recursive resolvers to use. Whenever your
machine joins a new network, it gets whatever resolver that
network is configured for, which is frequently whatever
resolver is provided by your ISP. One of the requirements
of some iterations of PIPA and SOPA has been that recursive
resolvers would have to block resolution of domains
designated as bad. Here's the relevant text from <A HREF="http://www.govtrack.us/congress/billtext.xpd?bill=s112-968">PIPA</A>:
<BLOCKQUOTE>
(i) IN GENERAL- An operator of a nonauthoritative domain name system server shall take the least burdensome technically feasible and reasonable measures designed to prevent the domain name described in the order from resolving to that domain name's Internet protocol address, except that--
<BLOCKQUOTE>
(I) such operator shall not be required--
<BLOCKQUOTE>
(aa) other than as directed under this subparagraph, to modify its network, software, systems, or facilities;
<BR>
(bb) to take any measures with respect to domain name lookups not performed by its own domain name server or domain name system servers located outside the United States; or
<BR>
(cc) to continue to prevent access to a domain name to which access has been effectively disable by other means; and
...
</BLOCKQUOTE>
</BLOCKQUOTE>
(ii) TEXT OF NOTICE.-The Attorney General shall prescribe the text of the notice displayed to users or customers of an operator taking an action pursuant to this subparagraph. Such text shall specify that the action is being taken pursuant to a court order obtained by the Attorney General.
</BLOCKQUOTE>
<P>
This text has been widely interpreted as requiring operators of recursive
resolvers to do one of two things:
<UL>
<LI>Simply cause the name resolution operation to fail.
<LI>Redirect the name resolution to the notice specified in (ii).
</UL>
<P>
The question then becomes how one might implement these.
<P>
<I>Technical Implementation Mechanisms</I>
<BR>
Obviously if you can redirect the name, you can cause the
resolution to fail by returning a bogus address, so let's look
at the redirection case first. Crocker et al. argue that DNSSEC is designed
to secure DNS data end-to-end to the user's computer. Thus, any
element in the middle which modifies the DNS records to redirect
traffic to a specific location will break the signature.
Technically, this is absolutely correct. However, it is mitigated
by two considerations.
<P>
First, the vast majority of client software doesn't do DNSSEC
resolution. Instead, if you're resolving some DNSSEC-signed
name and the signature is being validated at all it's most likely
being validated by some DNSSEC-aware recursive resolver,
like the ones Comcast has
<A HREF="http://www.dnssec.comcast.net/">recently deployed</A>.
Such a resolver can easily modify whatever results it is
returning and that change will be undetectable to the vast
majority of client software (i.e., to any non-DNSSEC software).<small><sup>1</sup></small>. So, at present, a rewriting requirement looks
pretty plausible. 
<P>
Crocker et al. would no doubt tell you that this is a transitional
stage and that eventually we'll have end-to-end DNSSEC, so
it's a mistake to legislate new requirements
that are incompatible with that. If a lot of
endpoints start doing DNSSEC validation, then ISPs can't
rewrite undetectably. They can still make names fail to
resolve, though, via a variety of mechanisms. About this,
Crocker et al. write:
<P>
<BLOCKQUOTE>
Even DNS filtering that did not contemplate redirection would pose
security challenges. The only possible DNSSEC-compliant response to a
query for a domain that has been ordered to be filtered is for the
lookup to fail. It cannot provide a false response pointing to another
resource or indicate that the domain does not exist. From an
operational standpoint, a resolution failure from a nameserver subject
to a court order and from a hacked nameserver would be
indistinguishable. Users running secure applications have a need to
distinguish between policy-based failures and failures caused, for
example, by the presence of an attack or a hostile network, or else
downgrade attacks would likely be prolific.[12]
<P>
..
<P>
12. If two or more levels of security exist in a system, an attacker
will have the ability to force a "downgrade" move from a more secure
system function or capability to a less secure function by making it
appear as though some party in the transaction doesn't support the
higher level of security. Forcing failure of DNSSEC requests is one
way to effect this exploit, if the attacked system will then accept
forged insecure DNS responses. To prevent downgrade attempts, systems
must be able to distinguish between legitimate failure and malicious
failure.
</BLOCKQUOTE>
<P>
I sort of agree with the first part of this, but I don't really agree
with the footnote. Much of the problem is that it's generally easy
for network-based attackers to generate situations that simulate
legitimate errors and/or misconfiguration. Cryptographic authentication
actually makes this worse, since there are so many ways to 
screw up cryptographic protocols. 
Consider the case where the attacker overwrites
the response with a random signature. Naturally the signature
is unverifiable, in which case the resolver's only response is
to reject the records, as prescribed by the DNSSEC standards.
At this point you have effectively blocked resolution of the
name. It's true that the resolver knows that something is wrong
(though it can't distinguish between attack and misconfiguration),
but so what? DNSSEC isn't designed to allow name resolution in the
face of DoS attack by in-band active attackers. Recursive
resolvers aren't precisely in-band, of course, but
the ISP as a whole is in-band, which
is one reason people have talked about ISP-level 
DNS filtering for all traffic, not just filtering at recursive
resolvers.
<P>
Note that I'm not trying to say here that I think that SOPA and PIPA
are good ideas, or that there aren't plenty of techniques for people
to use to evade them. I just don't think that it's really the case
that you can't simultaneously have DNSSEC and network-based DNS
filtering.
<P>
&nbsp;
<P>
<small><sup>1.</sup> Technical note: As I understand it, if
you're a client resolver who wants to validate signatures
itself needs to send the DO flag (to get the recursive
resolver to return the DNSSEC records) and the CD flag
(to suppress validation by the recursive resolver).
This means that the recursive resolver can tell when its
safe to rewrite the response without being detected.
If DO isn't set, then the client won't be checking signatures.
If CD isn't set, then the recursive resolver can claim
that the name was unvalidatable and generate whatever error
it would have generated in that case (Comcast's deployment
seems to generate SERVFAIL for at least some types of misconfiguration.)
</small>











]]></description>
            <link>http://www.educatedguesswork.org/2012/01/does_dnssec_really_interfere_w.html</link>
            <guid>http://www.educatedguesswork.org/2012/01/does_dnssec_really_interfere_w.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">COMSEC</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">DNS</category>
            
            
            <pubDate>Sat, 21 Jan 2012 22:53:22 -0800</pubDate>
        </item>
        
        <item>
            <title>The Supremes on the failure of broadcast content controls</title>
            <description><![CDATA[In Dahlia Lithwick's <A HREF="http://www.slate.com/articles/news_and_politics/supreme_court_dispatches/2012/01/supreme_court_and_fcc_s_fleeting_expletives_policy_what_exactly_counts_as_indecent_on_tv_.single.html#pagebreak_anchor_2">report</A> on FCC v. Fox (about the FCC's TV indecency
policy), she writes:
<BLOCKQUOTE>
Justice Stephen Breyer raises a question about why the ABC ass case is
being heard together with the fleeting-expletives case. Justice
Ginsburg asks whether Hair could be broadcast on network television
(Verrilli: "Serious questions") and then whether the opera Metropolis
could be broadcast (Verrilli: "Context-based approach"). Then Justice
Anthony Kennedy interrupts the parade of naked horrible to clarify:
"What you're saying is that there is a public value in having a
particular segment of the media with different standards than other
segments." Verrilli replies that, yes, this is about preserving "a
safe haven where if parents want to put their kids down in front of
the television at 8:00 p.m. they're not going to have to worry about
whether the kids are going to get bombarded with curse words or
nudity."
<P>
Because if you want that, you can find it in the back seat of my car,
at rush hour when we're late for Kung Fu. Just ask my children.
<P>
Kennedy replies that the V-chip is available and that "you ask your
15-year-old, or your 10-year-old, how to turn off the chip. They're
the only ones that know how to do it."
</BLOCKQUOTE>
<P>
I'm not saying this isn't true--though I rather suspect it's
more likely that parents don't know how to turn <I>on</I> the
V-chip [explanation <A HREF="http://en.wikipedia.org/wiki/V-chip">here</A>,
in case you don't know] than that they don't know how to turn it
off. However, I think discussion illustrates pretty clearly
the confusion over the problem that people are trying to solve.
(The terminology "threat model" as applied to children probably
sounds funny to non-parents.)
In any case, there are two different things one might be trying
to accomplish with respect to potentially objectionable content:
<UL>
<LI>Prevent children from inadvertantly accessing objectionable content.
<LI>Prevent children from intentionally accessing objectionable content.
</UL>
<P>
If your objective is the former, then the V-chip works fine (except
for the horrible UI); you just configure your device to suppress
objectionable content. The sort of content-based regulation the FCC is engaging 
in works as well, assuming you don't let your kids watch TV except
in the "safe" period, but it's a very inefficient mechanism
compared to the V-chip, being both overbroad (affecting everyone,
including people who don't have children) and not very effective,
as it applies only to broadcast TV.
<P>
On the other hand, if your model is to prevent children from intentionally
accessing objectionable content, and you further expect them to attempt
to bypass content controls, then restrictions on broadcast TV don't
do very much given that (a) if you have cable your kids can just
tune to unrestricted channels and (b) large number of other sources of such content
exist on the Internet. Blocking the tiny sliver of such content you still
get through broadcast TV mostly looks silly and anachronistic. Though
I guess it's less silly if you get hit with a huge fine for breaching
the rather unclear rules.
]]></description>
            <link>http://www.educatedguesswork.org/2012/01/the_supremes_on_the_failure_of.html</link>
            <guid>http://www.educatedguesswork.org/2012/01/the_supremes_on_the_failure_of.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Misc</category>
            
            
            <pubDate>Wed, 11 Jan 2012 08:10:59 -0800</pubDate>
        </item>
        
        <item>
            <title>Web form complaints</title>
            <description><![CDATA[Spent some of today getting my 2011 charitable
donations out of the way, so I've been experiencing a lot of different
Web forms. Remember, these people want my money, so it would be nice
if they didn't make the experience so irritating. On that basis,
here are some things not to do:
<UL>
<LI>Refuse to accept spaces or dashes in my credit card number,
phone number, social security number, etc. Don't force
me into your stupid format; parse whatever I send you.
Here, let me help. The following JS code strips out spaces and dashes.
<code>input = input.replace(/[ \-]/g, "");</code>. For an appropriately huge
consulting fee I'll show you how to replace periods and pluses, too.
<LI>Force me to tell you what kind of credit card I have. This
information is encoded in the leading digits of the credit card
number. This <A HREF="http://en.wikipedia.org/wiki/Bank_card_number">table</A>
may help. I know that things change, but seriously, you could
at least try to guess.
<LI>Force me to select "USA" out of the end of an incredibly long
drop-down list of countries. It's true that you can generally
determine someone's country by looking at their IP address, but
I can certainly understand not wanting to bother with that, but
if most of your customers are American, it's silly to force them
to scroll all the way to the end out of a misguided notion of 
national equity. Make my life easy and put the USA as the first item
in the list, people. 
<LI>Make me enter my state and my zip code. In nearly all cases,
the zip code <A HREF="http://en.wikipedia.org/wiki/ZIP_code#Primary_State_Prefixes">encodes the state</A>.
</UL>
<P>
Also, not a Web form issue, but I also wish there were some way to
tell these organizations not to ask me for donations during the year.
I give once a year, at the end of the year. It's just a matter of
convenience. Sending me a bunch of physical letters asking for money
just wastes your fund raising dollars and my time.
]]></description>
            <link>http://www.educatedguesswork.org/2011/12/web_form_complaints.html</link>
            <guid>http://www.educatedguesswork.org/2011/12/web_form_complaints.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
            
            <pubDate>Sat, 31 Dec 2011 17:41:36 -0800</pubDate>
        </item>
        
        <item>
            <title>Somelliers for beer... wait, what?</title>
            <description><![CDATA[Mark Garrison has a rather odd <A HREF="http://www.slate.com/articles/life/drink/2011/12/beer_sommeliers_why_beer_deserves_the_same_kind_of_expertise_as_wine_.html">article</A> in
Slate arguing that we need expert advice to order beer in
restaurants:
<BLOCKQUOTE>
It's a busy night at the D.C. restaurant Birch & Barley, as well as
its casual upstairs sister joint, ChurchKey. Greg Engert is guiding me
through his beverage list with all the knowledge, talent, and grace
one would expect from an award-winning sommelier. With a couple crisp
queries, he learned enough to make some intriguing recommendations. He
didn't flaunt his knowledge about food and drink, but when I had
questions, he gave precise answers about the flavor, aroma, producer,
pairing potential, and even the history of the available
beverages. Fortunately, there was no attempt at upselling, the odious
sin far too many sommeliers commit, a big reason why many diners are
suspicious of the entire profession.
<P>
...
<P>
There may be agreement in the industry that great beer deserves
top-notch service, but there's not yet a consensus on what that
means. In fact, there's not even agreement on what to call a
well-trained beer server. Engert's job title is beer director, but he
doesn't mind being called a beer sommelier. (He has put some thought
into this.) Some in the beer community find this term problematic,
since "sommelier" is tied to the wine world and may imply a
professional certification that doesn't exist.
<P>
...
<P>
The program's website states the claim that wine sommeliers might have
known enough to choose a good beer for you a few decades ago, but now
"the world of beer is just as diverse and complicated as wine. As a
result, developing true expertise in beer takes years of focused study
and requires constant attention to stay on top of new brands and
special beers." So Daniels set out to build a testing and
certification program to create a standard level of knowledge and
titles that would signify superior beer knowledge to consumers,
similar to the way a Court of Master Sommeliers credential does for
wine.
</BLOCKQUOTE>
<P>
Look, I love beer, don't like wine, and am well aware of the lousy
beer service one typically gets at restaurants, so I'm generally in
favor of anything that improves beer quality. But the main the problem
isn't that there's nobody at the restaurant who understands beer. It's
that the beer selection at restaurants sucks. To take one recent
example, I ate at the Los Altos Grill the other night: they had a page
of wines and three beers on tap. This isn't uncommon; in fact it's not
uncommon for restaurants to have solid wine lists but only bottled
beer, and only a few varieties of bottles at that. The question I have
for waiters isn't "what beer do you recommend", but rather "is Peroni
really the best beer you have?"
<P>
In large part, the culprit here is customer demand: people who
eat at high-end restaurants tend to prefer wine to beer, so 
those restaurants naturally have lousy beer selections. But I 
suspect that the chemistry of beer has a lot to do with it
as well. Wine can last years in the bottle&mdash;and many
wines are better when aged&mdash;but bottled beer has
a shelf life measured in months, with draft beer going bad in
<A HREF="http://www.kegworld.com/draughtbeerissues.htm">in a few weeks</A>.
So, unlike wine, you can't afford to stock any beer that people
don't order fairly frequently, since there's too high a chance
it will go bad before someone orders it. I suspect that
this is why most restaurants keep such a small beer selection.
(Anyone with contacts in the restaurant business should feel
free to chime in here.)
<P>
The major exception here is restaurants that specialize in beer
(Garrison's example of Birch & Barley advertises
itself as "a completely unique food and beer experience celebrating a
full spectrum of styles, traditions, regions and flavors"). If
you're that kind of restaurant you probably get enough
volume to keep a large inventory without things getting too stale&mdash;though
I do wonder what the oldest bottle on their shelves tastes like.








]]></description>
            <link>http://www.educatedguesswork.org/2011/12/somelliers_for_beer_wait_what.html</link>
            <guid>http://www.educatedguesswork.org/2011/12/somelliers_for_beer_wait_what.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Food</category>
            
            
            <pubDate>Thu, 22 Dec 2011 21:24:50 -0800</pubDate>
        </item>
        
        <item>
            <title>Do we need DNS confidentiality?</title>
            <description><![CDATA[The first step in most Internet communications is name resolution:
mapping a text-based hostname
(e.g., <code>www.educatedguesswork.org</code>) to a numeric IP address
(e.g,, <code>69.163.249.211</code>). This mapping is generally done
via the <A HREF="http://en.wikipedia.org/wiki/Domain_Name_System">Domain
Name System</A> (DNS), a global distributed database. The thing
you need to know about the security of the DNS is that it doesn't
have much: records are transmitted without any cryptographic
protection, either for confidentiality or integrity. The 
official IETF security mechanism, <A HREF="http://www.dnssec.net/">DNSSEC</A> is based on digital signatures
and so offers integrity, but not confidentiality, and in an any case has
seen extremely <A HREF="http://secspider.verisignlabs.com/growth.html">limited deployment</A>.
Recently, OpenDNS rolled out <A HREF="http://www.opendns.com/technology/dnscrypt/">DNSCrypt</A>,
which provides both encrypted and authenticated communications between your machine
and a DNSCrypt-enabled resolver such as the one operated by OpenDNS. OpenDNS is
based on DJB's <A HREF="http://dnscurve.org/">DNSCurve</A> and I've talked about comparisons between DNSSEC and DNSCurve <A HREF="http://www.educatedguesswork.org/2010/02/some_notes_on_dnscurve.html">before, </A>
but what's interesting here is that OpenDNS is really pushing the confidentiality
angle:
<P>
<BLOCKQUOTE>
In the same way the SSL turns HTTP web traffic into HTTPS encrypted
Web traffic, DNSCrypt turns regular DNS traffic into encrypted DNS
traffic that is secure from eavesdropping and man-in-the-middle
attacks.  It doesn't require any changes to domain names or how they
work, it simply provides a method for securely encrypting
communication between our customers and our DNS servers in our data
centers.  We know that claims alone don't work in the security world,
however, so we've opened up the source to our DNSCrypt code base and
it's available on GitHub.
<P>
DNSCrypt has the potential to be the most impactful advancement in
Internet security since SSL, significantly improving every single
Internet user's online security and privacy.
</BLOCKQUOTE>
<P>
Unfortunately, I don't think this argument really holds up under examination.
Remember that DNS is mostly used to map names to IP addresses. Once you have
the IP address, you need to actually do something with it, and generally
that something is to connect to the IP address in question, which tends
to leak a lot of the information you encrypted.
<P>
Consider the (target) case where we have DNSCrypt between your local
stub resolver and some recursive resolver somewhere on the
Internet. The class of attackers this protects against is those which
have access to traffic on the wire between you and the resolver.
Now, if I type <code>http://www.educatedguesswork.org/</code> into
my browser, what happens is that the browser tries to 
resolve <code>www.educatedguesswork.org</code>, and 
what the attacker principally learns is (1) the hostname I am
querying for and (2) the IP address(es) that were returned. 
The next thing that happens, however, is that my browser forms
a TCP connection to the target host and sends something like this:
<P>
<pre>
GET / HTTP/1.1
Host: www.educatedguesswork.org
Connection: keep-alive
Cache-Control: max-age=0
...
</pre>
<P>
Obviously, each IP packet contains the IP address of the target 
the <code>Host</code> header contains the target host name, so 
any attacker on the wire learns both. And as 
this information is generally sent over the same access network
as the DNS request, the attacker learns all the information
they would have had if they had been able to observe my DNS query.
[Technical note: when Tor
is <A HREF="https://trac.torproject.org/projects/tor/wiki/doc/Preventing_Tor_DNS_Leaks">configured
properly</a>, DNS requests are routed over Tor, rather than over the
local network. If that's not true, you have some rather more serious
problems to worry about than DNS confidentiality.]
<P>
"You idiot," I can hear you saying, "if you wanted confidentiality you
should have used SSL/TLS." That's true, of course, but SSL/TLS barely
improves the situation. Modern browsers provide the target host name
of the server in question in the clear in the TLS handshake using
the <A HREF="http://en.wikipedia.org/wiki/Server_Name_Indication">Server
Name Indication</A> (SNI) extension.  (You can see if your browser
does it <A HREF="https://sni.velox.ch/">here</A>), so the attacker
learns exactly the same information whether you are using SSL/TLS or 
not. Even if your browser doesn't provide SNI, the hostname
of the server is generally in the server's certificate. Pretty
much the only time that a useful (to the attacker) hostname isn't
in the certificate is when there are a lot of hosts hidden behind
the same wildcard certificate, such as when your domain is
hosted using Heroku's "piggyback SSL". But this kind of certificate
sharing only works well if your domain is subordinated behind
some master domain (e.g, <code>example-domain.heroku.com</code>),
which isn't really what you want if you're going to offer a serious
service.
<P>
This isn't to say that one couldn't design a version of SSL/TLS that
didn't leak the target host information quite so
aggressively&mdash;though it's somewhat harder than it looks&mdash;but
even if you were to do so, it turns out to be possible to learn a lot
about which sites you are visiting via traffic analysis (see, for
instance <A HREF="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.3.1201&rep=rep1&type=pdf">here</A>
and <A HREF="http://www.research.microsoft.com/~padmanab/papers/msr-tr-2002-23.pdf">here</A>).
You could counter this kind of attack as well, of course, but that requires
yet more changes to SSL/TLS. This isn't surprising: concealing the
target site simply wasn't a design goal for SSL/TLS; everyone just
assumed that it would be clear what site you were visiting from the
IP address alone (remember that when SSL/TLS was designed, it didn't
even support name-based virtual hosting via SNI).
I haven't seen much interest in changing this, but unless and until
we do, it's hard to see how providing confidentiality for
DNS traffic adds much in the way of security.















	       


		

]]></description>
            <link>http://www.educatedguesswork.org/2011/12/do_we_need_dns_confidentiality.html</link>
            <guid>http://www.educatedguesswork.org/2011/12/do_we_need_dns_confidentiality.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">COMSEC</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">DNS</category>
            
            
            <pubDate>Sun, 18 Dec 2011 06:33:25 -0800</pubDate>
        </item>
        
        <item>
            <title>An overview of espresso-making technology</title>
            <description><![CDATA[I've been meaning to write something about espresso and the
various technology options for making one, but I never get around to it.
Now I have. 
I'm not an espresso-making expert, but I'm a guy who cares about
espresso, has a moderate but not extreme budget, and can pull
a fairly solid shot. As such, this
might or might not be useful to you.
There are many articles like this, but this one is mine.
<P>
The discussion below is restricted to what's called "semi-automatic"
machines: those where you grind the coffee yourself but the machine
has controls designed to regulate temperature and pressure. "Super-automatic"
where you put in beans and water and they put out coffee are out of scope
here.
<P>
<I>Consistency</I>
<BR>
The basic principle of espresso is simple: you grind up the coffee,
pack it down and then force heated water through under pressure.
The difference between swill and pure liquid perfection is in the
details. Moreover, if you're going to get the details right, the
first thing you need to do is get them consistent; the exact
procedures and settings you need differ with each coffee and each
machine, but if you can be consistent then you can dial them in
over time. [Aside: when I took machining in college, the first
thing the instructor told me was that machining wasn't about 
cutting metal, it was about measurement. If you could measure
accurately, you could cut accurately.] The major variables you
need to control are:
<OL>
<LI>The coffee itself.
<LI>The grind.
<LI>The amount of coffee.
<LI>The dispersal into the portafilter basket and the tamp.
<LI>Water temperature.
<LI>Water pressure.
</OL>
<P>
The coffee is something you buy, so you have some control over it but
not complete control. With the right grinder, you can completely control 
the grind and the amount of coffee. Dispersal and tamp is a matter of 
personal technique and practice. With the right espresso machine, you
can control water temperature quite precisely and with any pump
machine, pressure control should be quite good. So, as you can tell,
this is primarily a matter of getting good equipment.
<P>
<I>Grinder</I>
<BR>
The grinder thing is pretty simple: get a burr grinder with enough adjustments.
Don't get a doser. Get one with a timer. A little elaboration:
blade grinders (the cheap canister ones that you can buy for 
$20-$40) don't do a good job of getting you a consistent grind. The
individual grounds aren't the same size and you can't control the
overall size except by grinding longer. Don't buy one. You want a burr
grinder and you want one that allows you to adjust the grind finely and
over a large range. Different beans require different grinder settings,
so easy adjustment matters if you change beans much.
<P>
The reason you want a timer is to let you control the amount of coffee
you grind. This is a parameter people usually specify by mass, but 
using a scale is a pain in the ass. Grind time is a good proxy here.
What I typically do is make some test shots and then set the grind
time on my grinder (it has 3 presets). Then when I want to pull
a shot I just put the portafilter under the grinder and hit the
right preset button. None of this requires much thought once you
get it wired.
<P>
There are lots of good grinders. What I have is a 
<A HREF="http://www.baratzallc.com/products-page/products/vario/">Baratza Vario</A>.
There are two features I like about this. First, it has easy adjustments
with two slides up front, one for macro (espresso versus drip) and one for
micro (grind fineness once you've selected espresso). Second, it
has timer presets, which, as I said earlier, is super-convenient.
There's a rest for you to put the portafilter on while you grind,
but you need to hold it there or it falls off.
I notice that Baratza now makes a weight-based
<A HREF="http://www.baratzallc.com/products-page/products/vario-w/">Vario W</A>.
This seems like a good idea, but I don't know how well it will work with
espresso, since you don't want to grind into a hopper but right into your
portafilter, and it's not clear how the scale integrates with that.
One caution I would have with the Vario is that the really gross burr
adjustments are done with a hex wrench (included). They're easy but kinda scary
(keep turning until the motor starts to labor), so if that freaks you
out, you might consider another choice.
<P>
<I>Espresso Machine</I>
<BR>
There are a lot of choices in what kind of espresso machine you buy, but let's
get something out of the way now: espresso machines have pumps. Yes, you can
buy a cheap machine that works off steam pressure, but that's not what you
want.
<P>
The central problem that dictates the design of an espresso machine is
this: The water you use to make espresso needs to be at one temperature
(~200 F). The water you use to steam your milk needs to be at steam temperatures
(~250 F). If you're going to make milk drinks (I don't, but Mrs. G. does) then
you need to somehow address this. There are four basic approaches that I've seen:
<UL>
<LI>Have a single boiler and a switch that selects which temperature to maintain at (a single boiler
machine).
<LI>Have two boilers, one at each temperature (a double boiler machine).
<LI>Have a boiler set to steam temperature and use a heat exchanger to heat your water to
espresso temperature.
<LI>Have a boiler set to water temperature and an electric thermal block heating system
to make steam.
</UL>
<P>
Single boiler machines are basically a terrible solution for more than about one or two
people if you want to make any kind of steamed milk drink. Here's what the procedure
looks like if you want to make a latte: set the thermostat switch to "water"; pull a shot; set the thermostat
switch to steam; wait for it to heat up; steam your milk. This is all reasonably fast
because the boiler heats up fast. However, say you want to make another latte. Now 
you have to set the thermostat back to water and wait for it to cool down, which can
take minutes. You can accelerate this some by just running water through the group
head which pulls cool water out of the reservoir into the system, but basically it's
a pain. I've used this kind of machine in an office setting and it sucks.
<P>
The obvious (and best) solution to this problem is to have two totally separate
boilers, with one set to water and one set to steam. This is of course more
expensive, especially since manufacturers seem to have decided to engage in a little market
segmentation. To give you an example, Chris Coffee's cheapest double boiler is
the <A HREF="http://www.chriscoffee.com/products/home/espresso/minivivaldi">Mini Vivaldi II</A>
at $1995. They'll sell you a Rancilio Silvia (a very nice single boiler) for $699. This isn't
an uncommon pattern: many double boiler machines sell for more than twice
what a good single boiler would cost. I don't know anyone who has bought two singles
instead, but it's sure occurred to me.
<P>
The other two solutions are compromises. In a heat exchanger machine, the boiler
is set to steam temperature and then the water for the espresso runs through
a tube set inside the boiler, thus heating up on the way (good description
<A HREF="http://coffeegeek.com/opinions/javajim/07-14-2003">here</A>. The
idea is that as the water is being pulled out of the reservoir and onto the
coffee it heats up. The obvious problem, however, is that when you're
not pulling espresso, the water in the heat exchanger tube is heating up
eventually to the temperature of the steam, at which point you're back
where you started, as is the heavy metal group head which provides a lot of
thermal intertia. Standard procedure here is a <A HREF="http://www.home-barista.com/hx-love-manage-brew-temperature.html">cooling flush</A>
which means that you run some water through the (empty) portafilter/brew group to
get it down below the right temperature. Then you quickly pack the
portafilter and pull your shot. This all requires some coordination.
<P>
About a year ago, QuickMill came out with a new machine
(the <A HREF="http://www.chriscoffee.com/products/home/espresso/silvano">Silvano</A>),
which has a single boiler for the water and a thermoblock for the steam. This has
the advantage that you can tightly temperature control the water and the
group head and still get decent steam fast. The steam isn't as good as 
it would be if you had an actual boiler, but it's pretty good, so it's
a reasonable compromise. And since the water side is temperature controlled,
you get to pull a predictable shot without much messing around, which is
what I, at least, am after. It shouldn't be surprising at this point
that I have a Silvano, which I'm pretty happy with. <A HREF="http://qik.com/video/46410783">Here's</A> what
it looks like pulling a shot of Four Barrel <A HREF="http://fourbarrelcoffee.com/shop/africa/ethiopia-welena-suke-quto-bekele/">Ethiopia Welena Suke Quto</A> (and no, those two little spurts onto the backsplash are not
intended. That's evidence of tamping error.)
<P>
Oh, one more thing: the water supply for espresso machines can either be
plumbed (there is a water tube coming from your pipes) or unplumbed
(there is a water reservoir you have to refill). Plumbed typically only
comes on higher end machines. I don't know if it's worth stepping up to
one of those machines to get plumbed, but I do know that my Silvano is unplumbed
and I wish it were plumbed. It's pretty annoying to have the shot already
to go and realize you're out of water. Doubly annoying if it's your last shot
worth of coffee.








]]></description>
            <link>http://www.educatedguesswork.org/2011/12/an_overview_of_espresso-making.html</link>
            <guid>http://www.educatedguesswork.org/2011/12/an_overview_of_espresso-making.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Food</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Gear</category>
            
            
            <pubDate>Thu, 08 Dec 2011 08:35:21 -0800</pubDate>
        </item>
        
        <item>
            <title>More on qualification: gender and age</title>
            <description><![CDATA[As I wrote <A HREF="http://www.educatedguesswork.org/2011/11/on_qualification_standards.html">earlier</A>, many oversubscribed races use
a performance-based qualification process as a way of selecting
participants. What I mostly passed over, however, is whether
different people should have to meet different qualifying
standards. If your goal is to get the best people, 
you could simply just pick the top X%. However, if you were
to do that, what you would get would be primarily men 
in the 20-40 age range. To give you an idea of this, consider
<A HREF="http://www.nasports.com/results/index.php">Ironman Canada 2011</A>,
which had 65 Hawaii Qualifiers. If you
just take the first 65 non-Pro finishers, the slowest
qualifier would be around 10:17. This standard would have
two amateur women, Gillian Clayton (W30-34) at 
10:01.58 (a pretty amazing performance, since she's 18
minutes ahead of the next woman) and Rachel Ross (W35-39)
at 10:12.17, and no man 55 or above.
<P>
If you're going to have a diversified field, then, you need
to somehow adjust the qualifying standard for age and gender.
The standard practice is to have separate categories for
men and women and five year age brackets within each gender.
(Some races also have "athena" and "clydesdale" divisions
for women and men respectively who are over a certain weight,
but at least in triathlon, these are used only for awards and not for
Hawaii qualifying purposes.) However, it's also well-known that
these categories do a fairly imperfect job of capturing age-related
variation: it's widely recognized that "aging up" from the oldest
part of your age group to the youngest part of the next age
group represents a signficant improvement in your expected
results.
<P>
<B>UPDATE:</B> I forgot to mention. Western States 100 has a completely gender neutral qualifying standard, but it's comparatively very soft.



	

]]></description>
            <link>http://www.educatedguesswork.org/2011/11/more_on_qualification_gender_a.html</link>
            <guid>http://www.educatedguesswork.org/2011/11/more_on_qualification_gender_a.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Sports</category>
            
            
            <pubDate>Tue, 29 Nov 2011 09:20:12 -0800</pubDate>
        </item>
        
        <item>
            <title>On qualification standards</title>
            <description><![CDATA[One of the common patterns in endurance and ultra-endurance sports is
to have one or two races that everyone wants to do (the Hawaii
Ironman, the Boston Marathon, Western States 100, etc.) Naturally,
as soon as the sport gets popular you have more people who want
to do race X than the race organizers can accomodate. [Interestingly,
this seems to be true no matter the size of the event: Hawaii typically has around
1800 participants, Boston over 20,000.] As a race organizer, then, you
are faced with the problem of deciding how to pick the actual participants
from those who have the desire to participate.
<P>
The first problem seems to be deciding what to optimize for, with the two
most common objectives being: 
<UL>
<LI>Choose fairly among everyone who wants to do the race.
<LI>Choose the best athletes.
</UL>
<P>
<I>Fair Selection</I>
<BR>
The easiest way to choose fairly is generally to run a lottery. You take
applications for a race up until date X and then just draw however many
entrants you want out of that list. [Note that there is always a yield
issue, since some people register who never show because of injuries or
whatever, so the number of actual participants is never totally predictable.]
For races which are only mildly oversubscribed, what's more common is
take entries up until you're full and then close entry under the "you
snooze, you lose" principle. Ironman Canada does this, but now it
basically fills up right away every year so you more or less have
to be there the day after the race when registration for the next
year opens up.
<P>
<I>Merit-Based Selection</I>
<BR>
Choosing the best athletes is a more difficult proposition, since you
first need to identify them. You might think that you could just
have a big qualifying race with everyone who wants to race
and just pick the top X participants, but this clearly isn't going 
to work. Since the size of the target event is generally (though not
always) set to be about the maximum practical size of a race, if you're
going to pick out the top people to race in your target event, the
qualifying event would have to be much much larger, well beyond
the practical size. Instead, you somehow have to have a set of 
qualifying races and draw the best candidates from each race.
In some cases this is easy: If you are drawing national teams
for the world championship, you can just have each nation run
its own qualifying race and since each such race only needs to
draw from a smaller pool, it's still manageable. However, many
events (e.g., Ironman) aren't laid out among national lines so this
doesn't work.
<P>
There are two basic strategies for drawing your qualifying candidates
from a number of races. First, you can have a qualifying time. For instance,
if I wanted to run the Boston Marathon, I would need to run some
marathon under 3:10. Obviously, there is a lot of variation in
how difficult any given race is, and so this leads to people forum 
shopping for the fastest race. It's extremely common to see marathons
advertised as good Boston qualifiers. The key words here are
<A HREF="http://www.active.com/running/Articles/10_Best_Boston_Qualifiers.htm">"flat and fast"</A>
(A qualifying race can only have a very small amount of net downhill, so
non-flat means uphill,which slows you down.). Obviously, a qualifying
time doesn't give you very tight control over how many people you
actually admit, so you still have an admissions problem. As I understand
it, Boston used to just use a first-come-first-served policy for qualifiers
but in 2012 they're moving towards a <A HREF="http://www.baa.org/races/boston-marathon/participant-information/registration-process.aspx">rolling
admissions policy</A> designed to favor the fastest entrants. That said,
At the other end of the spectrum, the Western States has their
qualifying time set so that there are vastly more qualifiers than
eventual participants (it looks to me like it's set so that practically
anyone who can finish can qualify [observation due to Cullen Jennings])
and they use a lottery to choose among the qualifiers.
<P>
The other major predictable approach is that used for the Hawaii Ironman.
The World Triathlon Corporation (who runs Hawaii) has made certain
races "Hawaii qualifiers" (my understanding is that a race pays for this
privilege) and each race gets a specific number of slots for each 
gender/age combination. The way that this works is that if there are
5 slots in your age group, then the top 5 finishers get them. If any 
of those people don't want the slot (for instance they may have already
qualified) then the slots roll down to the 6th person, and so on.
all of this happens the day of or the day after the race and in person.
This method gives the race organizer a very predictable race size
but poses some interesting strategic issues for participants: because participants
compete directly against each other for slots, what you want is
to pick a qualifying race that looks like it is going to have a 
weak field this year. Unfortunately, just because a race had a weak
field last year doesn't mean that that will be true again, since
everyone else is making the same calculation!
<P>
<I>Arbitrary Selection</I>
<BR>
One thing that I've only seen in ultrarunning is invitational events
with arbitrary (or at least unpublished) selection criteria. For instance,
here's the situation with <A HREF="http://www.badwater.com/reg.html">Badwater</A>:
<P>
<BLOCKQUOTE>
The application submission period begins on February 1, 2012 and ends
on February 15, 2012. A committee of five race staff members, one of
whom is the race director, will then review and rank each application
on a scale of 0 to 10. The ranks will be tallied on February 18 and
the top 45 rookie applicants with the highest scores, and the top 45
veterans with the highest scores, will be invited (rookies and
veterans compete separately for 45 slots for each category). At that
time, or later, up to ten more applicants (rookie and/or veteran) may
be invited at the race director's discretion, for a total of
approximately 100 entrants, and 90 actual competitors on race day.
</BLOCKQUOTE>
<P>
I guess that's one way to do it.








  
]]></description>
            <link>http://www.educatedguesswork.org/2011/11/on_qualification_standards.html</link>
            <guid>http://www.educatedguesswork.org/2011/11/on_qualification_standards.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Sports</category>
            
            
            <pubDate>Mon, 28 Nov 2011 08:17:29 -0800</pubDate>
        </item>
        
        <item>
            <title>HyperMac&apos;s external battery workaround</title>
            <description><![CDATA[The MacBook (Air, Pro, etc.) are great computers, but the sealed battery
is a real limitation if you want to travel with it. My Air gets about
5-6 hours of life if I'm careful, which is fine for a transcontinental
flight, but not a transatlantic one. The fix, of course, is to buy
a HyperMac <A HREF="http://www.hypershop.com/HyperJuice-External-Battery-for-MacBook-iPad-iPhone-USB-s/91.htm">external 
battery</A>, which plugs into the laptop at the only real point
of access, the magsafe connector. Unfortunately, in 2010
Apple <A HREF="http://www.appleinsider.com/articles/10/10/18/lawsuit_forces_hypermac_to_cease_sale_of_apple_patented_charging_cables.html">sued</A> HyperMac for patent infringement and
HyperMac stopped selling the relevant cable (which, as I understand
it, was actually a modified version of an official Apple cable).
Without the cable, of course, the battery is pretty useless.
<P>
I'm lucky enough to have one of the pre-lawsuit battery/cable 
combinations but recently a friend wanted one, so I looked
again. It seems that HyperMac is back in business, but they've
resorted to a do-it-yourself kind of ethos. Basically, you
have two choices:
<OL>
<LI>HyperMac will sell you a connector that impersonates a 
12V air/auto power connector. You then buy the Apple 
air/auto to MagSafe adaptor and plug it into your Mac.
<LI>They sell you a pair of jacks that you splice into
the cable for a legitimate Apple power supply. The way
that this works is you take a standard Apple power supply
and cut the magsafe half of the cable in two. You strip the
wires and attach them to the jack; repeat for the other side.
</OL>
<P>
Without taking a position on the merits of Apple's legal claims,
this seems like a pretty lame state of affairs. First, the
original HyperMac design was better because you could charge
your battery at the same time as you powered your Mac with it.
This works with the air/auto version but not with the DIY 
jack version. Second, while it's not exactly microsurgery to splice
the cables, it's still something you could mess up.
<P>
Moreover, it's not like Apple has some super-expensive power
expansion solution that HyperMac is competing with and the
patent is protecting them from. Rather,
they're just making life harder for people who want to use
<I>Apple's</I> products in situations which are just more
extreme versions of the situations which motivated the device
having a battery in the first place. I just don't see how
this makes anyone's life better.

]]></description>
            <link>http://www.educatedguesswork.org/2011/11/hypermacs_external_battery_wor.html</link>
            <guid>http://www.educatedguesswork.org/2011/11/hypermacs_external_battery_wor.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Gear</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Outstanding!</category>
            
            
            <pubDate>Tue, 08 Nov 2011 05:54:01 -0800</pubDate>
        </item>
        
    </channel>
</rss>

