Google App EngineのWebアプリをClojureで簡単に作成できるか試してみた。 appengine-magic appengine-magicを使うと簡単そうだな。 https://github.com/gcv/appengine-magic/tree/ Getting Startedに従って、作ってみよう。 Google AppEngine SDKのインスト…
HttpClientを使って、マルチスレッドでWebページを取得するサンプル。 leiningenを使う場合は、project.cljの:dependenciesに[commons-httpclient"3.1"]を記述し、lein depsを実行すればライブラリを取得してくれる。 (ns web-get (:import [org.apache.comm…
Programming Clojureを読んだ直後にも書いたが、またEcho serverを書いてみた。以前に作成したのは冗長だった。 clojure.contrib.server-socketとclojure.contrib.duck-streams/copyを使うと簡単だ。 (ns socket-test (:use [clojure.contrib.server-socket …
ここしばらくHaskellやAndroidプログラミングに興味を引かれ、Clojureからは遠ざかっていた。blogの更新は5ヶ月ぶりか。月日が経つのは早いなぁ。print関数を使ってデバッグしていたが、面倒くさくなってきたので、調べてみたら、ClojureでもCommon Lispみた…
SLIMEで開発している際に、Javaのクラスが持つフィールドやメソッド名を調べたい事がある。 例えば、文字列を大文字に変換するメソッドを忘れてしまって、uppercaseだったかな?toUpperだったかな?なんて時に、ちょっと便利な関数。 使い方 (inspect 調べた…
今更なのですが、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…
ClojureでTwitterのbotを作ろうと思い、TWitterライブラリを探してみたら、Twitter4Jは扱いが簡単そうだったので試してみた。 Twitter4Jは最新の安定バージョンである2.1.0を使用した。 まずは、Twitter4Jのサンプルコードを参考に、つぶやくコードを書いて…
clojureでいろいろとコードを書き始めると、多種のjavaのライブラリを使うことになると思うが、いちいち.emacsにライブラリを追加するのは面倒だ。 Emacs Lispのdirectory-files関数を使うと指定したディレクトリにあるjarファイルをリストとして取得できる…
antでcljファイルをコンパイル後、jarにアーカイブするためのbuild.xmlを作成した。 プロジェクト構成 プロジェクトのディレクトリ構成は以下の通り。 hogeapp/ … プロジェクトディレクトリ src/ … ソースファイル sample/hoge/hogeapp.clj … サンプルアプリ…
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をawait,await-for関数で同期化するサンプルを書いてみた。send関数によるagentの更新は非同期で行なわれるが、await関数を使い、send関数で指示した関数の実行が完了するまで待機することができる。 待ち時間を指定したい場合はawait-for関数を使用す…
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.cljのソースを眺めたのでメモ。 名前 説明 defvar 変数を初期値とドキュメント文字列で定義する。 defunboud unbound変数をドキュメント文字列で定義する。 defmacro- defmacroのプライベート定義版。 defvar- defvarのプライベート定義…
Ubuntu9.10がリリースされたので、インストールしてみた。Emacs+SKKが無いと何も出来ないので、早速、環境構築してみた。 Emacs23でddskkを使おうとしたら、Emacs22に依存していたので、 以下の手順でddskkをインストールし、Emacs23でSKKを使えるようにした…
clojure.contrib.duck-streamにはファイル入出力用の便利な関数が定義されている。 ; 使用する関数を宣言 (use '[clojure.contrib.duck-streams :only (spit append-spit pwd)]) ; ファイルに文字列を出力する。 (spit "hello.txt", "こんにちは、世界!\n") …
Programming Clojureを読みながらclojureの勉強中である。hoge/fuga.cljをコンパイルしようと、 (compile 'hoge.fuga) を実行すると、ClassNotFoundException例外が発生した。 コンパイルしたいcljソースファイルと、コンパイルされたクラス出力ディレクトリ…
Windowsで、cljスクリプトの実行とREPL環境を実現するためのスクリプト。 JLineを使用し、カーソルキーの上下で過去の入力を再入力できる。参考URL: http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started各ライブラリのインストール先は以下の…
Programming Clojureを読みながらClojureを勉強中であるが、 記載されていたClojureのビルド方法は古かった。 本ではsvnを使ってビルドしているが、現在はclojureとclojure-contribはgit管理(ホストはgit-hub)となっている。 version1.0のパッケージを作成す…
お昼休みに八重洲ブックセンターに寄って、 Programming Clojureを買いました。 なかなか面白そう。まずは、勉強がてら、指定したファイルの中身を出力するコードを書いてみよう。 Common Lispでは、こんな感じで書けるけど。 (defun cat (filename) (with-o…
NTEmacs23 + slime + clojure の開発環境構築手順メモ。 http://riddell.us/tutorial/slime_swank/slime_swank.html を参考に。環境: Vista, NTEmacs23, cygwinインストール済み homeディレクトリ: c:\home アプリインストール先: c:\home\opt clojure-mode,…
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)…