- I’m a science fiction geek. My favorite Star Trek series is The Next Generation and I’ve seen every episode at least twice. I also like Star Wars and Return of the Jedi is finishing up on my TV as I write this. I’ve even gone as far as to draw up deck plans for starships… Snow Crash by Neal Stephenson is one of my favorite books.
- My favorite genre of music is Country, much to the chagrin of my family and my co-workers. I do also like Classic Rock and some Oldies, so I can usually find something mutually pleasing to the people around me.
- Tests show that I’m allergic to peanuts, but I’ve never had a problem eating them. My kids, however...
- My family is very involved politically, and I have some strong political convictions, though I’m not very vocal about them... usually.
- I would play Rock Band until my arms fell off if I was ever uninterrupted for a long enough period. I never am though (darnit).
- I used to play first-chair alto saxophone in the high school band… while in elementary school. I’ve done solos and performances. I still have my sax and could probably play it, but not very well anymore.
- I’ve driven 157mph. In a car. On the road. In real life.
- I’ve lived completely on my own since I was 19, except for a few months living with an aunt and uncle while looking for a place after moving to CO.
- I’ve slept in the bottom of the Grand Canyon and on 14,000 ft mountain peaks in Colorado.
- I almost never dream while sleeping.
- Unlike my dad, mom and brother, I don't wear glasses or contacts. My vision is 20/15.
- I started programming computers in BASIC in the third or fourth grade. I got my first C compiler before graduating elementary school. I would design simple games with my brother and then write them. One early Christmas I painstakingly programmed several Christmas carols to play over the 3-voice music synthesizer on a TI-99/4a. My whole extended family was present for the concert.
- I love cycling and enjoy commuting to work by bicycle when I have the time.
- A friend and I nearly died climbing down cliffs while lost in the Gila Wilderness of New Mexico. My Ham Radio was useless in the mountains. We had to abandon our equipment and wade through a torrent of snow melt runoff. After finding our way to a highway, we had to hitchhike for 17 miles to get back to my car, which had a flat tire.
- I’ve worked at McDonalds, CompUSA, an indoor minigolf place, and as a self-employed consultant.
- My dad, mom, sister and brother all have a college or trade degree. I don’t, though not for lack of trying. I just kept getting hired away from school...
- I’ve been to Mexico several times and Canada, but I’d really love to see parts of every other continent.
- I’ve been skydiving and loved it. If I were independently wealthy and didn’t have kids, I’d make a hobby out of it.
- My love of electronics goes hand-in-hand with my love of computers. In elementary school, I walked around with a 40-pin IC in my pocket. I etched my own circuit boards and built an adjustable power supply in junior high. I built a turbo timer and air/fuel ratio indicator for my Supra. I was the only kid I knew with an o-scope.
- I’ve logged a few hours towards my private pilot’s license. I’d love to complete it despite the impracticality.
- My faith in Jesus Christ has affected nearly every part of my life in some way.
- When I proposed to my (now) wife, I arrived 3 hours before I was supposed to, snuck up behind her and surprised her while holding the open ring box. When she whirled around she knocked the ring out of my hand. I had to crawl around on the floor for a few minutes to find it. We’ve been married eight years as I write this.
- I had lunch with Curt Schilling of the Boston Red Sox when he was interested in having me join the team at his game studio, 38 Studios. Good guy, but I respectfully declined.
- I have a pencil stab wound in my hand that is still visible after 15 years.
- I collect Ultimate Collector Series LEGOs. The models in my office at work total over 15,000 bricks alone.
31 January 2009
Meme'd
Several people have tagged me with the "25 things" meme, so I figured I'd satisfy the adoring masses:
12 January 2009
UOForums Interview
UOForums asked me for an interview a while back. I finally obliged:
What has been your most memorable accomplishment in your career?
Making Technical Director before 30? :) Getting hired by Origin is probably the most memorable accomplishment as it was my first gig in the game industry. It was an amazing experience: I got to meet and work with the people behind the names on the forum that I idolized. The whole experience was surreal.
01 January 2009
Tsk, tsk, Microsoft
This is awesome.
It goes without saying that I'm quite happy with my iPod Touch and iPhone, neither of which locked up at 12:01am yesterday.
Thousands of Zune portable media players made by Microsoft Corp. suddenly froze up early Wednesday, Dec. 31, labeling Internet wits to label the phenomenon "Z2K."
It goes without saying that I'm quite happy with my iPod Touch and iPhone, neither of which locked up at 12:01am yesterday.
21 December 2008
Good-Bye T-Mobile (and Good Riddance)
I just received a $446 bill from T-Mobile. To say that I'm disenchanted with T-Mobile would be an understatement.
I suppose I should rewind a little bit. I was a T-Mobile customer for over five years. Back in 2003 I signed up with T-Mobile because I was moving to Austin, TX to work for the now-defunct Origin Systems and they had the best plan for me at the time. My wife and I mostly use our cell phones to call each other, so the cheapest no-frills family plan usually suffices for me.
Fast forward to 11/27/2006. I was sick of using the bottom-of-the-barrel free no-camera monochrome Nokia phone that I got for free when signing up in 2003. My original two-year contract had long since expired. Verizon was offering the inexplicably popular RAZR phone for some ridiculously low price. However, having been a loyal T-Mobile customer for over three years, I decided that I'd give them the chance to beat Verizon's deal and compete for my business. The "Customer Loyalty" representative that I talked to jumped at the opportunity. Not only did they give me better RAZRs than Verizon was offering at the same price (and the same two-year committment), he also changed my phone numbers and gave me some text messages for free, waived all of the upgrade fees AND put me on an "unlisted" family plan that was slightly cheaper. Wow! That's customer service!
And then followed four months of hell.
They sent me the wrong phones. They charged me full price. They wouldn't reimburse me to ship them back. Every representative that I talked to showed a new previously-unheard-of level of incompetence and screwed something else up, making it all the more difficult to explain my plight to the next representative. Untold hours on the phone forever lost arguing with people, explaining my situation and fighting to get my bill fixed and figured out. Pages and pages of notes with a myriad of representatives' and supervisors' names weaving a trail of regret and resentment. For four months.
Had it not been for that damned two-year contract I would've flushed them right then and there, but eventually the dust settled and things were worked out.
Two years later, my contract was nearing its end, though I didn't know the exact date it was up. I once again figured that I'd give T-Mobile every opportunity to keep my business. I went into their stores looking at various Blackberrys and the G1. I was interested in a phone that would give me access to my corporate email and the Internet. I was asking for a little bit better price on the phone and the plan. They wouldn't budge. I called "Customer Loyalty" again and they were resilient against my requests. I told them that I really wanted the iPhone and was willing to go to AT&T unless T-Mobile would give me a better deal but instead got stuck talking to some blatherskite who insisted on hammering me on the irrelevant topic that the iPhone was available through T-Mobile--in Germany. I feel that I gave T-Mobile every opportunity to keep my business. Suffice to say, now I'm with AT&T and proud to walk around with my Apple iPhone (I have an iPod Touch too, but adding a phone to it is just brilliant).
Now, about this $446 bill. You'll notice that I upgraded (and started a new two-year contract) on 11/27/2006. I switched to AT&T on 11/23/2008. Four days away from two years and T-Mobile slaps me with two $200 early terminations fees--one for each of my two lines. Four days! At the very least paying the whole amount for my last month would fulfill my obligation to the two-year contract.
Needless to say, I immediately got T-Mobile customer service on the phone. Despite the lividity coursing through my veins I managed to remain level-headed. The "Customer Loyalty" representative offered to cut the $200 per-line fee down to $50 per-line. "That is unacceptable," was my reply. Her next response was cut short as I quipped, "I'll need to speak to your supervisor." The merry Christmas tunes that filled my ear while I was waiting filled me with a sense of irony. Finally the woman came back and told me that her supervisor was busy on another call but she could finagle it so that I'd just finish paying for the full final month, dropping $384 from my bill and returning sanity to the evening. Another 30 minutes of my life wasted on the phone with T-Mobile to combat utter, inane stupidity.
To T-Mobile, if you happen to be listening:
To everyone else, I'd have to recommend against T-Mobile. By all means, use a different cell phone provider. If you're with T-Mobile now, get out as soon as you can. If you're not big on data, you can probably save a bundle by buying individual minutes and not having a plan.
I suppose I should rewind a little bit. I was a T-Mobile customer for over five years. Back in 2003 I signed up with T-Mobile because I was moving to Austin, TX to work for the now-defunct Origin Systems and they had the best plan for me at the time. My wife and I mostly use our cell phones to call each other, so the cheapest no-frills family plan usually suffices for me.
Fast forward to 11/27/2006. I was sick of using the bottom-of-the-barrel free no-camera monochrome Nokia phone that I got for free when signing up in 2003. My original two-year contract had long since expired. Verizon was offering the inexplicably popular RAZR phone for some ridiculously low price. However, having been a loyal T-Mobile customer for over three years, I decided that I'd give them the chance to beat Verizon's deal and compete for my business. The "Customer Loyalty" representative that I talked to jumped at the opportunity. Not only did they give me better RAZRs than Verizon was offering at the same price (and the same two-year committment), he also changed my phone numbers and gave me some text messages for free, waived all of the upgrade fees AND put me on an "unlisted" family plan that was slightly cheaper. Wow! That's customer service!
And then followed four months of hell.
They sent me the wrong phones. They charged me full price. They wouldn't reimburse me to ship them back. Every representative that I talked to showed a new previously-unheard-of level of incompetence and screwed something else up, making it all the more difficult to explain my plight to the next representative. Untold hours on the phone forever lost arguing with people, explaining my situation and fighting to get my bill fixed and figured out. Pages and pages of notes with a myriad of representatives' and supervisors' names weaving a trail of regret and resentment. For four months.
Had it not been for that damned two-year contract I would've flushed them right then and there, but eventually the dust settled and things were worked out.
Two years later, my contract was nearing its end, though I didn't know the exact date it was up. I once again figured that I'd give T-Mobile every opportunity to keep my business. I went into their stores looking at various Blackberrys and the G1. I was interested in a phone that would give me access to my corporate email and the Internet. I was asking for a little bit better price on the phone and the plan. They wouldn't budge. I called "Customer Loyalty" again and they were resilient against my requests. I told them that I really wanted the iPhone and was willing to go to AT&T unless T-Mobile would give me a better deal but instead got stuck talking to some blatherskite who insisted on hammering me on the irrelevant topic that the iPhone was available through T-Mobile--in Germany. I feel that I gave T-Mobile every opportunity to keep my business. Suffice to say, now I'm with AT&T and proud to walk around with my Apple iPhone (I have an iPod Touch too, but adding a phone to it is just brilliant).
Now, about this $446 bill. You'll notice that I upgraded (and started a new two-year contract) on 11/27/2006. I switched to AT&T on 11/23/2008. Four days away from two years and T-Mobile slaps me with two $200 early terminations fees--one for each of my two lines. Four days! At the very least paying the whole amount for my last month would fulfill my obligation to the two-year contract.
Needless to say, I immediately got T-Mobile customer service on the phone. Despite the lividity coursing through my veins I managed to remain level-headed. The "Customer Loyalty" representative offered to cut the $200 per-line fee down to $50 per-line. "That is unacceptable," was my reply. Her next response was cut short as I quipped, "I'll need to speak to your supervisor." The merry Christmas tunes that filled my ear while I was waiting filled me with a sense of irony. Finally the woman came back and told me that her supervisor was busy on another call but she could finagle it so that I'd just finish paying for the full final month, dropping $384 from my bill and returning sanity to the evening. Another 30 minutes of my life wasted on the phone with T-Mobile to combat utter, inane stupidity.
To T-Mobile, if you happen to be listening:
- Either allow "customer loyalty" more authority to please customers (especially on plan prices) or lose them.
- Pro-rate the early termination fee or at the very least, change your system so customers who are within the billing cycle of their end-of-contract just pay out the rest of their month to fulfill their obligations.
- Recognize the Charlie Foxtrot cases and assign a single person be your customer's advocate and to sort the problem out. Dealing with one competent person who understood my problem after upgrading in 2006 would've been very nice, but alas, it was not so.
- You can do better than the G1. It doesn't even natively support Microsoft Exchange email.
To everyone else, I'd have to recommend against T-Mobile. By all means, use a different cell phone provider. If you're with T-Mobile now, get out as soon as you can. If you're not big on data, you can probably save a bundle by buying individual minutes and not having a plan.
19 December 2008
Memory-Mapping Files for Fun and Profit
It's amazing that I still meet programmers who don't understand the benefits of memory-mapping files. If you're unaware of what that means, let me explain it a little bit. Traditional reading from a file involves several system calls: opening the file, seeking to the desired position and then reading or writing to the file. System calls can be slow as the operating system may have to switch to kernel mode and call into drivers to perform the IO operations. Memory-mapping a file usually has just one call, and then you are able to access the file as if the entire file had been read into a contiguous block of memory. But here is the greatest benefit (at least to me as a MMO server programmer): all processes accessing a file can use the same virtual memory.
Take the EverQuest II server for instance. The (binary) data file that describes nearly everything except collision geometry runs about 460MB. Every zone server uses that same file and we run several zone servers on one physical machine. With memory-mapping, the OS uses 460MB of virtual memory (assuming the entire file is used) just once and all zone server instances can use that same virtual memory without having to read the file into each individual instance.
Like anything, there are drawbacks. Most modern operating systems use demand paging, so if you try and access a page of memory representing a part of the file that hasn't loaded yet, a page fault will be triggered and the OS will have to perform kernel-mode IO to load that page from the file. Depending on how much virtual memory your application has access to (and how spread out your accesses are), this could potentially trigger a very high number of page faults.
Another drawback is address space. A 32-bit application will only have access to less than 4GB of address space (Windows has a 2GB address space by default). If you map entire large files into memory, you are consuming this address space. This has become more and more important on the EQII servers. As I mentioned, our data file is 460MB. Since shortly after the game launched, this file has always been fully mapped into memory. That was fine back then as it was much smaller than it is today. Now, after launching our fifth expansion, the data file is now nearly one quarter of our allotted address space (and not getting any smaller).
Fortunately, the APIs for Linux (
Here are some of the design goals for my partial memory-mapping implementation:
This nifty little piece of technology is currently running on our live game servers and doing very well. Instead of 460MB, we now keep a pool of about 20-30MB mapped from the file and generally enjoy a 0.1% or lower miss rate. Best of all, we still have all the benefits of memory-mapped files.
Take the EverQuest II server for instance. The (binary) data file that describes nearly everything except collision geometry runs about 460MB. Every zone server uses that same file and we run several zone servers on one physical machine. With memory-mapping, the OS uses 460MB of virtual memory (assuming the entire file is used) just once and all zone server instances can use that same virtual memory without having to read the file into each individual instance.
Like anything, there are drawbacks. Most modern operating systems use demand paging, so if you try and access a page of memory representing a part of the file that hasn't loaded yet, a page fault will be triggered and the OS will have to perform kernel-mode IO to load that page from the file. Depending on how much virtual memory your application has access to (and how spread out your accesses are), this could potentially trigger a very high number of page faults.
Another drawback is address space. A 32-bit application will only have access to less than 4GB of address space (Windows has a 2GB address space by default). If you map entire large files into memory, you are consuming this address space. This has become more and more important on the EQII servers. As I mentioned, our data file is 460MB. Since shortly after the game launched, this file has always been fully mapped into memory. That was fine back then as it was much smaller than it is today. Now, after launching our fifth expansion, the data file is now nearly one quarter of our allotted address space (and not getting any smaller).
Fortunately, the APIs for Linux (
mmap) and Windows (MapViewOfFile) allow an offset and a length to be specified. This opens the door to partial memory-mapped files. However, there are some caveats. The offset cannot be just any offset; it must be aligned. On Linux the offset must be a multiple of the page size (found by getpagesize), but on Windows the offset must be a multiple of the "allocation granularity" (found by calling GetSystemInfo). The length of the mapping usually does not need to be aligned, but if you're planning a generic partial mapping solution, it's probably best to use the same alignment. Another thing to consider is that mapping parts of files as you need them will spread them all over your address space; you cannot assume that page 1 and page 2 of a file will be placed next to each other in memory if you map them separately.Here are some of the design goals for my partial memory-mapping implementation:
- Phase sections out as they are no longer used (start-up data is only needed at start-up)
- Reduce thrashing (phasing out a section and then mapping it back in)
- Similar performance to the current full-file implementation
- Reduce memory usage!
- Ability to permanently map/unmap sections (i.e. sections that don't phase out)
- Ability to automatically re-size sections on demand
This nifty little piece of technology is currently running on our live game servers and doing very well. Instead of 460MB, we now keep a pool of about 20-30MB mapped from the file and generally enjoy a 0.1% or lower miss rate. Best of all, we still have all the benefits of memory-mapped files.
09 December 2008
(Country) Rock Band!
Oh my gosh:
Ok, I probably won't, but I'm still excited. Harmonix, if you're listening: MOAR PLZ! KTHXBYE
Consisting of five tracks, it'll be out on December 18, and will feature tracks by Brad Paisley, Brooks & Dunn, Dierks Bentley, Miranda Lambert and the Dixie Chicks. Pricing is fairly standard, at $2/160MS for a song or $8.50/680MS for all five.As I've stated before, I love Country Music. Maybe I'll play hooky on December 18th.
Ok, I probably won't, but I'm still excited. Harmonix, if you're listening: MOAR PLZ! KTHXBYE
30 November 2008
/resurrect Xbox-360
I sat down on Saturday to enjoy some Lego Star Wars with my son, but discovered a different feeling welling up inside me instead: dread. My Xbox-360 had fallen victim to every Xbox owner's nightmare--The Red Rings of Death.
He opted to play Super Mario Galaxy on the much more reliable Wii instead, while I googled everything I could about the RROD.
It's interesting to note that Microsoft extended the warranty on the 360 to 3 years. However, I purchased my xbox used from a friend and don't have the receipt from the original purchase. Additionally, the date of manufacture shows as 11/03/2005, so warranty repair seemed like a non-option to me. Plus, I've had friends send their xbox in for warranty repair and it's taken them over a month to get them back. I'm impatient when it comes to gaming! But if you are reading this and have a xbox that is still under warranty, please consider the options carefully before breaking that silver warranty sticker! There is no going back!
I found a guide that provided an at-home remedy for repairing the RROD. A good theory about what causes the RROD is a design flaw leading to flexing the motherboard. This warping leads to microscopic breaks in the tiny surface-mount solder connections exacerbated by numerous heat cycles. The guide directs you to fix the problem by removing the x-shaped brackets holding the heat-sinks to the CPU and GPU and replacing the mounts with screws from any old hardware store.
I thought, "Eh, why not."
So I tore down my xbox:

Getting the heat-sinks off was a pain, but persistence pays off:

The guide I was using didn't tell me this, but you'll also need a 1/4" socket or nut driver to get the posts out of the heat-sinks.
The next step was to clean off the old thermal paste from the chips so that new thermal grease could be applied:

To do this, I used left-over ArctiClean from my last project of this nature. Using the ArctiClean produced a very high-quality mirror shine from the CPU, GPU and heat-sinks:

I staged my bolts according to the guide, put the washers on the motherboard and applied the directed amount of Arctic Silver 5 (about .5 - .75 the size of a grain of rice) to the GPU right before replacing the heat-sink. I then spread the thermal paste out over the chip with the edge of an old plastic gift (credit) card:

The GPU heatsink was then applied, careful to make sure that I had all screws started before allowing the heatsink to contact the surface of the GPU. I very carefully tightened the screws until they were just snug, but evenly snug. Repeat the whole ordeal for the CPU. Here's what the bottom of the motherboard looks like now without the x-brackets:

Note the eight hex cap screws. I recommend using normal phillips machine screws if you can find them. Unfortunately, my local Home Depot didn't. This was all I could find. Originally I had washers on both sides of the motherboard, but the taller hex cap screws had major clearance problems trying to fit back in the metal case. I had to (carefully) remove each screw, remove the washers on the bottom of the motherboard and then replace the screw. I was very glad that I had only snugged the screws earlier.
According to the guide, at this point you should place the motherboard in the case, hook up the necessities and fire it up without the fans to purposely overheat the system and cause the solder to re-melt back into place. However, when I booted it up at this point, there were no more red rings!

Apparently, between the new fastenings for the heatsinks and the better thermal grease on the chips, the problem was fixed! I finished re-assembling the chassis and decided it was time for a real test. I took it back downstairs and hooked it up to the TV, re-inserted the hard disk and memory card and grabbed a controller.
I played Braid for over a half hour with no problems, though I do wonder how permanent this solution will be. If it does break down again, I'll come back and update.
8/9/2010: After 21 months the RROD have returned. I haven't actually pulled the machine apart again to check it out, but it might be worth buying a refurbished base model at this point!
He opted to play Super Mario Galaxy on the much more reliable Wii instead, while I googled everything I could about the RROD.
It's interesting to note that Microsoft extended the warranty on the 360 to 3 years. However, I purchased my xbox used from a friend and don't have the receipt from the original purchase. Additionally, the date of manufacture shows as 11/03/2005, so warranty repair seemed like a non-option to me. Plus, I've had friends send their xbox in for warranty repair and it's taken them over a month to get them back. I'm impatient when it comes to gaming! But if you are reading this and have a xbox that is still under warranty, please consider the options carefully before breaking that silver warranty sticker! There is no going back!
I found a guide that provided an at-home remedy for repairing the RROD. A good theory about what causes the RROD is a design flaw leading to flexing the motherboard. This warping leads to microscopic breaks in the tiny surface-mount solder connections exacerbated by numerous heat cycles. The guide directs you to fix the problem by removing the x-shaped brackets holding the heat-sinks to the CPU and GPU and replacing the mounts with screws from any old hardware store.
I thought, "Eh, why not."
So I tore down my xbox:
Getting the heat-sinks off was a pain, but persistence pays off:
The guide I was using didn't tell me this, but you'll also need a 1/4" socket or nut driver to get the posts out of the heat-sinks.
The next step was to clean off the old thermal paste from the chips so that new thermal grease could be applied:
To do this, I used left-over ArctiClean from my last project of this nature. Using the ArctiClean produced a very high-quality mirror shine from the CPU, GPU and heat-sinks:
I staged my bolts according to the guide, put the washers on the motherboard and applied the directed amount of Arctic Silver 5 (about .5 - .75 the size of a grain of rice) to the GPU right before replacing the heat-sink. I then spread the thermal paste out over the chip with the edge of an old plastic gift (credit) card:
The GPU heatsink was then applied, careful to make sure that I had all screws started before allowing the heatsink to contact the surface of the GPU. I very carefully tightened the screws until they were just snug, but evenly snug. Repeat the whole ordeal for the CPU. Here's what the bottom of the motherboard looks like now without the x-brackets:
Note the eight hex cap screws. I recommend using normal phillips machine screws if you can find them. Unfortunately, my local Home Depot didn't. This was all I could find. Originally I had washers on both sides of the motherboard, but the taller hex cap screws had major clearance problems trying to fit back in the metal case. I had to (carefully) remove each screw, remove the washers on the bottom of the motherboard and then replace the screw. I was very glad that I had only snugged the screws earlier.
According to the guide, at this point you should place the motherboard in the case, hook up the necessities and fire it up without the fans to purposely overheat the system and cause the solder to re-melt back into place. However, when I booted it up at this point, there were no more red rings!
Apparently, between the new fastenings for the heatsinks and the better thermal grease on the chips, the problem was fixed! I finished re-assembling the chassis and decided it was time for a real test. I took it back downstairs and hooked it up to the TV, re-inserted the hard disk and memory card and grabbed a controller.
I played Braid for over a half hour with no problems, though I do wonder how permanent this solution will be. If it does break down again, I'll come back and update.
8/9/2010: After 21 months the RROD have returned. I haven't actually pulled the machine apart again to check it out, but it might be worth buying a refurbished base model at this point!
Subscribe to:
Posts (Atom)