zacharylew.is

The personal blog of Zachary Lewis.

© Zachary Lewis

New Tools Can't Fix Old Habits

I’m currently facing a problem. Every day I sit down to the same system — piles of shaky dialogs and buttons stacked like cordwood trying to hold back event stacks deeper than the Mariana Trench which were obviously written while learning the platform. Oh the joys of UI development in the world of the “new hotness.”

Faced with looming deadlines and hordes of anxious customers, proclamations are uttered from on high, “We don’t have time to (re)design! Just make it work.” So we do, don’t we?

We build interfaces out of the recycled design patterns of yesteryear while shaking our heads. “This sucks, but it meets the requirements. I just hope they don’t need more functionality.”

But, they always do.

So, we dive back into the sludge we’ve poured for ourselves, barely able to see our hands in front of our faces, thrash around a bit, and pray that a solution might come and fix all of this garbage.

False Prophets

New technology emerges, as it is wont to do, that claims to solve all the problems we currently have while tearing down all the blockers we currently face. Of course we adopt — it would be foolish not to.

Again, commandments boom from the mount. “With this new technology (which we’ve graciously purchased), it should be trivial to replicate existing functionality. Also, the customer needs more functionality than what we currently have to justify the cost of the new technology (which they’ve graciously purchased). Make it work.” So we do, don’t we?

Sooner or later, but always sooner than we’d imagined, we’re back in the muck, blaming lame sprints on the poor foundation we’ve created because we were only given time to “make it work” for the customer.

Confusion abounds. “How are we facing the same problems we were before? We bought new technology!” The kicker is, the technology is rarely the problem.

Breaking Bad

In rapidly evolving ecosystems, this cycle can be very difficult to mitigate, primarily because it requires designers and developers to stop writing code and start reading code. Of course, if everyone sits around not writing code all day, how will we ship products? The painful truth is, we won’t.

Taking time to study new technology will slow things down. Taking time to design based on what you’ve learned from study will slow things down. The end result, surprisingly enough, is a more stable, more maintainable product whose development time is shorter than a product made to just work.

“But,” you ask, “if I’m going to have to take all this time to actually learn about this new technology before I can harness its incredible potential, how is it better than the old technology that I’ve been learning?” That’s the kicker — it isn’t necessarily better at all.

Without fully understanding what your technology can do and creating a design based around your technology’s strengths, it is impossible to develop a product without little issues that, given time, create huge problems. So the next time a new technology promises to fix all the problems you have, it might be a good idea to sit down and read the instructions before putting it to use.

PROJECT: CODENAME

AJ-43K7-99X

ATTN: [REDACTED]

PROJECT: CODENAME

TO PREVENT ANY POSSIBLE BREACH OF SECURITY OCCURING IN [REDACTED],
ANY DISCUSSION OF [REDACTED] OUTSIDE OF DESIGNATED SAFE ROOMS IS
STRICTLY FORBIDDEN. IN THE EVENT OF EMERGENCY, PROJECT: CODENAME HAS
BEEN CREATED TO ALLOW EXPEDITED CREATION OF SECURE, APPROVED CODENAMES
FOR ANY CLASSIFIED PROJECT OR OPERATION TAKING PLACE IN [REDACTED].

[REDACTED]
[REDACTED], UNITED STATES ARMY

http://projectcodename.com

An Open Reply To Young Game Developers

Young Game Developers,

I love hearing from you, because it gives me a chance that I never had. I knew that I wanted to make video games when I was six years old. Most kids put on all sorts of “future costumes,” (fireman one day, policeman the next) but I never really thought about what I wanted to do when I grew up. On the Christmas I received an NES, my father set it up, I played it for a bit, and it struck me like a bolt: “I want to make this when I grow up.”

This is why you’re incredibly lucky. Back then, “when I grow up” was the only option. The internet was in its infancy, and computer classes were a total joke. As a young adult, I had virtually no way of learning anything about software development. Jump twenty years into the future and here you are, neck-deep in high school (or whatever you call it down there) and already making video games.

Let that sink in. That shit is awesome.

Make sure to learn what you can from school, but also realize that you’ll learn way more on your own that you ever will listening to a teacher ramble. Dive into things. If you don’t know something, try to figure it out yourself first. Most importantly, learn how to learn. Knowing how to figure out what you need to know is critical, and takes serious practice.

Additionally, if you’re looking to start your own business, I’d make sure to take business classes alongside your programming classes. They’ll come in handy.

As to “how I remember everything….” Man, that statement makes me grin. The only thing you really need to concern yourself with learning right now is how to think logically. Focus on your program flow and figuring out what needs to happen when and why things happen how. This skill translates across all programming languages — even ones you haven’t learned yet! If you can think critically, figuring out the proper functions to call is a cakewalk. Just do a quick Google search on what you’re trying to do and about a billion answers will pop up.

If you work with the same set of things often enough, you retain more and more information about them. Think about it like this: You probably know the directions to hundreds of places around where you live, because you’ve lived there for awhile and are familiar with the area. If I asked you how to get to a couple different places, you could probably tell me how to get there the majority of the time. I’m absolutely amazed.

“Young Game Developers! How do you remember directions so well? I have no idea where I’m going around here half the time!” How would you respond? I’ll leave that answer as an exercise for the student.

Best regards,

Zachary Lewis

Fish Out Of Water Gem Combinations

After quite a bit of searching, I wasn’t able to find a single guide that just listed the combinations of gems that comprise the ten charms available in Halfbrick’s new fish-skipping iOS game, Fish Out Of Water; however, I did find a YouTube video with some dope house beats that, after muting, served me well enough to create this list.

About Gems And Charms

In Fish Out Of Water, whenever you level up, you’re awarded a random collection of gems which, when combined, create unique charms that help you during your current run. The order of gems combined does not matter, so use what you have to get the highest score possible.

The List

Red Charm Red Charm Adds 75 meters to your next throw! Combine two red gems.

Yellow Charm Yellow Charm Adds 3 boosties to your boost bar! Combine two yellow gems.

Blue Charm Blue Charm Adds 20 skips to your next throw! Combine two blue gems.

Black Charm Black Charm Use the special black charm as your next throw! Combine two black gems. When thrown, this cool gem splits into three fish that swim like Finlay.

Orange Charm Orange Charm The next score from Hard to Please Hardwood will be a 10! Combine a red gem and a yellow gem.

Crimson Charm Crimson Charm Adds 100m to your next throw! Combine a red gem and a black gem.

Purple Charm Purple Charm Adds 50m and 15 skips to your next throw! Combine a red gem and a blue gem.

Amber Charm Amber Charm Adds 5 boosties to your boost bar! Combine a yellow gem and a black gem.

Green Charm Green Charm Adds 0.1 to your next final score! Combine a yellow gem and a blue gem.

Navy Charm Navy Charm Adds 30 skips to your next throw! Combine a black gem and a blue gem.

I hope this list helps! If you’d like to fling fish with me, I’m swimming around in the “game developers” league!

Tanlines In The Shape Of A MacBook Air

I hate the beach.

There. I said it. Go fire up your torches, raise up your pitchforks, brandish your SPF 70 and batter down the door of my sandcastle, for I have writ the inconceivable and must be consumed by fire.

Overly dramatic? Perhaps; however, it’s a far cry more tame than the courtesies my friends and family extend whenever I choose to sit inside and work (or, as they know it, “play on the computer”) instead of going down to the beach and sitting in the sun. I can’t help it: I’ve stopped liking the beach. I can’t seem to enjoy wrenching myself away from the work that I love and want to do to sit in an uncomfortable, aluminum-plastic excuse for a lounge, cover myself in oily, glistening, ineffective protection and get sand on, and in, absolutely everything. I’m not bashing it: The beach just isn’t my thing.

With that said, the crux of this article rests on the following fact: I love vacationing on the beach.

I can hear the cacophony of a million eyebrows furrowing in unison. Settle down, kids. I’m about to explain myself. Using words.

Creativity vs. Comfort: A Graph-Themed Section

I spend every weekday from 9:00AM to around 7:00PM in a cubicle in a dark, windowless office in a two-story building on an arsenal in a city suffering from metro-envy. During that time, I create incredible things. I draw, I sketch, I think, I write, I code, I design, and I love it; however, it’s all too familiar to me. As a creative, I must be able to shrug off the congruencies of every day, and I do, day-in and day-out. Just imagine for a second what kind of creative surge would occur if I were given a window. Now, replace a stagnant, deciduous backdrop with something more exotic—something more akin to this:

My actual view

Now, it can be hard to imagine such a surge, especially if you aren’t a creative, but let me tell you: It’s phenomenal. It’s one of those, “I should quit my job and use my savings to buy a condo on the beach. I’d be so productive that I could freelance and be completely financially secure. Additionally, I could wake up every morning to a cold mimosa, start every lunch with a cold Corona, and end every day with a tall margarita. It would be perfect!” At that point, I jerk my head off the table, wipe the drool off the corner of my mouth, and get back to work.

I’ve found I get especially creative in one of two scenarios: In an altered environment (like the beach) and in an altered mood (excited, scared, depressed, et cetera). Out of those two scenarios, altering my environment is the only one that I have absolute control over, and it’s the only one I recommend you to actively seek. It doesn’t have to be as extreme as getting a high-rise condo on the beach, either. Something as simple as picking up your laptop and working outside on a nice day or putting your computer in another room or against another wall can really do wonders for creative blocks (or just supercharge an already solid creative streak).

The only problem with piggybacking a vacation to get shit done is that the people you’re vacationing with, surprisingly enough, don’t much care for it.

Balancing The Three Fs: Friends, Fun and Froductivity

It really is a balancing act, and I haven’t really figured out how to do this. (As a matter of fact, I’m getting frustrated texts from my girlfriend, Maggie, asking when I’m going to be down to the beach as I write this.) As the vacation has progressed, I have noticed the following, which may be helpful to keep in mind come future vacations:

  1. Use downtime as work-time. About an hour or two before dinner and an hour or two after dinner, there’s always a lot of unplanned, unfocused activity going on: People are taking showers or watching television or checking Facebook—basically unwinding from the action-packed day. Since there’s no singular group activity, these few hours have offered me a good, family-friendly time to get shit done.
  2. Let people know you’ll be working, but promise to spend time with them afterward. This morning, I told everyone that I wanted to write an article for my website, but afterward I was coming down to the beach. This excited everyone, since they’ve usually had to drag me down to the beach. They then got ready without making a big deal about me doing my antisocial thing and headed down to the beach, giving me a solid hour of work-time during the day.
  3. Work while people sleep. If you can nightowl, get to it. I worked late last night, knowing that everyone would be sleeping in until 10:00AM or later. I spent a few hours finishing up some things I’d been messing with during the day without any distractions, and I still got a full night’s sleep. I just didn’t get any of that sweet, sweet bonus sleep. I resent everyone for that.
  4. If possible, plan “workcations” with likeminded colleagues. The most prohibitive aspect of a vacation is time, followed thereafter by money. I’ve considered getting a group of friends together, going somewhere secluded and distraction free, and spending three to five days creating. The group would help offset the cost, and the fact that things were getting done would help offset the time. Seems like a win-win (except for the people who would want to go but wouldn’t want to participate in the “nerdfest”).

Again, this is a very living document, but it is something I’ve found to be mostly true and is based completely on my trial-and-error experiences. The error parts involved a lot of fussing.

I don’t really mind the beach.

Although my coworkers will take one look at my pearlescent skin and refuse to believe there has ever existed a sun, let alone that I was at a beach for five days, I have had a great time. I’ve been able to use the vacation in a way that’s appealing to me by making a few compromises to make sure my time spent in front of a screen isn’t completely detested by the majority of my traveling party. Once this goes live, I’ll be heading down to the beach (business management book in tow, natch) to sit next to my friends, plunge my feet into the hot sand, and “relax.”

I’m not sure where my next vacation will take me, but I know that I will be working during it and enjoying the extreme surge of creativity and productivity that the change in environment will foster. I’ll also, more than likely, be apologizing profusely to Maggie for ruining Bonnaroo for her.

Business Cards v2.0

Business cards.

View in high-resolution.

I’ve been tweaking my business card design to make the biggest impact. Based on some discussion with come coleagues and designers, I’ve made a few small changes. Read on for the five simple changes I made to my card based on critiques and suggestions.

1. QR Improvements

Based on feedback, one of the largest complaints people were having with the cards were the large QR codes which took up half the space on the business side of the card. I’ve customized it to prominately feature Money Thief, color-coded to the color theme of the card. This breaks up the QR code and now, while perfectly readable, it’s cute and fun. Additionally, the URL now sends our new friends to a specialized GDC 2012 site.

2. Logotype Leading

Many people were instantly thrown off by the small leading, or distance between lines of text. The the and game studio were too close together, making the logo feel way too cluttered and constricted. I spread it out just a bit more (the same leading between game and studio on the narrow-set logotype) to help the logotype feel a bit more comfortable.

3. Business Border

Instead of a solid-color background or a plain white background, I was suggested by a colleague to try a colored border and white space. This gives the business side of the card a more open feel, while continuing to “set it off” with a touch of color.

4. Logotype URL

A few people had the complaint that the card didn’t have the website on it anywhere. I held the argument, “Sure it does! Look at my email address! It’s got ‘thegamestudio.net’ right in there!” Then, they would silently shake their heads, and refuse to help me further. A tiny .net at the end of the logotype instantly implies a URL. Go there.

5. Tom Hanksin It

Finally, I took some key pieces of the design—logo, email address and job title—and made them just a bit larger. Bigger is better, right? Right? Also, the cards are now the size of those novelty checks that you see on sweepstakes shows.

I’m about to ship these cards off to get printed. I’m still looking for a good local printer, and there’s probably one or two minor tweaks to make, but other than that, I’m very pleased with how these cards have turned out!

The The Game Studio Business Card: GDC 2012 Update

Business cards

My girlfriend and I are headed to San Francisco next month to attend the Game Developer’s Conference, and I want us to make as big an impact as we can, short of running naked through Yerba Buena park. Last year, I took some screenshots of old (and non-existant) games that I developed under my game studio, The Game Studio, put them on some Moo cards, and called it a day. This year, we’re going for something completely different.

Overview

Each card has two interchangable sides designed for simple, effective, targeted deployment for any situation thrown at you:

  1. The “business side,” featuring a GDC 2012-specific QR code, prominent narrow-set company logotype and a splash of color, allowing effecient promotion of company pride on your part and company jealousy on the part of those not currently receiving this card (it’ll be short-lived, because there will be enough cards to go around); and
  2. The “personal side,” featuring a prominent, wide-set company logotype, a secondary, color-coded brand to quickly indicate position and role in the company, a first-last name pair, a decimal-deliniated electronic mail address and a broad-band micro-graphic masquerading as a border. I tell ya’, this side is packed with enough personalized information to totally make a new friend.

More business cards

Deployment

Deployment of the card is simple.

  1. Identify the target recipient’s intentions.
  • If his intentions are completely business-oriented, you’ll want to deploy “business-side” first.
  • If his intentions have a good chance of a party invitation or dinner-meeting, you’ll want to deploy “personal-side” first.
  1. With the card in the left hand, targeted-side out, you’ll extend your right hand for a firm, dry handshake. This is known in the corporate world as “the docking manuver”. (Note: This is a completely different manuver from “docking”—neither direct penile contact nor attached foreskin are required from either party.)
  2. Once you’ve successfully docked, you are in control. Deploy the card by extending your left hand and stating your name, rank and company loudly and clearly (“Hi, I’m Zachary Lewis, the owner and lead developer of The Game Studio.”).
  3. Continue to slowly, yet charmingly, shake your target’s hand until he has taken your card, at which juncture you can undock and proceed at ease.

Makes, Models and Colors

The cards are still extremely experimental, but this is what is currently under development:

QRky

Each card comes standard with a 1”-square QR code; however, depending on the tech-savvyness and eyesight of your target, you can opt for a 1.5”-square QR code for your target to scan with his old-peoples’ LG Bifocolia or a completely discrete, invisible QR code, allowing use of a pen to further direct and influence the target.

Text Treatment

Since GDC is held in San Francisco, CA, it’s important that our logotype go both ways: Left and right. We also have a rainbow version. Just sayin’.

Rainbow of Color

Regardless of what your position in the company is, there’s a color to categorize you. Yes, you are nothing more than a color in our eyes; however, we are colorblind.

You’re Welcome

Now that you’ve been familiarized with the basics of our new card, be on the look out for it at GDC this March!

// Snipp'd: getOrdinalOf

Yesterday, I had to write a function to take a number and get an ordinal number from it (turn “14” into “14th”, for example). It got me messing with the way ActionScript parses in-line conditionals. Then, things just got goofy.

/**
 * Get the ordinal string ("st", "nd", "rd" or "th") of a given number.
 * @param   value the number whose ordinal string is to be returned
 * @return  The ordinal string of value.
 */
public static function getOrdinalOf(value:Number):String
{
    var n1:Number = Math.abs(Math.floor(value));
    var n2:Number = n1 % 10;
    return (n1 % 100 < 21 && n1 % 100 > 4) ? "th" : (n2 < 4) ? (n2 < 3) ? (n2 < 2) ? (n2 < 1) ? "th" : "st" : "nd" : "rd" : "th";
}

I wrote this in ActionScript 2. It should work in ActionScript 3 unmodified, but you can eliminate the calls to the Math library if you change the type of value from a Number to a uint. If you might have negative numbers, you can use an int and keep the Math.abs() call.

I would like to be your mentor.

I would like everyone to know that I participating in the /mentoring movement that was started by Diana Kimball. The basic gist of the movement is that I provide a link to a page (a “/mentoring” page, if you will) that describes my life experiences and encourages people who would like to learn from me to do so. I promise to respond to all of you folks, so feel free to read over my experiences and flood my inbox.

Hello world!

There’s something about getting into a pair of comfortable pajamas, throwing on a t-shirt and a hoodie, propping my feet up on the coffee table, turning on the television and working on some random bits of code—a game prototype that’s rushing toward design, learning AIR by writing development tools, or messing around with some new-fangled web technology that all the cool hackers are talking about—that just puts me in a good mood and really improves my creativity. It’s those nights when I just know that I’ll have completely squashed these bugs with just one more build. Of course, it rarely ever happens. I don’t mind, because I know that it’ll take just one more build.

I am a developer. I make video games. It’s a pleasure to meet you.