#1 Tic Tac Toe Site on the Web

I was looking through the access logs for boulter.com this evening and I noticed that my Tic Tac Toe site is still getting a lot of traffic. No wonder, it’s the #1 result for “Tic Tac Toe” on Google.

It’s hard to believe I built this little program nearly TWELVE years ago for a college class. I seem to remember the professor didn’t like it much either because Tic Tac Toe was “too easy”.

The about page is pretty funny:

In the future, I might implement a prettier interface (possilbly use HTML tables)

Wow, HTML tables! That’s pretty advanced stuff for 1995! Since then, they’ve gone from the crux of web page design to the most-hated markup syntax of all time. Everything old is new again, I guess. Somehow I never got around to implementing that pretty interface. Perhaps I can slap some Yahoo! Ads on there to see if it’s worth the effort.

I’m pretty sure most of the traffic I get is from bored 10-year olds, who soon hate me when they realize they can’t win. The emails they send me are often pretty funny. Over the years I’ve collected over 1700 emails. I’ll post some of the best tomorrow.

Ding Dong Beep, the Microwave is Dead

Microwave

I’ve always hated our microwave. It’s big, ugly and old. It was manufactured in 1986, back when I was in 7th grade. Unfortunately, it has always worked well, so justifying buying another one was difficult – until this week.

Midway through the heatup of Anne’s morning tea, it died. Hooray! Time to go shopping.

I asked around at work and got a recommendation for the Sharp R-520LK which looked pretty nice. It was on sale at Best Buy too. We splurged for a Consumer Reports subscription and checked out the ratings there, making a printout to take with us.

We were looking for a model that didn’t require a ridiculous number of keypresses to start the thing, a turntable, decent size, sensor cooking and maybe even a convection feature if it it wasn’t too expensive. A few models also featured inverters which allowed the oven to run at three separate levels, rather than alternating on and off like most do.

Our Saturday goal to go get a new microwave. We first went to Fry’s in Sunnyvale. Strangely, I saw another Yahoo buying a microwave there. After checking out the selection, we went to Sears in Cupertino. Then Western Appliance in Mountain View. Then Costco. Then Circuit City and Best Buy in East Palo Alto (strangely right next to each other, but convenient for comparison shopping). Then back to Fry’s in Sunnyvale. Then Lowe’s and finally Home Depot in Sunnyvale.

Best Buy was the only place where the microwaves were actually plugged in, so you could see how usable they were. Fry’s seemed to have the best selection. Circuit City had none at all. Sears had half of them displayed level with your legs on down, making it awkward to try to look at them. Costco had only 3, but one was the Panasonic 1.2 cubic foot Inverter model, which was a really good deal for a smaller unit at $99.

We ended up going back to Fry’s because we couldn’t remember if we had seen any GE models there. They had very few at Lowe’s or Home Depot too. CR rated them best overall, but they were suspiciously hard to find. The guy at Best Buy said that the Sharps were unreliable and CR agreed, saying almost 1/4 of them were returned. That’s really bad.

Finally, having seen quite a few, we spent 90 minutes looking online. Shipping for microwaves tends to be really expensive so our best bet seemed to be finding one we could buy locally or have shipped to a store. Wal-mart had a great deal on the top-rated GE JE2160 model at $188 + $15 tax. It will be delivered to the store in 7-10 business days. The next best deal was at a place called Etronics for $160 + $36 shipping, but that was for the black plastic model, not the fancy stainless steel model we got that generally sells for $30 more.

The only hesitation we had about ordering one online was that we kinda needed a microwave. Clearly, Man was not meant to live without magic boxes that emit radiation that makes stuff hot. The leftovers are piling up in the fridge. I’ve considered making a quick trip to work to heat things up or maybe getting to know the neighbors a bit. Our egregious inconveniences include having to take out frozen meat a whole day before a making a meal.

Clearly, we’re suffering here. So, in exchange for this valuable shopping advice on microwave ovens, anyone got one to loan for 7-10 business days? 😀

Phoenix: Day 3

This was our last day in Phoenix, so we planned to just do random things we hadn’t gotten a chance to do yet.

Desert Lake

Anne once again tried to put Hyatt Place out of business by raiding the continental breakfast. Our first stop was back to the Giants practice field to see if we could catch them. This time they were there, complaining about running from second to home while walking from home back to second.

Squeezing every last minute out of our hotel, we went back, kissed the plasma goodbye, and had the leftover burger and fries from Fuddruckers. Meanwhile, rain began to pour outside.

Our next stop was Old Town Scottsdale. We quickly realized there are 3 types of shops in Old Town: tourist junk shops, jewelry shops and tourist junk/jewelry shops.

Scottsdale Stadium is only a few blocks away though, so we walked over and found a bunch of fans waiting behind a railing. It was almost 1 pm and some of the Giants players were leaving after their grueling 3-hour practices. Omar Visquel, Giants shortstop came out and signed some autographs while we were there. I wonder how long before those go on eBay.

The rest of the afternoon was spent driving around to downtown and to the Capitol. It was pouring rain a lot of the time, so we decided to head to the airport a bit early to see if we could get home at a more reasonable time.

I was going directly to LA for meetings on Tuesday. Anne couldn’t get a direct flight earlier, so we walked pretty much all around terminal 4 looking for a place to eat. An hour later, the asian place we saw right next to Anne’s gate where we started seemed like the best option. At least we worked up an appetite.

Phoenix was fun, but really exploring any new place is what we like. I think Salt Lake City is calling us next.

Phoenix: Day 2

With Anne feeling better, we decided to go hiking on Sunday. We drove over to Camelback Mountain, where we had been warned to arrive early to avoid the crowds and heat. They were right about the crowds. We spent 10 minutes looking for parking, ending up parking at the closest on-street spot 3/4 of a mile away since the lot was full.

The Steep Part

I’ve done a lot of hiking in the Bay Area, but Camelback is like nothing around here. It’s all rocky and steep. There are well-worn rails up parts of the “trail” which you pretty much have to use to pull yourself up the mountain. At least it was cloudy, so we weren’t too dehydrated. There were a lot of crazy people running the trail in both directions. This was the most scary when they were coming down as they didn’t always have full control of their inertia.

We made it up in an hour and half or so, rested to enjoy the view and headed back down. We heard that taking the approach from the East is a lot easier.

After that, we decided to drive around some more, since we clearly did not have enough energy to do more hiking. We drove over to the fields where the SF Giants practice for spring training. While there were no players there, we knew it was the right place because the grass was immaculate, a hard thing to find in a place when most people’s front yards are dirt and cacti.

Driving some more, we went through the Salt River Indian Reservation. It was a stark contrast from prosperous Scottsdale, just on the other side of the highway. Run-down modular homes were placed on the edge of dusty fields.

We spent a few hours exploring the campus of Arizona State University. It seemed big, but otherwise a nice school.

Then we ended up in Papago Park, home of the Phoenix Zoo, “Urban Fishing”, and the Oakland A’s practice field. Strangely, the Phoenix Zoo was actually called “PHX Zoo”. I noticed Phoenix abbreviated like that in a few places for no good reason. Maybe they just can’t remember if the E or O comes first and avoid it altogether.

Somewhere along the way I picked up geocache find number 4000. Geez, that’s a lot.

Later we found ourselves passing another 7-Eleven and stopped for a Slurpee to rehydrate. The biggest problem with Slurpees is that you tend to get “holes” near the bottom where the end of the straw is. You spend a lot of time trying to consolidate your Slurpee rather than drinking it.

My novel solution to this problem was to – while driving – smack the Slurpee down on the dashboard to get it to settle. Unfortunately I smashed it down on the top of a vent, where the corner shattered the bottom of the cup. It started dripping all over the place. Realizing this was an actual Slurpee emergency, I pulled into the parking lot of, by complete coincidence, another 7-Eleven. I went in and asked if I could just have a replacement cup. The guy didn’t really say anything, so I just walked out with it and saved the day.

South Lake Sunset

After doing a few more caches and checking out a sunset at South Lake (where does all this water come from??), we headed back to the hotel.

Because we’re totally lame and we were tired, we went to Olive Garden. It sounded good and we were right.

One thing I noticed about Phoenix is that they use some strange vocabulary on signs. The sign warning you not to drive over the one-way spikes in the Camelback parking lot said to watch out for the “treadles”. What the heck is a treadle? I had to look it up.

The sign saying not to drink the water at a park warned that the water was “effluent”. “Non-potable” sounds more like “don’t drink this” to me. Effluent? Sounds like affluent. Must be good stuff, drink it up! Or maybe just say “recycled water” or “hey stupid, if you drink this water, you’ll probably get sick”.

And again, what’s so hard about spelling out Phoenix?

Phoenix: Day 1

Waking up on day 1, we still had to decide what the heck we were going to do for the next 3 days. We guessed that one day would be spent driving around, another hiking and another walking around Scottsdale. With Anne still getting over a cold, driving seemed to be the best idea for the first day.

Lonely cactus

Looking at some maps and travel guide websites (free in-room Wifi is a necessity these days), I found the Apache Trail, which is a long and partially unpaved road from Phoenix out to Roosevelt Lake.

It really was a good time. We saw some great scenery, found a few geocaches, and even took our crappy Aveo off-roading a few times. The guys in their trucks towing their ATVs laughed at us.

I always though of Phoenix as a desert city and not a place where one would do a lot of boating, but there were a few lakes up there (all man-made I’m sure) with a fair number of people on them.

We were surprised to see Dunkin’ Donuts in Arizona. If we had more time and didn’t have a free continental breakfast at the hotel, we definitely would have stopped for some Munchkins!

I also learned that a cactus can make a sound. As the wind passes through the needles, it makes a strange whooshing noise. It would be fun to camp underneath one some night.

We drove home the long way, grabbed a Slurpee, and ended up getting dinner at Fuddruckers for some big, satisfying burgers.

Phoenix: Day 0

Last week, people kept asking me what I was doing during the long Presidents’ Day weekend. I said that Anne and I were going to Phoenix. Their next question was “What’s there?”. My response was “I have no idea.” Confused looks were returned.

When we saw the long weekend coming, we figured we should use it to go somewhere fun. We looked at the map and found Phoenix. We’d never been there before. There must be some interesting stuff there, so why not? If nothing else, it should be nice and warm. We had so much fun on our Idaho trip, it would be worth a try in another city.

After getting some advice from Chris (who thanks me daily for getting him OUT of Phoenix), we looked at some hotels in Scottsdale. Finding nothing cheap, I decided to check out Hotwire. It was kinda like gambling to push that “Book” button, knowing only that we would get a 3-star hotel in the downtown Scottsdale area. It turned out to be the Hyatt Place, which was recently remodeled from an Amerisuites. It looked pretty nice.

I used one of my flights earned from traveling back and forth to L.A. every other week for my part of the trip and we used our last CapitalOne miles for the other half. Anne rented a car with Enterprise and we were set.

Friday night out of San Jose was a zoo. Like 90% of the Southwest flights I take, this one was delayed. We wouldn’t get in until 11:30 pm. Remembering we had been stranded once before, I called Enterprise to see what happens if we get there past their midnight closing time. They said we could either come back at 5 am when they reopen, or get a car from a company that’s open 24 hours. Surely, we should choose the latter if needed.

We dashed off the plane in Phoenix and got on the rental car shuttle. The rental car center is like a 15 minute drive away. What’s with that?

I called Enterprise again to make sure they would stay open. By the time we got to their office it was 12:02 am and they were closing up, but still gave us a car.

The car was a crappy Chevy Aveo. It had power-nothing. I can’t remember the last car I drove that didn’t have power windows. It had neither a CD player nor a tape player. The rear brakes were shot. It drove though, so we got out of there and headed to Scottsdale.

Arriving at our hotel, we noticed a lot of limos and loud music outside. It appeared that there were several trendy nightclubs next door. That’s fine, but it was right outside our room’s window. We found that the fan of the air conditioner barely drowned out the thumping bass.

What was very nice was the 42 inch plasma HDTV in our room. It was the first time I’ve been able to spend some time with one of these beautiful displays outside of a store. The Discovery Channel in HD was awesome. It was late though and we had much to see for the next three days, so we went to bed.

5 Dysfunctional Attributes of Good Engineers

I’ve worked with a lot of good engineers and Yahoo! and other places. Recently I was thinking that a lot of the traits that make them great are borderline dysfunctional. Perhaps all good engineers are savants? When hiring, here are the traits I look for.

Good engineers are lazy.
After all, premature optimization is the root of all evil. Good engineers don’t spend their time dealing with things don’t matter and don’t spend time fixing things until they know what’s broke.

Good engineers are selfish.
When an engineer can scratch their own itch, selfishly building products to serve their own needs, they become highly motivated. The hardest part of designing products is figuring out what your customer wants. If you’re your own customer, the feedback cycle is exponentially faster and products mature quicker.

Good engineers are ignorant.
Sometimes all that’s needed to kill a good idea is knowing too much about the problem space. When you know all the existing solutions and all the constraints, you tend to reject new ideas quickly, thinking of 100 reasons they won’t work. Sometimes all it takes is a few tweaks to get around those constraints to solve a problem in a novel way.

Good engineers are paranoid.
If you’re not scared, you should be. There are lots of things to fear about programming, from hackers to bad passwords to accidentally deleting all your web pages. You know what’s really scary to me? While loops. One badly-terminated while loop can run forever and consume an entire server very quickly.

Good engineers are insecure.
Complacency is the death of a good engineer. As soon as you think you’re better than everyone else (you’re not) and stop learning, you start dropping in value. If no one’s reviewing your designs and code and telling you how very wrong you are, you’re never going to get lazy, just not the good kind of lazy.

Of course, taken to an extreme, any one of these attributes could make for a really bad engineer. The good engineers have just a little bit of each.

How about you, are you lazy? How about insecure? Know any paranoid friends? If so, I’ve got jobs for you. Consider it getting paid for your own therapy.

Cat Wars: Day 16

Well, the war has mostly deescalated to border skirmishes. As I type this, I’ve got Pixel laying on top of my leg and Signal on the couch a few feet to the right. That seems like a good thing.

They’re still generally unhappy with each other’s presence though, especially when one of them surprises the other. They have a habit of walking into rooms without looking around a bit first and then suddenly they realize that the other is only a few feet away and must be “attacking” the other one. Dumb cats.

The other day when I got home, I began to pet Signal and then Pixel showed up wanting some attention too. I managed to get them within arms reach of each other so I could pet them both at the same time and they were mostly OK with that. Later I played with them both and at least while they were playing, the seemed to forget they hated each other. When playtime stopped, it was all growling, hissing and chasing though.

Signal seems to have mostly forgotten what they were fighting about in the first place. A few times he’s tried to play with Pixel and was quickly reminded that this was not appropriate behavior.

Something interesting is that Pixel seems to have regressed a bit in his personality, like to when we didn’t have Signal. He’s more playful and needful of attention. I guess that’s because before his “toy” was Signal. Now that he can’t get his aggressions out on another live cat, a feather on a string or a twist tie will do.

They’re not playing or sitting together yet, but it seems like the worst of the hostilities are over. Best of all, there’s been no more bloodshed. I expect all will be back to normal in another week or so.