Node Ice’s Node Knockout Mostly Non-technical Postmortem

This past weekend, I participated in the 48-hour Node Knockout competition with @calebcornman, @endangeredmassa, and @kfalter (if you don’t know, I am @xonev). It was quite the experience. We created the first iteration of what I think is a pretty cool commenting system called markover (feel free to click on that link, vote, and help us win the competition).

The reason I (and the rest of the team) think it is better than most commenting systems out there is that it is better than most of the commenting systems out there. Our comments are presented to you in real time alongside whatever article you are reading. Not only that, but every comment can be associated with specific parts of the article (including text and even images).

Of course, due to the fact that it was a 48-hour competition, we aren’t completely satisfied with all that we did, but I think that we accomplished a good amount in the time we had. Following is the story of what we did and how we did it.

It all started on a dark summer night (as nights are wont to be) at the Hashrocket office in downtown Chicago. Three programmers and a designer gathered to beget the greatest Node Knockout application mankind had ever seen! The only foreseeable problem was that they all weren’t in the same boat as to what exactly this application was going to be. Did they have ideas? Of course. Were some of the ideas pretty good? Absolutely. Did some of them already exist in superior forms to what these brave creators thought could be accomplished in 48 hours? Most definitely. (I think all of those were mine.) But the real problem was they had less than two hours until the competition started and they hadn’t even hashed out any of the major implementation details. Nevertheless, undaunted, they selected the idea which perched atop the pile and set forth (errr, sat down) to build a better tomorrow for commenters everywhere.

The first night everyone was relatively fresh and the building began at a breakneck pace. The fearless paragons of application construction split up tasks, identifying potential problem areas and tackling those first. Of course, @kfalter began design of the site, @calebcornamn decided he would tackle authentication (which turned out to be much more difficult than any of them expected), @endangeredmassa volunteered to battle with setting up the back-end, and @xonev got stuck with the UI coding (which, to his credit, he only complained about a little bit). The first night went swimmingly – the API for creation and retrieval of comments began to take shape, mock-ups of the interface were created, Facebook and Twitter authentication were investigated, and a silly little commenting pop-up dialog was formed. The courageous band even got some sleep.

The next day, the pace continued, but, as the day wore on, the group began to wear around the edges. @endangeredmassa mercilessly revealed bugs in @xonev’s code, @calebcornman slowly came to the realization that neither Facebook nor Twitter easily fit the needs of the application’s authentication, @xonev’s jokes began to make less and less sense (which is pretty bad considering how much sense they were making at the beginning), and @kfalter continued on merrily designing, unconcerned by the obvious downturn events were taking.

On the third and final day, everything started to come together. Everyone except @xonev was relatively fresh due to getting a more-or-less reasonable amount of sleep the second night. @xonev had only taken a half-hour nap. Around noon, he began to descend into delirium, singing snatches of Michael Jackson songs and often forgetting what he had been working on. Fortunately, the core of what he had been working on was already implemented and the others were able to pick up the slack. In the final hours, @kfalter, @endangeredmassa, and @calebcornman all worked furiously to put finishing touches on the application – @kfalter putting in place the demo and “splash” pages and @endangeredmassa and @calebcornman fighting with deployment issues. Meanwhile, @xonev was either wandering around from computer to computer, barely able to think straight enough to ask what he should be working on or threatening to push some nonexistent code that would supposedly break everything.

Fortunately, despite @xonev’s threats, everything came together in a reasonably working order. Granted, there were some desired features that were missing from the submission – things such as comment threads, closer tying of comments to context (highlighting the actual text commented on instead of just the section commented on), and IE and Firefox support (Firefox was working at some points throughout the weekend, but @xonev was too useless to remember to check it out toward the end of the competition) – but there is clearly potential displayed in what was submitted and the possibilities of future development.

So that’s the story of what happened with our Node Knockout experience this past weekend. I learned that sleep is important – I really was useless at the end. I should have taken naps more frequently or perhaps dedicated a chunk of time here or there for sleeping. I think that going with an hour-and-a-half nap every so often would have been beneficial. That way I could’ve gotten a full sleep cycle in, which I am sure would have assisted with refreshing the ol’ noggin. I also think that we should have spent more time before the competition going over exactly what we were going to attempt to do and how we were going to attempt it. I’m actually somewhat surprised at how well it turned out considering the amount of planning that occurred beforehand. I think it speaks to the flexibility and skills of the team.

In conclusion, I just want to say that I would recommend this type of competition to anyone who likes to build stuff. It was a ton of fun to work with a few other people to put together an application in a frighteningly short amount of time. It was also great to build something that just might turn into something bigger in the (hopefully near) future.

Disclaimer: any and all opinions, jokes, and facts included in this blog post are those held, told, and perceived (respectively) by @xonev and do not necessarily reflect the opinions, sense of humor, or interpretation of events of anyone else mentioned or not mentioned in this blog post.

League of Legends Character Data – an Idea

Gangplank - a champion in League of Legends

Gangplank - champion from League of Legends (he's a pirate! yarr!)


Today, on the way home from work, I had an idea. I’m posting it publicly so that I’ll feel more obligated to see it through.

Lately (read: the past year) I’ve been playing a lot (read: too much) of a little game that I like to call League of Legends (since that’s its name). It’s a really interesting game – it’s not ridiculously fast paced, but it’s very strategic. Before I explain my idea, I’ll explain the premise of the game. League of Legends is a tower defense game. Each game is played by two teams currently consisting of either three or five players each. The goal of each team is to destroy the other team’s nexus. In order to do this, a team must first destroy some of the opposing team’s towers (a.k.a. turrets – they do fight back) and at least one of the enemy’s inhibitors.

Each player plays a champion (there are currently over seventy to choose from!) which has unique statistics (for example, critical strike chance, attack damage, and armor) and abilities (for example, some champions have abilities which slow enemies, while others have abilities which cause them to take reduced damage for a certain amount time). Now, the really interesting part about this game is, in my opinion, the scaling aspect of it. At the beginning of each game, every player’s champion starts out at level one. Over the course of the game, each player’s champion will gain experience and gold from killing enemy champions, enemy minions and neutral monsters, destroying towers, and so on. The experience gained will cause the player’s champion to level up (to a maximum level of eighteen), granting access to new or upgraded abilities and increasing the champion’s statistics (such as armor or health). The gold gained will allow the player to purchase items for his champion which will either increase the champion’s statistics or provide some other benefit (or detriment to the other team). Games are often decided by who can “farm” the most gold and gain levels the quickest in order to overpower the other team (which, granted, always depends on a great number of other factors such as team composition and player skill). Nevertheless, it’s this scaling that is one of the main focuses of the game.

In fact, really good League of Legends players will spend a significant amount of time studying different item, mastery, and rune “builds” (masteries and runes perform functions similar to those of items but are not purchased with gold). It is this between-game study that my idea relates to.

I want to compare the properties of different champions. As I said earlier, each champion has different statistics which will affect what role they will take on a team. These statistics should be relatively easy to compile into a useful format for comparison – this is where I will start. Later on, it will probably be interesting to compile data about how different item builds, rune builds, abilities, etc. affect a champion’s performance, but those will be more complicated and will have to wait until later.

For those of you who read this blog for the coding-related content, fret not! There should be plenty of coding details in future posts in this series (ugh, i said “series,” I’ve got to follow through now).

Oh, and if you’re going to create an account for League of Legends (it’s free!), use my referral link (shameless, I know).

Tell Me What’s Wrong, Please

I recently finished college – graduated in May – and started working at my first job. I have now officially been a developer at Sonoma Partners for two weeks.

Due to the fact that I like Linux and open source software in general, it has been a bit of an adjustment to transition to a place where almost every tool or technology I use is provided by Microsoft (Sonoma Partners is a Microsoft partner which sells, customizes, and provides consulting services for Microsoft Dynamics CRM software). Some might say that I have sold out to the man (in fact, several people already have), but I figure that as long as I am not paying for Microsoft software, I have no problem using it.

At least, that’s what I was thinking when I accepted the position. For the most part I still feel that way, but lately it seems like I’ve been spending a ridiculous amount of time troubleshooting installation/configuration errors and not very much time actually doing useful stuff. It’s not even the errors that I’ve been getting that I really have a problem with – it’s the error messages. If my software messes up, I would like it to at least tell me what happened that made things go wrong.

Here is an example of an error message that I got (after searching through the log – the original message just told me that my login failed) using Microsoft SQL Server 2008 yesterday:


Error: 18456, Severity: 14, State: 11.
Login failed for user 'DOMAIN\user'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: ]

Now, that seems straightforward enough, except that it says something about an infrastructure error, which made me think that something with the actual application went wrong, not just that I have the wrong login. Furthermore, when I checked on that “State: 11″ business, I found that it means “Valid login but server access failure” (see here for reference). That made me think that something was wrong with my attempts to access the server, as well.

After a bunch of troubleshooting, I finally found out that it wasn’t any sort of strange problem, but rather a case of my Windows Authentication account not being a user in the database instance. All I had to do to fix my problem was start the database instance in single-user mode (by adding “-m” to the start-up parameters, see here for details), make sure that there were no other programs running that were connecting to the database instance, and add myself as a user.

So yeah, Microsoft, I’d like to see some better error messages. Why can’t you tell me that that user doesn’t exist in the database? That would be fantastic – please don’t give me this crap about it being for security reasons.

To see the forum thread that finally got me on the right track, go here.

My Experiences with the Jaunty Jackalope

I wish I could say that Ubuntu was all fun and games. I really want to love it with all my heart, but, unfortunately, just like with any relationship, sometimes it sneaks up on you and stabs you in the back (maybe that speaks to my relationships). For me it happened with my upgrade to the latest distribution upgrade: Ubuntu 9.04.

Read more »

Ghetto Mic

When Tom first suggested to me that we actually do a podcast instead of just talking about it, I went out to buy a headset. In India there aren’t a large selection of electronics stores to pick from, so I had a friend take me around the town nearby (Hosur) and we eventually found a little shop that sold a “Zippy’s” headset (it’s a popular brand here in India). The headset seemed to work in the store when he let me try it and it was only $5 (Rs. 250) so I bought it.

Read more »

The Big Permissions Scare :O

I gave myself a pretty big scare yesterday. I was happily going along, using my computer like usual when I started to run into some internet problems. “Oh, I haven’t changed my DNS servers today,” I thought — sometimes the DNS doesn’t seem to work quite right here and I have to use OpenDNS if I want to go to any websites. So, since I’m running Ubuntu, I opened up System->Network, clicked on Authorize, and entered my username and password. I waited expectantly for it to authorize me, but it gave me a message that said “Error: could not authenticate,” or something along those lines.

Read more »

Dark Messiah of Might and Magic is Restricted! (Steam Ubisoft Sales)

If you’ve been following the steam store at all this week, you probably have noticed that there has been an Ubisoft sale going on. Each day a new game has been put on sale (Monday Assassin’s Creed, Tuesday Prince of Persia 4 (? the latest one), Wednesday was Brothers in Arms: Hell’s Highway, and Thursday saw a good deal on Far Cry 2. All of them were exceptionally good deals and I want to play all of them (except I already played through Assassin’s Creed) – I probably will when I get back to the states. However, the weekend deal was the greatest one, in my opinion: four Ubisoft games – Beyond Good & Evil, IL-2 Sturmovik: 1946, Far Cry, and Dark Messiah of Might and Magic – for $10! Supposedly.
Read more »