I wanted a
Winamp Plug-in that would tell Skype what I was currently listening to when I was currently listening to stuff.
Jeff told showed me one that required I run an entirely separate application and was otherwise very lame. I then decided that I was both talented and intelligent enough to write a plug-in myself that would carry out this simple task.
Side Note: The irony of this past sentence is that as soon as I typed "intelligent", I questioned it, and hit spell check to make sure I had gotten it right (I so totally did).
Knowing already that I was going to have to write the plug-in in
C++, I started searching the web for some sample codes to change Skype's personal message field (which I later found out was called
Mood Text). I fairly quickly found
Skype's Developer Zone, and shortly after that, a
C++ example. I was able to compile the example and run it with no problems. There was no intellisense help, so it took me a little bit to take the example and figure out ->Set->MoodText() was what I needed.
After that, I grabbed the official
Winamp SDK and tried to jump right in to the generic plug-in sample. I couldn't exactly get the thing to build -- mostly because it was written in
C -- and I was frustrated at that point, so I gave up.
A few days later I picked it up again and after more searching, I found the
Winamp Beta SDK, which contained a working example, but was still written in
C. Convinced I could find a working
C++ example, I searched more and finally found
this thread with a fully working example. I was in business.
On and off over the next two weeks I googled for help a ton, gave up a few times, and struggled a great deal developing what really is an extremely simple routine: get the song Winamp is playing, tell Skype about it, wait 15 seconds, and repeat. I learned a bunch of different things through my struggles:
how to allocate memory
how to free up that allocated memory
exactly what happens when you don't free it up
sizes of different data types
what wide characters are
how much of a bitch trying to cast from different data types is (thanks Tolley)
threading in C++ (thank god for Boost)
different linker and compiler settings
string handling in C++ (thanks Noah)
dll dependencies (thank god for Dependency Walker)
side-by-side assemblies
In the end I was successful. It took me 14 days total to finish it, which is a useless statistic because of how many times I quit and how few hours I was able to put towards the project. It has a bug (my Stopped/Paused detection doesn't work), but I'm using it both at home and at work with great success.
I've always felt like I wasn't a real developer because I wrote/write the majority of my codes in (chronological order) Visual Basic 3, Visual Basic 5, ASP, PHP, and C#. I mean really, any asshole is capable of writing these types of codes. Sure I've written bits of C++, Pascal, Perl, and probably some other rubbish along the way both in and out of school, but not to any extent. Also, I really didn't retain any of it and it was all retarded stuff like the solving the *ultra-complex* 8 queens puzzle! Sometimes I want to code some hard core C++ and feel like I'm actually doing something unique-ish, but the return on investment while writing your C# or your PHP is too great to give up. I need some rich company to pay me 6 figures to write them some serious C++ codes -- I think I'm worth it.
Another side note: I found my one of my first web applications, written in Turbo Pascal back on (or at least deployed back on) December 10th, 1997. Check out them hot-shit codes -- it was nothing more than a comments form (post your name and a comment, and display all comments posted). I've gotten a lot better since then. Honestly.