This Is Why You Should Care About Horse Racing

When the gates open for Race 11, the crowd cheers, but when there’s a Triple Crown on the line, the crowd erupts. With every galloping hoof imprinted on the sand, the crowd crescendos. Hundreds of thousands of dollars are on the line. People are no longer sitting, they’re standing, or they’re jumping up and down.

There’s jostling in the crowds, and those who aren’t in a great position to see the race are trying their hardest to catch just a little glimpse of it from anywhere they can. The screaming and cheering continues, along with the horses, around the turns and over the straightaways. After the horses pass the final turn, the majority of the crowd realizes that the Triple Crown-hopeful is in the lead.

The crowd realizes that their hopes, which are sabotaged too often by life, may actually be fulfilled.

They’ve bet on this horse, not just to win money, but to see a dream come true. The galloping hooves continue and the crowd gets louder, and louder. And when American Pharaoh crosses the finish line, the sound is deafening. The cheering becomes one solid pitch of noise that happens to carry a multitude of human emotions.

You realize you just witnessed a being gain a piece of immortality and you hope that one day, you will too.

Here are some pictures from the day:

American Pharaoh and Co. warming up.

American Pharaoh and Co. warming up.

Not a bad bet.

Not a bad bet.

I'm happy because it was my bet.

I’m happy because it was my bet.

And the day is over.

Coding, Hackathon, New York City

Coming Through In the Clutch at Sports Illustrated’s Hackathon

“Hackathons are, like, my new favorite thing,” said not a lot of people. But I’m saying it, because I like building proof of concepts in a short period of time.

Hackathons are great reminders that great things can be built in no time at all.

Earlier this month, I participated in Sports Illustrated’s first hackathon, and this is a brief recounting of that sugar-filled, sleep-deprived, product-building experience. (No sports were actually played, unfortunately.)

We showed up around 9:30 a.m. because we were told that more people RSVP’d than the event space could handle. When I arrived, there were already about 10 over-achievers who had gotten there before me. I wanted to say, “damn them,” but then I realized, we were all probably sewn from similar fabric — the kind that welcomes waiting in lines to do work on a Saturday morning for the prospect of a unknown prizes (prizes had not been announced yet).

Around 10 a.m., the event started and we were allowed into the space (Time Inc. Photo Studio), which had a nice view.

The proof is in the pudding.

The proof is in the poster pudding.

A good view for building things that matter.

A good view for building things.

I can't say I read those two issues.

I can’t say I read those two issues.

There was coffee, donuts, bananas and plenty of other snacks to get fired up. My teammate, Brett, and I picked out a table and got settled in. Within about 15 minutes, there were speakers giving presentations to the group of hackers. This was a bit odd, and unfortunately, fell on the note of contrived. But alas, no donut is free. And the final speaker, Alex Bresler, said something that inspired what we would actually be building.

“It’s really difficult to determine who is more clutch than someone else.”

When I heard this, I thought, “Why? We can do that. We’ll do that.” I messaged Brett (sitting next to me), and asked what the thought about building something that rates the “clutchness” of players in sports, and allows users to compare different players. He responded that he liked that idea.

Left: Brett paying attention to speakers. Right: Me not paying attention.

Left: Brett paying attention to the presentations. Right: Me not paying attention.

Shortly thereafter, the speech wrapped up, and one of the guys sitting at our table asked us what we were working on. I stated that we had an idea, but we weren’t totally sure. We asked him what he did, and he said he worked on “statistical modeling,” or something like that. I was skeptical, as I’m sure Brett was as well — I could see it on his face. I decided to give a little more info about what we were working on, and this statistician dude asked if he could join our team. I thought, “I don’t know anything about this guy, but, why the hell not. He could be great.” I said, “yeah sure, but let me ask Brett.” Brett was not yet convinced, but finally, he decided to say yes too. And so we accepted this stranger onto our team.

I asked him what his e-mail was so I could invite him to our git repo, and he said, [actual-email-address]

I laughed a good laugh inside. I knew regardless of what would happen, I was probably going to learn something. Our new teammate’s name was Dan (and still is, actually).

After officially becoming team-complete, I gave Dan the idea straight up, he seemed to like it. We discussed how we would build it, and then we were off and running. The unfortunate time was roughly 1 p.m.; this was not a true 24-hour hackathon.

We coded through the “early” night and Dan worked up some awesome model for calculating clutchness. By around 1 a.m., we had something pretty serviceable. Subsequently, this was about the same time my bed started to call me. The problem was, my bed was miles away, and it started to rain, and I did not want to walk anywhere in the rain. We also had some nasty bugs in our code that needed to be squashed, and squash them we did. It was around this time, maybe a little bit earlier, that we started to pair program, because this is when 1 brain is worth about 1/2 a brain. Dan took off for his bed sometime around 2 a.m., I think? Not sure.

Around 4 a.m., delirium struck, and I told Brett I was going to need some nappy time. Brett, as though he were cast of iron, turned to me and said that he was probably going to keep working. I admired that, but I also admired my potential time with the couch. I briefly napped and I returned to our table 30 minutes later, hardly refreshed, but it was better than nothing.

Brett was working on some insane bash command that was downloading videos, compressing them, converting them to another format, and probably sending them to the International Space Station. I kinda thought it was magical, but that’s because everything was magical at that hour, including water. A toothbrush would have been magical, too.

The sun came up; that was good. Dan came back early that morning, and pushed all of his work to our repository. Suddenly, we not only had data, we had a real mathematical model computing the clutchness, or, Clutch Rating of a particular player. We were ecstatic.

As we got closer to stopping-time, I built out a brief outline of our pitch, and we made some last-minute tweaks. The judges arrived (including the CMO of Sports Illustrated, Damian Slattery; the Executive Editor of Sports Illustrated, Ryan Hunt; and the CTO of Time Inc, Colin Bodell) and said some short words, and with that, the pitches started.

Check out that high-tech digital display.

Check out that high-tech digital display of the pitching order.

We got up on stage, and it felt like we nailed it. Our product was quite complete, by hackathon standards. Users could:

  • Search through players, see a snapshot of each player and their overall Clutch Rating.
  • Click on a player and see more stats about the player, including a profile photo.
  • View all of a particular player’s plays that went into computing their overall clutch rating.
  • Click on a play to watch game footage of that play (the product of Brett’s insane shell command).

We were the last team to pitch, and after finishing, the judges went on with their judging.

About 5 minutes later, the winners were announced, and we took first place.

This is what winning looks like.

This is what first place looks like. From left to right: Alex (me), Dan, Colin Bodell, Brett

Plenty of post-hackathon networking ensued, and we went to get a few whiskeys — not that we needed them. We were already mostly drunk with delirium. After the second or third drink, I turned into what some would call, a zombie. I promptly made my way to the train station without eating anyone, and found my bed.

The next day, we were all off to work like nothing ever happened.

Check out our project at  

Coding, Hackathon, New York City

Winning at TechCrunch Disrupt’s Hackathon — 1st Place for Microsoft Outlook Hack

On Friday, May 1st, I was moving to a new apartment with a big ol’ U-Haul truck. On Saturday, May 2nd, I was at Techcrunch Disrupt for the hackathon, aiming to win. And win we did.

Disrupt Logo

Earlier that morning, Jeff and I discussed some potential ideas over coffee, omelettes, and flapjacks. We came down to one: create a timesheet automatically by scanning your sent e-mails and evaluating your past meeting invites. Some people know how infuriating it can be to create a timesheet for clients, because if you don’t log your time immediately, you can forget what you spent the time doing in the first place. So, this was a hack to solve that problem.

One line I was sort of OK to wait in.


When we started, I was already physically exhausted, but my brain was still fresh, and I was ready to rip.  Because we were a small team of three, we knew we had to make something with a reasonable scope.

Max productivity!

Max productivity!

We hacked and hacked, as those who hack are wont to do. And this is the rest of the story in pictures:

Backstage before the pitch!

Backstage before the pitch! 

The pitch video!

Making those bills.

Making those bills.

And this was my reward!

And this was my reward!

Jeff put together a nice write-up of the win here.

And that’s a wrap.

Coding, How-To

How to Create Geo HeatMaps with Pandas Dataframes and Google Maps JavaScript API V3

Get excited because we’re going to make a heatmap with Python Pandas and Google Maps JavaScript API V3. I’m assuming the audience has plenty of previous knowledge in Python, Pandas, and some HTML/CSS/JavaScript. Let’s begin with the DataFrame.

The DataFrame

First, you’re going to need a dataframe of “addresses” (can be a physical address, or even just a country name, like USA) that you eventually want to plot. (For the sake of simplicity, I’ll try to refer to the “address” as the “geo” for the rest of this document.) Second, since you are planning on using a heatmap, you’re going to want some sort of number that represents the weighted value of that row in comparison to other rows.

Let’s say your DataFrame looked like this:

grouped_country_df = main_df.groupby('country')\
                            .agg({'pink_kitten': lambda x: len(x.unique())})\
                            .sort('pink_kitten', ascending=False)
print grouped_country_df
geo_name count_of_pink_kittens
USA 3430
Spain 577
United Kingdom 352
Israel 292
Austria 196
Argentina 151
India 133
Singapore 66

Now you have a list of geos and some values to use as the weight when later creating the heatmap. But to plot these points, you’re going to need some lat and long coordinates.

Getting Lat Long Coordinates from Google Maps API

If you have a list of geos or “addresses,” you can use Geocoding to convert those geos into lat/long coordinates. From Google: “Geocoding is the process of converting addresses (like “1600 Amphitheatre Parkway, Mountain View, CA”) into geographic coordinates (like latitude 37.423021 and longitude -122.083739), which you can use to place markers on a map, or position the map.”

To use this Google Maps service, you need to have a Google Maps API key. To get a key, you can follow the directions here. When you sign up for an API key, you should select “Server Side Key,” since we will be running a Python script server-side to access the Google Maps API.

Once you have your api_key, you can work on getting geocoded results for all of your geos. You can do this with the following code:

import requests
# set your google maps api key here.
google_maps_api_key = ''

# get the list of countries from our DataFrame.
countries = grouped_country_df.index
for country in countries:
    # make request to google_maps api and store as json. pass in the geo name to the address 
    # query string parameter.
    url ='{}&key={}'\
         .format(country, google_maps_api_key)
    r = requests.get(url).json()

    # Get lat and long from response. "location" contains the geocoded lat/long value.
    # For normal address lookups, this field is typically the most important.

    lat = r['results'][0]['geometry']['location']['lat']
    lng = r['results'][0]['geometry']['location']['lng']

This only gets you so far, since you still need to do something with those latitude and longitude coordinates. We have a few options here:

  1. If you are building a web application, you can pass those values into an HTML template as variables and they will end up getting plotted via JavaScript.
  2. We can print out the format of the JavaScript, and later past it into our HTML file within script tags.
  3. Other approaches that I’m not going to talk about.

For the sake of time, I’m going to show #2, which lends itself to a one-off analysis. You’d probably want to go with some dynamic templating approach, like #1, if you are going to pull and plot the same data repeatedly.

Add the following code to your for-loop from above, right underneath

lng = r['results'][0]['geometry']['location']['lng']

# set the country weight for later. by getting the value for each index in the dataframe
# as it loops through.
country_weight = int(grouped_country_df.ix[country])
# print out the Javascript that we will be copy-pasting into our HTML file
print '{location: new google.maps.LatLng(%s, %s), weight: %s},' % (lat, lng, country_weight)

After running your script, copy the output, which should look like this:

{location: new google.maps.LatLng(37.09024, -95.712891), weight: 3430},
{location: new google.maps.LatLng(40.463667, -3.74922), weight: 577},
{location: new google.maps.LatLng(55.378051, -3.435973), weight: 352},
{location: new google.maps.LatLng(31.046051, 34.851612), weight: 292},
{location: new google.maps.LatLng(47.516231, 14.550072), weight: 196},
{location: new google.maps.LatLng(-38.416097, -63.616672), weight: 151},
{location: new google.maps.LatLng(20.593684, 78.96288), weight: 133},
{location: new google.maps.LatLng(1.352083, 103.819836), weight: 66},

You’re going to use these values in the next step.

Creating an HTML file that contains Javascript for Plotting your Lat Long Points.

You need to create an HTML file that contains some script tags within it. I am simply going to paste my code below with annotations. If you copy the location strings from above, you will be able to paste them directly into this HTML file under the “heatmapData” array (defined below in the code).

<!DOCTYPE html>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
    <!-- Load Google Maps API. -->
    function initialize() {
      var heatmapData = [
        {location: new google.maps.LatLng(37.09024, -95.712891), weight: 3430},
        {location: new google.maps.LatLng(40.463667, -3.74922), weight: 577},
        {location: new google.maps.LatLng(55.378051, -3.435973), weight: 352},
        {location: new google.maps.LatLng(31.046051, 34.851612), weight: 292},
        {location: new google.maps.LatLng(47.516231, 14.550072), weight: 196},
        {location: new google.maps.LatLng(-38.416097, -63.616672), weight: 151},
        {location: new google.maps.LatLng(20.593684, 78.96288), weight: 133},
        {location: new google.maps.LatLng(1.352083, 103.819836), weight: 66},
      // Add some custom styles to your google map. This can be a pain. 
      var styles = [ 
          "featureType": "administrative",
          "stylers": [
            { "visibility": "off" }
          "featureType": "road",
          stylers: [ 
            { "visibility": "off"}
          "featureType": "landscape",
          "elementType": "geometry.fill",
          "stylers": [
            { "color": "#ffffff" },
            { "visibility": "on" }
      // create a point on the map for the Atlantic Ocean, 
      // which will later be used for centering the map.
      var atlanticOcean = new google.maps.LatLng(24.7674044, -38.2680446);
      // Create the styled map object.
      var styledMap = new google.maps.StyledMapType(styles, {name:"Styled Map"});
      // create the base map object. put it in the map-canvas id, defined in HTML below.
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: atlanticOcean, // set the starting center point as the atlantic ocean
        zoom: 3, // set the starting zoom 
        mapTypeControlOptions: {
          mapTypeIds: [ google.maps.MapTypeId.ROADMAP, 'map_style'] // give the map a type.
      // Create the heatmap object.
      var heatmap = new google.maps.visualization.HeatmapLayer({
        data: heatmapData, // pass in your heatmap data to plot in this layer.
        opacity: 1, 
        dissipating: false, // on zoom, do you want dissipation?
      heatmap.setMap(map); // apply the heatmap to the base map object.
      map.mapTypes.set('map_style', styledMap); // apply the styles to your base map.
      // Add a custom Legend to Your Map
      var legend = document.getElementById('legend');
      // This is hard-coded for the countries I knew existed in the set.
      var country_list = ['USA','Spain','United_Kingdom','Israel',
      // for each country in the country list, append it to the Legend div.

      for (i = 0; i < country_list.length; i++) {
          var div = document.createElement('div');
          div.innerHTML = '<p>' + country_list[i] + '</p>'

     google.maps.event.addDomListener(window, 'load', initialize);


    <'div id="legend" style="background-color:grey;padding:10px;">
    <strong>Countries Mapped</strong>

    <'div id="map-canvas"></div>

Open the HTML file in your browser, and you should see something like this.

google maps heatmap

Et Voila!


What It’s Like to Have Surgery On Your Labrum

Shoulder surgery is kind of like getting drilled in the face with a wine opener. The only major differences are 1) the location of the drilling, and, 2) in the event of drilling your face, you’d probably die, but in the case of your shoulder, you will want to die.

OK, it’s not that bad, but it can be if you don’t have strong enough pain medication (more on that later).

I’ll break this down into a few sections for readability, which should allow you read whatever you care about (assuming you care about something).

Background of the Injury

I’m skiing with my dad and a few of our French friends in Zermatt; you can’t see much, especially not the Matterhorn. We are in shin/knee-deep powder and I come to a stop, but become slightly unbalanced and am barely standing, with the majority of my weight resting on my pole. My friend sees this and pushes me over. Annoyed, I stand back up and realize that I’m not going to push him over because he is ready for it, standing on two skis — he is also 200-220 lbs and about 6’4. So I decide to pick him up, because that’s obviously the better idea.

I wrap my arms around his legs at a very awkward angle and pull with all of my might. (Imagine standing on skis or rollerblades, rotating your torso 90 degrees to the right, and then lifting lots of weight.) What might happen is your shoulder will make a popping sound and have a minor dislocation. You might then say something like, “dang, my shoulder feels weird. I wonder if I dislocated it.” And that was me. With anterior and posterior tears to my labrum, I skied the following day with one pole; I probably should have put it in a sling.

How I Got to Surgery

The decision or path to surgery was not direct. For the first couple weeks after the injury, I had a lot of pain with overhead and behind-the-back motion. And at first, I was hoping my shoulder would just heal itself, like Wolverine. But after minimal improvements in those first weeks, I scheduled an appointment with my general doctor. He said to take it easy and come back in 2 weeks if there were no improvements.

I came back, then I got an Xray. Then I did PT. Then it still hurt. Then I went back to my Dr. Then I got referred to a specialist. Then the specialist said I should get an arthrogram MRI. Then I got the MRI. Then I went back to the specialist and he told me that my labrum was torn. Then I was sad.

By the time I decided I would get the surgery, it was June; 4 months has passed since I first injured myself. I had good range of motion again, but still couldn’t bench press or do anything overhead without pain. So I decided to go for it.


I showed up at the hospital 2 hours before surgery. The asked me to fast — no food or drink after 12 am the night before. Wondering why you fast? It’s because they don’t want you to throw up food and react poorly to the anesthesia. You don’t want complications when you’re knocked out, apparently.

Before they put me to bed, I noticed there were at least seven people in the operating room with me. The nerve block had already been administered by then, in addition to some form of valium. One of the last things I remember was the burning sting of the anesthesia coursing through my veins. And then I lost consciousness.

Post-Operation — At the Hospital (sucks)

Two hours later, I’m awake in the post-op room. People ask me how I am. I’m fine, except incredibly thirsty. I can also see that I am now in a sling. My vitals machine kept going off because of my shallow breathing. I said it was bullshit because I was sitting there intentionally taking deep breaths the whole time, just trying to get the machine to stop. (Of course I know better than the machine when I’m still wrecked from anesthesia.)

Hey, you there!

I’m only smiling because I don’t feel any pain, yet.

Once deemed ready to move to the next stage, they send me to the nurse room. In short: all of the nurses sucked, but they were nice. I was able to retrieve my clothes, and needed to put my shirt back on. A couple nurses tried to help me get my shirt back on, but in the process, my arm fell out of the sling and was hanging in the middle of space. So here I am standing in the middle of the nurse’s room with my shirt off and my arm dead between my arms. Fantastic.

When the Nerve Block Wears Off (Day 1)

I got home and started eating cookies, because I could. Around 9 p.m., the nerve block was wearing off, and I started to take my prescribed oxycodone. Around 1:30 a.m. I laid down in my bed.

And then I started to cry. The pain was unbelievable and continued to worsen. I had already taken more than the prescribed dosage of my painkillers, and based on the recommendations, should not have taken another pill for an hour or two. Around 2 a.m. I couldn’t take it any more. This was the kind of pain that will make you feel helpless. And once you start to feel helpless, you may begin to panic. I just wanted it all to end. I was damn near ready to go to the hospital for morphine or another nerve block, or jump out my goddamned window (I preferred the first two ideas).

I called my dad who was 3,000 miles away since there was a good chance he’d still be up. While being distracted by my father and pacing around my apartment, his girlfriend called my doctor and asked questions about my pain medication, and before I knew it, my doctor was calling me at 2:30 in the morning. (I could not believe it.)

Collectively, we decided that I could take another pill. I did and then slept in our la-z-boy chair that first night. Laying down was, in a word: impossible. In two words: damned terrible.

When You Need to Travel (Day 2)

I slept for about 5 hours before waking up in pain, and I immediately popped another pill. I needed to solve this pain problem. Around 10 a.m., I called my doctor and he just told me to come in as soon as possible. I left my apartment and could barely walk. I slowly struggled my way through the streets of Manhattan for a block or two before hailing a cab. Little did I know that this was about to be the most painful cab ride of my life.

All told, me and the cabbie rode 70 blocks together. Except I was the only one who cried the whole way. You don’t realize how bad NYC’s street conditions are until you experience something like this. I now have a lot of respect for people who drive and have back problems.

I pulled myself together and made it to the doctor’s office. He had me move my arm around a little bit, and again, immediate tears.

For the record, I don’t just cry for Argentina every day; it really just hurts if your painkillers aren’t doing the job.

“Everything looks fine,” he said. And then he prescribed me a stronger dosage of painkillers. This new dosage did the job.

Watching Time Melt (Days 3-30)

The more pills you pop, the faster the seconds will slip away from you. That’s a good thing if you have undergone shoulder surgery, especially on your dominant side. My first check-in came one week later, when my stitches were removed. That was also the first day I got to take a shower, and I was elated to do so.

With all your spare time, what can you do? Well, I wanted to exercise, but pretty much everything was out. I was only allowed to walk. In the third week, I started walking the stairs of my apartment’s building. On the fourth week, I began riding a stationary bike. You can probably start riding a stationary bike as soon as there is no risk of having sweat get into an open wound and risk any sort of complications or infection. I played it safe and waited till week four, though.

Throughout the time after your surgery, your mood should look about like this (X-axis = time, Y-axis = scale of 1-10. Blue is your shoulder pain. Red is your mood.):


As you can see, you are basically going to act like a moody, drugged teenager on day one.

During this time period, you should also remember to ice. I was provided with this shoulder pack that made me feel like a superhero of sorts.

Look at those enormous pupils!

Not easy to get on by yourself.

Below are some of your available activities during this first month of gloom:

Eating chicken and making dumb faces.

Eating chicken and making dumb faces.

Eat more stuff lefty. Make more dumb faces.

Eating more stuff. Making more dumb faces.

Accept flowers shaped like bears.

Accepting flowers shaped like bears.

Play with every iPhone application on the app store.

Playing with every iPhone application on the app store.

You may be able to master the sport known as "channel surfing."

Mastering the sport known as “channel surfing.”

Around the thirtieth day, or so, I tried out my ping pong skills. I probably shouldn’t have done this, but I could not resist. Consequently, my right shoulder was pretty sore the next day from being jostled around.

Tom Hanks ain't got shit on me.

Tom Hanks ain’t got shit on me.

Things You Will Learn That You Took For Granted

  • Having two usable hands.
  • If you had surgery on your dominant side, your dominant hand.
  • All of the things that you have [insert your age – 4] years of practice doing with your dominant hand. Two examples: 1) brushing your teeth, 2) wiping your ass.
  • Showers.
  • Putting on deodorant.
  • Washing your left arm.
  • Tying your shoes.
  • Tying your friends up.
  • Tying anything.
  • Cooking (This didn’t affect me, I just assume it would affect others. I hate cooking.).
  • Insurance — the medical claims submitted for all-things-shoulder-related totaled $29,578!!
  • Friends/Family — They are what kept me going in the first few days when it was the worst.


  • Prior to surgery, go through your house and think about all of the things that require two hands to operate; find a substitute for them. (Can opening, bottle opening, cooking in general, laundry, etc.)
  • Have your shoulder surgery in a place with a warm climate (avoid hot if you can). This will allow you to only have to wear t-shirts/sandals all the damn time, which makes a huge difference. I cannot imagine trying to “bundle up.”
  • Buy a pair of Vans slip ons. (Or old-person velcro shoes.)
  • Double-check that you have friends or family before doing the surgery. If you don’t, save up a lot of money so you can pay someone to do everything for you.
New York City, Random

Inject me with Ink and Then Give me an MRI

There’s nothing quite like having a 4-inch needle stuck into your shoulder, and then having dye injected shortly thereafter. Actually, there is something like this, and it’s called an arthrogram MRI. And actually, there’s another thing just like this too; it’s often referred to as “owwwwwwwwwwwww (actual medical name).”

Before we get to “procedures,” let me describe the environment of the 21st-century imaging facility and waiting room. I arrive at the packed lobby; it’s 10 a.m. I glide (stumble) over to the check-in counter, and say that I’m here for an appointment. “What for?” the receptionist replied.

“For the pain I’m having on my left ass-cheek,” I said.

Just kidding; I didn’t say that, but I should have. Instead I told the truth, that I was up in this hot mess of a hell-hole for an MRI. While I was getting processed, I overheard some real gems. The man to my right was complaining about computers and Obamacare. The man to my left had a tracheostomy and sounded a bit like Darth Vader. The woman behind me had a Nokia phone with the volume set to “Level 10: Deafening.”

I finished my paperwork and sat down right under the TV. Rachel Ray was on. The worst part was that the TV was being watched.

Carrying on, I sat in the first waiting room for 20 minutes, and then in some other random waiting room for another 10 minutes, and then in some dressing room for another 15 minutes, which is where I got to put on this haute couture:


I crossed my legs because that was the regal thing to do, and that dressing room was my palace, goddamnit. Then finally, some guy knocks on the door and escorts me to the Table of Terror (TOT), the origin of the arthrogram injection(s).

The Injection(s)

Once at the TOT, a doctor starts telling me how great this is all going to be. And I know that’s impossible, because I completely fucking hate needles. “Let’s just get it over with,” I say.

First up, local anesthesia to the shoulder area, which kinda hurts. Next, a little more anesthesia, and then, El Doctor sticks the 4-inch needle in my shoulder, which is basically brushing up against my joint. I am recoiling. The Dr. asks if it hurts. I say, “yes Mr. President.” And he hits me with some more Local A. Then he stabs me with the needle again. Whammy, I can’t feel it now.

There are other people in the room; they probably think I’m crazy at this point, but one of them is working an x-ray machine. The x-ray machine is used to get the needle properly placed at the glenohumeral joint (I Googled that). From what I can tell, the needle placement looks great, and I’m ready for the ink! Coach (the Dr.) tells me that I’m going to feel some pressure when he injects the contrast dye. I take a look at the size of the injection tube — not too bad– and I noticed that the ink was clear. For some reason, I was expecting blue — not sure why.

I look at my shoulder, and there’s a needle hanging out of it (awesome). At that moment, I wonder why anyone would ever do heroin. Then Coach goes for it and pumps me full of lead. It is hard to describe the feeling. I suspect it feels pretty shitty without the local anesthesia. I would describe it as an immense amount of pressure that you want to escape, but can’t go anywhere. It’s like a balloon being inflated, but it doesn’t have anywhere to go. And that was that (except for the part where I turned into Captain America).


From the TOT, I was on my merry way to the Magnetic Resonance Imaging machine, a.k.a, I was on my way back to the future. I was passed off to some sweet gal from God-knows-where (because I suck at picking out accents, even when people have a strong one, like she did) hits me with the details:

  • Don’t move.
  • Don’t move.
  • It’s kinda loud.
  • Don’t move.
  • It’s only 35 minutes.

I acknowledge that I understand her and stand there awkwardly in my sexy blue gown, waiting for the next orders. She hands me some ear plugs, and I decide to put them in my ears. Next, she has me lay down on narrow gangplank, and then she walks to the other room. Then, the gangplank starts moving into the narrow tube of the MRI machine. “Claustrophobia, here I come,” I thought. Moments later, the machine starts clicking, and zinging, and banging, and making all sorts of noises, so many that I started thinking the whole damn Chinese National Ping Pong Team had an exclusive reservation to play their sport, right inside my head. I closed my eyes.


When the sounds finally stopped, the MRI was complete, and thirty-five minutes had elapsed.

And in that glorious silence, it became clear to me after remaining physically still for those many musical minutes that The Chinese National Ping Pong Team is actually a well-versed team of terrorizing torturers. (And I will probably think twice before playing ping pong again.)

After I left the imaging center, I walked right over to the Union Square market and got a brownie — just like the other 6-year-olds do after leaving the doctor’s office. I am twenty-seven years old.

The End.

P.S. Skip to 1:28 of this video if you want to see what the procedure is like: