The ClojureWerkz Blog

News and updates about ClojureWerkz projects

Elastisch 2.0.0-beta1 Is Released

TL;DR

Elastisch is a battle tested, small but feature rich and well documented Clojure client for ElasticSearch. It supports virtually every Elastic Search feature and has solid documentation.

2.0.0-beta1 is a preview release of Elastisch 2.0, which focuses on ElasticSearch 1.0 compatibility.

Changes between Elastisch 1.4.0 and 2.0.0

ElasticSearch 1.0 Compatibility

Main goal of Elastisch 2.0 is ElasticSearch 2.0 compatibility. This includes minor API changes (in line with ElasticSearch 1.0 API and terminology changes) and moderate internal modifications.

Support for cluster nodes stats and info REST APIs

clojureworkz.elastisch.rest.admin/nodes-info and clojureworkz.elastisch.rest.admin/nodes-stats are new administrative functions that provide access to ElasticSearch cluster stats and node info.

Examples:

1
2
3
4
5
6
7
8
9
(require '[clojurewerkz.elastisch.rest.admin :as admin])

(admin/nodes-stats)
(admin/nodes-stats :nodes "_all")
(admin/nodes-stats :nodes ["node1" "node2"] ["indices" "os" "plugins"])

(admin/nodes-info)
(admin/nodes-info :nodes "_all")
(admin/nodes-info :nodes ["node1" "node2"] ["indices" "os" "plugins"])

See ElasticSearch nodes stats documentation, nodes info page, and node specification page for more info.

Contributed by Joachim De Beule.

Support for _cluster/state REST API

Added (clojureworkz.elastisch.rest.admin/cluster-state & {:as params})

Examples:

1
2
3
4
(require '[clojurewerkz.elastisch.rest.admin :as admin])

(admin/cluster-state)
(admin/cluster-state :filter_nodes true)

See ElasticSearch documentation for more info.

Contributed by Joachim De Beule.

Support for _cluster/health REST API

Added (clojureworkz.elastisch.rest.admin/cluster-health & {:as params})

Example:

1
2
3
4
5
6
(require '[clojurewerkz.elastisch.rest.admin :as admin])

(admin/cluster-health)
(admin/cluster-health :index "index1")
(admin/cluster-health :index ["index1","index2"])
(admin/cluster-health :index "index1" :pretty true :level "indices")

See ElasticSearch documentation for more info.

Contributed by Joachim De Beule.

Support for analyze in REST API client

Added (doc/analyze text & {:as params})

See ElasticSearch documentation for more info.

Examples:

1
2
3
4
5
6
7
(require '[clojurewerkz.elastisch.rest.document :as doc])

(doc/analyze "foo bar baz")
(doc/analyze "foo bar baz" :index "some-index-name")
(doc/analyze "foo bar baz" :analyzer "whitespace")
(doc/analyze "foo bar baz" :tokenizer "keyword" :filters "lowercase")
(doc/analyze "foo bar baz" :index "some-index-name" :field "some-field-name")

Contributed by Joachim De Beule

Query String Escaping

clojurewerkz.elastisch.query/query-string accepts a new option, :escape-with, which is a function that performs escaping of special characters in query string queries.

By default clojurewerkz.elastisch.escape/escape-query-string-characters is used.

Contributed by Ben Reinhart (Groupon).

ElasticSearch Native Client Upgrade

Elastisch now depends on ElasticSearch native client version 1.0.1.

clj-http Update

clj-http dependency has been upgraded to version 0.9.0.

Full Change Log

Elastisch change log is available on GitHub.

Thank You, Contributors

Kudos to Richie Vos for contributing to this release.

Elastisch is a ClojureWerkz Project

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

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

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

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

About the Author

Michael on behalf of the ClojureWerkz Team

Langohr 2.5.0 Is Released

TL;DR

Langohr is a small Clojure RabbitMQ client.

2.5.0 is a minor feature release that also deprecates several functions.

Changes between Langohr 2.3.x and 2.5.0

langohr.http/declare-user Renamed

langohr.http/declare-user was renamed to langohr.http/set-user.

langohr.http/declare-policy Renamed

langohr.http/declare-policy was renamed to langohr.http/set-policy.

langohr.http/declare-permissions Renamed

langohr.http/declare-permissions was renamed to langohr.http/set-permissions.

langohr.http/declare-user Renamed

langohr.http/declare-user was renamed to langohr.http/add-user.

langohr.http/vhost-exists?

langohr.http/vhost-exists? is a new function that returns true if provided vhost exists:

1
2
3
(require '[langohr.http :as hc])

(hc/vhost-exists? "killer-app-dev")

langohr.http/user-exists?

langohr.http/user-exists? is a new function that returns true if provided user exists:

1
2
3
(require '[langohr.http :as hc])

(hc/user-exists? "monitoring")

RabbitMQ Java Client Upgrade

RabbitMQ Java client dependency has been updated to 3.2.4.

clj-http Upgrade

clj-http dependency has been updated to 0.7.9.

Topology Recovery Default

:automatically-recover-topology default is now true, as listed in documentation.

Contributed by Ilya Ivanov.

Deprecations

langohr.core/automatically-recover? is deprecated

Use langohr.core/automatic-recovery-enabled? instead.

Change Log

Langohr change log is available on GitHub.

Langohr is a ClojureWerkz Project

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

  • Elastisch, a minimalistic well documented Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL 3.0
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

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

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

About The Author

Michael on behalf of the ClojureWerkz Team

Meltdown 1.0.0-beta5 Is Released

TL;DR

Meltdown is a Clojure interface to Reactor, an asynchronous programming, event passing and stream processing toolkit for the JVM.

1.0.0-beta5 is a development milestone release that updates Reactor to 1.1.0.M1 and includes a few bug fixes and minor API refinements.

Changes between 1.0.0-beta4 and 1.0.0-beta5

Environment Reuse

Previously Meltdown instantiated a new Environment per clojurewerkz.meltdown.reactor/create invocation without a provided environment. This lead to excessive thread creation which could eventually exhaust system resources.

Meltdown 1.0.0-beta5 will reuse the same environment for all created reactors unless its asked to use a specific Environment instance.

Environment Functions

clojurewerkz.meltdown.env/environment is a function that returns a shared environment. To create a completely new environment from scratch, use clojurewerkz.meltdown.env/create.

clojurewerkz.meltdown.env/shutdown shuts down environments and all associated dispatchers.

clojurewerkz.meltdown.fn/->filter

clojurewerkz.meltdown.fn/->filter is a new function that reifies Reactor filters from Clojure functions.

Changes between 1.0.0-beta3 and 1.0.0-beta4

Moved Functions

clojurewerkz.meltdown.streams/fn->function and clojurewerkz.meltdown.streams/fn->predicate are removed, use clojurewerkz.meltdown.fn/->function and clojurewerkz.meltdown.fn/->predicate instead.

Streams Flushing

Stream operations are now lazier in Reactor. To enforce stream sources to be drained, use clojurewerkz.meltdown.streams/flush which accepts a stream or deferred.

Reactor Update

Reactor is updated to 1.1.0.M1 which has multiple breaking API changes.

Change log

Meltodwn change log is available on GitHub.

Meltdown is a ClojureWerkz Project

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

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a Clojure client for ElasticSearch
  • Monger, a Clojure MongoDB client for a more civilized age
  • Cassaforte, a Clojure Cassandra client
  • Titanium, a Clojure graph library
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

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

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

About the Author

Michael on behalf of the ClojureWerkz Team

Route One 1.1.0 Is Released

Route One is a Clojure DSL for URL/URI/path generation from a route map, compatible with Compojure’s Clout.

Changes Between 1.0.0 and 1.1.0

Extra Keys as Query Parameters

Generate and append query from data keys that don’t appear as path segments.

Contributed by Ray Miller.

Back-reference Escaping

When replacing path segments, use re-quote-replacement to escape any back-references in the replacement string.

Contributed by Ray Miller.

Change log

Route One change log is available on GitHub.

Route One is a ClojureWerkz Project

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

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

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

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

About The Author

Michael on behalf of the ClojureWerkz Team

Pantomime 2.1.0 Is Released

TL;DR

Pantomime is a tiny Clojure library for working with MIME types and file metadata.

Changes between Pantomime 2.0.0 and 2.1.0

Apache Tika 1.5

Apache Tika dependency has been upgraded to version 1.5.

Change Log

We recommend all users to upgrade to 2.1.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

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL
  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • 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

Mailer 1.0.0 Is Released

TL;DR

ClojureWerkz Mailer is an ActionMailer-inspired mailer library for Clojure. It combines Postal, Clostache and a number of its own features and conventions to make delivering complex template-based emails as painless as possible.

Why Use Mailer

All the building blocks to make email rendering and delivery easy in Clojure have been in place for a while, Mailer simply combines them and brings in some time tested ideas from Action Mailer.

What’s In The Box

Mailer lets you:

  • Send email using pluggable transports
  • Use Moustache templates for email
  • Generate HTML and/or plain text email
  • Deliver mail over SMTP or Sendmail
  • Test rendered emails easily

Documentation

Mailer is a small library and all of its documentation guide fits in the README.

Project Maturity

Mailer is a moderately mature project, the API hasn’t changed in over a year.

Supported Clojure Versions

Mailer supports Clojure 1.4+.

News and Updates

New releases and updates are announced on Twitter.

Mailer is a ClojureWerkz Project

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

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Cassaforte, a Clojure client for Cassandra built around CQL
  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a Clojure client for the Neo4J REST API

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

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

About the Author

Michael on behalf of the ClojureWerkz Team.

Scrypt 1.1.0 Is Released

TL;DR

ClojureWerkz Scrypt is a tiny Clojure library for working with scrypt, a key derivation function. Scrypt can be used to hash passwords and generate cryptographic keys. It is an alternative to Bcrypt and PBKDF2.

Version 1.1.0 makes it possible to use a native scrypt implementation.

Changes Between 1.0.0 and 1.1.0

Lambdaworks Scrypt Upgrade

Lambdaworks Scrypt is updated to 1.4.0, which makes it possible to use a native implementation of the library.

To quote the docs:

1
2
3
4
5
6
The system property "com.lambdaworks.jni.loader" may be set to override
the default native library loader with one of the following values:

 * nil: refuse to load native libraries and revert to pure Java implementation
 * jar: extract native library from jar and load with System.load
 * sys: use System.loadLibrary, which may require java.library.path to be set

Clojure 1.3 Support Dropped

Scrypt no longer officially supports Clojure 1.3.

Scrypt is a ClojureWerkz Project

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

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a Clojure client for the Neo4J REST API
  • Cassaforte, a Clojure client for Cassandra built around CQL

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

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

About the Author

Michael on behalf of the ClojureWerkz Team.

Langohr 2.3.2 Is Released

TL;DR

Langohr is a small Clojure RabbitMQ client.

2.3.2 is a minor feature and bug fix release based on community feedback on connection recovery.

Changes between Langohr 2.2.1 and 2.3.2

Deprecations

langohr.core/automatically-recover? is deprecated

Use langohr.core/automatic-recovery-enabled? instead.

Recovery Predicates

langohr.core/automatic-recovery-enabled? and langohr.core/automatic-topology-recovery-enabled? are new predicate functions that return true if automatic connection and topology recovery, respectively, is enabled for the provided connection.

Topology Recovery Fails Quickly

Topology recovery now fails quickly, raising com.novemberain.langohr.recovery.TopologyRecoveryException which carries the original (cause) exception.

Previously if recovery of an entity failed, other entities were still recovered. Now topology recovery fails on the first exception, making issues more visible.

Automatic Recovery Can Be Disabled By Passing nil

Automatic recovery options now respect both false and nil values.

Change Log

Langohr change log is available on GitHub.

Langohr is a ClojureWerkz Project

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

  • Elastisch, a minimalistic well documented Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL 3.0
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

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

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

About The Author

Michael on behalf of the ClojureWerkz Team

Langohr 2.2.1 Is Released

TL;DR

Langohr is a small Clojure RabbitMQ client.

2.2.1 is a bug fix release.

Changes between Langohr 2.2.0 and 2.2.1

Automatic Topology Recovery Doesn’t Kick In When Disabled

Automatic topology recovery no longer kicks in when it is disabled.

Change Log

Langohr change log is available on GitHub.

Langohr is a ClojureWerkz Project

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

  • Elastisch, a minimalistic well documented Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL 3.0
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

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

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

About The Author

Michael on behalf of the ClojureWerkz Team

Elastisch 1.4.0 Is Released

TL;DR

Elastisch is a battle tested, small but feature rich and well documented Clojure client for ElasticSearch. It supports virtually every Elastic Search feature and has solid documentation.

1.4.0 is a minor feature and usability release. We recommend all users to upgrade to it.

Changes between Elastisch 1.3.0 and 1.4.0

Native Document Supports Optimistic Locking

The native document API now supports the same :version option for optimistic locking that the REST api does.

Contributed by Richie Vos (Groupon).

GH issues: #56.

ElasticSearch Exceptions

Elastisch now uses ElasticSearch exceptions instead of generic ones in the native client.

Contributed by Richie Vos (Groupon).

GH issues: #54, #57.

ElasticSearch Native Client Upgrade

Elastisch now depends on ElasticSearch native client version 0.90.8.

clojurewerkz.elastisch.native.document/update-with-script Fix

clojurewerkz.elastisch.native.document/update-with-script invoked without script parameters no longer raises an exception.

Cheshire Upgrade

Cheshire dependency has been updated to 5.3.1.

Elastisch change log is available on GitHub.

Thank You, Contributors

Kudos to Richie Vos for contributing to this release.

Elastisch is a ClojureWerkz Project

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

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

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

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

About the Author

Michael on behalf of the ClojureWerkz Team