The ClojureWerkz Blog

News and updates about ClojureWerkz projects

Pantomime 1.5.0 Is Released

TL;DR

Pantomime is a tiny Clojure library that deals with MIME types (Internet media types, “content types”). Pantomime 1.5 upgrades Apache Tika to 1.3 and default Clojure dependency to 1.4.0.

Changes between Pantomime 1.4.0 and 1.5.0

Apache Tika 1.3

Apache Tika dependency has been upgraded to version 1.3.

Clojure 1.4 By Default

Pantomime now depends on org.clojure/clojure version 1.4.0. It is still compatible with Clojure 1.3 and if your project.clj depends on 1.3, it will be used, but 1.4 is the default now.

We encourage all users to upgrade to 1.4, it is a drop-in replacement for the majority of projects out there.

Change Log

We recommend all users to upgrade to 1.5.0.

Pantomime change log is available on GitHub.

Pantomime is a ClojureWerkz Project

Pantomime is part of the group of libraries known as ClojureWerkz, together with

  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Neocons, a client for the Neo4J REST API
  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Quartzite, a powerful scheduling library

and several others. If you like Pantomime, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

Michael on behalf of the ClojureWerkz Team

Clojure 1.5 Compatibility of Major ClojureWerkz Projects

TL;DR

Clojure 1.5 is around the corner. ClojureWerkz projects are compatible with it. It’s probably sunny outside, too.

Feel free to upgrade today!

Clojure 1.5 and ClojureWerkz

Clojure 1.5 is around the corner. While not a groundbreaking release, 1.5 brings more new features than 1.4 did. So, it’s natural to expect that many developers will consider upgrading to it soon.

One of the main goals of ClojureWerkz has always been making sure our libraries work with multiple Clojure versions (currently 1.3+). To hold to the promise, we run CI against multiple Clojure versions on travis-ci.org. One of the versions is the master Clojure snapshot.

After the 1.5.0-RC1 release, we started testing several of our projects against it:

We are happy to report that none of those projects required any modifications to pass their test suites on Clojure 1.5.0-RC1.

Michael on behalf of the ClojureWerkz Team.

Monger 1.4.2 Is Released

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation at http://clojuremongodb.info.

1.4.2 is a minor 100% backwards-compatible release that includes one bug fix.

Changes between 1.4.1 and 1.4.2

Explicit DBCursor Closure by monger.collection/find-maps and the like

monger.collection/find-maps and the like will now explicitly close DB cursors.

GH issue: #47

Changes between 1.4.0 and 1.4.1

MongoDB Java Driver Update

MongoDB Java driver dependency has been updated to 2.10.1.

Change Log

We recommend all users to upgrade to 1.4.2 as soon as possible. Monger change log is available on GitHub.

Michael on behalf of the ClojureWerkz Team.

The ClojureWerkz Project in 2012

TL;DR

2012 was the year when most widely used ClojureWerkz libraries really matured and got traction.

2012 Retrospective

First line of code for a ClojureWerkz library was written on July 31st, 2011. Back then, we had no idea there will be over a dozen more libraries to follow. Through 2012, a number of our projects have seen their 1.0 releases (and then some), documentation guides for them (mostly) finished and plenty of feedback and improvements contributed by the community.

Monger

Monger is our excellent Clojure driver for MongoDB.

On June 26th, 2012, after 11 months in the making, Monger 1.0 was released. 1.1 followed the next month and by late November, Monger is at 1.4, waiting for new MongoDB features to be shipped so that we can support them.

Monger has become stable, efficient, feature complete, easy to use and well documented, thanks to a lot of feedback in 2012. Some users go as far as saying

This is easily the best DB library I’ve used in any language. Thanks!

Now, this may be a very generous compliment but we feel that Monger is a mature library and an example to follow for other ClojureWerkz libraries and open source projects in general.

Neocons

Neocons is a Clojure client for Neo4J REST API.

Neocons 1.0 was released on July 15th, 2012, after about 9 months in the works. Judging from our users’ feedback, Neocons is the library that sparkles most passionate comments. From a Neocons user:

Your clojurewerkz stuff in general is really improving my Clojure experience, which is rapidly becoming my language of choice

Good stuff!

Welle

Welle is an expressive Clojure client for Riak with batteries included. Welle was first major ClojureWerkz library to reach the 1.0 mark in May 2012. Personally, Welle is my favorite ClojureWerkz library: there is next to nothing you can remove from it and not that can be added as well. Of course, there are new Riak releases ahead and Welle will be sure to support them in the future!

Elastisch

Elastisch is a minimalistic Clojure client for ElasticSearch.

1.0 since September 2012, Elastisch documentation is something we still cannot believe we could pull off. There is enough content for a little book on ElasticSearch, and we are far from being completely happy with it!

A couple of quotes from Elastisch users:

Elastisch is beyond awesome

Speaking of, Elastisch (and its docs) = changed my life. Kudos.

Just another proof how much betthe user experience can be if you put aside all excuses and document your open source project really well.

Langohr

Langohr is a Clojure RabbitMQ client that embraces AMQP 0.9.1 Model.

Although Langohr is the oldest ClojureWerkz project, it hasn’t reached 1.0 yet. It has, however, gone through a number of breaking changes after real world feedback and is shaping up nicely, including the docs.

We are finishing adding RabbitMQ HTTP API support to it in the near future.

Thank You, Contributors

Nearly all of our projects have contributions from the broader Clojure community. From full-blown features to documentation improvements to bug fixes to benchmark results to ideas that turn into improvements. Thank you very much, there is no way Michael and Alex could do all this work on their own.

Here’s To 2013

What should you expect from ClojureWerkz in 2013? More of what our values are: feature complete, well documented, well maintained Clojure libraries compatible with multiple Clojure versions (1.3+). Clojure 1.5 compatibility is already ready, waiting to be shipped when Clojure 1.5 final ships.

But there’s more. After seeing a lot of positive feedback on the Clojure Documentation Site, in which Michael is actively taking part, we decided that there’s a bigger fish for us to catch. Developing libraries is important but empowering more people to develop better libraries is going to help the Clojure ecosystem a lot more. This is why you can expect more CDS and documentation efforts from us in the future. For example, our projects use many Clojure features that can be demonstrated better when put into a context: a series of blog posts about them is one example of how we can help improve Clojure documentation.

Something else we have a lot to share about is library development and maintenance. With about 20 libraries, all compatible with 3 Clojure versions, under our belt, we believe we know a thing or two about how to (and how not to) maintain an open source project.

If any of this sounds exciting, follow ClojureWerkz updates, Michael and Alex on Twitter.

Happy New Year!

Monger 1.4.0 Is Released

TL;DR

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation.

1.4.0 is a minor almost (but not completely) backwards-compatible release that upgrades MongoDB Java driver and Cheshire and adapts to their public API changes.

Changes in 1.4.0

MongoDB Java Driver Update

MongoDB Java driver dependency has been updated to 2.10.0. If your code depends on the exact class com.mongodb.Mongo, it should be updated to use com.mongodb.MongoClient (or not depend on specific class names at all).

In addition, MongoOptions and MongoURI in the new driver have changed to MongoClientOptions and MongoClientURI, respectively.

Cheshire 0.5.0

monger.json and monger.joda-time will use Cheshire if it is available and now requires Cheshire version 5.0. clojure.data.json is no longer a hard dependency (but 0.1.x versions are still supported if available).

Recently released clojure.data.json version 0.2.0 is now supported. We strongly recommend all users to use Cheshire when possible.

Cheshire 5.0 change log is available on GitHub.

ClojureWerkz Support 0.9.0

ClojureWerkz Support library is upgraded to 0.9.

Change Log

We recommend all users to upgrade to 1.4.0 as soon as possible.

Monger change log is available on GitHub.

Monger is a ClojureWerkz Project

Monger is part of the group of libraries known as ClojureWerkz, together with

  • Welle, a Riak client with batteries included
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Neocons, a client for the Neo4J REST API
  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Quartzite, a powerful scheduling library

and several others. If you like Monger, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

@michaelklishin on behalf of the ClojureWerkz Team

Clojure Documentation Project Progress Report: The Week of November 11th

TL;DR

This week the Clojure documentation project added two new materials and a bunch of minor edits all over the place. The new additions are

Clojure Documentation Progress Report

The Clojure Documentation Site (a.k.a. CDS) publishes periodic reports (every week so far, possibly two weeks in the future) to give the Clojure community a better idea of what CDS shapes up to be and what it has to offer.

This is a report for the week ending November 11th, 2012.

New Content

New tuturials added this week:

New guides added this week:

Updates

Existing tutorials updated this week:

Existing guides updated this week:

Most of of other edits here are not listed above because they are purely grammar and spelling fixes.

Thank You, Contributors

CDS would not be possible without the following people who make the Clojure community a better place:

  • Alex Petrov
  • Gareth Jones
  • Glen Stampoultzis
  • John Gabriele
  • Lee Hinman
  • Leonel Gayard
  • Michael Klishin
  • Swaroop C H
  • Wes Freeman

You Can Help!

How It Works

We have a repository on GitHub that has Markdown files with content and toolchain setup instructions. Just pick something that you are very familiar with or interested in and write.

When you are done, submit a pull request on GitHub and someone from the existing contributors team will suggest improvements or merge your work. It is that easy.

In order to make it easier for potential contributors to join the project, we will post a brief list of guides that do not require deep expertise and can benefit from contributions by complete beginners.

Existing Guides

Guides that have structure and good chunk of the content in place but still have holes you can help us plug:

New Content

If you want to start working on one of those articles or have existing content you’ve authored that can be ported, please let us know on the Clojure mailing list.

Excited about making Clojure documentation better? We need your help!

Michael Klishin on behalf of the Clojure Documentation Team.

Monger 1.3.4 Is Released

TL;DR

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation.

1.3.4 is a minor 100% backwards-compatible release that eliminates more data.json dependencies in monger.json. We recommend all users to upgrade to it as soon as possible.

Changes between 1.3.3 and 1.3.4

data.json Dependency Fixes

monger.json no longer requires data.json to be present at compile time.

Change Log

We recommend all users to upgrade to 1.3.4 as soon as possible.

Monger change log is available on GitHub.

Monger is a ClojureWerkz Project

Monger is part of the group of libraries known as ClojureWerkz, together with

  • Welle, a Riak client with batteries included
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Neocons, a client for the Neo4J REST API
  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Quartzite, a powerful scheduling library

and several others. If you like Monger, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

@michaelklishin on behalf of the ClojureWerkz Team

Carmine, Timbre, Tower, and Nippy Go 1.0

TL;DR

A bunch of awesome libraries from our friend Peter Taoussanis went 1.0 recently. You should check them out on GitHub.

1.0 Releases Galore

We at ClojureWerkz have been fans of Peter Taoussanis for a while. So much so, some of his libraries are listed on our home page, even though they are not projects we maintain. Recently 4 of them went 1.0 and we would like to cover them briefly.

Carmine 1.0

Carmine is an awesome Clojure client for Redis. And we don’t call libraries awesome for no reason: it supports nearly all Redis 2.6+ features, well maintained, supports multiple Clojure versions, has a very good performance baseline.

Carmine documentation is much better than the average open source project and written with beginners in mind.

Carmine is not a young project: Peter has been working on it for a while. Version after version, month after month, the library has gotten to the point when it really can be labelled 1.0.

The project is licensed under the Eclipse Public License and tested against 3 Clojure versions + 3 JDKs.

If you are looking for a Clojure Redis client, look no further than Carmine.

Tower 1.0

Tower is an internationalization (i18n) library for Clojure. Tower wraps JDK localization features where appropriate, adds map-based translation dictionary format, supports REPL-friendly dictionary reloading, Markdown support and Ring middleware.

The project is licensed under the Eclipse Public License and tested against 3 Clojure versions + 3 JDKs.

Usage examples can be found in the README.

Timbre 1.0

Timbre is a pure Clojure, no-XML and no-bullshit logging library. If you never found existing JVM logging tools and tools.logging appealing or easy to use, try Timbre. Timbre appenders are Clojure functions, the library is extensible, supports asynchronous logging and flood control.

Sounds like a sweet Clojure logging library to us!

Nippy 1.0

In Clojure, code is data and to support it, the reader (parser) is exposed to the language itself and can be extended. There is one downside, however: the built-in reader is not particularly efficient (it was built for compile time operation).

Nippy provides an alternative implementation of the Clojure reader that is much more efficient.

For Clojure-to-Clojure messaging, Nippy may be one of the most interesting serialization libraries available today.

Wrapping Up

Great work, Peter! Carmine, Tower, Timbre and Nippy are all examples of well maintained open source projects. Bonus points for covering practical areas (data stores, i18n, logging), attention to compatibility with multiple Clojure versions and newcomer-friendly documentation.

These are examples the Clojure community needs to follow.

Clojure Documentation Project Progress Report: The Week of November 4th, 2012

TL;DR

The Clojure documentation project continues to make progress. Highlight of the last week include materials on VimClojure by Dave Ray, the Clojure Maven plugin by Alex Ott, and Intro to Web development with Clojure from John Gabriele.

CDS Progress Report

The Clojure Documentation Site (a.k.a. CDS) publishes periodic reports (every week so far, possibly two weeks in the future) to give the Clojure community a better idea of what CDS shapes up to be and what it has to offer.

This is a report for the week ending November 4th, 2012.

New Content

New tuturials added this week:

New guides added this week:

Updates

Existing guides updated this week:

Thank You, Contributors

CDS would not be possible without the following people who make the Clojure community a better place:

  • Alex Ott
  • Dave Ray
  • John Gabriele
  • Michael S. Klishin
  • Robert Randolph
  • Wes Freeman

You Can Help!

How It Works

We have a repository on GitHub that has Markdown files, toolchain setup instructions and several articles as well as stubs for several more articles. The stubs help contributors pick a topic to write about and not worry too much about article structure initially. Just pick something that you are very familiar with or interested in and write.

When you are done, submit a pull request on GitHub and someone from the existing contributors team will suggest improvements or merge your work. Pretty straightforward.

In order to make it easier for potential contributors to join the project, we will post a brief list of guides that do not require deep expertise and can benefit from contributions by complete beginners.

Existing Guides

Guides that have structure and good chunk of the content in place but still have holes you can help us plug:

These guides are new and cover advanced topics, so we need as much proof-reading as we can get from the community:

New Content

If you want to start working on one of those articles or have existing content you’ve authored that can be ported, please let us know on the Clojure mailing list.

Summary

This week we’ve addressed probably the most common request for CDS: the VimClojure tutorial (thanks to Dave Ray). Another thing we are happy about is that we’ve added a few new contributors.

Want to help us make things better? We need your help!

Michael Klishin on behalf of the Clojure Documentation Team.

Monger 1.3.3 Is Released

TL;DR

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation.

1.3.3 is a minor 100% backwards-compatible release that includes an updated MongoDB Java driver dependency and data.json 0.2.x support. We recommend all users to upgrade to it as soon as possible.

Changes between 1.3.2 and 1.3.3

ClojureWerkz Support Upgrade

ClojureWerkz Support dependency has been updated to version 0.9.0. JSON serializer extensions (clojurewerkz.support.json, formerly monger.json) now support data.json 0.2.x.

1.3.1 and 1.3.2 release change logs are included below for completeness, since they also resolve issues around data.json API changes and MongoDB Java driver dependency updates.

Changes between 1.3.1 and 1.3.2

MongoDB Java Driver Update

MongoDB Java driver dependency has been updated to 2.9.3.

Changes between 1.3.0 and 1.3.1

ClojureWerkz Support Upgrade

ClojureWerkz Support dependency has been updated to version 0.8.0 and fixes an issue with data.json being extended from monger.json even when it is not available.

Change Log

We recommend all users to upgrade to 1.3.3 as soon as possible.

Monger change log is available on GitHub.

Monger is a ClojureWerkz Project

Monger is part of the group of libraries known as ClojureWerkz, together with

  • Welle, a Riak client with batteries included
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Neocons, a client for the Neo4J REST API
  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Quartzite, a powerful scheduling library

and several others. If you like Monger, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

@michaelklishin on behalf of the ClojureWerkz Team