strictures and structures

if only we stopped trying to be happy, we could have a pretty good time

Train to Busan: a glowing review

Now that I’ve seen this movie, I don’t feel like I need any more zombie movies.

This is not actually true. I have a bottomless appetite for zombie stories. But Train to Busan is so perfectly executed that I do feel temporarily sated. It hits all the usual themes–the real enemies are not the zombies, but your fellow humans; the authorities suck; and it has the usual social commentary. This particular movie takes a few potshots at the 1%. They’re all on the nose, but it’s hard to be subtle in a zombie movie.

Train to Busan begins when the ruthless hedge-fund manager and unlikable protagonist Seok-woo accidentally buys his young daughter a Wii for her birthday the second time in a row. She uses this as leverage to coax him into taking her to Busan so she can visit her mother. Father and daughter must then survive an outbreak on the train. The result is kinetic, with never a wasted moment. At times it’s even quite touching, as Seok-woo learns what it takes to be a father. This is a zombie movie with good family values.

The train is a truly inspired setting. How did nobody think of this before? A train is perfect for survival horror. It’s close quarters, hard to escape, and has few useful tools. Not only that, but the train is a wonderful embodiment of the drive to escape that must be present in all zombie movies.

Back in its home country of South Korea, Train to Busan sold over ten million tickets. The population of South Korea is only about 50.7 million people. Twenty percent of an entire nation (plus me) can’t be wrong. Go see this movie!

loudly grunting while working out: a positive review

I like loudly grunting while working out* because it makes me feel powerful. Maybe if you do it, you will feel powerful too.

* Also known as, “warrior noises.”

Beauty and the Beast: a negative review

Spoilers galore.

I had hopes for this. I had read an interview with the director where they stated that the original animated movie was itself a remake of an original story. Very wise. You got me there. You made me even look forward to this.

After I saw it, I said to my friend Oobz, “Lumiere’s face was horrifying.” I think it was just the initial shock of disappointment. I’ve seen a few horror movies, and Lumiere’s face is just charmless. And that sums up how I feel about this movie. It was charmless.

There’s always a risk in porting an animated story to a live-action format. Things that looked plausible enough in animation can look grotesque in live-action. In this live-action remake, the transmogrified servants are mostly trapped in the uncanny valley, except for the feather duster, who only escapes because she has a peacock head, not a human face. And the beast just doesn’t look like a beast you could root for. The original animated beast had big doe eyes and floofy hair. He combined the cuddliness of a dog you wanted to pet and the luxuriant locks of an Herbal Essences model. This time around, he’s a big muscular thug who makes you uncomfortably aware that you’re rooting for the success of an abusive relationship. With bestiality. This weakness of the live-action format especially doesn’t pair well with modern sensibilities about dating.

I’m sure there’s a way to make a good live-action movie with abusive boyfriends and uncomfortable but sexy hints of bestiality, especially if you have involvement from actual French people, but of course no American is ever going to go there.

The sad thing, I think, is that the original animation was very fresh and original, because it dared to embellish the old story so much. This remake is something of a failure to launch–too slavishly devoted to the original to make the most of the change to a live-action format, it reminds me of someone trying to jump a ditch they could easily cross, if only they weren’t so afraid.*

* Though I suppose I’m being harsh, because the other side of the ditch is a sexy French movie with bestiality and abuse, so yes, I can see why you’d shy away.

A Gentleman in Moscow: a negative review

Much as how Trump is a poor man’s idea of a rich man, the titular gentleman of A Gentleman in Moscow is a plebeian’s idea of an aristocrat, and simultaneously, an American’s idea of a Russian.

The premise of the novel is that Count Alexander Ilyich Rostov, unlike most of his aristocratic brethren who were either shot to death or forced to flee, is placed under house arrest in a fancy hotel. It conveniently enables the author, Amor Towles, to insulate his character from any of the consequences one might reasonably expect from being a Russian aristocrat during Stalinist Russia, and to slip out nimbly from beneath the burden of any of the research someone with no knowledge of Stalinist Russia might be expected to have to do in order to write a convincing book about Stalinist Russia.

I am ignorant of Russian history and culture. Amusingly enough, that is how I can tell Towles did no research. When someone as placidly ignorant as I am can recognize every single Russian cultural reference made, and can even spot the improperly deployed patronymics, nicknames, and surnames, it is certain that Towles has no more knowledge than I–in fact, given how glaringly bad the Russian names are, I’d wager I even know more. (It also enrages me that Towles thought Bulgakov was a poet. I suffered the whole time I was reading The Master and Margarita, and I can tell you that regardless of his other charms, Bulgakov was no poet.)

I would be able to overlook the lack of Russianness if the book itself weren’t so slight and incoherent. Here is an example of what I mean–at the very beginning of the book, the good count bounces up and down on a bed to gauge the key of the bedsprings, apparently G Major. How charming. Surely, he is someone of significant musical talent. But does his musical ability show up again in the novel? No. Towles wrote that scene as a one-off cheap trick. The book is essentially a long string of these, going nowhere.

Towles also likes to interrupt his narrative with pretentious disquisitions like this: “That sense of loss is exactly what we must anticipate, prepare for, and cherish to the last of our days; for it is only our heartbreak that finally refutes all that is ephemeral in love.” This last clause is a lot like saying, “the existence of apples refutes oranges,” or, “red refutes green.”

I do not hate this book because it has no plot and no verisimilitude. I have read books with no plot before, and enjoyed them greatly, and if I could mainline crappy fantasy books, I would. The problem with this book is that it has no vision, beyond a nostalgic admiration for the aristocracy. An admiration so un-American, that I wish there were some committee of subversive literature I could report this book to.

Rent: a positive review, with reservations

Much about “Rent” is timeless. The artistic struggle, the poverty, the need to carpe that diem–they are all classic. And there are some damn good songs. I have taken to howling “aoouuuuut toniiiight” when I’m riding my bike at 2AM.

And yet, “Rent” feels oddly dated to me.The rent is too damn high, but where are the battles between YIMBYs and NIMBYs? And where are the bigots? How are the LGBT folks living such unmolested lives? Especially now that Trump is president. For all its grittiness, “Rent” has aged into something positively innocent.

All the Light We Cannot See: a bad review

I really did not like this book.

Here is a quote, describing one of the two protagonists:

“He made such a faint presence. It was like being in the room with a feather.”

I am in a room with a feather right now. I forgot about it completely, until I saw it while sitting in my chair, thinking of other things. Then I thought, “I should throw this away. Are feathers compostable?”

The book is full of sentences like this. The most objectionable one is probably, “a calm peaceful place, insulated by fields, enwombed by hedges.” Enwombed. It makes you wonder if the author, Anthony Doerr, has ever had sex with a woman.

Doerr cannot be accused of possessing a tin ear. I would describe his voice as, “Hemingway on molly.” It’s not bad, and sometimes it gets pretty good, but the effect of the relentless simple, everyday words, and endless lists of subclauses crosses from rhythmic to soporific. It strikes me as lazy, but trying too hard.

At some level, Doerr is a hack. A successful hack, a sensitive hack even, but nevertheless, proof that China Mieville, that giant of scifi and fantasy, was right when he called literary fiction a genre like any other.

my San Francisco to Seattle packing list

So, I just rode from SF to Seattle (about a thousand miles) during the month of September, alone. This is my packing list, just in case anyone’s interested in doing a similar journey. It’s sort of roughly divided into three sections.

BIKE
bike tools
bike shoes (SPD-SL with a recessed area so you can still walk around easily)
spare spokes (I found these weren’t really necessary, but I’ve been accused of overconfidence before.)
SPD-SL pedals
portable pump (Get the kind with a PSI gauge, and where the head is attached to the rest of the pump by a tube.)
handlebar bag
rear panniers
tire irons
fresh new patch kit
tire boot
spare tube
sunglasses
water bottles (I had enough bottles to carry 3.5L total.)
U-lock
cable for U-lock

rear and front lights (It gets foggy along the coast.)

CAMPING
bug spray
camp towel (REI makes these microfiber towels that pack up really small.)
sleeping bag (Make sure you get a sleeping bag with the correct temperature rating. Most bags come with a rating, but that rating probably applies only to men. E.g. if a bag has a rating of 45, it will be comfortable for a man in 45 degree weather, but a woman will probably feel cold. Add about ten degrees to a bag’s rating. So the 45 degree bag will only be comfortable in 55 degree weather for a woman. If you do more research, some companies will provide ratings by gender for their bags.)
sleeping pad
sleeping pad patch kit
bivy
spare tent stake
dry bag for food
bear bag rope
clothesline
clothespins
camp suds
pillow
headlamp

MISCELLANEOUS
SmartWool baselayer
down jacket
down vest
rain jacket
rain pants
non-bike shoes
cash
underwear
armwarmers
2 pairs of bike shorts
2 shirts for biking
fleece-lined leggings
2 pairs of merino wool socks
merino shorts
sunscreen
multivitamins
pain meds
skin meds
moisturizer
world’s tiniest first aid kit
pepper spray
chapstick with sunscreen
wooden massager that I got at a job fair once
cell
charger
Kindle
cellphone battery backup
retainer
toothbrush
toothpaste
floss
dry bags
Leatherman
string
binder clips
straps with buckles

There are a couple more items I left off, but this mostly covers it. The only extraneous item I had that I did not truly need was the bear bag rope. Most state parks have food lockers, and I verified with the Oregon state park agency that bears are not really a problem.

All told, this weighed about 28 pounds. There’s very little I would change about this packing list, if I were to do this particular ride again.

I have mild regrets about trying too hard to minimize the weight of all that I carried. If you can shave off ten pounds, go for it, but a sleeping pad that weighs an extra pound, but is ten times as comfortable as an ultralight solution, is obviously better. You may as well err on the side of carrying too much. Unless you’re doing a very remote ride, which SF to Seattle is not, you’ll have plenty of opportunities to mail home excess gear.

Notice that there is no stove. I probably could’ve just barely had the space and weight for one, but I did okay just eating tortillas, beef jerky, dark chocolate, multivitamins, and blocks of cheese.

I hope you find this list useful!

the neoair xlite: a bad review

So bad, complete sentences are not warranted.

Pros: Packs light.

Cons: Sleeps like you’re on the floor of a bouncy castle ruled by a medieval two year old.

I have to use complete sentences to tell the story of what I did the first two nights I tried to sleep with this pad. The first night, I was staying at a friend’s house. The guest mattress was saggy, so I decided that it would be an excellent trial of the Neoair Xlite if I moved to the floor and slept on the pad. Bad news. I could not tolerate the Xlite and ended up sleeping directly on the floor instead.

Night the second, I was finally camping with the same friend. Perhaps the floor was unusually hard, or was radiating strange floor-particles through the pad, I reasoned. I deployed the pad again and it was still so uncomfortable, I ended up sleeping on the tent floor. That’s right, the Neoair Xlite was so uncomfortable that sleeping on rocky ground beat it.

This was the same night that the Neoair was torn by a rock.

When I went to REI to return it, every employee I talked to said that the Neoair sucked. Heh. If you’re looking for an ultralight sleeping pad, I’m not sure that the Neoair is actually the most uncomfortable out of the lot, but ultralight pads as a class might not be worthwhile if you value comfort.

finally, I have conquered a seventeen year old phobia

All this time, I’ve been fretting–what if a crazed maniac showed up and said, “Draw me a naked woman in twenty minutes, or I WILL DROWN YOU IN A BATHTUB FULL OF NUTELLA. WHICH I KNOW YOU DON’T LIKE.” What if? What if??

No more what ifs, now. Come at me, crazed maniac. I am ready now.

lady

The big shadow in the upper left is my hand, holding the cell phone camera.

I actually don’t know if this would satisfy the nutella killer that haunts my nights, because the left knee is actually rather horrible, the torso needs more attention, the left shoulder’s shadow is too dark and is poorly defined, and as usual, I didn’t do anything for the face, but it satisfies *me*, and that girl, she can be a tough cookie sometimes.

I had a revelation about drawing the body, which is that it is convex at all the rigid bits, and concave at all the non-rigid bits. (Rather, Walter Stanchfield, Michael Mattesi, and several other artists have told me before, and even demonstrated it a million times, but it never sank in until a few months ago.) The best example of that in this drawing is the bend in the torso in between the pelvis and the rib cage. I just never had the time to apply this thought, even during twenty minute poses, until last night.

a terribly hacktastic implementation of Conway’s Game of Life

I had to take a Ruby training course as part of my job recently. The instructor asked us to write Conway’s Game of Life without any conditional statements–so no “if”, no “unless”, no ternary statements, etc.

Once upon a time I would have thought she was on crack and a mean vicious lady and refused to play along, but I’ve grown up a little bit, and to my surprise, I was the only one in the class to come up with a solution.

This isn’t the full implementation, but the core of the game is calculating the state a cell will be in on the next tick. Here it is:

=begin
  The general gist is that you iterate through all the neighbors, gather the liveness states
  of each of them, and convert the array of liveness states to a string. E.g. the array of 
  states [true, false, true] would end up becoming "true_true_false" (since we sort the array).

  Ruby has the ability to pass the name of a function to a method called "send." This is useful
  if your method calls are so dynamic you have no idea what you're going to be calling, as 
  we are in this case. So we write one method for each condition: one live neighbor, two live 
  neighbors, three, etc. Using the set of states, we generate the correct method to invoke without
  ever having to resort to the use of conditional statements.

  The cases, taken from http://coderetreat.org/gol:
    Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
    Any live cell with more than three live neighbours dies, as if by overcrowding.
    Any live cell with two or three live neighbours lives on to the next generation.
    Any dead cell with exactly three live neighbours becomes a live cell.

  The one case I haven't handled is the case where two dead cells is not brought back to life, 
  but you could handle it using the strategy I've outlined.
=end

def true_true_false_false_false_false_false_false(board, cell)
  board[cell] = true
end

def true_false_false_false_false_false_false_false(board, cell)
  board[cell] = false
end

# The overcrowding case.
def true_true_true_true_false_false_false_false(board, cell)
  board[cell] = false
end

# I won't write all of them because that's boring.

def check_neighbor_status(board, cell)
  neighbors = []
  neighbors += [-1, 0, 1].map { |x| [cell[0] + x, cell[1] + 1] }
  neighbors += [-1, 0, 1].map { |x| [cell[0] + x, cell[1] - 1] }
  neighbors << [cell[0] - 1, cell[1]]
  neighbors << [cell[0] + 1, cell[1]]
  neighbors.uniq!
  # produces something like: 
  #   ['alive', 'alive', 'dead'...]
  neighbors.map { |n| board[n].to_s }.sort.reverse.join("_")
end

board = {}

board[[1,1]] = false
board[[0,1]] = false
board[[0,0]] = false
board[[2,0]] = false
board[[0,2]] = true
board[[1,0]] = false
board[[1,2]] = false
board[[2,2]] = false
board[[2,1]] = true


puts "Starting value of cell: #{board[[1,1]].inspect}"
# Generating the method name by checking the state of the neighbors.
method = check_neighbor_status(board, [1, 1])
# Using Ruby's metaprogramming abilities to invoke this method.
send(method.to_sym, board, [1, 1])

# Et voila, the state changed!
puts board[[1,1]].inspect

I was talking to a fellow dancer at an alternative blues event, of all places, and he pointed out that using a hash where the strings were the keys and the methods were values would have worked. Excellent point. The key insight is that you can use hashing to approximate conditional behavior.

Mainly, I’m posting this because did I mention I was the only person to get the solution, out of a room of about twenty professional computery types, and one of those people was my superhumanly competent coworker Lisa and I even surprised the instructor, and I *cannot* stop gloating?

I only look like a bad person, because I speak the truth. If you were me, you wouldn’t be able to stop gloating either.