Clojure

requireでハマりました

REPLを使ってて、打鍵数を減らすために (require 'hoge.fuga.piyo :as 'piyo) とか打ったら java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.Symbol (NO_SOURCE_FILE:0)って怒られて、しばらく悩んでました。:as キーワー…

Compojure/Ring のredirect

compojureの0.3にあったcompojure.http/redirect-toは、0.4で、ring.util.response/redirect に変わったようです。 もともとCompojureに合った機能を、どんどんRing側に移しているようです。

Compojure(というよりRing)

run-jettyに渡すrouteを、varでderefしてあげると、いちいちjettyのリスタートをしなくてもよいようです。 (run-jetty (var my-route) {:port 8080 :join? false}) としておくと、my-routeをソース上で変更してリロードすると、jettyの動作に反映されるよう…

Compojure(というよりRing)で静的ファイルを提供

CompojureはRingの上に作られています。Compojureのソースはとても小さく、Ringと合わせて理解しないと、開発を行うのは難しいでしょう。Ringは、PythonのWSGI、RubyのRackのClojure版。 それらがどんなものかは、こっちの解説記事を見れば分かります。 WSGI…

Ring/リクエストのたびにリロード

ring.middleware.reloadを使うと、リクエストの度に特定のネームスペースのリロードを行ってくれるようです。インタラクティブに開発を行うには、とっても便利そうです。ハンドラを、wrap-reloadでくるみ、helloweb.coreがリロードされるようにします。 (ns …

Ring/文字化け対策

レスポンスのcharsetを指定するには、次のようにすればよいようです。元ネタはここ ⇒ Problem with Compojure 0.4 + Enlive and UTF-8 (defn wrap-charset [handler charset] (fn [request] (if-let [response (handler request)] (if-let [content-type (ge…

Compojureを使ってみる

Compojureは、Clojure用の小規模なWebアプリ・フレームワークです。Compojureを使うには、project.cljを次のように変更します。 (defproject helloweb "1.0.0-SNAPSHOT" :description "FIXME: write" :dependencies [[org.clojure/clojure "1.2.0"] [org.clo…

WindowsでLeiningen

Clojureのビルド・ツールとしてデファクトになっているのは、Leiningenです。なんかMavenより使いやすそうだし、Mavenリポジトリも使えるので、とりあえず使ってみることにしました。インストールの手順はLeiningenのサイトに書いてあるとおりです。 lein-wi…

Clojarとdocjureを使う

Clojureには、Clojarsというライブラリのリポジトリがあります。Clojureのビルド・ツールとしてはLeiningenが有名ですが、Mavenで使ってみました。Clojarsからとってくるライブラリは、docjureを使ってみます。docjureはApache POI を使って、Officeファイル…

名前空間で定義されたシンボルをリストアップする。

(println (apply str (interpose "\n" (keys (ns-interns 'dk.ative.docjure.spreadsheet)))))

Counterclockwiseをインストール

ちょっと前から気になっていたClojureを使ってみるべぇ、と思ってCounterclockwise(Clojure開発用のEclipseプラグイン)をインストールしてみました。ClojureBoxというテもあったのですが、Emacsにはなじみがないので、軟派なEclipseに流れました。 Getting S…