<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Geek in progress &#187; mollom</title>
	<atom:link href="http://www.itkovian.net/base/tag/mollom/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itkovian.net/base</link>
	<description>I am not yet done.</description>
	<lastBuildDate>Wed, 28 Apr 2010 14:05:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Moving hMollom to a monadic base</title>
		<link>http://www.itkovian.net/base/moving-hmollom-to-a-monadic-base/</link>
		<comments>http://www.itkovian.net/base/moving-hmollom-to-a-monadic-base/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 22:52:40 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[mollom]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/moving-hmollom-to-a-monadic-base/</guid>
		<description><![CDATA[In a move to finally grok monads and monad stack a bit better, I decided to move the hMollom code to a monad based implementation. The exported functions now execute in the MollomMonad, which at this point is defined as follows:

type MollomState = ReaderT MollomConfiguration (StateT MollomServerList IO)
type MollomMonad = ErrorT MollomError (StateT (Maybe SessionID) [...]]]></description>
			<content:encoded><![CDATA[<p>In a move to finally grok monads and monad stack a bit better, I decided to move the hMollom code to a monad based implementation. The exported functions now execute in the MollomMonad, which at this point is defined as follows:</p>
<p><code><br />
type MollomState = ReaderT MollomConfiguration (StateT MollomServerList IO)<br />
type MollomMonad = ErrorT MollomError (StateT (Maybe SessionID) MollomState)<br />
</code></p>
<p>The main concept of the code remains the same, each exported function calls the service function. The latter returns a MollomState a, to capture the fact that during the Mollom request, we potentially need to update the list of servers we can query with API calls. This result is then lifted into the MollomMonad stack by using the following function.</p>
<p><code><br />
returnStateT a = StateT $ \s -&gt; liftM (flip (,) s) a<br />
</code></p>
<p>This is illustrated in the following control flow figure (for a full sized image, follow the link to flickr):</p>
<p><a href="http://www.flickr.com/photos/itkovian/4512751644/" title="Control flow in hMollom by Itkovian, on Flickr"><img src="http://farm3.static.flickr.com/2279/4512751644_0be66612e4.jpg" width="500" height="463" alt="Control flow in hMollom" /></a></p>
<p>The error handling is done by usage of the ErrorT monad transformer, which add the possibility to return a Left MollomError as function value, indicating a fault during the handling of the request. At this point, I have not added a decent runMollomMonad function, as I am still pondering which functions may be most useful for the users of this library. However, you can easily employ the following function, where defaultMollomConfiguration :: MollomConfiguration and we start without any servers that are available.</p>
<p><code><br />
(\m -&gt; (runStateT $ (runReaderT $ (runStateT . runErrorT $ m) (Nothing) ) defaultMollomConfig) UninitialisedServerList)<br />
</code></p>
<p>As usual, the code is available from both the <a href="http://github.com/itkovian/hMollom">GitHub repository</a>, as well as from <a href="http://hackage.haskell.org/package/hMollom">Hackage</a>. All feedback is welcome. Thanks to #haskell and #ghentfpg for bearing with my questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/moving-hmollom-to-a-monadic-base/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hMollom</title>
		<link>http://www.itkovian.net/base/hmollom/</link>
		<comments>http://www.itkovian.net/base/hmollom/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:51:16 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[mollom]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/hmollom/</guid>
		<description><![CDATA[You may or may not be aware of the excellent anti-spam service provided by Mollom, founded by two friends and colleagues, Dries Buytaert and Benjamin Schrauwen. Mollom provides an API to program against, allowing support libraries to be written in a variety of languages and for numerous platforms. Top-notch examples are the Drupal plugin (obviously [...]]]></description>
			<content:encoded><![CDATA[<p>You may or may not be aware of the excellent anti-spam service provided by <a href="http://mollom.com" title="Mollom homepage">Mollom</a>, founded by two friends and colleagues, <a href="http://buytaert.net" title="Dries' homepage">Dries Buytaert</a> and Benjamin Schrauwen. Mollom provides an API to program against, allowing support libraries to be written in a variety of languages and for numerous platforms. Top-notch examples are the <a href="http://drupal.org" title="Drupal homepage">Drupal</a> <a href="http://ftp.drupal.org/files/projects/mollom-6.x-1.12.tar.gz">plugin</a> (obviously <img src='http://www.itkovian.net/base/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  and the <a href="http://wordpress.org">WordPress</a> <a href="http://wordpress.org/extend/plugins/wp-mollom">plugin</a>. Next to that there are a number of libraries for Java, PHP5, Ruby, Python, etc. Sadly, a <a href="http://haskell.org">Haskell</a> library was lacking.</p>
<p>Given that I enjoy programming in Haskell and need to sharpen my Haskell-fu, I set out to write a library for interfacing with the Mollom <a href="http://mollom.com/api/mollom-basics">API</a>. The library is far from finished, but it is functional at this point, so if you have Mollom keys, you can call the services and fight the spam war on your Haskell driven website.</p>
<p>I maintain two repositories where you can get the library:</p>
<ul>
<li>At <a href="http://hackage.haskell.org">Hackage</a>: <a href="http://hackage.haskell.org/package/hMollom">hMollom</a></li>
<li>At <a href="http://github.com">github</a>: <a href="http://github.com/itkovian/hMollom">hMollom.git</a></li>
</ul>
<p>At this point the library has been given version 0.1. So it is still lacking quite a lot of features. Stuff that is on the immediate TODO list:</p>
<ul>
<li>Add fault handling</li>
<li>Add server list refreshing</li>
<li>Encapsulate the state in a monad</li>
</ul>
<p>Any feedback is appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/hmollom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyMollom moved to GitHub</title>
		<link>http://www.itkovian.net/base/pymollom-moved-to-github/</link>
		<comments>http://www.itkovian.net/base/pymollom-moved-to-github/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:50:45 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mollom]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/pymollom-moved-to-github/</guid>
		<description><![CDATA[Just a quick update. I have moved the repository for PyMollom over to GitHub. If you are unfamiliar with git, you can check out the library using git clone git://github.com/itkovian/PyMollom.git. At this point, the library is still the same, but I do plan on integrating the new language detection ASAP.
]]></description>
			<content:encoded><![CDATA[<p>Just a quick update. I have moved the repository for PyMollom over to <a href="http://github.com/itkovian/PyMollom">GitHub</a>. If you are unfamiliar with <a href="http://git-scm.com/">git</a>, you can check out the library using <span style="color: #333333; line-height: 16px;">git clone git://github.com/itkovian/PyMollom.git. At this point, the library is still the same, but I do plan on integrating the new language detection ASAP.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/pymollom-moved-to-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Haskell wraper for Mollom</title>
		<link>http://www.itkovian.net/base/haskell-wraper-for-mollom/</link>
		<comments>http://www.itkovian.net/base/haskell-wraper-for-mollom/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 23:28:26 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[mollom]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/?p=227</guid>
		<description><![CDATA[I have been a Haskell fan since I first get introduced to the language, in the now deprecated course taught by <a href="http://www.elis.ugent.be/~kdb">Koen De Bosschere</a> when I took my final year before graduating as a licentiate in computer science (which would now be a MsC. in CS). Due to a lack of time, mostly, I never proceeded very far beyond the basics, not even when I was a teaching assistant for this course.]]></description>
			<content:encoded><![CDATA[<p>I have been a Haskell fan since I first get introduced to the language, in the now deprecated course taught by <a href="http://www.elis.ugent.be/~kdb">Koen De Bosschere</a> when I took my final year before graduating as a licentiate in computer science (which would now be a MsC. in CS). Due to a lack of time, mostly, I never proceeded very far beyond the basics, not even when I was a teaching assistant for this course. Still, with <a href="http://mollom.com">Mollom</a> having been released, the Haskell application database <a href="http://hackagedb.haskell.org">Hackage</a> finally coming into adulthood, or some form of it, I deemed the time ripe to attempt writing a wrapper for Mollom.</p>
<p>That said, first thing to do is check Hackage and find stuff we can reuse. <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/haxr">haxr</a> immediately comes to mind for the XMLRPC stuff. Other packages I am using are <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/base64-string">base64-string</a>, <a href="http://hackage.haskell.org/packages/archive/Crypto/4.1.0/doc/html/Data-Digest-SHA1.html">crypto</a>, <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ConfigFile">configfile</a>,<br />
Installing the above will download and install a number of other libraries on which these depend. Still, Hackage seems to do the trick just fine, installing everything I needed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/haskell-wraper-for-mollom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mollom updated to reflect API document changes</title>
		<link>http://www.itkovian.net/base/mollom-updated-to-reflect-api-document-changes/</link>
		<comments>http://www.itkovian.net/base/mollom-updated-to-reflect-api-document-changes/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 15:46:44 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[mollom]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/?p=225</guid>
		<description><![CDATA[As you may be aware of, the Mollom API has undergone some small changes in order to better deal with load balancing. A side effect of this is that the Python module I wrote and maintain had to be updated as well. Meanwhile, I uncovered a few bugs, the most important of which resulted in the inability to handle empty server lists provided by the Mollom service. As far as use of the module is concerned, there are not really any changes, except one. The MollomBase class now provides a non-empty method that implements a basic callback cache strategy for the server list.

You can find the tarball containing the modules and the darcs repository <a href="http://itkovian.net/packages/python_mollom_0.2.tgz">here</a>. To pull from the darcs repository, use <sf>darcs get http://itkovian.net/darcs/python_mollom</sf>.]]></description>
			<content:encoded><![CDATA[<p>As you may be aware of, the Mollom API has undergone some small changes in order to better deal with load balancing. A side effect of this is that the Python module I wrote and maintain had to be updated as well. Meanwhile, I uncovered a few bugs, the most important of which resulted in the inability to handle empty server lists provided by the Mollom service. As far as use of the module is concerned, there are not really any changes, except one. The MollomBase class now provides a non-empty method that implements a basic callback cache strategy for the server list.</p>
<p>You can find the tarball containing the modules and the darcs repository <a href="http://itkovian.net/packages/python_mollom_0.2.tgz">here</a>. To pull from the darcs repository, use <sf>darcs get http://itkovian.net/darcs/python_mollom</sf>.<br />
<!--break--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/mollom-updated-to-reflect-api-document-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mollom T-shirt</title>
		<link>http://www.itkovian.net/base/mollom-t-shirt/</link>
		<comments>http://www.itkovian.net/base/mollom-t-shirt/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 15:17:04 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[dries]]></category>
		<category><![CDATA[mollom]]></category>
		<category><![CDATA[t-shirt]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/?p=220</guid>
		<description><![CDATA[Dries and Ben (of <a href="http://mollom.com">Mollom</a> fame) mailed out a number of <a href="http://buytaert.net/mollom-tshirts">t-shirts</a> to people who made a contribution to their service. I wrote a Python wrapper around the Mollom API. So, thanks guys, I will wear it with pride ;-)]]></description>
			<content:encoded><![CDATA[<p>Dries and Ben (of <a href="http://mollom.com">Mollom</a> fame) mailed out a number of <a href="http://buytaert.net/mollom-tshirts">t-shirts</a> to people who made a contribution to their service. I wrote a Python wrapper around the Mollom API. So, thanks guys, I will wear it with pride <img src='http://www.itkovian.net/base/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/mollom-t-shirt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python wrapper for Mollom</title>
		<link>http://www.itkovian.net/base/python-wrapper-mollom/</link>
		<comments>http://www.itkovian.net/base/python-wrapper-mollom/#comments</comments>
		<pubDate>Thu, 08 May 2008 15:43:11 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[mollom]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/?p=208</guid>
		<description><![CDATA[With the release of the <a href="http://mollom.com">Mollom</a> <a href="http://mollom.com/api">API</a>, I have cleaned up and documented my Python wrapper for the API.

You can get the code from the <a href="http://darcs.net">darcs</a> repository at http://itkovian.net/darcs/python_mollom. Alternatively, a packed <a href="http://itkovian.net/packages/python_mollom_0.2.tgz">tarball</a> is also available.]]></description>
			<content:encoded><![CDATA[<p>With the release of the <a href="http://mollom.com">Mollom</a> <a href="http://mollom.com/api">API</a>, I have cleaned up and documented my Python wrapper for the API.</p>
<p>You can get the code from the <a href="http://darcs.net">darcs</a> repository at http://itkovian.net/darcs/python_mollom. Alternatively, a packed <a href="http://itkovian.net/packages/python_mollom_0.2.tgz">tarball</a> is also available.</p>
<p>For the moment, the repository contains two files Mollom.py and HTTPTransport.py. The former contains the MollomAPI and MollomFault classes. The latter contains a derived class to deal with HTTP transport in the XML PRC library, as the default Python code does not seem to do things correctly. To get the response from the Mollom service as a Python dictionary, you need to either use the provided HTTPTransport class or provide your own implementation</p>
<p>To deal with caching and using session IDs a MollomBase class is present, which can be overridden to allow a user defined caching mechanism for the server list to be used. This class is still under heavy development, so it is prone to (frequent) changes.</p>
<p>MollomAPI offers the following methods:</p>
<ul>
<li>getServerList
<li>checkContent
<li>sendFeedback
<li>getImageCaptcha
<li>getAudioCaptcha
<li>checkCaptcha
<li>getStatistics
<li>verifyKey
</ul>
<p>I plan to see if I can get this into <a href="http://www.djangoproject.com/">Django</a> as well as a contributed app that can be included in a Django project.</p>
<p><b>Update (2008/09/18)</b> I have incorporated the changes made to the API document on 2008/09/10. The version of the tarball has been bumped to 0.2. Additionally some bugs were fixed, so you might want to update to this version rather than sticking with the old one.</p>
<p><b>Update (2010/02/08)</b> I have moved the code to a new repository at <a href="http://github.com/itkovian/PyMollom">GitHub</a>. Get the library using git clone git://github.com/itkovian/PyMollom.git. For now, I do plan on keeping the darcs repo hosted at my website and the github repo in sync, so you can pull from either.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/python-wrapper-mollom/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SPAM, begone!</title>
		<link>http://www.itkovian.net/base/spam-begone/</link>
		<comments>http://www.itkovian.net/base/spam-begone/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 12:06:06 +0000</pubDate>
		<dc:creator>Itkovian</dc:creator>
				<category><![CDATA[mollom]]></category>
		<category><![CDATA[protection]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.itkovian.net/base/?p=202</guid>
		<description><![CDATA[As you probably know, the moment a website becomes available on the web, it does not take long before spammers locate it, and try to pollute your content. I have no need for viagra, penis enlargement, large amount of money that can easily be transferred to my bank account, etc. and I have no desire whatsoever to offer these people another forum to offer their (illegal) merchandise. So, task one was to find adequate means for protecting myself, and (the few) people who read my rants.]]></description>
			<content:encoded><![CDATA[<p>As you probably know, the moment a website becomes available on the web, it does not take long before spammers locate it, and try to pollute your content. I have no need for viagra, penis enlargement, large amount of money that can easily be transferred to my bank account, etc. and I have no desire whatsoever to offer these people another forum to offer their (illegal) merchandise. So, task one was to find adequate means for protecting myself, and (the few) people who read my rants.</p>
<p>Luckily, in the past, I have shared an office with <a href="http://buytaert.net">Dries</a> who has been thinking hard on the spam problem and has been working on a solution since he completed his PhD. The goal was to provide not simply spam protection, but also to help people increase the quality of the content, by protecting against profanities, anonymous user registration etc. To shorten a long story, this website has been using <a href="http://mollom.com">Mollom</a> as its spam protection mechanism since its inception. As you can see, Mollom has been quite effective, I&#8217;ve only had five (iirc) false negatives (spam that was classified as acceptable content), which is almost perfect.</p>
<div class="figure">
<a href="http://www.flickr.com/photos/itkovian/2379083847/" title="Mollom kills spam by Itkovian, on Flickr"><img src="http://farm4.static.flickr.com/3084/2379083847_cc788a302f.jpg" width="500" height="339" alt="Mollom kills spam" /></a>
</div>
<p>Thanks guys, you rock!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itkovian.net/base/spam-begone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
