Minimalism, KISS, Elegance

This essay is just some exploratory thought sparked by http://www.zedshaw.com/essays/master_and_expert.html. It's worthwhile reading for anyone. You should read it.

I'm guessing you probably didn't read it anyway, so here's the summary: Masters of any subject know how to use the minimum amount of resources to accomplish goals. Experts like to build complexity where it doesn't exist to show off their prowess at handling their created complexity. For every time someone makes some computer function ridiculously simple, there are 10 companies putting buttons and knobs and whistles and levers onto something as basic as email.

What do I have to add? Well, the first things that come to mind are how this idea can be used in practice: When looking for places of employment, do the coworkers add complexity or remove it in their day-to-day activities? Do you find people engaged in discussions about arcane lingo that was internally invented to discuss invented complexity or are the discussing the underlying problems?

People who are good examples of this that spring to mind are John Maeda and Donald Knuth.

One of the reasons I love squash is that it is such a ridiculously demanding physical sport that to play at an advanced level you must remove any wasted movement; Ceteris Paribus, anything but the minimal path around the court means you lose.

In short, I'll end this rambling with a simple reminder: For those of us in technology, always ask yourself: "Am I making my users' life easier by removing complexity or more difficult by adding complexity?"

Endless Discovery Without Legal Repercussions

One of the benefits of not having caffeine on a regular basis is that the drug has stronger effects. You know that feeling you get when you learn something new and interesting -- that wondrous sense of a new host of ideas unfolding to you?

I get that sensation for several hours on caffeine. It's unfounded in that I don't actually learn fantastical new ideas for the few hours, but the sensation is totally cheap and won't put me in jail.

The Sierra High Route

The most spectacular long-distance mountain walk in North America is so little known that only a few hikers have made the trek in its entirety. During nearly 200 miles the backpacker will cross only one road, see only a few buildings, and walk on established trails less than half the time. And, as a bonus, almost all of the route traverses timberline, that marvelous landscape sandwiched between forest and talus.



200 miles of treeline hiking through the heart of the High Sierras. About 35-40 days. Some of the most pristine land in the entire US. I don't know that I want to do the entire thing all at once, but it does break down into a few 4-7 day sections.

What I'm looking for are partners. Who's game?

I Understand Garrison Keillor

Erin's 3 week music festival has kicked off, and I'm basically single right now. Always happy to go to eleven when I don't need to do things with other people, I spent 3 hours last night sprinting around a squash court followed by 3 hours today sprinting around a frisbee field. That's in addition to the bicycle ride to and from the courts and the fields. It's also been abnormally hot and humid out here, so I've been sweating like crazy.

In short, I was abso-freaking-lutely exhausted when I rolled in to our driveway at 6pm this evening. It felt fantastic. Out on the field today I had to reapply sunblock 5 times because I kept sweating it right back out. It was just that hot.

The reason I generally don't enjoy A Prairie Home Companion is that it's far too sedate, full of farmland navel-gazing. In my mid twenties there's just far too much energy for that sort of mental ambling about. But as I collapsed in a cold bath with a beer in my hand and the radio on I finally managed to get into the right mindset for Garrison Keillor.

I've been wonderfully relaxed all evening, but that change of taste was fleeting -- I listened to Wait Wait, Don't Tell Me while I washed some dishes.

Ultralight Living


There is a very clear moment in my adult life relating to self-understanding. I had just gone to an Eastern Mountain Sports store and purchased $700 worth of hiking gear. I had a job now and didn't need to keep borrowing my parents' stuff. One of the indispensable items was the Appalachian Mountain Club's White Mountain Guide (pictured on right). My first ever charitable gift was to the AMC. 

That book is a labor of love born by a century of hikers documenting all the trails over the ancient, rugged wilderness of New Hampshire. Its preface opens with the mindset of any backpacker -- "Hiking is a sport of self-reliance...":

Hiking is a sport of self-reliance. Its high potential for adventure and relatively low level of regulation have been made possible by the dedication of most hikers to the values of prudence and independence. This tradition of self-reliance imposes an obligation on each of us: at any time we may have to rely on our own ingenuity and judgment, aided by map and compass, to reach our goals or even make a timely exit from the woods.

While the penalty for error rarely exceeds an unplanned and uncomfortable night in the woods, more serious consequences are possible. Most hikers find satisfaction in obtaining the knowledge and skills that free them from blind dependence on the next blaze or trail sign, and enable them to walk in the woods with confidence and assurance. Those who learn the skills of getting about in the woods, the habits of studious acquisition of information before the trip and careful observation while in the woods, soon find that they have experienced the “Freedom of the Hills”.

It's an amazing feeling, to be at home and free by your own planning, resourcefulness, and ingenuity in a place most find wild and scary; these are the experiences liberation is made of. Being free and independent of as much as possible leads you to Ultralight Backpacking, where people go one step further and bring the lightest weight and most simple kit safely possible for a given trip. 


I want to do more of this in my everyday life. It's living minimally but not for minimalism's sake: To liberate onesself from the unnecessary stuff. I want to take the philosophy of Ultralight Backpacking and start living Ultralight.

You don't get this kind of experience from the latest fashions:

Thanks for the lessons, Dad.

John Mayer. Underrated.

I've found that a lot of of the songs Pandora has played for me by John Mayer have been surprisingly good. He seems to get a lot of flak in the pop culture press for being kinda douchey, but I've been impressed.



Transitioning towards my later twenties with parents who are no longer invincible meant this song hit home pretty well. I'm sure I'm not the first to experience emotions like this. At least for me, it captures the uncertainty of becoming an adult generation.

I Still Love You

In the spirit of the last post:


Dear Family,

I still love you, just space yourselves out next time.

Sincerely,
Ben

When Will it Stop?

One of the things I've found is that I fill up all of my day-to-day life with exercise, games, and errands. It's a wonderful, full life. When 7 weeks straight have some kind of a family visit, however, I get 7 weeks of backup from my normal life's obligations. Also I'm moving in a couple weeks so apartment hunting is thrown in there somewhere. Also our car is acting up and definitely needs maintenance. Again

I guess what I'm trying to say is that I want it all the extra crap to stop. I want a normal week where I don't have to orchestrate logistics of getting two people to six apartment viewings with one car. A week where I can work without worrying over some awkward family dynamic. I want to come home and think only about whether I have time to go play squash. I don't want to go AWOL from a group of friends for nearly two months anymore.




Dear World,

Next time you conspire to throw three years worth of crap my way in one month I will be forced to flip out, give you the finger, and reschedule sometime in the future.

Sincerely,
Ben

You Don't Need Images for Curved Corners

Curved Corners Without Images




I am almost certainly not the first to come up with this, but I did discover it independently. You just stick progressively narrower divs on top and bottom:

[------------]
[--------------]
[--------------]
[--------------]
[------------]

Good Software Analogies

One of the most common criticisms of software is that it's buggy, but anyone who's ever written a modicum of software is not in the least bit surprised by this. The layman does not share this understanding, to put it mildly. Since the process of programming, debugging, and shipping is not a readily understandable topic if you've never thought about logical implications to the 4th or 5th degree, one needs a good analogy. Here's mine:

Imagine most everyone has a robot in their home that takes blueprints for any object (a toy, a piano, a house, etc.), can build said object really quickly, but can't make any intuitive decisions. That is, the robot follows the designs on the blueprint exactly, for better or worse.

Most of the time objects come out of the robot just fine, but what if whoever wrote the blueprints didn't think about how his toy design would work when covered in baby slobber? What if the house the robot built was designed for 3 people but 7 people are trying to live in it? What if the blueprints for the desk the robot built didn't account for handicapped people?

Writing software is tantamount to making blueprints for builder robots that people end up making in their own home. When you're writing the blueprints you don't really know how people are going to use your stuff. You might not properly get the Feng Shui right in your house blueprints and people across the country using your blueprints get depressed. You never intend all of this stuff.

The blueprints are the code. The builder robot is your personal computer. The door that doesn't quite close is a bug.

Productivity Rules

I know many, many people out here in Silicon Valley who, despite being extremely bright in some areas, are stupid when it comes to being productive. Young, single males with ambition are incredibly likely to pull long hours and get at worst little sleep, and at best poorly-timed sleep. 



The basic rule of thumb is that If you are pulling > 40 hour weeks for more than a couple of months you're being less productive. "Not me", you say, " I was the smartest kid in my class and I have incredible mental endurance!"

Wrong. Even you, Mr. 1600 SAT, makes worse decisions after working 60 hours a week for a few months. For all the coders out there, think about it like this: How many genious decisions have you made at 3am after working for 15 hours? Now think about how many egregious hacks you wrote at 3am to get something out the door. Compare the two. I thought so.


How to Make Egg Rolls

Egg Rolls are a delicious finger food that are actually quite easy to make, if a little time consuming. Most of your time will be spent hand-rolling, so this is a great thing to make with friends or a date.

Step 1: Make the Egg Roll Mix.
Just follow the instructions on the back of egg roll wrappers that you can find in your grocery store. It's really not much other than "chop up ingredients and stir-fry. Let cool."
  • You can substitute soy sauce for the more-rarely-used fish or oyster sauce.
  • You really do need to use ground pork. I've tried ground beef or turkey and they don't come out very well at all.


Step 2: Rolling the Egg Rolls.
This is the time-intensive step where it's much nicer to have company. Or, if you're like me and you're bored one afternoon while your girlfriend is off traveling you can listen to NPR and do it yourself.

  • Place the wrapper on a cutting board and wet the edges using a brush (this will make the wrapper stick to itself as you roll it up).
  • Place 2 tablespoons of the mix in the center of the egg roll horizontaly from left-to-right.
  • Fold in the left and right corners.
  • Fold up the bottom corner.
  • Roll snugly.


  • After doing this for a while you'll have egg rolls ready for frying.


Step 3: Frying
This part isn't too tricky, but you can burn them pretty easily. 
  1. Heat a frying pan with about 1.5" of oil on a medium/high heat. Let the oil get hot (if it's starting to smoke it's too hot).
  2. Place egg rolls carefully in the pan, cook for around 15 seconds. 
  3. Flip the rolls onto the uncooked side, cook for another 15 seconds
  4. Remove to a second plate. I like to put a paper towel over this plate to soak up some of the oil.

Step 4: Eating.
You can eat the egg rolls as is, but some condiments are often delicious. I've tried mustard and teriyaki sauce but I'm sure anything that would go well with asian food in general would work.




Final note: I learned this from observing my mom while growing up. Thanks, Mom!

How to Beat an Old Man at Squash

You are a young, fit squash player and you come across an opponent who looks to be older than 60 and about to croak. You have probably been building a solid, controlled squash game. Your game probably emphasizes pressure shots that move your opponent around the court when you are in good position and emphasizes higher, softer shots when you're in bad position when you're under pressure so that you have more time to get back in good position. These habits are all good things.

But if there's and older gentleman who is apparently at your skill level you need to ignore all of those carefully learned tactics. This older gentleman is not playing at your skill level because he's super fit. He's playing at your skill level because he can probably put that darned ball exactly where he wants to with accuracy that borders on the silly. He will hit soft shots as much as he can, slowing the game down so your vastly superior fitness doesn't really matter. While this may sound mean, overpower the old fart.

You don't have to worry as much about accuracy anymore at this point, because he will beat you at a game that relies on accuracy. Odds are he's been playing and practicing those shots for longer than you've been alive. Make the sucker run, and run hard. Beat the squash ball around the court. Punish the little black orb with serious pace again and again and again and again and again and again and again and again and again. He will respond by trying to take the speed off the ball with lobs and drops. Run them down and power it down the wall or cross-court. Make the game a fitness contest. You'll lose a racket skills context, but you can win a fitness contest.




If you don't know all this before your match and are only told it afterwards by a pro that was observing your defeat, here's what you do: Realize that the tournament you were playing in is at a luxurious private club. For at least an hour after your match make extensive use of the jacuzzi, steam room, sauna, bountiful bath products, and plush leather chairs in the locker room.

Locked in by Your Friends

Any asocial web app (e.g. Yahoo Search) lives in an entirely different market than the social kind. This market, where users can leave for greener pastures without any cost to themselves, is a breeding ground for healthy competition. When google started returning better results people could just leave Yahoo. They didn't have to convince their friends to come with them (even though they did). But if orkut, hi5, friendster, or any other fledgling social network makes a better experience nobody will really care. Are any of your friends on hi5? Had you ever heard of hi5 before?

If you wanted to move could you get all your friends to move with you? Do you want to upload all your photos again? This is why you still only hear about myspace and facebook, and will continue to only hear about myspace and facebook. It's nothing more than a two-player oligopoly which has accurately surmised this fact and split up the market along demographics. From this portioning of the demographics you, the individual, really has zero choice.

The lack of choice in social networks is probably not news to any of you, but what you might not be aware of* is that the Current Big Thing in social networks are social apps. It's web 2.0 built on top of your social grid. Play scrabble and compare scores with your friends. Adopt a pet and show it off. There are thousands of these apps being used by millions of people. For the most part they all suck, but not because the developers suck. You can generally blame the ineffeciences of an oligopoly. You can blame Facebook and Myspace.

Myspace and Facebook both have development environments, they both suck, and neither of the companies really have any need to change. If you want to make a social web app you have one of two choices. The social networks aren't just locking in end-users, they're locking in the content providers.

Web 1.0 was a quality-based free-for-all. Web 2.0 was a land-grab.



* People I know aren't the kind of people that use social networking apps, it turns out.

Abstract Yourself

In a recent essay Paul Graham came up with a powerful idea about how certain topics never seem to lead to clear debates.
I think what religion and politics have in common is that they become part of people's identity, and people can never have a fruitful argument about something that's part of their identity. By definition they're partisan.
...
In general identity gives you strength while making you stupid.
This is true of far more than just religion and politics. There are loads of different topics and situations where having vested a part of your identity leads to powerful mistakes. Here are just a few off the top of my head.
  • If you purchase a stick of deodorant because you're a Micthum Man then identity decided where to spend your money.
  • If you never hung out with people outside your own clique in High School then identity kept you from making more friends.
  • If you spent several hours arguing on the internet in some flamewar then identity just wasted your evening.

As Paul said in his essay, however, identity does give you strength.
  • The strength to sacrifice your life for your child because your family is that self-sacrificing.
  • The strength to stay late at sports practice because your team works hard.
  • The strength to stick with abstinence-only education because people of your faith don't have premarital sex.
That last item in the list should deliberately set off alarm bells. What makes it different from the first two is that the strength you gain from the added identity is vastly outweighed by the stupid. This is because the first two espouse virtues (work hard, self-sacrifice) while the third espouses merely a perceived instance of a virtue (purity). Very often prescribed actions that are meant to make people virtuous (e.g. "don't combine pork and dairy") turn out to be misguided. Stick with groups that hint you towards virtues, not specific actions.


The second aspect of identity that makes people stupid is the whole "us vs. them" mentality. It's not hard to find -- just do a google search for "sports fans arrested". People stop caring about virtue at all and start only caring about what side you're on. Tell your teammate you support them but if you catch them deliberately taking a fall again they will have hell to pay. Make your group have an identity that espouses virtues.


So whence the title of this post? Abstract your identity away from specific actions that any part of your identity prescribes. Build your identity out of virtues and general ideas. Gravitate towards groups that do the same. Something that makes you stupid makes you weak, not strong.

Closing the Loop

I'm not the first person to talk about how sweet closures are. I'm assuming you know about them already. Javascript, the rinky-dink language most people associate with toggling web page elements, has them. Recall that Javascript also lets you modify the DOM. This means that you can do all the totally awesome stuff that closures get you with objects in your web page.

I'll give an example of some of this sweetness where I'll be using the prototype.js framework. You don't need to know anything about it other than it facilitates OOP in javascript*.

Here's the basic idea of my demo: You've got this really complex web app and you want to build a twitter-like service on top of it. Let's call it Tweeter (don't sue me!). Lets say it's an enterprise web app and you want your company to be able to tweet with their coworkers. Lets also pretend that a mashup with twitter isn't an option -- maybe this is the NSA or something. Just pretend.

Product decided that Tweeter will suck unless lots of people use it, and that nobody will use it unless they can tweet all over the existing app. They want to tweet anytime anywhere. This is a web app, remember, so this means building divs and spans in like 50 places or something, right?

Of course not! You scoff at such silliness! You're a smart web developer -- you know that if you write a function called makeTweeterInput() that prints the divs and spans on your web server you can just call makeTweeterInput() instead of writing out the divs and spans in all 50 places. You're so smart!

But you start using makeTweeterInput() and you run into a problem when you have more than one on the page: You gave those divs and spans ID's so javascript could access the divs and spans correctly, but now you have multiple divs and spans. If only there was some environment where variables could be looked up by name! If only there was some way those divs and spans knew where they came from.

In my previous post I talked about how you could use closures to make sure you were referring to the right this. Now I'm gonna show you how nice it is using closures to make sure you refer to the right DOM objects. (note: this relies on prototype.js's handy Class.create())



var Tweeter = Class.create({
wrapperDiv: null,

initialize: function() {
this.wrapperDiv = new Element('div');

this.tweeterText= new Element('textarea');
this.wrapperDiv.insert(this.tweeterText);

this.submitButton = new Element('input', {
'type': 'button',
'value': 'tweet this'
});
this.submitButton.observe('click', this.submitTweet.bind(this));
this.wrapperDiv.insert(this.submitButton);
},

submitTweet: function() {
this.wrapperDiv.update('submitting...');
someAJAXCall(this.afterSubmit.bind(this));
},

afterSubmit: function() {
this.wrapperDiv.update('tweet totally submitted');
}
});


Now, all I have to do to put this into a web page is create one and drop it in.
var tweeter = new Tweeter();
var someDiv = document.getElementById('someID');
someDiv.insert(tweeter.wrapperDiv);


Each object created will know precisely which object it is on the page because closures have literally bridged the gap between the javascript variable environment and the DOM.

See this in action. (edit: this web server has since been killed)







PS: You might cringe at the idea of creating DOM objects in JS. The performance really isn't an issue**. I know of at least one app on a prominent social network that has an active user base in the millions that uses this method.


* If you regularly write in javascript, you probably should get to know it.


** Technically, I think that if you don't ever reload a webpage and just keep adding objects with closures via javascript you will leak a little memory, but at a pretty slow rate. Closing the browser, web page, or refreshing the page will take care of it. In short this pretty much isn't an issue.

For My Non-Technical Readers

I've joined in on a little experiment with some of my geeky friends wherein we all made a pact to blog once per day for a month. Each post must stand alone as something interesting and worth reading.

Mom, Dad, these posts probably aren't for you. Sorry. I'll get back to posting the tasty things Erin and I are cooking around mid-March.

What's This?

If you've ever tried to write heavily-interactive web pages you've probably come across the special javascript variable this. People usually make the mistake of thinking this is the same thing as self in other languages (wrong), and in fact you might come across code like this:

var Foo = {
message: 'hi there!',

bar: function() {
var self = this;
var div = document.getElementById('some_id');
div.onclick = function() { alert(self.message); };
}
};


If in that onclick function you instead wrote this.message you'd alert a null value instead of 'hi there!'. "What the hell?", you ask, wondering how that onclick that clearly is within the scope of Foo (after all you can refer to self, defined outside the function body), all of a sudden have a different this? What the hell is this, anyway? The answer, as with a lot of nerdy questions, is "It depends".

  • In an object method ( Foo.bar(...) ): this is a reference to the object (i.e. Foo).
  • In an independent function call ( doStuff(...) ): this is a reference to the global scope (generally the window object).
  • In an event handler ( <div onclick='alert(this);'>): this is a reference to the DOM element that fired off the event (event.srcElement).
So in our case this starts off referring to Foo, but once the code in that onclick function is run it will be in the scope of an event handler, so this will refer to the div that was clicked. Javascript does have closures, however, so you can refer to any variables defined in the same closure that the function was (in our case this means referring to self).

This can be a total pain to work with since you have a variable that silently changes based on execution scope. Furthermore, this is in a language with functions as first-class objects, letting you apply these functions anywhere. Don't you wish you paid more attention during that Lisp course?

The best solution I've come across is to (1) grokk Scope and Lambdas and then (2) use prototype.js's Function.bind(). Calling bind on a function in javascript will wrap the function in another, locking its execution scope to an object specified by the argument. So we can now write the original code like this:
var Foo = {
message: 'hi there!',

bar: function() {
var div = document.getElementById('some_id');
div.onclick = function() {
alert(this.message);
}.bind(this);
}
}
There doesn't appear to be a huge gain here over the original code. Today is just a teaser. This method, however, opens up some much more powerful things to get some really nice OOP behaviour with DOM objects that I'll be writing about tomorrow (and hopefully demo'ing a little bit).

Fish Tacos!

Erin sent me on a small errand to pick up ingredients to make some fish tacos tonight, and I decided to go to eleven. Specifically, we had never actually made them with a proper crema sauce before and I decided to fix that. After a quick search online of possible recipes, I came up with the following bit of experimental cooking.

White Cream Sauce for Fish Tacos:
  • 3/4 cup sour cream
  • 1/2 cup mayonnaise
  • 2 tbsp lime juice
  • 1 tbsp ground cumin
  • 2 whole red jalapeno peppers.
  1. puree the jalapeno peppers with a dash of vegetable oil and lime juice
  2. mix the pureed peppers with the remaining ingredients.

Keep in mind that I did it all to taste so those amounts are vague approximations.
  • To balance the sour cream and mayonnaise: when it's complete you should only barely be able to taste any mayonnaise.
  • To get the viscosity right just keep adding lime juice until the mixture is about 1/3rd as thick as mayonnaise.
  • Add cumin to taste, but you shouldn't taste too much cumin in the finished product.

They were so freakin' delicious I had 8. I guess playing 3 hours of squash on both Saturday and Sunday made me huuuuuuungry.

I'm a Lazy Bum and it's My Greatest Strength

From this rant.

I believe that computers are meant to serve people and not the other way around. That means that if something inherently simple is difficult to do, it's wrong.

Not everyone agrees with this. A surprising number of people like things to be difficult. I have never understood this, but it is a fact. Some people revel in the intellectual studliness of mastering, say, C++ template programming or x86 assembler. I don't. I think C++ is a pain in the ass. Life is short, and I would rather spend my allotted time skiing or making love to my wife than worrying about whether or not I need to define a virtual destructor in my base class in order to avoid memory leaks. And that means that when I want, say, for something to appear centered on the screen, I want to be able to do it by typing "
center" rather than "margin:auto". If I can't tell a computer to center something by saying "center", then as far as I'm concerned the computer is wrong, not me.

Like I said, not everyone buys in to this worldview. I don't get it, but it is surprisingly common. I think it might have something to do with job security. I first encountered the complicated-is-beautiful mindset when I was working for NASA. I had an idea for how to simplify spacecraft sequencing and make it less error prone. I figured everyone would love it. To the contrary, the establishment fought the idea tooth-and-nail (and still does to this day). And this attitude is 
everywhere. It's the reason the tax code is so fucked up. It's the reason the law is so byzantine. It's the reason that languages like C++ and Perl thrive.

I like simplicity. I think the computer should have to conform to my brain and not the other way around. 

Different people have different ideas of what it means to "work". For me, the ratio of effort expended to the quality of the [finished product] is paramount. I want to put forth as little effort as possible to get something that looks decent. (
Yes, I'm a lazy bum. It's my greatest strength. Laziness is a powerful motivator for finding more effective ways of doing things, and it has served me quite well.) Everything else is secondary.
(emphasis mine)
I agree with everything the original author said except for the part where he muses that some people love complex computer issues because of job security. I think it's instead because they like feeling smart, and mastering something complex is certainly something that can make you feel smart. Inventing complexity where there is none, however, is not smart and the amount of wasted effort therein could probably fuel an economic recovery.

Cruel Irony

It's been over two weeks since my oral surgery and everything has progressed without issue. However, on the very day I can start eating whatever I want I come down with a head cold so that I can't taste anything anyway.

Squash Faces

The Tournament of Champions, one of professional squash's biggest annual events, is currently getting under way in downtown manhattan at Grand Central. I've been following the draw and how some predicted outcomes have played out along with the rare upset here and there. In looking at the pictures, however, I've found something far more interesting: The faces people make while playing.



Oh, Cañada

I had a checkup this morning at my periodontist to see how the gum surgery sites are progressing. They're doing just fine, and thankfully I'm feeling pretty good too. Good enough to finally get out and exercise after being housebound for quite a while. By which I mean I biked from the periodontist's office all the way to work along a route that is nowhere near direct but quite scenic. A map can me found here. There are some good climbs at the beginning and end of the ride as I go over the ridge in between the main population centers to the East and the resevoir and watershed to the West. The hilight was definitely the ride along cañada road right next to the resevoir with an untouched valley surrounding me. 
The bike ride ended up being 20 miles (including the ride to the periodontist), and it's clear that I've been a little lax in my exercise. My legs shouldn't feel this tired!

Mr. President

Maybe it was the narcotics, but I started to tear up a little when I thought I heard someone say "...and will to the best of my ability preserve, protect and defend the Constitution of the United States." and fully understand what that meant. 

I Have Vicodin

Well, I don't technically have it yet but I have a prescription for it. I just got home from some minor gum surgery. It was an interesting experience. Far and away the worst part was getting the shot of Novocaine to the roof of my mouth, which hurt worse than anything in recent memory. After that, however, it was just me lying back for an hour or so as the surgeon and her assistant went to work.

The bus ride back turned out to be much more eventful. At the stop where I waited to pick up the bus there was an elderly woman standing in the shade of a rather large sign. Seeing as there was room for at least 3 people in said shade I decided to wait there with her. Once I got within 4 feet, however, she started pacing around away from me mumbling about how "... oh sure just walk right up behind me not two inches away christ god almighty go right ahead and take the whole shade for yourself lousy young man I wouldn't have invaded your personal space like that why did that happen oh geeze...". Now, I had just come out of surgery but Novocaine and Ibuprofen were the only drugs I was under the effect of. I suspected she was quite crazy, so I went and hung out in some shade 40 feet away.

A nice little hilight to the end of the bus ride, however, was that I got to both use some Mandarin and help a kind old lady out (not the crazy one). She got on, and was talking to another rider in Mandarin about how tired she was and how the full bus was a pain with all her accoutrements. I was getting off the bus a few stops after she got on so I stood up up, surprised her with "Mam, would you like to sit down?" in her native tongue, and watch the confusion turn to comprehension, realization, and then the warm happiness that only the timeless face of eldery asians seem to manage.

In Memoriam: My Christmas

Here is a list of the things that went wrong on my week off at Christmas, as they happened.

Dec 20th
  1. Flight to Boston cancelled, rebooked two days later.
  2. 1 hour spent with American Airlines trying to get rebooked earlier.
  3. 2 hours spent wandering various checkin lines to see if another carrier will get me to Boston any earlier. Get rebooked on a red-eye through Toronto with Air Canada one day later.
Dec 21st
  1. Get up at 5am to go to the airport.
  2. Pay taxi to airport with debit card. Forget debit card in taxi.
  3. Get on flight to Toronto without issue.
  4. Land in Toronto where it snows all day, but the Canadians know how to deal with inclement winters and are unfazed. Their timely arrivals/departures show this.
  5. Due to my quasi-international flight, I have to pick up my checked luggage at special baggage claim.
  6. The suitcase with all my warm clothes and gifts for others did not make it to the special baggage claim.
  7. After talking with baggage service, I exit through security and check normal baggage claims for my missing suitcase. No luck.
  8. Go back through security and wait for my flight to Boston.
  9. Boston is not as good with the snow, and my flight from Toronoto to Boston leaves 7 hours later and gets in at 1am. I then must fill out a missing baggage form.
  10. Thankfully, a couple of friends who are informed of my trials have offered to pick me up at the airport.
Dec 22nd
  1. As I didn't travel on this day, I had a great time hanging out with friends, visiting Athena, and getting some nice beer at John Harvard's.
Dec 23rd
  1. A day in Boston with the nuclear family. It's quite interesting and sometimes quite fun, but everyone involved is tired so we're a little on edge. Another 2.5 hours spent in a car driving from Boston to my parents' home in New Hampshire.
Dec 24th-25th
  1. A couple of restful days spent in NH with the family. This was a relaxing period. Unfortunately, I had fallen ill from the loss of sleep and exposure to others in airports.
  2. I get a phone call from baggage services telling me they can't deliver my suitcase with all the gifts for my family until Friday, the day I return to Boston.
Dec 26th
  1. My brother was already driving back to Boston from NH to fly back to California, so I hitched a ride with him, planning to meet up with some friends and spend the next two nights in Boston.
  2. I spend 15 hours walking around Boston with a 40lb. trekking backpack full of clothes and received gifts on my back. This is not all bad, however, as the exercise is nice and I get to see a lot of places I hadn't been to in a long while.
  3. I would have spent the night at a friend's house in Cambridge, but his flight is cancelled. I am stuck with a hotel room around Harvard Square.
Dec 27th
  1. My friend, who was going to be back on the 26th will now arrive today, the 27th, at 11:30pm if everything goes as planned. I have a flight at 7am the next morning. This essentially means I will need to get another hotel room.
  2. Having been around Boston with friends and on my own and having all my friends out of town, I decide to get myself a modicum of comfort and book a room at the only hotel right at the airport: a Hilton. The rest of the afternoon and evening is relaxing and I get a good night's sleep.
Dec 28th
  1. I arrive at Logan Airport 1.5 hours before my domestic flight and pick up my suitcase that I was supposed to have 6 days ago. Normally this is plenty of time, but the American Airlines check-in line takes over an hour to get through, and I get to the security checkpoint 15 minutes before my flight departs.
  2. I barely make it on the plane. I don't know it yet, but my luggage didn't make it.
  3. I arrive in San Francisco. My checked bags do not.



I usually enjoy the excitment of air travel since it means I'm usually about to embark on an adventure, but right now I'm quite glad I don't have airline travel ahead of me for a long, long time.