All posts by Richard S. Crawford

At Square One. Still.

Back on March 7, I referred to a project I’d taken on at work: re-engineering a large piece of open-source software, Phorum, which is written in a hypertext processing language called PHP (a scripting language similar to ASP or Cold Fusion), to operate against our in-house database schema. Phorum typically comes with its own database and is designed to be run in conjunction with an open-source database program called MySQL, and although ports to other database programs are available, it really only works best when compiled with MySQL. Our company uses Oracle as our database backend, and our platform engineering manager decided that he wasn’t at all pleased with the way Phorum builds and creates new tables, willy-nilly — we don’t want a third-party application, he told us, to build new tables at will in our database. So our senior database programmer built us a new schema and one of the Portland developers and I spent two months re-engineering Phorum to work with a new database schema built in Oracle instead of its native schema built in MySQL.

The project was finished, more or less, shortly before I left for Ireland and the UK. I was never quite happy with the way it turned out; there were major bugs in the program, and certain elements of its functionality were never thoroughly implemented. But QA gave our re-engineered version of Phorum a formal write-off and we implemented it and it went live and our customers used it (more or less, though I don’t believe utilization was ever very high). The other developer and I created a long list of known issues that we intended to work on and fix when I returned from my trip.

Of course, while I was gone, the axe fell, and the other developer that I’d been working with was laid off. I was told by one of the managers in the Sacramento office that I would be inheriting the whole of the Phorum re-engineering project when I returned, and I looked forward to that. There was a lot left to do, and with a whole new piece of functionality being implemented on our customer website, there was going to be a need for an entirely new set of code. Phase II of the Phorum Re-engineering Project would be kicked off around about mid-August.

And here it is, mid-August. And the other day, B–, the other developer in the Sacramento office, sent me an instant message telling me that he had been assigned to this project. He knew that I’d been anticipating this project and looking forward to it, and he knew that I would be upset that I wasn’t assigned to it. He was right. I was upset. I don’t think I’ve ever gotten that upset at work since my days working at Pizza Hut when I nearly got into a fight with an assistant manager who threatened to shove my glasses down my throat.

The reason B– was assigned and not me? Based on an IM conversation I glanced at over someone’s shoulder (not actually the way it happened, but I promised certain parties that I wouldn’t reveal how it actually happened), it was because the Production Manager wanted someone more competent to handle the project. "No offense [to Richard]", he said, "but we need someone to clean up the mess that he made."

Of course, when I asked the production manager directly why I wasn’t assigned to the project, he replied, "I’d forgotten that you’d worked on Phase I, and when [the other developer] left, all of his knowledge base was transferred to C–, and it was natural to assign this project to him." B–, to his credit, had declined to work on the project (which I told him was appreciated but really unnecessary — though B– told me that the Production Manager knew I’d be upset that B– was working on this and not me). So the project team for the project is composed entirely of developers up in Portland.

Of course, I knew that the Production Manager’s response to my own query was bullshit, but there’s no easy way to call a manager on that, so I let it drop. He told me that he’d assign me to technological projects in the future, but I honestly don’t believe him at this point. I’ve been hearing this sort of promise for nearly a year now and nothing, really, has come of it.

What this has all really made clear to me is the enormity of the error I made in taking this job, and how badly I’ve screwed my career up. I was eager to leave the University, but I can’t remember why at this point, if it was for anything besides the income. If I’d remained at my last position with the University, in Information Technology: Communications Resources, I’d have, by now, over a year of solid Cold Fusion programming experience under my belt, not to mention formal training in Oracle, XML, SQL, C++, and Java. And while my pay would not be as high as it is now, I would certainly be in a much better position to move forward in a career in programming than I am now.

And so I find myself taking stock of my situation. I know HTML — but that’s no major accomplishment any more. HTML is startlingly easy to pick up. I have a miniscule amount of experience with Cold Fusion. I pretend to know Java, but I really have very little experience with it, none of it paid; same with C, Perl, and Unix/Linux. I thought that I knew PHP and SQL.

It’s hard to accept that I am still far away from a decent career in the field, and I’m feeling overwhelmed and intimidated. I did major damage to my career by taking this job, and I have no idea how to go about fixing it. And I’m beginning to wonder if it’s really worth it.

Mind you, I’m not mad at the company, or the Production Manager, or anyone in particular, except for myself. This is rather typical of me. At the risk of sounding like someone who is deep in the throes of a typical midlife crisis, I’m looking back over my life and trying to find some accomplishment that I can really point to with pride and finding very little. I’ve never been very good at disciplined approaches to anything, nor at committing myself to anything. What I describe as "intellectual vagabondism", my tendency to expose myself to a wide array of fields, is not so much a broad range of knowledge as it is an inability to focus my efforts on one thing in particular. My degree in philosophy isn’t due to any noble commitment to learning as it is to laziness; I found that I could do well at philosophy with very little effort, but I could also do well at other fields, such as physiology or biology or chemistry, by applying myself. I just didn’t feel like it.

I hate feeling like I’m at square one, and I hate knowing that if I’d ever been able to approach anything with discipline I would not be at square one, that I might be able to point at something I’ve accomplished honestly, without having to fake or exaggerate its importance. I hate knowing that my college years were a waste and that I lack any sort of discipline or concentration that would allow me to move forward.

At least I have a job, which pays decently even if it is a dead-end job. And right now there are few projects that are pure HTML, and I’m simply not being assigned to other projects (and it’s not through a lack of my volunteering). So right now my workload is light, and my work load next week will be light as well. So I have plenty of time to crack open my books on C and Java and pretend that I have the discipline to learn something new.

I suppose that this might be a good thing.

No More Yielding than a Dream

And this weak and idle theme,
No more yielding but a dream…

–"A Midsummer Night’s Dream", Act V Scene 1

I know that I really ought to be concentrating on one thing at a time, but there are far too many things that I want to do. A partial list:

  1. Learn Linux (so that I can get my Linux box working and browsing our local network successfully, not to mention getting it talking to our printer)
  2. Learn Java (heck, I’m even enrolled in an on-line class)
  3. Install and configure all kinds of neat things on my Linux box — Apache, Tomcat, MySQL, PHP, Perl, python — and learn how to run them all
  4. Run a new Dungeons and Dragons campaign
  5. Create and run a full-length scenario in a role-playing game system that a friend of mine and I have been developing for about three years now
  6. Write a novel that takes place in that same milieu (loosely based on The Pilgrim’s Progress, or "The Rhyme of the Ancient Mariner"
  7. Learn C and C++
  8. Learn how to program for the PalmOS
  9. Get a new job
  10. Finish reading The Lord of the Rings
  11. Work out regularly
  12. Learn XML
  13. Read Hamlet on the Holodeck by Janet H. Murray
  14. Learn Unicode
  15. Finish writing a database application in PHP and MySQL for our family website
  16. And, oh yeah, sleep once in awhile.

In an ideal world, I’d find some way of combining several of those projects into one big project, making my life much more efficient. Of course, tools like my Palm Pilot make it much easier in some ways; for example, during a corporate update meeting last week I was able to write notes for my Dungeons and Dragons game right into my Palm Pilot and look like I was paying attention and, yes, even taking notes about what the COO was saying.

Actually, I suppose, in a truly ideal world, I’d find a way to get paid to do all of those things. Heck, if I could find a way to get paid what I’m earning now to create sophisticated on-line web/database applications with PalmOS components and which focused on my own creative little worlds of science fiction and fantasy — well, then I’d be very happy. The same friend with whom I’m developing the new role-playing game dreams of a day when we can travel to a science fiction convention or see a new science fiction film and write it off as a business expense.

Actually, that’s only half of what I’d like to do. The other half is exactly the same thing but with a focus on building similar applications for research professionals — specifically, field researchers involved in cultural, wildlife, and natual resource conservation.

Now that I think about it, though, perhaps those two things aren’t all that different after all. It’s all about me learning how to use the latest and greatest web-enabled technologies to enable people to work with each other to explore and learn about the world around them and tell meaningful stories to each other about what they’ve found and learned.

But that appears to be a weak and idle theme, no more yielding than a dream…


Addendum, a few minutes later. There are actually a couple of different organizations which do at least part of what I’m interested in: Skotos has been seriously developing new technologies to build up interactive storytelling on the web (even if the front end honestly doesn’t resemble anything more interesting than a pretty MUD interface); and Explorati has been building new software and tools to enable web based communities of all types, with a particular focus on interactive storytelling. Unfortunately, neither company is hiring. Ah, well.

Wherein Our Hero Discovers He's Been On Earth All Along

All in all, I think that Jennifer has probably made the transition from engaged to married more smoothly than I have. While I still find myself stopping dead in my tracks from time to time (inconvenient when I’m driving at eighty miles an hour down highway 80) and thinking to myself, "Wow! I’m really married now!", Jennifer says that she doesn’t feel all that different from when we were just engaged and living with each other. Well, okay, perhaps there isn’t that much different on a physical level — we still breathe the same air, live in the same house, and our feelings for each other haven’t changed. But on an existential level, there is a difference between being engaged and being married. I can’t really put my finger on it, but I’m sure that there is. Or maybe I’m just imagining the whole thing.

The hours leading up to the ceremony were hectic and stressful for me, and nothing compared to what Jennifer and her mother had to deal with, what with the seamstress running obscenely late (the ceremony was nearly an hour late because the seamstress was still sewing the groomsmen’s shirts at the last minute and trying to fix the bridesmaids’ dresses which had somehow become far too small between the last fitting and the day of the wedding). Fortunately one of the dancers from the dance troupe that came to perform at the wedding was well versed in Renaissance garb in general and helped all of us men put our outfits on and made sure we looked at least halfway decent wearing them. The only problem for me was that I wanted to take my groomsmen out to lunch before the ceremony, but between one thing and another we wound up having to go to a different restaurant than the one I’d wanted to go to in the first place, and then my best man and I ended up at the church with about one minute to spare.

I don’t remember all that much about the ceremony itself. I remember seeing the flower girl stumble her way down the aisle, upending her basket of flowers and spilling them all out on the floor and then deciding to take a nap midway down the aisle; I remember something about some vows that we exchanged; I remember Jennifer’s father coming close to tears; I remember my best man clapping me on the shoulder just before the ceremony when I confessed, "Now I’m nervous"; and, of course, I remember Jennifer walking down the aisle, glowing in her dress, more beautiful and radiant than I had ever seen her before. I remember standing up with the minister, holding Jennifer’s hand, and falling in love with her all over again.


As her wedding gift to me, Jennifer gave me a new computer, which her brother-in-law (which, I guess, she shares with me now) had put together and built for me. It’s got Windows 2000, Linux, and just about every bell and whistle that I could ever want. And it’s ironic that while I’ve probably spent more time in front of this computer than I ever did in front of my old computer, I’ve found myself with even less time than I ever did to post to this journal. I’ve been merrily learning about Samba and Linux networking to get my new box talking to the network that Jennifer and I have set up in our house, I’ve figured out how to keep our computers with static IP addresses even though our router is set up with a DHCP server, and I’ve even figured out how to use my old laptop computer as a primitive web server in addition to its duties as a file server and a print server. I haven’t yet figured out how to use Samba to print from my Linux box through the old laptop, but I’ve learned how to use my Linux computer to read files from Jennifer’s old Windows 95 machine. That part was easy.

And in addition to that I’ve been spending a lot of time playing this really cool horror FPS game called Undying. Far too much time, I suppose. All in all, I’ve been sleeping a lot less than I should over the past couple of weeks. I only hope that Jennifer hasn’t been feeling neglected.


Not, of course, that Jennifer is any less of a nerd than I am. For our one-week anniversary, Jennifer and I used some of the gift cards we’d gotten from Best Buy and picked up a Sony Dreamcast game station and a copy of House of the Dead 2. We’ve spent many a happy hour together since then shooting zombies and laughing at the cheesy voice overs and smiling warmly at the oozing green blood of melting undead creatures.


I tell Jennifer that her left pinky toe is corrupt and is bent on world domination, which is why that is the only part of her that I don’t love. She just looks at me strangely and says, "Yes, dear," in a strangely condescending voice.


Last night we went with some friends to see Tim Burton’s "re-imagination" of The Planet of the Apes. I can only hope that Tim Burton’s hands were tightly bound while this movie was being filmed, because it’s the first Burton movie that I didn’t like. Well, okay, let me amend that. When I first heard that Tim Burton was going to remake The Planet of the Apes, I thought, "This could be cool." But the more I thought about it, the more I realized that I haven’t seen a single remake of a classic science fiction film that I thought was any good. I could give Tim Burton’s version two stars only because it didn’t suck as bad as I thought it was going to. I can only hope that the reason why Tim Burton made this film was because someone in Hollywood had decided that by God this film was going to be made, and Tim Burton stepped bravely forward and said he’d do it. Sort of like the guy who throws himself on a landmine so that other people can live.

The word "re-imagination" should be banned. It doesn’t mean, "A reinterpretation of the original source material." It means, "Not willing to go the extra distance to make the remake anywhere as provocative as the original." Tim Burton’s film was full of gaping holes, inconsistencies that make you question your very sanity, and unresolved plot lines that scream, "SEQUEL COMING!". And there was a twist at the end, but the twist at the end of this film carried none of the power of the twist at the end of the original. When I saw the last few minutes of this film, I wasn’t shocked or surprised or anything… Instead, I found myself laughing out loud. I couldn’t help myself. It was ludicrous.

If you’ve never seen the ending of the original Planet of the Apes and have no idea what it is (which I doubt, since it’s probably the most classic twist ending in the history of science fiction and has become a mainstay of modern American culture), go out and rent it right now. Go ahead, I’ll wait. I just don’t want to spoil anything for you.

Okay, so now you know that Taylor, Charlton Heston’s character, was on Earth all along. And isn’t that always the way it is? Just when you think that you’ve landed on another planet, you discover that you’re really at home after all.

Being married is kind of like that… only without the nuclear holocaust and the enslavement of humanity (though I guess some people might differ on that second point). It’s honestly not all that different from when we were engaged, I suppose, but still… something has changed.

And I’m finding it pretty damn wonderful.

To My Best Friend

Dear Jennifer,

Today is the day that we are married.

Do you remember over a year ago when we sat down in Borders in Davis with our calendars and your Palm Pilot and tried to pin down this date? We had to worry about the fact that half of my family has birthdays during this time of year, close friends of ours have wedding anniversaries, and so on. But we wanted to do it at this time of year — I don’t remember why.

And I remember how I proposed to you: by making it a hypothetical at first, asking, "If I were to propose to you, what would you say to me?" It was late at night, we’d been dating for just three weeks, and we’d spent the entire day together — as usual. I’d made my mind up that morning that I wanted to marry you, and I’d spent the entire day trying to figure out how to ask you. In the end, of course, I took the wimpy way out. But you still yes.

We joke with each other and with our families and friends about the reasons why we’re getting married. "Our friend dared me to marry her." "I lost a bet." "I drew the short straw." "I felt sorry for him." And so on. Of course, we both know that the reason I asked you was because I love you more than I ever thought I could love anyone, and I knew that I wanted to spend my life with you.

I thought I knew you a year ago. Since then, we’ve been through a lot together: job crises, job changes, house building, various family issues, friend issues, sick cats, late night emergency room visits, far too much traveling. I’ve seen you in good moods and bad, laughing and crying, happy and angry. Out of everyone I know, you’re the only one who can send me a single word on Instant Messenger and make me spew coffee all over my keyboard at work (people at work know by now that random laughter from my cubicle usually means that I’ve just gotten another e-mail or another Instant Message from you and they no longer question it). You’re the only one I know who can smile at me and make me know that whatever stupid thing I’ve done is forgiven. You’re the only one I’ve ever wanted to marry, that I’ve ever wanted to spend the rest of my days with.

So many times over the past year I’ve held you close at night or sat next to you in the car, or laughed at a joke you said. So many times I’ve looked over at you while you slept and sat the light of the streetlamp outside our window shine down on your face and thought how beautiful you are.

Every relationship has problems. Every marriage has its good years and its bad. All I can do for you at this moment is repeat the promise I made during the ceremony: that I will be faithful to you all of our lives, that I will love you with all my heart and all my soul, and that I will hold you close to my heart forever.

Richard

Farewell to Debauchery

I’m surrounded on all sides by deceit and duplicity!

A couple of weeks ago, Jennifer told me that we were going to have dinner with our friend D– and her partner, and that we were going to go out to an Indian restaurant and have salmon tandoori. I’m never one to pass up salmon tandoori, and I enjoy D–‘s company quite a bit. And then the other afternoon, Jennifer told me that we needed to stop at S–‘s house on the way to dinner to drop off some garb so that S– would have an outfit to wear to the wedding.

"No problem," I said. "I like S– and I haven’t seen her in ages."

I should have known something was up right then. S– is taller even than me, standing at 5’10" or so, while Jennifer stands at just about 5’3". If I’d been thinking at all, I would have realized that Jennifer’s skirts would never fit on S– without significant alteration.         So on Saturday night, we piled into Jennifer’s car to head out to Davis. As we pulled up in front of S–‘s house, I saw my old friend J– walking up to her front door. "What a coincidence," I thought. "I haven’t seen J– in at least five years, and I had just gotten in touch with him by e-mail a couple of weeks ago." I still didn’t make any sort of connection.

Since Jennifer was driving, I suggested that I would hop out of the car and drop off the bag of materials she’d given me and hand them to S–. It would give me a moment to say hi to both J– and S– before rushing off to dinner with D–.

So I got out of the car and walked up to the front step. I went inside to give S– a quick hug, and saw my best man, two of the groomsmen, and another old friend all in her living room. Even then, I had no clue. I just assumed that they were all over at S–‘s house to play Dungeons and Dragons or something — all of my friends are gamers, and S– has always been kind of a gaming central in Davis.

Then I saw Jennifer drive away through the front window. So that’s when I turned to my best man and said, "What’s going on?"

"I finally got you back," he told me.

And that’s when I knew that I was at the center of a web of lies and conspiracy, and that tonight was going to be the traditional last night of debauchery and rowdiness that every groom-to-be goes through a week or so before the wedding.

I deserved it, of course. When my best man got married and I was his best man, I arranged for a large party at my house. I got a couple of our friends to go with me to his house (he lived in Sacramento at the time), and we took him to lunch and a movie, claiming that that was his bachelor party. Then we brought him back to my house to work on a creative project that we were all working on at the time. Another of our friends was already waiting for us there. Even then, he had no idea what was going on until his own brothers showed up, followed some time later by the stripper.

And that is pretty much what happened to me that night. Jennifer had cleverly snuck my medicines for that night and the next morning in to the bag that she’d given me, the bag full of "garb" for S–; she’d been in on it the whole time.

I can’t really talk in detail about what happened the rest of that night. Jennifer knows all, of course, and so do one or two other people outside of who was actually there. Suffice to say that the entertainment I’d provided for my friend’s bachelor party was repeated for mine. The stripper was talented and put on a good show, and the alcohol was plentiful. There was good music, good conversation, and I had a great time.

Jennifer came the next afternoon when I was mostly recovered and took me home. As we drove away I thought about my friends and about the wedding and about my life with Jennifer. I had a great time, of course. And I love my friends for putting it all together and for making me the object of their conspiracy and web of deceit. And now, more than ever, I am ready for the wedding and to spend the rest of my life with Jennifer.

After all, how could I not love someone who is willing to trust me with a month by myself in Europe (even knowing that part of my time there would be spent with my friend A–, a single woman), and who would conspire with my friends to throw me a party which included a stripper and all sorts of debauchery?

Sorry guys. She’s spoken for.

------------------------------

On another note entirely, I’ve completed another minor enhancement to this website: my current reading list, which is database-driven so that all I need to do is update my reading list in my database and the most current books will show up on my main page, on my Library page, and to the right of my journal entries. There may be no use to you for this information, but I think it’s pretty spiffy.

Two More Weeks

Sometimes, I go through periods where I’ll write an entry for this journal just about every day. At other times, a week or two will go by without me writing a thing. I think at this point I’ve gone for more than two weeks. I hope that I haven’t lost my one or two regular readers as a result.

I’ve kept myself busy at work by cracking down hard on those new languages that I’ve decided to teach myself. I have gone through about half of the C book that I purchased, and I’m finding the basic concepts fairly easy. I wrote a small program to do a quick calculation that Jennifer and I are constantly making for Weight Watchers, and it worked perfectly. Spurred on by my success, I launched Code Warrior and began to try writing a version for my Palm Pilot. I quickly found myself mired in forms, in code, events, menus, and so on. I had hoped to finish this program by this weekend so that Jennifer and I would have it on our Palm Pilots, but I wasn’t able to get it done. My next goal is to get it done by the end of the week.

I’m learning Java rapidly as well, and finding it an enjoyable and easy language to learn. Learning to program, I’ve decided, is easy. Learning to program well is hard.

So learning C, Palm OS, and Java have kept me busy for the past couple of weeks at work while the other Sacramento developer and I have sat and waited for something to do. Finally, though, the day before yesterday, we got a new project. One of the developers up in Portland had developed a new template to use for the company’s corporate site, and it fell to B– and me to take care of copying and pasting content from the old templates into the new ones. I’m certainly not expecting that every task at work will be an exciting one, but this is kind of ridiculous. This is the kind of work that companies hire temporary employees for. My title in my company is Senior Web Developer, and it’s gotten to the point where I’m embarrassed to use that title in internal business; copy-and-paste is certainly not senior level work. I’ll happily use that title on my resume, though. My boss told me, "Do a good job on this project and keep volunteering for new projects; that’s how you’ll get out of doing nothing but HTML." I was a bit too frustrated at the time to remind him that I’d been working on just that for nearly a year, and that I’d been involved in a number of projects before the corporate restructuring that went beyond this level of work. B– and I have decided to implement the code to the strictest levels of HTML 4.1 specifications as outlined at the W3C, if for no other reason than to make this project at least a minor challenge for us. According to the initial sizing of the project, it will take about two weeks to finish this one up; I expect it will take a lot less time than that. In the meantime, I have updated my resume and I’ve posted it and put myself back on the market. I’ve already received a couple of calls, and I expect that I will be able to find myself a more challenging position soon. And this is the primary reason I have for wanting to leave my current job: it holds no challenge at all for me anymore, and the level of work that I’m being asked to do at this point is almost insulting.

On a much more positive note, though, it’s now exactly two weeks until the wedding. In fact, I’m writing these words at about eight o’ clock in the evening, and in exactly two weeks from this moment, Jennifer and I will have been husband and wife for about twenty minutes. There is still a lot to do, a lot to worry about, a lot for Jennifer to panic about. Will the groomsmen all have their boots in time? Will my scabbard show up in time? Will the Christmas lights provide enough lighting for the older folks to be comfortable in the social hall for the reception? And so on and so on.

And there’s a part of me which still feels overwhelmed at the whole thing. I remember breaking up with my last girlfriend before Jennifer and thinking that I would be perfectly happy to be single for the rest of my life. I also remember, though, those times when I knew that there was something missing from my life, and when I knew I would never find a soulmate or someone that I could share my life with.

And here I am, two weeks away from being married to my best friend, the most wonderful person I have ever know, the best thing that has ever happened for me. These next two weeks, as we deal with marriage licenses, rehearsals, and so on, are going to be busy and hectic. I just hope that it won’t be another two weeks until I get to post again!

If Collab: Independence Day

If Collab:If you were asked to identify your most life-altering moment, what would it be? Why did that pivotal event or experience cause you to change your direction?

I sometimes wonder what it would have been like if we’d gotten away with it, or if we’d succeeded, if we hadn’t been caught and turned in to the school’s administration, or if the victim had been a less forgiving person.

It was more than one moment. It was a period of a month that led up to a single moment in the high school principle’s office where I suddenly realized how cruel I was capable of being, how capable I am of hurting other people, and how hard it is for someone to forgive a person like that, and how hard it can be to rebuild a friendship when someone has been like that.

I want to be able to blame other people: the woman who came up with the plan to ruin Fred’s (not his real name, of course) psyche, the other people who went along with it, or even Fred himself for being horrifically naive and a social outcast. Honestly, though, the only person I can blame is myself. I was the one who said, "It sounds like fun, let’s do it."

There were four of us who decided that Fred had become pompous and arrogant enough to deserve this kind of treatment. We decided that it would be right for us to play a big joke on him and create for him an alternate sort of social reality that he would believe for a month or two and that we would demolish and destroy at the end of that time. Apparently it had been done to someone else at the same high school. There was even a name for this process in the student body: "Spurgeoning", after the first victim. For that first unfortunate, it all ended with him crying, panicked, in the men’s room of the high school, trying desperately to escape from the white slave traders that he was convinced were after him.

So the plan was this: C–, the woman who came up with the plan, would pretend to be in love with him; so would B–, a guy we all knew who was bisexual. Woman intimidated Fred, and homosexuality intimidated him even more. Then L– and M– would pretend to be in love with each other. My role was to pretend to be a convert to the cult of the Baghwan Shree Rajneesh, who was all over the news at the time. Fred, as I recall, was in love with L–, and M– was as close to a mortal enemy as Fred could get. And Fred was a staunch Catholic and we all knew that for him to believe that I was involved in this cult would really upset him.

And it all worked. For a month, we had Fred convinced that all of these things were true. It worked so well, in fact, that we decided that we would bring more people into our cabal. So C– approached N–, another woman in the senior class. N– was appalled, and approached the school administration and told them what we were doing to Fred.

C–, of course, was outraged. How dare N– betray her like this? L– and M– weren’t so outraged; but, then, their hearts were never really into it in the first place. B– immediately claimed that he’d never been into it at all, that he really was sincerely attracted to Fred; but, then, the attraction quickly faded when the whole thing came to light.

Shortly after N– went to the administration, we were all called in to the dean’s office, Fred included, to talk about it. C– sat in her chair, arms folded across her chest, fuming. The dean was open and concerned. L–, M–, and B– were downcast. I felt downright ashamed of myself. It was Fred, though, whom I respected. He was the one who forgave, who said, "It’s okay. I mean, a joke’s a joke, right?" The dean pressed him for a bit, but Fred was adamant. He wanted to forgive, forget and move on. The dean confessed that he’d planned on punishing us, but decided that he wouldn’t because Fred had forgiven.

That moment taught me a lot. I looked at Fred, and I saw the hurt and the feeling of betrayal there, but I heard the forgiveness and I knew it was sincere. I looked at C– and saw the indignation. In that moment, I suddenly knew two things: first, that people can rise above their hurts and their sadness and forgive those who hurt them; and second, that some people, even when confronted with what they had done wrong, will still admit that they were in the right, and will be indignant and outraged when it is implied that they were in the wrong. I learned a lot about fragility, and about courage, and about humility. I learned that I am capable of hurting people in terrible ways.

And mostly, I learned from Fred at that moment something about independence: about how we can be independent from the hurts we’ve suffered and go on to try to rebuild when the natural tendency is to resent and accuse. I feel fortunate that it was Fred we chose to do this to; I doubt anyone else would have been so ready to overcome the hurt and anger.

Fred and I still had a year together in school after that; we were both juniors when this whole thing came down. Somehow, we managed to rebuild our friendship, although it was never as strong as it had been before. When our senior class went to Los Angeles for our senior trip, Fred and I shared a hotel room but we didn’t talk that night.

C– graduated from high school, and I never heard from her again. L– and M– continued on with Fred and me, and I heard from both of them from time to time; B– I ran into at the Renaissance Faire, and he was pretty much the same as he’d ever been.

No lesson is ever perfectly learned, of course. In the sixteen years that have passed since then, I’ve still doled out my share of hurt and pain, some of it even deliberately. I like to think, though, that I learned enough about the human heart and about friendships in the one moment to be sensitive enough when I have hurt someone to try to make amends quickly and appropriately.

The Death Throes of a Palm Pilot

Yesterday, I managed to crash my Palm Pilot. Not just any minor crash, where some minor bits of data are lost but all can be restored by pressing the "reset" button on the back and synchronizing with your desktop computer; no, I managed to get it to the point where it flashed the dangerous message:

FATAL EXCEPTION

on the screen whenever I turned it on. Resetting didn’t help. I contact Palm support and was told that what I needed to do was a "hard reset", which involved wiping out every bit of data on the Palm Pilot and deleting the entire applications database, except for the default appliations that were shipped with the device in the first place. So I did that, and then I spent the next hour rebuilding the database. Fortunately, I’d synced up just before I caused this crash, so I was pretty much covered. I just had to download and install one or two programs that weren’t restored with the backup.

"What did you do to your defenseless Palm Pilot?" I hear you ask. Well, it’s kind of a long story.

In my ongoing quest for new responsiblities at work — especially now that the recent reorganization has consolidated almost all development up in Portland but a quirk of organizational necessity and budgetary windfall has kept me and the other Sacramento office developer employed — I wormed my way, with all of the subtlety of Arnold Schwartzenegger in Terminator, into the Palm Pilot development project. As I’ve already written, it was pretty easy to get B–, the Sacramento lead for this project, to let me get in. So I installed Code Warrior and started playing around.

This past weekend, I also picked up a copy of The PalmOS Programming Bible, which is published by the same people who publish the …for Dummies books. I picked up this book instead of PalmOS for Dummies for two reasons; first, it was the only book that didn’t start off the introduction with the words, "We assume you’re an advanced C programmer" (it began with, "We assume you’re an experienced C programmer" — and, as I pointed out to a skeptical Jennifer, I am more "experienced" than I am "advanced"), and because the …Bible series is generally much better than the …for Dummies series. (A book like Vocabulary for Dummies might contain a paragraph like this: "Vocabulary is all about words. Words make up a vocabulary, which, as I wrote above, is all about words. Yep, words is what it’s all about. Lots of words. Words, words, words. Shakespeare wrote a soliloquy about words in Hamlet. Say, I introduced a Shakespearean non-sequitor into a book on vocabulary! Am I cute enough to kiss or what?" and so on.)

And so yesterday I figured out how to write and compile a nice inoffensive "Hello World" program in C for the Palm Pilot; I plugged it in to Code Warrior, compiled the program and linked it, debugged it in the Palm OS Emulator, and figured I was good to go. So I set my Palm Pilot in console mode, switched the target settings in Code Warrior to target my device instead of the emulator, and clicked "compile."

"Fatal Exception", my Palm Pilot told me. Even after I hit the reset button. Several times.

That’s when I started feeling that strange cold lump in my chest, the same sort of feeling that I get when my mother tells me that she’s had another wonderful idea for the wedding.

With some help from Palm, Inc., and some folks in our office, I was able to get my Palm Pilot functioning again. But one of the developers up in Portland asked me what, precisely, it was I was trying to do.

"Well," I said, "I’m trying to learn enough C/C++ to get up and running with the PDA project."

"Aren’t you already taking a class in Java?" he asked me.

"Well, yes."

"And talking to one of the other developers up here about XML?"

"Um."

"And giving a presentation about PHP and access to Oracle in Portland in August?"

"What’s your point?"

"Well, don’t you think you’re sort of biting off a bit more than you can chew?"

Well, okay, maybe I am. But I think about it in this way: all that they’ve got me doing these days at work is HTML encoding (my co-worker and I have become maniacs at making sure that every HTML document we create fully validates, simply because there isn’t much else to do). Because I haven’t been involved in any PHP development at work anymore (that particular project has been handed off to someone else entirely), it’s unlikely that I’ll be giving my presentation in August after all. And when I spoke with B– this afternoon, he was pessimistic about the possibility that there would actually be any Palm development done at all in California for our company; the development manager up in Portland is continuing to consolidate all aspects of development up there. So there really isn’t all that much for me to do; encoding an HTML document takes very little time at all, even if you code it to XHTML 1.1 standards.

So I sit at my computer at work and play with Java and C/C++ and CodeWarrior and occasionally make a phone call or send an e-mail or an Instant Message to another developer up in Portland, asking to be involved in some project or another. My boss has been working on this as well, knowing that my fellow developer and I are starting to become frustrated, but he is unable to do much more than get us more HTML coding projects. When I told him last week that it was looking like my own career advancement probably lay outside the company, he looked disappointed but unsurprised.

Meanwhile, my Palm Pilot sits next to my computer, nestled in its cradle, seeming almost to glare at me cautiously with the glowing green charge indicator. "No more," it whispers fearfully. "Do what you want to the computer, but please, leave me alone."

Ha, I laugh to myself, and I launch another Code Warrior instance, preparing to write code that will beat my little Palm Pilot further into submission.

Road Ramblings

Traffic on Highway 80 was slow this morning around about Mace Boulevard in Davis. There was an accident earlier this morning and so I sat in my car sipping my latté and thinking that it was already warm enough outside to consider using my car’s air conditioner, and it was only 7:15 a.m.

Traffic jams don’t bother me too much on the way to work. After all, if I show up late, I can always say, "Man, I hit some heavy traffic this morning!" My boss and coworkers all know that I drive nearly an hour both to and from work every single day, so I think they’re willing to be a little charitable.


My car is at 19,000 miles, so I took it in yesterday for its 7500 mile tuneup. After I signed the paperwork shortly before 8:00, I made arrangements for the dealership’s shuttle to come and pick me up and take me to my office. At 9:15, I asked if the shuttle was planning on showing during that same day. I don’t think I was too much of an jerk, but I managed to make an impression. The manager of the dealership himself drove me to my office. I got there and rushed into the development meeting, but it ended just five minutes later.

Shortly after noon, my boss gave me a ride to the dealership so I could pick up my finished car. My boss drives a convertible Mazda Miata, and he drives it like a maniac. Because it’s important to let your boss know that you’re not easily panicked or fazed at all by anything, I kept calm and collected as he took a sharp corner on the highway at 60 miles per hour. I didn’t even tighten my grip on my seat. I pretended that I drove like that myself. Judging by the way Jennifer sometimes grabs onto the dashboard when I’m driving, though, perhaps I do after all.

At the dealership, the manager apologized again for not having the shuttle there to pick me up in the morning. I told him that it was okay; and that since I almost missed the meeting completely, if I’d waited another ten minutes, it would have been perfect. What the heck, it was good for a laugh.


Sometimes I think that there are people in the world who have been commanded by their God to drive at least five miles per hour less than the speed limit, and that, due to some horrible deed I committed in some past life, it is my destiny to be stuck behind them.

I wonder what it is that motivates people to pull into the fast lane of a five-lane highway, and then drive at approximately 85% of the speed limit, even in the absence of any other traffic (I’m not exaggerating; I once took out my Palm Pilot and calculated it out, based on how much I was forced to reduce my own speed when this person pulled in front of me).

I am really forced to confront my destiny, though, when three of the Slow Speed Crusaders for Christ manage to line up on the highway beside each other. On a highway with a speed limit of 70 miles an hour, you can get three of these people occupying all three lanes and driving parallel at 65. I imagine that they’re taking communion via cell phone.


This week, my goal is to listen to all nine of Beethoven’s symphonies while I commute to work. I figure I can listen to the first on the way to work this morning, to the second on the way home tonight, and so on; so that by Friday morning I can listen to the ninth on the way home. I can pull up to Dixon just as some bass is belting out, O! freunde, nicht diese töne. In this way, I get culture while driving.

One thing I never realized before; if you make a long daily commute, you begin to recognize other cars on the road. There’s the black Jeep with the "God Loves You" bumper sticker. There’s the red Volvo with the Atari sticker on it. And the green Toyota with the Star Wars license plate frame. And the beaten up old Nova with duct tape on its fender and the bumper sticker that reads, "Borg Institute of Technology." Which says something about either the Borg or about the Chevy Nova. I haven’t quite decided which. Tomorrow, if I see that car again, while listening to the Fifth Symphony, I’ll ponder it and come up with something.

Code Code Code

This is the first computer-related class I’ve ever taken, this class in Programming Java from University Extension. Well, okay, I took a class in Pascal when I was in high school, but let’s be honest: who in the world ever programmed in Pascal except for high school proto-nerds like myself? First-year college proto-nerds, I guess, although now I understand that C++ is the beginning language of choice in college these days. When I was a freshman in college, my roommate, in one of his more lucid moments, told me that I really needed to take ECS 40, because it was a great computer class and you learned Pascal. I sniffed haughtily. "I already know Pascal," I told him. Smugly. "I don’t need to learn it again."

Now, said psychotic ex roommate is earning somewhere in the neighborhood of 25% more than I am without having ever finished his college degree, and I’m trying to figure out this Java stuff.

What’s bothering me at the moment is that I cannot figure out what the hell is wrong with this code, which I wrote for the second assignment. I’ve written more complicated code in Java in the past, but it can’t hurt to go over the basics one more time, right? This bit of code includes a class that I downloaded from the instructor’s website and which I compiled in the same directory as my code. I made sure to tell the compiler that the directory my code is indeed, God’s truth, in the CLASSPATH variable. And yet something is going wrong. Here’s the code. See if you can figure it out:

class Assignment_02
{
  int age;
  String inText;

  Assignment_02()
  {
    System.out.print("Enter age: ");
    inText = Term.input();

    age = Term.atoi(inText);
    if (age < 16)
      System.out.println("This person is under 16");
    else if (age < 18)
      System.out.println("This person is under 18");
    else
      System.out.println("This person is over 18");
  }

  public static void main(String[] args)
  {
    Assignment_02 myProg = new Assignment_02();
  }
}

I swear, the only thing that differs between my code and the instructor’s code is the class name. I’ve compiled this stupid thing a dozen times. It compiles fine, but when I try to execute the code, I get an error that reads, "Exception in thread main: no such class as Assignment_02, you idiot." Verbatim. My compiler doesn’t pull punches.

I know what’s going to happen. I’m going to fuss over this code all night while Jennifer happily bakes brownies in the kitchen and the cats chew on my socks, and I am going to go to bed convinced that I have missed some secret alchemical device known to the course instructor and a handful of Illuminati in Bavaria. And tomorrow morning I am going to wake up early, go swimming, and just as I complete my fourth lap I’m going to leap out of the swimming pool shouting "EUREKA!" and come running back to the house and log into my computer and fire up my editor and make a single change in the code, probably a single character somewhere, and recompile the damn thing and run it, only to have the same error come back into my face. "No such class as Assignment_02, asshole. You might as well practice saying, ‘You want fries with that?’"

This is just like dating. Except that when you’re in the dating process, you sometimes get it right. It’s my considered opinion that no one ever writes a Java program succesfully, it’s just that the compiler gets tired of fighting back.

I have a tendency to catastrophize. It’s not that I’m having trouble seeing where my error is in this code (and it might be as simple as having to recompile the stupid code with the instructor’s home-grown Term class); it’s that I’m the stupidest person who has ever walked the face of the earth and a Bushman in southern Africa who has no idea that Coca Cola exists, let alone platform-independent web-enabled object-oriented languages, has a better shot at building up their IT career than I do.

If I’d been thinking when I was living in the dorms with my psychotic roommate, I would have punched him in the face when he blathered about how wonderful Pascal was. I would have done it cheerfully (and I can actually think of a couple of people who would, to this day, happily hold him down while I did so), explaining, "This is for all those programs I’m going to write that are never going to compile!"

On a more positive note, things are actually looking up for me at work. I’ve wormed my way in to the PDA development project, thanks mostly to the fact that the local lead developer likes me. When I asked him what skill set he’d like to see, he replied, "Familiarity with Code Warrior." I explained that I’d never touched Code Warrior, although I’ve seen the box on the shelf. He replied, "Oh, that’s okay, we’ve got a spare license and can install it on your laptop tomorrow. So be sure to bring it in." It was a positive note for me. On the other hand, I have a limited period of time now to learn enough C++ to make a Palm Pilot application work (and in that same period of time I need to figure out how to deflect enough work from me and on to another developer so that I’ll have time to learn C++ and get involved in the PDA development project); and this will make my experience with Java a lot more interesting. And I’m committed to learning Java, for a lot of very good reasons. It just means that the next couple of months are going to be filled with a lot of time on my computer, trying to get Java to compile and C++ to work.

Want fries with that?