I've been programming since I was eight years old, so I've worked with a wide variety of technologies. Here are the ones that interested me the most:
|—||Spirit (2005/1/25): I cannot overemphasize how great is the Spirit parsing library. For years I've been scared of writing real parsers, instead making due with nasty combinations of |
sscanf(), regular-expressions, and hand-written parsers. But now that I've discovered Spirit, all that has changed. In case you're not familiar, through the magic of template metaprogramming (a black art that I only vaguely understand), you can essentially write straight BNF into your C++ code, and it generates a complete parser. It sounds too good to be true, but it's not. It's simply awesome.
|—||XML-Based Skinning (2005/1/25): Something I'm particularly happy with now is my cool skinning system. Basically it's a total GUI language, based on XML and incorporating 3D scene-graph concepts.|
|—||Thread Lock Profiling (2004/8/15): To ensure my VoIP application has low latencies while handling streaming multimedia data, it uses lots of threads. Sometimes they get deadlocked, and it's a nightmare to debug. So, I've created a really nifty system that tracks every mutex lock (I use Windows CRITICAL_SECTIONS) and every thread, and dumps a list of which threads have which locks locked, which are blocked, and how long they've been blocked. It is a huge help when some part of the application hangs, and I can't figure out why.|
|—||DirectShow Filter (2004/8): My VoIP application requires high-performance audio and video capture, and for this I've turned to DirectShow. I'm not happy tying myself to DirectX 9, but for now it's a great way to tie deep into the video/audio capture system. To do this I created a DirectShow filter, and then spliced it into the filter graph right before the rendering filters. For video, I downsample down to whatever framerate I want (because capture devices offer a limited set of framerate options), and it gives me a really solid multimedia capture feed.|
|—||Design By Contract (2004/8): I'm a big fan of the "Design by Contract" methodology (which accounts for a large part of my interest in the D programming language). I've long done asserts for preconditions (and whenever else it's useful), but now I derive all objects from a base class with an |
invariantTest( ) virtual method. I also use a special macro at the entrance of each public method, combined with a stack-based "invariant tester" object, with the net effect that I can define and enforce class invariants on entry and exit of every public method. Hoorray!
|—||And Lots More!: For more information, check out my OldPortfolio, which goes back to the start in a long-winded fashion.|