Clojure roundup

January 10, 2009

In the last few weeks, there’s been a fair amount of Clojure news and activity here in our study group. Here are some links to things we’ve been watching.

  • A new language release. On December 17th, Rich “cut a new release” of the language. This should bring the offical release up to date enough for most people, although you’re still advised to check out the latest from Subversion, especially a few months go by without another official release
  • Streams vs. sequences. A lively discussion about the right implementation(s) of laziness and the role of caching in Clojure’s sequences. There is a move afoot to add true streams to Clojure, although the ramifications of such an addition are uncertain.
  • Compojure. Yes, Clojure has its own web framework now, and it looks pretty smart. Its syntax is inspired by Ruby’s Sinatra, it interfaces with Jetty, and it lets you write HTML in a vector-tree fashion that looks odd but probably saves the experienced user lots of keystrokes. Eric Levigne has written some posts about using Compojure to run a website.
  • Paul’s article on bean and Java interop. A nice tip on making it easier (and more Clojure-ish) to work with Java libraries.
  • Luke’s Markov chain generator and Michael’s post about it. Luke wrote a cool program that generates an output text from the pieces of an input text and uses pattern analysis and probability to mimic the style of the input text. Your humble blogger responded with a post examining the workings of the program and suggesting ways to build on it. This could become a group project.

That isn’t everything that happened in Clojure lately, not by a long shot, so feel free to comment to ad your own observations. Also, consider joining our study group list (link in the column to the right) to contribute. You don’t have to be in DC or come to meetings–we’d love to hear from you.


Emacs, Slime, and Clojure update

January 5, 2009

Some of you have noticed that when combined, the latest versions of the set of tools for editing Clojure in Emacs aren’t playing well together. Life on the bleeding edge means occasional paper cuts. I don’t yet understand exactly how Emacs, SLIME, and swank are working together, but I have been able to follow some advice online to fix the troubles I was having.

When starting SLIME in Emacs, everything seemed to work–Emacs and SLIME appeared to be communicating over local ports–but then an error message popped up:

error in process filter: Symbol's function definition is void: slime-redirect-inferior-output

I use Bill Clementson’s emacs setup, which he described on his blog. It turns out Clementson was already aware of the problem, which he describes in a thread on the Clojure mailing list. In a nutshell, swank-clojure has been updated and is a bit out of whack with the other edting tools. A patch has been applied, and if you checkout the latest tools, you’ll now get the patched version. You must then make a minor change to your .emacs file (Preferences.el for me and my Aquamacs setup):

From:

(eval-after-load "slime"
'(progn
(slime-setup)
...

to:

(eval-after-load "slime"
'(progn
(slime-setup '(slime-repl))

And then restart emacs. Works like a charm now. Thank you, Clojure community!


How to keep your Clojure environment current

December 11, 2008

The Sourceforge page for Clojure currently lists the September 16, 2008 version as the latest release for download. Unfortunately, a lot has changed in Clojure since then. For example, the syntax for java interop has changed so that a lot of older Clojure code won’t work anymore, and if you’re running the September 16 version, newer code won’t work either: this includes examples from the latest release of Stu Halloway’s Programming Clojure.

Everyone is downloading the source via subversion and building their JARs. This is the de facto latest release. I would advise you to do the same. Here are a few ways to make sure your Clojure is up to date (Thanks to Philip Fominykh, Keith Bennett, and Craig Andera for the help.)

The most straightforward way is installing directly from source (wikibooks).

A more comprehensive solution is offered by Bill Clementson: an organized directory setup with build commands and Emacs/SLIME support. (Aquamacs users, add his ~/.emacs code to your Preferences.el file.)


Code walkthrough in Hickey presentation

December 6, 2008

**Update 12/11/2008: In the original post, I claimed the code from Hickey’s presentation needed to be updated to the latest version of Clojure. Wrong. The code wasn’t running for me because I didn’t have the de facto latest version, which is built from subversion. I’ve edited the post to reflect this. **

Hickey’s presentation to the Western Massachusettes Developers Group is primarily about Concurrency. The first half covers similar topics to his other presentations (including the For Lispers presentation). But about halfway through the talk, at 1:16:00, he begins a walkthrough of a program he wrote simulating an ant colony. I really recommend following this. It’s helped me a lot.

So go view the video:

Get the code for the simulation too, from the link on the Blip page. As of this posting, you’ll need to build clojure from subversion to make the code work. If you’re using the latest official release, from September 16, you’ll need to use a copy of the code I made: http://groups.google.com/group/clojure-study-dc/web/ants.clj.

The key difference is in the java interop syntax. The latest version of clojure uses a dot before a method call in many circumstances, whereas the official release does not. In other words:

(doto g
    (.setColor c) ;; current syntax, with dot
    ...

vs.

(doto g
    (setColor c) ;; official release syntax, no dot.
    ...

If you run current Clojure code using the official release, you’ll see a lot of errors like these:

java.lang.IllegalArgumentException: No matching method found: 
  .setPreferredSize for class clojure.lang.Proxy__2845

The walkthrough takes about an hour. Give it a try.


Clojure Roundup: Post-Thanksgiving vacation edition

December 1, 2008

I will try to post Clojure roundups as often as I can… best laid plans of mice and men and all that.

Over at Lambda the Ultimate there is a brief discussion about the recent inclusion of trampolining for mutual recursion added to recent Clojure builds.

Rich Hickey’s presentation at the 2008 JVM Languages Sumit is a must watch.

Bill Clementson gives a nice overview of getting on-demand Java documentation rolled into EMACS Slime mode for Clojure.  More recently, Mr. Clementson posed that Clojure is the language for concurrency-oriented programming.

Our own Craig Andera does some insanity with C# and Clojure.

Clojure recently incorporated a new regex syntax.

That’s all for now.  Add anything that I missed to the comments section.

-m


More resources for Clojure: Rich Hickey videos

November 30, 2008

I’m posting a link to videos of presentations on Clojure by its creator, Rich Hickey: http://clojure.blip.tv/#1319826

Most of these are Hickey’s slides over audio of Hickey and the audience, although at least one gives you a look at the man himself. Videos are 60-90 minutes, and some presentations span two videos (!) So far, all the ones I’ve seen are good quality.

Topics covered include Clojure for Lispers, Clojure for Java Programmers, Clojure data strutures, and concurrency in Clojure.