Enliveをさわってみたのでメモ

Enliveをさわってみたのでメモ。 導入 project.clj の :dependencies に下記を追加 [enlive "1.1.5"] REPLから試用 user=> (use 'net.cgrand.enlive-html) nil user=> (dir net.cgrand.enlive-html) (中略) html html-content html-resource html-snippet …

Clojureでステートマシン書いてみたのでメモ

おもちゃ未満ながら、Clojureでステートマシン書いてみたのでメモ。 (2013/12/16 微編集) コード (def states-def "状態定義" {:state01 ;状態ID [[#(println "->state01")] ;上記状態に到達した際に評価される関数のベクタ {:event01 ;イベントID [[#(pri…

マクロについてメモ

Lispのマクロについて、書籍の抜粋メモ。 マクロの使いドコロ On Lisp 8.1 他の手段では不可能なとき の項より マクロにできて関数にできないことは2つある: まずマクロは引数の評価を制御(または抑制)できること また呼び出し側のコンテキスト内へ直に展…

Luminusを触ってみたのでメモ

Luminusを触ってみたのでメモ。 概要 軽量ライブラリをベースにした小さなWEBアプリケーションフレームワーク 以下を狙いとする 堅牢 スケーラブル プラットフォームの利用を簡単に 試用 Leiningen テンプレートLuminus-Templateを利用してテンプレートプロ…

Clojure開発用Eclipseプラグインメモ その2

以前の日記「Clojure開発用Eclipseプラグインメモ - oknknicの日記」では軽くしか触れてなかったので、もう少し具体的な内容をメモ。 予想してたよりかなり高機能で、Eclipseでの開発を本命にしちゃいそうな気分になってきた。 Counterclockwiseプラグイン C…

Clojure対応のIDE Light Table を使ってみた

リアルタイムに評価・おしゃれに結果表示してくれるClojure対応のIDEである Light Table を使ってみた。 アルファ版(2013/08/17時点のバージョンは0.4.11)とのことで、今後の展開にも期待。 導入 ダウンロード、解凍 http://www.lighttable.com/ REPL起動 …

Clojureで単体テストメモ〜clojure.test と Midje〜

Clojureでの単体テストについてメモ。 ざっと、以下の選択肢があるよう。 clojure.test 標準テストライブラリ Midje テストフレームワーク。可読性の高いテスト記述をサポートする test.generative テストデータ生成、テスト実行ライブラリ。期待値ではなく…

Clojureでコマンドライン引数パースめも

tools.cliを用いれば簡単にできる。 導入 project.clj の :dependencies に以下を追記 [org.clojure/tools.cli "0.2.2"] 利用例 use に以下を追加 [clojure.tools.cli :only (cli)] main関数の実装例 (defn -main [& args] (let [[options extra-args banner…

ClojureコードのAPIドキュメント生成メモ

Codoxを使って簡単に生成できる。 Compojure、Hiccup、RingもCodoxを使ってAPIドキュメント生成しているよう。 導入 project.clj の :plugins に以下を追記 [codox "0.6.4"] 実行 下記コマンドを実行すると、docフォルダ内にAPIドキュメントが生成される。 l…

Emacsの操作メモ

今更ながら、Emacsの操作メモ ヘルプ 私はC-hをBSに当てて、ヘルプはC-?に当てている。 そのためC-h C-hは打てないので、ヘルプのヘルプは「M-x help-for-help」で参照する。 ヘルプサブコマンド a コマンド名検索(apropos) b 現在のキーバインド一覧(bindin…

(個人的)Clojureのコーディングルールめも

Clojureの個人的なコーディングルールを整理しておく。 シンボルの命名 全般 「-」区切りの単語列 関数 状態を変化させる関数には末尾に「!」を付与 述語には末尾に「?」を付与 関数以外のvar グローバルを意識したvarのシンボルには、接頭と末尾に「*」を付…

Clojureの基礎〜中身確認系、クオート、その他記号系〜

「Clojureの基礎〜Clojureの特徴〜 - oknknicの日記」に引き続きClojureの基礎メモ。 中身確認系 #' varスペシャルフォーム(シンボルをvarに解決し、Varオブジェクトそのものを返す)に展開されるリーダーマクロ #'str ; #'clojure.core/str (meta #'str) ;…

Clojureの基礎〜Clojureの特徴〜

「Clojureの基礎〜名前空間〜 - oknknicの日記」に引き続き基礎メモ。 基本に立ち返って、Clojureの特徴を整理。 Lispである 構文をほとんどもたず、同図像性がある 言語を拡張し易い コードはデータであるため、コードを生成するコード(メタプログラム)を…

nrepl.el(nREPLのEmacsクライアント)の使い方メモ

「EmacsでClojure開発環境構築メモ - oknknicの日記」でも少し言及したnrepl.el。 今回は実用メモ。 REPL操作 REPLの起動 C-c M-j nREPL-Server と Client を起動し、Client から Server へ接続 leiningenで生成したプロジェクトのcljファイルを開いた状態で…

Clojureの基礎〜名前空間〜

「Clojureの基礎〜正規表現を扱う〜 - oknknicの日記」に引き続き、基礎メモ。 名前空間についてメモ。 現在の名前空間の切替:in-ns (必要なら名前空間が新規作成される) (REPL起動時のデフォルト名前空間は「user」) (in-ns 'my-name-space) ;なお、新…

Clojureの基礎〜正規表現を扱う〜

「Colojureの基礎〜状態を扱う〜 - oknknicの日記」に引き続き、基礎メモ。 正規表現の扱い方についてメモ。 clojure.string - Clojure v1.5 (stable) 正規表現置換:clojure.string/replace (doc clojure.string/replace) (clojure.string/replace "<hoge><hage>" #"<(\</hage></hoge>…

Ring周りについて頭を整理 その2〜Ringを生で使ってみる〜

「Ring周りについて頭を整理 - oknknicの日記」に引き続き、Ring理解ネタ。 今回はRingを生で使ってみることで、理解を深める。 HelloWorld プロジェクト(通常)の新規作成 lein new hello-ring project.clj の編集 (defproject hello-ring "1.0.0-SNAPSHOT…

Colojureの基礎〜状態を扱う〜

「Clojureの基礎 〜プロトコル・データ型・レコード〜 - oknknicの日記」に引き続き、基礎メモ。 状態の扱い方についてメモ。 状態を扱うオブジェクト ref 概要 変更不可なオブジェクトへの、変更可能な参照 参照の変更は、トランザクション内(dosyncマクロ)…

Clojureの基礎 〜プロトコル・データ型・レコード〜

今更ながら、Clojureの基礎メモ。 今回は独自型定義周りを。 プロトコル 概要 Javaのインタフェースの代替(より柔軟である) 既に定義済みのデータ型(およびクラス)に、(そのソースコードの変更なしに)プロトコルを追加できる プロトコルのメソッドは名…

Ring周りについて頭を整理

「Clojure(Compojure)で作成したWEBアプリをGlassFishにデプロイ - oknknicの日記」に続き、ClojureによるWebアプリネタ。 デファクトである Ring について、頭を整理しておく。 Ring PythonのWSGIやRubyのRackにインスパイアされたWebアプリケーションライ…

Clojure(Compojure)で作成したWEBアプリをGlassFishにデプロイ

「ClojureでのWEBアプリ開発にあたって、各種ライブラリのメモ - oknknicの日記」の続き(?)。 Clojure(Compojure)で作成したWEBアプリをGlassFishにデプロイしてみたのでメモ。 Compojureプロジェクトの新規作成、warの生成 lein new compojure myapplica…

Clojureでxmlを読み込んで、clj-xpathで検索

日記「Clojureでxmlを読み込んで、zip-filterで検索 - oknknicの日記」では zip と zip-filter による xml 検索をした。 今回は、javax.xml をラップしたライブラリ clj-xpath を使ってみたのでメモ。 clj-xpath project.clj の :dependencies に追加 [com.g…

Clojureでxmlを読み込んで、zip-filterで検索

日記「Clojureでxmlを読み込んでみたのでメモ - oknknicの日記」では xml-seq と for による xml 検索をした。 今回は、 zip と zip-filter による検索をメモ。 利用例 project.clj の :dependencies への追記 [org.clojure/data.zip "0.1.0"] サンプルファ…

xmlをパースして、ツリー探索でHiccup形式に変換して、もと通りに戻す

Clojureで、xmlをパースして、ツリー探索でHiccup形式に変換して、もと通りに戻すコードを書いてみた。 これをベースに、入力xmlファイル全体を舐めて変換する系のコードが書けそう♪ (ns xmlhello.core (:use [hiccup.core] [clojure.java.io :only (writer)…

(修正)Hiccup を JSP 対応させてみたのでメモ

前の記事「Hiccup を JSP 対応させてみたのでメモ - oknknicの日記」はあまりにもあんまり過ぎたので書き直し。 改変内容 Hiccupバージョン:1.0.3 対象ファイル:hiccup/compiler.clj 置き換え対象関数:render-element (defn- render-element "Render an e…

Hiccup を JSP 対応させてみたのでメモ

★この日記の内容は無視して、修正版の日記を参照のこと(2013-06-27)★自分以外のニーズは全くないと思うが、HiccupをJSPの特殊タグ(%のやつ)とアクション(jsp:のやつ)に強引に対応させてみたのでメモ。 せっかくオープンソースなので、改変してみようと…

Hiccupでtableを出力する単純な関数を作ってみた 改善1

改善点:カラムタイプに応じたセルの生成project.clj (defproject mylang "0.1.0-SNAPSHOT" :description "mylang" :url "http://d.hatena.ne.jp/oknknic/" :dependencies [[org.clojure/clojure "1.5.1"] [hiccup "1.0.3"]] :main mylang.core)core.clj (ns…

Hiccupでtableを出力する単純な関数を作ってみた

お遊びDSLの手始めに、Hiccupの機能拡張として単純なtable作成関数を作ってみた。 ソース (defn table-header-detail [cols] (map #(vector :th (:name %)) cols)) (defn table-header [cols] [:tr (table-header-detail cols)]) (defn table-record-detail …

Clojureでxmlを読み込んでみたのでメモ

Clojureでxmlを読み込んでみたのでメモ。 core.clj (ns xmlhello.core (:require [clojure.xml :as xml])) (defn load-xml-seq [filepath] (xml-seq (xml/parse (java.io.File. filepath)))) data.xml(Leiningenによるプロジェクトフォルダ直下に格納) <records> <record id="1">re</record></records>…

Windows PowerShell で UTF8 のファイルの中身をソート

cmd の sort は UTF8 対応とかないので、 PowerShell でのやり方をメモ。 powershell -command "Get-Content -Encoding UTF8 in.txt | sort | Set-Content -Encoding UTF8 out.txt"以上。