the inevitable minecraftness

So I worked through Minecraft over Thanksgiving weekend. It doesn't have an ending as such, but I got to the bottom of my cave, found some diamonds and redstone, mined some obsidian, built a portal, and saw the Nether. I built the things I was interested in building. I didn't get into the whole trap business or the multiplayer. It's a really compelling little piece of art, and I'm boggled with joy at the amount of money it's made for its creator.

The whole experience got me thinking about the power of open land, and the effect that the concept has on us. American history in particular is full of the idea that land is there for the taking: just move in and set up shop. Even setting aside moral/ethical questions, that idea hasn't really been operable for over a hundred years, but I think we find it compelling anyway, because land is so inherently desirable to us. Almost like gold, or jewels.

It gets me thinking about how and where people like to live. People love water, and love to live next to water. People love to live near their food. People love to live next to other people. People love to have their own land. People love to have ownership over their space. From an evolutionary point of view, it makes a lot of sense. Games like Minecraft and Dwarf Fortress hit a lot of these notes, and add just enough game to keep us hooked.


The diet is going pretty well. I'm fitting back into my old pants, and I'm still on a pretty good downward slope. It's still stressful though; I've had to recommit lately, and it's been painful. But the results keep me moving forward. So far I've lost 40 pounds, and I think I have about 20 more to go.

In other news, the job is going well. I'm starting to understand how this place works, and I've been able to solve some hard problems, which is always gratifying. But the double stress of job + diet has been wearing me down, and my home life has been suffering. I've basically been a zombie at home, which is kinda bad. I miss working on stuff and I've been feeling a bit hollow. Probably because I basically just play LoL all the time. Breaking the funk is hard. Maybe I should throw a party and make tacos for everyone. :-P

a new job

Hay guys, I got a new job.

It's at Riot Games, they make League of Legends. LoL, as they call it, is a free-to-play team PvP DotA-style game.

Um look idunno. But they're in Culver City, which is way way closer than my old job. I've been playing the game like crazy for the past few weeks, Annie can attest, and I'm really excited about working there. Riot owns their own IP, they are their own publisher, they're profitable, and they're growing very fast. That is exciting.

I feel like there's a lot to say about changing jobs, but when it comes right down to it, I'm not sure I need to say it. It's stressful, and I'll miss the old people, and I'm nervous and excited about the new thing. So there you have it, in a nutshell. I am definitely looking forward to having an hour of my day back. More to come.

holy wars: are we in one?

from: Who Is Us? | Talking Points Memo

The only way this makes sense is if you imagine we're actually involved in a sort of global half-racial holy war against Islam. From this perspective, it's sort of like some 'good' Germans trying to set up a Beer Garden in Tel Aviv in 1950 or perhaps 1944. To which folks might say, 'Look, we know you guys didn't do the Holocaust yourselves. And maybe you mean well. But it's just not right. Go somewhere else.' And most of us would probably see the logic of that sentiment.

Now, I get it. Quite a few people think this is precisely the point. (Not a lot of TPM readers. But a lot of people. Let's not kid ourselves.) We are engaged in a half-racial holy war against Islam. It's not us versus a series of interconnected terrorist networks which are relatively small but episodically quite lethal. It's us, the white Christians and our Jewish junior partner sidekicks versus the brown Muslim people. (If you're keeping score at home, let's call it the Judeo-Christians -white jerseys- vs. the Muslims -brown jerseys.) So isn't it a bit soon for these Muslims, even if these are some of the good ones, to come over here from wherever they're from in the Middle East and set up shop on Judeo-Christian territory? Particularly where the first battle of the Holy War was fought? Soon? ... heck, the Holy War is still on. As Eric Cantor said a couple days ago, C'mon!

Sometimes I wish that it were possible to have an open and honest discussion about worldviews. I think there's a lot of stuff like this that could use a few gallons of sunlight dumped all over it.

For the record, I do not believe that we should consider ourselves to be in a holy war. I find the controversy over the Mosque to be embarrassing. But considering this point of view is illuminating. It's a good reminder that other people see the world differently.

progress reports

I have succeeded in reducing my portion sizes at meal times. In fact, I've almost been too successful, in that I can eat almost nothing for breakfast and lunch, and really be pretty much ok with that. Which means I can eat basically whatever I want for dinner without blowing my diet. So that's cool. But of course, it's pretty much against the advice of "eat more, smaller meals, and don't starve yourself." For now I'm going with it though; I can worry about maintenance after I lose another 40 pounds. Until then, I basically want to lose the weight as quickly and painlessly as possible.

Regarding my new phone. It does feel like the future. It's not perfect yet, I wish the reader and picasa integration were a bit better. I wish there was a netflix app (I hear there will be someday). But so-far it is strikingly easy to use, and astonishingly capable. I like reading my rss and listening to audiobooks at the gym. The battery life seems sufficient, which was one of my big concerns. They've spent a lot of time and attention sanding down the rough corners of the interface. I can see how this thing wants to integrate itself into my identity. It's offering me a kind of cyborg symbiosis that I find strangely alluring.


game goals

We playtested the zombie boardgame on Sunday. I think it was a lot of fun, even though we didn't get past the first room and at no time did it really feel "balanced." I learned some specific things and some general things.

Specific things:
-threat needs to scale with players.
-blundering is no fun, or at least it was happening too often.
-balancing the stats was very difficult, nerve seems mad OP, melee weapons were not compelling.
-gear is not yet well understood.
-controlling spawning via line-of-sight can be grossly unfair and forces the humans to do weird counter-intuitive things to maintain sight lines. Which also kinda breaks the story a bit. Perhaps all spawning should be "when an area is revealed" or via "exterior points" (i.e. windows, etc.)

But with all that, the core mechanic seemed fun.

General things:
The game needs a thesis. Or, it needs a story. When you sit down to play it there should be a shared expectation of where the game will go. With this game specifically, I wrote it to be a game about the heroes getting inexorably worn down by zombies. So they start strong, but by the end of the map they just barely escape with their lives. But I think the playtesters expected to start weak, and get stronger while facing increasing danger over the course of the map. So, either I need to adjust my perception, or I need to find a way to adjust the perception of the player. It might be possible to do this by calling on various genre tropes in the way the game is described. Or, perhaps my perception is simply out of step.

The game doesn't handle player death very well. We have a cool mechanic where when a stat drops to 0, you're "bitten," you get a +3 bonus on all rolls, but you can't win, and the next hit kills you. But after that there's no way for dead players to participate. If death is permanent, then the maps need to be really short. If death is temporary... then that needs to be designed in somehow. Descent has a concept of "Conquest" that deals with this problem rather neatly, but I don't know if there's a corresponding horror genre trope.

So I know what I need to focus on for the next iteration.

contractors are funny people

No offense.

We got a few windows quotes. We picked one. Now I'm trying to give this guy money and he won't show up at our house. Well, no-doubt he will eventually. But I think it's funny how the relationship suddenly changed when we said we were ready to start, and the change is that suddenly he's way too busy.

coin jar dinner: cafe pierre

Yesterday we took the coin jar in for cash. The coin jar is a nalgene bottle, so that's about $80. We had a really nice dinner at Cafe Pierre at Manhattan Beach. The coin jar *almost* covered it.

It's nice to have a fancy meal once in a while.

what do I want to think?

I wonder if I could use a tool like cognitive behavioral therapy to intentionally change my attitude about failure and public risk-taking? It's usually used for more clinical purposes, such as treating PTSD, anxiety disorder, etc.. But the focus on the connection between thoughts and emotions, and our ability to change how we think, is appealing to me.

It's interesting to try to figure out, if I could change how I think, what would I change?

Programmer, program thyself.

boiling it down

A few days ago we made pasta sauce from scratch in our slow-cooker. Fresh tomatoes from the garden, tons of delicious ingredients. It came out pretty tasty. But it could have been better. It was too watery, and when you took just the chunky parts, they lacked some of that intense flavor that we had been expecting. Usually when we make it on the stove that's not a problem, because the excess water boils off and the flavor sticks in the sauce, but the slow cooker has such a good seal that you don't get the same effect. Interesting, and it will be remembered.

After reading slacktivist for a while, I think I've boiled down his essential thesis to this: "self-delusion makes you stupid; intelligence means examining yourself and your beliefs. Anyone can be smarter or stupider by following the corresponding path." Which I think is an incredibly strange and powerful formulation of a thing that people have been saying for a long time, "the unexamined life is not worth living." See also: the scientific method. I'm trying to figure out if I believe it literally, or just allegorically, but he makes some interesting arguments, especially regarding empathy and bearing false witness.

It's really difficult sometimes, for me to keep an open mind in the face of my visceral emotional response. This comes up at work, and when reading the internet, playing a game, etc.. Really anytime. But I value the struggle. Regardless of (or in addition to) simply wanting to think that I'm "being smart" by considering a point of view, I'd also like to (smugly) think that when people, generally, consider other points view, the world is a little bit of a better place for all of us. In other words, when you consider another point of view, you make the world a better place.

It's like planting a (literal) tree. Most of the trees you plant may not grow above 2 inches tall, but if you plant enough, you will have facilitated many grand trees by the time you're old. And that's a pleasant thought, no?*

*damn I need to start planting some trees I guess.

file under: unrelenting smugness.

challenges and choices

I recently got a silent promotion* to Senior Engineer here, which I thought was funny, until they put me in charge of the Pets strike force, and I now understand how deadly serious it is. I'm heading up the engineering effort to add pets to our MMO platform, and now all of a sudden I have to do things like "code reviews" and "assigning tasks," which is always a challenge for me, because I often have very specific ideas about how everything should be done, but delegating means letting go to some extent.

Actually the best practice I ever had in delegating was my time as work frosh for Interhovse, back in the day. I found that people really need a clear task, that suits their interests and capabilities, and in some cases a lot of support in terms of tools and advice, but given that they will take ownership and really shine. It was such a great experience, being a part of that process, that I chased it all throughout college. The dolphins, the HME, all that good stuff.

Well anyway it's tricky, making a shift now from being a programmer to being a team leader. I'll still be doing a lot of coding, but more and more of my time is probably going to be spent on other people's code, which frankly I am not thrilled about. But on the other hand it means I can tackle bigger problems, which is fantastic. I know that a lot of programmers have trouble making this transition, and I can see why. So I hope I can beat that curve.

And also I might have to buy some nicer shirts. :-/

*I know right? But in a small office, almost nobody ever uses anyone's actual job title. So to announce it would be rather conspicuous and frankly probably not that great for the morale of people who haven't been promoted so, I can see the point. Of course, it's possible that everyone else was already a senior engineer, and I just didn't know it. :-p

getting serious about it

So the whole weight-loss thing. Sam keeps mentioning this Hacker's Diet thing, and on Friday I finally looked it up. It's a free online book and a set of free tools to go along with it. I found it, as promised*, extremely compelling.

The approach the book takes is that weight is a problem to be solved, just like any other problem, and it examines the problem from an engineering and management perspective. The thesis is that people who have chronic weight problems (e.g. the author, e.g. this author) have a broken appetite. Some people have bad eyesight, some have faulty appetite signals. No big deal. Except that you can't just go to the CVS and buy corrective appetite-glasses.

So the thing to do is to build a set of external tools that can do what the appetite should be doing. In building the set of tools, he brings up a few key points:

1. Your weight varies day-to-day by much more than the amount of fat you gained or lost, because of water. But, it is mathematically simple to calculate a trend line from your weight data that will give you real, solid data that you can rely on week after week. In other words, we can accurately measure the results of our actions.

2. People (or at least, people who need to lose weight) are assumed to be terrible at estimating calories. Look it up, plan it out, know what you eat. You can also control the input.

3. If you have bad eyesight, you will need glasses for the rest of your life (or until you get laser surgery.) If you have a faulty appetite, you have to apply external tools for the rest of your life**. If you do, you can keep the weight off.

And the rest is details, such as knowing that the first 48-72 hours of a diet are the most painful, such as forming a habit to weigh in, such as knowing how to counts calories, and all that other common sense (!) stuff.

I've been on a diet for about three weeks now, but over the past two days I read the book and I'm ready now to get really serious. I've been unhappy with my weight basically, forever. But I've always tried to manage it intuitively, and I've always denied, at some level that my appetite was broken. Admitting that it's broken is actually really liberating. Seeing a path to correct it is really empowering***. 

I don't know if this book would work as well for non-engineers as it seems to have worked for me, but hey it's free and it's online.

*Nothing was actually promised.
**But you DO NOT have to be hungry for the rest of your life. Getting past the worst first few days has made a new man of me.
***Yes, I will have to weigh myself every morning, for the rest of my life. That now seems a small price to pay, which is interesting because I've balked at the same idea many times before. But knowing that the only thing I care about is the trend line, not the number itself, is really comforting to me. Removing the noise from the signal and shortening the feedback loop is an extremely good optimization for any control system. Weight is a control system. My natural weight control system is broken, but I can fix it with tools.


Today, Wii Fit told me that I am no-longer obese. I feel simultaneously proud and insulted.

BMI. Pretty annoying.

Also, thanks to everyone who encouraged me. The hunger pain has indeed gone down somewhat, and the results feel good.

marking the moment

I now think of myself as an adult. And I think I'm ok with that, really. It doesn't mean I stop having fun or anything, but there are simply a lot of subtle cues all around my life, that tell me that when it comes to classifying myself, adult is what I am.

A little rough around the edges? sure. Eccentric? hopefully. But fundamentally, no-longer a "young person."

smartphone research, and seeking advice

my phone research let me show you it.

So... I want a smartphone. And thanks to a recent windfall, I can now almost justify getting one. But, I have serious, serious reservations about jumping in to the deep end of the pool in terms of monthly contracts. For reference, with my pay-as-you-go plan from Virgin Mobile, right now I spend $20-30 a month. (I make few calls, I send few text messages, and I don't do twitter.) So if I buy a smartphone that will be a pretty big cost difference.

Anyway I've been researching and waiting. I've come to the conclusion that what I really want -- a pay-as-you-go smartphone -- does not exist, and isn't going to anytime soon. So then, what are my options, and how do they stack up?

HTC IncredibleHTC EVOiPhone 4Google Nexus One unlockedGoogle Nexus One
Up Front:200200200530180
Total cost 1 year:11001040104012501139
Total cost 2 years:20001880188019702099
Total cost 3 years:29002720272026903059
what?very well reviewedno battery life, too much like a monster trucktoo Apple, but.. probably a really good contract, but also less support = ??too much $.

As you can tell I'm deciding between an Android phone and an iPhone, and my preference is leaning slightly towards the Android, but only slightly. 

It turns out they all cost about the same. Especially since, if I'm going to be honest with myself, I can be pretty hard on my devices, and a phone I buy might not last 3, or even 2 years. So there's the replacement/repair cost to be considered as well, and that makes an unlocked phone relatively less attractive.

It's striking to compare the cost of a phone with the cost of, for example, a TV. A television lasts maybe 5-10 years. If it lasts just 5 years, and I spend $700 on it, then my cell phone is more than 6 times as expensive as my TV. (Of course, that doesn't count netflix or cable subscriptions... but it also doesn't count phone overage or apps.)

No decision has been reached. Does anyone have any words of wisdom?

*Raw research:
android phones

Verizon - HTC Incredible
$200 + $75/mo
($39.99 plan + $29.99 data + $5 text (200 messages))

Sprint HTC EVO
$200 + $70/mo

AT&T - iPhone 4
$200 + $70/mo (down to $60/mo with 200MB data limit... interesting but annoying...)

T-Mobile - Nexus One
$530 + $60/mo
Nexus One Contract
$179 + $80/mo

database design for revision history

So, I was working on a personal project yesterday, and I came across a bullet point in my notes that looked like this:
  • implement item revisions
And it stopped me cold in the middle of a pretty productive session.

I originally designed my database to represent the "current" state of the system. So my central table, Item, doesn't yet have a concept of "history" or "latest revision." And I don't mind changing it, it's still a young system and very much work in progress, but the question is, what's the right way to represent an item that's been through an arbitrary number of revisions?

The constraints are:
  • The solution should be clean (normalized or nearly normalized)
  • The solution should be simple to code against
  • The solution should be high performance and very scalable
  • The solution should be applicable to other tables if/as needed
So after reading around and thinking, a couple of options pop up.

1. Rebuild it on the fly:

Never update anything, just add a new "RevisionItem" that points to the original item. When you fetch an item, also fetch its latest RevisionItem, and in most cases render that instead of the original. This will cost you performance, but it does make the revision history absolutely clear, and it means not modifying the Item table. As a side note, this method fits well into the design pattern of this particular project, where items generally have other items (comments, tasks, sponsorships) associated with them.

2. Log the old versions:

You can keep a "ItemRevisionLog" table, which stores old versions of the items, while the Item table always stores the most up-to-date. The advantage is that you don't have to change the Item table at all, and you keep it from bloating. The disadvantage is that you have two tables with the same columns-- not great design, and if you change one you have to change the other.

3. Add an isLatest flag to your data:

You can just keep every version of the Item in the Item table, and use a flag to find the current version. This runs into problems because every Item query now has to do a lot of extra work, and also you need to think very carefully about your primary key. (i.e. when other tables link to an item, they are now linking to many item revisions, not a single row.) Still, it's not unworkable. Just a little ugly.

4. Treat revisions as first-class data, and normalize them:

Make a table called ItemRevision, and put into it everything about an item that you want to be able to revise, and add a couple of columns for date, editor, and item_id. Then take those columns out of Item, and instead give it an ItemRevision reference called "latestRevision." Each revision is now available when needed, and that data is only written once. Retrieval is also a simple join by id. The downside is you have to be very explicit about what is revisable, and you have to change your data design every time you change your mind about what can be revised (e.g. right now).


So I'm going to cut to the chase. Number 4 is really the right answer, it seems. Anyway that's what wikipedia does, and their capacity for revision management is [unquestioned? unassailable? practically idiomatic?]. Also I found this great chart of the wikipedia schema, which, if you're into that kind of thing, is pretty cool. It's pretty clean, for all the work it does. Color me impressed.

You can see how they handle page revisions right in the middle of the graph. The Page table points to a Latest Revision, while each Revision table points to Page. A separate Text table stores the actual page text, for reasons that are not immediately clear to me, but that I will assume don't really apply to my much smaller and simpler system. In any case the chart, working in combination with a good night's sleep, has convinced me.

This has been a fun puzzle for me, and once I stop grumbling about rewriting my Item data access to go through a "revision" object, it will make me a better person.

programmable keypad update

(see here)

It's the best!

I filled up all 24 keys. Only 3 with single-keystroke keys (tab, enter, delete), the rest with all kinds of wacky keyboard shortcuts.

I'm pretty happy with it. I might buy another one for home if I start uh... using my computer more.

funny thing about biology

So I'm trying to eat less and exercise more and all that good stuff, but one of the funny side effects of eating smaller portions, is that it turns "the story of Nate working on some stuff" into "the story of Nate trying not to eat stuff." It's amazing how distracting hunger in particular can be for me. Part of the problem is that when I'm working hard, I'll often pacify my body with a large meal. Really not a very good habit when "working hard" means "sitting perfectly still at my desk with a pained expression on my face." But changing the habit is proving difficult and disruptive.

Sigh. :-p

where's the beef (web design)

I've got some personal problems with internet technologies. The central problem is that, as a game programmer, I've never really respected web tech. The web is static and unresponsive. Most of the code is bad. Most of the languages used are (dynamically typed?) and unresponsive.

But as I keep pushing forward anyway, it seems to me that my central problem has been that I don't even understand where the work happens. Where's the beef, as it were.

A game, for example, is written in one programming language, and is tightly bound to itself, and to a single machine. It's easy, in principle, to follow the path of execution from user input, to simulation, to display. And in between there's a mass of c++ or what-have-you that makes everything go. To me, that makes sense.

But on the web, I face a daunting situation. The user sits on machine A, in browser B, makes a request to server C, which hits database D, and when the server gets the data, it renders a page, and returns it to the client. The browser then renders the page, and then the client side code takes over and manages some of the interaction going forward, talking to the server as necessary.

Just to take one example, count the number of languages, or distinct syntaxes, involved in this chain of events:

  1. URI/URL, (HTTP)
  2. ASP*
  3. C#
  4. SQL
  5. HTML
  6. CSS
  7. Javascript
  8. XML (webservices, optional)
  9. Flash (optional, special purpose)

So, as a newcomer to the field I say, great, where do I put my application? Where does the code go? And the sad answer is, it has to go everywhere. In order to make a high performance site (the only kind I can even bear to contemplate), you need spend time with each of these technologies and syntaxes. The connections between most of the different languages are very loose. There aren't a lot of good tools for looking at more than one or three of the languages at a time. And they all matter.

So my essential personal problem with web development, is that I find it absolutely disgusting. It literally triggers my "unclean" emotional response. And then I shut my brain off and try to hold my nose as I program, and it's not very easy to work one-handed.

Well anyway I have these websites that I want to build. So, I need to get over it. I need to get over my tightly-bound, completely-integrated elitism. And so part of what I've been learning lately, is that I've been looking at the stack in the wrong way.

Now that I've figured out that nobody designs websites in html and css (they design in photoshop or illustrator), things are starting to make a lot more sense. I can redraw my big list like this:

how does it look?
1. Photoshop/Illustrator
3. CSS
4. ASP (optional)

what does it do?
1. SQL
2. C#
3. ASP

how does it feel?
1. Javascript
2. XML (webservices, optional)
3. Flash (optional, special purpose)

So, there are three distinct jobs here. (Four, if you count the job of drawing the lines in between the categories.) Each job has good tools associated with it. Each job covers a small enough group of technologies that it's possible to work effectively. The trick, I think, is to only work on one job at a time. Put on your architect hat and draw the divisions. Put on your UI art hat and render the page. Put on yous system engineer hat and define the services. Put on your game programmer hat and write some javascript.

Do not, under any circumstances, try to design your page layout with C#. That sort of procedural art is technically possible, but it's incredibly time consuming, and the tools for it are terrible or nonexistent.

I know this isn't novel, but I feel so much better for writing it down.

*I'll use the ASP.NET C# stack because that's what I've been using for my personal projects. I strongly suspect that it's not much better or worse than anything else. I know I personally like it better than Ruby on Rails. I've never really tried PHP.

the dialog box is a lame duck

file under: UI Pontification

Firefox Ditches the Dialog Box | Webmonkey�|

Modal dialogs are confusing and frustrating. I hate the way they insistently blink at me when I try to click outside, demanding my attention before I can do what I want, forcing me to think on their rails. Outside of a few rare, special cases, modal interactions are a crutch that should be avoided wherever possible.

Non-modal boxes are... clunky. They get lost easily or they get in the way. They probably still have their uses, but as a design paradigm, they will be eclipsed.

Doing better may not be easy, but the sign of the dialog box is declining. Human interfaces are maturing, slowly, painfully.

single-purpose objects

There's a fetish in western consumer culture for the single-purpose object. What I mean is, a tool, container, or item that has exactly 1 use. For example, a potato masher or a salad spinner, as opposed to a fork, or a bowl. The potato masher is utterly useless for anything except mashing, but it's a pretty good masher -- much better than a fork is. Single-purpose tools fit into a funny category because they're always perilously close to being zero-purpose knick-knacks, if their niche disappears. You'll get a lot of use out of that hammer, but maybe not so much out of that post-holer.

I think that as our society gets richer, we see more and more of these single-purpose items in our daily lives. They're not really very economically efficient unless you use them pretty often, but I know that I have an emotional weak spot for the perfect tool, the tool that makes one particular job really easy. And I'm finding, as I look around, that more often than not the right tool is out there*.

I think the same trend is true across all manufactured items, across all sectors of industry and commerce. In an abundant ecosystem, the drive towards specialization is strong. You see the same thing in rain forests, where many species specialize on eating just a few things, and you see the opposite in tough or turbid environments like cities and deserts, where a few animal species survive by being generalists. If you only have a $20 budget for your kitchen supplies, you're not going to blow it on a salad spinner. But if you already have plenty of bowls, it starts to look pretty useful.

I'm not sure if I think this kind of specialization is good or bad. I find it pretty easy to make arguments either way. Certainly I think people can take it too far, in what they choose to acquire. But I don't think I'd blame the tool for that, I'd blame the collector, if they clutter up their house or blow their budget. It's not the pipe wrench's fault that you're not a plumber.

Anyway, I like to have an awareness what tools I choose and why, and this has been on my mind a lot lately as I try to clean and organize the house, and yes, as I ponder new acquisitions. ;-)

*Funnily enough, I think this is part of the reason I get so angry about software that doesn't suit my needs; I've grown used to the idea that if I need an egg scrambler, I can order one from the home shopping channel. But when I want the perfect keyboard or IDE, I'm left in the cold. Maybe my expectations are unrealistically high? Or maybe the software industry is still young when compared to say, manufacturing, or kitchen ware...

on relativism

In one sense, cultural relativism is a kind of truce. We all agree not to argue about religion and politics around the dinner table, out of a pragmatic desire to keep our family together and have a pleasant evening.

But I think if you press most people, we do believe that some habits are better than others. Some beliefs, when held by society at large, make people happier or more productive. Some bits of culture are economically more effective than other, at the very least. Science, vaccination, germ theory, etc.. But then again, whether you believe in the flying spaghetti monster or not is unlikely to make much of an economic difference, right?

To each his (or her) own. People are different, and if we accept that some people are sprinters and some are distance runners, some are poets and some are boxers, that's a form of relativism that has real positive social impact: specialization is economically fantastic.  So at some point we're willing to grant our neighbors a degree of latitude in their actions and beliefs.

But on the other hand, consider motivation theory -- what motivates people? What would society look like if everyone was aware of how to get the best out of themselves, and out of others? I for one think it would be a better place. Part of the (unspoken) contract of the Enlightenment, of Science, is that as we answer more of these questions, we are driving closer and closer to a true utopia, to the capability to optimize society, to a place where everyone is happy and productive, where both the individual and the society are stable and resilient.

Fundamentalists reject this contract implicitly, and argue that their teachings, not the scientific method, hold the path to the ideal society. The vast majority of religious people aren't true fundamentalists though... the conflict between religion and science is for the most part a construct of the fundamentalists. Many religious scientists are put in a hard spot, because their science demands that they denounce fundamentalism, but their religion may flirt with it or even embrace it wholesale. How can I explain objecting to a specific, inflexible belief, while not objecting to a specific, inflexible faith? Awkward.

This is where most modern people hold up the white flag. We use cultural relativism as a social lubricant, to allow different people to interact without getting all worked up. It's a necessary (by definition) part of a multicultural society.

But I guess I think it's important to keep in the back of your mind the thought that there might be a real, meaningful difference between two beliefs. And that the belief you hold now, might not be the right one.

...relativism: pretty good, in moderation!

my web epiphany

I was tearing my hair out this weekend to find a usable html/css editor. I was so disappointed with every tool I used; they were all terrible for what I wanted to do: quickly iterate design ideas for layout and content.

After talking to Annie I figured out why this is. Nobody actually uses html editors in this way, to do first-pass design. That's what photoshop is for. I've been driving backwards. Once I sat down and started sketching out my interfaces in flash (where I'm comfortable drawing boxes, etc.) I started making real progress towards my actual design goals.

When I got the thing looking pretty good in flash, it was actually pretty easy to translate it into html/css using any reasonably competent html editor. The one I'll probably stick with is the one that's included in Microsoft Visual Web Developer Express, since that's where I'm working on the nuts and bolts of the site itself.

In conclusion, every html editor sucks, but they suck less if you know exactly what you want to build before you sit down to wrangle divs.

google sidewiki

Why did nobody tell me about this?

I love this meta crap.

continuing keyboard adventures

My quest for keyboard nirvana continues. I've basically given up on a single keyboard that does what I want, but I just placed an order for this guy.

A fully programmable, relegendable* 24 key keypad that will sit just to the left of my keyboard. Simple, practical. Not a gaming keypad, though I looked at a couple of those too. I just think I would feel silly using one while programming. Anyway, I have big plans for this guy. I'll write about it when I get it up and running.

*Nice made up word, eh?

windows 7 first impressions*

I came in this morning to a fresh windows 7 install, and I've spent the time since getting my workspace up to speed. That's more a knock on our workspace than it is on windows 7, but in the process I have some observations.

1. I don't like confirming everything twice. I'll turn off browser-open-file confirm boxes.
2. using the windows key to open programs is awesome.
3. yay search
4. using a third party zip utility to install things directly into the program files directory fails because they don't have access. The two I tried (winRar and 7Zip) did not handle it well.
5. It's pretty.
6. setting environment variables hasn't changes since what, windows 98? It still sucks hard. I know nobody ever actually does this... except anyone using java or maven. Grr.

But I can't escape the vague feeling that Microsoft have given up. It seems like their heart really isn't in it anymore, like they're just doing what the broader IT and design communities tell them to do. This is an operating designed by a company that's staring its death sentence in the face. They can feel themselves becoming IBM, and the irony is not lost on anyone. Windows 7 is a deer-in-the-headlights, avoid-all-controversy design. And it... well so far I find it vaguely depressing.

*Yes yes, nobody cares what I think.

programmer analogies

I've been thinking about different trends and practices in programming a lot lately, since they've been hitting me in the face at work. But instead of jumping into that I want to start off with an analogy.

What's the difference between building a truck (a big 18-wheeler),  and building a racecar? They have a lot in common. They both have very powerful engines. They both meet very exacting quality standards. They're both very complicated. But there's a different mindset that goes into each one. Let me table you:

speed and handlingnot importantvitally important
weight and aerodynamicsnot importantvery important
reliability targetmonths, yearsone race
maintenance costsmust be cheap to fixnot important
fuel efficiencyvery importantnot important*

You see a lot of trucks on the road. Building trucks is serious business for serious people. People who build trucks can be proud of what they're doing. But you'd rather drive the racecar. (Or at least a sports car.)

So, I'd like to apply the analogy to something closer to my field of interest, namely browser-based MMOs. When you're making such a beast, you have a choice. You can look at it like a web application (see: facebook, amazon, gmail...) or you can look at it like a game (see: mario, halo, starcraft).

My contention is simple: web-apps are the trucks of programming, games are the racecars.

Web AppGame
interface speed and handlingnot very important**vitally important
cpu efficiency and network latencynot importantvery important
user accessibility, availability99.99 or better95? 90?***
maintenance costsmust be cheap to fixnot important
bandwidth costsimportantnot important

I think you can take this analogy a lot further, to look at the people who work on cars and programs, to look at their tools and trends, etc..  Anyway it upsets me that we're building a racecar, but our engineering decisions seem to follow the current truck-building trends and best-practices. They're not appropriate to our business and they've put us in a world of hurt.


*This is a guess. Maybe fuel efficiency is important for racecars? I don't really know.
**web page response times of 1 second are acceptable. If you press a button in a game and don't see a response within 0.5 seconds, the game has crashed.
***World of Warcraft goes down for 6 hours every week, on Tuesday morning from 5AM to 11AM. If KFPW went down for a (scheduled!) 2.4 hours every day and was fine the rest of time, that would be just fine with me. But can you imagine if gmail did the same thing?

back to basics, and it feels good

I've had all week off, and most of it I spent lazing around and playing videogames. I did some housework too. But I've been avoiding working on any of my real projects, because I've felt so burned out on programming.

Yesterday and today I finally sat down to work on a little project for Tim, and I find myself really invigorated by it. Programming for myself, by myself, on a new project, is a completely different experience from working on a huge MMO codebase. I don't have to worry about the side effects of my changes because there are no other systems relying on this code. I don't have to get into anybody else's head, and I don't have to reformat code to make it readable. I don't have to remember/wonder why something was done a certain/dumb way.

I control the horizontal, I control the vertical. I go from being the "veteran," to being the "guru."* My code is much simpler and less defensive. Which means, much faster to write. All the class and variable names are perfect. It is so refreshing. I know it won't last. but it's nice.

* Funny. Thanks Jared.


Living on the West Coast, it seems like most national news happens in the morning, much of it before I even wake up.

I'm curious if there's a different feeling on the East Coast, and if so, what kind of difference does it make in your outlook?

morality in the age of leisure

It's like love in the time of cholera, except completely different.

I just came off of an excellent discussion with Dave, and I want to reflect on it and flesh out my thinking.

When people are living in conditions of existential stress, (wars, famines, pre-technological societies), (my) conventional wisdom says that social pressures increase. Stressful times create intense personal bonding, and with that bonding comes strong social pressure to conform to the group.

There's a point I want to make here, that I'm struggling with...

Remember when calculators were introduced to schools? A lot of people who grew up without them said, "[That's cheating! Children will never learn how to do arithmetic by hand! They will grow up stupid!]" And well they were right about the second sentence, but wrong about the first and third. The fallacy that they fell into, is that their experience tells them that you will live most of your life without access to a calculator. But their experience is completely inapplicable to their children's lives. Kids growing up today will always, always, have access to calculators, and google, and wikipedia. For the rest of their lives, forever and ever. So, why would they need to know long division? It's a cute trick, and it's good to know what it means to divide two numbers. But you're never going to use that skill as an adult, except to teach it to your kids, who will also hate it.

So: calculators are not cheating, they are the future. Looking up facts online is not cheating. Storing all of your friends contact information into your devices so that you don't have to remember their phone number is not cheating. Using a GPS navigation system is not cheating.

Morality is having the same culture shock.

Example one is sexual promiscuity. 200 years ago, it was a big deal, because it caused all sorts of very real social problems in the form of unwanted pregnancies, orphaned and abandoned children and mothers, and disease. Today, (almost?) all of those problems can very simply and easily be avoided. The consequences of divorce are down too; divorced mothers are no longer helpless and hopeless. It still sucks of course. But it's not the moral hazard that it used to be, by a long shot.

So... that's all really great news for society, that we don't have these horrible problems anymore. But when some people's behavior starts expanding to fill the new environment, other people get really upset. "[That's immoral! People will start having sex any time they feel like it! Society will fall apart!]"

I'm going to come short of finishing the analogy I've drawn here, because I'm too uncomfortable with the topic myself. But I think it's clear where this argument is going. If resurrection were cheap and easy, murder would not be nearly so serious a crime. Nor would suicide. We would still want to find it abhorrent, but it wouldn't threaten society to the same degree. You'd have recreational suicide, ritualistic sacrifice, lethal game shows. And it wouldn't ruin society at all.

So, perhaps, the more advanced, the wealthier society gets, the more depraved it becomes, in the eyes of the older society. But also, the more liberated it becomes? Like I said, I feel pretty uncomfortable with this discussion, or at least, with having this discussion in public, outside of my own brain-space. Taboos are powerful things. But I wanted to get the point out.

usb theremin?

Also what's the fastest /best/cheapest way to get a theremin interface hooked up to a modern digital synthesizer? (that uses digital samples?)

No-one makes a usb theremin? or do they? I don't know if MIDI would handle a theremin very well...
blech. None of those is what I want.

I'm feeling very Veruca Salt about theremins all of a sudden

Yeah ok time for lunch Nate...

micro episodic game design

I've been pondering whether it would be possible to produce a game in the idiom of a web comic, which is to say, three updates a week or more, with one or two authors.

At first glance it looks really, really hard. With a traditional (static) web comic it's pretty easy to put a number on how long it takes to produce each update. An hour to brainstorm the joke, an hour to sketch it out and complete the planning, and maybe a few hours to implement.

With a micro-episodic game, your players are supposed to come back every other day and play a little bit more, right? Is it possible to develop fun/deep gameplay, without driving away your audience? The average web comic audience, after all, only needs about 10 seconds to grok your latest update; value is delivered over a span of weeks, or during long binges as a new reader plows through the archives. Your game needs to stand up to both modes of play.

With a traditional game, value is delivered primarily through the novelty of the gameplay or the puzzle.
Comics tend to be character driven, and a good comic can coast for a while with no plot at all if the audience is invested in the characters. A game would need to capture that level of good-will. People need to want to come back each time to see what happens next.

Assuming you can solve that problem, you immediately hit another problem. In a comic, if a reader doesn't get or like a particular panel, they can skip it. A micro-episodic game would need to be very careful to not throw up any roadblocks for players. If players can get stuck and become frustrated, you have no audience.

In order for the game to be meaningful, there have to be choices. But in order for the micro-episodic format to function, each update has to be applicable to every player, regardless of their previous choices.

Web comics are not very bug-prone. A micro-episodic game certainly sounds very bug-prone. The game design and tech design would need to be very defensive and robust.

So. Like I said it looks really really hard.

Perhaps obviously, I'm looking at things like and for comparison and inspiration. Those two sites are very successful at delivering many semi-interactive experiences on a regular schedule. Are there others I'm unaware of? Actually, I'm not sure I want to know. I like to jump into things like this without doing a lot of research first, because research tends to be depressing. ;-)

The game that's taking shape starts off very, very simply. It uses a character that grows as you make choices, in response to your choices, and you grow your character over the entire span of the game. The essential mechanic is navigation, you have to navigate to the next screen. Maybe the front edge of the game is always a "loading" screen which means that you're at latest. Probably you can navigate backwards and reverse (some of?) your choices to explore other options. There's a "reference" save game that anyone can use to jump into the game at the latest point. Maybe it's pulled from the community, maybe not. Or maybe that's not necessary, or maybe only at the start of chapters. We progress from blank screens to mazes to simple choices to character development, and as we go we introduce game mechanics that will stick around for the rest of the game.

Advanced ideas:
* navigation from late in the game back to early screens
* massively multiplayer
* time travel, revisiting old locations
* community driven content generation
* algorithmic/interactive content generation

Sounds fun. And still really really hard.

amf serialization between as3 and java

I was cleaning out my blog and I found this old post in draft form. I don't know if anyone other than me will find it interesting, and yet I'm posting it! But I don't think the internet minds. The internet is nice like that.

Ok another inside baseball post for all those flash/java coders in my blog readership*. So, you say you need to pass objects back and forth between Java and AS3. You say you've tried using Xstream XML serialization, but it's just too slow? Let me tell you, you definitely want to be using AMF. It's Adobe's native object transfer format, and it is wicked fast**.

Ok so that means you want to use BlazeDS on the java side, and some kind of native deserializer*** on the client side. That sounds pretty simple! But since I know you're a vry srs software engineer, I know that you need your objects to be strongly typed and type-safe, so that you can plug them into the rest of your client and server logic. Well, to do that you need to carefully line up all of your classes on the java side and the flash side so that they are the same, and then register each AS3 class with a call to registerClassAlias. Ok still not so bad.

Next, forget about using AS3 enums. The AMF deserializer basically won't let you do it, and you'll lose the benefit of having an enum class to begin with. You can squirm and complain, but you're not getting out of this one: Java enums work fine. AS3 enums do not work. You must use primitive strings. You will lose enum type checking and compile time safety. DEAL.

Now, you're pretty close, but there are a couple more things to take note of. If you're working in vanilla actionscript 3, you don't have the mx packages linked in. That means that when BlazeDS sees a Java List, and it sends you something called an ArrayCollection, flash will barf. So you need to set the legacyCollection flag on the SerializationContext object before you serialize your java objects.

**about 40 times faster than our (admittedly unoptimized) as3 implementation of xstream. 40 times is a lot of times to be faster by.
***pronounced de-cereal-izer, which is also a great word. I think that's what you call someone who eats all the crumbs at the bottom of the 3 nearly-empty cereal boxes in the pantry.

from math to biology

When I was learning about computer science* in college, they taught it like math. Everything was entirely comprehensible, if abstract. Terms like "Lamda Calculus" reinforce the association. The study of computer science, in academia, is essentially an abstract theoretical pursuit. The skills you learn in this setting are extremely useful for writing algorithms, and analyzing dozens of lines of code.

When you first start a project, it acts like math. You write down a few formulas to transform your data, and you pass stuff back and forth between your various functions. But as the project expands, somewhere along the way it stops acting like math. You start to bump up against the limits of what you can hold in your head, and then you blow right past those limits. And even though your math skills are still relevant for looking at any one particular small part of the puzzle, it turns out you need a different approach when you're worried about hundreds of thousands of lines of code.

The analogy that strikes me most is biology (think of cellular biology). When you're facing certain classes of bugs in systems "of a certain size," the empirical approach just makes more sense. At some point it doesn't matter what you think the system should be doing, you need to actually test it to see how it performs. As you add modules and dependencies, you're relying on a dozen or a hundred or a thousand other developers, and their bugs are now yours. This is the point at which you say something like, "lets try changing the data and see if that solves our problem."

To a computer scientist, that sounds like defeat, surrender, or worse, a lack of rigor. But in my experience at least, the math approach falls on its face after a certain level of complexity. Just as it's impossible to solve even moderately complicated general mathematical equations, programs above a certain size defy clean theoretical solutions. The biological approach however, becomes more and more effective, in comparison.

I'm not trying to give advice here, more just making an observation. Maybe we should be teaching people about the skills they need to manage software that has grown its own eco system, that has its own biology. Or maybe that's what the IT department has been doing all this time, and I only just realized it.

*Computer Science is what professors call programming. Never tell a professor that you're a programmer. You should be a software engineer at the very least.

looming personal crisis

What am I going to do with all this free time? I'm so used to working crunch time that when I'm at home for more than an hour I get restless and uneasy. And now here's a three day weekend. I'm not sure I can cope.


this entire week is a strange dream

Ok this is just a review of stuff I've shared elsewhere, with some additional commentary.

This is an incredibly beautiful idea about choral music, participation, and the internet. The video is kindof hokey, and the sound needs a little bit more fine tuning, especially the aspirations, but holy crap it sounds fantastic. Wow.

This bit of news about this country's major financial institutions snuck under the radar, what with health care reform and all. Perhaps we're going to do something about those too-big-to-fail firms, after all? I had almost given up on that one.

This is why you're fat? Well I find it remarkable that this study has never been done before. I have a suspicion that it's going to be very very important.

But probably not as important as this. Printing organs, or skin, or... missing limbs... Ok! Welcome to StarTrek level medicine. Not quite. But if this technology scales is capability, and if it scales in economy, it could simply remove the need to find donors for transplants. Which means vastly reducing the cost, uncertainty, and complexity of transplant operations. Which means that transplanting becomes a viable treatment for a much greater number of conditions. And while you're regrowing that organ, lets do some gene therapy on the stem cells first. Let's cure the aging diseases as we replace your failing organs one by one. Cheap. Scalable. No need to grow secret armies of organ donor clones in vats. Whole science fiction distopias avoided by one device.

On top of the stuff mentioned in the previous post... what a week. If news was like this more often, I might pay more attention.

what is that unfamiliar feeling

Google stops censoring search results in China.

The US Congress passes a Health Care Reform bill.

And suddenly I feel... represented. As if major players on the world stage back my positions. I mean that feels pretty good I guess.

Now, you can argue back and forth whether it's really in the Chinese people's interest to lose Google*, and you can argue back and forth over whether the health care bill is even a net positive for the American people**. But regardless, many skeptics have been silenced in the past (2?) days. I think it's a remarkable reminder of how powerful ideas can be.

*Their arrival was good for China, and the manner of their exit will be good as well, because it makes clear that the government forced them out. Whether in the years to come, their absence outweighs the light they shone, is to be seen.

**Getting rid of denial of coverage for preexisting conditions, alone, goes a LONG way towards a more humane health care system. I am willing to hold my nose for some of the other crap in there.

remarkable happiness

I wanted to write it down here, for the record as it were, that I am remarkably happy these days.

I want to embellish that statement. I've never really thought of myself as a happy person. I think temperamentally I'm on the sadder side. But when I take my internal temperature these days, it comes back much happier than I might expect.  Than I'm used to.

A lot of is definitely the fault of the person I spend most of my non-working time with. ( <3 )

I think there are other factors too. I'm regaining a lot of the confidence that I possessed when I entered Caltech. Almost all of my deep doubts have vanished. I mostly know who I am, and I'm reasonably happy with that person.

I have to get back to work now (ha!) but I expect that some more deep thinking will show up in the near future.

sharpen the saw

Today I got my feature done in an hour, but I spent 3 hours wrestling Spring, JBOSS, and Eclipse.

I would just like to restate some of my principles now.

* Tool performance and stability is important.
* Iteration time is important.
* A good error message can save an hour of time.

Which is to say, if you pay someone $40 an hour, you should buy them a $400 tool if it saves them 10 hours of time over it's lifetime.

another four mouths to feed

Today I woke up and wanted to get an aquarium. Annie was decidedly neutral on the subject, but I had a fire in my belly, and so we headed out to Jim's Exotic Fish on PCH to see what was what.

We talked to Jim, and we told him that we were eventually interested in setting up aquaponics, but that we were basically new to fish, and wanted to start small and easy. Jim was incredibly helpful. He sold us a nice glass tank and an integrated unit that sits on top of it and does light and pump and filter, plus a heater. We sold ourselves some gravel and clay and plants and a rock. We took it all home and set it up, and filled it up with water, and put in the water conditioner. You have to do that to get the fluoridation out.

Then in the afternoon we returned for the fishes. Jim told us that he had been working 15 days in a row, because his daughter had just had a baby, so she couldn't come in to work. I sympathized. We picked up 2 pairs of 2 varieties of platies, and took 'em home, and after letting the temperature adjust and all that, we set them loose in their new home. Then we stood there and watched them for like 20 minutes.

It's a 12 gallon tank and it can hold a lot more than 4 little guys, but we wanted to start small and move up from there. Eventually we'll get to the goldfish, and then maybe koi, when and if we go for an outdoor pond system. But for now our little tank will be plenty. And I think Annie's already coming around to the idea ;-)

a long rambling post on the latest topic

I think I want to write a book about software development, and why people find it so confusing. There's a lot of trendy methodologies and frameworks and languages and platforms out there, with their high priests and acolytes, promising that everything will be smooth as butter if you can just come over and see things their way. Well that's marketing for you I guess. But I think that most programmers don't have a good understanding of how really broad the programming landscape is.

I mean, one one side you have embedded systems, and then you have mobile devices, and then you have game consoles, and desktop, and then you have expert system, and then server, and then web... And they all have massively different constraints. That's what you don't get if you follow the software development trends. Most of the software development technologies out there were invented to solve very specific problems, but their evangelists are unwilling to admit it. So it's difficult to tell which buzzwords and trends fit your problem.

On the one hand this is all just basic design: list your requirements and your constraints at the beginning, and then pick solutions that fit. I guess what I object to, is that a lot of technology evangelists would really like you to skip the step where you pick solutions. As a marketer, if you can turn technology selection into a religious war, then you don't have to worry about your faithful jumping ship if their problem definition changes.

So, I'd love to see a map of the various axes of software development, along with which technologies, methodologies, etc., were designed for which region. And then I will print it out and roll it up and hit people over the head with it whenever they tell me that I should be using Ruby on Rails.

more griping

If I were to try to keep myself to a strict schedule of a post a day, I think many more of my posts would just be complaining about software.

Every so often Eclipse seems to decide that you're being too productive. It'll crash, then refuse to launch. Generally to get it up again you have to lobotomize it first, and then rebuild your workspace. This usually takes at least an hour out of my day every time it happens. It happens about once a month, I'd say.

the world is a dangerous place: true/false

A while ago I saw an online book linked from boingboing about the science and psychology of right wing authoritarianism. Right wing in this case doesn't mean politically, necessarily, but means something more like, "aligned with governmental and religious authorities."

I read the book, and I found it disturbing and yet irresistibly fascinating. I like to think that I have a natural skepticism for people who tell me that my political enemies are dangerous people. I really don't like that idea, it smells like racism and fear-mongering. So I continue to find this book hard to integrate, inasmuch as it casts a shadow on a lot of people.

However I think it also offers pretty compelling window into the psychology of some large political movements, in the United States and elsewhere. Consider whether you agree with this statement: "Once our government leaders and the authorities condemn the dangerous elements in our society, it will be the duty of every patriotic citizen to help stomp out the rot that is poisoning our country from within." A lot of people do agree with that statement.

What's presented in the book is a collection of academic research on authoritarian personalities that, as far as I can tell, seems legitimate and makes sense. It's an easy read. The author does have a political axe to grind, and he's up-front about that. (It didn't bother me because I basically agree with him politically.) It addresses topics like hypocrisy, mental compartmentalization, leader and follower personalities, and religious fundamentalism, and along the way it paints a picture of the people who love and follow public figures such as Sarah Palin, Lou Dobbs, and Glenn Beck.

Like I said. This book makes me really uncomfortable because it tells me that my political enemies are dangerous, irrational people. What I'm trying to do with it is, instead of closing myself off further, to try to open myself up. If I can figure out a way to use this research to understand the emotions and beliefs that drive this certain kind of thought, then maybe I can communicate better.

Sam turned me on to a blog called slacktivist, which seems to spend most of its time ranting against right wing authoritarians, taking their arguments apart, and generally trying to get inside their heads. It's a really clever and insightful blog, but as much as I might enjoy it, slacktivist is a terrible tool for convincing your uncle that he needs to lighten up on the gays, for example. I think that by understanding the basic underpinnings of the RWA personality, we can do better.

Recognize that your uncle sees the world as a dangerous place, full of moral and physical peril. Recognize that your uncle believes that his culture, his very way of life, is under attack by coordinated, godless enemies. Recognize that he longs for a strong leader to tell him what to believe so that he can help defend his tribe. Then reconsider whether you want to get into that argument with him.

Anyway if you find any of this interesting, I think you should take a look at the book I linked at the top. I'd love to talk about it with some people.

more abstraction rants

Mike was telling me about some advice for programmers, which is that premature abstraction is as bad as premature optimization. The idea is that abstracting too soon (i.e. before you know how to solve your problem) can cause problems later on when your assumptions change. Which is the same thing that you see in premature optimization. On the face of it, it sounds like simple advice, but there are some cultural reasons why it's not.

Abstraction and optimization act as opposing forces in software design. Optimization is always trying to push your algorithm closer to the metal, closer to the silicon. Optimization rejoices at side effects and arcane trickery. Abstraction is trying to push your algorithm away from the silicon. The mindset of abstraction is to make sure you never have to worry about those messy details. Abstraction rejoices at eliminating your algorithm completely by delegating it to a lower level. So abstraction allows a large group of developers to work on a vast project without slowing eachother down. Optimization on the other hand, allows code to run fast enough to be useful.

For academic applications, abstraction is more important. (If your code is slow you just come back in the morning.) So, that's why they teach you  abstraction in school.* But for games, optimization is king. Generally, the optimization mind-set is not taught. You have to seek it out, you have to believe in it.

My belief, as a games programmer, is that abstraction is only permissible as long as it doesn't get in the way of necessary optimization. I currently am in the middle of a battle with a culture that seems to believe in abstraction as an inherent good, as a higher order value than optimization. I find that frustrating.

*There are lots of good reasons to teach abstraction, it's a difficult and important skill and it can color the way you think for the rest of your life. Optimization on the other hand is by nature tied to the specific technology that you're working with, it's far less generally applicable and it tends to be full of tricks, instead of full of insight.

the craigslist blues

Trying to rent out a house is a bit nerve-wracking. I'll randomly get calls from people who always sound either harried, anxious, or apologetic. Then I have to set up a time for them to flake out and not show up to see the house.

Luckily we're not in the position that our financial solvency depends on getting the rent money, but boy it sure would help. So I have to worry about whether the price is too high, whether the ad is right, whether I could be doing more to get it out there. And whether the tenants will give me troubles when I finally find them. There's a lot of uncertainty about the whole thing, and I'm trying to keep a lid on it so it doesn't bubble over.

I think it's going to be well worth it when we do get someone in there, but it sure is nervous-making in the mean time.

shout outs

Just a quick shout-out to all my kharaa and marines, I had a great time on Thursday night kicking it old school with my ns crew. Man that game is so good with the right group. It turns on much more than just personal skill, and when a team strategy comes together you feel so great*.

We're setting up a fortnightly game, so let me know if you want in and I'll add you to the spam list.

*Um I guess it's like sports or something. awkward turtle.