Making Good Art

About a year ago (at what I imagine is the same time everyone else discovered him) I ran across a comic with a Bill Watterson quote done in Watterson’s style. I started at the beginning of Gavin Aung Than’s Zen Pencils and started reading. Eventually, I came across a comic for a quote by Neil Gaiman titled Make Good ArtYesterday’s post was inspired by the first five panels:

Life is sometimes hard. Things go wrong, in life and in love and in business and in friendship and in health and in all the other ways that life can go wrong. And when things get tough, this is what you should do.

Make good art.

I took everything I was feeling and channeled it into something besides feeling bad for myself. Now that I’ve done that, I feel so much better for it. Everything that I’ve kept bottled up has been impeding me likely more so than the original problems I talked about then.

This is the reason that I started posting to this blog again. I’ve went out removed a lot of out of date or sub-par quality posts. I’ve updated my resume and professional presence.

I’m going to go back to trying to be the person I want to be instead of settling for the person it’s easy to be. I’m going to make good art.

Why am I even doing this?

Yesterday, I was let go from the company I’ve been with since I graduated college a little more than a year ago. While this sucks, I did get some opportunity to think about the past year about working there and its effect on me. I’ve pushed myself to become better at development given tasks that often seemed impossible at first, but the most important thing I discovered was its effect on my free time programming.

Specifically: I now hated development work.

This was one thing I was warned about going to work at doing what was effectively a hobby: that I’ll grow to hate it. But that wasn’t the case. At first.

What happened was that I repeatedly ended up venturing into the “Deep Code.” This “Code” was basically legacy code that hasn’t been around that long but is just as bad. Missing comments, massive functions, horrible naming schemes, unnecessary events or delegate or whatever else that makes it impossible to track down. This was fine; I could deal with this. Then I ran into this gem of an error message:

“Only task that a in fact list of task implement his method”

This is not the result of a previous employee’s poor grasp of English. This was not an issue with translating one language to another.

This was the result of not caring.

I could always see the cracks in the company, but everything held together. Inconsistent punishments and rewards, light gossip, lackluster management, the standard stuff in a Dilbertian office environment. It wasn’t that bad. I could deal with that. I could go home and unwind. I’ve got a lot of great games to de-stress, there are some shows I can watch, everything’s great.

One day after work, I opened up Unity and started working on a small script to start off some of the functionality. A vague feeling of unease came over me. I wanted to do literally anything besides code. I couldn’t bring myself to even begin thinking about how the code would work. This was my project that I wanted to do, and just couldn’t do it.

When I encountered that error message some months later, it was so strangely worded that it almost seemed like a Zen Koan. It wasn’t, but ironically, it did cause some introspection. When I ran into the Koan Error, in sheer frustration I asked:

“Why am I even doing this?”

I realized that this was the question I needed to answer. Why was I still doing this? I hated this. I could do it for money, but as soon as I got home from work I would be damned if I was going to do anything that reminded me of work. Much like the author of the Koan Error, I had stopped caring.

hated programming.

The first time I touched code was on a TI-83. For our Algebra 2 class, the teacher had us program a few things (solving intersection of a line, quadratic formula, etc). This merely consisted of putting the code on the overhead and telling us to input it in order exactly as shown. No explanation of what individual lines did or what their purpose was.

I learned from it anyway. This was the only outlet I could reliably use to learn programming, since our school had no coding class and my parents had no knowledge of it. Every time we had an algebra lesson (and later, chemistry), I had a new program ready to go to automate whatever the lesson was that day. I brought a link cable and distributed it to classmates for homework help. I accidentally ended up getting programs on the calculator banned during tests (unless you were the one who wrote them).

I shortly realized that what I was doing was taking input, manipulating some numbers and showing some output. I thought, isn’t this basically what a video game is? Could I make that?

As it turns out: Yes, I could. I made a simple RPG called “Bunny World” (due to the turn-based combat using the only two ascii sprites I could make, a stick figure and a bunny), and my friends loved it. I kept improving, cranking out a dungeon crawler and a pure text-based adventure game in my last year in High School.

About six years later, I hated programming. I would wonder, why am I even doing this? I had lost sight of what to me into it in the first place: expression. Not only could I make games, I could make tools. I could make basically whatever I wanted if I only spent the time to.

I was so caught up in all of the nonsense of my day job, I couldn’t bring myself to move beyond it and create. I missed creating.

Creating awesome content is why I’m still doing this.

KeySmith: A New ActionScript 3.0 Keyboard Manager

Every time I need keyboard input in a flash application, I have three options:

  1. Use the built-in event handler
  2. Use what’s supplied (usually only for certain programming assignments)
  3. Make my own

Option 1 is not an option if I need to do anything better than check if it’s down at all. I can’t use it for anything to detect a simple button press (up this frame and down last frame) or anything more complicated than detecting if a button is down or released.

Option 2 is usually not much better and only available on a few assignments. Usually it’s only slightly better than normal and functionality can vary widely from program to program. I want a certain degree of consistency.

Option 3 has so far been the best, but is usually time consuming. I had one that I would reuse, but it was very limited without having to go and touch the base code. As the programs got more complex, it became more cumbersome as I had to work around the limitations.

I decided to make another keyboard manager, and this time with every feature I could ever practically seeing myself needing. I’ve made it as extensible and optimized as I could make it and made sure to fully document it as well.

I would like to present the KeySmith Keyboard Manager.

You can download and use it on my Projects page. It’s free for anyone to use under a Creative Commons license.