Tuesday, May 16, 2006

SuSE 10.1 - Avoiding the Fedora Trap

Just installed SuSE 10.1 on my Latitude D600... and all in all it's a great release. It's really deserving for a "SuSE 11" moniker, but I have a feeling they're waiting on that until KDE 4.0.

Gone is a lot of SuSE-centric software with new, more standardized set of hardware detection and system management packages. SuSE used to need their own hardware detection monitor, but with KDE's hardware abstraction layer coming into fruition and packages such as KNetworkManager, you don't need it. It's a nice shift, as this allows you to have more integrated and widely accepted tools.

Zen, however... that's a different situation.

SuSE's YaST Online Update and Software Management has been replaced by Novell's Zen software management, which while good in concept, absolutely sucks in practice. While it's nice that it monitors any package repository you want (such as PackMan or Guru) for updates, it takes for freaking ever for it to load and install packages. FOR. FREAKING. EVER.

It's nice being on a fresh new install. Every release that comes out I swear to myself "I'm going to keep a pristine factory install - no beta packages." Then a new KDE release comes out that I must have, and I say "well, I'll just try the new KDE out." Then I figure "since I'm already non-stock with the unofficial KDE packages, I might as well try this other hack out..." and then a runaway train of applications and hacks leaves me with a mutt of a system.

So now I'm starting with a clean(ish) slate. I'm trying to break myself of the console habit - so I'm using more GUI tools to diagnose stuff. I never realized how handy KSystemlog and KDE System Guard was... quite nice.

10.1 really is a fantastic OS - encrypted filesystems are even handled sensibly with the boot GUI doing just a brief break to prompt for the password. Partitions are now broken apart into root and home directories, and swap & extended portions are sensible. The desktop itself has little clutter, and less stuff starts at boot time and desktop startup. Nice 'n' clean.

The visor kernel module for my Samsung i500 still renders my keyboard useless, however. For some reason syncing via USB causes the laptop to stop receiving input from the keyboard altogether and then can't shut down. I'm relegated to IrDA only, which is sloooooooooooow and an overall pain in the butt. I am working on using Kitchensync in KDE, however, which is quite nice. In theory it should render my custom hackish sync script unnecessary, which would get rid of an extra step and hopefully allow for a two-way sync between the i500 and Exchange.

Oblivion Newbs

There's a rash of newbs whose first exposure to the Elder Scolls series is Oblivion, which is a crying shame. Of course, the fact that I didn't come in at Arena makes me a n00b too, but I'm less n00bish.

I have to rank Morrowind over Oblivion so far. It seems that the level of detail in Oblivion has hit the uncanny valley, where things look so real you can't help but notice it's fake. Like the animatronic Hall of Presidents, your subconscious keeps interjecting and telling you what you're seeing is fake... like an animated corpse. Your mind is constantly aware that something is awry, albeit minor, grinding away like annoying grains of sand. Shaders being too shiny, grass shaders eating frame rates alive, leaf pixmaps popping in and out of the Z buffer as they sway on branches... these all just serve to remind you that what you're seeing is a damn close approximation of the real world, but something is out of place.

Morrowind had its cutting edge (at the time) water effects, which made people swoon as soon as they had a DX9 card. Otherwise, however, it was obvious you were living inside an American RPG. Dialog was text-based, little voice acting was done (don't get me started on Dagoth Ur), and magic effects basically looked like Quake 2 runes. The vistas were still stunning - hell, Morrowind even has photography guilds. Towns were a seamless collection of buildings, just like they should be. Oblivion attempts to optimize framerates and create hard edges to the world with the old fasioned stupid game mechanic of we-built-four-hundred-foot-walls-around-our-entire-city-so-players-can't-just-walk-inside; the engine can then unload a mega-texture landscape setting and load a much more finite city setting. Morrowind accomplished the same thing by only spawning new areas within buildings, which is a much more natural transition. It makes sense to start a new area inside a building... you're going outside, in. You could just stroll into a city using whatever means necessary... just levitate in if you want. The bounds placed on cities in Oblivion are much more artifical and abrupt, with NPC's "teleporting" inside of city gates instead of just stepping through the freaking door.

Then again, I could just be waxing rhapsotic for Morrowind's storyline. I'm drawn to the "creationist" or "origin" adventures, the type where you find out that the world wasn't created using the schema you've always believed. It's a bias I've carried with me ever since I was first hooked into the RPG genre - with Final Fantasy Legend.

Aaaaah... those were the days. I took my glass sword and beat the livin' snot out of Creator many, many times in that era of my life. There, the big reveal was after ascending the monolithic tower that stood in the middle of every realm of existence you came face-to-face with the creator of the world. Then, for reasons that are still completely hazy, Creator starts getting all up in your grill. Then your party feels stilted and a fight ensues. Not sure why. But after you destroy your (C)reator, you can ascend into the realm beyond creation (the door behind Mr. Creator de Jerkbutt). But the party starts feeling nostalgic and returns to relive the adventures they had and the people they helped along the way. It was epic. Good times.

After that, I moved on to Phantasy Star III for the Sega Genesis. There, you find out that your world is not some rotating sphere circling a medium-sized star... instead your on a freakin' space ship set into orbit to save your civilization. The world isn't natural... it's completely mechanical and manufactured. Take that!

Morrowind goes back as far as any other Elder Scrolls title I know of... all the way to the very creation of the mortal realm, the inception of the Dumner, the extinction of the Dwemer and the very heart of a god. If that's not freakin' epic, I don't know what is. It frames things in a very religious context, with a healthy reflection of the Roman's assimilation of Greek religion and Nordic roots. There's very much the sense that the current faith was one built up around, but in displacement of, the old pagan ritual and history. Here we find that the volcano that erupted in Morrowind wasn't some natural disaster... it was an ancient, advanced culture that had harnessed the power of an actual god. Kinda like if we discovered the Aztec's actually built a Cray out of steam power and the pancreas of an immortal then teleported themselves to Mars.

Morrowind even had a book in-game called "On Oblivion", something to lay the path for the current title. In fact, there's a lot of literature that's shared between games in the series. This battle in the Daedric realm was a long time coming evidentally. Maybe we'll see another reference to the Numidium. Maybe another big reveal about the true origin of the Elder Scrolls world.

I'm happy enough to ride the current title out and give it a fair shake. Currently I'm engrossed by my kick-butt Rastin wanna-be, looking pale and sickly, clad in only a monk's robe. He can't carry much of anything, can't swing a sword and can't take a punch to save his life. But he can cast like freakin' motha.

Thursday, April 27, 2006

I Caved


Okay, so I buckled. I picked up Oblivion over the weekend. I'm weak. I admit it.

Oh, and not just the normal version that was $12 off at Fry's. Although that's the version that sold me. For some reason I thought "Wow! Oblivion is just $37! I need to pick up a copy! And since I decided to pick up a copy, I should get the collector's edition? Why? Because I fear that the greatest regret in my life will not be owning the replica GP or behind-the-scenes footage." Jeesh. I'm such a tool.

One day I hope to sleep again.

Wednesday, April 26, 2006

We're Old.

I'm old. Gamers are getting old. Developers are getting old. We're no longer in the realm of the grey-bearded big-iron mainframe developers vs. the cowboy CS-kid desktop developers. The legends of the DooM generation are getting older: Carmack, Wright, Spector - hell, even Gabe and Tycho are middle-aged with families. It blows my freaking mind.

Warren Spector published a quartet of articles in The Escapist about the where the industry is headed. In one instance it seems to be the shadow of big companies getting ready to smash independent developers into a gooey paste, in another he talks about how innovation and independence can spell the industry's salvation.

One particularly nostalgic (although that's not quite the word...) quote was

Maybe this is just a personal problem - a result of my friends and me getting older. Priorities change. Interests change. Time for games seems tougher to come by. Or maybe my values - notably a fascination with
innovation, novelty and forward progress on the story and design side of things - aren't shared by the folks who make up an increasingly international audience. Maybe it isn't games or the game business that have changed - maybe it's me.


Jeff Vogel voiced his opinion on straying outside the norm and how dangerous that can be for an independent developer. Wander too long off the beaten path and you may find it hard to get a lot of buyers on board. However, it could be that the trick is really in finding the right market to land in. Like he says:

There is nothing scarier that aiming at a market that doesn't exist yet. It might not exist at all.


It's like Warren spells out in his article...

GTA clones are making money hand over fist. All we have to do is keep making them until players tell us to stop.


So now gamers are getting older and getting families. Want to know the way to hit that demographic?
  • Load times should be in seconds and not minutes. I should hit an icon, here a few clicks of the hard drive and be able to pick up right where I left off. I'm tired of skipping through layers and layers of splash screens, logos, intro videos, copyright text, menus, etc.
  • If I log in to my machine, I should see my own savegames and restore my own convoluted settings. If someone else logs on to the same machine, they should have their own save points and key bindings. Linux has been doing this for years; how hard is it to write preferences to the user's home directory?
  • Make play controls so simple it's almost sophomoric. Carmack definitely had the right idea when he made the user interface limited to just a handful of keys... you don't need to bind the entire keyboard for a FPS.
  • Break things into digestible chunks. You should hit natural "breaking points" often... there's a good chance that you'll forget what the hell is going on in some long convoluted errand when you can only do ten minutes at a time.
  • Sunday, April 16, 2006

    Proximity Hacks

    Visiting the local Fry's I found the infamous USB Wireless Security Lock for... if I'm reading the rebate receipt right... free. The price was right, so I picked one up. I had seen some hacks and descriptions of it previously and the concept intrigued me. Basically it's a wireless USB mouse's guts ripped out and put into a keyfob and a USB dongle. It's recognized as a mouse under Linux, but someone wrote a driver for the 2.6 kernel that seems to create a unique device node for it if you bypass the regular hotplug routines. Another person seems to have created a more mainstream driver and is trying to get it into the latest mainstream 2.6 kernel. Don't know if it actually landed there or not...

    Edit: I was able to get things working quite nicely. The example at www.schau.com worked well - thankfully it was written to be as modular as possible. I wrote my own script to lock/unlock KDE's screensaver, and just had to make a few minor hacks to hid-core.c and wslxsctl.c so the USB kernel module would ignore the vendor id / device id of the key and the userspace app would listen to it.

    It doesn't appear to be validating the unique ID sent by the keyfob however - so I'll need to code that part.

    Bad Mojo

    Sooooo... it's been a week filled with rampant chaos and wanton destruction.

    First, I noticed my smoke detector was making some odd chirping sounds. I took out the 9V backup battery and noticed it had slightly bulged at the end. Examining closer... it exploded in my face.

    Yeah, that was neat. I set it down and attempted to wipe the chemicals burning into my flesh when it exploded again and launched a payload of alkaline across about 10' of wallspace. Greaaaat.

    Speaking of batteries, my UPS started neither supplying power nor was it interruptable. The battery in my UPS was nearing the end of its warrantied lifespan, at which point evidentally it starts making a noise like a badger trying to claw its way out of a plastic trashcan. It also abruptly shut off all power to my home office e-mail/media/print/proxy server, rendering most of the stuff I need to do during the workweek useless. I spent most of two mornings in my bathrobe underneath my desk trying to get the freakin' thing to do a cold start, reset and come back to life. The battery is still dead, but at least now it's sending power. You'd think that despite a dead battery power would still flow to through the outlets at least, but alas that's not so. Great way to start a couple of mornings.

    I also spent several late nights trying to update several Java application servers in a cluster... but after hacking into the wee hours of the morning one freaking application wouldn't start. I spent the majority of two days working on finding a solution. The problem? The hostname went from case-insensitive to case-sensitive. That's it. Dammit.

    Wednesday, April 12, 2006

    J equals :)

    Did you know there is now a work-appropriate emoticon?

    Now everyone in business correspondance is using 'J' to mean :). I didn't understand what the hell they were talking about until I looked at the HTML source of someone's e-mail to me... 'J' is a ☺ in the Windings font.

    But if you're like me and you don't have Wingdings, your e-mail client overrides fonts or you don't give a crap, you just see 'J'.

    For some reason, it just drives me up the freakin' wall J

    Tuesday, April 11, 2006

    Organically Growing Content

    Digging through my old GMSV e-mails that I haven't read yet, I found a link to this video of Will Wright talking about the exponential level of effort required for content generation. I've hit upon this point many a time, since it's kinda the mantra of the independant game developer: you can get around having a team of content artists & developers if you're smart enough. For example, user generated content (such as in Second Life) or procedurally generated content (such as the new Unreal engine) or a mixture of both (as in Spore).

    Will talks about his latest work on Spore, and how being smart about content creation allows you to avoid the mega-teams required to create the next Morrowind. Note the applause in the video when Will suggests an alternative to nonlinear levels of effort required to build titles... I have a feeling there were a lot of one-person shows in the audience...

    Monday, April 10, 2006

    Gaming FM Back Online!

    One of the few stations that makes Internet radio interesting, Gaming FM, is back online after a LOOOOOOOOOOOOOOOOOOOOOONG hiatus. One can only guess why the hell they were offline for so long, but their great mix of ambient, arrangements, remix and standards was pretty much irreplaceable. Hats off to all those forum users who never gave up hope, and the Gaming FM crew for finally coming back.

    Sunday, April 09, 2006

    Back to Pluggin'

    The initial novelty of SecondLife has kinda worn off on me... so I'm working on getting back into productive work again. I spent some time learning SecondLife's scripting language with the vehicle tutorial, and got a floaty balloon thingy working. The fact that you can add arbitrary scripting, animations, texture mapping, etc. to objects within an MMO is a pretty nifty concept. You can see from ninjafoo's blog and the SecondTux wiki there's a lot to talk about in the Linux client, but little to discuss.

    I managed to prevent myself from purchasing Oblivion again today. Thanks... I was pretty proud of myself too.

    I'm working on getting ConsultComm 3.1.2 out. It's been long delayed because I keep adding extra crap - a revamped plugin manager, a Java WebStart launcher, kicking out the platform-dependent timeout plugin, making my TableTree a separate component, etc. Finally I had so much scope creep I decided to kick out all the new changes, save it for a future version, and instead just fix bugs and push out a minor release. I have so little time anymore, all the new features I want to create just don't have much of a chance right now.

    Sunday, April 02, 2006

    Fun SuSE 10 Advanced Desktop Hacks

    I've been attempting to use Linux exclusively for my personal desktop for about a year now, and it has gone surprisingly well (when I don't go without sleep and accidentally reformat my entire freakin' drive, that is). I've learned a few nifty hacks along the way that has made my life inside of KDE that much sweeter. Such as:


    You can allow Linux to use WINS for native hostname resolution (like what Windows machines would do if you have a directory server) by installing samba-winbind and hacking /etc/nsswitch.conf to have the following line:
    hosts: files lwres dns wins

    and then restarting nscd. Since your WINS server is responding to your computer from a broadcast message you may have to open UDP ports 1100 to 1200 on your firewall config; responses are sent back to those ports with NetBIOS.

    EDIT: Ports 1100 to 1200 are conservative - in actuality NetBIOS sends back on a somewhat random (but seemingly incremental) UDP port between 1000 and 4000. That means you actually have to open ports 1000 to 4000 for UDP wholesale - which of course major league sucks for security. However, it appears even Windows Firewall has to do this - talking to the local security expert I found that Windows Firewall briefly opens up this port range during NetBIOS queries. Ugly design? Hell yeah.


    You can automatically mount/unmount remote directories and file shares upon login, using pam_mount. This adds functionality kinda like Windows' "mapped drive," except it uses Linux' central authentication mechanism and your mounted drive can be absolutely anything you want (NFS, Samba, a local file system, etc). First, change /etc/pam.d/xdm to have
    auth optional pam_mount.so use_first_pass
    session optional pam_mount.so


    Next, modify /etc/security/pam_mount.conf to add your mount point. For example, I want to have users' individual shares on my file server automatically map to their Documents directory in KDE. To do that, all I need to add to my pam_mount.conf is:
    volume * smb fileserverhostname & ~/Documents uid=&,gid=users - -

    Things are then automatically mounted/unmounted as they login/logout of KDE.


    I like to allow passwordless logins for two accounts. Both of them have very restrictive access, and both are basically setup in kiosk mode. Since the accounts themselves are pretty locked down, I don't need to worry about someone walking up and using the account. That's pretty much what they were designed for.

    SuSE by default, however, has a special "local" configuration in SuSE 10 that you can't override using their admin tools in order to skip local password authentication in KDE's login manager. To do so, you need to edit /etc/opt/kde3/share/config/kdm/kdmrc and remove the sections [X-:0-Core] and [X-:0-Greeter]. You can then use KDE's Control Center to administer the login manager and allow passwordless logins.


    For some reason that completely fails me, SuSE doesn't allow users to share devices by default. This means if you use KDE's "Switch User" functionality the second person logged on won't be able to connect to your sound device.

    To remedy this, modify /etc/logindevperm. You'll see the octal mask for file/device permissions in the second column, along with a list of devices in the third. By default everything is allowed to run only with single user permissions, but for things like sound we want to open it up for everyone. Change the file to have 0666 permissions on devices you want to open up, such as:
    :0 0666 /dev/dsp:/dev/dsp0:/dev/dsp1:/dev/dsp2:/dev/dsp3
    :0 0666 /dev/sequencer:/dev/sequencer2:/dev/music

    Saturday, April 01, 2006

    Sittin' By the Dock

    I have no idea what the allure of Second Life is. No freakin' clue. BUT I CAN'T LOOK AWAY.

    Maybe it's the convergence of user created content in a massively multiplayer world. Maybe I just want to show props to someone who's willing to launch a Linux client. Maybe I'm interested in something that has its own self-contained scripting language (which is pretty damned cool). Maybe.

    But for some reason I'm content to sit on the docks and watch the sunrise over a lake. And sometimes watch a helicopter out of control go spiraling by. Why? I have no freaking clue.

    Friday, March 31, 2006

    Why I Must Resist Being Pulled Into Oblivion

    I remember back in the days when I had free time, I decided to shop around for an RPG. It was a toss between Baldur's Gate and Morrowind. I heard about the open-endedness (is that even a freakin' word?) of Morrowind, so it one the day. I remember when I first popped it in and my GeForce3 starting spewing out frames.

    I think for the first week solid all I did was take screenshots. I wasn't so much a player character as I was a tourist.


    Now, believe it or not, I'm sitting here doing production code moves and listening to the Morrowind soundtrack in VLC Player. Even if I can't play I'm still hideously hooked. That's how freaking engrossing Bethesda makes things... they put your cortex right in the world they created and never let it go.

    That's why I fear Oblivion. I may lock myself into the den and never reappear.

    Wednesday, March 29, 2006

    Too Many Ideas

    I just got back from TheServerSide's Java Symposium. A great conference... it was definitely interesting seeing the faces behind the big names in Java. Now I'm overflowing with ideas for both enterprise Web apps and ConsultComm, but I'll be damned if there's any time to see them happen.

    Epic is now getting press for the Unreal 3 engine, which they're saying will be more of a platform for studios to launch titles with. An interesting point in the engine and tool's feature set is dynamically generated landscapes. Considering how levels are expected to be insanely vast nowadays, dynamic terrain generation is going to have to become the norm. Next dynamic content generation (augmented by tons of user-generated content) is going to have to be standard if you want your development team to be slightly less in size than, say, Texas.

    Speaking of user-generated content and severe addictions, Linden Labs has secured additional funding for Second Life. And, like a true cookie pusher, Icculus brought the Second Life Linux client up-to-date. This native client may just hit beta after all!

    Oh yeah, and I've become so... mentally absent due to lack of sleep that I kinda reformatted my entire hard drive, wiping out my partition table along with it. See.... ummm... my OGG Vorbis player used to be on /dev/sda. Soooo... if I wanted to reformat the drive, I'd just need to reformat /dev/sda. But... well... then I got a SATA drive. I can tell Linux hacks are already rolling their eyes at what's coming next... and they're right. Since my new drive is on the SCSI device block, my player moved to /dev/sdb. My hard drive is now /dev/sda. So, not paying any attention at all, I tried to reformat what I thought was my OGG player. But... ummm.... nope. It wasn't.

    So now I just reinstalled XP, have so far rebooted over ten (not kidding) times, and am trying to restore the backups I was luckily able to make. I'm kinda cheesed that openSuSE 10.1 isn't slated to be released until April 13th - meaning that it's pointless to install an older version now, but I also can't wait another two freakin' weeks. I'll have to make do with my Wintendo in the meantime. Grrrr.

    Monday, March 20, 2006

    GPU - The Next FPU?

    What was the difference between a 468/SX and a 486/DX2? The additional floating point processor. Hellz yeah.

    In the budding days of personal computers and 486 goodness, CPU's were strictly integer machines. Floating point math was simply too much for the little chicklets that didn't even need active cooling. I recall that back in the olden days of ISA cards and SIMS you could purchase separate FPU's that you could hammer into your brute-force socket... this granted you massive power that your Excel spreadsheets never previously dreamed of.

    I recall how up-in-arms everyone was that Quake actually demanded a freakin' FPU. Who'd id think we were, Rockafeller?

    Now that graphics cards have become cheap, plentiful and pretty freakin' powerful vector processing has become all the rage. Projects like BrookGPU and GPGPU have made it (relatively) easy to create userspace apps run on a GPU just as it would a CPU. This means your GeForce 7800 could work on certain serialized tasks, crunching numbers while it remained idle between SecondLife sessions.

    Of course, GPU's are just good for vector processing, which means only a certain type of algorithms are really suited for it. You don't need to look much farther than critiques of IBM's Cell architecture to see how people feel about a rash of vector processing units versus a CPU that can span and branch effectively.

    It was interesting to see that Nvidia and Havok have teamed up to offload physics to the GPU. Bear in mind this doesn't work with an actor's physics since it branches and can't be effectively streamlined or predicted, but does extremely well with cloth and particle physics.

    Nvidia could be realizing that Ageia's physics accelerator is a more than vaporware, and is stepping up their offering to get into that product space. However, from the specs it appears that only Ageia's PhysX (*groan*) will be able to handle physics asynchronously. Although, I guess if you run physics calculations like shaders you could send multiple calculations down each pipe on the graphics card itself.

    Should be interesting to see how the space pans out. The GPU is quite a hoss nowadays, and needs extremely fast access to memory, so it may not be incorporated as a side-by-side processor or on-die any time soon. But still... one has to wonder if multiple fast vector units are the next big thing to go on a proc.

    Saturday, March 11, 2006

    Userland, Not Wonderland

    So... I've been engrossed in Second Life now. Before I could never justify trying it out. Then they dropped the price to "free." Then they provided a Linux client. I buckled. So sue me.

    On the forums for the Linux client things devolved, as they always do for Linux gaming, into the extremely stupid "all packages are incompatible and unlinkable" debate. The crux of the issue is that people claim libraries are always changing in Linux distros, so that you can never dynamically link to libraries. People argue that this makes it impossible to offer a single, standard installation or provide supportable, sustainable products.

    Of course, this hasn't stopped Epic, id or Introversion. Not to mention the zillions of enterprise applications that are written for Linux. The ones that, if they break, cost companies downtime and lost revenue. The moving libraries argument is shallow at best, especially in light of the many successes people have had with deploying commercial software packages to Linux distros.

    Now, if they wanted to complain about the lack of unified package management or still immature video drivers, that's something different. While Linux at least has package management, most put it aside and instead just use a GUI installer (such as Loki's).

    While we're on the subject of drivers, I noticed that Vista will be running most drivers in userland space, presumably so they can be loaded/unloaded easily without tinkering with the kernel. I hope this is something that is implemented solely by design and not due to some abstraction layer. While it was a great idea back when NT 4.0 decided to run drivers in userland, hiding things by its hardware abstraction layer put some serious restrictions on what drivers could do. I recall that DirectX was a real headache for Microsoft to add to NT, mainly because of the barriers HAL put in front of direct hardware access.

    I actually think Linux handles this fairly well. While it's a monolithic kernel (I'm not going to get into the whole Tanenbaum v. Linus debate), allowing module loading/unloading/dependencies seems to work very well. While you can still get a nice kernel panic from a errant driver, for the most part modules behave fairly well. Well enough that I recall an interview with Linus (I can't find the article) where he thought that developers needed to be less afraid of running in kernel mode - too many were running to userland to invoke code.

    Then again, what the hell do I know. Most of my CS knowledge is leaking out of my head. Microsoft may have it right and I have it wrong. I always cringe when I hear "drivers in user space," but if you constantly get bad press for someone else's crappy drivers crashing your OS I guess there's no good alternative.

    Thursday, March 09, 2006

    Create Your Own Content... 'Cause It Takes Us Too Long Otherwise

    Kotaku had an interesting article about how user-created content has started to supplant studio-created content. The gist is that creating content by artists and developers takes waaaay too long... and studios are starting to come up with creative ways to get around the issue. Procedurally generated content is one solution - but another approach is to make content generation part of the game.

    Second Life is the gold standard of this approach. It's not a game per se - it's a world where users can create whatever they want and make their world whatever they wish. The Sims did this somewhat, although the content is largely generated from the mod community rather than making it an in-game mechanic.

    Spore is supposed to really take advantage of both user-generated and procedurally generated content. By creating your own... whatevers... that evolve into something on micro and macro scales.

    Now that Linden Lab has released an alpha build of their Linux client long at last... it looks like I'm going to have to check out this trend first hand.

    There goes the last of my productivity...

    Wednesday, March 01, 2006

    Just One Small Tweak...

    Blech. So I was working on finishing my ConsultComm changes in January, then had to pass out for a LOOOOOOOOOOOOONG while. Now I try to pick them back up and - presto - I'm starting to get into scope creep.

    I'm just trying to fix a few final bugs, but then blammo NetBeans 5.0 comes out, along with a new Swing layout that actually makes sense. So I upgrade and start tweaking form layouts. Then blammo, SourceForge launches its subversion service, and I feel compelled to migrate. Then blammo, someone I know gets an OS X machine, so I can finally test OS X Java packages.

    Sooo... now I went from fixing two bugs to overhauling the project. Again. Basically every major revision of ConsultComm has come from me putting the project off to the side, someone giving a really good suggestion, picking up development again just to do the one last tweak, then ending up rewriting the entire ConsultComm codebase.

    I haven't been coding in a quite a long time, so hopefully I can get back into the groove. I'm firing up my Groove Salad.

    Monday, February 20, 2006

    Rise of the Casual (Mobile) Gamer

    NPR had an interesting piece during Morning Edition about the challenges and potential of mobile gaming. They had a very critical point in the end - the same one I found impossible to surmount when doing trial J2ME development. You can develop an app just fine, but then how do you copy the freakin' bytecode to your phone?

    For some people this is easy - the phone might be bluetooth or cradled and show up as a removable device. But, by and large, who is going to have a phone that can? And if it can, are they even going to bother?

    I was working with a Samsung, and if I wanted to do some file transfers I'd have to find some weird USB data transfer cable from some off-shoot accessory dealer. And even then there's no guarantee - a consumer phone isn't made to have an easily-writable file system.

    The alternative is to send files via SMS or the cellular network. This is also the most sensible way for casual users to get files... but do you always send via SMS? Does your carrier charge per kilobyte? In the end, it's still a pain in the butt.

    This is on top of the per-handset incompatiblities and problems with event handling, like what Carmack found when he first started to dabble in J2ME gaming.

    Casual and J2ME gaming has great potential - and a potentially HUGE market. But first it has to be easy to jump into, for developers but more importantly for consumers.

    Wednesday, February 08, 2006

    Addicting... For No Reason

    Why the freak can't I stop playing this? Is it even really "playing?" More "dorking around with some particle algorithm?"

    The original "World of Sand" is posted on someone's blog, but was redone at a larger size & colocated at http://chir.ag/stuff/sand/.

    I attempted to find out where the original poster got the game, but Google's translation mechanisms leave something to be desired. Among the translated comments:

    "Sentence of letter non-commutative field of stain coming When please insert the bomb that it hits against the fire, the kind of explosive which explodes we ask"

    "When to lick the lottery or stick human can be killed with this function, pleasantly so."

    "It increased in the enormous pleasure. Don't you think? good ッス petroleum W Furthermore still the element increases, because it is is, it is the pleasure.
    Unless you must surround either side, as for, being a little sad, (no Please persevere even from now on."

    "When you burn the slug with the water, in the picture イッパイ The fighting spirit which < burns! Slug you! > The ネ which becomes"

    Sunday, February 05, 2006

    Invisible Currency

    I manage a team... kinda... that writes e-Commerce applications.

    Can I call them something other than e-Commerce applications? I hate that name. It's a crapton of sites that sells stuff. Umm... online storefronts. Yeah. That's what I'll call them.

    Anyways, I've always resisted integrating Paypal into our checkout process, mainly because of a) fraud issues b) liability issues and c) I'm busy doing other nonsense, like AJAX. I never saw it as necessary... I mean, who pays out of their Paypal account? No one. They transfer the cash to a checking account then use it from there. Right?

    Well... I gotta confess... I paid for something out of my Paypal account. Someone donated something to my pet open-source project, which made me as giddy as a schoolgirl. But I didn't use the donation for anything.

    Then I found out that The Office was available via iTunes. I had a steaming resentment in my belly that I hadn't seen any episodes from season 2, so I took a peek at what I could buy.

    Whaddaya know... iTunes just recently added Paypal as a payment option. And I had a balance. And I had a burning in my loins to pay a deuce and watch an Office episode. So I transferred money from some stranger via another stranger to a third stranger... and was watching my beautiful episode in a few minutes.

    I guess there is a use for Paypal after all. For those of us with less money in Paypal than under our couch cushion, maybe random transfers like these actually make sense.

    Sunday, January 29, 2006

    Woozle Wisdom


    Our first job is to make this world a lot of fun to visit. It is a high energy raucous musical romp. It's a lot of silliness. It's wonderful.
    However, the second thing that we're doing with this show is saying something. The show has a direction and point of view. This will be beneath the surface, and if anybody becomes very aware of it, we will have missed.


    - Jim Henson, in his original sketch book where he brainstormed a show called "The Woozle World," which latter was renamed "Fraggle Rock."

    Thursday, January 26, 2006

    I Would Tell You, But Then I'd Get Sued

    I always want to post lil' work snippets in this blog, but I can't. Not that my job is all that interesting, but weird crap that I like to bitch about to Rocky does come along. The fact is... I can't. Why? 'Cause I'll get sued.

    Someone found out about my unfortunately brief work with PlaneShift (motto: "Will someone get rid of that freaking Flash animation!") and then found out my handle. So it wouldn't be a big stretch to see them finding my blog. And then for it to show up in our proxy server logs. And then for someone to get cheesed at me (again). Then find ammo to arm an exec with. Then down I go.

    For example: one local legal council to businesses advertises on NPR that "blogs can create a host of legal problems for employers." I can understand that, as these are public forums... but I don't need to give someone a reason to can my butt.

    Then again, you start talking too much about your personal life and you become a target for identity theft. It happens way too easily and is way too irrevocable.

    So that's one major reason I just gab about random tech stuff. It's pointless, it interests me, it bores others, and won't get me fired.

    Go free press.

    Thursday, January 19, 2006

    A Pixel Named Gobo

    I received a beautiful 19" Dell LCD UltraSharp monitor as a very generous gift recently. I adore the monitor aside from one tiny thing - a pixel that has problems with blue. Its subpixel is whack... so if the pixel attempts to turn white it actually turns red, and if the pixel attempts to go black it shows green.

    It's not a big deal... but because it's so bright with an opposite color and right smack-dab in the middle of the screen you can't help but notice it. I've tried everything to remedy the problem. I've run endless loops of red, green and blue video hoping that quick color changes will snap it back into place. I've tried rubbing the pixel. I've tried applying pressure with a warm cloth. Nothing.

    I tried to replace it with Dell, but since it was outside of its 21-day unconditional return window, all they would give me was a reconditioned part. I initially took them up on their offer... but when it arrived it appeared to have been delivered drop-kick express. The case was cracked and couldn't be put back together, metal parts of the frame were bent, it was an early revision model and the backlight bled through.

    So I've kept the original new model and have been trying to come to terms with my one stuck pixel. I think in order to come to terms with it I'll give him a name.

    Looks like Gobo is here to stay.

    Wednesday, January 18, 2006

    ConsultComm Lives Again

    I actually received a donation to one of my open source projects. No joke.

    Up to that point I was considering marking the project as abandoned, but now I'm picking it back up and working on a new Java 5 version and clearing my outstanding bugs list. So thanks to one user's attaboys, the project lives on.

    That's kinda how development on ConsultComm has worked for me... I'll let it go for months at a time, then a user will send along a supportive e-mail or a lil' something for a pizza. After that I'll get into the code to help the user out, find a million things I'd like to do with it, then end up writing a whole new version.

    So if you notice a project you really like but no one has worked on it in a while - send 'em something nice. Like cash. Or a "you are my everything" e-mail. Or kiss them on the forehead. Works wonders.

    Tuesday, January 17, 2006

    I Give Too Much Credit

    I gave Path of Neo waaaay too much credit in my earlier post. I thought they were going for some cool adventure-game-throwback genre in the first tutorial level... but no. They play controls just sucked. I was right - it ended up being Oni in the Matrix.

    Which isn't bad - in fact the hand-to-hand mechanics were pretty well done. Animation was nicely framed... but models were hideous. I mean... abhorrently ugly. Everyone looked like they had a goiter if they bent their neck too much to the side.

    The end was just as bad as the beginning. How bad you say? They played Queen's "We Are The Champions" over top of the ending film clip. Yup, that bad.

    The Wachowski brothers did have an interesting little dialog towards the end that explained why the ending was designed to make absoulutely no freaking sense - which was rather humerous. There were a few good lines in the beginning - such as Neo talking about how crates all over the place are a reeeaaaal original idea.

    Now on to Quake 4 and Darwinia. Thankfully both have native Linux ports... so I can stay in SuSE and game. I've been dual-booting into my wintendo for so long it's nice to be able to have such loving, generous companies that allow me to stay in my OS of choice. Thanks kids! I promise to buy a lot of impulse items from id, Raven and Introversion from now on.

    Saturday, December 31, 2005

    Damn Kids and their CS Degrees!

    Joel on Software had a nifty lil' article I dug recently. He kinda echoes my sentiments on the current crop of programmers coming out of colleges nowadays: they're more vocational than educational. Wow. That was catchy. I just thought that up!

    To any point, the issue at hand is that pragmatism has seeped into colleges that keep wanting more money to give to football players. When I was completing my undergraduate degrees, a few courses were starting to teach data structures using Java instead of C++. The idea behind their reasoning is that they would have to spend less time fighting memory leaks, more time learning a language actually used in the industry and more focus on the algorithms at hand (since data structures are language-agnostic). It seems sensible to me to teach some data structure courses in Java... that way you can spend more time figuring out why a binary search tree is more efficient than a linked list.

    But back in my day, we started CS 101 with freakin' Scheme. That's right. That's right. And it blew everyone's freakin' minds. Recursion vs. iteration was something that was absolutely essential to our budding brains. List manipulation was needed for us to learn how to manage memory later. And once we learned the essence of all the basic CS algorithms, we didn't need to really learn a language, we just needed to understand syntactically how a language was comprised.

    Now that I actually have a "job" managing enterprise software, I'm finding that software in the corporate world doesn't need to be fast. It doesn't even need to be that correct, ultimately. It just needs to be easily mantainable. That's what the crux of enterprise software is - maintainability; so when you quit and move on the next dufus who sits in your chair can easily pick up where you left off.

    And hence why all the knowledge I gained in four years is quickly evaporating from my head...

    Monday, December 26, 2005

    Path of Whassit?

    Just got Path of Neo and tried it out... yes, it's shameless merchandising. But it's fun.

    It was actually ticking me off big time for the past hour... I thought this was going to be a Matrix-like twist on the third-person action genre (akin to Oni). Going into that sort of mindset the game was absolutely terrible. Controls were inconsistent, camera controls were way more than wonky, and character animation/generation was borderline awful. I think character meshes were... what... six polys?

    But then it hit me. This isn't an action game. The weird play controls... the cinematics... the generic "action" button used for every damn thing... it's a freakin' adventure game.

    The thought of a Matrix adventure game simply cracked me up. First off, it's been a stalling genre since Lucas Arts' release of Full Throttle or Sam & Max. To suggest that Shiny Entertainment was using the genre for a Matrix title makes a helluva lot of sense... it's just... weird in this day and age.

    By the way, thanks to Bob and Chris for their feedback this week. I didn't realize people actually read this drivel ;)

    Saturday, December 17, 2005

    Character Generation in Blender

    I just posted three new tutorials: Building Textures with GIMP which focuses on how to build textures out of repeatable patterns - perfect for texture mapping; Building a Low-Poly Character Mesh in Blender which focuses on creating a character mesh using as few polygons as possible, and Texture Mapping Character Meshes in Blender which ties the first two together.

    I also found an interesting tutorial on using diffuse maps, normal mapping, height maps, specular maps to utilize CrystalSpace's parallax and specular shaders. Something I've wanted to research for a while now... I'm way behind the times when it comes to shaders. WAAAAAAAAAAY behind. Looking at what Bethesda Softworks can do in Oblivion with parallax, diffuse, specular and normal maps combined into each texture blows the mind.

    The shader 3.0 spec was easy to follow... vertex processing -> primitive processing -> pixel processing. But throw in volume shaders or subsurface scattering and it starts to become more shader levels than my little brain can handle. I hardly have time to build a low poly character mesh - how the hell am I going to model its vascular system?

    Sunday, November 27, 2005

    Burning Transistors

    All at once, my ol' Socket A machine decided to go dark. Afterwards it could no longer boot. The mobo could POST, but the CPU never quite woke up. Although a new layer of thermal paste and reseating the heatsink might have fixed it... I wasn't able to get it to awaken.

    I decided to gut the machine and go with all new gear. Gone was the ATA/166, in was the SATA WD Caviar. Gone was the GeForce 5950, in was the GeForce 7800GSX. Out was the AthlonXP 1700+ (oc'd to 2133 MHz), in was the 2GHz AMD 64. Gone was single-channel PC2700, in was dual-channel PC4000. Out with the 380W PSU, in with a modular 500W PSU.

    The case and the DVD/CD drives remained, but the rest was gutted. Since I've had some fun flexing my new vertex-processing muscle. I've been able to add window transparency and drop shadowing to my WinXP and SuSE 10 desktop, thanks to the NVidia drivers, XOrg's composite extensions and KDE. I never realized how nice those lil' add-ons could be, but its quite handy.

    I was also able to try out the latest NVidia tech demos, showing all the luster of real-time sub-surface scattering, volume shaders and high dynamic-range lighting. I never realized how nice volume shaders could really be - it's something I need to look into closer. This is especially nice for the low-poly meshes I make... something decidedly low-poly could look very high-poly with the right shader. Add vertex shaders for hair & fuzz, then pixel shaders for lighting and reflection and it's a great combo.

    I also tried out Valve's "Lost Coast" demo, showing HDR and the glossyness of their rocks and textures. It was a fantastic demo - and definitely made a solid case for HDR.

    Exploring the native 64-bit land of SuSE 10 is interesting. Now I have things actually compiled and optimized for my platform... the closest I was able to get before was a x586 package for SuSE. But with a native 64-bit OS, things are going well. The only problem I've had so far have been interfacing with the old 32-bit Macromedia Flash plugin - I had to install 32-bit browser libraries to interface with it. Other than that, however, things have been great.

    Of course, rebuilding a machine, prepping for Thanksgiving and Christmas, finishing the end-of-year strong at work, wrapping up some rather large projects and taking about fifteen days of vacation in December is taking a rather large bite of time out of finishing these Crystal Space & Blender tutorials I'm still writing. Hopefully we'll see a rough draft soon.

    Sunday, November 13, 2005

    No.

    I'm trying not to give up.

    It's amazing to me how living corporate life will suck the soul straight out of you. It used to be "us versus them," where "they" were the corporate suits that governed everyone from afar. Now "they" are simply everyone else... people who learned to survive the tough times when the tech bubble burst by being cutthroat and ruthless, then never going back.

    I'm tired.

    My computer just died... I think the proc overheated and finally went frizzle. I've been working on tutorials for Blender and CrystalSpace, focusing this time on creating a human mesh from reference images, vertex modeling, texture mapping, rigging and finally exporting. I have finished examples for all stages and just started writing the texture mapping chapter when the whole machine went dead. It POST's to BIOS, but after that no dice. So I'm shopping on newegg.com now. I'm cringing 'cause I can't afford any of this crap... so maybe I'll just live with a 2' brick on my floor.

    So... right now, if this were a Shakespearean drama we'd be in the "rising action" section. Bear in mind, this is from my own self-centered, egotistical perspective. But who knows what happens.

    Sunday, July 24, 2005

    Abandon All Hope Ye Who Enter Here

    Too tired...
    All projects abandoned...
    Now managing a development team...
    No time to code anymore...
    Skills slipping away into oblivion...

    Thursday, July 14, 2005

    Voice Dial VCF

    I've been working with Samsung's i500 distribution of PalmOS 4.1 for a lil' while now. It's interesting coming from a PocketPC background (I've had a CE PDA since the original Casseopia, yo)... I expected PalmOS to be the more stable OS. I've already had around ten reboots coming from I/O lockups, power issues or just random occurances. It may just be the hooks that Samsung's apps have in the OS to merge the CDMA phone with the PDA hardware... I dunno.

    Once nice thing is that PalmOS apps are infinitely easier to troubleshoot or reengineer. This is no doubt why things work so nicely in Linux (other than trying to get the USB tty interface working... serial I/O over USB? Wha?).

    For example, I've been using the "Voice Dial" app that Samsung wrote to dial numbers using my headset. It's something you manually have to train, then it associates a record with an entry in your address book. Problem was, after my device sync'd all the voice dial associations were gone.

    So I looked at the AddressDB file that the i500 had and noticed that each record had a unique ID associated with it. I took a guess that the Voice Dial app used that key to associate a voice dial entry with an AddressDB key. Looking at the actual .vcf file that was being sync'd from PalmOS onto my desktop I found there was indeed a field called X-KPILOT-RecordID: that was storing the record's unique ID.

    I added a lil' sed routine to my evolution-to-KDE export script that adds the field to the appropriate VCF contact records. Now that my contacts have the X-KPILOT-RecordID field the voice dial stuff stays in sync.

    Wednesday, July 06, 2005

    Entropy and Chaos

    Entropy, uncertainty won't yield to you...

    NeroVision Express has been aligning pixels weird in 3-5 vertical rows on the right side of my encoded MPEG2's. I haven't really noticed 'till now, but all of my 16:9 DV video is consistantly encoded with those weird aberrations. I took my occasion of feeling unsettled to try the latest version of Kino/ffmpeg/MJPEG/SuSE 9.3. I did a head-to-head comparison encoding the same AVI Type 2 DVI file with all the new stuff from SuSE, PackMan and Guru's RPM Site.

    Tests were done using the default settings for a 16:9 NTSC DVD. Note that MJPEG still looks awful and blocksizes are way too big. NeroVision's encoder almost looks okay, but motion lines are rendered all over the place. ffmpeg looks good however - lines are even, things aren't harshly blocked. Bear in mind, however, that MJPEG in Kino is a single-pass encoding, while ffmpeg is a dual-pass encoding. I'm sure this is a big reason for the difference.

    ffmpeg is looking much better, but I'll probably stick to NeroVision for now. Kino only processes ffmpeg files one at a time (as opposed to its MJPEG batch conversion), so doing an entire batch of AVI's has to be done manually, typing individual file names and selecting individual frame sets. I could possible write a shellscript to do what Kino does, but Kino an internal (and very nice) YUV generator which pipes output directly to ffmpeg, as opposed to creating the YUV and then processing it. For example, here's the first pass of the encoder:
    ffmpeg -v 0 -f dv -i pipe: -f rawvideo -pix_fmt yuv420p pipe: -vn -f ac3 -ac 2 -ab 192 -ar 48000 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.ac3
    ffmpeg -v 0 -f rawvideo -pix_fmt yuv420p -s ntsc -r ntsc -i pipe: -an -target dvd -f mpeg1video -maxrate 8000 -ildct -ilme -aspect 16:9 -pass 1 -passlogfile /home/jellis/Documents/March 2005/2005.03.27_13-17-44 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v


    And the second pass:
    ffmpeg -v 0 -f dv -i pipe: -an -f rawvideo -pix_fmt yuv420p pipe:
    ffmpeg -v 0 -f rawvideo -pix_fmt yuv420p -s ntsc -r ntsc -i pipe: -an -target dvd -f mpeg1video -maxrate 8000 -ildct -ilme -aspect 16:9 -pass 2 -passlogfile /home/jellis/Documents/March 2005/2005.03.27_13-17-44 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v


    Then it seems to multiplex using:
    mplex -f 8 -o /home/jellis/Documents/March 2005/2005.03.27_13-17-44.vob /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v /home/jellis/Documents/March 2005/2005.03.27_13-17-44.ac3

    Both using internal deinterlacing (I'm guessing from the 420 progressive format it selects). Kino does this pretty well, and I might have problems trying to hack it on my own. Notice that it pipes both audio and video streams in seperately... so the source format is kind of a black box to me.

    NeroVision, however, works fairly well right out of the box and will batch everything together for me automagically. I want seperate VOB's for each chunk of video sometimes, and others I want to splice them together. But most of my video should have its own VOB... something I can't very easily define in any DVD authoring or video authoring software currently available in Linux.

    I'll give a quick pass at demux'ing the Type 2 AVI's and creating raw source audio/video files... I'll let you know if I figure anything out. I might just try piping
    dvgrab --format raw --frames 0 --size 0 -
    to stdout and see how that works. dvgrab is part of the Kino project, so I'm hoping it'll be just as nice.

    This latest round of entropy has killed any productivity I once had. It's frustruating, especially when I wanted to have the isometric camera for CEL done by now.

    Sunday, July 03, 2005

    Rise of the Casual Gamer

    My wife and I are using the same PDA platform now, so I beamed her a demo copy of Bejeweled. Just as I thought - she became instantly addicted.

    There's a common stereotype in the gaming community that puzzle games are the only genre that can target female gamers. But men seem to be increasingly into puzzle games - especially as they've been ported onto cell phones and distributed with PDA's. To me at least it seems that saying "women are only into puzzle games" was ignoring what the actual market was: the casual gamer.

    Casual gaming has been a big topic as of late on Slashdot Games. Those kiddies addicted to Nintendo 8-bit systems in elementary schools are now parents working 50 hour work weeks and coaching soccer teams, so they don't have time to become an uber-leveled avatar in an MMORPG.

    The BBC had an article about women becoming an emerging market in gaming where it sounds like the industry just isn't getting that point. Ernest Adams of the IGDA even said:
    Women don't have free time even to set up a game. They require a game that is quick to get into and doesn't require a great time commitment,


    No, that's anyone who just doesn't have the time. The article also states:
    The so-called casual gaming market, made up of games such as poker, pool, bridge, bingo and puzzles, is a booming one, especially among women.


    It seems like Guild Wars gets this point - where you don't have to be an addict to justify subscription costs and it doesn't take 30+ hours a week to ascend to playable experience levels. As target audiences get older and time becomes more precious, people will find out that the "casual gaming audience" is much bigger than they thought - and not just limited to a stereotypical view of women.

    Saturday, July 02, 2005

    Chaos Ensues

    Considering I just rendered useless my PDA and my cell phone and my USB key recently, I swapped them out with a Samsung i500. Works great, aside from the LOUD, EAR PIERCING SCREECHES THAT EMANATE FROM IT WHENEVER IT RINGS. That's slightly annoying. Hopefully Fry's will do a quick exchange and I'll have my carrier switch my account... again.

    One big problem was figuring out what @#$&*! tty to use. There are several USB tty's in SuSE's /dev system... /dev/ttyUSB, /dev/usb/ttyUSB, etc. Finally figured out that /dev/usb/ttyUSB1 was the one I wanted for cradle sync's. I hacked with syncing via IrDA for a while - the kernel module kept returning I/O errors until I realized how stupid I was and the Ir port was disabled in my laptop's BIOS. D'oh. Enabled that and /dev/ircomm0 worked great, albeit sloooooow.

    It sync's with Linux nicely, however. The lovely people and Ximian made the good move with storing their calendar information for both Exchange (cached) and locally to use ICS file formats, so I can easily concatenate Exchange and local to-do lists and calendar items into a single file. Very nice! There's a very nice command-line exporter for the address book - I have it converting both local and Exchange contacts into a combined VCF file, which worked nicely. Now KPilot just syncs a simple .ics and .vcf file with minimal fuss.

    For example, to move all my files together for sync'ing all I need to do is:

    # Export contacts from local store
    $EVOLUTION_BIN/evolution-addressbook-export file://$EVOLUTION_DIR/addressbook/local/system > $KABC_FILE
    $EVOLUTION_BIN/evolution-addressbook-export exchange://$EXCHANGE_USER/personal/Contacts >> $KABC_FILE

    # Move over tasks from Exchange cache & local store
    cat $EVOLUTION_DIR/exchange/$EXCHANGE_USER/personal/subfolders/Tasks/cache.ics > $KORGANIZER_FILE
    cat $EVOLUTION_DIR/tasks/local/system/tasks.ics >> $KORGANIZER_FILE

    # Move over calendar from Exchange cache & local store
    cat $EVOLUTION_DIR/exchange/$EXCHANGE_USER/personal/subfolders/Calendar/cache.ics >> $KORGANIZER_FILE
    cat $EVOLUTION_DIR/calendar/local/system/calendar.ics >> $KORGANIZER_FILE


    So... I've got a defective i500. But at least I had it as a proof of concept.

    The nice thing is now I have a cell phone that I can develop on. Mebbe I should use PalmOS for game development instead of the freakin' J2ME stuff I couldn't even deploy. I wonder how big PalmOS' market share is... including both PDA and smartphone sales. According to WindowsForDevices.com, it sits at 40.7% including cellular PDA's such the BlackBerry, but not smartphones or Handsprings. Windows is gaining at 40.2% while PalmOS is declining, but it's still a much more level playing field than I expected.

    Thursday, June 23, 2005

    Big is the new Small

    It's been interesting to see how technologies have been shifting from the very small (i.e. pixel & vertex shaders, dynamic lighting, self-shadowed models, etc.) to the very large (mapping entire worlds out, streaming cities and levels, building accurate terrain maps).

    The CrystalSpace mailing list has been having an interesting discussion on the topic of how to create very large maps. This is of course a big concern for MMORPG's and RPG's, but it has become of increasing concern for anyone who wants vast, open-ended maps.

    It's not quite as simple as it might seem. Not only do you have to worry about terrain maps seamlessly being stitched together, but you also have to worry about where you do your clipping, if you still use portals to decide what gets rendered and what doesn't, if you have entities and items still loaded without an actual mesh to sit in, if you'll use LOD (dynamic level of detail) to manage rendering far-away objects, how you'll quickly determine what sectors can be rendered, how to best stream data to the engine, blah de blah de blah.

    I recall the same thing happening with shadows - except the emphasis was on polishing the small details. Here bumpmapping and shaders really came to be - new hardware conventions that allowed a greater level of detail than before. Now that we've figured out how to have eerily realistic lighting, shadows and mapping for the many details on today's high-poly models. Are we going to have to perform a similar re-invention for the very large as well?

    It looks like the new Unreal 3 engine is. For example:

    Artists can build terrain using a dynamically-deformable base height map extended by multiple layers of smoothly-blended materials including displacement maps, normal maps and arbitrarily complex materials, dynamic LOD-based tessellation, and vegetation layers with procedurally-placed meshes. Further, the terrain system supports artist-controlled layers of procedural weathering, for example, grass and vegetation on the flat areas of terrain, rock on high slopes, and snow at the peaks.


    Neat stuff. Now artists can easily build large maps that have realistic environmental details - without having to model every nook and cranny by hand. Here the engine dynamically builds the "repetitive" stuff for you - so you can work more on layout than on building one hundred shrubs in the landscape. The UT3 engine still makes individual models look beautiful, just like everyone else's engine right now. But they're also spending the effort on making the BIG level models look just as immersive - without a million-person team of artists.

    Patenting the E.U. and the U.S.


    In 10 years' time we will only have half the small and medium sized companies that we have now,
    - Evelin Lichtenberger on the European Parliment's bill on software patents


    Stallman also made some excellent points on the EU's push towards software patents. One important point he made was that politicians are confusing patents with copyrights, which are two entirely different concepts. Again, this goes back to the distinctions made between "opening" creative content versus opening code.

    The U.S. is also working on patent reforms that will push small business out and allow large businesses to eat them. The U.S. Patent Reform Act of 2005 is something I'm still trying to digest. While it seems like it might abate "submarine patents" that lie dormant until approval only to spring up as a reason for the owner to start suing for patent infringement, it might offer more problems for those who can't afford to pursue or defend their patents. From the article:

    The issue is this: do the big players need more help? If it's harder to sue for patent infringement, and it's easier for big businesses to file for patents than it is for capital-starved little guys, is it fair to the little guy? For example, I can imagine the following scenario: I invent something and write a scholarly paper about it. I can't afford to patent it or it takes me a while to find a lawyer I can afford. So Microsoft reads my paper, runs to the Patent Office, patents what I wrote about, and then sues me for infringement of their patent. I haven't analyzed the bill enough to know if there is a way to block this scenario, but it's something to look for. You don't want the fix to be worse than the problem you are addressing.


    One downside to the U.S. revisisions is the first-to-file provision pretty much kicks the little guy in the shorts. However, given how much patenting people do for existing processes/concepts, the post-grant submission of prior art by third parties is welcome.

    Sunday, June 12, 2005

    So... tired...

    Can someone hold down a full time job and try to publish a title that's worth a crap? I don't know.

    I got a somewhat lateral promotion at work recently, so I'm spending more time on work projects. I'm too tired at the end of the day anymore to do fruitful coding. So what's left?

    I got some Starbucks DoubleShots in the fridge downstairs... mebbe I'll give them a try.

    Installing SuSE 9.3 on my development box... wheee...

    Thursday, June 02, 2005

    Why Even Bother

    With patents like this one, it's no wonder that the innovation, small businesses and independant game shops are dying out. No, it's not because of market conditions. No, it's not because the cost of development is too steep. It's because huge companies get to patent vague notions such as "keeping score in a game." The Patent Office obviously doesn't care about what's a valid patent anymore - they get paid if your patent is later litigated & revoked or not. Basically all the USPTO does is take gobs of money from large companies, stamp their patent form, file it away, then call it a day around 10 AM.

    Since no one is reviewing patents before approving them anymore, it's up to challenges & lawsuits to decide if a patent is valid or not. And who has the money to challenge patents? You guessed it... big corporations! So the only way to be able to use a vague notion of a non-unique concept patented by a USPTO that just doesn't give a damn is to be another big company and be willing to fight it out in a court battle.

    So... let's see... we kill off every small business, which employs the majority of the workforce, then scratch our butts and wonder why unemployment figures are so high. Here's the reason... small companies don't make sizable political contributions to lawmakers. So why do they give two craps about small business? They have a job, a quite comfortable one, thank you. Why would they waste their effort helping the thousands of companies that won't give any money back, when they could be catering to bigger interests that continually pull trucks of money to their back door?

    You want employment? You want innovation? You want capitalism to work? Get rid of stupid patents. Make the USPTO work for a living. Kick out congressmen who would rather enjoy a nice, sizzly steak than think twice about Joe Sixpack.

    Gamasutra wrote a pro-patent article, saying:

    Patents, by their very nature, grant the right to exclude your competitors from stealing the fruits of your labor, and yet this powerful tool appears to be overlooked by the majority of the industry. In an effort to answer this question, we set out below to dispel what we see as the top myths surrounding patent protection of video games, and hope to encourage innovative game developers to take steps to protect their valuable innovations.

    What the hell? Tell you what, let's replace the word "patent" with the words "machine gun" and see if it sounds any more convincing.

    Machine guns, by their very nature, grant the right to exclude your competitors from stealing the fruits of your labor, and yet this powerful tool appears to be overlooked by the majority of the industry. In an effort to answer this question, we set out below to dispel what we see as the top myths surrounding machine gun protection of video games, and hope to encourage innovative game developers to take steps to protect their valuable innovations.

    Same general gist. If dem der people try ter steel yer propertie, giv 'em a quik shot in the arse. Hell, it's my right to own a machine gun patent. Another quote from the Gamasutra article:

    A classic argument among those who feel that the entire patent system should be abolished. You might want to make that argument to your representative in Congress, because unless the Constitution is amended to do away with patents, they're here to stay. In drafting the Constitution, our founding fathers recognized that the best way to promote progress in the "useful arts" was to reward inventors who come forward and share their inventions with the public by granting them a limited period of exclusivity in which they can exploit the fruits of their labor. In other words, discouraging slavish copying encourages innovation.

    Wrong. This isn't what the founding fathers were talking about.

    He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. That ideas should freely spread from one to another over the globe, for the moral and mutual instruction of man, and improvement of his condition, seems to have been peculiarly and benevolently designed by nature, when she made them, like fire, expansible over all space, without lessening their density in any point, and like the air in which we breathe, move, and have our physical being, incapable of confinement or exclusive appropriation. Inventions then cannot, in nature, be a subject of property. Society may give an exclusive right to the profits arising from them, as an encouragement to men to pursue ideas which may produce utility, but this may or may not be done, according to the will and convenience of the society, without claim or complaint from any body.
    - Thomas Jefferson, letter to Isaac McPherson, 1813

    We haven't evolved as a society by making ourselves grandiose versions of the Hatfield's and the McCoy's. We have grown by accepting and integrating a free exchange of ideas, concepts and principles that make us stronger. Firing warning shots at people close to your property and building a row of razor wire will only ensure that you become nothing but inbred and ignorant.

    Tuesday, May 31, 2005

    No Such Thing As a Free Beer

    There's a weird, somewhat transient sense of "ethics" that comes with using Free Software. Free Software licenses, such as the GPL, do a terrific job at enforcing that the spirit of "liberated" software is that it remains free. Not free as in no cost, mind you, but free as in publicly available to all.

    Some people struggle to understand what this means. The common phrase you'll often hear to illustrate the concept is that the software is "'free' as in 'free speech,' not as in 'free beer.'" The weird thing is that this is a freedom granted to the user, not to the owner, of the software. In a world where the owners are often given the most protection possible, this seems like an anathema of capitalism. Hence the term "copyleft" when talking about Free Software - it inverts the protection often offered by copyright licenses.

    Even more people struggle to understand why the hell someone would release their hard work under a copyleft philosophy. From the experience I have, Free Software works well since in the end we're all consumers. We don't live in our own lil' self-sustained software ecosystem - we all depend on one another to get crap done. If we all build off of each other's work, if we all yield to the rights of the consumer, then eventually reap the benifits ourselves. You may be the owner of one piece software, but you're the consumer of a hundred other pieces. If everyone is protected as a consumer, and everyone is a consumer, transitively everyone wins.

    But, just like every well-meaning philosophy, there are a group of wieners and dofuses that run afoul. You can't change that. On average, 80% of all people are idiots (dictated by my own "Chuckles' Theorem of Democracy"). So how do you protect your original utopian concepts? By making it legally binding and giving very specific terms of usage. That way at the very, very least you get someone who absolutely has to abide by the minimal terms set forth in your license and can't bring down the whole deck of cards.

    Case in point. Sveasoft, which builds a Linux distribution for the infamous Linksys WRT54G(S), made everyone happy by creating an alternate firmware release based off of Linksys' GPL'ed codebase. Once everyone was happy, they started charging people $20 for using their support forums. Then they only started to release new firmware in the support forum. Then they started revoking people's subscriptions if they re-distributed the firmware (which they were allowed to do by the GPL, but by the same merit Sveasoft reserved the right to kick whomever they wanted out). Then they allegedly started threatening people who were offering the firmware releases to the public. Then they started charging for their next-generation of firmware releases, and required them to be activiated for a particular unit.

    Technically, as long as they freely release the source code along with their binary releases they are still in line with the GPL. But people started to major league get ticked by the shift in protecting the user (so they could use or study the firmware for whatever purpose) to protecting the owner (who was trying to make money off his work). The point of reconcilliation here was that the GPL allowed redistribution and required source code disclosure of the firmware - but this was discouraged by kicking people off the forums. People felt shafted since their protection as consumers was no longer as strong as they had hoped.

    But then look to projects such as CrystalSpace. Here's a team of developers that bust their respective butts to make sure people can easily use the framework, learn about real-time graphics rendering and develop their own apps. They've asked for donations, but mainly so they can replace their old, crusty workstations that were built using stone tablets and hamsters spinning inside wheels. Every piece of code, every scrap of documentation, every sample app is freely released. And the maintainers (very patiently, I might add) answer questions and help to develop the community. People regularly flock to CrystalSpace because they get to be in control over whatever the hell they want to do with it.

    But where's the line in between? Think about Hibernate and Struts, two open source software projects that are widely used as frameworks for web applications. Yet the majority of the applications that take advantage of these LGPL'ed projects remain closed source, some available commercially. This is completely legit since the LGPL doesn't place restrictions on software that just refers to or makes library calls to LGPL projects. LGPL hasn't be violated. People don't raise a stink, so I'm taking it that they don't feel their user rights are violated. Maybe since Struts and Hibernate is mainly used to develop enterprise software people don't care nearly as much. After all, enterprises are still catching on to the whole "free software" concept, while individuals have been embracing it for decades. Maybe there are no consumers that feel burdened by closed enterprise software.

    PlaneShift is another interesting example. Here's something that individuals would fight for their rights for - an MMORPG based on CrystalSpace. I actually did development for them briefly... they have an interesting stance of keeping their code open but their creative work (maps, character models, textures, story) closed. They have sizeable code contributions they give back to CrystalSpace, and their work has helped evolve a lot of the CS/CEL framework. The artwork, however, could be the commodity that could drive sponsorship/sales/membership. Again, people don't seem to balk at that... code is code, artistic content, however, is unique. In fact, this seems to be a point that Richard Stallman has made during a Slashdot interview and, related by Rusty, during a stump speech at The Bazaar in '99.

    Or is it? Rusty claims that "programing may be an art but isn't Art" [emphasis his]. What about a unique and distinct AI algorithm that makes an NPC so weird but loveable? Or a procedural texture that renders so beautifully? Or an algorithm that spawns a forest of fractal trees? Or the events fed into a quest manager that drives the storyline? How about a visualization plugin to XMMS or Winamp?

    It seems to me there's a more distinct difference between "unique" code and "core" code, and that's where the line should be drawn. "Core" code is that codebase that can be reused over and over by any number of projects. Hibernate, for example, can be reused for any number of purposes by a huge number of potential developers. The artwork for player characters within PlaneShift, however, can be a unique feature of PlaneShift itself. The AI algorithm that creates a dramatic character is a unique feature of a particular game, and perhaps can't be reused somewhere else. That which makes your application distinct and personal can be closed and distributed as "artwork," that which is global and reusable can be opened up for all to see. Some applications don't want to have distinctive or one-time-use features - they want to be as reuseable and functional as possible. Some applications want to be extremely unique - a visualization plugin for XMMS wants to be as different and distinctive as possible.

    The difference is also in how much collaboration can be done. In art you're usually taking the thoughts, emotions and impressions of the artist and trying to portray them on whatever medium that artist is most expressive with. It could be film, canvas, clay or C++. Free Software seems to be, at its very heart, about collaboration. Everyone has equal access to code, and must submit its contributions back to the community. This collaborative process makes the software stronger and more refined. But it's hard to have that same collaborative effort with art... when someone inserts their impressions into the medium, it may change the voice of the original work entirely.

    Maybe art is that which becomes something entirely different of something is added or taken away. Take away one word in Tom Sawyer, for example, and it ceases to truly be Tom Sawyer. Add some nips and tucks to ConsultComm, however, and it remains ConsultComm. Perhaps the standard is that art must stay intact to preserve its meaning and its impact.

    Monday, May 30, 2005

    I Hate That Cliché!

    Always poignant, sometimes pungent David Wong recently posted an article about the "20 things gamers want from the seventh generation of game consoles." Aside from his very true observations about crates, stale genres and straight-out lying about in-game graphics, he also mentioned a few design items I thought were dead-on:

  • Doors aren't indestructible. Big wooden doors can be obliterated by a rocket launcher. A padlock won't help.

  • Games shouldn't have load times. It's true - now that I have next to no free time, I don't want to waste it trying to find the CD, then loading, then waiting for the distributor's movie to roll, then the producer's movie to roll, then the studio's movie to roll, then the intro cinematic to roll so I can go to the menu, load the last savegame, wait for the level to load, then get into actual gameplay. I'm already bored by the time I see any action.

  • Women are a HUUUUUUUUUUUGE audience that's being overlooked by nearly every single major release. Go to WomenGamers.com sometime and look around. Not only do they have better observations on the market than most sites (they were the first to actually convince me that Ageia's Physics Processing Unit might actually be worthwhile), but they also make excellent points about how game studios have absolutely no clue how to relate to the female gender. If any other business was so stupid, they'd be laughed off the planet. The gaming industry, however, is content to lose 50% of their audience because they never got past having gum spit at them by girls in high school.

    I'm hoping that by actually listening to the dissent out there... most of which I can really agree with... I can avoid some of the same design pitfalls.
  • Ah... Working at Home

    I took this three day weekend to do some extended hacking on my current project. I'm forcing myself to use CEL instead of CrystalSpace now, which means I just recently ditched my working engine with an isometric camera angle to use CEL's simple camera that follows the character everywhere.

    I'm working on getting an isometric viewpoint working, but it looks like its going to take more code. Still, if this means that saving/loading/collision detection/managing meshes is going to be easier, the longer ramp-up time should be worth it.

    It's so nice to hack in my peaceful abode. My better half has been wonderfully supportive in letting me hack away at my new pet project. And now I can blog when thoughts pop into my head instead of waiting until after work. I should take some vacation time to continue hacking next week. Ahh... so nice...

    I've been re-reading C++ Primer, Fourth Edition, trying to force my brain to switch from Java mode to C++ mode. It's amazing how much I've forgotten about pointer arithmetic and inline directives. It's a good book, albeit very anti-C.

    Tuesday, May 24, 2005

    Music Fills the Air... and Dead Air

    Some of you may have seen Eytan's comments to a post a while back. Actually, no one saw them because only two or three people know of this blog's existence. Anywho...

    Two of Eytan's original performances can now be had here at this very blog. Check out Carolina Shout and the transcendent That Mesmerizing Mendelssohn Tune. Ever since he e-mailed them to me I've been tapping my feet and dancing in my chair. One day I hope to listen to them.

    On the topic of gaming, it appears that GamingFM is down for the count. Up to you to decide if its for good or not. It's a bad sign, tho, when the streams go completely dead for two weeks and the server admins haven't updated the site in just as long. No word from the GamingFM crew what's going on - which probably means they're gone for good. Sad, really.

    Friday, May 20, 2005

    Isometric Engines

    I've halted work (for right now) with the texture mapping tutorial. My brother and long time encourager of my level building skills had a good game idea - so I'm going to try and flesh it out. If he can do the art entities (I'm hoping he can get up to speed with Blender and do some mesh work) then I think we can definitely do something. I'm working on building an isometric engine using CEL and CrystalSpace... something that CEL seems to do exceedingly well. It's basically just a fixed camera angle within the standard engine - your level design just has to adjust accordingly.

    Once again I forgot my sketchbook, which I'm going to have to carry around if I'm going to remember all these design ideas.

    Now the fun with building a dev environment.... w00t... just upgraded to SuSE 9.3, and the freakin' ATI drivers keep uninstalling my libGL.so symlink. So I have to keep reinstalling the xorg-x11-mesa drivers.

    Wednesday, May 11, 2005

    I'm not dead yet!

    Springtime illnesses. Ugh. I live in a petri dish. Well... more like a cattle ranch.

    Anywho, it's tough recovery but I think I'm ready to start working on an isometric implementation of CrystalSpace. That'll be fun.

    Freshly stuffed with chicken wings. Let's code!

    Saturday, April 30, 2005

    Fin

    I'd like to make a special announcement. As of yesterday, I burned all my home movies onto DVD, took the DVD filesystem and copied it to the fileserver, then stowed away the actual media in my backup archives. The raw AVI Type 2 feeds were deleted and replaced with the MPEG2 VOB's.

    The home movie transcoding project is now marked as complete.

    Damn. That was not easy. But I must say, I learned a lot about how to produce DVD-Video. Most noteably:

  • Windows (XP Pro at least) absolutely sucks at pulling frames from a DV interface. Absolutely and completely. Linux didn't drop a single frame unless memory was being taxed for some other process. So ripping raw DV as AVI Type 2 was only really feasible on SuSE.

  • Linux (currently) absolutely blows at transcoding DV into MPEG2. The software is there... the fool-proof tools aren't. For some reason MJPEG consistantly produced absolute rubbish MPEG2 streams, and ffmepg would work spectacularly aside from random garbage, bad timestamps and codec errors every so often. But having just one error every so often ruins an entire DVD, so it was nixed. And while I'm a so/so fan of Nero tools, Nero Express 3 on WinXP Pro transcoded the video and built the DVD filesystems (including some really spiffy menu screens) beautifully. Linux has a way to go with DVD authoring, Nero has it now.

  • Apple makes the best DVD media. But it would be cheaper for me to buy an entire publishing studio than to buy a 20-pack spindle. I used Sony's instead. TDK was the only dual-layer media I could find at the time.

  • NVidia's NVDVD is actually a neat lil' tool - one I'd rate as the best media player on the market right now. Fast (in rendering, not loading) and unobtrusive, I'm using it for everything now. In Linux, there's half a dozen media players that are fantastic. Take your pick.

    Alas... I'm done. So happy. Now, once I heal from being sick for the past two weeks, I can get back to finishing SystemInfo. Then work on my CrystalSpace stuff. Ugh.
  • Monday, April 18, 2005

    I Hate Walking

    I've been trying to pick back up with Morrowind and Thief: Deadly Shadows recently. You know what they're big on? Walking.

    Somewhere down the line the "RPG avatar" became the "video game powerwalker." It's like someone watched Final Fantasy being played and said "Hey! You know what defines this series? You need to walk places! Walk, walk, walk. That's a funny word, isn't it? W-a-l-k. Walky walky walky."

    So you just scored some big loot. In the original Thief series, they just gave you cash right up front. They trusted you'd find a fence somewhere to sell your diamond-encrusted full plate of armor. But now... nooooooo... they've incorporated "RPG elements," which means you need to go walk from town to town (and level loading screen to level loading screen), finding places that buy furniture, antiques, plate armor, handicrafts, birch bark canoes, etc. Because I don't already have to wander enough from place to place running errands in real life.

    I don't mind walking around and enjoying the scenery. In fact, 90% of my time in Morrowind is spent enjoying the scenery. But this is supposed to be an escape from reality. Not an attempt to run chores on an ethereal plane.

    Thursday, April 14, 2005

    Healin' Feelin'

    I had no better title that came to mind. Sorry.

    Wow. Bad chicken in the pasta. Severe gastric pain for two days. Ick. Kids, don't try that at home. Adults either. Ow.

    Ummm... so... I must now confess. My train of thought has so completely derailed that recently I bought a breadboard, logic circuits, a zener diode, resistors and a lil' booklet to learn how to build circuit... stuff... I DON'T KNOW IT SEEMED LIKE A GOOD IDEA AT THE TIME.

    Coder's block. See, my thought patterns don't just work like a deck of cards... they are a deck of cards. That is, if I don't have a full deck stacked, it just doesn't work. Kinda like... riiiiiiight... now.

    C'mon... *slams head against table* C'MON!!!

    Wednesday, April 13, 2005

    Bad Chicken

    Bad chicken... now... severe pain... ugh...

    Thursday, April 07, 2005

    MultiInterTrans

    I have to share this spam...

    On behalf of the organizing committee, I would like to extend a cordial invitation for you to attend one of the upcoming IPSI BgD multidisciplinary, interdisciplinary, and transdisciplinary conferences.

    Wow! Multi, inter AND transdisciplinary! How is that even physically possible?!?!


    In the days when Sussman was a novice Minsky once came to him as he sat hacking at the PDP-6. "What are you doing?", asked Minsky. "I am training a randomly wired neural net to play Tic-Tac-Toe." "Why is the net wired randomly?", asked Minsky. "I do not want it to have any preconceptions of how to play." Minsky shut his eyes. "Why do you close your eyes?", Sussman asked his teacher. "So the room will be empty." At that moment, Sussman was enlightened.

    What Time is It?

    What time is it? Hell yeah, it's Darwinia time.

    Linux client was released March 18th, but because I had all but given up on it I wasn't watching. One more reason not to sleep.

    One nifty addition to their website is their developer's diary. I'm always interested in how a game creatively evolves... and it appears their version of "evolution" is pretty much akin to my own. Try out some random nifty game ideas and then... umm... profit?

    They had a geninue love for the technology and loved the challenge. Then, when it came time to think about game balance:

    At this point the Player STILL controlled a group of around 100 Laser Troopers at once, which meant despite all our best efforts over the past few months, the game was still shit...

    ...Chris had a flash of inspiration about how to generate trees using simple fractal algorithms, and was more than willing to invest serious time investigating this issue rather than dealing with the underlying gameplay problems. Nevertheless, the resulting trees were beautifull to behold and gave us some wonderful early screenshots.


    I love these guys.

    Monday, April 04, 2005

    Enterprise Software vs. Enterprising Software

    Here's the crux of the post I was about to write:


    Blah blah job is boring blah blah enterprise software is more about readability and maintenance than speed blah blah ISV realms are more interesting blah blah Java blah blah Ruby on Rails blah blah wish I could work more on texture mapping blah blah blah.


    There you go. Glad I got that out of my system.