<?xml version="1.0" encoding="iso-8859-1"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">mkj musings</title>
<subtitle type="html"><![CDATA[

]]></subtitle>
<id>http://musings.danlj.org/index.atom</id>
<link rel="alternate" type="text/html" href="http://musings.danlj.org" />
<link rel="self" type="application/atom+xml" href="http://musings.danlj.org/index.atom" />


<author>
<name>Michael K. Johnson</name>
<uri>http://musings.danlj.org/index.atom</uri>
<email>a356b@danlj.org</email>
</author>
<rights>Copyright Michael K. Johnson</rights>
<generator uri="http://pyblosxom.sourceforge.net/" version="1.4.3 01/10/2008">
PyBlosxom http://pyblosxom.sourceforge.net/ 1.4.3 01/10/2008
</generator>

<updated>2011-11-09T02:15:09Z</updated>
<!-- icon?  logo?  -->

<entry>
<title type="html">Superheated Water</title>
<category term="/psa" />
<id>http://musings.danlj.org/2011/11/08/superheated_water</id>
<updated>2011-11-09T02:15:09Z</updated>
<published>2011-11-09T02:15:09Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/psa/superheated_water.html" />
<content type="html">
&lt;p&gt;It isn&apos;t often that I find myself checking snopes before posting
about something that happened to me.  As in never.  Until now.&lt;/p&gt;

&lt;p&gt;I was heating filtered water in the microwave oven for tea,
in a glass mug.  It seemed to be taking a long time to boil (I
wanted strong tea, so I was going to steep it just off boiling).
As I peered through the microwave&apos;s window, there was a muffled
explosion, and boiling water and steam spewed out of the microwave.
I immediately turned off the microwave and tentatively opened
the door.  90% of the water was no longer in the mug.  Some
of it was still in the microwave; the rest was on the cupboards
and floor.&lt;/p&gt;

&lt;p&gt;I immediately googled &quot;microwave exploding
water&quot; and found that the first hit was a &lt;a
href=&quot;http://www.snopes.com/science/microwave.asp&quot;&gt;snopes
page (True!)&lt;/a&gt;, the second &lt;a
href=&quot;http://www.stevespanglerscience.com/experiment/exploding-water-in-the-microwave&quot;&gt;a
link to Steve Spangler Science&lt;/a&gt; with
more confirmation, and the third hit was a &lt;a
href=&quot;http://www.youtube.com/watch?v=1_OXM4mr_i0&quot;&gt;mythbusters
video&lt;/a&gt; showing exploding water in slow motion.&lt;/p&gt;

&lt;p&gt;Wow, I&apos;m glad that happened before I opened the microwave
door.  It was more likely to have happened when I moved the
mug or dropped tea into the water, so I count myself lucky.&lt;/p&gt;

&lt;p&gt;So, a Public Safety Announcement: If you are microwaving water,
especially filtered water, add a wooden stir stick or some other
non-metallic object to provide a nucleation site to prevent
superheating and possible subsequent scalding.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">A New Addiction: Cryptic Crosswords</title>
<category term="/words" />
<id>http://musings.danlj.org/2011/05/30/cryptic_crosswords_addiction</id>
<updated>2011-05-31T01:30:28Z</updated>
<published>2011-05-31T01:30:28Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/words/cryptic_crosswords_addiction.html" />
<content type="html">
&lt;p&gt;&lt;a href=&quot;http://www.amazon.com/Cryptic-Crosswords-Mensa-Fraser-Simpson/dp/1402754892&quot;&gt;tl;dr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can stop doing cryptic crosswords any time I want to.  I just
don&apos;t happen to want to right now.&lt;/p&gt;

&lt;p&gt;In Fall 2009, my wife finally succeeded in her long attempts to get
me to start doing crosswords.  As a child, I once filled out a newspaper
crossword that advertised a $100 prize and sent it in, confident in my
newfound wealth.  I was bitterly disappointed when the next week&apos;s
paper came out with no mention of the crossword having been solved,
and indeed no money arrived.  I decided that crossword authors were
capricious and gave up on the genre.&lt;/p&gt;

&lt;p&gt;My wife&apos;s help was really important.  I learned about &quot;crossword
words;&quot; she would look at a clue and give me a word that I&apos;d never
heard.  I would blink and ask her what it meant, and she&apos;d just say
&quot;I don&apos;t know; it&apos;s a crossword word.&quot;  I learned that any clue in
four letters that references a dog in a movie is about 85% likely to
be Asta (from the Thin Man movies); 10% likely to be Toto (I don&apos;t
think we&apos;re in Kansas anymore), and 5% something else, and if you
have only one crosser in the third letter you just can&apos;t fill it in
until you get one more crosser, though you can guess at Asta and see
if it helps you with any of the crossers.  I learned, also, that you
are expected to have an encyclopedic knowledge of Broadway, the silver
screen, and popular music; including the winner, runner-up, and
second runner-up for every award ever given in any entertainment
venue.  Blah.  I know next to nothing about popular entertainment
culture.&lt;/p&gt;

&lt;p&gt;After we had finished one book full of NYT dailies, I griped
to a co-worker (Thanks, Andy!) about all the required esoterica,
and he introduced me to the cryptic crossword, in which &lt;b&gt;each
clue is a word puzzle.&lt;/b&gt;  He told me to get a book that had an
introduction to how the word puzzles worked.&lt;/p&gt;

&lt;p&gt;By sheer luck, I happened on what I believe is the absolute best
book to start with: &lt;a href=&quot;http://www.amazon.com/Cryptic-Crosswords-Mensa-Fraser-Simpson/dp/1402754892&quot;&gt;Fraser Simpson&apos;s 102 Cryptic Crosswords&lt;/a&gt;.
Fraser Simpson, a Canadian math teacher, is one of the most stringent
practitioners of a strict rule for making each word puzzle fair.
He gave this newcomer to cryptics the ability to trust that the clues
would make sense, so that I didn&apos;t throw it down in disgust.&lt;/p&gt;

&lt;p&gt;I heartily recommend Simpson&apos;s work for getting started.  After
his &quot;102&quot; (all of which he constructed), I would suggest
&lt;a href=&quot;http://www.amazon.com/101-Cryptic-Crosswords-New-Yorker/dp/0806901861&quot;&gt;101
Cryptic Crosswords: From the New Yorker&lt;/a&gt; which he edited.  The
style isn&apos;t quite as consistent, since he&apos;s the editor, not the
sole constructor.  Getting used to the different styles is an
excellent way to launching into more cryptic crosswords.&lt;/p&gt;

&lt;p&gt;From there, there are really two ways to go.  There are two basic
schools of thought in cryptics.  One tries to stick fairly strictly
to the rules of fairness set out by &quot;Ximenes&quot; (Derrick Somerset
Macnutt), and the other is rather looser.  In the stricter school,
if the solver has to understand that you are using a word with
an invented meaning or as a pun, the constructor (or &quot;setter&quot;)
is expected to tell the solver (normally with a question mark).
In the looser school, you are just expected to figure out that
(for example) a &quot;flower&quot; might be a river (because it flows) or a
&quot;banker&quot; might be a river (because it, um, has banks), so that
&quot;italian banker&quot; would &quot;obviously&quot; clue &quot;po&quot;.  In practice, there
are perhaps a few hundred or few thousand of these odd constructions
that solvers just memorize, as an esoteric jargon.  In my opinion,
this detracts from the beauty of the puzzles while making them
less accessible, and is a concession to setters who have trouble
coming up with better clues.&lt;/p&gt;

&lt;p&gt;If this has piqued your interest, I strongly recommend the
two Fraser Simpson collections, and then after that, there are
several possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Theresa Cunningham wrote &lt;a href=&quot;http://www3.sympatico.ca/tagies/cryptics/solvingguide/solvingguide.html&quot;&gt;the
best online description I&apos;ve seen yet on how to solve cryptics.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lafn.org/~keglerron/kegler.html&quot;&gt;Ron Sweet
(Kegler) has puzzles online&lt;/a&gt; at various difficulty levels, including
some introductory puzzles originally written for children and great
for learning.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;http://www.crosswordfiend.com/forum/viewforum.php?f=3&quot;&gt;crosswordfiend.com Cryptic Crossword forum&lt;/a&gt;, where several amateur and
a few professional cryptic setters hang out and work on clues
together.  (The original members were the &quot;Cryptic Cru&quot; from the
now-defunct NYT puzzle forum.)&lt;/li&gt;
&lt;li&gt;The NYT puzzle forum&apos;s Cryptic Cru had a long-running
&lt;a href=&quot;http://world.std.com/~wij/puzzles/cru/&quot;&gt;workshop, with
238 puzzles available.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alberichcrosswords.com/index.html&quot;&gt;Alberich,&lt;/a&gt;
a professional British compiler, hosts a growing online collection of
freely-downloadable cryptics.&lt;/li&gt;
&lt;li&gt;For a few years (1998-2000) the occasional
&lt;a href=&quot;http://www.2minuteexplainer.com/xword/tcccc/&quot;&gt;Team Cryptic
Crossword Construction Competition&lt;/a&gt; was held on the
rec.puzzles.crosswords newsgroup.  The puzzles are still
available.  Some of the clues are not quite fair; the nature
of a competition is that some are better than others!&lt;/li&gt;
&lt;li&gt;On Android, &lt;a href=&quot;http://www.kebernet.net/Home/projects/shortyz&quot;&gt;Shortyz&lt;/a&gt;
is probably the best crossword application, can be set to automatically
download Kegler and Cru Cryptic Workshop puzzles, and is open source.&lt;/li&gt;
&lt;/ul&gt;
</content>
</entry>

<entry>
<title type="html">Why Layout Matters</title>
<category term="/rants" />
<id>http://musings.danlj.org/2011/04/22/why_layout_matters</id>
<updated>2011-04-22T18:01:05Z</updated>
<published>2011-04-22T18:01:05Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rants/why_layout_matters.html" />
<content type="html">
&lt;p&gt;I have found myself reading Adobe&apos;s &lt;a href=&quot;http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf&quot;&gt;AMF3&lt;/a&gt;
specification, and trying to read their ABNF grammar for AMF3.  Unfortunately,
Adobe have seen fit to format their nesting in arbitrary ways that make
it hard to read.  Here are two examples from the specification (which has
not been touched since 2008, to the best of my knowledge):&lt;/p&gt;

&lt;pre&gt;
array-type        =   array-marker (U29O-ref | (U29A-value
                      (UTF-8-empty | *(assoc-value) UTF-8-empty)
                      *(value-type)))
...
object-type       =   object-marker (U29O-ref | (U29O-traits-ext
                      class-name *(U8)) | U29O-traits-ref | (U29O-
                      traits class-name *(UTF-8-vr))) *(value-type)
                      *(dynamic-member)))
&lt;/pre&gt;

&lt;p&gt;Line breaks in arbitrary places do not make the ABNF any easier
to read.  (Line breaks in the middle of a terminal are also in poor
taste.)  If you count the parentheses in the &lt;tt&gt;object-type&lt;/tt&gt;
definition, you will find that there are two extra closing
parentheses. This is not optimal for a grammar for a binary language
that is supposed to enable interoperation.&lt;/p&gt;

&lt;p&gt;If the specification authors had used logical layout, this would
have been completely obvious:&lt;/p&gt;

&lt;pre&gt;
array-type        =   array-marker (U29O-ref |
                                    (U29A-value
                                     (UTF-8-empty | *(assoc-value) UTF-8-empty)
                                     *(value-type)))
...
object-type       =   object-marker (U29O-ref |
                                     (U29O-traits-ext class-name *(U8)) |
                                     U29O-traits-ref |
                                     (U29O-traits class-name *(UTF-8-vr))
                                    ) *(value-type) *(dynamic-member)
))
&lt;/pre&gt;

&lt;p&gt;I guess it should surprise no one that a long-time Python programmer
would suggest that literal layout influences both readability and
comprehensibility.&lt;/p&gt;

&lt;p&gt;I guess I should also rant that the specification says that the grammar
is specified in Augmented Backus-Naur Form, and explicitly references
RFC2234 (since obsoleted by RFC4234, then by RFC5234), but then uses the
vertical bar character &lt;tt&gt;|&lt;/tt&gt; when RFC2234 clearly states that
alternatives will be presented with a solidus (forward slash) &lt;tt&gt;/&lt;/tt&gt;.
However, we&apos;re all used to &lt;tt&gt;|&lt;/tt&gt; from BNF and EBNF, so I can
forgive that more easily...&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Livestrong (Johnson Health) Customer Service</title>
<category term="/raves" />
<id>http://musings.danlj.org/2011/02/24/livestrong_treadmill_customer_support</id>
<updated>2011-02-24T15:16:08Z</updated>
<published>2011-02-24T15:16:08Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/livestrong_treadmill_customer_support.html" />
<content type="html">
&lt;p&gt;&lt;i&gt;tl;dr: good job!&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Last month, I blogged about my new
&lt;a href=&quot;/raves/new_treaddesker.html&quot;&gt;treaddesking&lt;/a&gt; experience
on my new Livestrong treadmill.  Among other things, I said:
&lt;blockquote&gt;
&lt;i&gt;The annoying squeaking that the treadmill made when I first turned
it on is getting quieter. If it doesn&apos;t go away entirely, though,
I need to call the manufacturer.&lt;/i&gt;
&lt;/blockquote&gt;
The squeaking, while quiet, didn&apos;t go away, and the manufacturer&apos;s
web site said that it shouldn&apos;t squeak and to call customer support.&lt;/p&gt;

&lt;p&gt;I was not excited about the idea of calling customer support.
I imagined long wait times followed by sceptical or powerless
customer support agents.&lt;/p&gt;

&lt;p&gt;Imagine my surprise when the agent took me seriously, and after
I described what I had checked so far offered to immediately send
out a new motor, apologizing that it would take a few days.  I asked
for more things I could check first, because I didn&apos;t want to make
them send a part that would turn out not to be the right thing, and
so she gave me two more things I could look at if I wanted.  This
involved removing some screws and temporarily taking things apart,
and there were no warnings that by doing so I would be voiding my
warranty.  What a refreshing change from &quot;no user-serviceable parts
inside!&quot;&lt;/p&gt;

&lt;p&gt;I called back a few days later to confirm that I had checked
the things we had discussed and to ask whether there was anything
else I could do.  I got a different customer service representative
this time, but he was just as helpful as the first.  He said no,
nothing else to check, they&apos;d happily send me a new motor and then
have a technician come to my house to install it after it arrived.
I asked if it would be OK if I installed it myself, and he
cheerfully agreed to include an instruction sheet and said that
was just fine for me to do the installation myself.&lt;/p&gt;

&lt;p&gt;I now have a quieter treadmill.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">The Saga Of the Microwave Turntable</title>
<category term="/raves" />
<id>http://musings.danlj.org/2011/02/05/martin_microwave</id>
<updated>2011-02-05T20:17:48Z</updated>
<published>2011-02-05T20:17:48Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/martin_microwave.html" />
<content type="html">
&lt;p&gt;Months ago, my eldest daughter accidentally broke the glass
turntable tray in our microwave oven.  I quickly googled the part
and determined that it was almost $80, plus shipping and handling;
I showed her the price, and inverted a dinner plate in the microwave to
hold food up at the right level, though the food no longer rotated.
I meant to order a new one quickly, but somehow there was always
too much else to do.&lt;/p&gt;

&lt;p&gt;My wife made it clear that priorities had changed, so I again
googled the part number, and was pleasantly surprised to see the
part available for $37 instead of $80, though the discrepancy made
me wonder whether there would be something wrong with it.  Also, it
was from one of those specialty hostnames that always make me wonder.
But the site looked otherwise ligit, so I gave
&lt;tt&gt;&lt;a href=&quot;http://www.microwaveglasstrays.com&quot;&gt;www.microwaveglasstrays.com&lt;/a&gt;&lt;/tt&gt;
(really, Martin Microwave in Chattanooga, TN) a try.&lt;/p&gt;

&lt;p&gt;Since it seems that people normally report only bad experiences,
I&apos;d like to report instead that Martin Microwave shipped the part
immediately, very well packed.  Not only did they have the lowest
price I could find, they also shipped quickly and well.&lt;/p&gt;

&lt;p&gt;I&apos;m hoping not to need to be a repeat customer soon&amp;mdash;my
daughter promises to be more careful!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">New Treaddesker</title>
<category term="/raves" />
<id>http://musings.danlj.org/2011/01/13/new_treaddesker</id>
<updated>2011-01-14T03:53:08Z</updated>
<published>2011-01-14T03:53:08Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/new_treaddesker.html" />
<content type="html">
&lt;p&gt;In December, Steelcase loaned rPath a &quot;Walkstation&quot; for a week.
This is a basic treadmill with a desk attached that has motorized
height adjustment.  Unfortunately, it is very expensive ($4200 is
the lowest I&apos;ve seen), maxes out at 2 miles per hour, has a small
tread area, has no incline capability, and the retractable console
for controlling the treadmill has sharp edges.  It beeps loudly
whenever you press a button, and the treadmill isn&apos;t the quietest
I&apos;ve heard.&lt;/p&gt;

&lt;p&gt;Despite these shortcomings, I was quickly hooked, to the disgust
of some in the office, who were annoyed by the constant noise of
the tread even more than the occasional beeping.  (The Walkstation
had to be moved about the office several times due to complaints
about the noise.)  A few other people were interested, so I couldn&apos;t
walk all day, I had to let other people use it too.  But although I
wanted to walk a bit faster than 2 miles per hour much of the time, I
noticed on my first day trying it that I was particularly productive
while walking and coding.  I have noticed that when I&apos;m trying to
work out a knotty problem, I often get up and pace energetically.
This way, I was already pacing!&lt;/p&gt;

&lt;p&gt;I am ready for a lifestyle change.  I spend way too much time
sitting down, and almost every evening I find some important work
to do and put off exercising until the next day.  And the next.
And so on and so forth.  I like to walk.  I like my work.  I
finally know how I can put these together!&lt;/p&gt;

&lt;p&gt;Over the past month, I&apos;ve done as much research as I could online.
I also spent a few hours in stores walking on different treadmills.
I compared cost and features, and learned about how treadmills work
and what separates different models.  You might think that if you are
mainly going to walk, not run, you really are not putting much stress
on the treadmill and can get by with a cheap unit.  Unfortunately,
I read that this is not the case.  Low-power motors have trouble
going slowly smoothly, and they can overheat when run for a long
time, shortening their lifespan.  Also, within their capabilities,
they tend to be louder for the load they are carrying.  At least,
that&apos;s what I read.  Maybe I&apos;m just a sucker.&lt;/p&gt;

&lt;p&gt;Sunday afternoon, I bit the bullet and bought a midrange
treadmill: 3 continuous horsepower, 20&quot;x60&quot; belt, reasonably quiet.
The box was over 300 pounds.  Sliding it into the house was not
that hard.  My idea was that we would carry the individual pieces
upstairs, and I&apos;d assemble it there.  Unfortunately, the heaviest
piece was too heavy for my wife and I to carry together up the
stairs.  So we now have a treadmill assembled in our entryway, and
I have been working in the entryway for several hours per day.&lt;/p&gt;

&lt;p&gt;I&apos;m hooked.&lt;/p&gt;

&lt;p&gt;Also, I&apos;ve been learning.  Here are a few things:&lt;/p&gt;

&lt;p&gt;The annoying squeaking that the treadmill made when I
first turned it on is getting quieter.  If it doesn&apos;t go
away entirely, though, I need to call the manufacturer.&lt;/p&gt;

&lt;p&gt;I think that I want a higher desk than most treaddeskers do.
The pile of boards and books on which I&apos;ve placed my laptop is at
least six inches thick, resting on the treadmill arms, and I could
maybe use another half an inch, without any incline on the deck.
I&apos;m waiting to build something more permanent until I have some
more experience.  The TrekDesk does not appeal to me; I really need
only enough space for a laptop, cell phone, and maybe a mouse.
Getting a unit with a long deck gives me the flexibility to have
enough desk between me and the console.&lt;/p&gt;

&lt;p&gt;I may need &quot;technical&quot; clothing if I&apos;m going to do this for
2-4 hours at a stretch.  I have experienced some chafing, which
surprised me because it isn&apos;t a problem when I&apos;m walking normally,
even when I&apos;m walking for hours.  Probably the fact that there
aren&apos;t any turns in the road has something to do with this; it&apos;s
just more repetitive.  I also need good walking shoes.  With my
loafers (my normal footwear), I&apos;ve been doing an hour in shoes,
followed by half and hour to an hour in stocking feet, then back
into shoes, but I really need something a bit better.&lt;/p&gt;

&lt;p&gt;I have to compete with the kids for treadmill time.  DD8 has
spent an hour in a day on it, half of it running (I had to insist
that she not run 5-6 miles per hour while reading, which just didn&apos;t
seem quite safe to me); DD6 and DS3 both seem satisfied after about
20 minutes.&lt;/p&gt;

&lt;p&gt;I&apos;m ready to move this thing to a more permanent location!&lt;p&gt;
</content>
</entry>

<entry>
<title type="html">OpenOffice.org E-Publishing</title>
<category term="/words" />
<id>http://musings.danlj.org/2010/12/28/openoffice_epublishing</id>
<updated>2010-12-28T16:13:11Z</updated>
<published>2010-12-28T16:13:11Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/words/openoffice_epublishing.html" />
<content type="html">
&lt;p&gt;My father, an internist, has been self-publishing a short collection of
stories on death and dying called &lt;i&gt;Kind Farewells&lt;/i&gt;; each tells
a story from his medical practice about a death that touched him, and
others, deeply.  So far, he has listed the book on lulu.com in
&lt;a
href=&quot;http://www.lulu.com/product/hardcover/kind-farewells-nine-clinical-vignettes-in-hardcover/10985922&quot;&gt;hardcover,&lt;/a&gt;
&lt;a
href=&quot;http://www.lulu.com/product/paperback/kind-farewells-nine-clinical-vignettes-trade-paperback/10985919&quot;&gt;softcover,&lt;/a&gt; and
&lt;a href=&quot;http://www.lulu.com/product/ebook/e-kind-farewells/14302268&quot;&gt;PDF download&lt;/a&gt; formats.  Recently, he decided that he wanted to offer it in
various e-book formats as well.&lt;/p&gt;

&lt;p&gt;This shouldn&apos;t be hard.  He wrote the book in OpenOffice; the
two most common ebook formats (epub and mobi) are both collections
of HTML files; OpenOffice is able to export to HTML; and the
&lt;a href=&quot;http://calibre-ebook.com/&quot;&gt;Calibre&lt;/a&gt; tool is freely
available to convert into many formats, including epub and mobi.
So this should be a matter of choosing whether to export the HTML as
a single file or as one file per chapter, converting it in Calibre,
reviewing the converted content, and posting the file to Amazon&apos;s
&lt;a href=&quot;http://dtp.amazon.com/&quot;&gt;Digital Text Platform&lt;/a&gt;
to make it available on the Kindle, Barnes and Noble&apos;s &lt;a
href=&quot;http://www.barnesandnoble.com/u/pubit-self-publish-ebook-publishing/379002433/&quot;&gt;PubIt!&lt;/a&gt;
to make it available for the Nook, and any other e-bookstores that
are easy to use and allow individuals to publish books.&lt;/p&gt;

&lt;p&gt;He asked for some help.&lt;/p&gt;

&lt;p&gt;In practice, our biggest difficulty was OpenOffice.org HTML output
formatting.  We encountered two kinds of problems.  The first was a
simple bug; after the closing &lt;tt&gt;&amp;lt;/html&amp;gt;&lt;/tt&gt; tag, OpenOffice
appended a few lines of seemly-random text from within the file.
The second was that the conversion was clearly intended to preserve
as many WYSIWYG elements as possible, which clashed badly with the
constraints of ebook displays.&lt;/p&gt;

&lt;p&gt;I ended up using the Python &lt;a href=&quot;http://codespeak.net/lxml/&quot;&gt;lxml&lt;/a&gt;
module to write a &lt;a href=&quot;http://bitbucket.org/johnsonm/clean-ooo-html&quot;&gt;short
script which I made available on bitbucket&lt;/a&gt; to clean up
OpenOffice.org HTML output for use in an e-book.  I&apos;m not intending
to do active long-term maintenance of the script, so I encourage
anyone who needs to modify it to fork it on bitbucket.  If you use
the &quot;fork&quot; button on bitbucket, the fork will show up on the main
page for other people to see.&lt;/p&gt;

&lt;p&gt;When I run the script, in order to make sure that the changes are
only to the styling and do not modify the text of the book, I compare
the output of &lt;tt&gt;lynx -dump&lt;/tt&gt; before and after processing using
&lt;tt&gt;diff -u&lt;/tt&gt;.  Since lynx does not honor CSS (as far as I know),
my CSS changes have no impact on the output, and therefore bugs
in my conversion script stood out as differences in the output from
lynx.&lt;/p&gt;

&lt;p&gt;The script isn&apos;t particularly quick; I intentionally wrote it
to use XPath and multiple passes to make it easy to understand,
edit, and modify.&lt;/p&gt;

&lt;p&gt;The end result: While Barnes and Noble has taken days and still
has not made &lt;i&gt;Kind Farewells&lt;/i&gt; available in the NOOKstore,
it showed up in less than a day on
&lt;a href=&quot;http://www.amazon.com/Kind-Farewells-ebook/dp/B004HD5R8G&quot;&gt;Amazon&lt;/a&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Froyo: Or, Samsung Wins Again</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/10/13/froyo_or_samsung_wins_again</id>
<updated>2010-10-13T20:12:11Z</updated>
<published>2010-10-13T20:12:11Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/froyo_or_samsung_wins_again.html" />
<content type="html">
&lt;p&gt;Yesterday,
&lt;a href=&quot;http://musings.danlj.org/raves/why_i_bought_samsung_galaxy_phones.html&quot;&gt;I blogged about
why I was happy I bought Samsung cell phones&lt;/a&gt;.&lt;/p&gt;  Today, I
&lt;a href=&quot;http://www.androidcentral.com/samsung-releases-froyo-update-source-code-galaxy-s&quot;&gt;got
confirmation&lt;/a&gt;
&lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=807440&quot;&gt;that&lt;/a&gt;
&lt;a href=&quot;http://opensource.samsung.com/&quot;&gt;Samsung seems serious about
open source on an ongoing basis&lt;/a&gt;, and I&apos;m even more encouraged.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Why I Bought Samsung Galaxy Phones</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/10/12/why_i_bought_samsung_galaxy_phones</id>
<updated>2010-10-12T14:45:39Z</updated>
<published>2010-10-12T14:45:39Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/why_i_bought_samsung_galaxy_phones.html" />
<content type="html">
&lt;p&gt;&lt;b&gt;Briefly:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://laforge.gnumonks.org/weblog/2010/08/21/#20100821-playing_with_galaxy_s&quot;&gt;Started
to play with the Galaxy S (GT-I9000) phone&lt;/a&gt; Harald Welte reports that
Samsung is going a good job of living up to its GPL requirements
for its Linux-based Android phones, including the Galaxy S series.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://laforge.gnumonks.org/weblog/2010/10/12/#20101012-htc-g2-linux-gpl&quot;&gt;GPL violation reports in HTC G2 Android phone&lt;/a&gt;
Harald Welte discusses a long string of GPL violation issues on HTC&apos;s
part, including their willful and acknowledged flouting of the
GPL.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.freedom-to-tinker.com/blog/sjs/htc-willfully-violates-gpl-t-mobiles-new-g2-android-phone&quot;&gt;HTC
Willfully Violates the GPL in T-Mobile&apos;s New G2 Android Phone&lt;/a&gt;
Steve Schultze quotes HTC directly admitting that they do not
follow the GPL, pretending that withholding source code is
acceptable under the GPL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;The longer version:&lt;/b&gt;  Not quite two years ago, I bought
an HTC-built AT&amp;amp;T Fuze phone&amp;mdash;my first running
Windows&amp;mdash;because it was the only phone I could get at the
time that gave me 640 x 480 pixels on the display and sufficient
external storage; enough to reasonably use as a backup device to
hold a full set of
&lt;a href=&quot;http://aeronav.faa.gov/index.asp?xml=aeronav/applications/d_tpp&quot;&gt;approach
plates&lt;/a&gt; so that if I for any reason did not have the correct
approach plates available for my flight, I could pull out my cell
phone (with the cell radio off, of course!) and use it to get at
the information I need to safely land in instrument conditions.&lt;/p&gt;

&lt;p&gt;It was a so-so experience.  The interface was clunky, but at
least the platform wasn&apos;t locked down; if only because Microsoft
wasn&apos;t good enough at the time to make a platform that could be
locked down effectively...  I could download a few apps for it
that made it sufficiently usable, and I could put up with its
quirks.  But it certainly didn&apos;t make me fall in love with Windows,
or with Microsoft as an OS provider.&lt;/p&gt;

&lt;p&gt;I tried a community build of Android on the Fuze, and found that
even without HTC&apos;s help, Android was smoother, quicker, more usable
than winmo.  There were enough missing things, and battery life was
bad enough, that I clearly wasn&apos;t going to be able to just use the
Fuze as an android device, but it was enough to make me want to get
an Android device for my next phone.&lt;/p&gt;

&lt;p&gt;I considered buying a new larger HTC-built phone (I wasn&apos;t sure
which to pick, and was waiting for the next batch of Android phones
from HTC) and the smaller HTC Aria for my wife.  Fortunately, I
did my research and discovered that HTC was withholding infomation
on the Aria, making it a hard platform for the wider Android
development community to support, and clearly not living up to
their GPL commitments in general on their Android phones.&lt;/p&gt;

&lt;p&gt;The fact that Harald Welte, who is careful, thoughtful, and
knowledgeable about the GPL (including a long history of successfully
enforcing legal actions against companies that violate the GPL),
says that Samsung has done a good job of living up to its GPL
obligations was the number one deciding factor for me to choose
not to purchase two more HTC phones.&lt;/p&gt;

&lt;p&gt;I bought a pair of Samsung Galaxy S &quot;Captivate&quot; phones; one
for me, one for my wife.  HTC&apos;s choice to alienate open source
advocates, and Samsung&apos;s choice to follow the rules, paired up
to give Samsung two sales at HTC&apos;s expense.  I know that two
is not a large number, but I hope I&apos;m not alone.  I&apos;d like to
thank Samsung for making it easier to vote with my feet by
creating a rather compelling offering&amp;mdash;the Galaxy S is
a nice platform.  (Here&apos;s hoping AT&amp;amp;T doesn&apos;t wreck Froyo
when they make the update available!)&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">The Linux Programming Interface: Preview</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/09/01/the_linux_programming_interface_preview</id>
<updated>2010-09-01T20:05:17Z</updated>
<published>2010-09-01T20:05:17Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/the_linux_programming_interface_preview.html" />
<content type="html">
&lt;p&gt;Erik Troan and I co-authored two editions of
&lt;i&gt;&lt;a href=&quot;http://www.ladweb.net/&quot;&gt;Linux Application Development&lt;/a&gt;&lt;/i&gt;,
so I have some idea of what it takes to write a Linux programming
book.  It&apos;s a lot of work to do well, doing proper research, trying
to keep up to date, trying to meet the needs of a wide variety of
readers.&lt;/p&gt;

&lt;p&gt;Over the past several years, I have had a sense that the Linux
man pages were becoming more complete, with a growing body of
precise and nuanced detail.  At some point, I became aware that
it was Michael Kerrisk&apos;s fine work that I was appreciating, as
he built substantially on the fine base provided by the previous
maintainers Rik Faith and Andries Brouwer.&lt;/p&gt;

&lt;p&gt;Michael Kerrisk then picked up the task of writing a book to
cover similar material as &lt;i&gt;Linux Application Development&lt;/i&gt;,
but in both greater detail and extended scope.  His new work,
&lt;i&gt;&lt;a href=&quot;http://www.man7.org/tlpi/index.html&quot;&gt;The Linux
Programming Interface&lt;/a&gt;&lt;/i&gt;, has after long labor been
published, and it looks like it was worth the wait.  After reading
a few initial sample chapters (the preface, and chapters 2, 9,
and 30), I can say with great relief that it appears that Erik and
I do not need to prepare a third edition of &lt;i&gt;Linux Application
Development&lt;/i&gt; &amp;mdash; we can name TLPI as LAD&apos;s successor.  Erik
and I wrote LAD because it was the book we needed as a reference
that was not otherwise available.  That reason appears to be
dissipating.&lt;/p&gt;

&lt;p&gt;I&apos;m looking forward to reading the whole book after it arrives,
and reporting my impressions in more detail later!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Math, Amtrak Style</title>
<category term="/rants" />
<id>http://musings.danlj.org/2010/08/21/math_amtrak_style</id>
<updated>2010-08-22T03:00:50Z</updated>
<published>2010-08-22T03:00:50Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rants/math_amtrak_style.html" />
<content type="html">
&lt;p&gt;I had a page open to check the progress of an Amtrak train, so
that I could know when to pick up a passenger.  Not a lot of info
was available.  As of 8:30PM, it just said &quot;on time&quot; for 9:00PM
(though the timetable said 9:13PM instead of 9:00PM, just to keep
things interesting).&lt;/p&gt;

&lt;p&gt;I arrived at the station at 9:00PM to find out that the train
had arrived at 8:30PM.  When I returned home, I refreshed the page
from the Amtrak site, curious what it would say.  There were two
surprises.  The first was that it said that the train had actually
arrived at 8:40PM.  The second was how late the site said this
20-minutes-early train was.&lt;/p&gt;

&lt;img src=&quot;http://people.danlj.org/mkj/pictures/screenshots/amtrak-math.png&quot; width=&quot;1108&quot; height=&quot;644&quot;/&gt;
</content>
</entry>

<entry>
<title type="html">Archos 7 Home Tablet: First Impressions</title>
<category term="/rants" />
<id>http://musings.danlj.org/2010/08/07/archos_7_home_tablet_first_impressions</id>
<updated>2010-08-07T15:47:35Z</updated>
<published>2010-08-07T15:47:35Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rants/archos_7_home_tablet_first_impressions.html" />
<content type="html">
&lt;p&gt;In part because my children are perhaps not quite so careful with
CDs as I am, I ripped all my CDs (at least, all that will still read!)
to flac, ogg, and mp3 files.  The second half of the project was to
get a media player that could play all those files -- preferably over
the network from my main server so that I don&apos;t have to copy files onto
an SD card every time I get a new CD and rip it.&lt;/p&gt;

&lt;p&gt;When the Archos 7 Home Tablet was announced, it seemed like the
obvious thing to use.  WiFi to access the server.  Should play oggs
just fine.  I don&apos;t really care very much about whether it can
access the Android market, though the restrictions on the market
seem rather silly to me.&lt;/p&gt;

&lt;p&gt;After I downloaded &lt;a href=&quot;http://www.subsonic.org/&quot;&gt;Subsonic&lt;/a&gt;
and installed the server portion on my home server and the client on
my tablet, I had a working solution for audio.  While the default
RPM packaging for Subsonic is sub-optimal (making important directories
world readable/writable, for example) and this makes me convinced that
I would not want to expose a Subsonic server implementation to the
world, on my internal network I&apos;m fine with it, and it gives me all
the functionality I need to play my music collection on my home
stereo.  (The only problem is that for reasons I haven&apos;t researched,
I have to use mp3s instead of oggs, even though I can play ogg files
directly on the tablet.)&lt;/p&gt;

&lt;p&gt;However, I&apos;m not all that impressed with the Archos 7 Home Tablet.
As reported by others, the native browser crashes almost instantly
when you try to actually use it.  It rarely survives a google search
from the google search widget.  I&apos;m not impressed that Archos shipped
something this broken, and less impressed that Archos has not yet
released an updated firmware to resolve this issue, nor do they have
updates available in their proprietary &quot;applib&quot; for the malfunctioning
browser.  Using Dolphin Browser or Opera seems to be the only way to
use this tablet to browse the web.&lt;/p&gt;

&lt;p&gt;I&apos;m also not impressed that this late, they are still shipping an
Android 1.5 OS.&lt;/p&gt;

&lt;p&gt;Kindly, a &lt;a href=&quot;http://forum.archosfans.com/viewtopic.php?f=59&amp;t=34668&quot;&gt;
user has stepped up to the plate and delivered a firmware update&lt;/a&gt;
(shame on Archos for their lack of attention to this device!)
that resolves at least some issues.  So far, the browser hasn&apos;t
crashed for me after applying the update.  As a bonus, the
user-supplied firmware enables the Android Market on the device,
which made it a bit easier to get my apps back after wiping the
system as part of applying the update.&lt;/p&gt;

&lt;p&gt;It looks like there will soon be a whole crop of better tablet
devices coming out with similar hardware but newer versions of
Android.  In retrospect, if I could make my decision again, I
would wait and purchase a different tablet.  Maybe at
&lt;a href=&quot;http://www.androidguys.com/2010/07/26/7inch-gentouch78-tablet-kmart-150/&quot;&gt;Kmart&lt;/a&gt;, of all places...&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Responsible Disclosure is Responsible</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/07/21/responsible_disclosure_is_responsible</id>
<updated>2010-07-21T16:25:36Z</updated>
<published>2010-07-21T16:25:36Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/responsible_disclosure_is_responsible.html" />
<content type="html">
&lt;p&gt;The Google Security Team just
&lt;a href=&quot;http://googleonlinesecurity.blogspot.com/2010/07/rebooting-responsible-disclosure-focus.html&quot;&gt;posted
a blog entry&lt;/a&gt; attempting to restore meaning to &quot;responsible disclosure.&quot;
It is absolutely worth reading.&lt;/p&gt;

&lt;p&gt;As I see it, the phrase &quot;responsible disclosure&quot; has been stripped
of meaning by vendors who use it as an excuse not to prioritize their
customers&apos; computer security.  Irresponsible vendors have tried to make
&quot;responsible disclosure&quot; mean a one-sided arrangement in which vendors
get to set all the timelines for disclosure of all vulnerabilities.
This irresponsible attempt at redefinition is inevitably alienating &quot;white
hat&quot; software vulnerability researchers, as it creates a more
vulnerable software ecosystem.&lt;/p&gt;

&lt;p&gt;Fundamentally, &quot;responsible disclosure&quot; means that the researcher
makes a best effort to put the needs of the end user first.  When it
is reasonable to assume that the vulnerability is newly discovered,
it helps the end user to disclose first to the maintainer of the
software (whether that&apos;s a vendor or otherwise) first.  It also helps
the end user to give the maintainer time to fix it right so that the
vulnerability is really fixed and new vulnerabilities are not created.
But when the maintainer doesn&apos;t bother to give the vulnerability
priority, that just gives attackers more time to discover and make
use of the vulnerability to subvert the end users&apos; systems, which does
not serve the end users&apos; interests.&lt;/p&gt;

&lt;p&gt;When there is reason to think that a vulnerability is known outside
of the responsible security investigation community, it is clearly
responsible to immediately disclose at least enough information to allow
security-conscious end users secure their systems against attack.
It should also be noted that that is almost always enough information
to allow the unscrupulous to separately discover and make use of the
vulnerability, so in this case responsible handling of the security
flaw involves the maintainer making it a top priority to find an
immediate mitigation, even if further work is required (also at high
priority) to fully resolve the issue.&lt;/p&gt;

&lt;p&gt;Some have suggested that the &quot;responsible disclosure&quot; emperor
is wearing no clothes.  I disagree.  I think the problem is that
irresponsible vendors have substituted an unclothed mannequin for
the emperor, and are trying to pass off irresponsible handling of
vulnerabilities as &quot;responsible disclosure&quot;.&lt;/p&gt;

&lt;p&gt;Responsible disclosure must be, first of all, responsible, and the
responsibility is primarily to the end user.  Security disclosure that
primarily addresses vendor convenience is irresponsible.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Pleasant Surprises, Part 2</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/07/13/pleasant_surprises_part_2</id>
<updated>2010-07-13T13:05:46Z</updated>
<published>2010-07-13T13:05:46Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/pleasant_surprises_part_2.html" />
<content type="html">
&lt;p&gt;I &lt;a href=&quot;http://musings.danlj.org/raves/pleasant_surprises.html&quot;&gt;not
so recently mentioned that I was pleased with work that Jet City Devices
did to my wife&apos;s smartphone.&lt;/a&gt;  What I didn&apos;t know at the time was that
while the screen was no longer cracked, the touch sensor was not working
correctly; it was only occasionally registering touch on some parts of
the screen, at best.&lt;/p&gt;

&lt;p&gt;When my wife finally mentioned this to me, I mailed Matt at Jet City
Devices about the problem.  He gave me things to try to make sure it
wasn&apos;t software, and said if they didn&apos;t work, to send the phone back,
that it was a rare defect.&lt;/p&gt;

&lt;p&gt;It wasn&apos;t a software problem.  But instead of sending the phone
back, my wife just learned to use the d-pad to use most features
of the phone, until we were past Jet City Devices&apos;s 90-day warranty
on the fix.   Oops.&lt;/p&gt;

&lt;p&gt;I finally bought a cheap dumbphone (Motofone F3) for my wife so
that she would not have to be without a phone for a few days, and
I emailed Matt.  He didn&apos;t even bring up being past the warranty,
and told us to send in the phone and he&apos;d fix it.  He didn&apos;t realize
how long it had been, I think, so he didn&apos;t realize to give us his
new mailing address, as he had moved office.  My wife shipped off
the phone.  (Incidentally, she liked the Motofone F3; small, light,
relatively indestructible; I think if she didn&apos;t want google maps
and spreadsheets on her phone she would have stuck with the F3!)&lt;/p&gt;

&lt;p&gt;After a week and a half of not hearing anything, I mailed Matt again.
He worked out that the phone had been delivered to the new tenants of
his old space, drove over to his old space and picked up the phone from
the new tenants, fixed it, and had it back in the mail that day.&lt;/p&gt;

&lt;p&gt;As he promised, the touch sensor is now working.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Using OpenDNS</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/06/24/using_opendns</id>
<updated>2010-06-24T12:59:51Z</updated>
<published>2010-06-24T12:59:51Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/using_opendns.html" />
<content type="html">
&lt;p&gt;As my kids are starting to want to &quot;look for things on the internet&quot;, I started caring about what they might accidentally stumble onto, even in an appropriately supervised context.&lt;/p&gt;

&lt;p&gt;I had vaguely heard about &lt;a href=&quot;http://www.opendns.com/&quot;&gt;OpenDNS&lt;/a&gt; for some time, but had not really paid much attention to it.  A few relatively recent articles on using it to make an internet connection somewhat more &quot;family-friendly&quot; caught my attention, and I finally signed up for a free account to try it out.&lt;/p&gt;

&lt;p&gt;I have a local caching bind which forwarded to the nameservers that TWC provides to me (and to which I redirect all outgoing nameserver traffic via firewall rules), and I really haven&apos;t noticed nameservice being slow, so the &quot;speed up your internet&quot; advertising from OpenDNS wasn&apos;t ringing true.  But the ability to filter out the worst of the sites dedicated to things that I think don&apos;t have a place in my home was interesting.  So I signed up for a free account, changed a few lines in my bind configuration, and packaged and installed ddclient according to OpenDNS&apos;s instructions so that OpenDNS will continue to associate my home network with my home network settings on those rare occasions when my IP changes.&lt;/p&gt;

&lt;p&gt;We weren&apos;t seeing lots of questionable content before the switch, so the fact that we&apos;ve seen a total of two sites blocked since we signed up for the service is fine.  It says that I can establish what I think are reasonable controls and it won&apos;t get in the way of normal activities.&lt;/p&gt;

&lt;p&gt;Purely because I appreciate the service (I don&apos;t really care very much about saving statistics for longer), I signed up for a paid account.  This service seems to me to be worth the $9.95/year.&lt;/p&gt;

&lt;p&gt;A few days ago, OpenDNS rolled out a new free service called &lt;a href=&quot;http://www.opendns.com/familyshield/&quot;&gt;FamilyShield&lt;/a&gt; -- you can use a pre-configured set of filters without setting up any account at all merely by using 208.67.222.123 and 208.67.220.123 as your DNS servers (they include detailed instructions for how to do this on many different OS variants).  This is exactly the same thing you&apos;d get by signing up for their service and enabling the same set of filters for your account, so it&apos;s easy enough to upgrade to their free service if you want to customize the filters -- you just sign up for a free account, change the IP address you use for the resolvers, choose the filters you want, associate your IP address with your account, and (if you, like most people, have a dynamic IP) set up one of the many dynamic DNS clients available (they list several) to keep that association up to date.&lt;/p&gt;

&lt;p&gt;I&apos;m just a satisfied customer.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Pleasant Surprises</title>
<category term="/raves" />
<id>http://musings.danlj.org/2010/02/22/pleasant_surprises</id>
<updated>2010-02-23T03:50:09Z</updated>
<published>2010-02-23T03:50:09Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/pleasant_surprises.html" />
<content type="html">
&lt;p&gt;My wife found her smartphone screen cracked recently.  AT&amp;amp;T told her to suck it up and buy a new phone, and the local independent shop couldn&apos;t fix her phone.  I had a great deal of trepidation about sending the phone off to some random place I googled, but in the end sent it off to &lt;a href=&quot;http://www.jetcitydevices.com/&quot;&gt;Jet City Devices&lt;/a&gt; in Seattle.&lt;/p&gt;

&lt;p&gt;They turned the repair in about an hour from the phone&apos;s arrival on a Saturday (!) afternoon, and had it back in the mail same day, so that it arrived back in North Carolina on Monday with a new screen.&lt;/p&gt;

&lt;p&gt;Good Work!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Nice &quot;work&quot; if you can get it...</title>
<category term="/rants" />
<id>http://musings.danlj.org/2009/06/15/nice_work_if_you_can_get_it</id>
<updated>2009-06-15T18:20:56Z</updated>
<published>2009-06-15T18:20:56Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rants/nice_work_if_you_can_get_it.html" />
<content type="html">
&lt;p&gt;At the post office, I found myself writing a bit of a pastiche of an old classic:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Passport Hours: 10:30-4:30&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Nice work hours if you can get &apos;em&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;NOTICE: TO SERVE YOU BETTER, PASSPORT SERVICE IS NOW BY APPOINTMENT ONLY&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;And you can work less, if you try!&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;1:40 PM:&lt;/p&gt;

&lt;p&gt;Applicant has been waiting since around 1:30 PM, occasionally ringing doorbell.&lt;/p&gt;

&lt;p&gt;Postal Service Employee (annoyed, poking head around door she is holding mostly closed): When&apos;s your appointment?&lt;/p&gt;

&lt;p&gt;Applicant: My appointment was at 1:30, Ma&apos;am&lt;/p&gt;

&lt;p&gt;Postal Service Employee (even more annoyed): Can&apos;t be at this post office.  You must be at the wrong post office.  I have lunch from 1 to 2.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Suddenly, I find myself thinking that privatizing postal service might be a good idea after all.  Also, putting the phrase &quot;to serve you better&quot; on a sign or form should be a federal offense, publishable by standing in line at a post office for 10 years.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Eschew Obfuscation</title>
<category term="/words" />
<id>http://musings.danlj.org/2008/10/22/eschew_obfuscation</id>
<updated>2008-10-23T00:59:48Z</updated>
<published>2008-10-23T00:59:48Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/words/eschew_obfuscation.html" />
<content type="html">
&lt;p&gt;My favorite part of &lt;a href=&quot;http://www.theatlantic.com/&quot;&gt;The Atlantic&lt;/a&gt; is generally the &lt;a href=&quot;http://barbarawallraff.theatlantic.com/&quot;&gt;&lt;i&gt;Word Fugitives&lt;/i&gt;&lt;/a&gt; section of Barbara Wallraff&apos;s &lt;i&gt;In a Word&lt;/i&gt;.  There are always several well-considered, generally balanced, and certainly thought-provoking articles in The Atlantic, but for sheer linguistic fun I have to read the last page first.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.theatlantic.com/doc/200807/word-fugitives&quot;&gt;July/August Word Fugitives&lt;/a&gt; feature had a request:&lt;/p&gt;
&lt;blockquote&gt;
And&lt;b&gt; Curtis L. Brown&lt;/b&gt;, of Neenah, Wis., writes, &amp;#8220;Please help me find an appropriate word for the aversion of many persons (young or old) to revealing their true age.&amp;#8221;
&lt;/blockquote&gt;

&lt;p&gt;I immediately &lt;a href=&quot;http://www.google.com/search?q=annumadversion&quot;&gt;googled &amp;#8220;annumadversion&amp;#8221;&lt;/a&gt; thinking that it was such an obvious coinage that someone else on the internet must have used it, but other than a helpful suggestion that perhaps I meant to &amp;#8220;&lt;a href=&quot;http://www.google.com/search?q=animadversion&quot;&gt;...search for: &lt;i&gt;animadversion,&lt;/i&gt;&lt;/a&gt;&amp;#8221; google was silent.&lt;/p&gt;

&lt;p&gt;Hardly daring to hope that I could be the first to think of this coinage, I quickly submitted my answer to The Atlantic&apos;s web site.  I felt some faint hope for a mention, and was impatient to discover which truly great coinage would cop &quot;top honors&quot; in a later issue.&lt;/p&gt;

&lt;p&gt;Today, I picked up the November 2008 issue, and, as usual, I flipped to the back to read my favorite feature.  &lt;a href=&quot;http://www.theatlantic.com/doc/200811/in-a-word&quot;&gt;&lt;i&gt;In a Word&lt;/i&gt;&lt;/a&gt; started with a rehash of the familiar (and I thought discredited) suggestion that the &amp;#8220;average college graduate is familiar with about 75,000 words&amp;#8221; and ended up quoting Strunk and White: &amp;#8220;Avoid fancy words.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Moving on to &lt;i&gt;Word Fugitives,&lt;/i&gt; I discovered that most of the suggestions were funny but snarky: those shy of revealing their age are &amp;#8220;&lt;i&gt;egostatistical&lt;/i&gt;&amp;#8221; &amp;#8220;&lt;i&gt;chronic liars&lt;/i&gt;&amp;#8221; who commit &amp;#8220;&lt;i&gt;cosmetic perjury&lt;/i&gt;&amp;#8221;.  Imagine my delight as I read:&lt;/p&gt;
&lt;blockquote&gt;
But we wanted a word for the tendency&amp;mdash;the aversion.  Michael K. Johnson, of Apex, N.C., takes top honors for his fancy but refreshingly nonjudgmental coinage &lt;i&gt;annumadversion.&lt;/i&gt;
&lt;/blockquote&gt;

&lt;p&gt;That made my day.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Review: The Graveyard Book</title>
<category term="/words" />
<id>http://musings.danlj.org/2008/09/29/the_graveyard_book</id>
<updated>2008-09-30T03:03:20Z</updated>
<published>2008-09-30T03:03:20Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/words/the_graveyard_book.html" />
<content type="html">
&lt;p&gt;A Christmas gift some years ago of &lt;a href=&quot;http://www.neilgaiman.com/works/Comics/Sandman%3A+The+Dream+Hunters/&quot;&gt;&lt;i&gt;The Dream Hunters&lt;/i&gt;&lt;/a&gt; introduced me to &lt;a href=&quot;http://www.neilgaiman.com/&quot;&gt;Neil Gaiman&lt;/a&gt;&apos;s work.  As an amateur of folk tales, I was entranced and delighted by the beauty and craft of &lt;i&gt;The Dream Hunters&lt;/i&gt;, and then started reading earlier works in the Sandman series; my introduction to the graphic novel.  &lt;a href=&quot;http://www.neilgaiman.com/works/Books/Neverwhere/&quot;&gt;&lt;i&gt;Neverwhere&lt;/i&gt;&lt;/a&gt; and &lt;a href=&quot;http://www.neilgaiman.com/works/Books/Stardust/&quot;&gt;&lt;i&gt;Stardust&lt;/i&gt;&lt;/a&gt; next captured my attention, followed quickly by most of the rest of &lt;a href=&quot;http://www.neilgaiman.com/works/Books/&quot;&gt;Gaiman&apos;s books&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In my second and third readings of &lt;i&gt;Stardust&lt;/i&gt;, I grew conscious of one of the characteristics of Gaiman&apos;s works that I find deeply satisfying: What I first saw as &quot;loose threads&quot; were actually precisely woven through the text.&lt;/p&gt;

&lt;p&gt;For many authors, it appears to me that internal structural integrity is achieved in a tradeoff against narrative flow; or, more often, that narrative flow is achieved by ruthlessly discarding internal structural integrity.  Speaking as an engineer, this is a reasonable tradeoff, since most readers seem not to care about structural integrity.  But internal inconsistencies drive me up the wall even when perpetrated by my favorite authors.  (I have read &amp;mdash; and own and love &amp;mdash; dozens of C. S. Lewis&apos;s books, but try piecing together the chronology of Narnia!)&lt;/p&gt;

&lt;p&gt;Gaiman is in a delightful but rare class of writers who have the means and inclination to combine compelling narrative with extraordinary structural integrity.  I consider Dorthy L. Sayers, J. R. R. Tolkien, and Rudyard Kipling well-known exemplars.  Each time I re-read most of their published works, I generally notice additional internal consistency, rather than become annoyed by discovering small inconsistencies.  This adds delight to re-reading, and helps me slow down while I read, increasing my joy in reading.  A virtuous cycle.&lt;/p&gt;

&lt;p&gt;Imagine, then, my delight to receive a copy of Gaiman&apos;s &lt;a href=&quot;http://www.neilgaiman.com/works/Books/The+Graveyard+Book/&quot;&gt;The Graveyard Book&lt;/a&gt;.  I paid almost no attention to the title, as usual.  I dove in and read the whole book, rudely ignoring everyone around me for hours.  As I finished it, I took a deep breath of satisfaction, leaned back in my seat, and said to myself, &quot;Wow.  &lt;a href=&quot;http://www.gutenberg.org/etext/236&quot;&gt;&lt;i&gt;The Jungle Book&lt;/i&gt;&lt;/a&gt;, set in a graveyard...  &lt;i&gt;Oh.&lt;/i&gt;&quot;  I am a little slow on the uptake, I guess.&lt;/p&gt;

&lt;p&gt;Like several of Gaiman&apos;s other works, you probably won&apos;t like it if you are squeamish.  There is Death, and Blood, and Violence, and even War.  It differs from prime time television news in three ways: it involves magic, it tells of creatures that are literally rather than figuratively inhuman, and it is well worth your time.&lt;/p&gt;

&lt;p&gt;Several readers of advanced copies have complained that &lt;i&gt;The Graveyard Book&lt;/i&gt; is episodic; almost a collection of short stories.  That complaint misses the point in several respects.  The first is that Gaiman is a master of the short story; a few words tell a long story.  The second is that this story is particularly well-suited to this presentation.  It is short enough not to scare away a (say) middle school reader &amp;mdash; good!  If you want the story to last longer, &lt;i&gt;read slower!&lt;/i&gt;  True to form, Gaiman&apos;s narrative and construction reward careful reading.  Finally, this book, in this form, is an homage to another great work worth re-reading, and worth reading out loud.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.com/Graveyard-Book-Neil-Gaiman/dp/0060530928/ref=ed_oe_h&quot;&gt;Amazon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://search.barnesandnoble.com/Graveyard-Book/Neil-Gaiman/e/9780060530921&quot;&gt;Barnes and Noble&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
</entry>

<entry>
<title type="html">Living with tabs: Tree Style Tab</title>
<category term="/raves" />
<id>http://musings.danlj.org/2008/07/03/tree_style_tabs</id>
<updated>2008-07-03T19:08:12Z</updated>
<published>2008-07-03T19:08:12Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/raves/tree_style_tabs.html" />
<content type="html">
&lt;p&gt;I used to use the galeon web browser.  I got used to having tabs on the right side of my browser; I can have lots of tabs and read what is in them.  This works in part because I devote one workspace entirely to a full-screen browser.&lt;/p&gt;

&lt;p&gt;When galeon maintenance ceased, I did not update until I found the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1343&quot;&gt;vertigo&lt;/a&gt; Firefox extension.  Then I stayed on Firefox 1.5.0.x until vertigo supported Firefox 2.  Now, I have been staying on Firefox 2 because vertigo does not support Firefox 3.  This is starting to feel familiar.&lt;/p&gt;

&lt;p&gt;Today, I found a mention of &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/5890&quot;&gt;Tree Style Tab&lt;/a&gt; as supported by Firefox 3.  Trying it out, I was pleasantly surprised; the configuration options are better, and I like the tree style where you can see which tabs were opened from other tabs (this can be disabled if you don&apos;t like that feature, though).&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">The Blue Screen Of Zombie</title>
<category term="/rants" />
<id>http://musings.danlj.org/2008/04/14/blue_screen_of_zombie</id>
<updated>2008-04-14T13:18:20Z</updated>
<published>2008-04-14T13:18:20Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rants/blue_screen_of_zombie.html" />
<content type="html">
&lt;p&gt;I have a dual-boot system that, on rare occasions, finds itself running windows.  It used to be limited to taxes and GPS database programming, but now it is limited to taxes, GPS database programming, and logitech harmony programming.&lt;/p&gt;

&lt;p&gt;Since I so rarely run windows, I keep forgetting or repressing how hard it is to use, and how easily it breaks, catastrophically.  I rant loudly whenever things break under Linux about how unacceptable it is.&lt;/p&gt;

&lt;p&gt;I just went through the exercise of doing my taxes in turbotax.  It occasionally went unresponsive or would simply quit displaying some of its user interface elements, but a restart would bring it back.  Once turbotax disappeared entirely right in the middle of using it.  (Oh, that&apos;s why it auto-saves so often.  I guess they expect that.)&lt;/p&gt;

&lt;p&gt;Then I wanted to print some forms.  Of course, I don&apos;t have a printer connected, so I figured I&apos;d just print a PDF (or postscript, that would be OK too) and print it later.&lt;/p&gt;

&lt;p&gt;Half an hour later, muttering, I went downstairs to plug my computer into the laserjet.  It&apos;s an HP LaserJet 1320 -- supports PCL6 and Postscript, has USB, and has been trivially supported under Linux for years.  I figured I&apos;d just move the USB cable temporarily to the machine running windows.&lt;/p&gt;

&lt;p&gt;Or maybe not.&lt;/p&gt;

&lt;p&gt;I tried letting windows try to install the driver automatically.  Several times.  Then I went to the HP web site, and downloaded three different drivers to try (no help from HP on which drivers to use).  None of them worked.  I finally, in desperation, found the CD that shipped with the printer.  No luck.  An hour and twenty minutes later, you&apos;d think that at least I&apos;d still have a working system, even if I couldn&apos;t print the tax forms.&lt;/p&gt;

&lt;p&gt;I remember jokes about suspend/resume from years ago: &quot;My laptop suspends fine, it&apos;s just resume that doesn&apos;t work so well.&quot;  Unfortunately, after these attempts to get printing working, the system no longer shuts down.  It just hangs indefinitely with nothing displayed on a blue background.   The only way to get it to shut down is to hold the power button down until the hardware timeout passes and the system is forcibly shut down.  It&apos;s not the &quot;blue screen of death&quot; -- it&apos;s the normal (for me) blue background shown during shutdown, it just never goes away.  Call it the &quot;blue screen of zombie&quot;, I guess.&lt;/p&gt;

&lt;p&gt;Of course, setting this printer up under Linux took all of about one minute some years ago, and it has worked flawlessly ever since.&lt;/p&gt;

&lt;p&gt;And no, I&apos;m not crazy enough to be running vista with all its performance and driver problems.  This is a recent XP install as shipped on a thinkpad.&lt;/p&gt;

&lt;p&gt;Afer all that trouble, I find (back on my trusty Linux system) that the IRS site has the form in PDF, that it is a fillable PDF, and that evince can fill it in.  This will take all of a couple minutes; I don&apos;t even have to use a pen except to sign the form.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Mercurial hits long-awaited 1.0</title>
<category term="/rPath" />
<id>http://musings.danlj.org/2008/03/25/mercurial_hits_1_0</id>
<updated>2008-03-25T19:14:24Z</updated>
<published>2008-03-25T19:14:24Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rPath/mercurial_hits_1_0.html" />
<content type="html">
&lt;p&gt;In my first-ever entry in this blog, on the 9th of November 2005, I wrote that &lt;a href=&quot;/rPath/moving_to_mercurial.html&quot;&gt;Conary was moving to Mercurial for source code control.&lt;/a&gt;  This conversion was a big success.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today, I&apos;m happy to spread the news that &lt;a href=&quot;http://www.selenic.com/pipermail/mercurial/2008-March/018014.html&quot;&gt;Mercurial 1.0 has finally been released.&lt;/a&gt;  We continue to be very pleased by our choice of source code control systems.  Continued development has made it even easier to use as well as more powerful, and new documentation has made it easy to introduce to others, including non-developers.  In particularly, I would like to highlight:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://hgbook.red-bean.com/hgbook.html&quot;&gt;Distributed revision control with Mercurial&lt;/a&gt;, the &quot;unofficial manual&quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ivy.fr/mercurial/ref/v1.0/Mercurial-Usage-v1.0.pdf&quot;&gt;Mercurial Usage&lt;/a&gt; &quot;cheat sheet&quot; that has enabled non-developers (documentation, marketing, product management, etc.) to use mercurial effectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mercurial community continues to be friendly to &quot;refugees&quot; from other source code control tools, and its use is becoming widespread.  Thanks again to everyone who has been involved in Mercurial development!  I can&apos;t wait to see what Mercurial looks like in another three years!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Michael&apos;s Crock Pot Candied Yams</title>
<category term="/food" />
<id>http://musings.danlj.org/2007/11/26/crock_pot_candied_yams</id>
<updated>2007-11-26T15:50:59Z</updated>
<published>2007-11-26T15:50:59Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/food/crock_pot_candied_yams.html" />
<content type="html">
&lt;p&gt;In order to resolve contention for oven space, I made up a new recipe this year for one of my favorite thanksgiving dishes, utilizing the slow cooker (&quot;Crock Pot&quot;).  Since it came out far better than any other candied yam recipe I have tried, I thought I&apos;d share the recipe.&lt;/p&gt;

&lt;p&gt;Serves 8&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;yams or sweet potatoes (4 large or 8 small)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=0.5+cup+in+liters&quot;&gt;1/2 cup&lt;/a&gt; brown sugar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=0.5+cup+in+liters&quot;&gt;1/2 cup&lt;/a&gt; butter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=1+tsp+in+ml&quot;&gt;1 tsp&lt;/a&gt; cinnamon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=0.25+tsp+in+ml&quot;&gt;1/4 tsp&lt;/a&gt; nutmeg&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=0.25+tsp+in+ml&quot;&gt;1/4 tsp&lt;/a&gt; vanilla&lt;/li&gt;
&lt;li&gt;1 bag marshmallows (large marshmallows preferred)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All amounts approximate.&lt;/p&gt;

&lt;p&gt;Peel sweet potatoes (ruby &quot;yams&quot;, if you can get them; henceforward called &quot;yams&quot; because that&apos;s what I grew up with), and slice approximately &lt;a href=&quot;http://www.google.com/search?q=0.5+inch+in+cm&quot;&gt;1/2 inch&lt;/a&gt; thick.  Mix brown sugar with cinnamon and nutmeg; alter proportions to taste.  Layer peeled sliced sweet potatoes with crumbled brown sugar mix. When layering, fill large voids between slices in each layer with smaller pieces of yam, and stagger the layers to avoid holes from top to bottom, to ensure that the butter cooks into the yams.  Dot the top very liberally with butter (or substitute).  Optionally, mix the butter with the remaining brown sugar mixture (add more brown sugar if necessary) and dot with the butter/sugar mixture.  Add vanilla.&lt;/p&gt;

&lt;p&gt;Cook on low for 6-7 hours without ever removing the lid.  The sugar on top of the top layer of yams will caramelize.&lt;/p&gt;

&lt;p&gt;Remove liner from heating element.  Top potatoes with marshmallows.  Broil with marshmallows at least &lt;a href=&quot;http://www.google.com/search?q=6+inches+in+cm&quot;&gt;6 inches&lt;/a&gt; below broiler element until marshmallows are brown and puffy, about 4-5 minutes.  (If marshmallows are too close to the broiler element, they will brown unevenly.)&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Scary Halloween: A Public Service Announcement</title>
<category term="/psa" />
<id>http://musings.danlj.org/2007/11/01/scary_halloween_psa</id>
<updated>2007-11-01T21:46:02Z</updated>
<published>2007-11-01T21:46:02Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/psa/scary_halloween_psa.html" />
<content type="html">
&lt;p&gt;My wife and I had everything planned for Halloween; I would take the girls trick-or-treating and she would hold down the fort.  My first hint that the evening might take an unexpected turn was when she called to mention that she smelled something funny, and she thought that this time it probably was natural gas, not a stale dishrag like last time.  I was skeptical, until she called me a few hours later to say that the smell was a lot stronger in the (gas) furnace room, that the kids were buckled into the car, and that I was going to be coming home to deal with this while she and the kids went to supper.&lt;/p&gt;

&lt;p&gt;She was right.  The smell was obvious.  Being a hands-on kind of guy, I decided to investigate this myself.  I made some soapy water and spread it on the place I thought was most likely to be leaking: a set of pipes around the main stepdown regulator.  After half an hour or so of unfruitful exploration, I grew a clue, gave up, turned off gas to the whole house at the meter, and called in the gas company (PSNC).&lt;/p&gt;

&lt;p&gt;I learned two new things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you just &lt;strong&gt;think&lt;/strong&gt; you smell gas, they do not charge to come investigate, and they treat it as an emergency, even if you tell them that you have already turned off the gas at the meter.  I don&apos;t know if that is true for every gas company, but it was true for PSNC.&lt;/li&gt;
&lt;li&gt;This is the time of year to pay attention to your nose when you think you might possibly smell a gas leak.  More on that later...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The technician called me to apologize for having to finish up one emergency call before coming to handle my emergency.  Not a problem!  He arrived just after the first trick-or-treaters came by.  He &quot;clocked&quot; the leak by marking and watching the meter with no appliances running, and I got my first indication that this was not trivial when after only a minute his eyebrows went up and he said, &quot;Oh, that&apos;s really leaking!&quot;  I was gratified to see that the first thing he tested in the house was the exact same place I had started looking, but no bubbles showed up with his soap either.&lt;/p&gt;

&lt;p&gt;The investigation continued for something like an hour and a half.  We pulled out suspended ceiling.  We turned different parts of the system on and off.  Finally, he started putting high-pressure air into different parts of the system -- and in the first place that both of us had looked, bubbles started forming as a joint started hissing.  The leak was found!&lt;/p&gt;

&lt;p&gt;Unfortunately, when the contractors (Yellow Dot, as far as I can tell) installed the gas lines in our house, they hadn&apos;t followed code.  And the Wake County inspector didn&apos;t call them on it.  There was no union joint to make it easy to fix the leak.  So instead of the technician turning his wrench a few more turns and swabbing on some more joint compound, I paid for an hour of overtime to do the fix right and bring the house into compliance with code.  A small price to pay for a fixed gas leak right away, and hot water in the morning!  When he was done, the meter didn&apos;t budge during a 20-minute test, whereas before it had moved perceptibly within a minute.&lt;/p&gt;

&lt;p&gt;The technician explained to me that when the weather gets cold, they inject a lot more mercaptin oderant into the natural gas supply to make it more likely that people will discover leaks in time to fix them before they cause trouble.  He said it makes for more repair calls as the cold weather starts -- and they really don&apos;t mind...&lt;/p&gt;

&lt;p&gt;The fast response, the thorough investigation, and the quality fix done quickly and correctly made me feel good about paying the gas bill.  As a bonus, while he was doing all this investigation and repair, he was assiduous about wiping off his feet to keep the carpet clean and closing the doors to keep out mosquitoes.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">MUGged!</title>
<category term="/rPath" />
<id>http://musings.danlj.org/2007/09/12/mugged</id>
<updated>2007-09-12T16:50:37Z</updated>
<published>2007-09-12T16:50:37Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rPath/mugged.html" />
<content type="html">
&lt;p&gt;&lt;a href=&quot;http://ken.vandine.org/&quot;&gt;Ken VanDine&lt;/a&gt; and I flew up to the Detroit area yesterday to give a talk last night at the &lt;a href=&quot;http://www.mug.org/&quot;&gt;Michigan!/usr/group&lt;/a&gt;.  As you can probably tell from the UUCP-inspired name of the group, it has been around for a while -- at 21 years old, it&apos;s old enough to drink!&lt;/p&gt;

&lt;p&gt;They have a good venue for technical talks -- in particular, working internet access is available (wired and wireless), so we were able to do live demos of the &lt;a href=&quot;http://www.rpath.com/tour/?tour=mediawiki&quot;&gt;MediaWiki Appliance Experience&lt;/a&gt; and &lt;a href=&quot;http://www.rpath.com/rbuilder/&quot;&gt;rBuilder Online&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This was my first experience using the &lt;a href=&quot;http://meyerweb.com/eric/tools/s5/&quot;&gt;S5 web-based slideware&lt;/a&gt; for a presentation.  Upside: it&apos;s easy to &lt;a href=&quot;http://people.rpath.com/~johnsonm/mug2007/&quot;&gt;post the slides&lt;/a&gt; on a website; you can even let internet-connected attendees view the slides on their own system, so they can review as you go along.  Downside: it&apos;s &lt;strong&gt;slow&lt;/strong&gt;.  With the on-demand scheduler disabled and the CPU running at full speed for best performance, it still took about a second to display the next slide.  Maybe the audience appreciated the fact that I occasionally stopped talking for a second, but it felt awkward to me.&lt;/p&gt;

&lt;p&gt;I have added a &lt;a href=&quot;http://people.rpath.com/~johnsonm/mug2007/&quot;&gt;link to the slides&lt;/a&gt; on the &lt;a href=&quot;http://wiki.rpath.com/wiki/Conary:Presentations_and_Whitepapers&quot;&gt;Conary:Presentations&lt;/a&gt; page.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Adventures in LVM2</title>
<category term="/psa" />
<id>http://musings.danlj.org/2006/10/16/adventures_in_lvm2</id>
<updated>2006-10-16T22:11:03Z</updated>
<published>2006-10-16T22:11:03Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/psa/adventures_in_lvm2.html" />
<content type="html">
&lt;p&gt;I&apos;ve been an old-school die-hard gimme-those-old-time-primary-partitions kind of geek for a long time now.  Even extended partitions bother me, especially when partial drive failure makes otherwise unaffected partitions disappear.  So while the flexibility that LVM provides was enticing, I was frankly a little uncomfortable putting LVM on my system, especially after a hard drive crash.&lt;/p&gt;

&lt;p&gt;Some months ago (I really don&apos;t remember exactly when), I experienced a third drive failure on my old PATA-backed RAID1 array on my home system.  I then discovered that Linux software raid has the ability to grow the device, and so I switched to larger SATA devices merely by adding the SATA devices to the RAID1, waiting for resync, removing the remaining functional PATA device, and then growing the new RAID1.  Impressive and convenient, all except that installing grub by hand on Linux software RAID1 is still not an unadulterated pleasure.&lt;/p&gt;

&lt;p&gt;While recovering from my most recent hard drive crash onto a temporary drive, I set up some filesystems on LVM, I seem to recall because at least one of the filesystems was likely to grow to require some unknown amount of disk space.  I then ordered a larger drive to move my data onto.  After the new drive arrived, I discovered the &lt;tt&gt;pvmove&lt;/tt&gt; program and was very impressed that I should be able to add another physical volume to a volume group, then cause all the logical volumes in that group to be migrated from the temporary drive to the new physical volume.  Google then helped me interpret the error message that I got, and &lt;tt&gt;modprobe dm-mirror&lt;/tt&gt; got &lt;tt&gt;pvmove&lt;/tt&gt; working.  As I watched the output of &lt;tt&gt;pvmove -v /dev/hdc4&lt;/tt&gt; scroll past, telling me percent complete every 15 seconds and occasionally informing me that it had checkpointed progress in case my system were to halt before progress was finished, I wandered around the office telling everyone about how cool LVM was.&lt;/p&gt;

&lt;p&gt;Not merely pride, but also enthusiasm goeth before a fall.  I was in a hurry to remove /dev/hdc from my system and use only my new /dev/hda4 physical volume.  Lost in a twisty maze of lvm utilities, all slightly different, I tried to remove the /dev/hdc4 physical volume.  I ran &lt;tt&gt;pvremove /dev/hdc4&lt;/tt&gt; and had the command tell me that it wouldn&apos;t succeed until I ran it with the &lt;tt&gt;-ff&lt;/tt&gt; argument.  By now, I was conditioned that LVM occasionally asks for confirmation of remotely-possibly-dangerous actions, and so just hit up-arrow, added &lt;tt&gt;-ff&lt;/tt&gt;, and hit &lt;tt&gt;y&lt;/tt&gt; to accept.  Of course removing a physical volume is a little dangerous, but I knew I wanted to do it, and I had run &lt;tt&gt;pvdisplay&lt;/tt&gt; first to ensure that the volume was empty.  I removed the temporary drive and rebooted.&lt;/p&gt;

&lt;p&gt;The LVM-savvy are shaking their heads now.  Of course, I should have guessed that I would have to run &lt;tt&gt;vgreduce&lt;/tt&gt; first.  And, indeed, all the data that I had copied over -- my home directory, my development environment, everything except the root partition -- was now inaccessible, and /dev/hdc4 lived on as a phantom.  The LVM commands complained about a missing uuid, and the solution wasn&apos;t immediately obvious.  &quot;I lost my /home!&quot; I cried, prompting anxious questions among my colleagues as to whether I had started to forward some of my more salacious spam to my wife.  After about 5 minutes of careful (&lt;tt&gt;pvdisplay&lt;/tt&gt; made it clear that space on my /dev/hda4 LVM partition was still reserved by &lt;b&gt;something&lt;/b&gt;) experimentation (and no despair; I had just completed a current backup before starting the whole process), I resorted to reading the lvm man pages, one by one, until I understood the problem and the solution.&lt;/p&gt;

&lt;p&gt;First of all, the fact that I couldn&apos;t get at my data was (perversely enough) a good thing.  It was because LVM was being conservative.  It didn&apos;t have all the physical volumes (as identified by UUIDs) required to complete the volume group, and so it was possible that the logical volumes were incompete.  Trying to mount or otherwise manipulate a potentially incompete logical volume could be a disaster, so I&apos;m glad LVM tried to protect me from my own stupidity.  It was preserving my data.&lt;/p&gt;

&lt;p&gt;The solution to the problem I had created was to run &lt;tt&gt;vgreduce&lt;/tt&gt; (the same program that I should have run in the first place, had I only known) with the &lt;tt&gt;--removemissing&lt;/tt&gt; option, because I knew that all data had been migrated off the physical volume I had removed from the system: &lt;tt&gt;vgreduce --removemissing vg0&lt;/tt&gt; rendered my data accessible again.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Moving to Mercurial</title>
<category term="/rPath" />
<id>http://musings.danlj.org/2005/11/09/moving_to_mercurial</id>
<updated>2005-11-09T10:12:25Z</updated>
<published>2005-11-09T10:12:25Z</published>
<link rel="alternate" type="text/html" href="http://musings.danlj.org/rPath/moving_to_mercurial.html" />
<content type="html">
&lt;p&gt;Before we ever announced Conary, we tried converting from CVS to
Subversion.  We were not happy; the conversion wasn&apos;t great, but much worse
was the corruption in the db back end (I know there&apos;s a filesystem back end
now); we decided that we could live with CVS at that point, and that it just
wasn&apos;t worth the trouble to change.  I understand that Subversion has improved
since then, but one of the things we decided was that if we were going to
change, we really wanted to move to something that allowed disconnected
operation (for those cross-continental plane flights...).&lt;/p&gt;

&lt;p&gt;A few months later, I think shortly after we announced Conary publicly, we
tried migrating to Arch (tla).  The conversion was incredibly slow, and we
still weren&apos;t happy.  Not saying anything bad about Arch, either; we just
weren&apos;t happy with it in our environment and with our practices.  I don&apos;t even
remember now all the things that we didn&apos;t like about it well over a year
ago.&lt;/p&gt;

&lt;p&gt;When Bitkeeper took away the &quot;free beer&quot; bk licenses for Linux kernel
development, two projects started at the same time: &lt;a
href=&quot;http://kernel.org/pub/software/scm/git/&quot;&gt;git&lt;/a&gt; and &lt;a
href=&quot;http://www.selenic.com/mercurial/&quot;&gt;Mercurial&lt;/a&gt;.  I was particularly
impressed with the approach that Mercurial took, not only from a technical
perspective, but also from a social perspective.  Mercurial developers quickly
set up a wiki that contained enough information that someone who was not
already familiar with the general distributed disconnected changeset-oriented
version control model could quickly become productive with mercurial.  From a
technical side, its repositories are about a tenth the size of git
repositories, it&apos;s implemented in Python with a few small C extensions (sounds
familiar!), and it enables web browsing of archives &quot;out of the box&quot;.&lt;/p&gt;

&lt;p&gt;So in August, I learned how to convert CVS archives to Mercurial archives
(and wrote more detailed information on the process for the Mercurial wiki)
and did a sample conversion of Conary&apos;s CVS archive to Mercurial.  It had a
few rough edges, but it basically worked.  I packaged up the new 0.7 release
of Mercurial, but we weren&apos;t really interested in moving version control
systems right at that moment; there was no pressing need to spend time on it,
and not everyone was convinced that Mercurial was ready for the job quite
yet.&lt;/p&gt;

&lt;p&gt;Yesterday, we ended up with a namespace conflict between anaconda and
conary that unexpectedly required us to completely rearrange where Conary put
its files.  Suddenly, a version control system that handles file renames
became a critical priority instead of a would-be-nice-someday thing.  I found
out that things had changed so that my conversion process didn&apos;t work, so I
had to learn what to do and change my Mercurial wiki writeup of how to
convert, and ended up doing two full conversions before we had done it right.
Then there was the matter of infrastructure, things like setting up commit
messages.  I was very motivated to fix that, because until I fixed it, I had
to manually generate all commit messages!  By 2:30 this morning, things were
finally sufficiently functional for me to go to sleep.&lt;/p&gt;

&lt;p&gt;Mercurial is going to change our development process, and I&apos;m sure we&apos;ll
have some bumps in the road, but it&apos;s also going to make some things a lot
easier, and despite lack of sleep I&apos;m excited about this new model.&lt;/p&gt;
</content>
</entry>
</feed>

