8 Grams of Bullshit

Illustration

My last visit to McDonald I noticed that my meal has “8 grams of whole wheat” printed on package. I was quite surprised to see US company use Système international d’unités to express how much of health they pack in the box.

To put things into perspective 8 grams is almost 4 times less than legal amount of marijuana in California. That whole grain thing is really potent stuff indeed.

While someone might say that McDonald is not doing anything wrong and that this is just reporting fact I would not agree. I think that this is pure game of numbers that targets USA citizens that quite often have no feeling what grams are (as I have no feeling for ounces). This is pure sham intended to represent their food as a healthy choice.

McDonald food is probably the next best thing one can do to his body after a car crash and that probably holds true for fast food in general. Of course I will grab occasional meal or two because I don’t have time for anything better and because (shame) I do like taste of it. Just please stop bullshitting be. Let my cholesterol rise in peace.

P.S. For my SI challenged USA friends 8 grams is 0.28 ounces. :)

VHD on ExFAT

Illustration

One of nicest hidden gems in Windows 7 is exFAT. It’s a simple file system with support for huge files (16 EB) but without any support for access control. Pretty straightforward replacement for FAT32.

As leap of faith action I decided to format one whole disk with it. It was disk that kept my multimedia files and occasional virtual disk. I wasn’t troubled by security since BitLocker works like a charm even inside of VHD. Unfortunately that plan was snipped in the bud.

As soon as I created virtual disk I was greeted with “The requested operation cannot be completed due to file system limitation”. Even worse, you cannot attach already existing VHD that happens to be there. It simply refuses to do anything.

While I haven’t done any detailed analysis, it seems that exFAT and VHD do not work together.

Ping

Few days ago I needed to check whether certain server was dead or alive. Any network guy will tell you that ping is your mate. While he also might tell you that ping might not work at all times (damn you firewall) I will ignore this unfortunate part for a moment. Suffice to say that ping works for my scenario.

While I used to solve this issues with good old P/Interop, I decided to check whether .NET Framework 3.5 (one that I used) is smarter that old grandpa 2.0. And what do you know, there is Ping class available inside System.Net.NetworkInformation namespace.

Class was made by someone who clearly hadn’t read Framework Design Guidelines but it does provide complete solution. At least code is easy enough:

var ping = new Ping();
var reply = ping.Send("www.example.com");
if (reply.Status == IPStatus.Success) {
    Debug.WriteLine(reply.RoundtripTime + " ms.");
}

Focus Thief

Illustration

There is NO REASON WHATSOEVER to make a window top-most if user has not explicitly requested so. And no application should make that sin.

Let’s imagine a scenario in which your server temporarily refuses connection. Outlook detects that password/user-name fails and decides to ask you. Since this is so important it shows window in foreground as A FUCKING TOP-MOST window. You dismiss it with cancel in order to continue with your work. In three seconds FUCKING TOP-MOST window reappears and you click it away, again. And it appears again. And you dismiss it again. And you start writing something only to have that FUCKING TOP-MOST window steal focus again. Most viruses/worms/diseases I know are not annoying as much as Outlook 2010.

I believe that developer who implemented this should be forced to do team programming with whichever moron manager thought this was a good idea. And they should kick each other in balls every time window pops-up.

Rollback in Mercurial

Illustration

Lets start with assumption that you are both user of Mercurial and that you made an error in merging. Or it might be directory restructuring gone bad. In any case, you need to go few revisions back.

Let’s assume that we have small project well into development. Situation is simple enough and there are no branches involved. Only important thing to notice is that version that works was 137 and all changes after that are something that we would rather forget:

140: Some editing.
139: Fixing renames.
138: Directory reorganization.
137: Everything is working!
...

There are two solutions that can bring us toward situation as it was in 137.

Easiest, and (in my opinion) cleanest solution, is just to clone your repository. Making new clone that goes to revision 137 will solve problems with a clean cut. Unfortunately there are couple of problems with this clean solution. If your repository is shared one, be prepared to call every person that uses it and to tell them they need to delete their local repository and make a new clone. If you forget to do that changes that you just removed might magically appear when someone else pushes (since Mercurial will think that they have newer version). Some sort of synchronization is definitely needed.

Another issue with this method would be loss of history. If you had any changes done between 137 and 140, they are forever gone. That might not be a problem if there wasn’t many changes or if they were trivial but you should be careful about this.

Illustration

Fortunately Mercurial has way of solving this and it is called backout. Just remember to give it revision where you messed up. In this case that revision would be 138 (directory reorganization).

This method is not as nice since all that “bad” code is there. However, all history is preserved and all changes that happened after revision that was backed out are merged again. While it still might be a good move to notify team of changes, nobody will kill you if you forget to. :)