I'm going to vent on some personal stuff. Feel free to skip below if you want the technical bits.
Twenty twelve was a string of nerve-wracking events. The defining moment was in August: one of our dogs was finally recovering from a grapefruit-sized gash in his chest (he had cut himself on some scattered construction materials at a park). My wife and I were determined to buy a house so that would never happen again, but the seller was inexplicably delaying on agreed upon fixes; we weren't even sure if we could keeping staying in our apartment. A week before closing, I woke to a frantic phone call: "Your wife's hurt." Turns out, she had only broken a leg, but that would lead to even more horrors (always remember that a broken leg can kill you).
All that considered, 2013 nearly takes the cake. My wife was diagnosed with Cushing's disease this spring. Believe it or not, that diagnois was profoundly cathartic. We've been trying and failing to get someone to take her symptoms seriously for years. And yet you never want to have a conversation with a doctor that ends in the words "brain surgery." To make a long story short, the surgery was successful and she is recovering very well. I'm quite optimistic about the future.
Through the stress, I didn't always take care of myself. I've been self tracking for the past 5 months and noticed that my drinking has increased: an average of about 2 drinks per night. That average is actually within accepted dietary guidelines, but it doesn't consider outliers. And there were outliers. Between a few bad experiences and a general malaise caused by drinking, I'm making it a resolution to cut down drastically on the booze.
Having said all that, I was fairly productive in 2013. I reached the halfway point in my Masters degree, maintained a 4.0, and got to dabble in a little R. And I built a few things:
This was an enterprise media library I had initially written for Epic Games. It's useful if you want to let employees borrow books/games and you want to have a hope in hell of tracking them. The coolest part is that it integrated with Amazon's Product Advertising API. You scan a UPC and it loads an image and details instantly.
This year, I packaged it up and sold a license to Irrational Games. It was pretty cool receiving a check in the mail from Irrational the same week I received Bioshock Infinite. In the excitement, I probably added more formality then was necessary: I wrote my first EULA and started my own LLC.
The lingering question is: should I continue developing Vulgat Library? This is the only side project I've worked on that seemed to address pain points. However, I still wanted to make sure my two paying customers weren't flukes. So I did what everyone recommends: create a landing page to collect emails and gauge interest. With no other way to market it, I tried Adsense and.... my ads were promptly suspended. Huh? Apparently, Google has a lesser known policy:
Google allows sites that collect personally identifiable information from users as long as this is not the primary purpose of the site.
My landing page was dead in the water. This "collect emails with a landing page" advice is still thrown out nearly every day on Hacker News, yet I have no clue how anyone pulls it off. So far, I appear to have collected exactly one email address.
Write a game in seven days? It sounded nuts. I had a lot going on (school, work, etc.) and I really didn't have the time. But when I decided on a whim to do it, I was giddy. I coded more in that week than I ever have. I coded in the car, in the bathroom, early, and late into the night. I wrote everything from scratch in JavaScript.
The result was a brutal, but beatable survival roguelike: A False Saint, An Honest Rogue.
It's a game about getting lost and freezing to death. The game included a day and night cycle, dozens of randomly generated items, and a robust layerable clothing system. Not everybody's cup of tea, but it did get coverage in Gameological, RPS, and two Let's Play videos. Free Indie Games even included it in their list "Best of 2013: Roguelike-likes." I couldn't be happier!
I have to say, roguelikes are a programmer's dream. Artwork is optional, content is randomly generated instead of tediously hand designed, and systems are front and center. 7DRL 2013 was an absolute blast. Don't miss the next one.
Static site generators are all the rage and programming in the twenty-first century sold me:
The most unexpected comments have been about how quickly this site loads, that most pages involve only two requests--the HTML file and style sheet--for less than ten kilobytes in total, and that this is considered impressive.... I've also got a clear picture of how people interact with a blog: they read it. With the sole exception of myself, all people do with the prog21 site is grab files and read them. There's no magic to serving simple, static pages.
It's true. There is no magic! If blogs are humans, plain text files are their chimpanzee cousins, 98% similar. Markdown easily makes up the difference. So I wrote my own generator. The generator is a single ~300 line PHP file and that includes all of the shared HTML/CSS. It runs Markdown; creates the posts, pages, and archives; and assigns both short and pretty URLs. I use the AWS SDK to upload to S3. It's dirt cheap, fast as hell, and I love the minimal design.
Some notable posts this year include:
Autumn.js is a JavaScript library for hashing keys into colors. It's one of those things that seems like it should be two lines of codes (it initially was) and then a hundred wikipedia articles later you realize it's not so simple.
I've already found it helpful on several projects including...
Here's a dumb idea. Create an image sharing site to compete with juggernauts like imgur. Don't create a plan for revenue. Don't have a plan for getting users. Enter LetsPaste. Well, it seemed smart at the time.
Here's what happened. I noticed there were no sites dedicated specifically to gaming screenshots. The places where developers were sharing screenshots had awful UX. Here's the clicks required to view an image on Twitter:
That sucks. The vision behind LetsPaste is a site that makes pixel art and gaming screenshots first class citizens. Full sized images right off the bat, inline comments, and image scaling with crisp edges (tomorrow starts 2014 and Chrome is still buggy on crisp edges).
Honestly though, it's not yet compelling enough. And there's no straightforward path to making it compelling. The response has basically been "how is it better than imgur?" Fair enough. If anything, I've learned that it's better to fail fast than trudge along pointlessly.
whereisedward.com When Edward Snowden seemed to be flying to a new country weekly, I thought this site would be hilarious. I didn't know he'd be in Russia for the next six months. Oh well, another dumb idea. BUT! It's OK because I entered the domain into the Web Domain White Elephant Exchange. In return I'm getting (and I'm not making this up) getwinky.com. I'll have to do something with it in 2014, but what?
johnareid.com and mammalia.us: Basically Wordpress tweaking, but I really like the way they turned out.
meaningless internet points: According to HN Karma Tracker, I recently broke into the top 1000 users by karma. Derp.
Next year, I want to focus more on building things people actually need. I've gotten close this year (maybe closest with Autumn). The process of "cool idea"->"start hacking" has resulted in many bizarre projects. Good for learning, but I'd rather be helping people and/or making paper.
Also, I'd like to contribute to some open source projects. The thought kind of terrifies me, but that's why I need to it.
Happy New Year!