Hello! My name is Michel. I'm a researcher, software developer, musician, and photographer living in Darmstadt, Germany. More ...

Michel Krämer

Spamihilator 1.6 has been released!

I just released the new version 1.6 of my free spam filter Spamihilator! This version is a maintenance release. It fixes some minor bugs and improves security. Installation is recommended to all users.

Please download Spamihilator from the following website: http://www.spamihilator.com/en/download

Here’s a complete list of changes:

  • Improved compatibility with mail accounts from Arcor
  • Improved compatibility with 64-bit operating systems
  • Disabled insecure SSLv2 method. SSLv3 and TLS are still available.
  • Prevent SSLv3 POODLE attack
  • Fixed some minor bugs that could cause Spamihilator to crash in certain cases

gradle-download-task 1.2

The new version of the Gradle plugin gradle-download-task 1.2 has just been released. The plugin provides a Download task that displays progress information while downloading files, just like Gradle does when it fetches an artifact from a repository.

The new version is now also available from the Gradle plugin portal. This allows users of Gradle 2.1 or higher to include gradle-download-task via the new plugin mechanism:

plugins {
    id "de.undercouch.download" version "1.2"

Users of Gradle 2.0 or 1.x have to add the following to their build file:

buildscript {
    repositories {
    dependencies {
        classpath 'de.undercouch:gradle-download-task:1.2'

apply plugin: 'de.undercouch.download'

The plugin’s new version is now also compatible with all stable versions of Gradle. It has been tested with Gradle 1.0 up to 2.2.1 but should be compatible to any other version as well.

Grab gradle-download-task 1.2 while it’s still hot:

More information

If you want to learn more about the plugin have a look at its README file or at my previous post.

bson4jackson 2.4 has just been released!

Version 2.4 of bson4jackson has just been released. bson4jackson adds support for BSON, a binary representation of JSON, to the Jackson JSON processor.

The latest release of bson4jackson now supports Jackson 2.4. Apart from that, the following things have been changed:

  • Added support for Jackson 2.4
  • Allow BigDecimal to be serialized as String in order to avoid losing precision
  • Added deserializers for Date and Calendar to the BsonModule
  • Byte arrays are now correctly deserialized
  • Added integration tests to ensure compatibility with multiple Jackson versions

Grab the new version while it’s still hot:

Projects using bson4jackson

bson4jackson is used in several other Open Source projects including the following one:

  • Immutables is an annotation processor that is able to generate immutable objects which help tackle complexity and concurrency. The library also includes serializers for immutable objects based on Jackson and bson4jackson.


  • Jongo is a rather cool library that allows MongoDB to be queried in Java just like you would query it in the MongoDB shell. Jongo uses bson4jackson to serialize objects before they are sent to the database, and of course to deserialize queried documents.


  • MongoJack is a POJO mapper that uses Jackson and bson4jackson to serialize and deserialize objects before they are sent to the database. MongoJack is extremely fast and very easy to handle.


I know that there are a lot of other projects out there that use bson4jackson. If you want your project to be added to this list please leave a comment below or send me a message.

More information

For a complete description of bson4jackson (including how to download it) have a look at my tutorial.

gradle-download-task: download files with progress

I really like how Gradle displays progress while it’s fetching artifacts from Maven repositories, but I was always wondering why you cannot use the same functionality when you’re downloading arbitrary files in your build script. You can of course use Ant’s download task to fetch files, but it does not display progress information. Since I couldn’t find a solution on the Internet I decided to write a plugin.

gradle-download-task has initially been released in September 2013 and is now available in version 1.0. The plugin contributes a download task that shows progress information just like Gradle does when it fetches artifacts from a repository.

You can use it like this:

task downloadFile(type: Download) {
    src 'http://www.example.com/index.html'
    dest buildDir

The output will look like this:

Download http://www.example.com/index.html
> Building > :downloadFile > 320 KB/6,78 MB downloaded

In order to use the plugin you have to add the following lines to your build file:

buildscript {
    repositories {
    dependencies {
        classpath 'de.undercouch:gradle-download-task:1.0'

import de.undercouch.gradle.tasks.download.Download

You can also use the download extension to retrieve a file anywhere in your build script:

apply plugin: 'download-task'

task myTask << {
    //do something ...
    //... then download a file
    download {
        src 'http://www.example.com/index.html'
        dest buildDir
    //... do something else

With version 1.0 you can now also sequentially download a list of files to a directory. Please note that you have to specify a directory as destination if you download multiple files. Otherwise the plugin will fail.

task downloadMultipleFiles(type: Download) {
    dest buildDir

Many thanks go to Bright Fulton who contributed support for custom HTTP request headers. You can use this new feature as follows:

task downloadWithCustomHeader(type: Download) {
    src 'http://download.oracle.com/otn-pub/java/jdk/8-b132/jre-8-windows-x64.exe'
    dest buildDir
    header 'Cookie', 'oraclelicense=accept-securebackup-cookie'

The plugin supports a wide range of other options. Please read the README file for more information.

Happy downloading!

Command line tool for citations and bibliographies

I was working very hard on the new version of citeproc-java lately and I’m glad to announce that it has just been released. The highlights in version 0.6 are:

  • The binary distribution of citeproc-java contains a command line tool that can be used to generate citations and bibliographies without setting up a complete development environment. Just download and extract the zip file and then run citeproc-java -b references.bib -s ieee to create a bibliography in ieee style for your BibTeX input file. This feature makes the library very useful even for non-programmers.
  • The new Mendeley connector allows you to use documents stored in Mendeley Web as input for citations and bibliographies. Of course this feature also works on the command line.
  • The library has been tested with the CSL test suite. All 750+ tests run successfully! I put a lot of work into this to bring citeproc-java on par with other CSL processors.
  • Performance has been improved a lot.

I particularly like the new command line tool that can be used to generate citations and bibliographies from various sources such as BibTeX files or your Mendeley Web catalog. I expect the tool to be quite useful for the following users:

  • Authors who want a quick way to preview citations or bibliographies in various styles
  • Citation Style Language style authors who want to test their style files very quickly

In order to use the tool you just have to download citeproc-java and extract the ZIP file. Then you can run the following command to convert a BibTeX file to a bibliography using the ieee style, for example:

citeproc-java -b references.bib

If you want to generate a bibliography that only contains items with certain citation IDs (for example Fowler_2010 and Kisker_2012) use the following command:

citeproc-java -b references.bib Fowler_2010 Kisker_2012

The tool will even notify you if you misspelled a citation ID:

citeproc-java: unknown citation id: Fwler_2010
Did you mean `Fowler_2010'?

If you want to connect to your Mendeley Web account, use the following command:

citeproc-java --mendeley Fowler_2010 Kisker_2012

The tool has a lot more to offer. For more information run citeproc-java --help or read the library’s documentataion.