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]@alum.mit.edu.

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 clutchratings.com.  

Standard
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! http://techcrunch.com/video/holy-timesheets/518803556/

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.

Standard
Coding, Hackathon

The Mysteries (and Subsequent Thoughts) a Newb Encounters When Learning Web Development

(This was initially an e-mail I  sent to a friend who was putting together a class on Scala. I’ve decided not to censor the language; I think it adds, let’s say, personality to the piece.)

“These are questions/mysteries/thoughts/realizations I’ve had through teaching myself web development over the last year. I’ll just take you through my thought process at different points in time.

  • I want to teach myself Ruby on Rails because you can build web apps with that really fast, and it seems to be a good way to go.
  • I bought a Mac because I had previously tried to install ruby/rails on a PC and it was a fucking disaster
  • I start by buying a book on Ruby (Chris Pine’s “Learn to Program”)
    • Wait, why am I writing things in the terminal?
    • When do I make a dynamic site?
    • How do I make a dynamic site with ruby? What does the implementation look like???
    • What the fuck is the terminal?
    • I know how to write loops and create functions!
    • Sorting? Fuck this.
    • Fuck this book, I’m going to dig into Rails.
  • I buy “Rails 3 Tutorial” by Michael Hartl
    • This setup is crazy. I can follow directions, but what the fuck am I actually doing?
    • What the fuck is git?
    • What the fuck is github?
    • What the fuck is heroku?
    • What the fuck is active record?
    • What the fuck are gems?
    • What the fuck is bundler? Why am I typing bundle install and bundle update? What is going on here?
    • I thought I use mysql for database stuff. What is this sqllite?
    • Why am I setting dependencies?
    • What is this DS_store shit?
    • Why am I writing stuff in the terminal again?
    • When do I write code?
    • OK, I’m writing code, I’ll finally get to use some of my ruby skills?
    • What’s this embedded ruby?
    • Shit, I hardly even know HTML/CSS. I should probably learn HTML/CSS.
    • OK, I’ll come back to Rails maybe.
  • I build a simple 1-page site by brutally hacking my way through it and googling absolutely everything. I do this in HTML/CSS and use a GUI FTP to push files to the server.
    • It fucking works!
    • I need people to contact me though. So I need to make an email form.
    • Uhhhhh. How does that work? That’s PHP, huh? Google. Google. Google.
    • Copy and Paste code, change some variable names, and when people submit their email, it sends me an e-mail with their form input!
    • I’m awesome!
    • PHP is cool!
    • I should learn PHP.
    • Wait, what’s javascript?
    • What’s jquery?
    • Oh! I can use javascript for stuff that happens visually on the front end. You mean javascript is the language of web browsers?
  • “I should learn HTML5!”
    • OHHHHHHHHHHHHHHH. So the browser is what you are commanding when you code stuff on the front-end. OHHHHHHHHH, so that’s why you should update your browser! It’s because developers of the browser build in updates that let you code things easier. Aha! That’s how some attributes and styles get deprecated.
    • Javascript, Javascript, I want to learn this.
    • Oh, but I want to learn more PHP.
    • What’s jQuery again? Take a tutorial. That was EASY, AND JQUERY IS AMAZING!!!!!
  • I’m going to build a commenting system
    • I’ll use PHP. This makes sense, I can see all of my files and I never have to write anything in terminal. Jeese, what was that github shit, anyway? A thing of the past!
    • Lots of copying and pasting.
    • Fuck it, I’ll start from scratch.
    • What the fuck is MAMP? Ohhhhhhh, it’s like localhost:8000. It’s a local server! How does that work? Whatever, it works. This is cool.
    • Functions are neat. Nevermind, functions are amazing. So that’s part of programming? Manipulation of the functions that someone else already wrote?
    • Oh, so that makes sense, a language is written by someone, and you learn it by figuring out the functions and other capabilities of the language.
    • AJAX. This is magic. Fuck, it’s hard to write. Wait, not hard when you use jquery .ajax {} to write it.
      • So, AJAX lets me make server calls and take actions without ever loading up the script’s result in my window.
    • I can create a mysql database locally?
    • How do I move that to a live server?
    • Thinking back, what the fuck was sqlite anyway?
    • I set up a live mysql database.
    • I’m writing queries! Things are saving in the database!
    • I’m awesome!
    • I still want to learn javascript
    • APIs? AP WHO?
  • I’m going to go to a hackathon, I think I can hack something together.
    • Shit, it’s all in JS.
    • At what point does the server-side stuff come in?
    • You mean I don’t have to use PHP here? I’m not following
    • Oh, hi Toby, nice to meet you!
    • win_and_slide(); (We win the hackathon.)
  • I wonder if ruby/rails would be easier if I looked at it now.
    • git/github make sense!
    • heroku makes sense!
    • installation makes more sense, but not complete sense!
    • Setting gem dependencies, kinda weird. “Gem,” really? That’s the word you chose? That’s still a little confusing to me.
    • ERB. Hmm, not so bad.
    • Scaffolding, this is interesting. I can build an app in like 10 minutes?
    • Where’s the database in this mix?
    • Hmm. How do I write js/jquery in this to make things work?
    • I’ll have to do more tutorials.
  • I go to the coke/spotify hackathon.
    • I write this e-mail.
    • GitHub is back. Dang this is really neat! I see what’s happening here.
    • Our team wins the hackathon.”

… and the learning never ends.

Standard
Coding, Hackathon

Winning 2nd Prize (Place?) at Music Apps Hack Weekend!

This past weekend, Spotify and a few other brands put on an amazing hackathon at SPiN NY. Yes, there was ping pong, and in fact, there was a ping pong tournament. Other things that were there: lots of Mountain Dew, lots of alcohol, lots of Doritos and lots of McDonald’s. All four of those items helped everyone get through the weekend, and they were there due to the epic sponsorship of the whole event.

The event kicked off on Friday night with a live performance from “Blood Orange,” which turned out to be really awesome. I showed up the next day around 9 a.m. for the breakfast, which was provided by McDonald’s. McDonald’s did a good thing and gave all of the leftovers to a shelter.

As I was sitting down reading about the Spotify API and trying to figure it out, a guy sat down next to me. He started talking with a friend of mine — and my friend told the mysterious gentleman that I could use some help (it was true). Spotify’s API was all JavaScript, and I’m not as familiar with OOP JavaScript as I wish I was. Thus, I was introduced to Toby at about 11:30 a.m., and we started working together at about 12:00 p.m. (late start).

We were setting out to build the Spotify Apps game. The idea initially came from my girlfriend, Tal. She told me about Apples to Apples, the boardgame, and we discussed tweaking it so that it was a music game. I thought it was a pretty good idea. And we worked out a few of the game mechanics on Friday night. As such, the core concepts of the game were known by Saturday. However, before I met Toby, I was considering working on something else that was a bit easier, I must admit.

But I did meet Toby, and we started hustling — setting up a GitHub repository and planning out the project in a Google Doc. At around 2 or 3 p.m., Tal showed up. She lent a hand on the user experience and game flow. She also began to design some of the core elements. We had a functional, working name by about 4 p.m., but none of us were completely sold on it: “Songville with Friends.” It was more of a joke in the beginning, and it was one that we thought would help us earn a laugh or two from the crowd. However, after an evening brainstorm, we ended up changing our name to SongJitsu. At that point, we had a good handle on the branding: Ninjas. And that branding is awesome. 

Tal began to redesign the pages in accordance with the many game states (complicated? check.). Meanwhile, as the designs came in, I was coding them on the frontend. Toby was working on the backend, building it out in Ruby. I had some experience with Ruby in the past, but I didn’t think I was going to be much help to him, so I kind of stuck myself on the frontend coding (there were 570 lines in styles.css). I did a quick count on some of our code, and we have over 1,500 lines (that doesn’t count rewrites, haha… ha… CRY).

We kept kicking ass throughout the night, and were, overall, very impressed with the event. Around 9 p.m. on Saturday they held a ping pong tournament, but before playing, there was a demo from two pros. They were AMAZING. And one of them even stripped down to his spandex underwear.

Around 9:30 p.m. or so, Doritos came by and informed us that we had won the services of a Doritos intern from the hours of 10 p.m. to 9 a.m. on Sunday. Additionally, we had $375 to spend on anything we wanted, except for booze and drugs, and we could send the intern to do anything for us. Wise as we are, we sent the intern to go find us ninja costumes for our presentation. Nothing was open, so she fashioned us some red bandanas, which we ended up losing anyway. Either way, it was a really neat idea that Doritos came up with, and it kept things interesting.

Code. Code. Code. Somewhere between 3 and 5 a.m., McDonald’s ordered pizza for everyone. This was humorous. It was greatly appreciated, slightly confusing, and unsurprisingly, it wasn’t Domino’s. Instead? Fat Sal’s.

Code. Code. Code. 5 a.m. Things were coming together. The app had an interface, Tal was telling me to move pixels, I told her to go to sleep (she did and I changed the pixels anyway).

“Code.” “Code.” “Code.” It’s 7.am now. Tal is sleeping, but about to be woken up. Toby and I aren’t writing our greatest code anymore. Sometimes I just stared at the screen. We ask each other questions and sometimes there is no answer.

7:30 a.m. I wake Tal up.

“Let’s all take a moment to examine the horrific posture in this room.” — Toby at 7:35 a.m. I try to sit up.

9 a.m. now, and I’ve hit the 24-hour mark. We have 1.5 hours left till the defined “stop coding” time. We still have a lot of things to work out, specifically, connecting to the Spotify API and getting the player working in our app.

10:30 a.m. Still coding. They blow a whistle or something, and everyone pretends they didn’t hear it. We still haven’t gotten the player working.

10:45 a.m. The player works! I finalize a JS/jQuery function that runs when a player wins. The function name: win_and_slide();

12:00 p.m. We’re actually done. The app works for the demo. I’m tired. Toby is tired. Tal is tired. The whole room is tired, and people are getting set up to present.

We’re on deck at some random time. Between 12:00 p.m. and 3:00 p.m. I didn’t have a watch on and forgot about my phone. I start thinking of everything in terms of an #id or .class.

We get on stage, present, and things go well. Then we wait. The judges go to vote and prize-giving ensues. Some people win DVDs and Mountain Dew skateboard decks. They announce that the $5,000 prize goes to: “SONGJITSU.” Tal starts screaming and jumping up and down. In my head, I call the function win_and_slide();. Toby is stoked — big group hug, lots of smiles. All of that teamwork paid off.

We collect the oversized check and take photos with it, and we admit that we will probably be eating Doritos for the rest of our life.

After the event, I head to go grab some food with Tal at a diner. I fall asleep at the table and am virtually sleeping while walking. It was around 5 or 6 p.m. by then and I’m pushing being up for 32 straight hours. We get back to Tal’s place and I fall asleep in about 30 seconds.

I woke up today at 8:30 a.m. and got ready for work.

Standard