ClojureでGoogle App Engine Webアプリケーションの作成

Google App EngineのWebアプリをClojureで簡単に作成できるか試してみた。 appengine-magic appengine-magicを使うと簡単そうだな。 https://github.com/gcv/appengine-magic/tree/ Getting Startedに従って、作ってみよう。 Google AppEngine SDKのインスト…

マルチスレッドでWebページを取得する

HttpClientを使って、マルチスレッドでWebページを取得するサンプル。 leiningenを使う場合は、project.cljの:dependenciesに[commons-httpclient"3.1"]を記述し、lein depsを実行すればライブラリを取得してくれる。 (ns web-get (:import [org.apache.comm…

Echo server

Programming Clojureを読んだ直後にも書いたが、またEcho serverを書いてみた。以前に作成したのは冗長だった。 clojure.contrib.server-socketとclojure.contrib.duck-streams/copyを使うと簡単だ。 (ns socket-test (:use [clojure.contrib.server-socket …

trace - 便利なdotraceマクロ

ここしばらくHaskellやAndroidプログラミングに興味を引かれ、Clojureからは遠ざかっていた。blogの更新は5ヶ月ぶりか。月日が経つのは早いなぁ。print関数を使ってデバッグしていたが、面倒くさくなってきたので、調べてみたら、ClojureでもCommon Lispみた…

フィールドとメソッド探しにちょっと便利な関数を作ってみた

SLIMEで開発している際に、Javaのクラスが持つフィールドやメソッド名を調べたい事がある。 例えば、文字列を大文字に変換するメソッドを忘れてしまって、uppercaseだったかな?toUpperだったかな?なんて時に、ちょっと便利な関数。 使い方 (inspect 調べた…

clojure,clojure-contribのバージョンアップ(1.1.0のビルド方法)

今更なのですが、http://d.hatena.ne.jp/e-o-n/20091024 に書いた手順でバージョン1.0をビルド後に、バージョン1.1.0のjarを作成する手順のメモ。 ~/opt以下にclojureとclojure-contribをgit cloneしている。まずはclojureから。 ~% cd opt/clojure ~/opt/cl…

Twitter4jでつぶやく

ClojureでTwitterのbotを作ろうと思い、TWitterライブラリを探してみたら、Twitter4Jは扱いが簡単そうだったので試してみた。 Twitter4Jは最新の安定バージョンである2.1.0を使用した。 まずは、Twitter4Jのサンプルコードを参考に、つぶやくコードを書いて…

jarファイルをまとめてクラスパスに追加する

clojureでいろいろとコードを書き始めると、多種のjavaのライブラリを使うことになると思うが、いちいち.emacsにライブラリを追加するのは面倒だ。 Emacs Lispのdirectory-files関数を使うと指定したディレクトリにあるjarファイルをリストとして取得できる…

antでcljファイルをコンパイル(build.xmlのひな形)

antでcljファイルをコンパイル後、jarにアーカイブするためのbuild.xmlを作成した。 プロジェクト構成 プロジェクトのディレクトリ構成は以下の通り。 hogeapp/ … プロジェクトディレクトリ src/ … ソースファイル sample/hoge/hogeapp.clj … サンプルアプリ…

echo server

Programming Clojureを読み終えた。 Common Lispとは微妙に違うので、コードを書く時にとまどう事も多いが、豊富なJavaライブラリを直接使用できるのは大きな利点である。 emacs + slimeを使えば、動作確認をしながらコードを書けるので、サクサク開発できて…

アナフォリックマクロ

Programming ClojureのChapter 7 Macroの途中まで読んだので、マクロを使ってみた。アナフォリックマクロを作成しようとして、sample/macro.clj (ns sample.macro) (defmacro aif [pred then] `(let [it ~pred] (if it ~then))) を定義し、実行すると、 user…

agent同期化のサンプル

agentをawait,await-for関数で同期化するサンプルを書いてみた。send関数によるagentの更新は非同期で行なわれるが、await関数を使い、send関数で指示した関数の実行が完了するまで待機することができる。 待ち時間を指定したい場合はawait-for関数を使用す…

alterとcommute

Programming Clojureをcommuteの説明まで読んだので、alterとcommuteの違いが分かるようなサンプルプログラムを書いてみた。test.clj (def *counter* (ref 0)) (defn test-func [name time] (fn [] (dotimes [i 5] (Thread/sleep 1000) (print (format "%d: …

clojure.contrib.def

clojure.contrib/def.cljのソースを眺めたのでメモ。 名前 説明 defvar 変数を初期値とドキュメント文字列で定義する。 defunboud unbound変数をドキュメント文字列で定義する。 defmacro- defmacroのプライベート定義版。 defvar- defvarのプライベート定義…

Emacs23 + ddskk

Ubuntu9.10がリリースされたので、インストールしてみた。Emacs+SKKが無いと何も出来ないので、早速、環境構築してみた。 Emacs23でddskkを使おうとしたら、Emacs22に依存していたので、 以下の手順でddskkをインストールし、Emacs23でSKKを使えるようにした…

duck-streams

clojure.contrib.duck-streamにはファイル入出力用の便利な関数が定義されている。 ; 使用する関数を宣言 (use '[clojure.contrib.duck-streams :only (spit append-spit pwd)]) ; ファイルに文字列を出力する。 (spit "hello.txt", "こんにちは、世界!\n") …

(compile 'hoge.fuga)でコンパイルできない

Programming Clojureを読みながらclojureの勉強中である。hoge/fuga.cljをコンパイルしようと、 (compile 'hoge.fuga) を実行すると、ClassNotFoundException例外が発生した。 コンパイルしたいcljソースファイルと、コンパイルされたクラス出力ディレクトリ…

clj script

Windowsで、cljスクリプトの実行とREPL環境を実現するためのスクリプト。 JLineを使用し、カーソルキーの上下で過去の入力を再入力できる。参考URL: http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started各ライブラリのインストール先は以下の…

安定版(version1.0)のclojure, clojure-contribのビルド方法

Programming Clojureを読みながらClojureを勉強中であるが、 記載されていたClojureのビルド方法は古かった。 本ではsvnを使ってビルドしているが、現在はclojureとclojure-contribはgit管理(ホストはgit-hub)となっている。 version1.0のパッケージを作成す…

Programming Clojure

お昼休みに八重洲ブックセンターに寄って、 Programming Clojureを買いました。 なかなか面白そう。まずは、勉強がてら、指定したファイルの中身を出力するコードを書いてみよう。 Common Lispでは、こんな感じで書けるけど。 (defun cat (filename) (with-o…

NTEmacs23 + slime + clojure

NTEmacs23 + slime + clojure の開発環境構築手順メモ。 http://riddell.us/tutorial/slime_swank/slime_swank.html を参考に。環境: Vista, NTEmacs23, cygwinインストール済み homeディレクトリ: c:\home アプリインストール先: c:\home\opt clojure-mode,…

ncursesを使う

Common Lispにはcl-ncursesというncursesライブラリあり。まずはインストール。 (require 'asdf-install) (asdf-install:install 'cl-ncureses) 簡単なサンプルを作ってみる。sample1.lisp (asdf:oos 'asdf:load-op :cl-ncurses) (defun print-msg (y x msg)…