2008/04/12
2008/04/08
2008/02/21
Oh Man...
2008/01/02
2008/01/01
Happy New Year
I hope y'all had a good holiday and didn't have too many hangovers. Me? I ate entirely too much and spent way too much time in airports.
I don't have any big release this year, not that GWA was a big release or anything, and I didn't even really do that much work over break aside from the work I get paid for. That's mostly due to a high level of burnout and the fact that at my parents' place in AZ, I don't have a quiet place to do work.
In keeping with my (now) two year tradition, I'm not posting New Year's Resolutions here. To this statement, I'll make one concession today. The one not-quite-resolution is doing more work at home and releasing more stuff here. I'd like to write more technical stuff and release more code, even if it's not in game form.
I don't have any big release this year, not that GWA was a big release or anything, and I didn't even really do that much work over break aside from the work I get paid for. That's mostly due to a high level of burnout and the fact that at my parents' place in AZ, I don't have a quiet place to do work.
In keeping with my (now) two year tradition, I'm not posting New Year's Resolutions here. To this statement, I'll make one concession today. The one not-quite-resolution is doing more work at home and releasing more stuff here. I'd like to write more technical stuff and release more code, even if it's not in game form.
2007/12/10
True Story
Last night I had some time so I fired up Spellforce 2: Shadow Wars. I didn't buy it because there's a half nekkid dark elf on the box, (though I might have bought this one because of the box art). I think I'm about halfway through given the mix of races, the explored vs. unexplored portions of the map, and comparisons with the original (they both follow the same general plot and buildup lines).
Without getting into a lot of detail about the game or the setup, the two characters in question here are Bors, the fighter dood, and the hunter Mordecay who at this point is fairly new in the party. On my way back through a zone to take care of some side-quests I found a named baddie and proceded to open a can on it. It dropped a pretty good two handed sword. This was the resulting voice-over banter (as best as I can remember; I was kind of drunk):
Mordecay: "Hunter weapon."
Bors: "No it isn't!"
Mordecay: "Roll?"
Bors: "Bah!"
That's far too awesome.
Without getting into a lot of detail about the game or the setup, the two characters in question here are Bors, the fighter dood, and the hunter Mordecay who at this point is fairly new in the party. On my way back through a zone to take care of some side-quests I found a named baddie and proceded to open a can on it. It dropped a pretty good two handed sword. This was the resulting voice-over banter (as best as I can remember; I was kind of drunk):
Mordecay: "Hunter weapon."
Bors: "No it isn't!"
Mordecay: "Roll?"
Bors: "Bah!"
That's far too awesome.
2007/12/09
Two Book Recommendations
Since we've been crunching, I haven't had a lot of time to do a whole lot of development at home. So instead, I've been trying to catch up on my reading. As in the title, there are not one, but two books that I'm prepared to recommend to y'all.
The first one is by one Gerald Weinberg
Becoming A Technical Leader. He's the author of such classics as PL-1 Programming: A Manual of Style and
The Psychology of Computer Programming. (The former may not have aged quite as well as the latter for those keeping score.)
It's quite a good text; the kind that really makes you think if you're willing to.
The second is a bunch of stuff that I'd already read, handily polished up and put into dead tree form: Managing Humans by one Michael Lopp of Rands in Repose fame whose link you can also find over there on the right. Rands is the sort of manager I wish I had at my first three jobs but didn't (seriously). Ever wonder if you and your boss are speaking a different language? It's because you are and Rands will tell you all about it. It's good stuff and should be required reading for anyone who manages technical people.
The first one is by one Gerald Weinberg
Becoming A Technical Leader. He's the author of such classics as PL-1 Programming: A Manual of Style and
The Psychology of Computer Programming. (The former may not have aged quite as well as the latter for those keeping score.)
It's quite a good text; the kind that really makes you think if you're willing to.
The second is a bunch of stuff that I'd already read, handily polished up and put into dead tree form: Managing Humans by one Michael Lopp of Rands in Repose fame whose link you can also find over there on the right. Rands is the sort of manager I wish I had at my first three jobs but didn't (seriously). Ever wonder if you and your boss are speaking a different language? It's because you are and Rands will tell you all about it. It's good stuff and should be required reading for anyone who manages technical people.
2007/12/02
Mind the Rubble
The good thing about ridiculously long compile times is that you get time to do stuff like update your blog's template.
Carry on.
Carry on.
2007/11/21
Full of Fail
They say you shouldn't blog angry. You can add that to the long list of seemingly good advice that I don't heed.
So I've been in crunch for the last couple months which in general makes me crankier than normal. At some point in the last week or so I picked up the Supreme Commander expansion. You also might recall that I like Supreme Commander. It is, after all, being the spiritual succesor of one of my all-time favoritest games.
I verily took said expansion, installed it, ran it, patched it (multiple times) and for my $39.99 at that hive of scum and villainy otherwise known as Best Buy, I got this:

That's it. No indication of what's wrong in any kind of end-user-meaningful way. No clear recourse as to how to fix the issue whatsoever. Smashing. I'm going to guess that this has something to do with SecureROM. Ya know what? If my reward for buying the game is not being able to play it then maybe I shouldn't be buying your games! There's probably a workaround but the days of me having to fiddle around with that kind of shit should be way over. It isn't 1997 anymore.
Guys, I know software is hard, but would it be too much to let me play the game I just bought?
So I've been in crunch for the last couple months which in general makes me crankier than normal. At some point in the last week or so I picked up the Supreme Commander expansion. You also might recall that I like Supreme Commander. It is, after all, being the spiritual succesor of one of my all-time favoritest games.
I verily took said expansion, installed it, ran it, patched it (multiple times) and for my $39.99 at that hive of scum and villainy otherwise known as Best Buy, I got this:

That's it. No indication of what's wrong in any kind of end-user-meaningful way. No clear recourse as to how to fix the issue whatsoever. Smashing. I'm going to guess that this has something to do with SecureROM. Ya know what? If my reward for buying the game is not being able to play it then maybe I shouldn't be buying your games! There's probably a workaround but the days of me having to fiddle around with that kind of shit should be way over. It isn't 1997 anymore.
Guys, I know software is hard, but would it be too much to let me play the game I just bought?
2007/11/20
Oh man...
Crap. Double crap.
So sad; I just bought one of these so I can't justify it (even to myself). But they're soooo coooool!
Stupid technology addiction.
So sad; I just bought one of these so I can't justify it (even to myself). But they're soooo coooool!
Stupid technology addiction.
2007/11/10
What You Should Know About Load Times
(cleverly abbreviated as WYSKALT)
If I have time to get pissed off and say "I can't help but notice that I'm not playing your game RIGHT NOW," then it means your load times suck and I'm probably wondering why I bought your game in the first place.
This seems bad!
Loading your game off media isn't rocket science. I'm going to assume that we're loading off some kind of disc with a 'c' media like in a console game rather than your hard drive like on your PC of choice. However, anything applied to optimize load times on disc-with-a-c will also optimize disk-as-in-hard-drive as well. I'm not going to cover everything with load times in this post, but this is the absolute bare minimum of stuff you need to know but I couldn't fit it in quite as catchy an acronym. There's lots more stuff that will make load times even better which I might rant about at a later date.
So at any rate, here we go.
Opening Files Sucks
Most times we don't notice this. Occasionally you run into something where you need to load N files which are kinda small but where N is something gigantic (like 1000). Then you notice--even if you have an uber fast machine. On this generation of console, N is usually on the order of thousands for a given level load for those who might be curious.
Fixing this is uber-easy: pack all your files into one giant uber-file so you only ever need to have one or at most a small number of file handles open. We often know of these as zips, wads, paks, pigs, etc. (The one I use for BEER is "keg". Clever, no?)
This makes load times suck less which is the goal. Sadly, they still suck.
Loading Non-Sequential Data Sucks
So now you've got your data all archived and it's time to load it. Surprise! It still takes a long time because you're constantly seeking around in your uber file. I can hear you smug Win32 people scoffing--but remember that your file mapping eats virtual address space and I know that since you're still using WinXP that you only get two gigs of VM. Ha!
This is pretty easy conceptually: stick all the data in your archive in order. The bad news is that depending on your particular data set and load time trickery, this might be really hard in practice. Chances are good that it leans toward the really hard side because you might only load some subset of your data and probably don't have a fixed order for it. If you can make your loading respect a fixed order then the problem moves pretty quickly to the easy side again.
I've found that in most cases the best we can hope for is that some subset can be made to lean toward "most" for fixed sequentiality. Sometimes you can change the loading code to do nicer things; sometimes you can't for <fill in the blank> reason that fits your situation. In either case you need to generate a sequence list for some set of your data then stick all the data in your archive in that order as best you can. Neither of these are particularly difficult assuming you have source code and enough time to do stuff and an archive builder that doesn't totally blow chunks.
Why does this work? Once file open issues are dealt with, seek time tends to be the dominant factor in unruly data sets. On discs-with-a-c, each seek is going to weigh in at roughly between 50 and 150 milliseconds depending on your particular hardware. So, if you're loading 10MB of data but seeking 100 times, your load bandwidth for that data can be no better than 1MB/s in the best case (assuming a flat 100ms/seek which is normal). If you try to load a gig of data with that bandwidth, then, well, I'll not be alone in returning your game.
So: if you can significantly reduce the number of seeks your game needs to do, you can significantly reduce the load time of your game. I've seen particularly poorly loading data sets extend the load time of a 100MB data set more than five minutes. For those in the audience reaching for calculators, that's a bandwidth of less than 1MB/3seconds. Glacial.
But Our Game Is On the Hard Drive!
Don't care. These will still make your loads better. Your seeks are still on the order of 8ms and your bandwidth isn't free. Wait till your users start fragmenting the crap out out their drives. Galactic Civilizations is a reasonably fun game but its load times are absolutely brutal. Why? Tons of tiny files none of which seem to be in easy-to-load formats just sittin' there on the disk. Lots of games are like this for the PC and it's a damned shame.
Oh! You did that for your modders, did you? Guess what; you can still put most of your stuff in order in archive. You can even give modders your packing tools so their stuff loads fast too! Sure, you have to design for it but you're already designing extra stuff in for modders, right?
Odds, Ends, and Disclaimers
As mentioned atop, this is the bare minimum you need to know about load times. There are lots of other things you can optimize to make your loads suck less but I'll save that for another rant.
This has been a public service announcement paid for in part by the "Your Game Loads Too Slowly" foundation of Maryland and made possible by viewers like you!
If I have time to get pissed off and say "I can't help but notice that I'm not playing your game RIGHT NOW," then it means your load times suck and I'm probably wondering why I bought your game in the first place.
This seems bad!
Loading your game off media isn't rocket science. I'm going to assume that we're loading off some kind of disc with a 'c' media like in a console game rather than your hard drive like on your PC of choice. However, anything applied to optimize load times on disc-with-a-c will also optimize disk-as-in-hard-drive as well. I'm not going to cover everything with load times in this post, but this is the absolute bare minimum of stuff you need to know but I couldn't fit it in quite as catchy an acronym. There's lots more stuff that will make load times even better which I might rant about at a later date.
So at any rate, here we go.
Opening Files Sucks
Most times we don't notice this. Occasionally you run into something where you need to load N files which are kinda small but where N is something gigantic (like 1000). Then you notice--even if you have an uber fast machine. On this generation of console, N is usually on the order of thousands for a given level load for those who might be curious.
Fixing this is uber-easy: pack all your files into one giant uber-file so you only ever need to have one or at most a small number of file handles open. We often know of these as zips, wads, paks, pigs, etc. (The one I use for BEER is "keg". Clever, no?)
This makes load times suck less which is the goal. Sadly, they still suck.
Loading Non-Sequential Data Sucks
So now you've got your data all archived and it's time to load it. Surprise! It still takes a long time because you're constantly seeking around in your uber file. I can hear you smug Win32 people scoffing--but remember that your file mapping eats virtual address space and I know that since you're still using WinXP that you only get two gigs of VM. Ha!
This is pretty easy conceptually: stick all the data in your archive in order. The bad news is that depending on your particular data set and load time trickery, this might be really hard in practice. Chances are good that it leans toward the really hard side because you might only load some subset of your data and probably don't have a fixed order for it. If you can make your loading respect a fixed order then the problem moves pretty quickly to the easy side again.
I've found that in most cases the best we can hope for is that some subset can be made to lean toward "most" for fixed sequentiality. Sometimes you can change the loading code to do nicer things; sometimes you can't for <fill in the blank> reason that fits your situation. In either case you need to generate a sequence list for some set of your data then stick all the data in your archive in that order as best you can. Neither of these are particularly difficult assuming you have source code and enough time to do stuff and an archive builder that doesn't totally blow chunks.
Why does this work? Once file open issues are dealt with, seek time tends to be the dominant factor in unruly data sets. On discs-with-a-c, each seek is going to weigh in at roughly between 50 and 150 milliseconds depending on your particular hardware. So, if you're loading 10MB of data but seeking 100 times, your load bandwidth for that data can be no better than 1MB/s in the best case (assuming a flat 100ms/seek which is normal). If you try to load a gig of data with that bandwidth, then, well, I'll not be alone in returning your game.
So: if you can significantly reduce the number of seeks your game needs to do, you can significantly reduce the load time of your game. I've seen particularly poorly loading data sets extend the load time of a 100MB data set more than five minutes. For those in the audience reaching for calculators, that's a bandwidth of less than 1MB/3seconds. Glacial.
But Our Game Is On the Hard Drive!
Don't care. These will still make your loads better. Your seeks are still on the order of 8ms and your bandwidth isn't free. Wait till your users start fragmenting the crap out out their drives. Galactic Civilizations is a reasonably fun game but its load times are absolutely brutal. Why? Tons of tiny files none of which seem to be in easy-to-load formats just sittin' there on the disk. Lots of games are like this for the PC and it's a damned shame.
Oh! You did that for your modders, did you? Guess what; you can still put most of your stuff in order in archive. You can even give modders your packing tools so their stuff loads fast too! Sure, you have to design for it but you're already designing extra stuff in for modders, right?
Odds, Ends, and Disclaimers
As mentioned atop, this is the bare minimum you need to know about load times. There are lots of other things you can optimize to make your loads suck less but I'll save that for another rant.
This has been a public service announcement paid for in part by the "Your Game Loads Too Slowly" foundation of Maryland and made possible by viewers like you!
2007/11/03
Script-fu
Not terribly long ago, I was a self-proclaimed scripting hater. "Oh sure," I said, "You can do some neat stuff in script-land with your not-real languages and your dynamic types. But wow, my C++ can do all of that and uber-more!" Yeah. So it's time to fess up and admit that I might have, ever so slightly, been somewhat mistaken on some 'a that.
I've had this completely irrational thing for Ruby for, oh, about a year now which mostly manifested itself as not doing Ruby. This (irrational thing for Ruby) is mostly the fault of the blogosphere, notably one Steve Yegge who, despite often being somewhat long winded with a propensity for ten cent words and compilers, is also quite often terribly amusing and a lot of the time spot on. He's got loads of stuff trumpeting the awesome that is Ruby. So I bought a book and read some online tutorials and then got a new job and moved cross country and got tied up in godawful amounts of stuff that's not ruby and wow is that a pretty laptop I should totally get one of those while not doing Ruby.
I used to know perl in much the same way that most people who knew (past tense) perl once did. That is to say, I have absolutely no ability to do perl now because a) it's very obtuse, b) it looks like line noise, and c) it's so unbelievably obtuse that sane human beings flee in terror when confronted with it. Have I mentioned its obtusitude?* Some have described Ruby as "perl with the suck removed" and as I mentioned before, I have a thing for Ruby.
<yet another entry for the worst segue ever category>
I'm now in charge of making load times not suck on my current project. I'd built a couple tools to build giant archive files and to parse in-game spew to do various things that are reasonable and useful toward that goal. I'd built them in C++. This in and of itself is not odd since by and large, I'm a C++ programmer. What I did notice is how godawful difficult seemingly simple things are in C++. This also is not odd since by and large, I'd been noticing that on and off for the last, say, decade. So moving from "hey, I think I can fix our load times" to "holy sweet moby jebus, I have to fix our load times!" I decided that I needed better tools.
Enter Ruby, stage left.
So I used it in a real "have to get this crap working right now kind of situation...and it was good.
So now I gotta take back some of the mean things I said about scripting languages and the people who promote them. Uncle already. I may have been a bit hasty with all of that. Ruby has made the otherwise unbelievably daunting data mangling tasks I've got slightly less unbelievably daunting because now at my very fingertips I have the power to mangle data like never before! Data the world around, tremble before my gemstone inspired might!
I'll save some gory details and horribly contrived examples from Teh Real World(TM) for a later date. So, if you're like me and only really ever looked at your primary statically-typed language for solving all manner of problems, you might go and pick up a scripting language just cause. It might save you some unbelievably daunting.
*obtusitude is not a real word. I made that up, honest.
I've had this completely irrational thing for Ruby for, oh, about a year now which mostly manifested itself as not doing Ruby. This (irrational thing for Ruby) is mostly the fault of the blogosphere, notably one Steve Yegge who, despite often being somewhat long winded with a propensity for ten cent words and compilers, is also quite often terribly amusing and a lot of the time spot on. He's got loads of stuff trumpeting the awesome that is Ruby. So I bought a book and read some online tutorials and then got a new job and moved cross country and got tied up in godawful amounts of stuff that's not ruby and wow is that a pretty laptop I should totally get one of those while not doing Ruby.
I used to know perl in much the same way that most people who knew (past tense) perl once did. That is to say, I have absolutely no ability to do perl now because a) it's very obtuse, b) it looks like line noise, and c) it's so unbelievably obtuse that sane human beings flee in terror when confronted with it. Have I mentioned its obtusitude?* Some have described Ruby as "perl with the suck removed" and as I mentioned before, I have a thing for Ruby.
<yet another entry for the worst segue ever category>
I'm now in charge of making load times not suck on my current project. I'd built a couple tools to build giant archive files and to parse in-game spew to do various things that are reasonable and useful toward that goal. I'd built them in C++. This in and of itself is not odd since by and large, I'm a C++ programmer. What I did notice is how godawful difficult seemingly simple things are in C++. This also is not odd since by and large, I'd been noticing that on and off for the last, say, decade. So moving from "hey, I think I can fix our load times" to "holy sweet moby jebus, I have to fix our load times!" I decided that I needed better tools.
Enter Ruby, stage left.
So I used it in a real "have to get this crap working right now kind of situation...and it was good.
So now I gotta take back some of the mean things I said about scripting languages and the people who promote them. Uncle already. I may have been a bit hasty with all of that. Ruby has made the otherwise unbelievably daunting data mangling tasks I've got slightly less unbelievably daunting because now at my very fingertips I have the power to mangle data like never before! Data the world around, tremble before my gemstone inspired might!
I'll save some gory details and horribly contrived examples from Teh Real World(TM) for a later date. So, if you're like me and only really ever looked at your primary statically-typed language for solving all manner of problems, you might go and pick up a scripting language just cause. It might save you some unbelievably daunting.
*obtusitude is not a real word. I made that up, honest.
2007/11/01
HL2
One of the (many) things I missed out on during my two year long stint in WoW is Half Life 2. Despite being told how uber-awesome it is, I never got it since at the time I didn't have enough machine to really play it. So beta for the Orange Box rolls around and my co-workers are playing TF2 and I hop on the bandwagon...just in time for them to lose interest (bastards). TF2 is plenty of fun on its own but it also gave me a chance to catch up on otherwise missed gaming (brilliant move by the Valve guys).
I wasn't prepared. Half Life 2 rocked my socks. There are definitely things about it that I didn't like but overall I thought it was an excellent game. Add to that the two free-to-me episodes 1 and 2 and it ended up being even more excellent. I missed the whole "better than sliced bread" launch so I had to judge it on its own merits and I still think it's by far the best single player game I've played in the better part of two years.
If you missed this one, aren't totally put off by jumping puzzles, and enjoy a good action FPS, I highly recommend it. Can't wait for Ep3.
I wasn't prepared. Half Life 2 rocked my socks. There are definitely things about it that I didn't like but overall I thought it was an excellent game. Add to that the two free-to-me episodes 1 and 2 and it ended up being even more excellent. I missed the whole "better than sliced bread" launch so I had to judge it on its own merits and I still think it's by far the best single player game I've played in the better part of two years.
If you missed this one, aren't totally put off by jumping puzzles, and enjoy a good action FPS, I highly recommend it. Can't wait for Ep3.
2007/10/04
Random or Not?
Here's a not-quite-hypothetical problem: you have a fixed size graph and want to arrange N points on that graph in a random manner. You could use such a thing for lots of different stuff not limited to distributing player positions on a map, etc.
So how do you do it? Feel free to code along at home.

First try: completely random. We'll just use our good friend rand() with some "proper" seed to choose X and Y values and mod them into the map space. Smashing. If you do that, it looks something like those on the left.
I saw the results and wondered where my bug was cause that sure as crap doesn't look random. Hint: there was no bug.

Hokay. Welp, I don't want those points to be within N distance of one another where N is something I can calculate easily because, er, I want it to run fast (not because I'm lazy--no not that at all).
Closer...
If you were looking for a point, you may have just found it: when I say random in this particular context, really mean evenly distributed rather than really random. In fact, truly random is not what I want at all.

On the left here are my final results after a mess of hacky heuristics. It's not the prettiest code but it seems to give good results on every map I've generated and it has a calculable upper bound on computation time. As a final step not shown here, I jitter each position inside the grid line so even points that are on the same row or column on the grid appear a little less regular (left as an exercise for the reader).
Now, I freely admit that I'm one to run off and code something because a) I figure I might learn something, b) I need the practice, and c) I reall like coding. Try as I might I was unable to find a better solution than the hackery I came up with. Apparently my google-fu is not as righteous as I thought. I'm pretty convinced that there's some crazy technique to do this in like 3.47 instructions on a 68020 or whatever but I sure as crap can't find it. If anyone knows of one, let me know.
(If anyone wants the code, just ask.)
So how do you do it? Feel free to code along at home.

First try: completely random. We'll just use our good friend rand() with some "proper" seed to choose X and Y values and mod them into the map space. Smashing. If you do that, it looks something like those on the left.
I saw the results and wondered where my bug was cause that sure as crap doesn't look random. Hint: there was no bug.

Hokay. Welp, I don't want those points to be within N distance of one another where N is something I can calculate easily because, er, I want it to run fast (not because I'm lazy--no not that at all).
Closer...
If you were looking for a point, you may have just found it: when I say random in this particular context, really mean evenly distributed rather than really random. In fact, truly random is not what I want at all.

On the left here are my final results after a mess of hacky heuristics. It's not the prettiest code but it seems to give good results on every map I've generated and it has a calculable upper bound on computation time. As a final step not shown here, I jitter each position inside the grid line so even points that are on the same row or column on the grid appear a little less regular (left as an exercise for the reader).
Now, I freely admit that I'm one to run off and code something because a) I figure I might learn something, b) I need the practice, and c) I reall like coding. Try as I might I was unable to find a better solution than the hackery I came up with. Apparently my google-fu is not as righteous as I thought. I'm pretty convinced that there's some crazy technique to do this in like 3.47 instructions on a 68020 or whatever but I sure as crap can't find it. If anyone knows of one, let me know.
(If anyone wants the code, just ask.)
2007/10/01
A Year of BEER
Programming is pretty cool. It's one of the only disciplines where the tools are made of the same stuff the products are. In fact, the only other one I can name is blacksmithing and really, it's best that I don't try that one.

As of a couple weeks ago, the BEER engine is officially a year old. Sadly, I didn't notice until I went to update numbers for September. A good 35,000 lines and more than 200 hours later, I have to say that it's everything I wanted it to be and more. It's hard to say in objective terms how much I've learned in this endeavor and the (so far) three projects it's enabled, but I can say without hesitation that it's been a substantial amount.
As of a couple weeks ago, the BEER engine is officially a year old. Sadly, I didn't notice until I went to update numbers for September. A good 35,000 lines and more than 200 hours later, I have to say that it's everything I wanted it to be and more. It's hard to say in objective terms how much I've learned in this endeavor and the (so far) three projects it's enabled, but I can say without hesitation that it's been a substantial amount.
2007/09/17
I Like Oats
If you take the oat, the whole oat, and take off the hull but leave the bran on and don't process it any further, you have a groat. When I eat groats I usually toast them in a little butter then simmer for at least 30 minutes. These are good but chewy and take a while to cook. They're good but take a lot of effort, sort of like brown rice. I hear they're good in haggis too, but I'm far too chicken to try one.
Scotch oats, Irish oats, or pinhead oats are what you get when you take a groat, remove the bran, then send it through steel cutters. These are also called steel cut oats. I love these: toast in butter until they smell nutty, then simmer for a while adding salt and cream at the end. What you get if you do this is a pretty awesome hot porridge which I think is pretty magical--tasty, kinda chewy, with a nice creamy texture even if you don't add dairy.
Take the same groats, remove the bran (usually), then mash 'em flat and you have rolled oats or "old fashioned" oats which is typically what we think of when someone says "oats". You can cook them in the microwave but they've lost the awesome; convenient but iffy. If I have to, this is what I buy when I want oats and can't find any steel cut oats or don't have the time to cook them (say, at work). These are great for things like oatmeal cookies and granola which I almost always make myself because it's a) dirt cheap, b) kinda fun, and c)I have a nut allergy.
"Can you process them more? Well, sure!"--Alton Brown
"Quick oats" are those that are cut, par-cooked, then mashed even flatter. They blow away in a stiff wind. They cook in a tiny fraction of the time, like a couple minutes of nukeage. They don't get nutty. They don't get creamy. They don't, in fact, taste all that good at all, these "instant oats". I'm not sure they're terribly good for much of anything beyond being convenient. I hate these and almost never buy them.
I almost never buy them. In an attempt to eat healthier, I bought a big carton of Quaker Oats. Guess which kind I got.
Scotch oats, Irish oats, or pinhead oats are what you get when you take a groat, remove the bran, then send it through steel cutters. These are also called steel cut oats. I love these: toast in butter until they smell nutty, then simmer for a while adding salt and cream at the end. What you get if you do this is a pretty awesome hot porridge which I think is pretty magical--tasty, kinda chewy, with a nice creamy texture even if you don't add dairy.
Take the same groats, remove the bran (usually), then mash 'em flat and you have rolled oats or "old fashioned" oats which is typically what we think of when someone says "oats". You can cook them in the microwave but they've lost the awesome; convenient but iffy. If I have to, this is what I buy when I want oats and can't find any steel cut oats or don't have the time to cook them (say, at work). These are great for things like oatmeal cookies and granola which I almost always make myself because it's a) dirt cheap, b) kinda fun, and c)I have a nut allergy.
"Can you process them more? Well, sure!"--Alton Brown
"Quick oats" are those that are cut, par-cooked, then mashed even flatter. They blow away in a stiff wind. They cook in a tiny fraction of the time, like a couple minutes of nukeage. They don't get nutty. They don't get creamy. They don't, in fact, taste all that good at all, these "instant oats". I'm not sure they're terribly good for much of anything beyond being convenient. I hate these and almost never buy them.
I almost never buy them. In an attempt to eat healthier, I bought a big carton of Quaker Oats. Guess which kind I got.
2007/09/11
Free Software
I'm always on the lookout for stuff that will make my computing experience better. And Lo! I have found not one, but two such things in times recent.
The first, is paint.net which is a wonderfully full featured image editor. It reminds me a lot of an ancient program I used to use called PhotoFinish crossed with an equally ancient version of Photoshop (3.0). It does layers and has an unlimited command history. Want the source code? BAM. How bout a blog with details of the development and business side? Got that too.
If only I'd known about this before I'd shelled big cashmoney for CSR2. MS Paint quakes in its boots in mortal terror.
The other one is ToDoList which is exactly what you might expect from a program of that name. As it turns out, this kind of thing is pretty rare in the software wild for whatever reason. This one has all manner of sorting and searching and you can set recurring tasks and priorities and all 'a that. It's swank. The only downside is that you'll need codeproject.com logins. Goodness lives here.
I'm using this to track features, bugs, and development of my home projects as well as tasks at work. And for those of you playing buzzword bingo: it stores its files as XML.
The first, is paint.net which is a wonderfully full featured image editor. It reminds me a lot of an ancient program I used to use called PhotoFinish crossed with an equally ancient version of Photoshop (3.0). It does layers and has an unlimited command history. Want the source code? BAM. How bout a blog with details of the development and business side? Got that too.
If only I'd known about this before I'd shelled big cashmoney for CSR2. MS Paint quakes in its boots in mortal terror.
The other one is ToDoList which is exactly what you might expect from a program of that name. As it turns out, this kind of thing is pretty rare in the software wild for whatever reason. This one has all manner of sorting and searching and you can set recurring tasks and priorities and all 'a that. It's swank. The only downside is that you'll need codeproject.com logins. Goodness lives here.
I'm using this to track features, bugs, and development of my home projects as well as tasks at work. And for those of you playing buzzword bingo: it stores its files as XML.
2007/09/04
Beyond the Big Bang
Spacetime. Nuts, isn't it? One thing, not two. You've probably heard of the guy who came up with this.
The History Channel seems to be at the end of it's series
The Universe, which is both fascinating and well written. If you have more than a passing interest in this kind of stuff, I highly recommend this series (yes, I just bought it).
The History Channel seems to be at the end of it's series
The Universe, which is both fascinating and well written. If you have more than a passing interest in this kind of stuff, I highly recommend this series (yes, I just bought it).
2007/08/31
Technology Gone Horribly, Horribly Wrong
From my inbox:
I could be missing something here. I'm not properly caffeinated yet (yeah, it's Friday, give me a break already), but I gotta say: W. T. F.
I got this from Amazon. Amazon?!
I can't make this shit up.
As someone who has purchased or rated books by OpenGL Architecture Review Board, you might like to know that Red Letters: Living a Faith That Bleeds will be released on September 1, 2007. You can pre-order yours at a savings of $2.80 by following the link below.
I could be missing something here. I'm not properly caffeinated yet (yeah, it's Friday, give me a break already), but I gotta say: W. T. F.
I got this from Amazon. Amazon?!
Book DescriptionIn many Bibles, Christ's words are set apart with a red font. It should be obvious, but this distinction helps remind us that when God becomes Man and that Man speaks it's probably something we cannot afford to miss.
I can't make this shit up.
2007/08/09
Elements of Computing Style
Usual disclaimers apply here: I'm not an authority on, well, anything, so take away what you will from any of my postings.
I also fully realize that not everyone is a computer enthusiast of the same 7th dan that I am. I always expect to have specialized machines around to do whatever nefarious bidding I require and use specialization as a reason (excuse if you prefer) to have a bunch of machines around. So with that as a setup, I have to say that I vastly prefer small laptops. Or notebooks. Some people prefer "notebooks". Feel free to do the appropriate mental substitution. There's just something magnificent about a machine that you can take with you.
Aeronauts, Unite!
One Andy Carra is particularly more responsible for my views on laptops than most. He introduced me to this machine. Yeah, I know that it's far more en vogue to use a pop can for scale but, I, um, didn't have one. Luckily, MacGuyver isn't my patron saint for nothin'.

This was before I really understood hardware or how to make it go. The Compaq Contura Aero is a 486sx 33MHz with a base 4MB of memory expandable to 20MB (max). It came with a 170MB or so hard drive, a proprietary PCMCI floppy drive, and a 7.8" 640x480 16 color passive display LCD. It weighs in at about 4 pounds with a footprint of 10.25" x 7.5" x 1.5". It's a thing of beauty.
It's surprisingly solid for such a small machine with a plastic shell. The trackball is tiny but still manages to be usable. The screen is compact but still readable. It has no internal fan so it's completely silent beyond the hard drive and the clicking of the keys. When you use it for a while and it starts to get warm, it has a very distinct odor--not an unpleasant one, but also not one that you'd expect to come from a computer. Most of the other Compaqs that I've encountered over the years have been junk, so I usually refer to the Aero as the "Greatest of the Compaqs". I don't think you can sum up in words what all makes the Aero cool, but if you sit down to use one, you know right away that it's a quality machine.
I bought one and modded it. It should be noted that the guts of the Aero were never intended to be mucked with by mere mortals. At some point I broke the infamous right hinge. For a short while anyway, I held the record for the biggest hard drive ever put into the tiny Aero (6GB circa about Y2K). I can't be mad at the guy who beat my "record" since he put up a kick-ass site about the Aero.
I still have this machine and it still works. It currently dual boots Win95 OSR2 and OpenBSD 2.8 (I think). Watch this space! for future hackeries with this, one of my favoritest machines.
Dark Sony Days
My first laptop was a godawfully heavy 13.3" Toshiba Satellite which I bought in grad school. It was (roughly) 12 pounds which doens't sound heavy unless you need to carry it around all day and with textbooks. With the right clutch of my Aero out and sans a battery that could run it for more than 15 minutes, I really really wanted another machine that I could take with me. At the time, and I did my homework for this one, the Thinkpads and the Vaios were the big names in subnotebooks. I bought a Vaio and it served me well. Specifically, a PCG R505DL boasting an at the time impressive 1GHz P3, 30GB hard drive, and 384MB of main memory. It's got a 12.1" 1024x768 passive display and sans docking station, weighs in at roughly 3 pounds.

This Vaio is a lot larger than the Aero but at the time, I don't think that Sony sold a smaller one (10" screen) with the appropriate power for a reasonable sum. It's a very full featured machine with a single PCMCIA slot, a DVD/CDRW, a floppy drive, built in Ethernet, a couple USB ports, and a Sony memory stick slot that I've used exactly twice in seven years. The dock and battery can be hotswapped in Windows if you're so inclined.
For as sleek and thin as the machine is, it's amazingly solid. The corners don't give, and you don't have to baby it to move it around. The base with all its ports is nice for folks who want to leave the optional bits hooked up to a workstation and take the machine for strolls. The base itself isn't terribly heavy so if you want to take the entire thing on a trip, it's not a big deal. The keyboard is compact but not too tiny to type on effectively and has a really nice feel. As an interesting data point to that effect, I think I've written more code on my Vaio than on any other machine I've ever owned including two engines and probabaly seven games/prototypes/tech demos.
It's a good machine, and I'm a little sad to be retiring it. Except that it means I have a new machine.
Humanizing Technology
With the sale of my house in Wisconsin, and a burning desire to buy something cool, I bought one of these. It's 10.6" x 7.5" x 0.9" with an 11.1" 1366x768 display and weighs in at less than 4 pounds. It's a low voltage core 2 duo and currently has 1GB of ram and a 120GB hard drive. The memory upgrade is already on the way though I suspect it'll be a while before I try to replace the drive (solid state drives need to come down in price a bunch).

Now, I'll be the first one to say that I was skeptical about the leather binding thing as well as Asus' current marketing campaign, but I have to say that the S6Fm is a high quality machine and it really wouldn't seem as cool without it. They really went out of their way to make it exceptional and that's something I can definitely appreciate.
Given that there are exactly two machines that fit my specifications available right now, I think I made the right choice. I thought that the price was high until I received it and found that with the machine I also got:
- a high capacity battery in addition to the normal one
- a matching optical mouse
- a mess of accessories which are by no means necessary, but definitely very thoughtful of them to have included
It's light, solid, and reasonably powerful for its size. Everything is built in and modern. I've got very few complaints. Course, I did just buy it and I haven't really had a lot of time to get used to it either, but I'm happy to have found an appropriate spiritual successor to my beloved Aero.
I also fully realize that not everyone is a computer enthusiast of the same 7th dan that I am. I always expect to have specialized machines around to do whatever nefarious bidding I require and use specialization as a reason (excuse if you prefer) to have a bunch of machines around. So with that as a setup, I have to say that I vastly prefer small laptops. Or notebooks. Some people prefer "notebooks". Feel free to do the appropriate mental substitution. There's just something magnificent about a machine that you can take with you.
Aeronauts, Unite!
One Andy Carra is particularly more responsible for my views on laptops than most. He introduced me to this machine. Yeah, I know that it's far more en vogue to use a pop can for scale but, I, um, didn't have one. Luckily, MacGuyver isn't my patron saint for nothin'.
This was before I really understood hardware or how to make it go. The Compaq Contura Aero is a 486sx 33MHz with a base 4MB of memory expandable to 20MB (max). It came with a 170MB or so hard drive, a proprietary PCMCI floppy drive, and a 7.8" 640x480 16 color passive display LCD. It weighs in at about 4 pounds with a footprint of 10.25" x 7.5" x 1.5". It's a thing of beauty.
It's surprisingly solid for such a small machine with a plastic shell. The trackball is tiny but still manages to be usable. The screen is compact but still readable. It has no internal fan so it's completely silent beyond the hard drive and the clicking of the keys. When you use it for a while and it starts to get warm, it has a very distinct odor--not an unpleasant one, but also not one that you'd expect to come from a computer. Most of the other Compaqs that I've encountered over the years have been junk, so I usually refer to the Aero as the "Greatest of the Compaqs". I don't think you can sum up in words what all makes the Aero cool, but if you sit down to use one, you know right away that it's a quality machine.
I bought one and modded it. It should be noted that the guts of the Aero were never intended to be mucked with by mere mortals. At some point I broke the infamous right hinge. For a short while anyway, I held the record for the biggest hard drive ever put into the tiny Aero (6GB circa about Y2K). I can't be mad at the guy who beat my "record" since he put up a kick-ass site about the Aero.
I still have this machine and it still works. It currently dual boots Win95 OSR2 and OpenBSD 2.8 (I think). Watch this space! for future hackeries with this, one of my favoritest machines.
Dark Sony Days
My first laptop was a godawfully heavy 13.3" Toshiba Satellite which I bought in grad school. It was (roughly) 12 pounds which doens't sound heavy unless you need to carry it around all day and with textbooks. With the right clutch of my Aero out and sans a battery that could run it for more than 15 minutes, I really really wanted another machine that I could take with me. At the time, and I did my homework for this one, the Thinkpads and the Vaios were the big names in subnotebooks. I bought a Vaio and it served me well. Specifically, a PCG R505DL boasting an at the time impressive 1GHz P3, 30GB hard drive, and 384MB of main memory. It's got a 12.1" 1024x768 passive display and sans docking station, weighs in at roughly 3 pounds.
This Vaio is a lot larger than the Aero but at the time, I don't think that Sony sold a smaller one (10" screen) with the appropriate power for a reasonable sum. It's a very full featured machine with a single PCMCIA slot, a DVD/CDRW, a floppy drive, built in Ethernet, a couple USB ports, and a Sony memory stick slot that I've used exactly twice in seven years. The dock and battery can be hotswapped in Windows if you're so inclined.
For as sleek and thin as the machine is, it's amazingly solid. The corners don't give, and you don't have to baby it to move it around. The base with all its ports is nice for folks who want to leave the optional bits hooked up to a workstation and take the machine for strolls. The base itself isn't terribly heavy so if you want to take the entire thing on a trip, it's not a big deal. The keyboard is compact but not too tiny to type on effectively and has a really nice feel. As an interesting data point to that effect, I think I've written more code on my Vaio than on any other machine I've ever owned including two engines and probabaly seven games/prototypes/tech demos.
It's a good machine, and I'm a little sad to be retiring it. Except that it means I have a new machine.
Humanizing Technology
With the sale of my house in Wisconsin, and a burning desire to buy something cool, I bought one of these. It's 10.6" x 7.5" x 0.9" with an 11.1" 1366x768 display and weighs in at less than 4 pounds. It's a low voltage core 2 duo and currently has 1GB of ram and a 120GB hard drive. The memory upgrade is already on the way though I suspect it'll be a while before I try to replace the drive (solid state drives need to come down in price a bunch).
Now, I'll be the first one to say that I was skeptical about the leather binding thing as well as Asus' current marketing campaign, but I have to say that the S6Fm is a high quality machine and it really wouldn't seem as cool without it. They really went out of their way to make it exceptional and that's something I can definitely appreciate.
Given that there are exactly two machines that fit my specifications available right now, I think I made the right choice. I thought that the price was high until I received it and found that with the machine I also got:
- a high capacity battery in addition to the normal one
- a matching optical mouse
- a mess of accessories which are by no means necessary, but definitely very thoughtful of them to have included
It's light, solid, and reasonably powerful for its size. Everything is built in and modern. I've got very few complaints. Course, I did just buy it and I haven't really had a lot of time to get used to it either, but I'm happy to have found an appropriate spiritual successor to my beloved Aero.
Subscribe to:
Posts (Atom)

