Archive for December, 2007

The December 2007 Caffeinated Codey Winners Are…

It’s time for the next installment of the monthly Caffeinated Codey awards, where the link love flows for my favorite posts from the month.

  1. For Most Obsessive Blog Comment Recovery Operation…Eric Sink for his post Be My Support Group. After losing a lengthy blog comment due to a random Firefox error, Eric describes his multi-hour effort to recover the data using a packet sniffer and some url-decoding. Eric has long since joined the dark side of the force (business and marketing), so can you imagine what he would have been like back in his hard core developer days?
  2. For Best New Anonymous Blog Satire Site Devoted to a Single Mailing List … the collective monthly posts on the ALT.NET PurseFight site. Besides being a fine piece of satire, this site also serves as a decent Cliff Notes for those of us who can’t find the time to read all 56,000 emails a day that are generated by the hoards of geek prima donas lurking on this monstrous mailing list. Please God…let the anonymous author of the site be Scott Bellware. I promise I’ll stop playing kitten bowling if you mess with everyone’s reality in such a deliciously ironic way.
  3. For Best Placenta Humor…Rory Blythe for his post Video: Burfday Sucks - A Expose of Birfday Suckage by Rory - Part One. Rory does another brilliant YouTube comedy schtick on the meaning of birthdays. This guy REALLY hates any acknowledgement of his birthday, which is why I am going to personally organize a nation wide letter-writing campaign to declare Rory’s Birthday a national holiday next year. I have also already completed the tech specs for a state-of-the-art birthday bot that will spam him with cheerful birthday clichés in every language over every known communication channel next year. There’s no need to thank me Rory.
  4. For Best Virtuoso Display of Sarcasm… Sean Hederman for his post Review: Windows XP. I was left in awe of Sean’s superior sense of sarcasm after reading this biting parody on Microsoft’s latest operating system. By pretending that Vista preceded Windows XP, Sean artfully makes his point that Vista has some serious issues while simultaneously causing Maalox sales to soar in Redmond.
  5. For Best Christmas Hoax…Fake Steve Jobs for his series of posts that culminated in Breakfast with an Apple lawyer. In order to highlight the recent ThinkGeek controversy, the fake Jobso pretended that he was being threatened and bribed into shutting down his blog by Apple legal goons. His Christmas Eve confession sparked much spirited debate between the embarrassed duped readers and the smug know-it-alls on whether or not he had pushed the boundaries of satire too far. I know I was personally devastated as I watched hoards of Venture Capitalists suddenly lose interest in my brilliant new business plan.
  6. For Best Journalistic Researching Effort...Rob Enderle for his post Is Apple Rotting from the Inside Out? Rob was one of the people who took Fake Steve Job’s post a little too seriously and posted some harsh public accusations against Apple without first “checking his sources”, which is a nice way of saying that he posted his diatribe two days after FSJ publicly confessed to it being a hoax. I guess professional journalists aren’t held to the same researching standards as hobbyist bloggers. The comments on this site are brutal, but thoroughly entertaining. You know you’ve screwed up big when you’re last name is combined with tard to form a new popular word (i.e. only an Endertard would do something that irresponsible).
  7. For Best Audio Cliff Notes…Justice Gray’s post Audio highlights of .NET Rocks with Jeffrey Palermo & the MS MVC. After several pleasant months of relative silence, the “Master of Metrosexual Mischief” has once again emerged on the blogging scene to accost us with his unique brand of humor. In this post, he distills a one hour dotnetrocks episode on the MVC framework into 7 second remix of truly inspirational narcissism. Well played sir.
  8. The Personal Hygiene Exposé… Justin Etheredge for his post The Programmer Dress Code. It provides disturbing virtual photo album of some of the most influential computer scientists in our field. After reading this post, I’ve decided to stop bathing and doing laundry as part of a concerted effort to enhance my professional credentials.
  9. For Most Frightening Glimpse into the Potential Future of GeeksWithBlogs… D’Arcy Lussier for his post An Open Letter to Jeff Julian: Please Review My Expectations. D’Arcy causes mass hysteria with this post when he threatens to ban me for life from GeeksWithBlogs. The state department is currently leaning on the Canadian government to deport D’Arcy to Turkey so he can languish in a prison as proper punishment for his heresy.
  10. For Best Web 2.0 Holiday Cheer… James Dellow for his post Christmas 2.0: An interview with Barney Twinkletoes from Santa about Enterprise Web 2.0. It just wouldn’t be Christmas without elf social networking sites and mashups involving Elf! Maps and the CRM Naughty or Nice database. You’d better be good this year or your name will appear in Santa’s naughty RSS feed.

Once again, congratulations to all the winners. Hopefully we’ll meet someday so you can claim the alcoholic or caffeinated prize beverage of your choice.

In case you’ve missed the prior award ceremonies, you can find them here.

Twitter: The Future of Blogging or Digital White Noise?

I have a confession to make that will probably seem scandalous to all of you hip technophiles.

I just don’t understand the allure of Twitter and other micro-blogging platforms.

I definitely see how Twitter could be a formidable weapon in the social networking arsenal of a teenager, but I am just not convinced that it is a positive development in the professional realm.

It’s not that I don’t value formats and technologies that encourage conciseness and lower the barrier to entry for publishing. By eliminating the overhead and expense associated with traditional paper publishing, blogging has allowed people who are competent writers and have interesting ideas to produce compelling content that otherwise would have never been made public. Likewise, the concise format of blogs makes content much more accessible to readers who normally aren’t willing to devote the time and effort required to read books.

Some people think that micro-blogging holds that same relationship to traditional blogging and thus democratizes publishing even further while making content even more accessible.

I would argue there is a point where communicating becomes too easy and quickly loses its intrinsic value.
For example, every time I’ve visited the GeeksWithBlogs Twitter stream page, I often see Tweets like these:

6:54 Driving to work…

9:24 Waiting for my computer to boot up…

11:51 Thinking about having a burrito for lunch…

3:22 Watching TV commercial…

5:26 Just scratched myself…

Even if it were my friends and family who were sending me these types of updates, I would still probably set up some junk mail type filters to rid myself of the noise. The fact that these are all coming from people I don’t know takes my level of disinterest to a whole new realm.

I might be able to justify spending time on Tweets if they offered brain candy-like entertainment such as this:

6:03 Was attacked by a band of ninjas. I dispatched with them quickly but got ninja blood on my new shirt…

8:13 I just took a dump on boss’s Lexus. Suddenly I feel much better about having to work this weekend…

10:09 An old girlfriend just called and said she was pregnant. I pulled the old ‘no hablo ingles’ trick on her…

2:43 Police are chasing me. Looking for a place to hide-out for the night…

5:54 Those scratch marks that Joe’s wife left on my back last night still sting…

Alas, I only saw one Tweet that had much entertainment value today.

“taking coffee away from a developer is like taking away a dominatrix’s whip. You just don’t do it.”. dredding.

Otherwise, Twittering just seems like a lot of empty mental calories that is sabotaging my struggle to improve my signal to noise ratio.

Given the current direction of blogging, I expect micro-blogging to soon be overtaken by the next logical step, which I’ll call “quantum-blogging”. This will allow people to finally blog without expending any effort whatsoever. These next generation twitter devices will be able to auto-generate content based on input from built-in physical sensors. Here’s a glimpse at what you have to look forward to:

3:03 Caffeinated Coder farts.

3:05 Co-workers complain about a funky smell. Caffeinated Coder pretends not to hear

3:06 After checking their quantum twitter feeds and confirming their suspicions about the source of the bad smell, co-workers throw heavy objects at Caffeinated Coder.

3:07 Caffeinated Coder is forced to relocate his workstation to a small, dark, and noisy server room closet.

3:08 Caffeinated coder is cursing and smashing his twit… [transmission ended due to twitter device malfunction]

So what is the moral of the story?

Writing something of value is difficult. Writing something of value concisely takes true talent. Writing something of value in less than 140 characters is probably an act of folly.

I Would Listen in a Car… I Would Listen in a Bar

Ok, maybe not in a bar…but I would definitely listen to DotNetRocks here and there.

In fact, I’ve listened to most of the 300 episodes of this popular tech podcast over the last few years. I don’t burn through quite as many shows now that my commute time has been dramatically reduced, but I still listen while driving, running, vacuuming, grocery shopping, painting, mowing, and shoveling.

I am especially grateful to the show for helping to keep me in the good graces of my spousal unit, since I am much less likely to neglect tedious household chores as long as I have one of their episodes loaded on my mp3 payer. For that, I promise to hand deliver each of them a good bottle of scotch the next time I am able to make it to a conference that they are attending.

If you haven’t already listened to the 300th episode in which Carl Franklin interviews his co-host, Richard Campbell, I highly recommend it. Richard is a talented story teller and shares over 30 years of some seriously geeky and entertaining stories.

I especially liked the story of Goliath, the 1972 20MB Hewlett-Packard Hard Drive that spews forth deadly flying disks and giant car eating magnets. I was so absorbed in this episode that I missed my turn on the way home and finally threw in a few gratuitous errands so that I could finish listening to it.

Kudos to Carl and Richard for consistently producing such high quality content. I sincerely hope that they make another 300 episodes.

Look What Santa Brought Me!

Don’t be jealous, but I finally got an official T-shirt from my favorite political affiliation.

I also got a bunch of chocolate covered espresso beans in my stocking interspersed with all the coal, so you can expect those late night blogging sessions to continue for a while.

I have to admit that I was a little surprised that Santa still gives out coal. Sure, it makes economic sense due to the falling coal prices in 2007, but hasn’t he heard that coal has been labeled “Environmental Enemy Number 1″. If had read the homework that I assigned him last year, then he would know that coal plants produce more radioactive wastes than nuclear power plants and contribute in a significant way to poor air quality, acid rain, and global warming.

Very uncool Santa.

My theory is that the jolly old elf is getting tired of it being so cold in the North Pole, so he is doing his part to bring warmer weather to his homeland and perhaps even increase his real-estate wealth in the process by creating new beach front property near his workshop.

Get with the environmental program, Santa! Next year I expect to see some clean, renewable energy source in my stocking and not any more of this black environmental poison that you keep leaving me.

On Communal Douche Bags and My New Business Model

I just caught up on my Fake Steve Jobs reading and I am now convinced that Microsoft’s approach to the blogger problem completely lacks imagination and style. When faced with the likes of Scott Hanselman, Phil Haack, and Rob Conery, Microsoft takes the sissy approach of hiring them and keeping them so busy on cool projects that they use up most of their blogging wiggles and focus their remaining writing energy on sharing about the projects they are feverishly working on.

By contrast, it appears that Apple prefers to neutralize bloggers through the more direct and manly approach of bribery and intimidation. According to Fake Steve Job’s latest post, Apple just pulled the legal equivalent of sending him a fish by listing all his assets (including his kid’s college trust funds) in a legal correspondence while urging him to consider the potential serious consequences that his blogging activities could have on himself and his family. When that didn’t work, they apparently offered him a half of a million dollars to just shut up and stop writing about them.

If that is true, then all I can say is this. Well played Mr. Jobs.

The idea of paying someone to shut up is pure genius and I officially predict that this trend will spread like wildfire in the coming year and be applied to all sorts of personal and business scenarios. I know I would have gladly paid several people to just stop talking this last year. In fact, I can think of a few instances where I would have taken a second mortgage on my house in order to silence my former HR director during a few rather lengthy company meetings.

That brings me to my new business plan. I’ve officially given up on ad revenue for my blog and stopped waiting for the marquee job offer from Microsoft. Instead, I’ve decided to start courting Apple hush money by trying to effectively harness the power of my obnoxious blogging tendencies.

The next part is addressed to RSJ (Real Steve Jobs) and his mafia-wanna-be legal entourage:

Dear Mr. Jobs,

I’ve been following your recent public relations strategies and I would like to officially apply for some hush money.

To prove that I am serious in my request, I will give you a taste of some of my crazy blogger antics and conclusively demonstrate the grave threat that I pose to your company. Here is a sample of what you have to look forward to unless a very large suitcase full of hush money finds itself on my doorstep soon.

My super-secret apple sources inform me RSJ is really an alpha douche bag of epic proportions. I’m not talking about one of those fancy French, sweet-smelling contraptions that pleasantly tickle your insides with an easy and refreshing flow. I mean that he is like the cheap, defective, puss-filled and bacteria-laden, communal douche bags that get hooked up to fire hydrants and violate your insides with 500 lbs of brutal, prison-sex force. You be the judge. Can you tell the difference?

I ask you Mr. Jobs…is a measly half million bucks really too much to ask for in return for sparing you the aggravation that a constant barrage of these kinds of insightful criticisms would cause? Think about it.

Yours Truly,

Caffeinated Coder

On the off-chance that my new business model backfires, I would like Apple’s legal goons to note the following as they compile a list of my assets for their threatening letter. Unlike FSJ, I haven’t gotten around to setting up a college fund for the kids yet and the only boats I have are currently floating in my bathtub. Also, my most valuable asset consists of a rather extensive porn collection. Unfortunately, the individual items within said collection are well worn so you will no longer be able to go by the mint condition price when determining their value.

I certainly hope that FSJ isn’t pulling our legs with this story. Life isn’t nearly as much fun when sane people are in charge.

*UPDATE* - It appears that FSJ was really funnin’ with us after all. Well played FSJ. As far as RSJ is concerned, my offer still stands for the hush money. It won’t be long before people are standing in line to pay me to shut up. You’ll get a better deal if you start negotiating now.

Puzzling Issue Involving Reflection and MbUnit

I just sent the following email to the BCL (Base Class Library) Team Blog email address in hopes of getting some insight into a weird problem we’ve been having.

I was hoping you could give me some general guidance on how Type.GetProperties() determines the sequence of the PropertyInfo objects it returns.

I just ran across this remark on MSDN about the order that Type.GetProperties() returns PropertyInfo objects

The GetProperties method does not return properties in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which properties are returned, because that order varies.

We have parsing code that uses the 1.1 framework which is dependent on the order in which properties are returned. It fails intermittently when run as part of a suite of MbUnit tests. After seeing this msdn remark, I changed the code to remove the sequence dependency and the MbUnit intermittent failure problem disappeared. This led me to believe that properties were sometimes being returned in an order other than what we expected (the order they were declared in the code files).

Normally we are not allowed to make production changes this time of the year unless the issue is critical, so we are trying to determine the likelihood of this causing production issues. The problem is that we get contradictory results based on how we test this. If I wrap the method in a hundred thousand loop iteration, then I can’t reproduce the error in MbUnit. The properties always return in the order in which they are declared in the class file. However, if I run the whole suite of tests several times in succession, then I receive random errors that seem to derive from the sequence being returned in a different order.

Is there some internal algorithm that might trigger a different sequential order to be generated based on some unique condition that running the whole MbUnit suite of tests as opposed to running them in a large loop would cause (i.e. a certain number of threads or memory/cpu pressure)?

Any insight you could offer in this problem would be greatly appreciated.

Thank you,

Russell Ball

Does anyone else have any ideas?

** Update **

We no longer get these failures in MbUnit if we revert it to the 1.1 framework by changing the supported frameworks node in the config file as described here. I’m guessing they changed the algorithm in the 2.0 framework that is used to determine the sequence.

That still doesn’t explain why there is a difference between calling our code in a massive loop versus calling it as part of a suite of tests, but at least it puts our minds at ease with respect to the risk of intermittent failures occurring in our current production code.

Vil: Dead as in Doornail?

I spent some time last week working with Vil, a free code analysis tool that can be used to locate potential quality issues and high risk areas in your code. While working on it, I learned all about various code metrics such as cyclomatic complexity, eCouplings, and LCOM (Lack of Cohesion in Methods) and experimented with setting appropriate thresholds for each.

I also incorporated all the required command line switches into our Nant script and even dusted off my XSLT skills in order to create a custom stylesheet to summarize the results and display them nicely on our main Cruise Control report. To my surprise several of the other developers at work seemed genuinely interested in the potential feedback we could get from this tool (people can only get so excited about cyclomatic complexity).

There was one major problem. All the fun I was having was restricted to one small dll. This is because Vil has a built-in limit so that a license key is required when you try to analyze a dll that has more than 100 types in it. The website indicates that all you need to do to attain this license is to send them an email. I did that. Twice. That was two weeks ago and I still haven’t heard anything back yet.

Vil is free, so one could argue that I am just getting what I paid for. I guess I figured that since Vil was incorporated into the WebDashboard for CruiseControl, it was established enough to be a safe bet. I was wrong. The last update on the website was two years ago and it was only a vague promise of a new version that would support the 2.0 framework. The new version never appeared and the current version seems to be from mid 2004.

I’m not even sure why the creator of Vil decided to include a built-in limit since the license to unlock it is supposedly still free. Perhaps he had some intention of eventually making it a commercial product or maybe he just wanted to keep statistics on larger customers. If it was an open source project and the source code were available, then I wouldn’t mind digging through the code to remove this restriction myself. But there is no source code to be found.

A Plea to the Project Owner: I understand there are plenty of good reasons to abandon a project that you weren’t making any money on. However, if you are calling it quits, could you please make one last altruistic gesture and either release the source code or else publish one last version without this restriction? It seems like a lot of work to have spent on an otherwise decent tool only to let it fall into oblivion because of this license issue.

Recommendation to Potential Vil Users: Don’t bother investigating this tool unless you already have one of the fabled golden license keys. I’m migrating back to NDepend instead. I’ve already worked with NDepend and think that it is a far better tool, but I gave Vil a try because it seemed like it would be a lot easier to integrate into Cruise Control due to the built-in support.

Request To CruiseControl Developers: Please remove Vil plugins and stylesheets from the next version of Cruise Control. It’s aggravating to spend time getting it to work only to later have to abandon it because it only works with trivially small projects.

OK, Rant complete. I feel better now.

Side Note: Apparently the phrase “Dead as a Doornail” is a very old expression and can even be found in a few of Shakespeare’s plays like Henry IV. Based on a quick google search, it appears that nobody really knows why doornails are any more dead than all the other inanimate objects (for example house nails). I saw a few weak guesses, but no explanations that were really compelling. I guess language is as uncontrollable and mysterious as the internet.

Are You Mocking My Code?

I’ve been playing around with mock objects using Rhino.Mocks for the last few months, but today was the first time that I had an unfettered coding win and became a true convert.
I was introduced to NUnit about five years ago from a co-worker (thanks Dewayne) and gradually became a true believer.

Unfortunately, I was a late-bloomer in the area of mocking, so by the time I finished my last big project I had left a suite of about 500 database driven tests that took almost 2 hours to run and were a maintenance nightmare. The vast majority of my unit testing efforts revolved around SQL initialization and cleanup scripts that massaged the database into just the state I needed for each tests case scenario.

Although this approach definitely made me a wizard when it came debugging data-related production issue quickly, it was too high of price to pay for the benefits I was receiving. Although I remember thinking in the beginning that this “realistic” approach to testing was much more valuable than the “fake” tests that didn’t hit the database, by the end of the process I was no longer so sure. I still believed in the value of unit testing, but I knew there had to be a better way of doing it.

During my stint as an architect, I read enough about mocking to know that it was a good idea in theory, but of course I had little opportunity to put that theory to the test. Now that I am a code monkey again, I can say with certainty that mocking is an absolutely essential aspect of Test Driven Development and not simply a “nice-to have” supplemental activity like I assumed before.

Why is Mocking Critical?

  1. It makes debugging easier - When a database driven test fails, the problem could be anywhere and in my experience it is most often related to a problem with the initialization script (i.e. accidental order-based test dependencies). This often led me to ignore test failures when I was pressed for time because I knew that it was likely just another false alarm. However, when a test that uses mock objects fails, I am not only fairly certain that it is a problem with the code rather than the test, but I also know exactly where the problem is because I’ve guaranteed the behavior of every piece of code except the part that I am trying to test.
  2. It makes writing tests faster and easier - One of the biggest barriers to adoption for TDD for most developers continues to be the perception that it takes too long. I can give a dozen reasons why that perception is wrong, but in the end I think it is more productive to simply find ways to shorten that process. That is exactly what mocking does. Writing out a series of Expect.Call() statements is an order of magnitude faster than trying to write data manipulation statements.
  3. It makes tests execute faster - Don’t underestimate the power of fast feedback. Even if you are not a die-hard continuous integration practitioner, you have to admit that the longer your tests take to run the less likely you and other developers will be to actually run them. Even if you do religiously run them at night, the longer feedback cycle dramatically decreases one of the main benefits of TDD, which is the increased coding speed that comes from test-backed confidence and not having to waste time on excessive analysis and fretting about possible unknown collateral damaged.

What does Mocking Require?

  1. Interface Based Programming - If you use Rhino.Mocks, then every class that you mock must implement an interface. With the help of ReSharper, interfaces can be created from an existing class and propagated to the rest of your codebase with just a few keystrokes. This alone makes the price of ReSharper worth it if you are going to start using mocking in a Legacy system that was designed without using interfaces.
  2. Dependency Injection - One of the first stumbling blocks I ran into came from complex collaborations from objects that weren’t able to be mocked because they were created inside of methods. You can quickly get around this with a little refactoring by making collaborating objects private member variables and then adding a constructor overload to expose them during testing. It is usually a relatively fast and low-risk design change to make.
  3. Identifying Code Seams - If you find yourself getting frustrated and beginning to think that you are stuck in a code base that is impossible to mock, then stop and read the book Working Effectively With Legacy Code by Michael Feathers. I’m about a quarter of the way through this right now and it is one of the most helpful tech books I’ve ever read. The author is fearless and infinitely resourceful when it comes to getting code of any language and any quality under test. In fact, many of his examples are in C++ and even C, so that means that you have no excuses when it comes to your own project. He gives lots of practical advice on how to find the “seams”, which are the easiest and most cost-effective places to modify code so that you can begin to mock it.

A Practical Example?

Here is an MbUnit test that I wrote today before I tackled a production bug that was assigned to me. It mocks the IPaymentTypeItem, which has read-only properties and thus is normally only allowed to be populated from the database. The Expect.Calls() are just done for the methods and properties calls that are actually made on the object in the piece of code I am testing. You can get a full tutorial with better explanations of the API calls here.

 

   1: [RowTest]
   2: [Row("%B409999999999999^Russ's Coffee Emporium^09011211000019900000000?;","409999999999999")]
   3: [Row(";4409999999999999=090112110000199?","409999999999999")]
   4: public void Should_Load_Correctly_With_Partial_Track(string trackData, string expCardNumber)
   5: {
   6:     MockRepository mocks = new MockRepository();
   7:     IPaymentTypeItem payment = (IPaymentTypeItem) mocks.DynamicMock(typeof (IPaymentTypeItem));
   8:     Expect.Call(payment.BinFirstDigit).Return(expCardNumber.substring(0,1));
   9:     Expect.Call(payment.IsCreditCard).Return(true);
  10:     Expect.Call(payment.PaymentTypeValue).Return(PaymentType.VisaCard);
  11:     mocks.ReplayAll();
  12:     FinancialCardEncoding encoding = FinancialCardEncoding.CreateCardEncoding(trackData,payment,true);
  13:     Assert.AreEqual(0,encoding.Errors.Count);
  14:     Assert.AreEqual(expCardNumber,encoding.PrimaryAccountNumber);
  15:     mocks.VerifyAll();

Rhino.Mocks is certainly not the only mocking framework out there, but so far I like it because it takes a strongly typed approach rather than relying on strings which means I get to use intellisense. Whatever framework you do choose, I highly recommend that you take the time to learn it well and incorporate it thoroughly into your development as soon as possible.

The Hundredth Monkey Effect

This is my 01100100′th post (that’s 0×0064 in hex for you script kiddies). That means that I get free reign to wax nostalgic and talk about deeply philosophical, thought-provoking topics like…monkeys.

For those of you who are not well versed in inspirational parables, the hundredth monkey effect refers to how an idea can spread like wildfire once it reaches a critical mass of people. The name originally comes from a research study involving monkeys and sweet potatoes that was supposedly done by a Japanese scientist in the 50’s.

I would go into more detail about what the monkeys were actually doing with the sweet potatoes, but apparently the scientific observations were severely distorted by the historical equivalent of a big literary and pop culture game of telephone so I won’t bother. Besides, inspirational parables are rarely concerned with mundane things like scientific fact, so I’ll simply gloss over that aspect of the story for now.

So what exactly is the reason that I am suddenly fixating on monkeys?

  1. Am I trying to somehow justify my participation in the great blogging echo chamber by pretending that I am helping to build a critical mass of gooey coding goodness that will eventually spew forth over all developers?
  2. Is it simply because this was the first interesting thing that I found when I googled “hundredth”?
  3. Or…is it because I just really, really like monkeys and am trying to save my blogger proceeds up so that I can buy a hundred of them?

Although number three is technically true, I would probably have to pick number two as the correct answer, which means that all of this was simply a ruse to segue into some boring retrospective blather. I can’t believe you fell for that!

So here are my one hundred posts’ worth of hard-earned distilled wisdom that I will now impart:

The three things I’ve learned from my first 100 posts:

  1. While one hundred posts seems like a lot to inflict on poor unsuspecting readers who are just trying to goof off a little at work, it is nothing compared to the unholy torrent of posts unleashed by a certain Israeli wordy bastard who has 3,000 posts or the Canadian upstart who is approaching 800 posts.
  2. Contrary to what I had been promised, blogging did not yield wealth, fame, a cushy Microsoft job, or women’s undergarments being thrown at me on a regular basis.
  3. The FCK editor scores off the charts on the suckage o’meter. It would have been nice if someone had told me about Windows Live Writer 6 months ago, so I could have avoid some formatting grief while blogging

Now…the three things I promise for my next 100 posts

  1. To post whenever I feel like it.
  2. To post whatever I feel like writing.
  3. To ignore rules one and two when it suits me.

Seriously, I know my blog could use a good SEO makeover along with a tad more professionalism if it is ever going to make it to the big slashdot show, but the last time I checked I was doing this for fun and if it ever stops being fun then I reckon I’ll pack it in.

That being said, I do have about 100 different topics listed on my short-attention span idea list along with a dozen half-finished draft posts, so I have a good feeling that I just might make it to my 11001000′th post sometime next year…that is unless I am banned by some tyrannical mad Canadian blogger first.

An Open Letter to a Certain Delusional Canadian Blogger

I just noticed a reference to yours truly in one of D’Arcy Lussier’s recent posts in which he talks much smack about his plans to overtake Chris Williams (a.k.a Blogus Maximus) for the title of wordiest bastard on GeeksWithBlogs.

It was bad enough that his weirdo Knuck references forced me to google both Toque and Tim Horton or that his absurd suggestion that I would soon want to immigrate to Canada to be closer to the new “Blogger King” caused me to spew coffee over my monitors. But he simply crossed the line when he vowed to ban me for life from GeeksWithBlogs if I don’t pay him proper respects by awarding him another coveted CaffeinatedCodey award.

This offends me almost as much as Canadian fart jokes.

First of all, I can’t be intimidated into submission by anyone other than my wife who currently has enough pregnancy hormones surging through her body to drop a large elephant.No honey, I’m not in any way calling you fat.Pre-emptiveDisclaimer>

Secondly, what makes him so special that he can demand a prize that many have killed for without first offering up a princely bribe like all the previous winners. Justice Gray (a.k.a Justin the Metrosexual), for example, offered me a lifetime supply of “Nair For Men” along with his super secret exfoliation recipe. Rory Blyth offered first to make me a God and then to help disguise me as a forest so that I could escape the clutches of the Evil New Orko Seclorum. Most of the other winners offered me vast sums of their blogger wealth, which thanks to the new tech bubble now dwarfs the paltry chump change held by the oil tycoons.

So D’Arcy, I leave you with the following classic parable to ponder while you search the frozen tundra that you call home for a bribe worthy enough to secure you another Caffeinated Codey.

An American, a German and a Canadian blogger were sitting in a sauna when suddenly there was a beeping sound. The American pressed his forearm and the beep stopped. The others looked at him questioningly. “That was my Blackberry device he said. “I have a microchip under the skin of my arm.

A few minutes later a phone rang. The Japanese fellow lifted his palm to his ear. When he finished he explained “That was my iPhone, I have a microchip in my hand.

The Canadian felt decidedly low-tech, but not to be outdone, he decided he had to do something just as impressive. He stepped out of the sauna and went to the toilet. He returned with a piece of toilet paper hanging from his butt. The others raised their eyebrows and stared at him. The Canadian finally said “Well, will you look at that! I’m getting a fax.

Next Page »