It’s pretty hard to argue with the idea of managing your bookmarks on a webpage. It avoids the hassle of unsynchronized local bookmarks scattered across different systems and browsers. Just remember ONE webpage, and you can get to all the rest!

A few years ago I went looking for code to let me do this from my server, giving me ultimate control. bookmark4u scratched my itch. I got on board with it when it still supported frames, which was exactly what I wanted. YES I LOVE FRAMES! Bugger off! 😛 The author didn’t agree, and dropped support a long time ago, so I cling to my older version. Even so, over the years, it has been ROCK SOLID and done everything I wanted (this may be the only software I have ever used for which this is true!).

A more recent update to Mysql (4.1 I believed) changed the internals of a common way of encrypting passwords, the PASSWORD(‘plaintext’) function. Example SQL:

insert into MY_PASSWORDS (‘webuser’, PASSWORD(‘webuserpswd’) );

select user from MY_PASSWORDS where password=PASSWORD(‘webuserpswd’);

More precisely, after some reading, I found that the PASSWORD() function is really intended for internal use by Mysql, and external use is not recommended. In version 4.1.1, the output from PASSWORD() was extended from 16 bytes to 41 bytes. Any apps that expect the older size no longer work. Cest la vie.

Of course, the problem is that bookmark4u uses it. What to do? The Mysql encryption docs give details on all the available encryption functions. SHA1() is recommended – it is cryptographically strong, and should be widely available. And perhaps most importantly, it is not likely to change out from under us. I replaced all calls to PASSWORD(‘blah’) with SHA1(‘blah’), which generates a long hash string for the password. Worked like a charm. The only thing I had to do besides search/replace PASSWORD( with SHA1( was to alter the password column to make it wider – 60 characters was recommended somewhere, and it did the job for me. Of course, we could have just extended the column in the first place, but why go halfway? That’s no fun! 😛

IM’s total lack of standardization has probably annoyed just about anyone using it at some point in time. Who wants to run a different client for every other friend? Jabber was supposed to fix all that, and really, it does. The problem is that with AIM and ICQ and MSN and Yahoo! all fighting for your packets, there’s a lot of momentum to overcome.

That’s where Google Talk comes in. They are dedicated to open standards (aka Jabber) and have the muscle to get it done. I’ve used PSI, a Jabber client that supports gateways to all the “other” guys, and now it works with Google Talk too. Here’s the important settings I used to hook up, and a shot of the roster:




Linux user space is composed of a thousand small interrelated “packages”. It’s fairly easy these days to install any of the better linux distros – they typically “Just Work” out of the box – and all those packages play nicely together.

Once you have your linux machine running, you’re going to be tempted by all the cool stuff to do – Office apps, browsers, DVD players, all the programming languages, router capabilities, web servers, mail servers, PVR – and eventually you’ve got a pretty tricked out OS with lots of goodies.

But you need to keep it updated with the latest fixes when you connect to the internet, or you’ll eventually get your machine hacked. And who wants to be without the latest features? But you probably don’t have time to micromanage that update process. Even if you try, inevitably, you’ll be burned by package dependency problems. All those small packages that count on each other are being updated simultaneously, and which versions are safe and stable and play nicely together?

That’s where package managers come in. They determine the latest stable package updates and install them for you, typically while you’re sleeping. Some very helpful folks work very hard to keep packages synched up like that for us all. These sites of updated and synchronized packages are called repositories. All you have to do, at the top level, is select your target repositories, see what’s available in them, and grab what you want – everything you want will be installed and kept up-to-date, with all the dependencies calculated for you. Sounds like nirvana, right? Well, we’re getting closer anyway…



The best CVS client for Winblowmynose is TortoiseCVS. TortoiseCVS has to be the best designed software ever – it just works like you expect it to. And now I’ve discovered that it’s scriptable, most excellent. There’s an executable in the install directory called TortoiseAct.exe – it actually does all the CVS work. It was apparently designed this way to facilitate different front ends. All you have to do is pass it a “verb” and it fires TortoiseCVS into action. There are tons of things you can do this way, but the docs are scarce – “the source is the documentation”. See it here.

(Editor’s note: see the wiki for a more structured and updated version…)

I wrote an object-oriented database a few years back using “C++ Database Development” from Al Stevens as inspiration, and I’ve always wanted to dig it out and get it updated. I’m also working on ShareTheDJ, which needs cross-platform object serialization. Robert Ramey implemented boost::serialization and it looks like an excellent way to serialize my objects in a more STL-friendly way. Here’s how to set up under FC3/FC4, gentoo and Windoze…

UPDATE: Sourceforge root changed from [cvs-pserver.sf.net:443] to [boost.cvs.sourceforge.net]. Instructions were updated.

(continued…)