5,271,009

On a recent episode of Roderick on the Line the guys has some fun with dentists. I think I will forever associate dentistry with a bit from one of Alfred Bester's short stories, "5,271,009", in which our hero is presented with a variety of "last man on earth" fantasies, and must face the flaw in each. You can read the whole thing in Virtual Unrealities, a collection of Bester's short stories (or you can read it here), but the bit I remember is from one of the shortest "last man" excursions:

He was the last man on earth.

He was the last man on earth and he howled.

The hills, the valleys, the mountains and streams were his, his alone, and he howled.

Five million two hundred and seventy-one thousand and nine houses were his for shelter, 5,271,009 beds were his for sleeping. The shops were his for the breaking and entering. The jewels of the world were his; the toys, the tools, the playthings, the necessities, the luxuries... all belonged to the last man on earth, and he howled.

He left the country mansion in the fields of Connecticut where he had taken up residence; he crossed into Westchester, howling; he ran south along what had once been the Hendrick Hudson Highway, howling; he crossed the bridge into Manhattan, howling; he ran downtown past lonely skyscrapers, department stores, amusement palaces, howling. He howled down Fifth Avenue, and at the corner of Fiftieth Street he saw a human being.

She was alive, breathing; a beautiful woman. She was tall and dark with cropped curly hair and lovely long legs. She wore a white blouse, tiger-skin riding breeches and patent leather boots. She carried a rifle. She wore a revolver on her hip. She was eating stewed tomatoes from a can and she stared at Halsyon in unbelief. He ran up to her.

"I thought I was the last human on earth," she said.

"You're the last woman," Halsyon howled. "I'm the last man. Are you a dentist?"

"No," she said. "I'm the daughter of the unfortunate Professor Field, whose well-intentioned but ill-advised experiment in nuclear fission has wiped mankind off the face of the earth with the exception of you and me who, no doubt on account of some mysterious mutant strain in our makeup which it make us different, are the last of the old civilization and the first of the new."

"Didn't your father teach you anything about dentistry?"

"No," she said.

"Then lend me your gun for a minute."

She unholstered the revolver and handed it to Halsyon, meanwhile keeping her rifle ready. Halsyon cocked the gun.

"I wish you'd been a dentist," he said.

"I'm a beautiful woman with an I.Q. of 141 which is more important for the propagation of a brave new beautiful race of men to inherit the good green earth," she said.

"Not with my teeth it isn't," Halsyon howled.

He clapped the revolver to his temple and blew his brains out.

Letterpress Thoughts

There are lots of iOS games I love, but Letterpress is far and away the one that has kept my interest the longest. It launched on October 22, 2012 and I've been playing it ever since. Recently Brent Simmons posted his Letterpress rules, prompting Daniel Jalkut to post his. I only have a couple generally applicable rules:

  • No cheating! No cheat apps, no looking up words during play. Of course, you can work on your vocabulary offline as much as you want.*
  • After a win, pass the first move on the rematch. There's an advantage to going first.

Otherwise, when playing strangers, anything goes. But I have some other house rules I sometimes set up with regular opponents:

  • If you reach 50 moves, the game is a tie. Sometimes the game devolves into trench warfare. Some like this, some don't.
  • Word variations that are the same length or shorter than any previously played works are off limits. So if somebody plays STOPPER you can't play STOPPED, but you can play STOPPING or STOPPERS. This can get hard to manage if you aren't also playing the 50-word cap.
  • Tournament format: a win when you go first is worth nothing, a win when your opponent goes first is a break, and is worth one point. Play to five. Loser of previous game goes first.

As for strategy, definitely read Ted Landau's posts, Win at Letterpress: Start Second, Finish First, Exceptional Letterpress Strategy, and Stealing Wins at Letterpress. (Cool thing, I'm the second victim in the games detailed in "Stealing Wins"! I've played Ted five times now, going first each time, and I've lost 'em all.)

Anyway, those are terrific, and I don't actually have too much to add. He even covers the "trench warfare" scenario (he calls it see-saws). A few additional things I do:

  • When the game starts I don't always try to take the easiest corner to lock up, I try to figure out where the hardest area of the board is, and then I try to take the opposite side. So if the NE corner has bad letters, I'll focus on securing the SW, even if the NW and SE are temptingly easy. If the bad letters are centrally located in the north, I'll try to lock down the south. If I'm right, and the hard tiles are what's open at the end of the game, and I've managed to lock down the opposite, I'll be able to secure a larger base than my opponent in the endgame.
  • If my opponent goes first and it seems like they are going after the corner I want (so the corner opposite the badlands), I'll often emphasize dislodging them rather than trying to lock up a different corner (although doing both simultaneously is ideal). I'll try to lock up a tile as close as possible to the desired high ground and build from there.
  • Scan the board for suffixes at the beginning of the game! See if any can be compounded. I first started playing Daniel when he tweeted that he had ended a game with JOVIALNESSES and I was like, "ooh, I gotta play that guy."
  • I often find that if I content myself with merely flipping my opponents tiles, no matter how big a swing that seems to produce, my advantage will wither away. If you're ahead, you have to keep taking new tiles in addition to flipping. I find when I'm not aggressive about this, I end up in a trench (or worse). Sometimes a move that just flips is too good to pass up, but it's easy to get complacent.
  • Take your time, a better word than what you were considering will come to you.

Anyway, Letterpress, great game! Check it out if you don't already play.

* I've only been learning various Q-no-U words as I've been burned by them, but if you want to be more proactive about it, here are all the Q-no-U words in the Letterpress dictionary. No fair looking at this list during a game, though!

Faqir, Faqirs, Fiqh, Fiqhs, Inqilab, Inqilabs, Mbaqanga, Mbaqangas, Niqab, Niqabs, Qabala, Qabalah, Qabalahs, Qabalas, Qabalism, Qabalisms, Qabalist, Qabalistic, Qabalists, Qadi, Qadis, Qaid, Qaids, Qaimaqam, Qaimaqams, Qalamdan, Qalamdans, Qanat, Qanats, Qasida, Qasidas, Qat, Qats, Qawwal, Qawwali, Qawwalis, Qawwals, Qi, Qibla, Qiblas, Qigong, Qigongs, Qin, Qindar, Qindarka, Qindars, Qins, Qintar, Qintarka, Qintars, Qis, Qoph, Qophs, Qorma, Qormas, Qwerties, Qwerty, Qwertys, Sheqalim, Sheqel, Sheqels, Talaq, Talaqs, Tranq, Tranqs, Tsaddiq, Tsaddiqim, Tsaddiqs, Tzaddiq, Tzaddiqim, Tzaddiqs, Waqf, Waqfs, Yaqona, Yaqonas

If your opponents didn't think you were cheating before, they certainly will after you roll out TSADDIQIM!

Recommended "Watch Instantly" Movies

Here are all the movies I rated either four or five stars on Netflix that are available to stream as of 2/24/14. I compile this list from the Netflix Watch It Again page. The code I use follows this list, if you're into that kind of thing.

I run this code in Firebug to generate the Markdown that Pelican then converts to the HTML you see above. Note that you have to scroll all the way down the Watch It Again page so that all the titles are loaded before running this script.

var movies = [];
var result = '';

function titleSort(a, b){
   var aTitle = a.title.replace(/^(a|an|the) +/gi, ''); 
   var bTitle = b.title.replace(/^(a|an|the) +/gi, ''); 
   return ((aTitle < bTitle) ? -1 : ((aTitle > bTitle) ? 1 : 0));
}

jQuery(".mdpLink").each(function(index) {
   var title = jQuery(this).text().trim();
   var tv = title.toLowerCase().indexOf("episodes)");
   if (tv <= 0) {
      movies.push({
         title: title,
         href: jQuery(this).attr('href').replace(/\?trkid=[0-9]+/gi, ''),
         loved: jQuery(this).closest("td").siblings(".cell-starbar").find("span .sbmf-50").length
      });
   }
});

movies.sort(titleSort);

jQuery.each(movies, function (i, movie) {
   var title = movie.title;
   if (movie.loved) {
      title = '**' + title + '**';
   }
   result = result + ' - [' + title + '](' + movie.href + ')' + '\n';
});

console.log(result);

Instamorph Magnetic Doorstop

Our mudroom door has an annoying tendency to close part way, so I wanted to hold it open, and yet we go behind that door all the time for aprons and mops and stuff so it needed to be easy to open (I didn't want a rock or whatever that I'd have to kick out of the way and reposition all the time). The off-the-shelf magnetic doorstops I've tried have sucked, because they are too strong, make a loud noise when they engage, etc. So I whipped up something with the existing doorstop, some Instamorph, and a couple rare earth magnets I had on hand. It's not pretty, but it's the mudroom and behind a door we keep open, so that's okay.

The hacked doorstop (I removed the existing rubber head, and buried one of the magnets in the new Instamorph head) and door plate with magnet (underside view):

doorstop 1

The door plate installed:

doorstop 2

Engaged!

doorstop 3

I had to heat up the surfaces a couple time to remove extra Instamorph and then reflatten them because they were initially too thick for the magnets to attract enough through. I just set the stove burner (glass cooktop) on low, put down some foil, then some wax paper over that so the Instamorph wouldn't stick, and pressed the piece down on it to melt it.

What About Removing Ratings Entirely?

This post by John Gruber touched off a lively debate on whether and how developers should prod users for ratings. The nag screens sure are obnoxious, but good ratings are pretty important in bringing your app to the surface in a very crowded App Store. Rather than enter the debate, I wonder why users have to explicitly rate apps at all, when they are implicitly rating them all the time? What if, instead of reviews, Apple were to score apps by a variety of criteria, awarding some number of (undisclosed) points, on a per-user basis, for:

  • Being currently installed
  • Being in the dock
  • Being on the first page
  • Being on the second page
  • Being on the same page (or in the same group) with a bunch of other apps that get a lot of use
  • Being regularly updated
  • Time spent in active use (maybe just for games, as it's tricky given the wide range of usage patterns across app types)
  • Having push notifications enabled and sending them with some regularity (it is implicit that the user finds this valuable rather than annoying, and this catches apps that serve a purpose but that the user doesn't launch often, so aren't in a prominent screen location)

And an app would lose points (or at least not score) for:

  • Being on a page or in a group with a bunch of other apps that mostly never get launched and never send push notifications
  • Crashing (maybe?)

This is a half-baked thought, and you'd want to weight these somehow, but it seems to me like this would be a decent measure of ongoing value to the user. Certainly, when I consider my own phone, these criteria give a very accurate picture of current value to me. Sure, there will be users that don't organize their phones at all, but they would be pretty easy to discard (or deemphasize) from the dataset based on usage patterns, I'd think.

Apple could then incorporate this into App Store search weighting, along with category, search keyword, download trends, etc. Maybe they could also start spidering the web (if they don't already) looking at incoming links for an additional weighting factor (in addition to direct links to apps in the App Store they could look at links to developer websites associated with those apps (which they have on file)).

This won't solve the "rich get richer" problem (which does seems pretty baked into capitalism), but Apple could blunt the feedback loop a bit by:

  • Introduce some randomness into the search result ordering
  • Mix in some relative newcomers each time

So the rich will keep getting richer (as they should, in many cases) while still exposing some up-and-comers.

Finally, under a scheme like this developers aren't penalized for updating their apps (currently an update wipes out ratings).

(NOTE: This is mostly a repurposing of a previous post I made during a similar App Store dust-up awhile back.)

128 Character Games

A couple months ago Zach Gage started an awfully fun little thread with this tweet:

Dear internet, here is a crazy challenge for you. Design a game prototype where the rules fit in <=128 characters, tweet it w/ #128CharGame

This is well after the fact, and it looks like the hashtag has a life of its own, but I collected these favorites at the time:

  • Players 1 and 2 buy $10 worth of food at Taco Bell, without revealing orders. Players exchange food; first to finish wins. (qubitsu)
  • Two players clasp each others hand and stand on one foot. First player that touches raised foot to ground loses. (blefler)
  • Players 1 an 2 each hide a 6 in length of scotch tape on a visible surface within the home. 1st to find the other's strip wins. (bigGUNSfowler)
  • Pass nerf 6shooter around w single dart, Russian roulette - kill self, -1 pt, live 1 pt. Aim at others & hit: +3pts, miss -3pts (Shnayke)
  • Present 3 statements to a friend, two are sarcastic. Friend must guess which is real. (BrianNumberOne)
  • Player take turn poking holes in a piece of paper with a pencil. First one to cause a rip that connects two holes loses. (Andy_Makes)
  • 2+ players. Tape paper to backs. Get as many papers as you can. If your paper is taken, you lose, and your papers are out. (mikesmallhorn)
  • Race with other players to get a high five from a stranger (urustar)
  • During a pub night steal as many coasters as you can. If a player spots you, they win the coaster (urustar)
  • All at once point to player with most perceived privilege—highest count out. Whittle to 2. Like Survivor, plead to jury of out. (jaimewoo)
  • I pick a letter and a word it starts. You pick a 2nd letter and a word started by our 2-letter sequence. So on until stumped. (jefffal)
  • Players wager for right to add rules of play. Wagers won by breaking previous rules. Game won by breaking fewest rules. (mc_frontalot)
  • Three players each fight to gain possession of one soccer ball, then kick it between the other two players. (Blinkity)
  • Everyone gets a blank A4 page at 9am. Person who has the cleanest, nicest page at 5pm wins. Play at work; sabotage encouraged. (hbmuscat)
  • On GO!, teammembers try to change into each others clothes as quickly as possible. Audience wins. (TehSuckerer)
  • "find the spoon" text your friend a picture with a spoon hidden but visible, they have 1 min to text you back where it is (banjaloupe)
  • Players try to guess an objects color as a hex value, take a photo & use eyedropper, closest wins (netgrind)
  • Do a Google image search on your phone. Hand it to a friend, 3 guesses what search was for. Object is to stump that person. (herebejoshua)
  • 2 Players stand back-to-back w/hands at sides & count down from 3. On "Go" players try to touch other's belly button (phoenixashes)
  • Draw 9 dots on a piece of paper. Alternate putting fingers on dots. First player who loses grip on a dot or cannot play loses! (helvetica)

I kicked in the game Milk:

  • Spike/bounce odd object off the ground. One-hand catch=1 pt. Touch it but don't catch it, -1. Tackling ok after touch/bobble. (jimbiancolo)

(Only reference I can (easily) find to Milk is here from the great thread describing games Ultimate Frisbee players have invented/adopted/improvised over the years.)

Oh, just noticed Zach collected a ton of 'em at his site, cool!

Highlighting Personal Bests in Excel

I keep track of some exercises in Excel, and I wanted to be able to highlight any cell that represents a personal best to date. I don't want to just highlight the max value in a range, though. If I set a PB I want to highlight it, and then if I set a new PB later, I want the old one(s) to stay highlighted, and I want the new one to be highlighted as well. You can do this with conditional formatting.

I use this rule for spreadsheets where my attempts are arranged in columns (rule assumes the data starts at row 1):

=INDIRECT("R" & ROW() & "C" & COLUMN(), FALSE) > MAX(INDIRECT("R1" & "C" & COLUMN() & ":R" & ROW()-1 & "C" & COLUMN(), FALSE))

... and I use this rule where attempts are arranged in rows (rule assumes the data starts at column 1):

=INDIRECT("R" & ROW() & "C" & COLUMN(), FALSE) > MAX(INDIRECT("R" & ROW() & "C1:R" & ROW() & "C" & COLUMN()-1, FALSE))

Specify the highlight color you want to use when the formula hits, and you're good to go. For example, here's how it might look with column-based data. The orange cells are personal bests to date:

Conditional Formatting