The day the music died
Today my iPod decided to die with the "folder and exclamation point" error:
Unfortunately none of Apple's troubleshooting suggestions worked (typical), and I couldn't get my computer to recognize it as a Firewire device any more. The hard disk seemed to be dead since I couldn't hear it spinning or seeking when turning on the iPod.
The warranty expired a long time ago, so I opened it up to see if there was anything loose or obviously wrong. I didn't see anything, so I guess I'll be getting a new one. I was planning to anyway, but I wanted to wait until the next version, with the rumored full-size screen. Oh well.
Here are some pictures of the insides of the iPod:
Fun with pivot tables and match.com
I recently considered signing up at an internet dating site, just to see what was available. Naturally I was quite skeptical (since I am not divorced with kids and over 40). Match.com claims to have the largest number of members of any dating site, so I checked it out first. Fortunately, match.com allows anonymous non-members to do very extensive searching of their catalogue without signing up.
I started off with a basic search: women aged 20-27 within 25 miles of my zip code (this includes most of the Seattle metropolitan area). I drilled down from there based on various factors such as education, income, religion, etc... After I had collected a good amount of data, I dumped it into Excel and analyzed it. Using pivot tables I could see how various factors affected the number of potential matches. For example, here is a plot of the 'Income' and 'Education' factors:
There aren't too many surprises here: more education correlates to a higher average income, but not that much higher. Other plots such as Age vs Income or Religion vs Education didn't reveal too many surprises either.
The real surprises came in the magnitude of the numbers of matches. For my search of single women aged 20-27 in Seattle, there were only 530 results. 530! Clearly there are many more than 530 single girls in Seattle, so match.com's selection seems to really suck.
Out of those 530 results, if I restricted the search to include only matches whose Education and Income buckets matched or exceeded my own, there were only 7 results (though there were 64 if I also included one income bucket below mine).
I know for a fact that there are way more than 7 girls in all of Seattle with comparable income and education levels, so one thing is clear: they aren't using match.com.
I don't think I will either.
Google Analytics
I've been trying out Google Analytics, and so far it's pretty cool. It's geared toward webmasters who are trying to increase their AdWords/AdSense revenue, so there is a lot of stuff that doesn't apply to a small personal web site, but there are still some things I find useful. Currently it's a free service, and it's not even marked 'Beta' (I guess Google expects that the increased AdSense revenue will cause it to pay for itself).
You just have to stick a small tag of javascript in your page template, and you get all kinds of cool stats about your pages. It tracks the basic things like visits & pageviews, but also does more advanced things like plotting the search engine keywords people use to find your site, or their locations on a map of the earth. Here are a couple of screenshots after it had been running on this site for a couple of days:
Search keywords
Visitor location map
One downside (at least for a blog) is that it can't track visitors who read your site using RSS readers, since the RSS content doesn't contain the Analytics tracker tag and RSS readers usually don't run embedded javascript anyway. So I mostly find it useful for seeing which Google keywords people are using to find my site.
Silicon Valley drive-by shootings
Intel
Sun Microsystems
nVIDIA
Apple
Google (Building 3.1415926...)
HP
IBM
I also saw Yahoo! and Adobe, but I didn't get my camera out in time.
Redwood pictures
Me standing next to a medium-sized tree
This fallen tree was as big as a train wreck
This stump was two stories tall
Diablo elevator
I wasn't sure what to make of this elevator sign in my hotel today:
Going down?
Northern California
Live in Northern California once, but leave before it makes you soft.
Vineyards everywhere
Flowers by the side of the road
Alactraz Island
Interesting fact of the day: Alcatraz timeline
- 1850-1933: Military fortress and prison
- 1933-1963: U.S. Bureau of Prisons maximum security penitentiary
- 1969-1970: Occupied by Native Americans as part of the Red Power movement
- 1971-Present: National Park (Golden Gate National Recreation Area)
Vacation
This week I'm on vacation in California. Here's a picture of me at the Golden Gate Bridge:
The Adventures of Bruto
Amber commented on a previous post, expressing interest in playing the game I mentioned there. Here is a link to download it:
You will need to have the Isis Game Engine installed in order to play. Unzip bruto.zip and double-click bruto.iss to launch it (if you didn't use the Isis installer, run bruto.iss with the 'ivmconsole' program).
You control the dragon and must protect your hometown from marauding invaders. Fly around using the I, J, K, and L keys. Spacebar breathes fire, and the F key sucks in air in order to shoot fireballs (if you don't like those controls, you can edit dragon.iss in notepad and change them). You win after defeating 20 ships, or you lose when your town and castle are destroyed.
If you don't want to download the game but still want to see it in action, here is a WMV video of me playing. Note that the video has no sound because the game has no sound. Here's a low-quality YouTube copy of the video:
Isis
A couple of people were curious about the game engine behind Osiris, so I have written up a little page about it:
There's not much on that page yet, but it has an introduction to IsisScript and a couple of sample games. There are also links to the installer as well as the source code if you are interested in checking it out.
Google stats
As I mentioned in a previous post, one of my goals for this web site was to be the #1 Google result for a search for my name. As of yesterday (June 26th 2006), this site had been around for little under a month and I had captured the #3 spot, even beating out the other Eric Faller who owns http://www.ericfaller.com/. The #1 and #2 spots were still being held by the GameDev club at the University of Colorado. Ironically, I created those pages while back in college and now I can't get rid of them (grr).
Yesterday Microsoft posted a Scoble video of my coworker Savraj and me explaining what we work on all day. Within one day, that page shot to the #1 spot on Google for a search for my name (#2 for Savraj). Less than 1 day for the #1 spot! I was very surprised. Unfortunately that page already seems to have been linked by a lot of other bloggers, so it will probably be very difficult for me to beat it any time soon.
The video isn't that bad, but unfortunately I had a very bad haircut when it was shot, and I and do a poor job of speaking clearly to the camera. I also manage to screw up one demo 4 times in a row, after I had just said something like "Oh yeah, I do this all the time" :). If you are interested in checking out my office and seeing what I do all day, check out the video. (Yes I realize that if I link to it too, that will only make it worse)
Google results as of June 27th 2006
SD vs HD
Fortunately, my problems with the video quality of the DCT-3412 cable box ended up not being so bad, for the simple reason that all of the channels I receive seem to be digital, so they can all be recorded via Firewire (as long as they are not protected with DRM). Also, connecting the MCE via S-Video instead of the RF tuner increased the video quality for shows I can't record with Firewire.
Once that was all working, I did some tests to see how noticeable the difference between SD and HD really is. Here are some pictures:
Standard Definition
High Definition
Obviously the HD screenshot has been shrunk to SD, so they look about the same here (except that the HD shot is in 16:9). Click the HD thumbnail to see it in its full resolution (HD 1080i).
Here are the two shots scaled to the same size, for an easier comparison:
Standard Definition
High Definition
The last shot clearly shows HD's better picture quality, but ironically the newscaster actually looks a bit better and younger in the SD shot, since the blurriness of SD masks wrinkles and imperfections, while HD hides nothing. (I'm definitely not the first to note this irony)
Mac Mini Media Center
Last week I finally caved to peer pressure and got cable TV installed. Instead of actually watching any TV shows, I went right to work on getting the TV signal hooked up to my computer so that I could record and watch TV on it.
Unfortunately my computer is very loud and heats up my room whenever it's on, so I couldn't imagine leaving it on all the time in order to record TV shows. So I looked around for a small & quiet, yet still somewhat powerful computer. I decided to get one of the new Intel Mac Minis:
So far it has been pretty good. It has its pros:
- Small
- Quiet
- Intel Core Duo processor
- DVI & digital audio out
and cons:
- Weak integrated graphics
- No CD eject button
- Some of the hardware doesn't work under Windows
- No expansion capabilities (i.e. for a TV tuner)
Surprisingly, it was fairly easy to install Windows XP Media Center Edition 2005 on it. I only had a couple of problems:
- I had to burn my own install DVD since Apple's Boot Camp software only likes XP Home & Professional
- I hit the infamous and deceiving "Setup cannot find the EULA" error message, which was caused by the large hard drive getting formatted incorrectly by Mac OS X, so I had to re-partition it by hand
For the TV tuner I got a Hauppauge Win-TV-PVR-USB2-MCE:
I thought this would be a good tuner (even though it's USB), but unfortunately I was disappointed. The video quality is noticeably blurry when compared to component output from the cable box. I haven't figured out yet whether it is the fault of the RF encoder on the cable box or the USB tuner, but it could probably be either one (or both).
The tuner quality was not supposed to be a problem in either case, since I was planning to grab the raw digital video directly off of the cable box using Firewire and Tim Moore's set-top box controller software (recommended by my friend Mike). Unfortunately that plan didn't work out so well either, because Comcast gave me the new cheapo Motorola DCT-3412 STB, instead of the good DCT-6412, which included an MPEG2 encoder and could output any channel over Firewire:
So I can only record analogue channels using the blurry tuner, although digital (and HD) channels should work fine over Firewire, once the kinks are all worked out.
Ultimately it didn't work out as well as I had hoped, but it should still be OK since I can always record analogue shows on the Comcast box and watch them there. Here's a picture of the final 'Mac Mini Media Center':
And here is a screenshot at 720p (linked to full version):
Osiris
I've been asked a few times for a copy of Expedition: Osiris, an educational computer game I worked on while in college. Unfortunately some of the images of Egyptian artifacts that are in the game are copyrighted by the university, so the game cannot be distributed publicly. But, I did get permission to create a "public domain" version of the game, as long as all the artifact images were obscured. Today I finally got around to doing it. Here are download links: (they are about 17 MB each)
- Osiris for Windows (Installer-less version)
- Osiris for Mac OS X (PPC only, sorry)
The system requirements are pretty modest: a 1 GHz processor and a 32 MB video card should play the game just fine.
Here is a medium quality WMV video of me playing the game for a few minutes: Osiris Video. It's a big file but it should stream OK. Here's a low-quality YouTube copy:
The purpose of the game is to teach the basics of a freshman 'Archaeology 101' class. You play the role of a college professor who organizes an Egyptian dig and are supposed to learn how to do the following things:
- Acquire funding
- Create a team of graduate students, specialists and local workers
- Manage the digging process to maximize efficiency and minimize artifact breakage
- Fend off attacks from mummies, crocodiles, scorpions, thieves and evil genies
- Manage team morale and energy while keeping within the budget
- Interpret your findings
- Publish your results in respectable journals to increase your prestige
Here are a couple of screenshots:
Setting up the team
Managing the dig
FSAA mini-benchmark
Have you ever looked at the FSAA settings in the control panel for your graphics card and wondered what the real visual difference is between them?
I was curious myself and decided to do a mini benchmark test. I pulled up a game I wrote a while ago called "The Adventures of Bruto" where you fly around as a dragon and fend off a naval attack. All of the graphics in the game are vector images, so it is a good visual test case for FSAA:
I took screenshots of the game at each FSAA setting level for a comparison. Here are closeups of the castle at 0x, 2x, 4x and 8x:
0x
2x
4x
8x
Overall the screenshots seem to confirm the idea that "more is better" when it comes to FSAA, but once you get past 2x the improvements don't seem to be that noticeable. I'll probably leave games on 2x or 4x and bump up other settings like model/texture detail if I need to make a tradeoff.
Car mods
One nice feature of modern Volkswagen (and Audi) cars is that their electronics systems are wired up using the Controller Area Network (CAN) protocol. This makes it very easy for the VW dealers and technicians to hook up their diagnostic computers to the cars and run tests and change car settings using simple PC software. Fortunately for us, it also makes it easy for enthusiasts and hobbyists to plug into their cars, tweak settings, and re-enable features that VW 'forgot' to enable (and to disable annoying features).
The first thing I needed was a USB-CAN cable so that I could hook my laptop up to my car:
Once I got that (thank you, internet), I hooked it up to the car:
It attaches underneath the steering wheel:
Naturally Volkswagen does not give away its diagnostic software for free (they would lose money if people could diagnose cryptic "Service Needed." messages by themselves), so I used the "VAG-COM" software made by the enthusiasts over at Ross-Tech. It's actually pretty good software (even though it looks a bit amateurish). Here are some screenshots:
There were literally hundreds and hundreds of options that could be modified. I was afraid to modify most of them without doing more research (especially ones dealing with things like engine timings and the air-fuel mixture). But, I was able to find and fix most of the settings that had been annoying me:
- Disable the annoying "Beep!" whenever I lock the car (I switched it to flash the tail-lights instead).
- Re-enable the Daytime Running Lights (DRLs). For some reason the VW dealer had disabled this feature without telling me. Now that I have had the DRLs on for a while, I think I see why they did that. It does get rather annoying that it's essentially impossible to ever turn off the headlights.
- Switch the DRLs to use the fog lights instead of the main beams (I eventually switched this back)
- Enable the option to open and close the windows from the remote.
- Enable the option to open/close the sunroof from the remote and the keyhole in the door.
- Force the 'unlock' button on the remote to unlock the passenger side door as well (by default you have to push it twice and hold it)
- Stop the car from automatically locking itself when the trunk door is closed.
Most of these "convenience" options are disabled on purpose (or not made available in the in-dash menu system) by Volkswagen in order to cripple the car. The GTI is essentially the same car as the Audi A3 (VW owns Audi), so they needed to create artificial reasons for people to pay thousands of extra dollars for the A3, even though it has exactly the same engine, transmission, chassis, and in-car computer.
I wasn't able to fix a couple of things I wanted (such as the option to have the passenger-side mirror automatically tilt down when going in reverse), but overall I am pretty happy with how it turned out
LEGO Robot
A few weeks ago I was at the mall and I walked by a LEGO Store. I had heard of these, but I did not realize that there was one nearby. Naturally, I had to go in. When I came out, I had $200+ worth of LEGOs, and a membership in their "Loyalty Discount Card" program.
The most interesting thing I got was a Mindstorms kit. The Mindstorms kit lets you build little LEGO robots out of electric motors, wheels, gears, and things like that. Somehow I missed out on them when I was a kid, but I have them now.
I always wanted to make a wireless rover bot that could drive around the floor and take pictures of things. I was able to make a robot like that in college, but it had a bunch of wires hooked to it for power and control, so it wasn't as cool as it could have been. Now, with the Mindstorms kit I realized I had everything I would need. I could build a little robot out of LEGOs and attach my cell phone to it. The cell phone would direct the robot and send pictures back to my laptop, where I would be controlling the whole thing.
It ended up being more difficult than it sounded, primarily because the LEGO computer could only communicate via infrared, and it was a proprietary protocol (not IrDA), so the IR port on my cell phone would not work. I solved the problem by ripping the IR PCB out of the Mindstorms transmitter, attaching it to a handy Bluetooth serial port, and hooking it up to a RC car battery pack. Unfortunately the IR transmitter required 9V and the Bluetooth receiver required 5V, so I had to add a regulator into the mix, but it turned out OK:
Now my phone could communicate wirelessly with the LEGO controller over Bluetooth. Luckily the protocol had already been previously reverse-engineered by a Stanford student with far too much time on his hands, so I didn't have to do that too.
The next thing to do was to build a robot that could house the battery and hold the cell phone up. I wanted it to be able to turn around and rotate in place, so I came up with a 3-wheeled design:
It ended up being a bit top-heavy, but it works pretty well.The last thing to do was to get a video-conferencing program to run on the phone and transmit video back to my laptop. I figured this would be the easiest part of the project, but it ended up being the most difficult, because I had to write my own by hand. I was shocked to find that there were no Pocket PC video conferencing programs that worked with Windows Mobile 5.0 over WiFi. Microsoft Portrait was almost exactly what I needed, but unfortunately it had not been updated in several years and did not work with my phone's camera.
I started from an SDK sample that captured JPEG images and made a little program that sends a stream of images to a PC over WiFi. It's a bit slow since it doesn't use a real video codec, but it's still surprisingly fast. It updates at about the speed of a USB webcam. Here's a screenshot of the PC half of the software:
Finally I had everything in place and was able to drive the robot around and see where it was going from my computer. Awesome!
Here is a video of me driving it around:
Fast pictures
After my previous post I realized that I forgot to include pictures of the 'fast', which is (arguably) one of the best features of the GTI.
Volkswagen ads claim "A 'fast' comes standard on every GTI," so when I got the car I was expecting the fast to come inside of it. Needless to say, I was disappointed to learn that I would get it in the mail in "4 to 6 weeks". Luckily I got mine a bit 'fast'er than that. Here is a picture:
It's made of very shiny plastic, which seems to be different from the more matte-looking material used in the TV ads. Its arms and legs rotate and it has a set of interchangeable tails:
Overall it's pretty cool. Every car should come with tiny plastic representation of its Freudian id. 🙂
New Car
In April I got my tax refund back and found that I had enough money to buy a new car. I had been planning to do this for a while, since my current car was getting a little old (OK, maybe more than a little). If you aren't familiar with it, my old car was a 1984 Buick Century:
It was a good car, but it had recently started to show its age. The brakes were getting sticky, the engine would often putter out when going in reverse, and I was a bit worried about the safety (no airbags, untested seat belts, very old body designed before strict side-impact test requirements, etc..). Ultimately I was worried that if I had any problems with it, I might have to pay far more than the car was actually worth in order to repair it. So it was time to get a new car.
If I had infinite money, I might have liked to get a new BMW M6, but that was a little bit out of my price range. I narrowed my search down to these criteria:
- Fast
- Small
- Good gas mileage (for a non-hybrid)
- Not too expensive
Ultimately I decided on the new 2006 Volkswagen GTI. The GTI is basically a high-performance version of the VW Golf (like the GLI is a high-perf Jetta). The newest model has a new 2.0L turbocharged engine, and the "Direct-Shift Gearbox" (DSG), which is a dual-clutch automatic transmission that can be used in manual mode with the shifters on the steering wheel.
You might recognize the new GTI from the "fast" commericals on TV, in which an evil little rabbit coaxes drivers to drive with the windows down, kick their girlfriends out of the car, and disobey police officers (the symbolism of the little rabbit is that the GTI is the 'evil' version of the VW Rabbit (aka Golf)). Here are Google Video links so you can view them in all their glory:
There are also some other ads with Peter Stormare (of Fargo & Seinfeld fame) as a German engineer ("in da house") who smashes up riced-out economy cars and replaces them with GTIs. I didn't like those ads as much.
So far the GTI has been pretty awesome. Here's a picture (with a reflection of me thrown in for free):
And some more:
Phone SNES
Last weekend I became distressed that the 500 MHz processor in my cell phone (i-mate Jasjar) was going to waste for most of the day, so I decided to do something about it. I searched around a bit and came across PocketSNES, a Super Nintendo emulator for Pocket PCs (in a strange twist of fate, PocketSNES is maintained by somebody who works for the same company I do). When I was a kid, I was (still am?) a huge SNES fan, so this sounded perfect.
Unfortunately PocketSNES was built for PocketPC 2003 (not 2005), and was hard-coded everywhere for portrait-mode 240x320 screens. After fixing a lot of bugs and recompiling with the latest SDK, I was able to get it to work in 480x640 mode:
Now it was more or less usable, but it was very slow. I debugged it and discovered that Windows Mobile 5.0 was using an emulated framebuffer for GAPI games, which was slowing everything down considerably. After poking various memory addresses (and crashing the phone several times - so much for Windows CE memory protection..), I found that the video memory for the Intel PXA embedded video begins at virtual address 0xA87AA000, and is laid out linearly (480x640x16). Replacing the GAPI code with direct video memory access and turning on compiler optimization made PocketSNES run quite fast (even the sound worked pretty well).
Now the only problem was that it was a huge pain to play using the little on-screen keypad. Using the phone's keyboard didn't work too well either since it had a hard time accepting multiple simultaneous button presses. After some more searching, I came across the Chainpus BGP100 Bluetooth gamepad (yeah, they need a new name for it):
It looks hideous because it's designed to fit around a cell phone (my phone was too big). It was surprisingly easy to set up and associate it with the phone using Bluetooth. The software for it, on the other hand, was very poorly implemented and translated. It had also not been recompiled for Windows Mobile 5.0 either. As a result, there was almost a 1-second delay between a button press on the gamepad and when it was recognized by the game (this was mainly because PocketSNES was using 100% of the CPU). Unfortunately the source code was not available, so I had to re-implement its functionality by hand in order to fix that problem. The gamepad implements the Bluetooth Serial Port Profile (SPP), and it sends sequences of 3 bytes for each button press & release event, so it was actually extremely easy to work with. I just had to create a virtual COM port using the Bluetooth control panel, open the 'file' COM3 and read bytes from it when it was input time.
When that was all done, I was able to play at a comfortable distance from the phone:
This should be very useful for boring meetings at work 🙂
Here's a video:
Welcome
Hello, and welcome to this blog. Introductory posts are always a bit awkward, so as an attempt to take the easy way out I decided to structure this one as a FAQ.
Who are you?
I’m a computer programmer living in the Seattle area.
Why did you create this blog?
For a couple of reasons:
1. I was dissatisfied with the current Google results if you search for my name.
2. I figured I would be able to post some stuff that people might find interesting.
As for reason #1, here’s a link so you can track my progress: Google results for ‘Eric Faller’. As of the date this was written (May 2006), the results include a mishmash of random things:
- The horribly out-of-date homepage for a club I used to run while in college.
- An old friend’s web site for a computer game we used to work on.
- Various other web pages dealing with old school projects.
- The web site of a French dude with the same name as mine (rapidly gaining on the #1 spot).
Fortunately none of the results contain anything too embarrassing, so I’m currently more or less OK. But, I’m fully aware that the first thing that modern people do when meeting (or dating) somebody new is Google them. So, obviously it can’t hurt to have some sort of positive influence over the results. Plus, I have found that reading the archived posts of somebody’s blog is a good way to quickly learn a lot about the person and avoid potentially dangerous conversation topics (“ooh, well when I made that comment about people from the East Coast, I meant everybody except people from New York, you see...”).
As for reason #2, it will be up to you to decide if my posts are actually interesting. I’ve read a good number of blogs so I hope I know what to do. I’ll try to avoid posting boring stuff (“Today I ate cheerios for breakfast, went to work, came home and went to bed”), cryptic stuff (“Here’s a picture of the back of Joe’s head,” (no explanation of who Joe is)), pompous stuff (“Obviously the opening brace goes on its own line – anybody who thinks otherwise is an idiot”), and lazy stuff (“Does anybody know what the website for the IRS is? Post a comment if you know”). My goal is to post more-or-less regularly on a variety of topics, while keeping the content interesting (so far I have learned that pictures = good, and spell checking = good). We’ll see how it goes. If you see a post that sucks, write a comment that says “This post sucks” and I’ll get on it (obviously, more constructive feedback helps as well).
So basically this is all about you and your ego, isn’t it?
Yep, pretty much. Isn’t that the whole idea behind blogging? 🙂
It looks like this blog is running on WordPress?
I looked at a variety of blog hosts/software packages and ultimately chose this one for a couple of reasons:
- It’s free, and there are no ads (always good).
- The provider can easily be switched - don’t have to worry about it getting bought out by some megacorp.
- It’s totally customizable: I can set the style to whatever I want, get rid of any annoying “Powered by Blah Inc” thingies, and if I wanted to it’s easy to write a little PHP widget for the sidebar that shows the weather in Turkey (for example).
You know, Real Programmers write their own blog software by hand. In frickin’ assembly.
Yeah, I know. I started out by mocking up something in ASP.NET, but as I was attempting to write an RSS library by hand, I thought to myself, “NIH syndrome!” and gave up. It probably would have taken a few weeks or months (of my spare time) to implement half the features that every other software package already has, and I realized that all that time could be better spent doing something fun. So that’s the story: basically, I’m lazy.
What's that picture at the top?
That's a picture of my desk. I couldn't think of anything better. Plus, it's a pretty hot-looking desk.
I had some other questions too, but I forgot what they were since you talk so much.
Sorry about that. If you have any questions or suggestions for posts, feel free to leave comments!
- Eric