The refactoring project rolls on. Mostly it’s been more of the same so I haven’t bothered boring my reader with the details. This week we had an interesting bug to fix. The bug had appeared in a much earlier version, way back in July, but it had only been reported by one user and we could never duplicate the problem. This week we managed to duplicate it, and then we needed to work out what it was and when it was added to the source…
We have a Maytag fridge and very nice it is too. However, sometimes it seems to be too cold and things freeze up. After far too long procrastinating and just excepting that cold was how fridges were supposed to be I called Maytag for support…
I hadn’t bothered to register the fridge when I bought it. We were busy with doing up the flat and sending in the registration card seemed low on the list of priorities.
We haven’t had time to go see Matrix Revolutions yet. Too much to do, too little time. We watched Reloaded on DVD last night and both enjoyed it much more than when we saw it originally at the cinema…
I think we agreed that the reason we enjoyed it more (and that the fight scenes didn’t seem as excessively drawn out and that it didn’t seem quite so slow) was that we weren’t both sitting there waiting desperately for important plot stuff to occur.
The first two filters were pretty easy. I was on a roll and the other filters were implemented just as quickly…
Now that I could parse 822 addresses blacklists and whitelists were easy to implement. Some refactoring could be done to remove the common ’list’ handling as effectively a blacklist is simply a !whitelist…
Once I had a whitelist filter I decided that it might be useful to have a way of ORing two filters together, so we could filter a filter that does something like “if the message isnt in the whitelist then strip all attachments”… An Or filter was easy to implement and test once I created a mock filter that allowed me to programmatically control what I returned from the call to FilterMessage().
Second on my list of email filters was a filter that splits a ‘domain mailbox’ into several different mailboxes depending on the username that the email is addressed to. This is basically just an intelligent version of the mailbox writing filter. The problem was, it needed to understand RFC822 addressing…
I have several POP3 mailboxes that work at a domain level. For example I can recieve pretty.much.anything@lenholgate.com. The guys that manage the domain supply me with a single POP3 mailbox and I’d like to split it locally using a mail filter.
So I have an email filter that can write messages to another mailbox. I need to supply it, and all other filters that I might write, with some configuration data. I could use XML but I dont…
Filters are given an instance of an IFilterDataManager when they’re created; the idea being that they can obtain any configuration data that they need from it. More advanced filters might also want to write data back once they’re done, but that’s a story for another day…
Now that I can retrieve and serve it up again via a POP3 I want to do stuff to it in between retrieving it and serving it.
The idea was to have a series of filters that get passed each message, Do Stuff ™ and either allow the message to be passed on to the next filter or end the filtering process.
Most of that works now, here’s how I got there.
Ok, I usually hate those ‘me too’ blog postings but…
Here’s a “fix” for the fact that on Microsoft keyboards that have an “F Lock” key to change how the function keys work the default power up state is “wrong”….
From “The furrygoat experience”, via “ISerializable”. Thanks guys…
I never expected the Bluetooth sockets entry to be so popular … From the comments on that entry it seems a lot of people are having trouble with getting devices to work with XP’s bluetooth support. To help out a little here’s my proof of concept test project.
The POP3 client is now complete. It can download messages from POP3 servers and store them in a message store. I’ve implemented a file system based message store that is compatible with the POP3 server code’s file system message store. We can download messages from server’s and make them available via our server.
As expected the test first approach had driven the design in a simple and decoupled direction; eventually some of the simple decisions were inappropriate so I added some tests and refactored…