Preventing Rdio from using discrete graphics

Rdio requires the discrete graphics card on systems which support dynamic switching. This is annoying, since playing audio shouldn’t require intense graphics.

To get around this limitation, we can update the Rdio app’s Info.plist to inform the system that it supports the integrated card. We can accomplish this with the following command:

defaults write /Applications/ NSSupportsAutomaticGraphicsSwitching -bool YES

To revert back to forcing the discrete card, we can remove the key:

defaults delete /Applications/ NSSupportsAutomaticGraphicsSwitching

Incidentally, gfxCardStatus is an excellent tool for monitoring graphics card changes and manually switching between cards.

Incrementing with a bitmask

Bitmasks are fun. There’s lots of little tricks you can do with them. A common situation is checking for the presence of a flag among elements in a linked list, or some similar data structure. I came across a trick a few years ago that makes it drop-dead simple.

Let’s say we needed to check for AUsefulFlag in the flags element of each node, and total how many elements in the linked list had the flag.

uint64_t count = 0;
for(Node *iter = head; iter != NULL; iter = iter->next)
    count += !!(iter->flags & AUsefulFlag);

After execution, count is the number of items which have AUsefulFlag set.

Double-not (!!) is one of those useful operations which are especially useful with bitmasks. It may require a double-take at first, but it behaves exactly how you’d think.

!! of 1 is 1. !! of 0 is 0. In fact, !! of any true value evaluates to 1, so we can use it to transform something like 0b00001000 to simply 1 and increment by that value.

From Atlas Shrugged​ by Ayn Rand:

James: What are you after?
Francisco: Money.
James: Don’t you have enough?
Francisco: In his lifetime, every one of my ancestors raised the production of d’Anconia Copper by about ten per cent. I intend to raise it by one hundred.
James: What for?
Francisco: When I die, I hope to go to heaven–whatever the hell that is–and I want to be able to afford the price of admission.
James: Virtue is the price of admission.
Francisco: That’s what I mean, James. So I want to be prepared to claim the greatest virtue of all–that I was a man who made money.
James: Any grafter can make money.
Francisco: James, you ought to discover some day that words have an exact meaning.