Things I suck at

August 27, 2009

Writing blog posts.
Typing up the copious amounts of fiction I write.
Scanning my sketches.

Basically, taking anything from analog to digital.

PG West

August 24, 2009

Looking at attending PG West in October. I hope to be presenting a talk regarding repoze.who and effective ways to handle authorization in a web app environment.

The tough part, of course, is writing the talk. I spoke at East regarding Simpycity, my query-based ORM, and the difficulty of preparing a presentation was much more than I expected.

I hope to give those who attend my talk a better performance this time around. :)

Toys

August 24, 2009

So the other day, if you read my Twitter stream, I bought an SGI O2.

Now, for those not immediately aware, it’s a legacy workstation from about 1996, your average video and light 3D production system. In this day and age, pretty limited, but still fun to play with.

There are Many like it, but this one is mine, and all that.

There are a great many reasons why I bought such old hardware, but it really comes down to a deep, raw desire to play and explore. To quest, and in questing, learn and grow and enjoy.

In particular, this system has a SIMD unit specifically for image and graphics processing. From 1996! It won’t be the fastest, certainly, but it’ll be amazing to poke the system and see what it can really do.

Also of enjoyment will be that this system runs IRIX, a dead fork of the Unix OS. It’s old, somewhat crufty, and a lot of modern software doesn’t really work on it – due to the age of the OS, Linux-centric programming, and the lack of CPU power.

300 whole MHz. Impressive!

Most important is that it feeds one of my deepest desires, satisfies a childhood dream that I feared would never be fulfilled.

And that is a wonderful feeling.

Awesome Chicken

June 10, 2009

So, tonight I continued in my world of awesome when it comes to delicious food that I make foe myself.

To produce this awesome chicken dish, you will need:

* A chicken breast, boneless and skinless.
* a couple of cloves of garlic
* mushrooms (3 or 4)
* half a tomato
* spinach
* olive oil
* a small pat of butter
* garlic powder
* black pepper

To produce, put some olive oil in the bottom of your skillet. Dice the garlic, slice the mushrooms and tomato as well.
Add the pat of butter and the chicken breast.

Add water, sufficient to cover the mushroom slices.

Spice with garlic powder and pepper to taste. Don’t be stingy!

Cover, and simmer on medium heat until the chicken is fully cooked.

Slice chicken, add 1-2 handfulls of spinach, to taste.

Cover and simmer until the spinach is just starting to wilt.

Serve with quartered pita bread.

This served me, and was totally delicious.

So, today I was trying to get an old, wonderful game working properly: Missionforce: Cyberstorm, one of the better mecha wargames ever shipped for Windows.

Given that this game doesn’t work very well on Vista, I went along and started setting up a VM specifically to play Cyberstorm in. I know, uber geeky. *grin*

While the VM was setting up, disks were formatting, etc., I started to think about how much fun it would be to develop my own giant-mecha wargame, so I’m not constantly balked by the fact that one of my most favourite games is 13 years old and closed-source.

It turns out that writing a simple hex map really isn’t very hard – about 45 minutes to come up with a workable design that can create arbitrarily shaped layouts. This doesn’t handle terrain or any other feature that might be desired for a wargame, nor movement logic. It’s just the first step, building a place.

The requirements are simple: You have a map of x,y size and you need to be able to pick any point and get neighbors.
The first approach I considered for this was simply, at generation time, set every hex to know exactly what its neighbors are, as it is created. Immediately, I realized that this was incredibly inefficient to do, as the requirements of building a bunch of interdependent blocks would take a lot of CPU time.

So I went and looked at some basic hex maps, and realized that, due to the hex structure, they’re always arranged in a horizontal or vertical alignment. Which means rows.
Which means we can use an array.

So we start doing this:


class hexmap(object):

def __init__(self, x, y):

self.x = x
self.y = y
self.map = []
for i in range(0,y):
self.map.append([]) # add an array to hold this row of hexes

self.map[i] = [hex_block() for r in range(0,x)]

For each row, create a length of hexes. Simple.

So now we can look everything up, but we still don’t really have a method to find neighbors, which we need. I thought about this some more, and looked at the maps some more, and realized that we can take advantage of array lookups to figure out neighbors.

As an example, in a horizontally-aligned hex map, for y,x of 3, 3, you could say that

  • My left and right neighors will ALWAYS be (y, x-1) and (y, x+1)
  • My top neighbors will ALWAYS be (y+1, x-1+offset) and (y+1, x+offset)
  • My bottom neighbors will ALWAYS be (y-1, x-1+offset) and (y-1, x+offset)

For which we are making the assumption that all odd rows are offset by 1 from all even rows.
This allows us to do a very quick and easy lookup, arbitrarily, of any neighbor that a given hex might have.

(The offset math isn’t quite right yet, I don’t think.)

Coming up, discussion on landmasses and terrain formations.

Dear Thunderbird

February 11, 2009

I need good email. You provide a mostly non-irritating email client for OS X.

However, there is one thing that Evolution does better, by default, and that is correctly sorting threads by date.
In all the time I have used you, you have never correctly sorted threads by date. Attempting to click the thread button and then the date button would sort by thread, OR date.

Never AND, Thunderbird. Never AND.

Today, after much frustration, I finally hit The Google for this. And found View->Sort By

Date
and Threaded

Finally, Thunderbird – you CAN sort mail correctly.

Finally.

Or, a terrible case of the Ooh, Shiny.

iPhone: Shiny, touchscreen oriented interface. Delicious mobile browser. High-resolution screen. iPod functionality.
Slow-ish keyboard. Crappy email app. Worse SMS app. No other data-text-transfer capability.
Blackberry Bold: Higher DPI screen. Hard keyboard. Trackball.
Crappier browser. Inelegant interface. Awesome email and texting apps.

All in all, I’m rather pleased by my new Bold. It’s remarkably less annoying than the iPhone in a lot of ways, but also has new limitations.

I’ve definitely taken to carrying both devices on my outings. There is advantage to having the iPhone as a PDA and the BB as a phone + aught else.

Ubiquity of Place

January 29, 2009

So, today I was packing up my backpack with a bunch of stuff so I could wander out to the CoffeeshopOfDeath(or taxes) to do my work this fine Winter day.

Given that your average backpack only contains a select amount of Stuff, I had to seriously pare down what I wanted.

As a result, I learned exactly what I needed to have to redeploy on a global scale – literally. Everything else is totally replaceable, and can be inferred from what I have.

The current Backpack of Infinite Potential contains:

  • Laptop, MacBook Pro. My default workstation, with effectively everything on it. Plus power brick
  • Wallet, with credit and bank cards.
  • Camera, Nikon D60
  • Blackberry Bold, plus cable.
  • iPhone, plus cable.
  • Binder of work-related stuff
  • 2x Moleskines
  • Sketchbook + pencil
  • My fountain pen
  • Gloves & Hat (It is WINTER)

And that’s it. Everything I need to be productive, get online, and be creative, anywhere I happen to be. Should I trek across the country, it’s enough to redeploy into a Place, buy clothes, and set up shop.

Anywhere. Untethered.

It’s an awesome feeling.

It’s also why I’ve decided my backpack is going to be named MCV. :)

A Quote

January 22, 2009

“Man, geeks don’t just use a computer for occasional work or to “look something up on ‘The Interweb.’” They live on their laptop and take it anywhere they’d bring their wallet. They eat wireless like potato chips and crank out code for a living. They have an IM window and an IRC channel running all day.”

Just one IRC channel? I’ve got 6…

You know..

December 20, 2008

I have the WordPress app on my iPhone. My iPhone is always with me.

I could, and possibly should, be blogging from Wherever I May Be.

And I don’t. I’m clearly a horrible individual.

Awesome Tuna Casserole

December 20, 2008

In the continued theme of writing about the foods that I tend to make for myself, and eat, I bring you Awesome Tuna Casserole.

You will need:

  • * 1/2 cube of margarine
  • * 1/3 cup of flour
  • * 2-3 cloves of garlic
  • * A bunch of mushrooms, or, a 10 fl oz can of chopped mushrooms and stems in water.
  • * 3 tins of tuna chunk light tuna in water
  • * A 10floz tin of cream of mushroom soup
  • * Cheddar cheese
  • * Milk
  • * Macaroni noodles
  • * 2 saucepans. I don’t know how big mine are… They hold, at a guess, 2L (1/2 gal) of water each.
  • * Salt
  • * Pepper
  • * Other spices, by preference

Fill one saucepan with water, and a pinch of salt. Put it on high heat, to boil. This is your macaroni boiling pot.

Mince your garlic into small pieces, and put it into your other pot. Add the 1/2 margarine cube. Turn onto medium-high heat, and allow the margarine to melt, and begin to cook the garlic.

If you are using sliced mushrooms, and not tinned mushrooms, add them now, and also allow them to cook with the garlic.

When the marg has melted, and the garlic is starting to cook, begin to add the flour, stirring constantly. It will thicken. We want the final product to more closely resemble thick flour and margarine than a liquid.

Add some milk, stirring constantly to avoid lumps. A whisk or wooden spoon is appropriate here.

Consult other recipes on how to make a roux if you don’t have any idea what I’m talking about – this is a roux.

If you are using tinned mushrooms, add them now, again, stirring constantly. This will further thin your roux.

Add sufficient macaroni noodles. You can shoot over, and freeze the remainder for something else.

Begin pre-heating your oven to 350F.

Add the cans of tuna and water to the roux. Break up the tuna into smaller chunks.

Add the can of mushroom soup. Stir all this together.

Add more milk if necessary. We’re shooting for semi-thick, not runny. If it’s thin, add a touch more flour.

Grate cheese. Add cheese.
Grate some more cheese, and add it. You really can’t go wrong here.

Add cracked pepper and other spices (oregano, thyme, rosemary, paprika) to taste, here.
Add a healthy dollop of mustard.

Keep stirring!

Grate some more cheese, about enough to cover your baking pan with cheese. I use a 12″x12″ baking pan for this.

When your noodles are done, drain and rinse them.

Pour your sauce into the baking pan.
Begin to add noodles, stirring all the while, until you feel you have a good mix of noodle:sauce. This is left up to you. Add more sauce, more noodles, etc, until the pan is full and you are happy with the ratio.

Cover with grated cheese.

Place in the oven, on the middle rack, for about 30-45 minutes.

When it’s done, the cheese will be melted and forming a hard crust.

Remove from oven, allow to cool for about 10 minutes.
Spoon it up, and enjoy. I often put ketchup on mine.

ALTERNATIVE RECIPE:
Remove the tuna and the mushrooms and mushroom soup, and you have an excellent homemade Mac & Cheese.

Developer Rig Redux

October 21, 2008

Or, why Linux Bothers Me

So, recently, I had cause to migrate my developer system from my standard Santa Rosa Macbook Pro to a Linux-based desktop system.

The reasons for this stem mostly from the issues I was having with my MBP’s backlighting. After the Apple Store opened in Calgary, I took my Mac in and had it fixed.

While the Mac was in the shop, though, I needed a workstation. Enter the Linux box.

So, I’m running on:

  • AMD Athlon 64 4000+, 2.6GHz, single-code.
  • 2GB DDR1 memory
  • ATI Radeon 3850 AGP, 512MB memory
  • 8GB internal disk

And Ubuntu 8.04.1.

So, for the last few weeks, this has been my workstation.

Things I like:

  • Compiz effects. These are nice, funky display modifiers that actually improve my usability options. They’ve been nice to have.
  • Evolution. Finally, a MUA that doesn’t outright blow chunks.
  • apt-get. It’s so nice being able to install stuff and REMOVE STUFF cleanly and easily.

Things that I hate:

  • All the UI elements are huge. For instance, AdiumX in OSX has the buddy list as a small, subtle little window. In Pidgin it’s freaking -massive-. UI elements are big in Firefox, all GTK elements. I can’t seem to find where to make them less intrusively massive.
  • Setting up the ATI graphics was a huge pain. Why isn’t this easier? At least it worked properly, quickly.
  • Multimonitor is shit. No surprise there, it’s X11.
  • gEdit is nowhere near the quality of TextMate. There’s some plugins that loosely approximate TextMate functionality, but no TextMate is really, really, really kills development on this evironment.

TextMate is going to be the killer on Linux, I think. It’s almost impossible to do work on gEdit after working on TextMate for 4 years.

My Pile of Shame

October 21, 2008

My current Pile of Shame, all the games I have bought but haven’t yet played to completion.

Surprisingly, this doesn’t include my Dreamcast or SNES titles. Oopsie. :)

I’m currently playing Dead Space on the PS3. Next will be wrapping up The Darkness on X360.

XBox

  • Shenmue 2
  • Jet Set Radio Future
  • Call of Cthulhu
  • Halo
  • Halo 2
  • Crimson Skies
  • Jade Empire

Xbox360

  • Marvel Ultimate Alliance
  • Forza 2
  • Gun
  • Kameo
  • Dark Sector
  • The Darkness

PS2

  • Shadow of the Colossus
  • Kingdom Hearts 2
  • Final Fantasy X
  • Final Fantasy XII

Gamecube

  • Zelda: Wind Waker
  • Zelda: Ocarina of Time
  • Alien Homind
  • Tales of Symphonia

Wii

  • Metroid Prime 3
  • Mario Strikers
  • Zelda: Twilight Princess

DS

  • Etrian Odyssey
  • Etrian Odyssey 2
  • Kirby’s Dreamland
  • New Super Mario Bros.
  • Final Fantasy 3
  • Age of Empires

GBA

  • Final Fantasy 2
  • Final Fantasy 4
  • Final Fantasy 6

The Mountains

August 30, 2008

This post was made during the labour day long weekend and saved and forgotten. Posting now.

And so here I am high in the Canadian Rockies, by a place called Moraine Lake, enjoying my short reprieve from adulthood and working. 4 days of bliss.

And four days of dealing with an epic crapload of people. Four days of wow, long weekend in the mountains with everyone else.

Lots of other people. No Internet service. Too much of the goddamnit, not enough of the ooh shiny.

Looking forward to getting some writing done tonight. This place is positively inspirational.

On Compression

August 15, 2008

Compression. That overriding feeling of being squished that makes it harder and harder to get up every day, or work on your own projects after normal business hours.

Especially if you’re like me and write code for your bread.

Compression, that feeling of outright guilt that you should be doing something. Anything!! Not just sitting in the dust of your cheetos and pretending WoW is your life.

The constant burning “what next”?

I recently went through a 7 year struggle to achieve a dream. I fought for it so long and dedicated so much that I forgot how to pick up a new monumental task.
I forgot how to find that next thing.

Imagine my surprise, the huge lost feeling that I wrestled with when I won. No more struggle. The battles are done.

Shit, now what?

It took a long time to see, to find the “now what” in my life. But more than that, to see how living for now what can be all consuming and totally unsatisfying. Nothing will ever be awesome or big enough, because, now what?

I watched The Last Lecture. I read the same title. I read Waiter Rant.
Both of them made so much about so little. They showed me what I’d forgotten, how to give myself permission to relax. How to give myself permission to pick a task and be okay with the others languishing.

How to live and enjoy right now, this second, and know I won’t have another like it.
That the last thing I want to do with that precious second is waste it on whining, on waste, on nothingness.

That it’s okay to relax and screw off. Okay to enjoy oneself. Okay to be happy with what one has now.

These are sentiments that are impossible to share with others. Impossible to give to another human. I can tell you it feels like this, can tell you it’s awesome to just let go.

And you’ll say ‘but..’. And that’s okay too. You’re not ready to just be. Maybe you never will be.

But it’s how I found happiness. I found the way to be, content and happy, enjoying what I have right now. Never wondering if my time is wasted. Enjoying it for what it is.

And that is how I beat the compression, the exhaustion of stress. I have permission from myself to relax, no guilt, and do the task before me.

And enjoy the doing.

That said…

Work is still pretty stressful. :)