Introducing Subkismet-The Cure For Comment Spam
Update: I’ve created a new NuGet Package for Subkismet (Package Id is “subkismet”) which will make it much easier to include this in your own projects.
Been a short break from blogging, but I’m ready to get back to writing aboutCody, I mean code!
My philosophy towards Open Source Software is that the more sharing that goes on between projects, the better off for everyone. As my friend Micah likes to say, A rising tide lifts all boats.
Towards that end, I’ve tried to structure Subtext as much as possible into distinct reusable libraries. The danger in that, of course, is the specter of premature generalization.
I haven’t always been successful at avoiding premature generalization which has led me to focus on consolidating code into less assemblies rather than more. My focus now is to let actual reuse guide when code gets pulled into its own library.
However, there is some useful reusable code I’ve written that is already in use by many others in the wild. This is code included in Subtext as part of its defense system against comment spam. For example:
- Subtext Akismet
- A .NET client for the Akismet comment spam service.
- Lightweight Invisible CAPTCHA Validator
- An invisible CAPTCHA.
- Visible CAPTCHA - Your standard CAPTCHA control.
I contributed the Akismet code to the DasBlog team who I am sure have made adjustments specific to their blog engine. The challenge I face now is how do I get any improvements they may have made back into my own implementation?
To answer that, I created the Subkismet project. It’s more than just an Akismet client for .NET, it’s a library of SPAM squashing code meant to be useful to developers who are building web applications that require user input such as Blogs, Forums, etc…
So far it has the three mean features I mentioned, but these alone go a long way to beating comment SPAM. In the future, I hope to incorporate even more tricks for beating comment spam as part of this library.
Hopefully I can convince DasBlog (and others such as BlogEngine.NET and ScribeSonic) to switch to Subkismet for their comment fighting support and help me craft a great API useful to many. This falls in line with my goal to have Subtext be an incubator for useful open source library code that other projects will want to take advantage of.
What’s With The Name?
I thought I should just use a nonsensical word that’s a play off of Subtext and Akismet. Besides, the domain name was available (not yet pointing anywhere).
I’ve decided to host Subkismet on CodePlex, but with grave trepidations. Not too long ago, they had a major server issue and lost the source code for the .NET Identicon Handler project I started with Jeff Atwood and Jon Galloway.
Fortunately I had the source code on my machine so I was not terribly affected, but this is a serious blow to my confidence in their service. However, I do believe that CodePlex is great for small open source projects (though not yet convinced for large ones like Subtext) and I like their issue voting and wiki.
I’ll give them one more chance to impress me. Besides, this allow me to really try out their Subversion bridge when they release it.
I’ve currently prepared a BETA release in order to get people using it and to provide feedback. It should be stable code as I pulled it from Subtext and cleaned it up a bit so it could be reused by others.
However, my next step is to refactor Subtext to reference this library and see if any API usability issues come up. If you implement it yourself, please let me know if you have any suggestions for improvements.
Once I complete the refactoring and convince others to use it and provide feedback, I’ll create a 1.0 release.
Please try outthe latest release and give me feedback!