<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>jaegerfesting</title>
		<link>http://jaeger.festing.org/changelog/</link>
		<description>Random content from a hacker in Longmont, Colorado. I still claim Boulder as my home.</description>
		<copyright>Copyright 1999-2010 Theodore Logan</copyright>
		<language>en-us</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<item>
			<title>Soundtrack</title>
			<link>http://jaeger.festing.org/changelog/1298.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1298.html</guid>
			<pubDate>Sat, 06 Mar 2010 12:27:12 -0700</pubDate>
			<description><![CDATA[<p>
All adventures need soundtracks, though shorter adventures can often
make do with a theme song. There's no way a theme song would work for my
now-underway trip to India, so I spent some quality time going through
my music library assembling a playlist. I started with theme songs for
each city or town I'll visit, and filled in music to set the mood,
creating a two-and-a-half-hour version of my ten-day trip. The playlist:
</p>

<ol>
<li>Eve6: "Rescue" (theme song for driving to the airport)</li>
<li>Death Cab for Cutie: "I will possess your heart"</li>
<li>Moby: "We are all made of stars"</li>
<li>The Decemberists: "Sleepless"</li>
<li>Enigma: "Mea culpa part II (orthodox version)" (theme song for
Delhi)</li>
<li>Richard Strauss: "Also sprach Zarathusra"</li>
<li>The Beatles: "Love you too"</li>
<li>Paul McCartney: "Beautiful Night"</li>
<li>Yeah Yeah Yeahs: "Runaway"</li>
<li>Phoenix: "Love like a sunset (parts I and II)" (theme song for
Guwahati)</li>
<li>Yanni: "In the morning light"</li>
<li>Third Eye Blind: "The Background"</li>
<li>Enigma: "The child in us" (theme song for Bagendoba)</li>
<li>The New Pornographers: "Adventures in solitude"</li>
<li>Neutral Milk Hotel: "The king of carrot flowers (part I)"</li>
<li>TV on the Radio: "Shout me out"</li>
<li>Yeah Yeah Yeahs: "Hysteric"</li>
<li>U2: "Where the streets have no name"</li>
<li>The Beatles: "The long and winding road" (theme song for Hill Cart
Road)</li>
<li>Enigma: "Communion" (theme song for Darjeeling)</li>
<li>Heidi Enderson: "Reflections"</li>
<li>The Beatles: "Within you without you"</li>
<li>Claude Bolling: "Intime"</li>
<li>BT: "Content"</li>
<li>The Beatles: "Let it be"</li>
<li>"Clubbed to death", from the soundtrack for <i>The Matrix</i></li>
<li>Alanis Morissette: "Still"</li>
<li>U2: "City of Blinding Lights" (second theme song for Delhi)</li>
<li>Enigma: "Following the Sun" (theme song for my flight home)</li>
<li>Alanis Morissette: "Thank U"</li>
<li>BT: "Satellite"</li>
<li>Robert Miles: "Red Zone"</li>
</ol>

<p>
The playlist isn't perfect -- some of the cuts are more abrupt than they
should be, and I didn't spend any time trying to blend the transitions.
(Had I actually edited any of the tracks to fit the playlist, rather
than simply concatenating full songs, I would have chopped off the first
ten seconds of "We are all made of stars" and the end of "The child in
us".) Many of the songs on this list have deeper personal or historic
meanings; "Rescue" instantly became my road-trip anthem when I first
heard it in summer 2000, and my first experience with many of these
songs date from the Commune Era a decade ago. "Beautiful Night" may have
the strangest connection to India; I remember listening to <i>Flaming
Pie</i> in the summer of 1998 while playing Civilization II, with the
house closed and dark in the hot afternoon in a desperate attempt to
keep the summer heat at bay, and hearing news reports on NPR of India
and Pakistan's back-to-back nuclear tests as my mother prepared dinner.
</p>

<hr noshade>

<p>
I spent much of my free time this week working on the final preparations
for my trip. On Wednesday, I made one last stop at REI to pick up
chlorine dioxide water purification tablets, and beta-tested the tablets
on Thursday. The water could have been worse, but it failed to live up
to my high standards with its vague chemical taste. I figure if Willy
can handle self-chlorinated water I can probably handle it too. I did
laundry Thursday night and put Calvin to bed while Kiesa packed, then
packed my own clothing and went shopping on my shelves for paperbacks to
take for in-flight reading. On Friday, Kiesa and Calvin flew to Portland
to visit Kiesa's mother; they'll return home the day before I do. I
tried desperately to document my current state at work so my coworkers
can take care of things in my absence and I can recover my state when I
return. I bid my office farewell and headed home to finish packing and
watch <i>The Darjeeling Limited</i>, which may not resemble India in any
meaningful way, but it was amusing. I didn't get to bed as early as I
had hoped, and slept fitfully before my alarm finally woke me up.
</p>
]]></description>
		</item>
		<item>
			<title>Vacation Planning</title>
			<link>http://jaeger.festing.org/changelog/1297.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1297.html</guid>
			<pubDate>Sun, 21 Feb 2010 22:20:55 -0700</pubDate>
			<description><![CDATA[<p>
Having <a href="http://jaeger.festing.org/changelog/1274.html">acquired
a six-month tourist visa</a> last November and
<a href="http://jaeger.festing.org/changelog/1291.html">purchased my
plane ticket to India</a> last month, I spent much of my free time this
month nailing down the final details of my trip. Last week I bought two
domestic plane tickets to get me to and from north-eastern India (which
set off my credit card's fraud alert). I leave North America in less
than two weeks, on Saturday, 6 March, on a direct Chicago-to-Delhi
flight straight over the North Pole. I land in Delhi late at night
Sunday, after roughly fifteen hours in the air. I hang out at the
airport overnight and catch a two-hour mid-morning flight to Guwahati,
Assam. I meet Willy at the airport, pick up a SIM card for the unlocked
<a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16875205157">Nokia
E63</a> I just bought, and we head to the school he teaches at in
Bagendoba in the East Garo Hills region of Meghalaya. We spend Tuesday
at his school, while I try to quickly recover from flying halfway around
the world. On Wednesday we head back down into the Brahmaputra river
valley and catch a train for Silurgi, then head up Hill Cart Road to
Darjeeling. We see tea estates, stupas, museums, the
<a href="http://en.wikipedia.org/wiki/Darjeeling_Himalayan_Railway">Darjeeling
Himalayan Railway</a>, and mountains. On Sunday, we head back down the
mountain; Willy heads back to Bagendoba and I fly from Bagdogra to Delhi
(via Guwahati), then back home (via the North Pole and Chicago). I
arrive Monday morning, jet-lagged with a camera full of pictures and
enough adventure to last at least until summer.
</p>

<p>
At least, that's the plan. I also know that no plan survives contact
with the enemy.
</p>

<p>
I've now reached the point of diminishing returns in travel planning;
there's only so much I can plan, especially when visiting a developing
country on the other side of the planet. (Depending on the conditions on
the ground, we may need to stay in Silurgi on Wednesday night and head
up to Darjeeling on Thursday. If all goes well, we'll arrive in Silurgi
at 16:55 local time, which may or may not give us enough time to get to
Darjeeling all in one day. There are earlier trains, but it's not quite
clear how long it'll take us to get to the train station in the morning,
so caution seemed in order. Or maybe we'll find we get to the train
station in Bongaigaon in time to catch an earlier train. A second-class
sleeper berth -- which, I've been told, is the only authentic way to
experience Indian rail travel -- runs about Rs. 108 for the 251
kilometers from New Bongaigaon to New Jalipurgi stations. That's about
$2.34 at the current exchange rate. (I don't yet have a good idea what
the purchasing power parity is, which would be useful for comparing
prices relative to local wages, but is mostly meaningless for the actual
mechanics of travel on the ground.)) There are a few gaps in my
understanding that I need to fill (namely what to do for sleep at Indira
Gandhi International Airport in the twelve and a half hours I have on
Sunday night), but for the most part I think I know what I'm doing as
well as I can before stepping off the airplane into the muggy Delhi
night two weeks from today.
</p>

<p>
My major outstanding tasks involve planning my luggage (as little as
possible) and buying the missing pieces in my
surviving-a-developing-country kit. I'd like to pack everything in my
Kelty daypack, which will barely fit into my carry-on luggage allowance,
unless I fill it to capacity. I like the idea of not having to rely on
checked luggage, especially while traveling internationally, and I
especially like the idea of having a backpack as my primary luggage, but
I'm not sure I can fit what I need into a scant 3100 cubic inches, and
I'm afraid of subjecting my clothing to local dhobi-wallahs. India has
its own exotic set of power plugs, requiring a new set of plugs to
plug my dual-voltage hardware into. I also need to consider water
purification (which basically boils down to iodine versus chlorine
versus bottled water) and a set of locks for securing my luggage. (Call
me paranoid if you like, but this is <i>not</i> the time when I want to
use locks vulnerable to the TSA's skeleton keys.)
</p>

<p>
I finally got around to filling my anti-malarial prescription
(Malarone), typhoid fever vaccine (featuring live, attenuated bacteria),
and ciprofloxacin in case (when) I get traveler's diarrhea. (Eliciting
an immune response and subsequent immunity from attenuated
<i>Salmonella</i> Typhi is easier when not mixed with antibiotics. I
read the detailed information, with footnotes, printed in eight-point
font on the insert and was pleased to see that they didn't talk down to
me, but I wondered whether I would have gotten more out of the text had
it been targeted at an audience somewhat more general than graduate
microbiologists.)
</p>

<hr noshade>

<div style="text-align: center">
<div><a href="/photo.cgi?round=209&number=30"><img src="/digitalpics/209/320x240/30.jpg" border="0" alt="Jaeger's vast collection of Indian books" /></a></div>
<div style="font-size: small;">Jaeger's vast collection of Indian books</div>
</div>


<p>
I've spent most of the rest of my free time cramming Indian history.
With two weeks to go, I'm trying to add travel writing to my diet as I
finish up Jaswant Singh's memoir
<i><a href="http://www.librarything.com/work/4053759">A Call to Honour:
In the Service of Emergent India</a></i>, try to get back into the lengthy
<i><a href="http://www.librarything.com/work/3358886">India After
Gandhi: The History of the World's Largest Democracy</a></i>, and read
next month's book club selection,
<i><a href="http://www.librarything.com/work/3650549">The Dragons of
Babel</a></i>.
</p>
]]></description>
		</item>
		<item>
			<title>Megafest 8.2 (part two)</title>
			<link>http://jaeger.festing.org/changelog/1294.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1294.html</guid>
			<pubDate>Thu, 04 Feb 2010 22:38:00 -0700</pubDate>
			<description><![CDATA[<p>
Someday I'll get around to writing better support for serialized stories
and for events documented out-of-order. It's a bit disorienting to go
back and try to figure out what the optimal reading sequence is. But
that day is not today, so if you want the beginning of the
<a href="http://mega.festing.org/wiki/Megafest_8.2">Megafest 8.2</a>
story I'll have to provide a link by hand:
<a href="http://jaeger.festing.org/changelog/1289.html">Megafest 8.2
(part one)</a>.
</p>

<h2>Thursday, 31 December 2009</h2>

<p>
My major accomplishment for the morning was getting up (after landing in
Lincoln much later than I had planned) and eating breakfast. My major
accomplishment for the afternoon was getting groceries. After
breakfast, I recruited volunteers for meals and Yanthor solicited
shopping lists from these volunteers before we set out in the cold for
his nearby Hy-Vee. (It's a grocery store endemic in the American
Midwest.) Lincoln was in the midst of a cold spell, with daytime highs
barely creeping into the teens and piles of snow still on the ground
from several weeks prior. We successfully navigated the snow-covered
streets and icy parking lot and began trawling the aisles for
fortifications.
</p>

<p>
I'm used to going grocery shopping with Kiesa, who has the layout of our
local grocery stores memorized and sorts her shopping list in advance
for optimal efficiency. Yanthor provided no such advantage, but we still
managed to find the food we needed. (I also realized I had left my
driver's license in my fleece, having used it to prove to the TSA that I
wasn't a terrorist (because terrorists don't have state-issued photo
identification) but not having identification didn't prove troublesome.)
</p>

<p>
Back at Yanthor's residence, I made coffee (having run out of coffee
beans the day before) and set out to create my Dungeons and Dragons
character. My brilliant idea was to hide the fact that I was an
inexperienced roll-player by I creating a character who was
inexperienced and impulsive. My rogue demon-hunter was loosely inspired
by Wesley Windham-Pryce's first appearance in <i>Angel</i>. I created a
noble-born third son who got bored with his position and decided to set
out in search of adventure. He was impulsive and aggressive and not
particularly perceptive.
</p>

<p>
Yanthor handed me a stack of D&amp;D books and I figured out how to fill
out my character sheet in the context of the game. My character became a
level one human fighter with high intelligence and strength but low
wisdom and charisma.
</p>

<p>
(Yanthor's stack of books were hardcover, and I stopped to wonder
whether this was a cheap trick on the part of the publisher to extract
more money from loyal fans for hardcover books, or whether it was a
legitimate attempt to keep the books from falling apart under the stress
of being stuffed into backpacks every week for years on end.)
</p>

<p>
As he was setting up his dungeon master paraphernalia, Yanthor realized he
was forgetting one key thing: water-soluble markers for marking up his
combat board so we knew where the walls and other terrain features were.
I volunteered to find the markers he sought and headed out on the
snow-covered streets in Yanthor's car. I visited Hy-Vee and Walgreens
and failed to find suitable markers but did find them at the Super
Walmart sitting in the middle of a field on the outskirts of town.
</p>

<p>
One thing I didn't anticipate was that Thax (my rogue demon-hunter; I
couldn't come up with a better name on short notice) would become the
leader of the band. Linknoid played a halfling and seemed to have even
less of an idea what he was doing than I did. Humblik had far more
role-playing experience but played a NPC-turned-player-character goblin
who was more interested in mischief than adventure. Yanthor had the most
role-playing experience but set out to be our dungeon-master. I tried to
follow his guru lineage back to the source but it appeared that his guru
had been playing D&amp;D for decades.
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=208&number=117"><img src="/digitalpics/208/320x240/117.jpg" border="0" alt="Yanthor dungeon-masters at Megafest 8.2" /></a></div>
<div style="font-size: small;">Yanthor dungeon-masters at Megafest 8.2</div>
</div>


<p>
We spent the remainder of the afternoon building our character sheets
and set out to play after supper. Nemo arrived just in time to watch our
modestly-multiplayer offline role-playing game. The adventure started
slowly, as we settled into our roles and tried to figure out what we
were supposed to be doing. As dungeon master, Yanthor wanted to do as
much storytelling as combat but had the strange position of needing to
shape the story to match what he had planned without constraining the
players.
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=208&number=119"><img src="/digitalpics/208/320x240/119.jpg" border="0" alt="Humblik plays D&D at Megafest 8.2" /></a></div>
<div style="font-size: small;">Humblik plays D&D at Megafest 8.2</div>
</div>


<p>
The adventure finally came to our first fight as the clock crept
inexorably towards midnight. Yanthor needed time to set up the combat,
and there was a new year to count down to. (When the calendar on my desk
runs out, I go buy a new one, rather than deciding the world is going to
end.) I installed xdaliclock on Hobbes and watched the hypnotic numbers
count down to midnight, central time.
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=208&number=120"><img src="/digitalpics/208/320x240/120.jpg" border="0" alt="Humblik and Amy at Megafest 8.2" /></a></div>
<div style="font-size: small;">Humblik and Amy at Megafest 8.2</div>
</div>


<p>
(For the record, that's sparkling grape juice in the disposable plastic
goblets, just in case anyone is wondering.)
</p>

<p>
With the new year properly welcomed, we turned back to the hard work of
fighting the bandits haunting the road between two innocent communities
enjoying an idealized version of medieval European life. Before entering
combat, Linknoid's halfling set a trap on a path in an attempt to catch
the bandits as they exited their camp. When they finally came into view
(early morning, game time) my character awoke, drew his sword, and
charged the bandits. Yanthor asked if my character was going to avoid
the trap. I deadpanned, "The what-now?" And Thax entered his first
in-game combat hanging up-side-down by his ankles from the nearest tree,
perfectly in character.
</p>

<p>
We managed to vanquish the small band of bandits and take their leader
captive, only to find out that he had further information to advance the
plot, just in time to call the first segment of our adventure a success.
</p>
]]></description>
		</item>
		<item>
			<title>Mixed subjects</title>
			<link>http://jaeger.festing.org/changelog/1293.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1293.html</guid>
			<pubDate>Wed, 03 Feb 2010 23:14:55 -0700</pubDate>
			<description><![CDATA[<p>
On Monday, I visited a travel medicine clinic to get the immunizations
and other drugs I need to visit India. (Technically I don't <i>need</i>
anything to visit India, aside from yellow fever if I happen to have
come from a region where yellow fever is endemic, but waltzing into a
developing country without any hardware upgrades is asking for trouble.
Besides, I needed to prove to Calvin that I believe in immunizations for
daddy too.) I ended up with five shots: boosters for polio and tetanus
(supplementing my childhood immunizations) and new immunizations for
<i>Neisseria meningitidis</i> (meningitis), hepatitis A and B, and H1N1.
(Picking up an H1N1 vaccine has been on my list since the vaccine was
announced, but once it became widely available I never quite got around
to picking it up.) While it's unlikely I'd come across polio or
hepatitis A at home, tetanus and H1N1 are endemic worldwide.
</p>

<p>
I still need to pick up my typhoid fever immunization pills and
anti-malarial drugs, and get two more hepatitis A and B shots this
month. (I originally scheduled the return visit next Monday, before I
realized I'll be in San Diego for a brief two-day visit to the
Mothership.) I still feel my tetanus shot two days later; I'm not
optimistic that I'll be able to sleep on my left side tonight.
</p>

<p>
(In other vaccine-related news, yesterday <i>The Lancet</i>
<a href="http://news.bbc.co.uk/2/hi/health/8493753.stm">retracted a 1998
study linking the childhood MMR vaccine to autism</a> due to a conflict
of interest, lack of ethical approval, and misrepresentation. There's very
little commentary I can add except to say that: (1) I'm an engineer, not
a doctor or a celebrity; (2) in most if not all cases, I believe the
available evidence unequivocally shows that the risk of contracting
terrible diseases far outweighs the uncertain side effects; and (3)
Calvin (and I) will be getting a full set of immunizations, even if I'm
occasionally eight years late on my own tetanus booster. Please don't
get me started on what I think about parents who choose not to vaccinate
their children.)
</p>

<hr noshade>

<div style="text-align: center">
<div><a href="/photo.cgi?round=210&number=49"><img src="/digitalpics/210/320x240/49.jpg" border="0" alt="Calvin topples the living room lamp" /></a></div>
<div style="font-size: small;">Calvin topples the living room lamp</div>
</div>


<p>
As Calvin became more mobile, he discovered the floor lamp in the living
room and decided it would be a great post to use to pull himself up.
Lacking a better way to illuminate the living room, and the time
necessary to find an alternate lighting scheme, we left the lamp in
place but tucked part of the base under the
<a href="http://jaeger.festing.org/changelog/1287.html">new
entertainment cabinet</a>, providing a bit of protection against Calvin
pulling it down. At least, we thought it was keeping the lamp from
falling over until Calvin pulled on the lamp enough to cause the base to
crack. The lamp listed ominously for several days (barely propped up
with the pack-and-play in the living room) until Saturday, when I pulled
the lamp out to take a look and the base disintegrated. It looked like
the base was built from an unreinforced concrete counterweight. I pulled
a broken lamp out of the garage and managed to bolt its
fully-functioning base onto the bottom of my otherwise-functioning lamp,
then installed the lamp behind the couch where Calvin can't get to it.
In general it works pretty well, but it doesn't provide quite enough
light for our weekly videoconferences with Calvin's grandmothers.
</p>

<hr noshade>

<p>
On Sunday morning, Kiesa went to a baby shower, leaving me with Calvin.
I had been thinking of trying to take Calvin on another hike (even
though my last four attempts were less than spectacular), so as soon as
Calvin woke up from his morning nap I strapped him into his carseat and
headed to Rabbit Mountain. He was pretty happy at first but started
fussing before I made it halfway to the Little Thompson Overlook. I
pulled him out of the carrier, let him wiggle for a bit, and feed him a
few cheerios (which he chewed and spat out; he did better with cheerios
before he figured out he could push them out of his mouth after chewing
on them) before putting him back in the carrier and pressing onward.
This may not have been the right move; he started bawling by the time
I'd covered half of the remaining distance. I thought my best option was
to press on and try to feed him on the bench at the overlook. This
proved far easier said than done; he drank only a few ounces of formula
and continued bawling for fifteen minutes until a group of hikers with a
dog arrived. Calvin was fascinated by the dog, distracting him from his
suffering. (I quipped that Calvin wasn't enjoying hiking as much as I'd
hoped, and the older woman in the group (whom I took to be the mother of
the younger adult woman in the group) responded, "Give him twenty
years.")
</p>

<p>
I wrapped Calvin in a blanket in hopes of providing a bit more
protection against the cold and headed back to the trailhead. He fussed
for a bit, then cheered up when I started bouncing him up and down, then
fussed a bit more, and seemed to sleep for ten or fifteen minutes as I
tried to hold him steady. He started fussing again when I put him back
in his carseat but quieted down when I turned on the engine to head back
home. (He was happy enough that I took a detour to wash Kiesa's car; he
seemed sufficiently amused by the spectacle of being inside a car while
it was being washed.)
</p>

<p>
Kiesa took Calvin for the rest of the afternoon, giving me the
opportunity to finish the last half of the book club book,
<i><a href="http://www.librarything.com/work/8585029">The Windup
Girl</a></i>. Overall I enjoyed the book, but I couldn't help but wonder
if genetically-engineered megadonts would really be a better source of
power than biofuels.
</p>
]]></description>
		</item>
		<item>
			<title>A snapshot of the status quo, January 2010</title>
			<link>http://jaeger.festing.org/changelog/1292.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1292.html</guid>
			<pubDate>Thu, 28 Jan 2010 20:58:30 -0700</pubDate>
			<description><![CDATA[<p>
As of two days ago, Calvin is ten months old. He can crawl vigorously
around the house, usually muttering to himself as he goes. He enjoys
chasing Willow, who is smart enough to maintain a one-foot Calvin
Exclusion Zone. Calvin and Cat5 are less interested in each other;
Calvin will grab enthusiastically at her fur or tail, and Cat5 usually
ignores Calvin. Calvin can pull himself up to a supported standing
position and can cruise (walking while holding furniture), but he's
faster crawling. He's figured out how to pull books off shelves, so we
had to clear out the lowest shelves and seeded one sacrificial shelf
with a bunch of baby-grade mostly-indestructible books. Calvin grabs at
books enthusiastically, so we can no longer read him anything other than
baby-grade board books. (He enjoyed <i>The Cat in the Hat</i> but for
the fact that it's unavailable in board book format.)
</p>

<p>
Kiesa gets up with Calvin every morning but Sunday, when I get up
whenever Calvin decides it's time to get up, and Kiesa sleeps in. (He
usually gets up between 06:00 and 07:00.) A month or two ago Calvin
figured out how to take two-hour morning naps in his crib, and he'll
often take an afternoon nap when he's at home. This gives Kiesa more
time in the morning; she no longer takes Calvin to daycare before
mid-day. (I still find that listening to the monitor keeps me slightly
on edge; I'm still on call, noticing for any changes portending the end
of Calvin's nap.) In the evening, Calvin gets a bath and a final bottle
before going to bed by 19:00.
</p>

<p>
For most of the month of January, I felt like I was simply treading
water, keeping pace but not really getting ahead with the things I
wanted to be doing to keep myself grounded. It took me a week to decide
that might be ok; Calvin gets easier to take care of every month, so if
I'm keeping station now I might actually get traction next month, or the
month after that. It doesn't help that I don't have a dominant winter
sport; I hiked all three of Boulder's highest peaks in one day before
Christmas, leaving little left to do in Boulder's mountain park. I can
snowshoe, and I keep thinking about getting cross-country skis to let me
cover a bit more ground.  The snow that fell around Christmas never
melted on the unpaved path I like to run on from work; it started as
loose snow, then packed snow, and has now turned to ice. Elsewhere the
dirt paths have turned to mud. On Tuesday I ran with my Yaktrax shoe
chains, and today I abandoned running outside in favor of a treadmill.
</p>

<p>
Most of my available discretionary time is absorbed by my trip to India
in five weeks. I'm working through a very long history of modern India
(1947-present), and having actually purchased plane tickets, I need to
start thinking about my actual schedule on the ground. I know I'm not
going to make it through my reading list before departing, so I need to
start triaging and picking out the more important books.
</p>

<p>
My day job continues to entertain, amuse, and occasionally frustrate
me. I'm finally on the cusp of wrapping up a project I've spent a year
on (an interim version is currently in use; I'll deploy the final version
and hope I don't annoy too many stakeholders by the different design
choices made in the final version). Today I spent much of the day
looking at a strange bug that seemed to manifest itself as a heap
corruption issue but turned out to be an uninitialized variable; the
init function I was calling expected the variable to be zeroed, and my
code didn't zero the variable first. (I knew it would be a stupid error
but I wasn't quite sure where to find it.) The six-month review period
officially ends tomorrow, so I spent some time today remembering what I
did for the past six months and writing it all down in one place.
</p>

<p>
I'm never quite sure what each day will bring, and each week is an
adventure, but the trend seems encouraging.
</p>
]]></description>
		</item>
		<item>
			<title>Plane tickets</title>
			<link>http://jaeger.festing.org/changelog/1291.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1291.html</guid>
			<pubDate>Wed, 27 Jan 2010 08:32:25 -0700</pubDate>
			<description><![CDATA[<p>
Within the past week, the pieces all came together for my trip to India.
Last week, I paid Skype for land-line credit and called Willy in India,
twelve and a half hours ahead. I proposed dates at the beginning of
March and he said he'd check. The next time I called, he'd heard of the
<a href="http://www.indianembassy.org/newsite/consular/FAQ%20Tourist%20Visa.asp">new
Indian visa rules</a> requiring tourist visa holders to leave the
country for two months between consecutive visits. This cast large
sections of our plan into doubt, including his overall plan to stay in
the country until the end of the school term in June.
</p>

<p>
(Most countries I've traveled to never asked me to get a visa. My most
complicated visa prior to India was Australia, where my corporate travel
arranger applied online and e-mailed me something to stick in my
passport. But no matter how complicated India is, it's nothing compared
to the United States. I did not have to travel to the consulate, in
person, for a face-to-face interview. Any further complaints I may have
about the visa process are entirely hypocritical given my own
government's xenophobic antagonism to visitors and immigration.)
</p>

<p>
(The more I learn about India the more I think I understand little bits
and pieces of the country's reaction to the western world. India's
colonial repression is still a recent memory, and India's stated goal of
remaining non-aligned during the Cold War did not go over well with the
"you're with us or you're against us" anti-Communist attitude permeating
the United States. India wants to be a great power on its own terms,
which means growing up and making its own mistakes without outside
intervention. This means India doesn't care about whether I visit or
not.)
</p>

<p>
I called Willy again on my Saturday night (his Sunday morning) and
confirmed the dates. I had one more moving piece yet to nail down:
whether I'd take a side trip to my employer's office in Hyderabad while
I was in the neighborhood. (Where "in the neighborhood" means "on the
same subcontinent", since the closest I'd get to Hyderabad would be
Delhi.) This would confer one main advantage: If I could stretch my trip
out through the next weekend, I could take advantage of the
weekend-multiplier effect to get an additional two days to come home,
rather than taking actual vacation days on the return flight. (I've also
come to appreciate the benefits of visiting foreign offices to get a
feeling for how people actually work on the ground, and seeing people
face-to-face whom I would otherwise see only by e-mail is also useful.)
The more I looked at my schedule and timing, the less this seemed like
it would work, and I'd probably need to get a business visa. On Monday,
I e-mailed my tech lead (to whom I had previously floated the
possibility) my analysis and he agreed that it didn't look like it would
work.
</p>

<p>
With everything resolved, I set out to look at flights on Monday
evening. I had previously identified three direct flights from North
America to India (on American Airlines, Continental, and Air India);
most other possible flights involved a stop in Europe. For early March,
the direct flights were the cheapest, and I had my pick of schedules at
roughly the same price. American's polar flight from Chicago to Delhi
looked like the best option for both schedule and price. I stared at the
proposed flights for a few minutes while I contemplated my point of no
return, then clicked "Go" and bought the ticket.
</p>

<p>
After buying the ticket, I had a bit of trouble navigating American
Airlines' website to find my reservation info, and they didn't send me a
confirmation e-mail, so I wasn't entirely sure I had a ticket. The
credit card charge appeared by Tuesday morning, so I knew I hadn't
totally lost the ticket, but I feared I'd need to call them to get the
confirmation (as was
<a href="http://kiesa.festing.org/serendipity/index.php?/archives/152-Airline-Reservation-Fun.html">Kiesa's
experience with her concurrent airline reservation</a>). I went back to
the website on Tuesday evening and found the link I was looking for to
find my reservation while logged into my brand-new frequent flyer
account. (I finally got my e-mail confirmation late Tuesday night,
twenty-four hours later.)
</p>

<p>
I have plenty of planning left to do on my trip to India (and plenty of
<a href="http://jaeger.festing.org/photo.cgi?round=209&number=30">reading
to do</a>); the tentative plan is to fly to Guwahati, swing by Willy's
school in Meghalaya, and work my way back to Delhi via Kathmandu. I have
less than six weeks before I fly halfway around the world, and it should
be interesting.
</p>
]]></description>
		</item>
		<item>
			<title>Fun with PostScript</title>
			<link>http://jaeger.festing.org/changelog/1290.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1290.html</guid>
			<pubDate>Sat, 23 Jan 2010 11:23:44 -0700</pubDate>
			<description><![CDATA[<p>
Two years ago, frustrated by my inability to sort non-fiction books by
subject, I <a href="http://jaeger.festing.org/changelog/1115.html">spent
a Sunday printing and applying Library of Congress labels to my
technical books</a>. Since then, the LC labels have grown to include
most of our non-fiction collection, including the
<a href="http://jaeger.festing.org/photo.cgi?round=209&number=30">collection
of books about India</a> that has taken root in my living room. (That
picture predates the latest application of labels but does sort the
books in LC order.)
</p>

<p>
Last Saturday I decided to label the forty-three unlabeled books in my
collection, many of which joined my collection at Christmas. When I
started printing LC labels, using 80-labels-per-sheet return address
labels, I was so frustrated by OpenOffice.org's support for labels
(especially my inability to import a long list of text to print on
individual labels, or even copy-and-paste across multiple labels) that I
set out on my own, using CSS to format my HTML to position text at the
precise position on the printed page. This worked fine at first; I told
my browser to suppress all headers and print at zero-inch margins and
all was well. Last weekend it failed horribly; I couldn't get any of the
browsers at my disposal to print zero-inch margins that were actual
zero-inch margins, so I had to manually adjust the physical positions I
gave in my CSS to match the arbitrary offsets given by my browser. This
felt dirty but worked fine, but I knew I could do better.
</p>

<p>
Having rejected word processing systems for my label-printing needs
(given the manual intervention required and the lack of accessible
scriptability), I set out in search of something that I could generate
from a Perl script and precisely control on-page formatting. I looked
briefly at TeX, which seemed a bit overly-complicated for my needs, and
realized I could do everything I needed to do in PostScript.
</p>

<p>
On evenings during the week, I downloaded and read
<a href="http://partners.adobe.com/public/developer/en/ps/sdk/sample/BlueBook.zip"><i>PostScript
Language Tutorial and Cookbook</i></a>, then scanned
<a href="http://partners.adobe.com/public/developer/en/ps/PLRM.pdf"><i>PostScript
Language Reference</i>, third edition</a> for specific information on
picking page sizes and determining font metrics. (It's pretty cool that
PostScript allows a single document to be reformatted to fit the media
at hand, but my application requires prior knowledge of the page size.)
I started banging out PostScript code, starting with a simple box and
moving on to drawing a sequence of boxes outlining the labels on the
page. (I don't want to outline the labels in practice, but it gives me a
very useful way to see how well my printed output matches the sheet of
labels.) I wrote a <i>for</i> loop in PostScript:
</p>

<div class="code">
<pre>
0 1 cols 1 sub {
  /x exch def
  0 1 rows 1 sub {
    /y exch def

    gsave
    left x hpitch mul add pageheight top sub y vpitch mul sub translate

    % Draw the bounding box
    newpath
    0 0 moveto
    width 0 rlineto
    0 height neg rlineto
    width neg 0 rlineto
    0 height rlineto
    closepath
    stroke

    grestore
  } for
} for
</pre>
</div>

<p>
For those unfamiliar with PostScript, this may look like gibberish.
PostScript is a stack-based language; each operation pops and pushes
some values from and to the stack. The <i>for</i> loop takes a block of
code, which it iterates through, leaving the value for the current
iteration on top of the stack. Adapting to this way of thinking was an
interesting exercise; I had to visualize what was on the stack at any
given time, and I had the opportunity to write more complicated compound
expressions than I might have otherwise attempted. (I'm also worried I
ended up with under-documented write-only code; I haven't yet figured
out the best way to format and document my code. Debugging was also
tricky; I did find the operator to dump the current stack to the
debugging console, which gave me enough information to figure out that I
was drawing my box <i>up</i> from the current position rather than
<i>down</i> as I had intended.)
</p>

<p>
To write the text, I added an array with the labels to print:
</p>

<div class="code">
<pre>
% Content to print on labels
/content [
(BL1130.A4 B472)
(DS406.B56 2009)
(DS406.B76 2008)
(DS407.G75 2008)
(DS436.T17 1999)
</pre>
<i>...</i>
<pre>
] def
</pre>
</div>

<p>
Then added code inside my inner loop to index into the array, find the
width of the string in the current font, and center the string
horizontally and vertically inside the current box:
</p>

<div class="code">
<pre>
    % Write the text itself
    i content length lt {
      0 0 moveto
      content i get
      dup stringwidth pop
      width exch sub 2 div
      height fontsize add 2 neg div
      moveto
      show
    } if

    /i i 1 add def
</pre>
</div>

<p>
That last line of code is the PostScript equivalent of "i++".
</p>

<p>
Those interested in reading my PostScript program for themselves may
find my full code here:
<a href="/changelog/2010-01-23/labels.ps">labels.ps</a>. Further
refinement is needed in the font selection, vertical centering, and
automatic generation from the LibraryThing database, but I think it's a
pretty impressive result for a few hours of work.
</p>
]]></description>
		</item>
		<item>
			<title>Megafest 8.2 (part one)</title>
			<link>http://jaeger.festing.org/changelog/1289.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1289.html</guid>
			<pubDate>Tue, 19 Jan 2010 22:52:57 -0700</pubDate>
			<description><![CDATA[<p>
For the end-of-December holidays, Kiesa and I tried a
<a href="http://jaeger.festing.org/changelog/1281.html">bold new
experiment</a> involving visiting both families for Christmas.
</p>

<h2>Wednesday, 30 December 2009</h2>

<p>
My day was dominated by my flight from Portland to Lincoln to begin
Megafest 8.2, while Kiesa and Calvin stayed in Longview. After a
leisurely breakfast (and my last hand-roasted coffee) at the Stone
Estate in Longview, I managed to finish my packing. This involved a bit
of negotiation and stuffing, since I wanted to pack exclusively carry-on
luggage to save $45 in airline checked luggage fees.
</p>

<p>
The first leg of my flight to Lincoln was United flight 572, from
Portland to Denver. (This time, it was mere coincidence that Denver
happens to be my home airport; it was simply the most convenient way to
get from Portland to Lincoln.) I ate supper and settled in to wait for
my flight to Lincoln. I started out at the east end of Concourse B, then
moved into the new regional jet terminal hanging off the south-east end
of the concourse when my gate changed. We boarded quickly ahead of the
20:13 scheduled departure; the flight had only 22 people on board,
giving us plenty of room to spread out across the CRJ-200. We taxied
toward runway 8, then seemed to pull off to the side of the taxiway
while other planes passed us. After a few minutes, the pilot came on the
intercom to announce that an unspecified computer glitch was forcing us
back to the gate for repairs.
</p>

<p>
I text-messaged Yanthor to let him know I would be delayed from my
airport pickup as we headed back to the gate. We pulled up to a
different gate than the one we left and stayed on the plane for a few
minutes while maintainence arrived and started poking at the plane. They
decided they needed more time, so around 20:45 we were ushered off the
aircraft at gate B50 to wait for news on whether the plane could be
repaired for our flight.
</p>

<p>
As we sat at the gate, United dispatch decided to update their flight
schedule to show the flight as delayed, so their helpful automated
system texted me updates on my flight delays. At least, the updates
would have been helpful had they told me anything new; all I learned
from the stream of text messages was that they didn't know anything
either.
</p>

<p>
I charged my computer and had plenty of time to stretch while waiting
for my flight. I thought about reading, but I had finished reading
<i>Tea: Addiction, Exploitation, and Empire</i> as we returned to the
gate and I wasn't really awake enough to parse very much text. The
airport services closed down around us as the evening wore on. I
contemplated my options; with Denver as my home airport, I had a car in
the parking lot and I could drive home and come back the next morning,
but the next flight to Lincoln was late in the morning and I didn't
really want to go to the trouble unless they canceled my flight.
</p>

<p>
Maintainence took the aircraft out for a taxi to try to reproduce the
original failure condition, but the results were inconclusive, so by
23:00, a new plan emerged: the flight crew would take the plane up for a
quick spin around the neighborhood to see if the angry amber light
reappeared, and if it didn't, they'd conclude it was safe to fly to
Lincoln. (At one point, one of the pilots mentioned that he wouldn't
time out until 05:00 the next morning, giving us plenty of time to get
to Lincoln.) They left the gate and we continued waiting.
</p>

<p>
Around midnight, the airport started to look like a brightly-lit ghost
town. All of the remaining United gate agents were clustered around our
podium and looked busy, but it wasn't clear what they were doing. At
00:45 the news came in that we were going to fly to Lincoln after all.
The plane returned, and after an orderly reboarding process we were off.
Again.
</p>

<p>
Once we were in the air, we managed to avoid any further flight-related
drama or delays. While landing in Lincoln, I saw the plane's shadow,
cast by the light of the full moon, in the snow-covered fields.
</p>

<p>
We landed in Lincoln after 03:00 CST. I found Yanthor, who had fallen
asleep waiting for me at the tiny airport, and waited for my
gate-checked bag to make it through the luggage system. We headed to his
house on the eastern edge of Lincoln, chatted for a bit, and went to
bed. Kiesa's absence displaced me from my normally-scheduled basement
guest bedroom; I ended up sleeping on the massive new couch encircling
the entertainment center.
</p>
]]></description>
		</item>
		<item>
			<title>Custom oak</title>
			<link>http://jaeger.festing.org/changelog/1287.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1287.html</guid>
			<pubDate>Sun, 10 Jan 2010 09:50:51 -0700</pubDate>
			<description><![CDATA[<p>
When Kiesa and I
<a href="http://jaeger.festing.org/changelog/1270.html">ordered a custom
entertainment cabinet</a> at the beginning of November, the salesguy
told us it would probably take twelve to sixteen weeks for our cabinet
to be delivered. I wondered whether the Great Recession would affect the
timetable, since furniture is one of the biggest casualties because
Americans are moving less and needing less furniture. My suspicions were
confirmed a week before Christmas when the salesguy called me to let me
know our cabinet was in and to set up a delivery. I didn't have my
calendar in front of me, so I told him I'd call back to set up an
appointment.
</p>

<p>
I didn't actually manage to call back until I was back at work last
week. (Since we were
<a href="http://jaeger.festing.org/changelog/1281.html">out of town for
Christmas and New Year's</a>, we wouldn't have been able to accept
delivery until last week anyway.) They had a Saturday delivery slot,
which I accepted. Friday night I set out to clean out my old cabinet,
consisting of a cabinet and a printer stand both picked up off the side
of the road and a cheap Walmart bookshelf for storing DVDs.
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=209&number=21"><img src="/digitalpics/209/320x240/21.jpg" border="0" alt="The old entertainment cabinet" /></a></div>
<div style="font-size: small;">The old entertainment cabinet</div>
</div>


<p>
The new cabinet arrived Saturday morning just as I was sitting down for
breakfast. One delivery guy noted how perfectly the cabinet fit in the
space allocated for it, and the other delivery guy noted the straight
shot into the house from the front door. I paid the balance on their
hand-held point-of-sale terminal and wondered whether it was using a
cellular network to verify my credit card.
</p>

<p>
(We configured the cabinet to match our existing living room furniture
as much as possible, but once it was delivered I saw that the "wheat"
stain was at least two shades lighter than the oak coffee table. In
practice this shouldn't matter; the style is identical and it's close
enough that it's hard to care.)
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=209&number=25"><img src="/digitalpics/209/320x240/25.jpg" border="0" alt="The newly-delivered entertainment cabinet" /></a></div>
<div style="font-size: small;">The newly-delivered entertainment cabinet</div>
</div>


<p>
I set out to configure the cabinet, starting with the cable access
ports. The salesguy told me the delivery guys would be able to cut my
access ports, but I decided I'd rather do it myself once I had the
opportunity to study the cabinet and how my A/V stack would fit in it. I
visited my local hardware store to pick up a three-inch hole saw and
returned home to modify my new cabinet. I cut one hole at the bottom of
each cabinet and one additional hole in the middle of the left cabinet.
I set up the printer in the right cabinet and the A/V stack (consisting
only of my Mac Mini, a receiver, and a DVD player) in the left cabinet.
</p>

<div style="text-align: center">
<div><a href="/photo.cgi?round=209&number=27"><img src="/digitalpics/209/320x240/27.jpg" border="0" alt="The new entertainment cabinet" /></a></div>
<div style="font-size: small;">The new entertainment cabinet</div>
</div>


<p>
I'm not totally satisfied with the placement of my speakers on the top
of the cabinet (especially the subwoofer), but I'm not sure what my
other options are. I was worried about the standing lamp, but it looks
like there's enough clearance under the cabinet for the base of the
lamp, and the cabinet may even keep Calvin from knocking the lamp over.
I still need to tie the television onto the cabinet to keep it from
falling over, though it's much harder for Calvin to reach in its current
position.
</p>

<p>
I'm happy with the new cabinet. It raises the level of decorum in my
living room and should serve us well for decades.
</p>
]]></description>
		</item>
		<item>
			<title>My RSS feed joins the twenty-first century</title>
			<link>http://jaeger.festing.org/changelog/1285.html</link>
			<guid isPermaLink="true">http://jaeger.festing.org/changelog/1285.html</guid>
			<pubDate>Sat, 02 Jan 2010 14:47:00 -0700</pubDate>
			<description><![CDATA[<p>
Now that the second decade of the twenty-first century has dawned, it's
time to roll out a long-anticipated update to my RSS feed: Actual
content inside the feed, making it possible to read my entries without
leaving your RSS aggregator.
</p>

<p>
If you're already subscribed to my RSS feed, you shouldn't have to do
anything for the new content to show up, though if your aggregator is
caching old entries you won't see anything there. If you're not already
subscribed to my feed, and you're into that sort of thing, look for the
"RSS" links at the bottom of the page, or in whatever form your web
browser displays the &lt;link rel="alternate" type="application/rss+xml"
/&gt; tags. Readers already subscribed to my entry feed may be
interested in the brand-new comment feed, allowing you to keep up with
what passes for discussion on this site.
</p>

<p>
If you're logged in while reading this page, and you look carefully at
the RSS urls, you'll see an arbitrary 128-bit hex-encoded cookie in the
url. (In this sentence, I'm using
"<a href="http://www.catb.org/jargon/html/C/cookie.html">cookie</a>" in 
the generic sense of an arbitrary token, not an HTTP cookie.) This
cookie allows my RSS feed to identify you and show your aggregator
articles that might not be otherwise available to the public at large.
This has its downsides: Certain RSS aggregators are known to have funny
(and by "funny" I mean "broken") ideas of what a "private" RSS feed is.
I spend a fair amount of effort making sure my online writings are
targeted at the right audience, and all of this effort goes to waste
when an aggregator decides to make my feeds searchable. (I rarely say
anything about my job in public entries, but I say more where I'm fairly
confident Google can't find it.) As a result, only world-readable
entries (those one could read by visiting my site without logging in at
all) are visible in their entirety in the RSS feed. Articles restricted
to all logged-in users have their first paragraph included "above the
fold" in the feed (up to the first blank line, which seemed close enough
in practice) with a link to my site to log in and read more. Articles
restricted to a subset of logged-in users have only a link back to my
site.
</p>

<p>
(The same applies to comments. My "above-the-fold" parser isn't smart
enough to find paragraph tags, but it'll find the first blank line and
snip there for logged-in-user-only comments.)
</p>

<p>
Let me know if you run into any trouble with my feed. I hope this will
portend a brave new era of RSS-based content aggregation.
</p>
]]></description>
		</item>
	</channel>
</rss>
