Recommended Reading

Posted September 6, 2007 by David
Categories: Uncategorized


It’s the story of an engineer who loves his work and feels ownership in his company. When he got off of work, he still did the same sort of work as a hobby because he simply loved the stuff.

Avid got a similar start. It was Avid Technology, and it certainly was a technology company. I’ve worked for Avid (as the OEM point of contact) for my first 10 years at Pinnacle. I’d say my contribution to Avid’s success is measurable. (Humble me!) Then Avid bought Pinnacle, and I’ve worked for Avid since. Avid really is my company.

But, many of my peers have moved on, and in one fell motion, almost all of my management has moved on. Does new management own the company like Woznaik did? I’m talking about ownership in terms of having the company produce stuff consumers will love. How many individual contributor Wozniaks do we have at the company?

I’m going to renew my effort collaborate with technical staff here at Avid that have that same Wozniak spirit.

Influence: The Psychology of Persuasion

From JoelOnSoftware:

You’ve probably heard the expression “hurry, supplies are limited!” so many times in television advertisements that it hardly registers any more. But it’s there because of the principle of scarcity; your natural assumption that something that is scarce is worth more money.

When charitable organizations send you a request for a donation, they almost always include a “gift” in the envelope. Sticky labels with your address on them. Or a couple of blank greeting cards. The reason they’re giving you the gift is because of the social principle of reciprocity; now you will feel obliged to give something back.

When it comes to downloading free software, however, a complementary effect can occur. The user can associate little or no value to the software. Download and forget it. Or download and never upgrade.

Something that can be done to alleviate this is to instill a little desire in the user. Maybe even cause a sort of buyer’s remorse, in the sense that they grow to really want the upgraded product. To do that, we’d need to show them how awesome the free download is, but that the purchased product is even far more awesome. That only works if you show them how.

Give them a workflow, and then improve it.



Posted August 29, 2007 by David
Categories: Uncategorized

VideoSpin window

new badgeCall me Ishmashill. This is what I was excited about in the last post.

Pinnacle VideoSpin is a free video editing program.

It’s got the same workflow as our Studio family of applications, although it isn’t nearly as fully featured. (But hey, it’s free.)

I like the workflow. If you download it, run the tutorial in the middle of the window to learn about the album, the player, and the timeline.

Go ahead, download it and watch the tutorial. I’ll wait. (Hmm. It took a few minutes for me to install it. Our server’s a little slow.)

Did it? OK. Then:

How to make an AMV with VideoSpin

1. Chose your music and your show. It’s best if they match pacing and feeling, like U2 and Ergo Proxy or GitS, or Ayumi Hamasaki’s Beautiful Day and Kamichu. Get the media onto your computer. (Legally, of course.)

2. Go to the Music tab in the album, find your song, and drag it to the bottom track, the music track.

3. Switch to the Video tab in the album. If your video file has multiple scenes inside, double-click on it in the album to see the scenes within. Select some clips and drag them to the video track on the timeline. (Do the same with images, if you want to use them, too.)

4. You can trim and move clips right on the timeline by dragging them around, or dragging their edges in or out. Use the music track’s waveform to help guide you along with the pacing of the music.

5. You can liven things up a little bit by dragging titles (the third tab down) from the album to the title track. Then double-click on the title on the track to open it up and edit it.

6. Use the Transition tab on the album to add transitions to give a little more mood or to liven up photos. Don’t get crazy. A couple of fades go a long way, there, Spielberg.

Kamichu Project

7. When you’re happy with your project, click on the “Make Movie” tab at the top, and write your movie to file or upload it to the web.

VideoSpin isn’t perfect, but most of what I don’t like about it is available in Studio. For example, you can see what I think of the fact that VideoSpin doesn’t support track locking.


Posted August 21, 2007 by David
Categories: Uncategorized

I’m pretty excited about sharing what I’ve been working on.  (And about giving away the free stuff, but that’s a secret.)

I might come across like a corporate shill when I start talking about it, but it won’t stop me.  If I like what I’m making, why not admit it?

I can’t talk about it yet, but soon my lovelies, soon.  The thing might bomb.  The thing might rock.  We’re trying our best.


Prefer Absence of State

Posted February 7, 2007 by David
Categories: Code

I included settable state when I designed an interface for a software component. It goes something like this:

SetThing(thing Thing); // keep a copy of Thing.

GetState(state &State); // depends on internal Thing
DoAction(); // do action with Thing

At the time, it was a natural design. The problem with this is that I now have multiple clients that want to use the component. But they want to use it in different ways, simultaneously, with their own Things. So they have to create their own private copies of the component. This costs. The component is expensive to create and to keep alive. Multiple components now have to arbitrate for any internal shared resources.

A better design would have been not to have the component own a copy of the settable choice, the Thing. Simply to have the client code pass in a reference to a thing to each call that depends on a particular thing.

GetState(thing Thing, state &State);
DoAction(thing Thing); // use supplied Thing

There’s a trade-off here too, of course. The client code now has to own the Thing. And for the asynchronous calls in my component, the client code has to manage the Thing for the duration of the call.

But this does remove the fear of cross talk if multiple clients want to use the same software component, while supporting the use of multiple components if there’s a desire for them.

Even at the cost of making interfaces a little unwieldy with numerous parameters, I’d recommend avoiding internal state when reasonable.

Code is Poetry (Screensavers Edition)

Posted September 9, 2006 by David
Categories: Raves

“Code is Poetry” is the slogan for I’m a longtime user of wordpress software, and I couldn’t agree more with that sentiment. Sometimes, after a long, hard day of coding at work, I go home and code some more, because I just have to see how something would work.

For example, back in the days of Windows 95 and Windows NT, there were some beautiful screensavers. But at the time, there weren’t many screensavers with interesting behavior. I wanted to see a little self-sustaining ecosystem: an aquarium where the fish would hunt and eat each other. So I wrote one. It is butt ugly. But it behaved exactly as I wrote it, and I couldn’t have been happier.

After a frustrating period of work, I wanted to punish the computer. So I wrote a screensaver to put the bugs in there to work. I made them perform a Sisyphean task of stacking balls that would later scatter, over and over again, forever. Butt ugly again. But I love it, it’s mine. I made it.

Code is my conduit from idea to reality. It’s essentially my modeler’s clay. It’s my art medium, and the medium has very exacting rules. Following the rules is difficult, but the results are so very rewarding. It is poetry.

Anatomy of a Bug (I)

Posted September 1, 2006 by David
Categories: Bugs

How do bugs happen? Here’s an old bug of mine that illustrates how working code can suddenly break when a fix is made elsewhere.

Back when we first designed Studio 10, all new projects were tentatively assigned to the default folder My Projects. You could later save them elsewhere, but everything always started in that default directory.

Since you can save them elsewhere, Studio keeps a list of the directories in which you keep projects. The list was optimized to save space by not including the directory My Projects.


My thinking was, Studio code would always know to check the default directory anyway.

That wasn’t smart.

Later, our testers suggested that if they saved projects in a different directory, then that different directory should be the new default. They don’t care about My Projects anymore.

That made sense. So we changed Studio to set the default project directory to be wherever the user saved projects. Much better.

But I didn’t update the list of all project directories to accomodate the change!

A heinous bug rears its ugly head.

That list, which used to “know” that My Projects was always used, was now sometimes wrong. And this caused an off-by-one error in the size of the list. That off-by-one-error became catastrophic when when the size was 0, and off-by-one was -1.

A certain computer took a long time to count up from zero to negative one.

The bug’s since been fixed. But it took a while to discover what went wrong!

Worst Bug Ever

Posted August 17, 2006 by David
Categories: Humorous

Long before I joined the Studio team there was a certain bug. Luckily, the bug never made it outside the confines of this building. It was in a developer-only build. It only had to rear its ugly head once, and it was immediately annotated the Worst Bug Ever.

Studio has to create temporary files in the process of transcoding or rendering your movies. Since a lot of space might be consumed, Studio lets the user determine which disk and which directory to use for the auxiliary files.

Worst Bug Ever

How nice.

Well, a certain manager set his Auxiliary Files folder to be the root level of C:\ drive. And after making a movie, he decided to clean up the files by clicking on the Delete button.

Can you see it coming?

That’s right. It deleted the auxiliary files on C:\ and it kept going. It deleted everything on his disk.

Yeah, once that bug was detected, it didn’t last long. It was one of the worst bugs ever, and one of the most expediently killed.