Premake 4.1.1 Released

Premake 4.1.1 is now released and available for download! This release includes important fixes for the Xbox 360 and Mac OS X Universal binary support which introduced in version 4.1.

The full change log:

  • Use libtool instead of ar for Mac OS X Universal static libraries
  • Fixed Xbox 360 linker settings in Visual Studio
  • Remove platform-specific intermediate objects on clean
  • Bug 2819232: Buildoptions not used when creating Makefile for C#
  • Bug 2813297: OS X universal config should be "univ" (William Burnson)
  • Bug 2814179: Xbox 360 precompiled headers not working

On Proper Projects

A lesson learned from the development of Premake 4.1: keep your active projects specific. I mean really specific.

I started development by creating a new project, naming it Premake 4.1, and dropping in a bunch of actions from my backlog. Technically this is a valid approach; the only definition of a project I've ever encountered in this context is "any result that requires more than one action." Now older and a little wiser I realize how incredibly vague that is. Consider: Program TV remote vs. Achieve world peace. Both technically valid projects. One doable, the other not so much (which one is an exercise left to the reader).

My project started out with a reasonable list of actions, but inevitably new ideas came up, features and refactorings, bugs that needed fixing. Because my project was vague enough to encompass all of this new work it soon did, growing larger and less focused, and I started to feel like I was losing ground. Rather than stepping back and fixing it as I should, I tried crunching harder which just made the problem worse. Ack!

Looking back at this trainwreck learning experience, I've come up with some rules to help keep my projects manageable going forward:

  • Projects should be a dozen actions or less, a number I pulled out of thin air based on past experience. If it requires more than a dozen steps it is probably larger than I can get my head around in one go, and likely contains hidden work. Better to split it up.
  • If I have to think about whether an action belongs in the project or not, one of them is too vague. Either the action needs to be more specific (or become its own project) or the project needs a tighter focus.
  • Project names should always start with a verb. What is it I'm trying to achieve with the completion of this project? That doesn't prevent Do stuff projects but it at least makes me think about it for a second.
  • When in doubt, split it up.

There are probably more rules, I can't remember. I reserve the right to edit this post later.

I've been doing this for about three weeks now and while I thought it would help my planning a little, the gain in clarity has been quite remarkable.

The Last Guardian

I missed the official trailer for The Last Guardian, the new game-in-progress from Fumito Ueda, that was shown at E3 last month. I'm a big fan of Ico and Shadow of the Colussus, and very excited to see what he's got in store for the PS3.

From GameSpot

It looks like a blend of the two previous games, with a Colussus taking on the role of the Princess. I'd guess that there's more to it than that though, considering Fumito's history of creative, emotional gameplay — and the way he's harshed on others for not showing the same inspiration.

I replayed Colussus last fall and, after defeating the first few, spent the rest of the weekend just traveling with Agro looking for all the apple trees and white-tailed lizards. It was relaxing and satisfying, much like exploring Hillys in Beyond Good and Evil. Here's hoping they find a place for that kind of open-ended exploration in Guardian.

Whys and Wherefores

A bit of navel gazing, if you don't mind...a moment to think about why I'm writing this stuff.

I mentioned before that I'm writing because I feel like it and this is an easy subject for me—but that's not a very useful explanation. A better one is that this stuff has proven itself hugely useful to me, and I'm hoping others will find it useful as well.

You've probably gathered from context that I, like most folks, have a day job: a software consultant developing systems for all kinds of clients. We're winding down a big project now, finishing features, writing documentation, and transitioning support. At the same time, I'm heading up R&D for a new product to be developed in-house, a first for us. Not very long ago those two efforts right there would have been enough to swamp me.

Now, I'm also working on Premake, with two big releases this year and at least one more to come. I'm building out this website too, with another round of changes in the works. I am learning how to develop for Mac OS X and the iPhone (to be featured prominently in Premake 4.2), and getting ready to bring my old Flat Four project back online.

Away from the computer (as much as anything can be these days) I am teaching myself how to draw, playing my guitars again for the first time in almost 15 years (and you can tell...I suck!) and writing for the first time in almost as long. I am teaching myself Spanish (hola!), and tonight is my first Kung Fu lesson. Oh yes, I'm married with two kids, a house-in-progress (aren't they all?), pets...the whole nine yards. And after all that, there is still time for Fallout and Rock Band, hanging with friends, and catching up on Battlestar Galactica (still on season two—no spoilers please!). And that's just what I'm doing now…you should see my to-do list!

Point being: there is a lot I want to do in my time here on Earth. Until recently, I wasn't able to get it done, and it was seriously stressing me out. Now I am getting it done, and the stuff I'm writing about is a big part of that.

To be clear, though: what I've covered so far isn't what got me moving. What finally made everything click was figuring out what I wanted, and building up the courage to go after it. How that happens is rather more philosophical. But it couldn't happen until I cleared my time and my mind to figure it out, and that's what stuff like scaffolds and MITs can do for you.

I'd like to cover a couple more topics in this "stupid simple" series, and then I'll probably slide back toward the technical stuff as I learn about Cocoa and the iPhone. If you have any questions or comments — love it, hate it, whatever — feel free to let me know here or in the comments.

Premake 4.1!

Premake 4.1 is now released and available for download! The full change log:

  • Added support for cross-compiling target platforms
  • Added Xbox 360 support to Visual Studio 2005/2008
  • Added Mac OS X universal binary support
  • Added Playstation 3 support
  • Added precompiled header support for GCC
  • Support links and libdirs for Visual Studio static libraries
  • Fail gracefully when list is assigned to string field
  • Changed GCC flags to -fno-exceptions and -fno-rtti
  • Improved performance of configuration building step
  • Fixed crash when configuration is missing a kind
  • Patch 2031626: Support for additional manifest files (Colin Graf)
  • Patch 2558089: workaround for --as-needed/correct link order (idl0r)
  • Patch 2609028: verbose linking in makefile (kaidokert)
  • Bug 2564404: FatalWarnings has no effect with gmake target
  • Bug 2550759: pchheader option has wrong type
  • Bug 1900333: Parentheses in build path
  • Bug 2790865: SharedLib on OSX fixes (Ash Berlin)
  • Bug 2790882: Trailing slash in path.getabsolute (Ash Berlin)

On Pen and Paper

Continuing my series of stupid simple ways to get things done, I bring you...pen and paper.

The first habit I picked up when I started my forays into GTD was keeping a pen and paper on me at all times. Any thought of significance gets written down. Once it gets written down, I stop thinking about it, freeing up those mental cycles for something bigger and better.

I started out capturing to-dos and reminders; as the mental cruft cleared I found myself with more project and writing ideas. The process is cumulative, and builds on itself. Simple ideas gather depth over time as I consider new perspectives: new features, presentation ideas, a twist in the plot line. And the best part is that all of this happens organically over time, insights arriving of their own accord, so there is no real effort involved other than writing it down as it comes.

Pen and Paper
Notes, quotes, to dos, and MITs...pocket sized!

Once a week at first, but now once a day, I review my notes and move them to more permanent homes, usually into Things or Evernote. I've developed quite a queue of ideas over the years — now I just need to figure out how to make them all happen! Fortunately, I've gotten some ideas on that, too.

I've tried various form factors of paper and pens, including index cards, Post-It notes, Space pens, and all the gimmicks on 43Folders and Lifehacker. My well-informed opinion is a Moleskine Cahier notebook paired with a Zebra F-301 compact pen is the best combo out there.

The Cahier is the perfect size to slip into a pocket. It comes in blank, ruled, or graphed versions. The back pages are perforated, perfect for sharing a phone number or directions. It lays out flat, and holds up well to weeks of travel.

I like the feel of Zebra pens, smooth and consistent, even in wet or cold weather. The F-301 compact is small enough to fit into a back pocket next to the notebook, but expands to a full size pen at need. And it's metal shell is sturdy enough to handle being sat upon, for those times when you forget what's in your pockets.

I have an iPhone as well, which is great for capturing a quick photo or a snippet of sound, but I still keep my Moleskine with me. Despite my gadget-oriented nature, pen and paper is more often than not faster, easier, and more versatile. Project ideas, blocks of writing, sketches, UML or interaction diagrams — not quick or easy on the iPhone.

An added bonus: when a notebook gets full, I note the date on the last page and toss it into a box in my office. I find they make for great inspiration when I'm feeling stalled, providing a real nitty-gritty, nuts and bolts window into my past: what I was thinking, what I was doing, and what seemed important.

This is one powerful habit to have. I've gone from being the guy who forgets everything to the one everyone counts on to remember. My friends have even picked up the habit themselves and started carrying around Moleskines of their own. Maybe I should get a commission, eh?

On Most Important Things

A few years back Marc Andreesen took the productivity pr0n plunge and posted an article describing the tips and tricks he uses to get more done. Some of his suggestions, such as throwing out your schedule, were...thought provoking, but didn't stick for me. I did pick up one invaluable habit from his list though, which I've since seen mentioned elsewhere under the name of "MITs".

MIT stands for "most important task". Each night, just before I go to bed, I make a list of the three things I most want or need to get done the next day. These actions then become the first things I work on when I wake up (after completing my morning scaffolds).

This practice is very clarifying. It is easy, in the hustle and bustle of the work day, to get caught up in a lot of small urgent tasks and never address the big, important ones. When that happens I might work my ass off all day with nothing much to show for it. By deciding on my MITs the night before, when I am relaxed, I gain some distance from the noise and commotion, some perspective. As a result I make better decisions about where to focus my attention.

Those MITs aren’t the only thing I get done, of course. And some days I don't get to all of them, in which case I roll that task over to the next day, and make it the first thing I tackle.

Doing the important actions first is key to making it work. Those urgent emails, the meetings, the fires that need to be put out...those are going to keep coming. The list of quick hits never ends. Developing the habit of addressing the important before the urgent ensures I'm making progress where it matters, no matter what the world throws at me.

It sounds simple, but makes a profound difference in the quality of my day.

On Scaffolds

Man, it feels good to get this stuff out of my head. Today's brain dump is scaffolds, another stupid simple technique I use every day to get more done. I live and die by my scaffolds; they are my workday heartbeat. Even if my day gets crappy and unproductive my scaffolds ensure I end up a little closer to my goals.

In one way scaffolds are just checklists, like my morning scaffold here:

  • stretch
  • drink water
  • start breakfast
  • start the Roomba
  • empty the dishwasher
  • take vitamins
  • give Kenobi his pills
  • empty the dehumidifier
  • feed fish

Simple, right? Why even bother with a list?

Ticking off the list each morning helps me remember everything even when I'm bleary-eyed and waking up. Just as important as the what, it optimizes how I do it. After weeks of using and tweaking the list I know this is the best way to get it done. And I don't have to waste any time or energy wondering if I've forgotten something later.

The scaffold also gives me a place to "hang" new actions (hence the name). Kenobi only needs his pills at certain times of year, when his allergies act up. If I didn't check the list every morning I'd have to resort to Post-It notes and memory when allergy season came around. (Kenobi is our dog, by the way. Some people have an allergy to dogs, we have a dog with allergies.) By developing a habit of checking my lists I've created the perfect place to leave reminders for new actions and otherwise optimize my day.

On Pomodoro

I think I'll start with the Pomodoro Technique, a productivity enhancing way to structure the work-a-day life. It's effective, I use it every day, it has a cool name, and is as stupid simple a process as you'll ever find: work your ass off for 25 minutes, then chill for five. Repeat.

There, done.

Maybe the folks who thought up the idea take it a bit more seriously, but really that's all you need to know to use it. So what’s so great about taking a break every 25 minutes (why ruin your flow)?

Work your ass off for 25 minutes means pick a goal—one goal—and go after it. No checking your email, no surfing the web, no getting a drink or chatting up your cute co-worker, and no context switching. One goal, 25 minutes. In practice this turns out to be an ideal duration, long enough to do real work, but not so long as to become tedious. And since most office scheduling happens in half-hour increments it slots in nicely between meetings.

Always running a timer while working also protects against the inevitable distraction, that Homer moment when something shiny catches your eye and lures you off into the wilderness. Like earlier this morning when I went researching an unfamiliar API call and ended up on Cafe Press shopping for a new coffee mug. That kind of thing. In 25 minutes the timer goes off and brings you back to reality. Chill for five, refocus, and get back to it.

If I find myself getting burned out, or if I'm having trouble switching gears, I'll take 25 minutes just to check email and surf the web. The timer gives me a chance to recharge without worrying about blowing my entire afternoon. The official instructions would say take a longer break every two hours, but I don't stick to that myself.

Devoted followers of David Allen's GTD system (I count myself among you) can use these cycles as artificial contexts, breaking out of the dreaded @computer conundrum. Example: I set aside one 25 minute block each day for writing, and use an @writing context to plan my work (I also make heavy use of scaffolds, which I'll talk about in another article).

All of that said, the real benefit comes from the five minutes breaks.

Thousand miles, first step, yada yada yada

Once upon a time I thought that I'd like to "be" a writer. That was once upon a time and a very different path from the one I ended up taking. Even so, I now want to start writing again, to find my voice.

Perhaps "want" isn’t the right word, entirely—I feel compelled to start writing again, in the same way I feel compelled to work on my software projects, even though it cuts into the time I could be hanging out, drinking beer, watching the game, playing Fallout 3. I've been resisting it because I didn't know what I wanted to write about. I still don't but realized, after much pain and effort, that it might be easier to just give in and do the damn writing. What’s the worst that can happen? (Don’t answer that.)

Right now I'd be plenty happy just to find a groove and get comfortable. I know (now) that if I wait for the perfect topic or for my life to suddenly become more interesting it will just be too late. Does that make sense? I see opportunities to write all the time, but I don't do it because...well, because I don't write. I don’t have a vehicle for it, and no opportunity seems consequential enough to start one. So here's to starting anyway, and to being inconsequential.

Thousand miles, first step, yada yada yada. I'll start with stuff I know well and which is fairly uncontroversial and hopefully avoid embarrassing myself too badly. I've got a bunch of productivity p0rn I’d like to get out of my head—not exactly state of the art but as good a way as any to get my chops back. For your sake, dear reader, I'll do my best to find some kind of insight, and I won't spend too many words on it.

It is pretentious, of course, to think that anyone gives a damn. And I'll admit to selfishness here: I want to create content that is useful or at least entertaining, but I'm really just enjoying the act of writing.

I’ll finish with a gratuitous Amazon Associates link for The War of Art by Steven Pressfield (a good book, by the way).

We don't tell ourselves, "I'm never going to write my symphony." Instead we say, "I am going to write my symphony; I'm just going to start tomorrow."

And so it begins; I've earned my beer. Oh look, the game's on...


I am Jason Perkins (starkos), the founder of Industrious One. I'm yammering on about life as an indie, getting things done, finding inspiration and, eventually, creating the big audacious stuff.