Handy Perl DateTime modules

I was working on a Perl script today and encountered the following two great DateTime format modules.
http://search.cpan.org/dist/DateTime-Format-Baby/
http://search.cpan.org/dist/DateTime-Format-Bork/
Good to see in the Changelog that someone even found a (fixed) bug in the Bork module. ­čÖé

Advertisements

Yearly WTF – the most terrible code I’ve seen in months

Today I came across the most terrible piece of code I’ve seen in months. Years. One would suspect the original programmer deliberately┬áintended to cause chaos and despair.

It starts off with some Hungarian notation to throw you off-balance; check out the “strBetaald” variable which seems to be a string but is in fact a boolean:

string strValue = "";
string strCheck = "";
string strPaid = "";
string strProcess = "";
bool strBetaald = false;

Then the code proceeds to loop through XML nodes, setting the variable “strValue” to a certain value if the XML node name is X, and setting it to another value if the node name is Y. At the end of the run, strValue contains… what value? Well, doh, that depends on whether we came across X or Y first! The variable probably isn’t that important, since it just gets logged in a financial application database in approximately 50 lines down or so. Hey, how about a small coffee break, anyone?

In the middle of the loop we find the following gold nugget:

if (strCheck != "true".ToString())
{
    strCheck = strCheck;
}
else
{
    strCheck = strCheck;
    // some other stuff..
}
bool bet = Convert.ToBoolean(strBetaald);
bool chk = Convert.ToBoolean(strCheck);

So here we’re converting the string “true” to yet another string (just to be on the safe side) and to be really sure about getting the correct value, we assign the variable to itself.

Finally, we’re converting the boolean strBetaald to boolean, to be absolutely completely 100% positively certain that we’re right about this whole true/false thing because somewhere we read that there’s this weird thing called fuzzy logic and it may be lurking inside the compiler somewhere.

It all does make sense, so why am I so worked up about this?