[Home | Contact | What's New? | Products | Services | Tips | Mike |
Living with Schizoaffective Disorder

Please to Forgive

This site totally sucks when viewed on a smartphone.
I'll fix this Real Soon Now.

I've Never Screwed Up This Way Before

I walked back into the living room this morning after pouring a second cup of coffee,
when Bonita said...

Michael David Crawford
July 22, 2006

Copyright © 2006 Michael David Crawford. All Rights Reserved.

Bonita said, "Do you want to feel like shit now or later?"

"Why? Did I do something wrong?"

"Yes."

I waited for the axe to fall. I've been here more than once, though I've never screwed up this particular way before.

After a long, silent, pregnant pause, Bonita said...


I hung my head in shame.

It took me a couple minutes of sorrowful contemplation before I was able to respond. Twiggy was barking out the window in the other room, as she is quite serious about living up to her oath as a watchdog. After quieting her, I returned to the living room and said:

I'm very sorry. I'm deeply ashamed. Can you ever forgive me?

Bonita listened quietly and without expression as I explained why I'd forgotten. I repeatedly asserted that none of these reasons were any excuse, that I should have remembered anyway, and that I didn't want her to excuse my failure but to understand it.

She told me after a good long time that she wasn't actually angry, just disappointed. She understood well before she clued me in to our anniversary that I had forgotten because I take my responsibilities to her as a husband so seriously.

Interlude

When we were still engaged to be married, Bonita explained a few requirements with which I must comply to ensure marital harmony. There weren't many, but among the most important is that I shut down my computers for three days each year: Christmas Eve, Christmas Day and our anniversary. And so I've done just that for six years to the day.

Thus I didn't plan to get back online, but fully intended to power down all my computers. However, after she explained why she wasn't angry, she left for a few minutes to drop some work off at her client's business. That's when I started writing the above. Why?

Since Bonita won't give me the punishment I so richly deserve, I thought I'd throw myself upon Kuro5hin's sword so my many troll friends can do it for me instead.

She's having coffee with a close friend now; they made the appointment for Saturday before Bonita realized what the date would be. Her friend's infant and busy work schedule don't yield much time for visiting with friends, so Bonita kept their date.

I still offered to power down, but Bonita felt I should continue my work while she was away. I've been working on Ogg Frog without pay long enough that we can't spend much on our celebration: dinner in a restaurant is out of the question. Instead I'll be going to the store in a bit for some brie and a bottle of wine.

While she was still here though, she had my undivided attention, which I'm afraid tends to wander at most other times. I made her scrambled eggs for breakfast.

Hellfire and Damnation

My AdSense revenue plummeted a few months ago, to the point where this month's check was and next month's will be only half of what we need. It's recovering now, but won't save us in time.

A couple months ago I commenced searching for contract jobs by tracking down and applying for every single contract I qualified for in the whole Dominion of Canada in a single long, frenetic day. I also registered with all the body shops in the country, using search engines in clever ways to ferret out the obscure ones. In the week that followed, I applied for a couple hundred telecommute jobs in the US. There is no easy way to find them all on the job boards; I found them the hard way. I'm happy to tell you how, but not today.

One client called me just an hour after I reponded to his Craig's List ad. Within a couple hours, I closed a verbal contract to write a Macintosh GUI by coding in a programming language and to an API I'd never looked at, not even once, in my whole life. I've always been a Carbon programmer, which is derived from the Classic Mac OS, but they wanted Cocoa, which is derived from Steve Jobs' NeXTStep.

As my Blue and White G3 Macintosh was dead and I was concerned that its motherboard was fried, I asked my Mom, who was visiting from Washington State in the middle of all this, to lend me three grand from her credit card to buy a brand-new MacBook Pro laptop computer. (I didn't inherit my inability to manage money from my parents.)

I could have done the job with a much cheaper computer, but I felt that as long as I had to borrow money yet again from my mother to buy the tools of my trade, I should at least get one that would be of lasting value to my business: I needed a laptop so I could visit clients onsite, and I needed a Mac with Apple's new Intel-architecture operating system so I could offer to port PowerPC applications to the x86. Further, Apple's BootCamp software enables one to dual boot Intel Macs with Windows XP. Thus I would only need one laptop for all the consulting I do.

(While I've done some Linux work, and run it on all my computers but my MacBook, I rarely get any. Most web application programming pays less than I'm willing to work for, and I don't have enough Linux kernel programming experience on my resume to get any interviews. I can easily do Linux GUI work, but it's quite rare for anyone to offer to pay to have it done.)

This you can imagine my dismay when my MacBook's MagSafe power adapter's connection became intermittent the day after I received it and failed completely the very next day. The connector has five tiny, spring-loaded pins. Two of the springs were fatigued or broken, so the pins failed to connect.

Here's why you should always buy anything that matters from a brick-and-mortar store, and never online: Ed Cooney of Truro's Desktop Computer System called around to his other customers, then showed up at my house a few hours later with a G4 iMac. It was one of those really cool ones with the hemispherical base and swivel LCD screen. Bonita called it my space probe.

While I was waiting for my express shipment of highly-recommended Cocoa and Objective-C books that I ordered with my credit card's last remaining credit, I studied the language as best I could from the web while writing practice code. I met my first milestone in the last two days of the week I'd told the client I'd need, and he gladly PayPaled me six hundred dollars.

Bonita flew to St. John's around then, to visit her oldest and closest friend, as well as her family in an outport fishing village. She needed the break not because her last semester of school had been very hard for her, not because of her schoolwork was very hard - and it was - but because her never-ending worry over our imminent starvation put her near to collapse.

Once my client's payment was reported in my PayPal account, I actually did collapse: exhausted and damn near ready for the mental ward, I slept on the couch for three days straight. I didn't eat; it was everything I could do just to get up to pee. I wasn't able to look after the dogs, so the poor things had to go inside the house. They didn't starve, but they didn't have regular mealtimes.

I desperately needed a break. I didn't answer the phone nor check my email. Thus I didn't get his messages when my client requested a status report, then demanded one, then desperately pleaded for me to tell him what had happened. I didn't get his ultimatum, delivered the day before I finally crawled off the couch, that I contact him that day or lose the work.

I called to explain that I had suddenly taken ill, and was unable to get out of bed to answer the phone. His answer was non-committal. I went back to sleep.

The next day, he sent me the following message:

Hi! Mike,

I have decided to engage with a local programmer in San Jose now. I had been desperate to reach you in the past few days and just could not get hold of you. The communication does not work.

Thank you for the efforts from you. Let's leave the down-payment to you for the efforts, which unfortunately could not be transferred to our products.

Regards,

John

While I knew that my GUI was a component of a product they were developing for their own client, no one at John's company ever gave me a clue that any of us were under any kind of deadline. Their code was some complex, multithreaded C++ Internet communications software, but when John gave me the bad news, they were three weeks away from their contractual deadline to deliver feature-complete software to their client, with my lovely, tasteful Mac OS X Cocoa graphical user interface ready for them to try out.

I guess that's why I closed the contract so quickly. Their GUI was actually quite complex and rich in features; I don't know what possessed them to require I be done in a month yet never tell me so.

There was a time I would have gone through the phone at John. There have been many times I've threatened such clients with legal action, and many times I would have demanded money in compensation.

I have often threatened collections; one time I actually got paid this way. Emailing demand letters to every company employee I was able to find with Google, as well as all the employees of their venture capital firms didn't work. Neither did it work to quote, on my website, their threat to respond to my barrage by taking me to court, then emailing its URL and my response to all their employees and VCs. What worked was to threaten them with a collection agency. They gave me the confirmation number of their wire transfer order about ten minutes before my deadline.

It's important for startup companies to maintain a spotless credit history, you see, otherwise their IPO might not fetch a good price. That thousand dollars made all the difference in the world to my little family.

I explained all of the above in such detail to help you understand what I meant when I told you that Bonita wasn't angry because she understood how seriously I took my responsibilities as a husband.

The Ogg Frog logo

Rippit the Ogg Frog

I Didn't Get Mad

I called Bonita at her parents and said:

I swear I'll never consult again as long as I live.

No, I didn't get mad. Neither did I start looking for work. No, I knew the best plan to secure our future, and I commenced its implementation:

I started coding Ogg Frog.

I hadn't started yet because I had been stymied for months by complex software design issues. How can a user interface be feature-rich, complex and configurable, yet intuitive and easy to use? Most Free and Open Source software is highly configurable, but maddening to actually configure. Many proprietary programs are easy to use but very limited in capabilities.

iTunes, for example, can rip to WAV but not encode that WAV to MP3. Neither can it rip and encode to multiple formats simultaneously. My goal was to write a ripper as featurful as abcde but as easy as iTunes.

I knew that if I succeeded Bonita and I could retire to Tahiti on our AdSense revenue, but months of contemplation and discussions didn't give me the first clue how to proceed. I had not written one line of code before about a month ago.

It was sheer desperation that led me to my breakthrough:

I called Bonita and told her I would get Ogg Frog to play an Ogg Vorbis track.

I agree with your assertion that I just set a world record for cluelessness. I admit to one fault in my software: sometimes it's over-engineered.

But even that wasn't simple enough. Included among Ogg Frog's source code will be a small source file that's not compiled in the executable. When you run it, it presents no UI but plays a 441 Hertz sine wave tone then exits.

I needed to learn how to output sound to the speaker under Apple's CoreAudio architecture, you see. I got it to work after a day of scaring the dogs with the most awful noises and a few sudden kernel hangs. It seems that one cannot wait on a lock in a CoreAudio output callback function.

It's called BirthCry.cpp.

The Azureus logo

The Azureus Poison Dart Frog

I Still Shouldn't Have Forgotten

And I would not have, had not Lemon Juice enlisted one of his army of dupes to inform me that Bonita's new logo infringed the trademark of the Azureus BitTorrent client's spotted blue frog logo.

I envisioned thousands and thousands of little dollar bills with wings flying out my window.

There was no question of changing my logo. As I explained in my reply:

Bonita worked very long and very hard to design Rippit's portrait for me. She knew it was important not just to me but to both of us that she do a good job. She was frustrated at the limitations that her graphic design software placed on her creativity, so she started with a freehand ink drawing, scanned it, then edited it in Photoshop. You can imagine it took her a lot of work to produce the result you see on my site.

So I'm about as certain as I can be that if I were to ask her to change even one pixel of Rippit the Ogg Frog's portrait, let alone his color, well, right after Bonita was done drying her tears, she'd beat me to death with a hammer.

While Bonita is easily able to work as a designer, she hates it with a passion, mainly because her clients are never satisfied. Every single one of them asks for revisions over and over again, increasingly minor ones, but in a way that promises no light at the end of Bonita's tunnel.

Of course a written contract with a specification and a strict limit on opportunities for revisions is the way one prevents this. Bonita just doesn't like to upset people, so she never asks for such a contract. Her clients sometimes walk all over her.

A great deal of Google searching as well as careful contemplation convinced me that my logo doesn't actually infringe, but I would tolerate no errors. As it was four in the morning and I don't have the cash to ask an attorney, I spent the next six hours carefully writing and revising a question for the next best thing:

Bonita had been calling me for an hour from where she spent the night on the couch, asking me to make coffee. After I sent my mail, I put the coffee maker on and joined her in the living room, then broke the bad news.

As I expected, she was quite upset, but I explained why it wasn't really a problem, and the steps I was taking to ensure it never would be. One of them was to retain the law firm of Dewey Cheatham and Howe to write an expert legal opinion that would be linked from every page on my site, at the bottom where I place my legal notice.

And then she said:

You don't have to do all that. I'll just change the color.

Bonita, a Shambhala Buddhist, prefers to avoid confrontation when she can.

Well Damn.

I went back upstairs to check for responses to my post, to find Michael Poole's suggestion:

Another simple way might be to have a written letter of agreement between you and Azureus that neither mark infringes on the other's rights, and that neither will sue the other for trademark infringement. You would definitely want a lawyer to draft such a letter so that it will hold up. Since both works are GPLed, I would hope this would be acceptable to the trademark owners.

It's just like me to have enlisted an Army of Dupes, dire warnings and torrents of text to solve my problem, when it would be far easier, and cause far less animosity to just ask Azureus Inc. whether it was OK that I used a spotted blue frog for my logo too.

I went downstairs and poured myself a second cup of coffee.

[Home | Contact | What's New? | Products | Services | Tips | Mike]