Browsing posts in: Uncategorized

Outdoor lighting project – controller

The requirements of the control system are pretty simple:

  • Be controlled with a single pushbutton.
  • Support on and off.
  • Turn off the light automatically after a suitable period of time

That’s pretty simple – simple enough that you can do it with an 8-pin AVR controller, like the atTiny12. That programs fine in my STK500 development kit, but on the low-pin-count controllers, many of the pins have shared functions related to programming, so you have to attach/detach them each programming cycle. That’s why I’m using one of the attiny861s that I have left over from another project, where I have plenty of pins. The cost difference doesn’t matter at all in a one-off design.

I spend the usual frustrating time remembering how to set up the programmer so it works. The key to remember is that you need a current build of Atmel’s avr studio so that you can look in the help file to see how to do the wiring. I wasted a couple of hours and almost lost the Magic Smoke before I remembered where to find the information.

The next step is to get the controller configured correctly. Even the simpler AVRs have a ton of options. I’m going to be using one of the timers, so I need to set up the timer registers correctly. In this case, I want a 16-bit counter (set bit 7 of TCCR0A to 1), and I want to divide the 8MHz clock by 256 (set bit 3 off TCCR0B to 1), and so on. All the information is in the atmel data sheet (the 236 page data sheet…) for the controller, but it takes a fair bit of work to get it right.

Or, you can buy a copy of codevision AVR. Not only does that let you write in C rather than assembler, it has a program wizard that lets you use human-understandable settings rather than hex values. So, in this case, you can go into the wizard and say that you want timer 0 to run at 31250 Hz, use a 16-bit counter, and call an interrupt when it overflows, and it will generate the source code (with comments) that does just that. Only two annoying things about it:

  1. It puts all the initialization code at the beginning of main and then the main loop at the end, so you’re constantly having to scroll over that code to get to your main loop.
  2. When you want to update the code, you have to run the wizard and then cut & paste the updated code in the proper place – it can’t fill in the areas you want.

Neither of these are more than a little annoyance. As you can tell I’m a big fan of AVR studio.

So, back to the project. First, we need a way to handle the turning the lights off, and for that we need a timebase. We’re going to use 10 Hz (for reasons that will become apparent later), and it would be most convenient to get an interrupt at that rate. Since the interrupt will happen whenever the 16-bit timer overflows, we need a timebase where the count fits in 16bits (ie  65535). Looking at our options, we see that we can get 8 Mhz / 256 = 31250 Hz as our timer frequency. If we can send an interrupt every 3125 counts, we’ll have our 10 Hz. So…. We take 65535 – 3125 = 62410 = F3CA, and initialize the counter to that value after every interrupt.

And that gives us 10Hz. Or, actually, it gives us 10Hz +/- about 10%, which is the factory calibration tolerance of the internal oscillator. It’s possible to get a better calibration than this by writing to the OSCCAL register – Atmel claims you can get +/- 1% through that approach – but it’s not something needed for this application, so we’ll just stick with whatever we get.

Now that we have that, we can write our interrupt service routine.

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
        // Reinitialize Timer 0 value – 1 second timeout…
    TCNT0H=Timer0H;
    TCNT0L=Timer0L;   
    waitCounter++;
    if (timeRemainingTenths > 0)
    {
        if ((timeRemainingTenths % 600 == 0) &&
            (timeRemainingTenths <= 3000))
        {           
            PORTA.2 = 0;
        }
        else
        {
            PORTA.2 = 1;
        }
        timeRemainingTenths–; 
    }
    else
    {
        PORTA.2 = 0;
    }
}

We have a timeRemainingTenths that sets the timeout value. The if condition handles flashing the lights off for 1/10 second the last 5 minutes so that I can turn off the snowblower and walk back over and hit the button again.

That leaves only the button-control handling code to write. As part of this, I need to handle debouncing the switch: when a mechanical switch closes, it doesn’t close fully but instead bounces open and closed a few times. This bouncing is slow enough that it’s easy for a microcontroller to detect it multiple times, so you need to debounce the switch. There is are dedicated debounce ICs to deal with this – such as the Maxim 6816 series – but in most cases you can do it in software. Or you could use a hall-effect switch that doesn’t need debouncing. The downside of debouncing is that it slows the speed of response.

In this case I don’t need the quick response, so the code is pretty simple:

void Wait(int seconds)
{
    waitCounter = 0;
    while (waitCounter < seconds * 10)
    {
        ;
    }
}

// Declare your global variables here

void main(void)
{
    init();

    while (1)
    {
        if (PINB.0 == 0)
        {
            PORTA.2 = 1;
            timeRemainingTenths = 60 * 60 * 10; // 1 hour 
            Wait(1);

                // Held down, turn off lights…
            if (PINB.0 == 0)
            {
                timeRemainingTenths = 0;
                PORTA.2 = 0;
                Wait(2);
            }   
        }
    };
}

If you look back at the interrupt service routine, you’ll see that the waitCounter variable gets updated at 10Hz. The wait routine uses this variable to provide a way for us to wait a specific number of seconds.

The sensing code takes a bit of explanation. In digital electronics, the concepts “0” and “1” refer to voltage ranges. The crossover point depends on particular semiconductor chemistry used in the electronics, but assume that it’s 2.5 volts in this case (ie 50% of the 5 volt supply we’re using). So, any voltage above 2.5 volts is 1, and below 2.5 volts is 0. If we hook a switch up to a digital input and connect it to ground, when we press the button, the input voltage goes to zero, and the input value is 0. Then, we let go of the button, and the input goes to some indeterminate state. It might be zero, it might be 1, it might go back and forth.

We get around that by using what is called a pull-up resistor, which is connected to Vcc (5V in this case). If the button isn’t pressed, that ensures that we get a high voltage (a 1), and then when it is pressed, we still get zero.

In the past – say in 1980 – you’d use a kind of logic known as TTL, and you had to be really careful how you hooked things up and what values you used, since TTL was a pretty rough approximation of the term “digital”. These days, most logic families are a lot easier to deal with, and in fact on the AVR microcontrollers have built-in switchable pullup resistors.

All of that is a long way of explaining why the code looks for a low value to determine when a switch is pressed rather than a high one.

The code itself is simple. As soon as the button is pressed, we set the time remaining to an hour, and then we wait a second to debounce. If the button is still pressed after a second, we turn off the switch, and then wait 2 seconds to debounce after that press.

That’s about it.

 

 

So, we look at pin 0 on the B port, and if it’s zero (pulled to


Eric vs. the Blend Door

About 10 days ago I was heading down to my Tue/Thu night ride in my truck. It was about 75 degrees out, so I turned down the heat on my Ranger, but it didn’t work – I was stuck on hot, which is pretty darn hot. I had to go on Max AC to get it tolerable.

After a bit of research, I found that the problem was likely to be the mix door. Ford uses a potentiometer to detect the position of the dial in the dash, and then a microcontroller sends the door to the proper position. It’s a fairly elegant design, except that the code self-detects the limits of the door by moving the door and sensing that it slows down. That would be fine, except that the shaft on the door is plastic, and it’s not up to the torque of the actuator, so it breaks. And then, if you want to fix it, you have to pull the whole dash apart to get to it.

This is so common that there are companies that specialize in aftermarket replacements. I bought mine from HeaterTreater.net, and put it in yesterday. It’s a very elegant hack. You take out the actuator, cut the bottom out of the duct with a dremel, vandalize the door so it will come out, and clean out all the shavings. The new door fits in and then you pull a pin so that the spring-loaded shaft seats in the pivot, put the actuator back on, verify that things work, and then close things up with some foil tape.

It would be easy to do if the part of the duct you have to cut wasn’t facing down right up to the firewall. As it was, I had to fall back on my car stereo installation skilz and lie backwards on the seat with my head under the dash.

About 2 hours later, it was done.


Hello

Ths is blog #3 for me.

There’s my work blog, which over the years has had lots of non-work stuff on it, but I’ve been writing less work-related stuff there and don’t want to overwhelm it with other stuff.

There’s RiderX, my bicycle blog.

And now there’s this blog, which will have everything else on it.


RAMROD preview

it’s Sunday night, with RAMROD looming on the horizon for Thursday. The dawn horizon, since the ride starts at 5AM. An hour to drive there and an hour to get ready means I need to get up at around 3 or so.

I’ve been assiduously applying myself to tapering for the last week or so. Did my last group ride last Tuesday, and then did an easy hour on Thursday and two easy hours this morning. My legs have been feeling better, and my resting (sitting) heart rate was 41-42 on Friday, pretty close to my historical low of around 39. I’ve been avoiding my granny ring since about April, and my legs are feeling strong than they have since – well, since ever.

All these factors imply that I’ll have no problem finishing easily on Thursday.

And yet, I feel more than a little apprehensive.

First of all, my record on long rides this year has been less than stellar. I’m having trouble with my nutrition in ways that I haven’t in the past.

Second, I’ve been having seat issues. Not that I’ve ever been really happy with any of the seats I’ve had, but I’ve been most happy with the Bontrager race lux. I have one on the bike that doesn’t have many miles, but I haven’t had the comfort on it that I’ve had in the past. Though, on the plus side, one I got beyond 3 hours in Livestrong I felt pretty good.

Third, the weather forecast is bad. Or good. Too good. I’d much rather have the cold and damp (well, torrential rain, really) from Livestrong than the 90+ degrees that is forecast for the ride.

So, I guess we’ll find out. Stay tuned…


TdF fashion show…

I am posting primarily to gloat that Comcast now carries Versus HD in my area, so I get to watch the tour in HD. The on-bike feeds aren’t great, but they’re a darn sight better than the rented-50-times VHS cassette quality that we got last year.

The off-bike feeds bring the quality and crispness that I’ve come to expect from good HD feeds. Beautiful sweeping shots of Monaco from the helicopter. But there are two unintended consequences of having the HD feed.

The first is that watching the race is a bit like a fashion show, as you can comment on what the team kits looks like. For example, the Euskatel kit actually looks intense orange, and the Lampre kit has this saturated magenta part. And the quick step kit is, well, a pretty boring blue and white, but it’s a vividly boring blue and white. We like the Lampre and the Garmin ones, though the “missing upper arms” on the Garmin kit is more than a bit disconcerting.

The second unintended consequence:

Bob Roll in HD.


Livestrong 2009 Course Preview

[Update – I added an improved description of Montreux based on a ride I did today, and added some new options if you don’t want to do that climb.]

Since the bulk of the course – at least the century course – is right in my backyard, I thought I’d share my thoughts on what you’re in for. I’ve linked to climb descriptions from my BicycleClimbs.com site. Note that while the average gradients are pretty close, the maximum ones are a bit speculative.

But first, an introduction. I’m Eric Gunnerson (aka “Lo-Phat”).

I know Fatty from when he lived in this area and worked for a large software company. Back in 2005, we teamed up for “The Double-e half-hour of pain“. Fatty had – in his usual “mature” way – trash talked about how he was going to be the first to the top of the hill. I had little chance of beating him (I’m light for my size, but I *am* 6’2″), so I took the mature way out, and offered $20 to the first person up the hill that beat Elden. And then he complained about it, and called me “evil”.

Where were we? Something about a ride, right?

70 and 100 mile Routes

Before I start with the description, I’d like to note that these are nicely designed rides. I would describe them as “pretty hilly”.

The ride starts at the Seattle Center, and spends a couple of miles winding through downtown towards the two stadiums, at that point, you reach the first hill – the climb up on the I-90 express lanes. I’ve never ridden it, but it looks like it’s about 150′ in height, and my recollection is that the first little bit is fairly steep.

Once you get on that, you wind east, go through the I-90 tunnel, and then down onto the I-90 floating bridge, and then up at the other end. At the island you climb up 75 feet or so to the exit.

The next 10 miles takes you around the south end of Mercer Island, a really nice section. It’s fairly flat/rolling, with great pavement, not much traffic, and wonderful curves. You will like this session. Halfway into this section (at 14.7 miles) there’s a stop.

Next, you cross the east channel bridge on a bike path. This is a pretty popular route and there isn’t that much room, so watch for other cyclists or runners coming the other direction.

Off the bridge, the next 4 miles loops north and then back south. A few small (75′ or so) climbs. After you head south under I-90 (which should be obvious), you’ll come to a bike path entrance. There are some blind curves and rude riders here, so be careful. A bit of up and down takes us to Newcastle Beach Park (sorry about the descent from the trail, and yes, you do have to climb the 75′ of steepness back after the break). That takes us to 24.1 miles, and stop #2.

The next 2 miles climb up about 300′, and then a nice 10-mile section of rollers but no major climbs.  That takes us to around 36 miles total.

At this point, the century route makes a loop of about 9.5 miles, with about 680′ of climbing on it. The major part of it is the Tiger Mountain Climb, which averages about 4.5% and peaks at perhaps 8-9%. Oh, and stop #3 is early in this loop, but only for century riders.

Then it’s back on a flat road into Issaquah, and stop #4. Once there, the 70 mile route diverts to the Northwest, on a fairly flat section. You’ll rejoin us at the base of your next major hill. As you ride, look to the left to see Zoo Hill, one of the local benchmarks for stupidity. Be happy you are heading straight.

The century heads a bit east, to take on the next hill at the 50 mile point, Highland Drive. This climb has an maximum gradient of ouch (over 10%), and long sections of 8-9%. It’s about 350′ up, and you are going to notice the whole thing.

You may have noticed a progression in maximum gradients. It’s going to continue. But first, we’re going to take a steep descent that drops us onto East Lake Sammamish Drive. The first mile or so is a busy 4-lane road. You will want to stay right, but the pavement is more than a bit sucky there, so watch yourself.

After that, it’s one lane each way with a decent shoulder for about 9 miles. There is one 150′ climb and several rollers along the way. There has also been some construction at Inglewood road about halfway along this stretch, and I expect that it will still be there, so expect some delay from this. This section is a good section to paceline on, and my goal will be to be around 18-20MPH in a group for this section. That takes us to Marymoor park at 61.5 miles, and stop #5.

We are now on West Lake Sammamish Drive. It will be nice for a couple of miles, then the shoulder will get rough, with lots of holes and a nice ridge between the shoulder and the pavement. Don’t plan on making too much time here. There is no bike lane on the lake side of the road, so it’s legal for bikes to ride the opposite way on this section, and you need to pay attention. Along the way are some rollers and a 100′ hill. Did I mention the road is junk?

Eventually, you’ll hit the lowest point, at Vasa Park (big red barn on the right side). Put your climbing shoes on here. We start with a 160′ climb as a preamble, and rejoin the 70-mile route at this point.

At this point, after 71.5 miles (43.2 for the 70s), we arrive at a little bit of joy I like to call Montreaux, because that’s its name. Livestrong calls this NW Village Park Drive, but it’s hard to ignore the giant sign for the development, and the ostentatious water feature. The water will help drown out the labored breathing of the other riders on the course.

Montreux is, to put it simply, a beast. If you have a climbing cassette for your bike, bring it. If you have a small electric assist-motor, bring it. If you have a supply of EPO, use it. If you are like me, you will be spending about 20 minutes of time on this hill. On the upside, the pavement is excellent, and there’s also a view, if you have the oxygen to turn around and see it.

Right from the start, it’s at about 10% for the first little bit, then it will turn a bit to the left and ease down to around 7%. Then it will kick up to about 14% for a bit, taper down to 10%, up to 14%, and then there’s a nice section that’s even steeper. I was climbing at about 3.9 MPH on that section.

I really recommend finding time to pre-ride this hill, so that you know what you’re in for.

After the top, we’re going to lose 100 feet and then have to gain it right back, up to 850′, the same as the height we hit on Tiger Mountain.

And,we’re in for some fun. We worked hard to get up that high, and over the next 5 miles we’re going to lose 800′ of it, on a glorious descent, my favorite in the area. There are some flats and some short climbs, but if you have the legs, this is a good spot to spend a bit of them, as you can keep your speed up and we can all laugh at your folly on the last climb before the finish. After the first 3.8 miles, we end up at stop #6, at 78.5 miles (49.5 on the 70).

After a short 50′ climb and a really fun down/up hill, we have another 400′ of descending, taking us down into Renton and to the shores of Lake Washington. 3 miles of mostly flat road take us into Renton, to stop #7, at 84.7 miles (55.7 on the 70).

The next 4 miles are flat flat on decent road (make sure you make the right turn onto Seward Park Avenue), then a 160′ climb towards Seward park, only to lose it on a quick descent back towards the water, unfortunately with a stop sign at the bottom.

Then it’s onto Lake Wa Blvd South. If you have a group, you can paceline here. As we near I-90, we climb back up the hill (100′ or so) to stop #8, at 94.7 miles (65.7 on the 70).

Then, it’s up and over the hill (another 200′ of climbing), down Yesler into downtown, and then a short spin back to Seattle Center.

Emergency Wimp Option

So, you’ve been going along fine on the ride, feeling great, but you realize that the only way you and your bike are making it up Montreaux is in the back of a pickup. But you don’t want to give up.

So, here’s how you “get lost” to make it a bit easier. Instead of heading up Montreaux, you head west on Newport, straight at Lakemont, and then turn left on the stop sign at 164th. Climb to the top, turn right, and you’re right where you would normally be, with a lot easier climb. Not sure how I got lost, but I did manage to get back on course.

Super-Emergency Extra Wimpy Option

Your legs are toasted and your best hope seems to be to ride straight into the lake and hope for a freak shark attack. Not much chance of that, since Lake Sam is fresh water, but there is a way to salvage some pride.

  1. Head west on Newport.
  2. Straight at Lakemont
  3. Straight at the 164th stop sign.
  4. Right on 153rd (there’s a bike route sign here)
  5. Down the little hill
  6. Left when road ends (SE 38th)
  7. Straight at the light (150th)
  8. All the way to the bottom of the hill.
  9. Get in the rightmost left-turn lane.
  10. As you turn left, get on the left sidewalk of the exit ramp coming straight towards you (diagram).
  11. This puts you on a bicycle path.
  12. When the path ends, turn left.
  13. This puts you back on Lake Washington Blvd, where you were just after Mercer Island. You can now follow the 40 mile signs for the rest of the ride.
  14. Wow, did you ever get lost.

7 (or so) Hills of Kirkland 2009

On memorial day, for the nth year in a row (where n > 4 or so) I spend a morning riding the annual 7 Hills of Kirkland ride. Except that it, was 7 hills, it was 11 hills, the metric century version. Except it isn’t quite a metric century, being 4 miles or so short of that distance. And the hills – only two of them are really in Kirkland.

So, anyway, I spent the morning riding in the 11 Hills within easy riding distance of Kirkland almost metric century ™.

In the pro cycling world, when somebody has spent the fourth quarter of the year glued to the bench in the local gasthaus in a pursuit of the perfect combination of beer and bratwurst, when spring rolls around his fitness is said to be, to use the technical term, “questionable”.

Though I do enjoy a nice Hefe now and then, my capacity for beer these days is usually described as “cheap date” and I can only eat a brat now and then, the weather this spring hasn’t been very good, so I haven’t gotten much training in. I *have* played soccer now and then, but the prospect of a hard century in June has weighed heavy on my mind.

I wanted to ramp up my training again, so I scheduled a 45 mile hilly ride. I got east in the carnation valley, felt okay, and then absolutely died on the ride back. Hydration was fine, nutrition was fine, sodium was fine, just had zero energy. Dragged myself back home.

Found out a week later that I had shingles (a really weird disease), spent two weeks on Valtrex and not training hard, and had only one decent ride before 7 hills (aka “11HwerdoKamc”), a full 30 miler.

I had a fair number of friends (1 fair is 4 big friends or 5 to 6 small ones) who were also riding in the 11 hills within… well, in “the event”, and were planning on meeting up to ride together.

But not for me. I prefer to ride alone on these sorts of rides, for reasons that I would share with you, except for the fact that it would make a really good post on its own.

So, I said hi to my friends waiting for others to show up, and started off. Market (hill #1) was quickly dispatched, as was Juanita (hill #2, the easy way up from the south), then it was a nice descent to the first big hill.

Seminary hill (#3) is so named because of the proximity of a seminary, which I’m pretty sure isn’t there any more so it is more proper to refer to it as “alternative/complementary medical training school hill”. This hill is an ugly roller and always has one more turn than you think it should, but I dropped down to low low (30/26, with my triple up front and 12-26 climbing cassette), and rode up behind a tandem. A few people come by, but I’m expecting that. We crest at the top, and I stop to take off my hat and put on a sweatband.

A quick descent and a mile or so on the newly-paved section of the Burke, and we’re off to climb Norway (#4), a hill I climb a lot. On the 400′ or so, I pass 10 or so people and get passed by 5 or so. Norway has a really nice view at the top. We descend to the south, and work our way to hill #5.

Hill #5 is named “kingsgate”. It does have a climb a fair bit, but rather than being a real hill, it’s more of a “I’m over here and this is the only way to get over there” route. I get passed at the top by Francis and Alan, which is a good sign, since I expected them to pass me on hill #3, not hill #5.

This takes us to the first rest stop, where I remix a new bottle of accelerade, take a salt tablet, and eat half a bagel with some peanut butter.

Then it’s a short ride back northwest (where I pass a clot of 25 riders or so leaving a light), a glorious descent down brickyard (which looks tighter than it is), and then a traverse back to the south into a headwind, where we reach the base of hill #6, Winery.

Winery is a steep climb that nobody takes because there’s little shoulder and it’s busy, so the one that everybody takes is a route through a development that is rolling (aka steep and steeper). Something in the 14-15% range at its worst. Surprisingly, the group that is behind me stays behind me, and my pass to passed ratio is about 15/1 on the climb. At the top, we are greeted by bagpipe music, which is a sign that the hardest part of the ride is over.

From there it’s back to the rest stop (which I skip), down a steep hill over the tracks and then down into the Redmond valley. The 7 hills riders will head south and grab one more climb before the finish, but for the rest of us, we head east.

I get onto 116th across the valley, and then remember that, if I had been smarter, I would have gone across 124th instead, since this way I traded a nice gradual climb for a short *** of a climb, over 15% to my legs. After that bit we head up Education hill (#7) – where everything returns to normal and I get passed by a 5 fair numbers of riders, then we head down the lovely 35 MPH descent to a traffic light on avondale. Then it’s off to climb Novelty Hill (#8), where the Novelty quickly wears off, and it’s just a long climb (475′) with lots of traffic and a mostly decent shoulder. I do start talking with a guy named Matt, though about 75% of the conversation is lost due to traffic noise. We finish the climb, loop back around, and descend down Novelty, then take a hard right to hill #9, McWhirter.

I had to go back and look at the ride description, since I’ve never heard anybody use that name before. My personal name is “that hill that ends up right near where my daughter takes horseback lessons”, but I guess McWhirter is a better name than that. It’s only 175′ high and easy, probably the easiest of the hills on the ride.  We finish that, descend a bit, and then we hit the base of hill #10…

Education hill. Or, “re-education hill”, since we’re doing it the opposite direction, though thankfully they don’t send us back up 116th where we came down (I wonder very much at the sanity of our local road department since they put a bike lane up a 20% grade that people only ride on a dare, but whatever), but up the next road down. We climb that, and come to the second food stop, where I refill my bottles again, take another salt pill, and eat half of a turkey and cheese sandwich.

This is a wonderful place in the ride – I feel good, and there’s only one hill left. Matt and I head down into the valley, turn south to rejoin the 7 hills route, ride up the hill at the end of Willows (not a hill since it’s not numbered, though frankly it’s harder than McWhirter), turn down, and hit the base of Old Redmond Road (Rose hill), hill #11. I still have legs, so we ride to the top, and then it’s down on a descent on 116th, down another descent on Northup, and then a nice spin back on Lake Washington Boulevard back into Kirkland.

I ride 7 hills every year because I love the finish – you have 5 miles without much work at all with two very nice descents.

And then I hook up with a fair number of people from my riding group, and refuel with mexican food.

And suddenly, LiveStrong looks possible. It was a very good day…


Livestrong challenge…

I’m going to be riding the Livestrong challenge in June, and I’m looking for sponsors.

You can find more information here


25 random things about Eric

I got tagged on Facebook with the 25 things meme, and I thought I’d duplicate my answers here for the… well, “edification” doesn’t quite work.

Enlightenment… No.
Entertainment…No.
Education…No.

Well, anyway, here it is. It’s on this blog because that seemed the best place for it.

  1. I have a inability to be brief when I write. There’s a natural length for everything, and I don’t want to edit it down. That’s why this is so long, and I don’t want to admit how long it took to write.
  2. I have a bit of notoriety in the local cycling community because of my creation of bicycleclimbs.com, an important resource for the cycling insane. No, I haven’t climbed them all, but I have climbed the worst of them, some of them many times. Despite a considerable amount of research, no cure has been found for this affliction.
  3. The first album I owned was “Permanent Waves”. Well, I didn’t actually own it… I had a friend by the name of Pam Purvis who had a tape deck in her car but didn’t have a turntable. She bought the album and brought it over, I bought two tapes (TDK SA90s), and then she ended up with a tape, and I ended up with the album and the tape.

    <note>
    If you’re younger than, say, me, I need to explain a bit. In the old days, you could buy an album on vinyl, or you could buy it on cassette tape. Or, on 8-track, but you had to have a nice set of boots before they’d let you buy one of those. Albums were great, except that you needed a decent turntable, had to follow an elaborate cleaning ritual, and you had to keep the volume turned down or the needle would skip, gouging a permanent wound in the vinyl.

    You could buy a pre-recorded cassettes and skip all this, except the sound was junk and because they were cheap, the tape jammed, and you ended up with a whole mess of tape sticking out of your tape deck and $9 in the hole.
    </note>

    So, there Pam and I were, sitting on my bed, listening to Rush. All alone in the house.

    It may be hard to believe now, but like a lot of guys, I had no clue at all whether girls were interested in me in high school, and this was no exception. I’m not sure what I should believe. I could be believe that I missed a chance, or I could believe that Pam was just a good friend.

    But at least I ended up with some decent music, and Pam and I kept up that particular connection for a few years.

  4. I have a super power. I don’t like to talk too much about it, ’cause people get jealous, but you forced it out of me.

    The human brain is an amazing thing. Some people can do square roots in their head. Some people can recite PI to a thousand places. Others know all the presidents.

    My super power is remembering song lyrics. Not songs that I listen to, songs that I like. Songs that I would rather forget.

    Well, it’s not too far to paradise
    At least it’s not for me
    But if the wind is right we can find a way
    To find serenity
    Oh the canvas can do miracles
    Just you wait and see
    Believe me

    Yes, it’s Christopher Cross, “Sailing”, from his album of the same name, which I haven’t heard since the spring of 1982. The lyrics may not be absolutely right, but they’re pretty close.

    I knew I should have chosen “flying” or “invisibility”…

  5. I’ve never been a boy scout – I just didn’t see the point of doing it, and in my school being a scout was 5 of the 10 things you didn’t do.

    However, my sisters were campfire girls back when we lived in Auburn, and I was in kindergarten, and my mom was involved, so I went to day camp with them…

    That’s right, I was a campfire girl…

  6. Back when I was in high school, my mom introduced me to Jane Austen’s Pride & Prejudice, and I’ve read the book quite a few times, and seen most of the adaptations of it. The Colin Firth one is the best.
  7. In high school and college, I drove a chocolate-brown Citroen DS19 Safari.

     
    It would be fair to say that I inherited it from my father, though with the amount of maintenance I ended up doing the first few years I owned it (new clutch, new spheres, new hydraulic pump, rebuilt rear brakes, pulled the head and had it shaved after an unfortunate overheating incident, etc.

    “Spheres, what are those?”

    Well, some Citroens use this cool hydropneumatic suspension, which gives you ride height adjustment, a great ride, sensitive power steering, and is all driven off of a 2000psi hydraulic system. Oh, and front-wheel drive.

    All that in 1960, when Detroit was still obsessed with tail fins.

    I drove the car until one day in 1986 when I was driving on the freeway and the car made a really exciting noise for 30 seconds, then no noise at all. And I found out that it was possible to embed an exhaust valve in the middle of a piston.

  8. Back in the summer of 1978 I was at my neighbor Tracy’s house, and she put on a new tape that she had just gotten.

    I live my life like there’s no tomorrow
    All I’ve got I had to steal
    Least I don’t need to beg or borrow
    Yes I’m livin’ at the pace that kills

    Running with the devil…

    That was pretty radical stuff for somebody who had only ever listened to his sister’s music – Chicago, Carole King, maybe a little Grand Funk Railroad.

    Now, 30 years later, that’s still a great album…

  9. Person I wish I’d met:

    Richard Feynman

    Not just because he’s all sciency and stuff, but because he’s an iconoclast. Or he was.

    I sometimes wish I was more of an iconoclast, but I don’t have the right shoes, nor do I know where to purchase them.

  10. When I was in high school, I worked in the Everett Public Library as a “page”, which meant that I knew how to shelve books alphabetically *and* numerically. It’s an easy job, most of the people you work for are pretty nice, and for somebody who likes to read the way I do, the access to a ton of books was great.

    The library at that time had been built over decades. It had lots of weird passages, and the archives in the basement were very old.

    Being alone in the basement of a library at night is pretty creepy.

  11. I was a shy kid. Or, perhaps, just an overly-sheltered kid, as the youngest of the kids and the only boy. When I got out of college and started working – at the mighty Boeing Computer Services – I decided that I wanted to do something about it.

    Boeing had a very active Toastmaster’s group, but I’m not really a joiner and that seemed pretty contrived, so I put it off (okay, perhaps I just wasn’t sure I wanted to do it). Then one day I took a Motorcycle Safety Foundation course from a guy that I worked with, and a week later he suggested that I should become an instructor. It sounded like a cool thing to do – help people to ride better, and spend some time in front of people.

    It was a really hard 10 days, but later that summer I was an officially certified instructor, and that meant that I had to stand up in front of a group of adults that I didn’t know, and try to teach and establish some sort of rapport with the students, some of which are a bit… well, perhaps, “set in their ways” is a nice thing to say.

    I found that I liked the challenge – both the challenge of teaching, and the challenge of being up in front of people.

    Years passed, I ended up at Microsoft on the C# team, and we needed somebody to do talks about C#, both to Microsoft people and to selected external customers. I did a talk, then another, then another. In one quarter, I did 30 talks.

    Well, that’s not quite true – I did the same talk 30 times. Since then, I’ve done talks big and small, from groups of two people, all the way up to around 500.

    And found that I really liked them, and can be a bit of a ham. Or a large spiral-cut honey-baked ham, in some cases. Now, I volunteer to stand up in front of groups and talk.

    Weird. Really weird.

  12. I’ve seen a skeleton. Back in high school, I had a good friend, Dave, who I sometimes went hiking with. We went on a day hike up nearby Mt. Pilchuk, chosen because you can drive halfway up the mountain to start (my reason, not Dave’s…). We had a really nice hike up to the summit – really more of a walk than a hike – and the came glissading down the snowfield (kind of like skiing without skis). We got a little out of the way on the way back, and that’s when we came across it.

    The skeleton of one of the ski lifts from the old ski resort.

    What? Were you thinking of something else?

  13. I commuted by motorcycle year round for about a decade, in all sorts of weather. Now I live so close to work it doesn’t make sense, so now I’m a cyclist and cager instead.
  14. I started reading science fiction when I was 8 or 9, and I ran out of decent kids books to read. I read my way from Asimov to Zelasny (okay, it should be “Anthony”, but he’s less known and I’ve read more Asimov). I still read the stuff these days, so there’s a lot less hard science fiction out there.
  15. Back about 300 years ago, when I was a freshman in high school, I had speech class, and part of that involved making a presentation to the class. I taught one of my friends – I think her name was Sally – to juggle, or at least the first parts of learning to juggle.

    That day, my good friend Peter gave a talk about how to make smoked fish, and then passed samples around for us to try.

    Later that day, I had soccer practice. I felt crappy before, but my coach asked me to try anyway. I lasted about 30 minutes, headed back to the locker room, and then walked into downtown Everett to wait for the city bus to get home.

    I was standing there waiting for the bus, and I suddenly found myself lying on the ground. That’s weird, I thought. I got up again.

    Next thing I know, I was lying on the ground looking up with two paramedics at me.

    After a trip to the Doctor’s office – which I promptly redecorated in the worst way, I spend a week at home on downers (barbs, goof balls, pink ladies…), recovering from food poisoning. And I was the only one who at the fish who was lucky enough to get sick.

  16. I love writing comedy. I hate writing comedy.

    I’ve written enough that writing technical stuff is merely a matter of following a straight line from here to there. Write a, b, c, polish it up once, and you’re done. You can spend a lot more time on it, but it’s probably not going to get a lot better, and frankly, it’s not worth the effort.

    Comedy is different. It’s hard.

    My technique – to the extent I have a technique – is one of progressive refinement. I start with something that is vaguely interesting, and then work for ways to make it better. Sometimes this is a quick process, sometimes it’s agonizing, but eventually I get to one of three end points. Sometimes – if I can get in the right state of mind – it’s pretty good. Sometimes, an idea just doesn’t go anywhere, so I have to abandon it out on the tundra and let nature take its course. Either of those are pretty good results.

    The worst one is when it’s in between, something that I call “humorish” – having all the characteristics of humor without actually being funny. Not only is that hard to figure out (“I can’t define what humor is, but I know that when somebody trips over an ottoman, it makes me laugh”), you have a lot invested in it and you don’t want to abandon it.

  17. One summer in high school, I spent some time in a band. We played at a few small things, made some money, but it never really went anywhere. I’m still happy that I did it. In my mind. In reality, I was a Teamster working at Safeway as a courtesy clerk.
  18. My oldest sister was in swim team. My older sister was in swim team. And, when the time came, I was in swim team.  One day, we were practicing swimming under water (ie holding our breath), and I swam across and back a 6-lane pool, twice, without surfacing. And then did it again to prove to my coach that I could.

    That was my sole triumph in two years of swim team.

  19. When I was about 7, I got a Radio Shack 10-in-1 kit. This kit consisted of a number of electronic components with spring connectors at each lead, a bunch of wires to connect things together, and an instruction book. You hooked 15 to 25, 12 to 24, 44 to 55, and you’d press a button and a light would light up.

    As time went by, and I moved up to the 20-in-1 kit, 40-in-1, and ultimately the 50-in-1 kit. I yearned for the 100-in-1 kit, but, alas, never got it.

    For a while I was going to be a electrical engineer. Then I got introduced to computers in my freshman year of high school, and it was all over. Software was far easier to build that electrical hardware, and it obeyed simple rules, rather than electronics component, which have very simple models and 400,000,000 complications and exceptions that you need to keep in mind to make things really work.

    A few years ago a friend of mine got me back into electronics by introducing me to microcontrollers, where you write software to accomplish what you want and don’t need a lot of hardware.

    I’m still very much hacker whenever I need to do hardware. I know how to get basic things done and a few of the rules, but I’m pretty hopeless at any complex design.

  20. I like fireworks. When I was a kid in Everett, some of my friends were able to go to the res to buy the more sophisticated (ie “explosive”) fireworks, but we were stuck with the “safe and sane”.

    So, we’d buy “Whistling Petes”, and crimp them. If you crimped them at the bottom, they would whistle for a while and then blow up. Or, you could just crimp the whole thing. Many a model succumbed to the might of Pete.

    One year, I was over at my friend Todd’s house, and he had some “safe and sane” fireworks that we wanted to do something with. We made a maxi-smoke-bomb by opening up a bunch of smoke crackers (like firecrackers, but 100% quieter, 50% smokier, and 98% less fun) and crushing some smoke bombs. These went into an old metal film canister with a heavy fuse out the top.

    The first one produced a tremendous amount of smoke, covering his his whole front yard. The second one smoked for about 5 seconds and then exploded. About 10 seconds later we heard a ping as the top to the film canister landed in the driveway.

    I guess the model rocket stuff I do is a little bit like fireworks, in that you still get to smell black powder, and it’s certainly safer, but not nearly as much fun. I do have a high-powered rocket that’s about 4 feet long and 4″ around named Spot, but there are no longer any launch places near Seattle and I haven’t traveled to any launches yet, so spot had a maiden flight and then just gets to hang around in the closet.

    I don’t buy illegal fireworks simply because I don’t want the temptation.

  21. I learned to program about when Steve and Steve were working on the Apple 1, so there weren’t any personal computers. I missed punch cards by a year at my high school, and, thanks to a math teacher who was ahead of his time by at least 10 years, learned to program on a multi-user alpha microsystems. When I was there, it had 192KB of memory, 4 400KB 8″ diskettes, a Z80 running at a few megahertz, 6 ADM3a terminals, and 2 DECWriter terminal/printers.

    Pretty heady stuff for the spring of 1979.

  22. People sometimes ask me what my secret is for writing interesting talks. Well, they don’t, but I wish they would.

    It’s pretty simple. I figure out what the jokes are first, and then write the talk around them. Way better than trying to do it the other way around.

  23. I learned to play pinball when I was about 10 years old, and have been playing ever since. About 8 years ago, I found that you could buy pinball machines on Ebay, and I bought a mid-80s pin named Bad Cats. Which lived in our basement for a while. About 3 years ago, it got exiled up to our ski cabin when I bought a fully shopped (ie restored) Twilight Zone, one of the best pins that Williams ever made, as a present for myself for a reason that escapes me. It’s a great game – lots of modes, *6* ball multiball, and great design. The only disadvantage is that pins are loud even with the sound turned down, so you can’t really play it while other people watch TV.

    A couple of years ago, a friend of mine gave me an early 70s Meteor. That joined Bad Cats up at the cabin, and, after a bunch of well-deserved maintenance, is enjoying a nice retirement.

    I think 3 machines officially moves me from “enthusiast” to “collector”…

  24. If people ask me what I’m like, the term that always comes to mind is “generalist”. Okay, the term that really comes to mind is “gentleman scientist” or “renaissance man”, but that’s a bit too pretentious to say out loud.

    I have a pretty eclectic knowledge base. I know a bit about a whole lotta things, and have fairly deep understanding of a wide range of subjects. Household wiring. Woodworking. Carpentry. Aerobic training. The history of science. Astronomy. 1980s music. etc.

  25. I get bored easily.

    I have friends who ride their bikes 5 days a week for the whole summer, friends who ski 90 days a year, friends who travel the country to launch rockets, friends who take photos every day.

    I like to do all of those things, but generally by the time I get to the second day of an activity, I’m looking around for something different to do. I’m not sure what it says about my perseverance, but I do think it’s means that I’m less likely to get addicted to anything.

    With one notable exception. There’s one thing that I’ve been addicted to since about 1980, but I think that she’s an exception to the rule…


Fast topics

  1. pedals
  2. cycling shoes
  3. light bolts
  4. alternating color spoke nipples
  5. light tires
  6. Higher imflation pressures
  7. lighter component group
  8. new helmet
  9. light bike
  10. intervals
  11. cadence drills
  12. muscle tension
  13. tempo rides
  14. ride in a paceline
  15. hydration drinks
  16. recovery days
  17. electrolyte drinks
  18. HR monitors
  19. power meters
  20. lsd rides
  21. periodicalized training
  22. Lose weight
  23. Ride hills
  24.