It’s time to move another step into the digital age.

I’ve worked for years on my HangTheDJ mp3 player, and it’s provided me with countless hours of pure bliss, playing a constant stream of mp3’s just right for the mood I happen to be in. But it’s time for a reassessment.

The problem: information organization. In the digital age, get organized or drown. The only practical solution to getting organized is to store all digital media in a central location. Then stream what you need from the central store to where you are. (continued…)

From the “hard drive killer” department…

I was pretty excited to see that VS2005 has an embedded profiler – Micro$oft had to come up with a new name of course – “performance analyzer”. I threw HangTheDJ at it, going with all the defaults, and was served up with this gem before HangTheDJ even finished loading (as I happened to only have 8GB free at the time):

Performance automation returned the following error: : Error VSP1369 : Out of disk space: this scenario requires roughly 63073172 KB of disk space.

Yes, that says 63GB. Oh, to have the box of a Micro$oft developer…
(continued…)

I’m reviewing database storage in my little app after several years of dealing with M$’s calculated disregard for older technology (DAO in this case). (continued…)

I used to use all the beta Microsoft products, now I find it more efficient to move up when I’m ready – and when things have matured. However, a look at the boost regression tests shows that VC7.1 support is getting a bit lean, at least for the serialization library I use. So… time to move on up. Here is how the upgrade from 7.1 to 8.0 went for my HangTheDJ project… (continued…)

Read this guy’s notes. Seriously. Working out my own threading issues for STDJ’s purposes, I either came to the same conclusions, or should have. Even though it’s “old skool MFC”, it has great advice that can be abstracted and applied to any multithreaded environment. I’m keeping a backup of that page.

My initial troubles came from trying to decipher the MSDN docs on how to start/end a thread. There are at least FOUR #*&@% different ways to do it, and the docs are so bad they will make you go blind if you read them all. After digging for a while, the guy at flounder.com has it right when he says only one is correct. A quick peek at the Shareaza code base shows that they agree. Upwards and onwards with AfxBeginThread()!

Other issues that he helped me with were using the volatile keyword on shared (and properly locked) variables, and using ::PostMessage, not ::SendMessage, from thread to thread (I should have figured that one out, sigh…).

If I get enough time I am hopeful about switching to boost’s thread library in the future.