A memory triggered

It’s funny how the brain works. While I was whittling away on my latest wood carving yesterday, I remembered an incident that happened more than 30 years ago. Why that memory surfaced yesterday is a mystery to me.

Growing up, my siblings and I were pretty avid readers, and our parents encouraged that. I recall bringing home the order forms from … the Scholastic Book Service(?) … and Mom writing checks for the books that I had selected. I don’t recall her ever balking at what or how much I wanted to read. And I did read every book I got through that service.

Anyway, one thing I ended up reading, although I don’t recall whether I or one of my siblings ordered it, was the Mrs. Coverlet series about three children who, due to one circumstance or another, were sometimes left unsupervised for extended periods. I honestly don’t remember much else about the books. Just bits and pieces, really. Including one scene in which the boy was singing his favorite Christmas carol: “Good King Wences car backed out on a piece of Steven.” At least I’m pretty sure that scene was in one of those books.

I think I understood at the time that the boy’s song was a … misinterpretation of some other song, but I didn’t know what the original song was. I had never heard Good King Wenceslas, but I was familiar with alternate song lyrics, having sung things like, “Jingle bells, Batman smells, Robin laid an egg.” But I couldn’t attach Good King Wences to anything.

And that’s the way it remained for 20 years or so, as far as I can recall. I do know that when I was in the movie theater watching Scrooged (1988), there was a scene in which a bunch of boys were singing Good King Wenceslas. I started laughing. I couldn’t stop. After 20 years I finally got the joke. I ended up having to step out into the lobby because I just could not keep quiet.

The good king backing out over Steven is an example of a mondegreen: a misunderstood or misinterpreted word or phrase resulting from a mishearing of the lyrics of a song. That’s different from parody, which is an intentional mangling of the song lyrics. What I find hilarious is that I read the misinterpreted lyric and had to wait two decades before I heard the original song and made the connection. That might be the longest I’ve ever had to wait to “get” a joke.

I’ve wonder from time to time what other little memory bombs are waiting for me. Things that I saw or heard many years ago, that I didn’t understand and didn’t pursue, and have forgotten about. Things that will pop up from the dark recesses of my brain when I encounter the answer to the question I forgot I’d even asked 20 or more years ago.

And I still can’t figure out what prompted me to think about that yesterday, sitting in my shop, idly whittling away on a piece of mesquite. The brain works in strange and mysterious ways.

North Dakota Mexican food

Debra and I tried a new place for dinner the other night. When she asked me how my meal was I said, “North Dakota Mexican food.” She laughed and nodded. Considering that we were at a Vietnamese restaurant, that exchange probably deserves some explanation.

We flew to North Dakota back in 1992 to attend my grandparents’ 65th wedding anniversary celebration. When we arrived in Bismark, we learned that our bags didn’t make the transfer in Denver. The airline assured us that the bags would be on the next flight. Bismark wasn’t a thriving aviation hub at the time, so we had a few hours to kill.

In retrospect we should have known better, but we were hungry and frustrated. We saw a restaurant advertising Mexican food, and the parking lot was reasonably full. “How bad can it be?”

As it turns out, pretty bad. Worse than Taco Bell. It’s not that it tasted bad, but that it hardly tasted at all! It looked like Mexican food, but it tasted like … pretty much nothing. The ground beef was bland. The lettuce and tomatoes were standard tasteless restaurant fare. The cheese … well, there was lots of cheese. In fact, everything was covered in cheese. Like their version of Mexican food was a bunch of bland stuff covered in cheese. And the salsa? Pretty much just ground up stewed tomatoes with a little green onion thrown in. Corn chips were the cheapest, thinnest … I think you get the picture.

We had a similar experience about 10 years ago. We went to a little Mexican food place that several friends had recommended here in the Austin area. The place was clean and bright and tastefully decorated, the service was good, and their food was indistinguishable from what we encountered in Bismark, North Dakota back in 1992. Except for the salsa. The salsa wasn’t good, but at least it had a little bite to it. With all the good Mexican food available in the Austin area, I honestly cannot understand how that place stays in business. Maybe there’s a bunch of North Dakota natives living nearby?

“North Dakota Mexican food” is our way of describing something that looks like what it’s trying to imitate, but has no taste or tastes completely wrong. I suppose the term could be used to describe things other than food, but I haven’t used it in that context.

I love this. It’s what? I hate that!

When we were kids, we spent a lot of our summer days at home, playing in the pool and jumping on the trampoline. And nearly every day, Mom would make sandwiches for our lunch, which she served outside on the patio picnic table. Those sandwiches were usually lunch meat: bologna, salami, or something similar, along with Miracle Whip and some lettuce, and maybe other stuff. The details are a little foggy now, 45 years later.

I do recall that at some point Mom began making the sandwiches with leaf spinach rather than lettuce. One day, after several days of eating these slightly modified sandwiches, my youngest sister, Melody, commented: “Mom, I really like this new lettuce!” That was a mistake.

You see, of the five of us, the three oldest (myself included) knew that the “new lettuce” was actually spinach. I’m not sure about Marie, who’s a year younger than I, but I know for certain that Melody, the youngest, had no idea that she had been eating spinach for the last few days. And of course my brother and I thought it was our duty to educate our sister. I’m not sure which one of us actually said, “That ‘new lettuce’ is actually leaf spinach.”

Melody looked up at us skeptically (we might have played some tricks on her before), and then looked at Marilyn (oldest sister) for confirmation. Marilyn had already done a face-palm, knowing what the reaction was going to be, and Melody took that as confirmation. She put her sandwich down and said, “Ewwww. I hate spinach!” She wouldn’t finish her sandwich and for weeks after that she’d carefully inspect whatever was put in front of her to ensure that Mom wasn’t trying to sneak something by. If she didn’t recognize it, she wouldn’t eat it.

Understand, Melody was maybe five or six years old at the time. So I guess I can cut her some slack.

Back in the late ’90s, a friend came to visit, and Debra and I took her to have sushi. Our friend liked a particular type of sushi roll, and was excited to be having it again. I don’t remember exactly which roll it was, but one of the things she really liked about it was the crunchy texture and the taste of the masago (capelin roe) that was on the outside of the roll. Since she liked sushi and was ecstatic about having that roll, I figured she knew what she was eating. So I said something about fish eggs.

Her response was worse than Melody’s: she put down the piece she was holding, spit out what was in her mouth, and then drank a whole glass of water to get rid of the taste. This was after she’d already eaten two pieces of the roll while enthusiastically telling us how much she liked it. But after she found out that masago is fish eggs, she wouldn’t touch another bite.

Since then, I’ve seen similar reactions from many other people. I call it the, “I love this. It’s what? I hate that!” reaction. I can almost understand it with food, because I’ve been in the position of being told what something was after I ate it, and I felt the internal turmoil of having eaten something that I probably wouldn’t have eaten had I known what it was beforehand. But I can’t at all understand that reaction when applied to other things. Politics, for example.

I’ve actually seen conversations that went something like this:

Person 1: “That’s a really good idea.”

Person 2: “Yeah, when President Obama proposed it, I ….”

Person 1: “Obama proposed it? What a stupid idea!”

And, of course, several years ago I saw similar conversations, but with “Bush” replacing “Obama.”

I would find it funny if it weren’t so common. It seems as though, when it comes to politics, a large fraction of the American public is more interested in who the ideas come from than if the ideas have any merit. We call that “tribalism.” It’s stupid in the extreme.

Crime and punishment

I was 13 years old when I discovered that I could sneak out my bedroom window at night after Mom had gone to bed. Dad was often out of town or working late and I’d normally be home before he returned, so I had a few hours after my official bed time to spend cutting up with my friends who also would sneak out.

One Sunday night a few of us pooled our resources and managed to get an older kid to buy us some beer and wine. I think there were four of us, a six pack of Budweiser, and a bottle of Boone’s Farm something or other. We went down by the creek and proceeded to get stupid.

I don’t remember a whole lot about the walk back home. Just little bits and pieces. We did discover some kid’s Big Wheel left in a yard at the top of a hill, and we took turns trying to ride it down the hill. As I recall, we were all too big to actually ride the darned thing. We’d just sit in it, try to make it roll, and then give up in disgust. Yeah, we were pretty drunk and probably making all kinds of noise in the neighborhood as we stumbled home.

I lived farthest from where we had been, so I got to go the last half mile by myself. I got tired of walking and sat down under a tree in somebody’s front yard. Next thing I remember, I was waking up under that tree, and throwing up in the grass. I got up, wiped my mouth, and stumbled the rest of the way home.

When I got home and tried my window, it was closed. I guess Mom discovered that I was sneaking out. I knew it was later than I usually got home after one of my after hours excursions, but I didn’t know how late. I tried the back door, which was locked, and every other window in the house. No dice. I wasn’t thinking too clearly and I needed some sleep, so I went to the front door and rang the bell.

Mom opened the door, took one look at me, and said, “You’re drunk. Go to bed.”

In my inebriated state, I wasn’t in much condition to consider the ramifications of my good fortune. No scolding or anything? I just went to my room, stripped off my clothes, and passed out on the bed. It was 2:00 AM.

Dad woke me up at 6:00 AM. “Son,” he said, “time to shower and head to school.” I was still drunk and tried to pull the “I don’t feel good” routine. But Dad was having none of it. He made it clear that being drunk or hung over was no excuse for skipping school.

I felt marginally better after a shower and a glass of orange juice, but that day was miserable. I went through most of the morning in a fog, and the afternoon was a giant headache. By the time school was over all I wanted was to go home and get some sleep. But when I got there, Mom had a bunch of chores for me to do. I didn’t get to bed until my normal bed time.

The only thing Dad said to me about that incident was that I can’t use my bad decisions as excuses to shirk my responsibilities. Neither he nor Mom ever mentioned it again.

They could have let me sleep, and punished me that afternoon: extra chores, restrict me to school and home, no phone privileges, etc. But making me to go to school was the most fitting punishment Dad could have devised. He forced me to face the direct consequences of my actions. Any other punishment would have been a proxy, and not nearly as effective.

I doubt that memory of a grounding would have stuck with me for 40 years like my memory of that day at school has. I rarely drink on a “school night,” and if I do over indulge, I don’t use that as an excuse to skip work. All because my parents wouldn’t let me skip school when I was hung over. I’d say they did a good job teaching me a valuable life lesson.

Code review on a 30 year old program

I mentioned yesterday that I’d run across a program that I’d written in 1982. I spent a little time looking it over and thought I’d post my impressions of the code. You can download the program itself and follow along if you like: RENUMBER.BAS.

I’ll admit up front that being objective might prove difficult. After all, I wrote the program 30 years ago. I might be too easy on myself in some places and too hard on myself in others. I do have to keep in mind that some of what we would consider poor programming practice today was de rigueur at the time, and much was a result of the tool. BASIC wasn’t a particularly good language for writing structured code. Today’s BASIC (even Visual Basic 6) is a much different beast than the line-oriented BASIC of 1982.

At less than 400 lines, the program isn’t particularly large or, as it turns out, terribly complicated. My recollection, before I saw this code again the other day was of a much larger and more complex program. I do recall that it was something of a challenge at the time, although I never doubted that I could write it. In a modern block-structured language, the program would easily be 1,200 lines of code. That old BASIC could be terse, and there were definite benefits to placing multiple statements on a single line.

General operation

The program operates in two passes.

Pass 1

For each input line
    - Strip high bit from each character // required because the editor used
                                         // would sometimes set the high bit.
    - Parse line number (if it exists) and save
    - Write fixed output line to a temp file
    - Compute new line numbers

Line numbers are stored in a two-dimensional array called LINE.NUMBERS. After the first pass is done, the first column contains the old line numbers and the second column contains the new line numbers. Given that structure, it’s easy to look up an old line number (using binary search) and get the new line number.

Pass 2

For each input line (from the temp file)
    - Parse the old line number, look it up in the line numbers array, and
      replace with the new line number.
    - Parse the line looking for GOTO, GOSUB,
      and other constructs that make line number references.
    - As each such construct is found, get the old line number, and replace
      it with the new line number.
    - Write the modified line to the output file.

That’s the general operation. The option to move a block of code rather than renumber the entire program adds some wrinkles, but the basic idea remains the same.

First impressions

After I got past the visual assault of all-capital BASIC and such dense code, I tried to focus on the overall structure of the program. I thought I did a creditable job of modularizing the code at a high level, given the constraints of the tool. Each major subroutine is preceded by a short comment describing what it does, and those subroutines are reasonably short and focused.

Although I did place multiple statements per line in some places, most of that was due to the lack of a multi-line IF...ELSE construct. You'll often see

    IF <condition> THEN <stmt1>:<stmt2>
       ELSE <stmt3>:<stmt4>

I created that visual line break by inserting a LF character in the editor. That little bit of trickery made it look like a multi-line construct, although the entire thing was considered a single logical line by the interpreter. Doing that made the code more readable.

For reasons that I don’t quite recall, I didn’t like using the DEFINT A-Z statement to make all the variables implicitly integers. I think I got burned by relying on implicit definitions at some point and went on an explicit kick. The variable FOUND%, for example, is explicitly made an integer by the % suffix. Similarly, strings are identified by the $ character. Considering that the program doesn’t deal with floating point numbers at all, there’s no good reason not to have used DEFINT. It probably would have made the code more readable. I’ll dock myself on style for this one, especially because I didn’t apply it consistently.

As shown here, the program won’t handle more than 1,200 numbered lines. That’s not as bad as it sounds, though. The compiled BASIC didn’t require a number on every line–just those that were the targets of GOTOGOSUB, etc. I don’t recall how large Dean’s source code (the program I wrote this to handle) was, but I do remember that 1,200 was far more line numbers than we actually needed.

An observation: it took me a few minutes to remember what PRINT #2 is supposed to do. It writes text to file number 2. The number is assigned in the OPEN statement. My first thought on seeing that was, “Some comments would have been nice.” But in truth, the problem was that I’m unfamiliar with the language. My 21-year-old self would rightfully object if I told him to add a comment like:

    ' WRITE LINES TO OUTPUT FILE
    PRINT#2, A$

Doing so would be akin to commenting a MyStream.WriteLine(line) today.

I was too enamoured with short variable names. Whereas it’s true that code ran faster with shorter variable names, this wasn’t a particularly performance sensitive application. My usage here was inconsistent. There are plenty of variables like LINE.NUMBERS and LASTLINE, but also too many like MT%.

On a side note, I have to say that BASIC is the only language I recall ever using that allowed the period to be part of a variable name. Other languages use it as a scope separator. LINE.NUMBERS, for example, would refer to the NUMBERS field in the LINE structure. But MBASIC didn’t support the underscore or any other such separator character.

I also made some poor choices in variable names. FIND for the line number to find is a particularly good example, as is FOUND for the result. Other examples are the variable MOVE, and using CHAR% and CHAR$ in the same context, and plenty more.

It’s impossible not to use global variables in a BASIC program, since all variables are global and there are no parameters to subroutines. Communication consists of setting global variables before calling, and retrieving the results from other global variables after the call returns. Still, it’s considered good practice to keep variables as local as possible. I don’t see any egregious misuses of the global data model, but I probably could have made things more explicit by marking data transfer variables somehow.

I’d give myself good marks for the overall structure of the program and trying to maintain locality of reference. About average for variable naming. A big black mark for failing to use DEFINT and for being inconsistent with the type suffixes.

A few nasties

Take a look at this construct:

610 IF MOVE%=0 THEN
        WHILE NOT(EOF(1))
        ELSE WHILE NOT(EOF(1) AND EOF(3))

When I saw that the other day, I remembered writing it. More to the point, I remember thinking that it was incredibly clever. And it gets worse. The loop is terminated starting at line 980:

    980 IF MOVE%=1 THEN WEND:GOTO 1000
    990 WEND

That BASIC allowed such a wonky construct is kind of surprising. Imagine being able to write this in a C-like language:

    if (move == 0)
        while (!eof(1)) {
    else
        while (!(eof(1) && eof(3)) {

    // do stuff here

    if (move == 1)
        }; // ends the loop for one case
    else
        }; // ends the loop for the other case

I could have written that much more clearly and avoided the brain bending wonkiness. BASIC didn’t short circuit Boolean evaluation, but there were other alternatives.

Major demerits for that bit of cleverness, youngster. You knew better.

The first time I saw “REFRENCES”, I thought I’d made a typo. But there are four uses with that spelling, and no uses of the correct spelling, “REFERENCES.” Apparently, I didn’t know how to spell.

The verdict

Overall, I think I did a good job on that program. The most important part was that it worked. As I recall, there were a few minor bugs and one showstopper after the program was in production, but after that the program got regular use for several years. I don’t recall what any of the bugs were, and I don’t know if this version of the program includes the fixes.

It’s tempting to rewrite the program in C#, just to see how it would look. But not quite tempting enough to actually do it.

My first programming contract

Today a coworker and I were discussing the first programs we ever sold. He and I have been in the business about the same amount of time (right at 30 years), so it was a nostalgic although unfortunately brief discussion.

After dinner this evening, I got to wondering if I still had that program lying around somewhere. Thanks to the magic of multi-terabyte drives and Windows Explorer’s search facility, it was a matter of just a few minutes to locate a copy of that program. Man, I’m a pack rat.

10 'RENUMBER.BAS
 PROGRAM RENUMBERS BASIC PROGRAMS.
 BASIC PROGRAM MUST BE SAVED IN ASCII FORMAT OR EDITED WITH A
 WORD PROCESSOR SUCH AS WORDSTAR.

This was the fall of 1982. I’d left college after two years and was doing odd jobs to get spending money, but mostly I was broke. My friend Dean had a fairly large compiler BASIC program that he had to renumber because … well, that’s what happened to BASIC programs. You thought you put enough space between line numbers and sections, but inevitably you’d get squeezed.

That wasn’t a problem with interpreted BASIC, because there was a RENUM command. No such thing in the compiler BASIC, though, and you couldn’t load the compiler BASIC program into an interpreter because the code didn’t have a line number on every line.

One feature of Microsoft’s compiler BASIC is that not every line needed to be numbered. Only lines that were the targets of GOTO, GOSUB, and other such statements required line numbers.

Dean mentioned this one night and, eager for a challenge (or not smart enough to keep my mouth shut), I said that I’d write him a program to renumber his BASIC program. After all, I’d been writing BASIC programs for three whole years. I’d even taken a few college courses on programming. Of course I could whip this thing out in no time.

I honestly don’t remember how long it took me to write the program. Probably on the order of a week of evenings spent at Dean’s shop standing at one of his computer terminals (a Televideo 950 hooked to a machine running MP/M, supporting four users with a 4 MHz Z-80 processor and a whopping 256 kilobytes of RAM).

The funny thing is that I took on the project as a challenge: something fun to do while spending time with my friend. Dean might have mentioned that he’d pay me for it, and he did when I finished it, but that wasn’t my primary motivation.

I always thought it was funny that I used an interpreted BASIC program to renumber his compiler BASIC source file. In the days before source level debuggers for compiled code, the BASIC interpreter was a much friendlier environment for prototyping things. I probably would have written the program in Pascal if I’d had a compiler for it at the time. The only other language I knew at the time was Z80 assembly, and I wasn’t looking for that much of a challenge.

The program is surprisingly small–less than 400 lines of code. Looking it over brought back some memories. Surprisingly, the code is pretty good. A little difficult to follow, as even small BASIC programs are. But that’s due more to the nature of the language than my meager programming skill at the time. There also are some reasonably mature insights in the code.

More than anything, looking at that code makes me appreciate languages that have real subroutines that require parameters and return values. Calling line numbers (GOSUB) and communicating with globals is terribly difficult to follow. And the language lets you do (sometimes forces you to do) wonky things.

I think I’ll study this code a little more and do something of a code review. Might even post the program here. That should be fun. More next time.

You never know who’s listening

The barracks at military school had three red lights on each floor (deck). These were fire lights, on a different circuit (one would assume battery backed up) than the rest of the lights in the building. They were supposed to be on from dusk until dawn, and it was the Duty NCO’s job to turn them on at sunset and off at first light (or when he got up at 6:00 with the rest of us).

We, of course, called these the whorehouse lights. I can honestly say that for the first year or two I was at the school, I had no idea what else to call them. I also didn’t  really understand why they were called whorehouse lights. It wasn’t until I was 15 or 16 that I made the connection with the red lights.

The Duty NCO (usually a younger cadet–a freshman or sophomore) very often forget this important duty, and it wasn’t uncommon to hear the company commander or company first sergeant bellow down the hall, “Duty NCO, turn on the whorehouse lights!” After all, we were all guys there. Our language in the barracks was . . . coloful. Okay, profane. Immaturely so. But I digress.

So parents’ weekend rolls around and there are parents wandering through the barracks all day. But that usually doesn’t last beyond mid afternoon. By then all the parents and siblings are back at their hotels getting ready for the Marine Corps Birthday Ball to be held later that evening, and all the cadets are lounging around or cutting up before rushing to get into their dress blues just in time to make the bus for the ride into town where the Ball will be held. (The Ball is held in the basketball gym these days. Back then, our gym wasn’t large enough to hold the entire Corps of Cadets, much less their parents and dates.)

You probably know where this is going already.

I was the company commander my senior year. I walked out of my room shortly after sundown and noticed that the fire lights were off. So I did what I’d done countless times over the last year (the previous year I was the second-ranking junior cadet in the company): in my best command voice I shouted, “Duty NCO, turn on the whorehouse lights!”

Then I turned around and saw a younger cadet coming out of his room, trailed by his father, his mother, and two pre-teen sisters.

I fully expected to hear about that incident from my Drill Instructor, but I never did. Apparently the parents were either too shocked or too amused by the look on my face to further embarrass me by bringing it up with the D.I.

The robot story

Many years ago, some friends and I decided to build a robot. Dean was the primary hardware guy, and I was in charge of writing most of the software. The robot was a pretty ambitious undertaking that we never finished because most of the development team (four of us) moved away or had to spend our time on other more pressing things.

Early on in the development, Dean was wirewrapping the main logic board (Z-80 based) and I was writing the firmware on a CP/M system. By the time he had the board wirewrapped, I had the first cut of the base code finished. We burned the firmware into an EEPROM, did what bench testing we could, and then plugged the board into robot. After checking all the connections, including the RS-232 cable that we would use to control the robot during this test, we all stepped back and Dean turned on the power.

The robot’s motor came from an electric lawn mower, and the power source was a very high capacity lead-acid battery. We’d done some testing of the drive train earlier and learned that the thing was capable of some rather high speeds. Probably overkill for a little robot, but we figured we’d never tell it to go that fast. Little did we know . . .

Dean turned on the power and the robot took off across the shop like a rocket. 10 feet away from the bench, the RS-232 connector disengaged and the robot continued the rest of the way across the room and smacked into a wall. Where it stayed, its wheels spinning madly while the four of us rolled on the floor, laughing.

After picking ourselves up off the floor and turning off the robot, Dean turned to me and said, “Doesn’t your software turn off the motor at boot like I told you?”

Me: “I thought so!”

Sure enough, we looked at the code, which read:

start:
    ; turn off the drive motor
    xor a
    out (DriveMotor),a

Dean’s instructions to me at the time were, “You control the motor’s speed by outputting a value from 0 to 255 to the motor control port.” So I figured that 0 would be the lowest possible speed (i.e. stop), and 255 would be “shoot across the room like a rocket.”

Of course, Dean looked at that code and saw the problem immediately. If he explained to me why he’d designed the logic so that 255 was stop and 0 was “go like a bat out of hell,” I don’t remember the specifics. All I know is that I thought that doing things backwards made little sense.

People often look at me funny when I ask them today for clarification. A music player API, for example, might have a Volume property that’s documented as taking a number from 0 to 100. When I ask the author if 0 is mute or max, he rolls his eyes and says, “mute, of course.” Usually. But over the years I’ve run into a few backwards APIs similar to the robot’s drive motor, most often when dealing with custom hardware. I’ve learned the hard way that it pays to be sure, even if it does result in some funny looks from time to time.

Elephant on a trampoline

I laughed out loud when I saw this picture.

I was nine years old when Dad bought a trampoline. He had us check out some books from the library so we could learn the proper way to jump. I don’t know how much attention everybody else paid to those books, but I kind of glanced through them to get ideas for weird and wacky ways I could court death.

All five of us kids got pretty good on the trampoline. My older brother and sister had better form than I did, but I was the wild man. I’d try pretty much any trick I heard about, saw a picture of, or saw somebody else do. I even made up a few myself, although I learned later that they weren’t exactly original.

I do think I came up with original ways to perform unexpected dismounts. On one occasion when I was trying a new trick, I did a back flip right off the trampoline and came down directly in front of my brother, who slowed my descent enough that I landed on my feet. My recollection is that it looked almost like we planned the whole thing. Perhaps his memory of the event is better than mine. I was a bit preoccupied with my life flashing in front of my eyes as I sailed through the air to my doom.

I spent a lot of time on that trampoline from the time Dad bought it until I was 16 or 17. One summer I made a point to spend an hour every day on the thing.

Fast forward 20 years or so when Debra bought me a trampoline for my birthday and I set it up out here in the back yard. It was fun for a while–a week or so–but then the new wore off. It wasn’t nearly as much fun as when I was younger and always had friends who would come over and play on the thing with me. And for whom I could show off my latest trick. Plus, I wasn’t in nearly as good physical shape at 35 as I was when I was 16. Jumping on a trampoline is work.

We sold the trampoline a few years later, and a few years after that we were at a friend’s house. He had a trampoline for the kids, so I took it on myself to teach them a few tricks. No crazy flips or anything–Mom didn’t want me teaching her kids that, although I did have to see if I could still do that back and a half.

I was showing them how to get some real air (feet at shoulder width, pushing off gradually at the right time, using arms to control balance, etc.). I was getting some pretty good height. Then I noticed that the kids were looking under the trampoline, pointing, and giggling. And I was transported back 30 years to when we first got the trampoline and Dad was showing us how to use it. When he jumped, the mat nearly hit the ground! We all giggled at that.

Anyway, seeing the kids pointing and laughing made me start laughing with the memory. So I bounced, shifted to a sitting position, hit the trampoline with my butt … and hit the ground! Yes, the combination of my weight and the height I was getting stretched the springs far enough that I hit the ground.

I checked after that. The trampoline’s weight limit was 200 pounds. And I only weighed 180 at the time. I guess they didn’t think a 180 pound man could get enough altitude to push the mat that far.

And that’s why I laughed out loud when I saw the elephant on the trampoline.

Sam Sheepdog and Ralph E. Wolf

Sam and Ralph were among my favorite Looney Tunes characters. I thought of them this morning when I said hello to my co-worker as I came into the office. So I thought I’d look them up on YouTube. Google is great. I searched for [wolf sheepdog looney tunes], and got the Wikipedia article.

All told, there were seven episodes that starred these two. The first was made in 1953, and the last in 1963. I was able to find all but the first (Don’t Give Up the Sheep) on YouTube. There are some clips of the first episode, with an alternate sound track, but I couldn’t find the original.

I did find Don’t Give Up the Sheep on mojvideo, but didn’t see a way to embed it.

Here are the others, from YouTube:

http://www.youtube.com/watch?v=IEQ1tA5QcPY

http://www.youtube.com/watch?v=WQ5ZVrHdtUY

http://www.youtube.com/watch?v=-k6s1_5BMGY

http://www.youtube.com/watch?v=Up0leZe1Un0

http://www.youtube.com/watch?v=yZKvuSYIykY

There also was a cartoon in which Taz takes the place of Ralph.

https://youtube.com/watch?v=s84jETMjCFQ

I didn’t much like the voice of Sam in that episode.

YouTube has a lot of the old Looney Tunes and Merrie Melodies cartoons. Be careful. You could spend the whole day laughing.

If you find Don’t Give Up the Sheep on YouTube, please let me know so that I can include it here.