Working on The Witness, Part 2: Finding and fixing a five-second stall
mollyrocket.com
mollyrocket.com
I've tried to write correct CoreAudio software for instance (part of writing audio code for a portable app). It turns out to be pretty much impossible. The libraries are immature; they post events to non-existant code long after the audio device is stopped and closed. Pretty much it only works if you write the same app everybody else is writing (which I am not). SO you add timeouts and use handles instead of pointers everywhere and vet all the callbacks to weed out the stale ones.
And there's nowhere to look to figure these things out, because everything you try in any deep library, you're the 1st one to try it. Because there's 1% the dev going on on that platform.
I'm actually thankful for this experience to a certain extent, because I learned how not to give up without giving a decent fight first.
I don't know about that, I find Linux to be absolutely the easiest platform to debug, personally .. so I haven't been much of a Windows 'person', but I do recognize that all platforms/architectures have their strengths.
Its just that, for me, I see the solution to the whole twisted mess of it all is to simply define another platform. Windows serves as a great host environment for a Lua VM .. wrap this in such a way that the same basic code runs on all major platforms, and oila: no more dependency on outside frameworks/libs/etc. You own the platform in the 21st century, or it owns you. Simple as that; from the pepsiPhone to throwaway computing, we're all riding a slippery slope of use/dont-use because of, factually, fads.
The new platform is the platform, as in the entire platform. If you have to subscribe, your toolset is broken.
In general, APIs like this are pretty undesirable. They're rigid and not really orthogonal to any other API, so they're difficult to combine with existing or new APIs. They can't ever really change behavior either, because people are going to rely on specific implementation details. If you're a game, you might be able to use them (assuming you don't want to do anything out of the norm), and you can't if you aren't. Problem is, the platform isn't just a gaming platform, it's a platform for pretty much everything, and the platform developer probably isn't a game developer either. This means he or she probably doesn't have the expertise to write the exact APIs game developers want, that will be flexible in just the right ways, etc, and whatever API they did write would only be for a subset of the platforms "customers".
The real problem here is that the APIs that do exist sound like they are poorly documented and not necessarily thought-out with respect to the rest of the system. Ideally, all of the options needed for a full screen game should be well-documented and orthogonal, so they can be combined to achieve what each of the various apps wants without having to write a "BeginFullScreen$APPTYPE" function. Then, if there truly is a common setup games want, it can be built as a separate library on top of these APIs, either by the platform maker or by a 3rd party.
> They might try to hire and cultivate good API designers, and have real, talented developers who do nothing but work on the APIs to the internal systems.
There are teams at these companies that do this. This is exactly what the Android Frameworks team does at Google, which includes people like Dianne Hackborn and Romain Guy (until a few months ago), to name a couple of the better known members. They're in charge of designing and implementing a lot of APIs exposed to third party developers, but also spend time each release reviewing all of the APIs that are being made public.
First it was a freebie, then I added blocking for Caps, Num and power keys and made it a shareware. It was even featured on TechTV by Leo Laporte (great for the bank account!).
Fun times...
Since DISCL_NOWINKEY has always proven reliable for me on Windows XP and later, I'd imagine (unless proven otherwise...) RIDEV_NOHOTKEYS will be reliable too.
EDIT: Just to prove me utterly wrong, see here: https://twitter.com/cmuratori/status/470647266995224576. Obviously it was some kind of a problem that this flag did pretty much the right thing.