I've got a brand new combine harvester and I'll give you the key...

The harvesting of the SSL server code took about an hour in all. It was simply a case of shuffling some code around, ripping it out of a project and into the library and then adjusting the original server and the POP3 server to suit. So, I now have a POP3 server on 110 and 995; and Outlook even lets me know that my server certificate is bogus… I guess I need a real message store now…

Harvest Time

I had a bit of spare time today so I finished the POP3 server integration. It went nice and smoothly and I tested the result with telnet and Outlook. During the Outlook testing I noticed the ’this server requires a secure connection (SSL)’ checkbox. I hadn’t been aware that there was a standard port (995) for accessing a POP3 server over SSL. My server currently only supports port 110 for unencrypted transport but I’ve got code that can turn my server into an SSL enabled server… Looks like it’s time to harvest that into The Server Framework.

Why objects should keep it on the inside

So, I’m integrating this POP3 code with my server and the first thing I do is create null message store. I haven’t implemented the message store yet, so in order for me to integrate I need a message store that just says yes to everyone being a user and provides mailboxes that are always empty… The test driven development has made this reasonably easy, I have a message store interface so I just need to stub out the methods appropriately.

Does TDD lead to earlier integration?

I’m developing a POP3 server. I’ve been developing the protocol handler test first and it’s nearly done. I haven’t started on the mailstore itself yet but I could easilly integrate the POP3 code into the server code and have a functional POP3 server… Due to the test first nature of the development, the protocol handler talks to the mailstore via an interface that’s passed to it. I don’t have a real mailstore yet, but I could mock one up based on the mock mailstore from my test harness and pass this to the POP3 handler in the server.

Murphy's Law

This is a nice story about the birth of Murphy’s Law. Yes, there was really a Murphy… From the 2003 Ig Nobel prizes, via Barry.

Everyone there works on Word, I'm a bespoke tailor

Joe Bork explains why he now tells people he works on Word as a way of connecting with something people understand. I found that people seemed to understand what I did if I compared Word to a Moss Bros suit and then explained that I was a Savile Row tailor. In fact, I didn’t even come up with the analogy, one of the previously non-comprehending non-techies did. It was a family (Miche’s, not mine) Sunday lunch at The Social and I was trying to explain how, since I’m a programmer, I don’t necessarily just know how to fix all manner of miscellaneous computer setup problems and how that was more a support role… Blank looks all around.

Windows update should...

Windows update should let you flag updates as things you dont want. You should be able to add some text if you want; so it can remind you why you didnt want it, and say to it “don’t show me this one again unless I ask…”.

Comment rot

There’s an interesting discussion going on on the ACCU’s mailing list at present. It’s about the value of comments in code. This is one of those topics that comes around every so often and this time I decided to dive in with some controversial suggestions. The discussion started with someone saying how they’ve just had a code review where the reviewer insisted on adding the following comment: // Checks the name length void CheckNameLength() This moved into a discussion about block comments in headers and my position was that as soon as any of them start to get out of date the value of any of them starts to diminish.

Back to the refactoring project

I’ve spent the last couple of days back with The Refactoring Project. They’ve done well in my absence. They managed 3 releases; all correctly tagged and repeatable. They started some refactoring of their own and, at first glance, it looks like they’ve taken on board lots of the suggestions I’ve been making over the last months. They’ve fixed a couple of new bugs in the FX code and whilst doing so found that a) the bugs were easy to locate, b) they were easy to fix with very localised changes, and c) the new code was much easier to work with!