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, 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.