Holy cow, I wrote a book!
(Note: This makes sense only after you've gone through the other puzzles.)
In case my friend got stuck, she could call me and ask for a hint.
The original plan was that I would charge her a dare in order to get
a hint, but it turns out I was too nice a guy to make her do any
of the following things, but here's the list anyway:
(Note: Read the puzzles in order from 1 to 6 for them to make sense.)
To see the final puzzle you need an SVG- or VML-enabled browser.
Answers to all puzzles will be posted tomorrow.
Please do not post spoilers.
Number five is an old-style riddle.
My first is an avatar, you are guardian of its soul.
My second you must vanquish if you wish to reach your goal.
My third you may injure if you slide too hard to third.
My whole is a place where dead people can be heard.
A pretty straightforward puzzle.
This was by far the hardest puzzle to make.
It's also going to be the hardest to solve because a lot of the clues
were originally inside jokes, and rewriting them for a general audience
makes the answers much less obvious.
Hint: Quotation is by Nancy Pearl.
Onward to Puzzle #4.
Upon arrival at the first puzzle location,
she was handed the second puzzle:
"Opghg'i xk ialp opfxw zi
z ioaufy jagiofkx."
Wk ok opg fxqkhvzofkx ygib
fx Lgxogh Pkaig zxy zib fq
opge pzmg zxe oflbgoi
zmzfnzdng qkh opg Vzhfxghi
The following clues are not necessary for solving the puzzle,
but are provided in case you get stuck.
Onward to Puzzle #3.
Today is a holiday in the United States, so I thought I'd go
But that doesn't mean you get to rest your brain.
One of my friends was accepted to
the Graduate School of Library and Information Science
at the University of Illinois at Urbana-Champaign.
We are of course very happy for her, but also sad that
she will be leaving us.
As part of her going-away festivities,
we sent her on a one-team
because she's a puzzle fan and regretted missing out on
the most recent Hunt.
Our puzzles took her to various landmarks in the Seattle
area, culminating at the location of the big party.
At each landmark, a different group of her friends was be
there to greet her, socialize, and give her the next puzzle.
There were six puzzles in all.
I have made some adjustments to the puzzles to
remove the "inside jokes"; otherwise you wouldn't
stand a chance!
Knowledge of Seattle is still important, though.
No reference materials allowed. All you have is a pencil
and your brain.
The first puzzle is a simple grid of letters.
Onward to Puzzle #2.
I hope you weren't using
those undocumented critical section fields,
because in Windows Server 2003 Service Pack 1,
tells an interesting story of
a vendor who used reserved fields and then complained when the system
started using them!
The most important difference between My Documents and
Application Data is that My Documents is where users store their files,
whereas Application Data is where programs store their files.
In other words,
if you put something in CSIDL_MYDOCUMENTS
you should expect the user to be renaming it,
emailing it to their friends,
all the sorts of things users do with their files.
Therefore, files that go there should be things that users
will recognize as "their stuff".
Documents they've created, music they've downloaded,
that sort of thing.
On the other hand, if you put something in
the user is less likely to be messing with it.
This is where you put your program's supporting data that isn't
really something you want the user messing with,
but which should still be associated with the user.
High score tables,
spell check exceptions...
There is another directory called
(Local Settings\Application Data)
which acts like CSIDL_APPDATA,
except that it does not get copied if the user profile roams.
(The "Local Settings" branch is not copied as part of the
roaming user profile.)
Think of it as a per-user-per-machine storage location.
Caches and similar non-essential data should be kept here,
especially if they are large.
Other examples of non-roaming per-user data
%TEMP% and Temporary Internet Files
Temporary Internet Files
One of the less-known features of Windows is the
roaming user profile.
I know that this is not well-known because I often see suggestions
that fail to take the roaming user profile scenario into account.
Indeed, if your program behaves badly enough, you can cause data loss.
(More on this later.)
What is a roaming user profile?
Well, your user profile is the collection of things that reside
under your %USERPROFILE% directory.
(This is not quite true, but it's a good enough approximation
for the purpose of this discussion.
An important exception will be noted next time.)
Your per-user registry is kept in %USERPROFILE%\ntuser.dat,
so your per-user registry is part of your user profile.
In highly managed environments (corporations),
system administrators can set up user profiles on a centralized
server, so that users log onto any machine and have available
their files and settings.
This is accomplished by copying the user profile from the server
when the user logs on and copying it back to the server when the
user logs off.
there is also caching involved to save time if the user logs back
onto the same machine.)
What does this mean for you, the programmer?
For one thing, it means that the path to the user's profile
can change from one logon session to the next.
If the user runs your program from Computer A, their
user profile directory might be C:\Documents and Settings\Fred,
but when they log off from Computer A and log on to
Computer B, the directory to their user profile might change
In particular, that file that used to be at
C:\Documents and Settings\Fred\My Documents\Proposal.txt
has moved to
If your program has a feature where it offers a list of recently-used
files (or auto-opens the most recently used file),
you may find that the file no longer exists at its old location.
The solution is to use profile-relative paths, or even better,
shell virtual folder-relative paths (e.g., recording the
path relative to CSIDL_MYDOCUMENTS),
so that when the profile roams to a machine with a different user profile
path, your program can still find its files.
C:\Documents and Settings\Fred
C:\Documents and Settings\Fred\My Documents\Proposal.txt
For another thing, you cannot just cruise through the
expecting to find all the user profiles
possibly even modify them,
because the copy of the user profile on the local computer
might not be the authoritative one.
If the profile is a cached roaming profile,
then any changes you make will either
(1) be lost when the user roams back to the computer
after using another computer, or
(2) cause the local profile to be considered newer than
the master copy on the server, causing the changes the user made
to the copy on the server to be lost!
(Which of the two bad scenarios you find yourself in depends on
the time you change the cached profile and the time the target
user logs off that other computer.)
Another consequence of roaming user profiles is that
your program can effectively see itself changing versions
If Computer A has version 1.0 of your program
and Computer B has version 2.0,
then as the profile roams between the two computers,
both versions 1.0 and 2.0 will be operating on the
user profile in turn.
If versions 1.0 and 2.0 use the same registry keys to
record their settings, then
your registry formats had better be both upward- and
This is a particularly painful requirement for operating system
components, which consequently need to maintain bidirectional registry
with systems as old as Windows NT 4.
(Windows NT 3.51 had a different model for roaming
Yet another consequence of roaming user profiles applies to services.
Prior to Windows XP, if a service holds a registry key open
after the user logged off,
then the registry hive cannot be unloaded and consequently
(1) consumes memory for that profile even though the user is
no longer logged on, and
(2) prevents the user's local registry
changes from being copied back to the server.
This "hive leakage" problem was so rampant that in Windows XP,
the profile unload code takes a more aggressive stance against
services that hold keys open too long.
You can read more about the changes to registry hive roaming
in the Resource Kit article linked at the top of this entry.