日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

Clojure

datomic チュートリアルを試す(3) - 実体の属性値をクエリで取る

前回、datomic でのデータ定義の考え方と実体の属性値をどうやって取得するかまでやってみた。記事はこちら。 datomic チュートリアルを試す(1) - 導入・DB 作成・最初のクエリ実行 - 日曜プログラミング今回公式チュートリアルで該当する原文項目は以下。 Q…

datomic チュートリアルを試す(2) - datomic のデータ定義・実体の属性値の取得

前回、インストール・DB作成・スキーマ定義・クエリ実行までやってみた。記事はこちら。 datomic チュートリアルを試す(1) - 導入・DB 作成・最初のクエリ実行 - 日曜プログラミングまた、この記事書いてる途中で作者による Clojure でどう書くかの動画があ…

(解決)cider-jack-in でプロセスが 2 つ立ち上がって emacs 終了時 1 つしか終了しない話

半年以上前にこんな記事を書いた。 プロセスが残るんですけど - 日曜プログラミングnrepl 自体はサーバクライアント型で jack-in した時サーバとクライアント両方立ち上がるようになってる。ここまでは分かるのだが、昔は M-x nrepl-close しても何で1つのプ…

日本語のパス下で実行するとエラーが出る場合の対処方法

Mac OS X やの Linux のパスの扱いがどうなってるかは分からんけど、Clojure でファイルを吐き出すちょっとした小物ツールを作った時日本語含まれるパスで実行すると以下のようなエラーが出る。 Error: Unable to access jarfile hoge.jarこれを回避するには…

JavaFX 遊び TableView 編(5) - DB データを読み込んで表示してみる

前回で終わりと言っていたもののもう1回だけ。 個人的にやりたかった所の一つにようやく来た。これは既に公式チュートリアルにはもうないネタではあるものの、やる事は固定データか DB から持ってきたかの違いでしかないのでそんなに変わらないはず。Clojure…

JavaFX 遊び TableView 編(4)

公式チュートリアルをなぞった TableView 編は最後。 Using JavaFX UI Controls: Table View | JavaFX 2 Tutorials and Documentation Example 12-10 に相当。最後はセルの編集を可能にする。 実は公式だとベースクラス継承してより便利に編集みたいな例も残…

JavaFX 遊び TableView 編(3)

引き続き以下公式チュートリアルの TableView で残り試してない部分を試す。 Using JavaFX UI Controls: Table View | JavaFX 2 Tutorials and Documentation Example 12-8 に相当。今回は追加データ入力用のテキストフィールドを用意して追加ボタンを押すと…

シーケンスに特定の値があるか検索する

[Clojure] シーケンスに特定の値があるか検索して返す 元ネタ:data structures - Test whether a list contains a specific value in Clojure - Stack Overflow欲しいのはあるかどうかをチェックするだけでなく、あればその値を返して欲しいと言う Common L…

JavaFX 遊び TableView 編(2)

どうやら Map データも入れ込めるとの事で試してみる。 Using JavaFX UI Controls: Table View | JavaFX 2 Tutorials and Documentation上記 URL の Example 12-12 に相当。 途中の追加や編集をすっ飛ばしてるけどこっちに興味を持ったのでしょうがないw解説…

JavaFX 遊び TableView 編(1)

以下のチュートリアルに基本従いつつ Clojure を織り交ぜるとどうなるか試してみた。 Using JavaFX UI Controls: Table View | JavaFX 2 Tutorials and Documentationまずは Example 12-6 でやってる、固定データをテーブルに追加する所まで。 結論から言う…

点々マクロ(..)と Java メソッドチェーン比較

tnoda さんが以前 このようなトピック を 挙げられていて基本的に賛成で、ここでは補足として Java と Clojure の書き方を並べてみる。 Java Clojure table.getColumns().clear(); (.. table getColumns clear) table.getColumns().add(firstNameCol); (.. t…

Clojure で可変引数を取る Java メソッドを呼び出す場合の注意点

Clojure の可変引数だとこんな感じで定義できて、 (defn my-max [& x] ; 処理割愛 ) こんな感じで使える。 (max 2 3) (max 2 3 0) (max 2 3 4 6 0) Java でも 1.5 から可変引数を使えるようになっており、 void Max(Integer... args) { // クラス & 処理割愛…

Clojure にはなぜ5つもクラス定義する方法があるのか

Stackoverflow に面白いトピックだったのでちょっと適当翻訳してみた。元トピック:Why does Clojure have 5 ways to define a class instead of just one? - Stack Overflow以下、翻訳 質問 Clojure でクラスっぽいデータ型の定義の方法として gen-class, r…

JavaFX + Clojure でのイベントハンドリング

GUIライブラリで気になる事と言えばやっぱりイベントハンドリングなので次はそいつを試してみる。以下の tnoda さんの所の記事を見れば大体の事は書いてあるんだけど実際に自分で試したのでメモ。 tnoda-clojure • Clojure で Java FX (5): FXML 情報として…

JavaFX でちょっとばかり遊んでみた(2)

結構前に JavaFX でちょっとばかり遊んでみた - 日曜プログラミング と言う記 事を挙げたが、その時結局 uberjar 後の実行ができなかったと言う宿題を片付ける。 JavaFX を Maven 管理下に置く やり方はちょっと前に上げたこちらで。 JavaFX のバージョン確…

コマンドライン引数を取る

コマンドライン引数を取る方法のメモ。 一言で言えば -main 関数の arg にベクタとして引数格納されてるのでそこで好きにしてと言った感じ。まずは検索。 まるでスクリプト言語のように使う方法 http://tnoda-clojure.tumblr.com/post/24969285880/clojure-s…

Project Euler 向け(?)ユーティリティ関数とか

Project Euler を解いて行くに当たって多分探せばどっかに転がっていそうだけど(math-numerictowerとか)何となく自作したもの。今日ググってたら同じようなの見つけて何とも言えない微妙な気持ちになって晒してみたくなりました。 自作分 (defn lcm [& nums]…

JavaFX でちょっとばかり遊んでみた

Clojure だと GUI ライブラリは seesaw 一択な感じなんだけど ここは敢えて JavaFX を Clojure から Helloworld してみた。 seesaw の作者が JavaFX に対応してくれると嬉しいんだけどねー。お決まりの Hello world Try! JavaFX! : JavaFX 2.0によるGUI開発…

補完候補のポップアップ

久々に Emacs の設定に手を付けるなあ。今時の開発環境だと補完は最早デフォルトで持っていると言っても良くて Emacs もデフォルトで持ってはいるんだが、追加キー操作必要なのはともかくとしてウィンドウ分割して別バッファに出す辺りが昔触っていた時も気…

マップにキーワードが無い時

キーワード使った検索って見つからない時のデフォルト値も指定できたのね。 user> (:a {:a 2}) 2 user> (:a {:b 3} 4) 4 clojure.core - Clojure v1.5 API documentation 上の get と同じ事らしい。

Light Table

Chris Granger - Light Table - a new IDE concept密かに注目してるんだけど、どうも作り直してるらしくリンク先の動画にある docstring をそのまま表示する機能とかは現時点じゃ未実装みたい。けど python 対応もするっぽくてこれきっちり対応したら爆発的…

継続がない理由

いや、継続自体理解してないんですがね。 The Joy of Clojure を読んでたら思いもかけず CPS の項目があったもんで改めて調べてみた。今まで継続を解説してたサイトや本や記事読んでもイマイチその有用性が理解できなくて。 以前日本語で理解できかったから…

数字を各桁に分解(10進数限定)

How do you extract digits from an integer in java? - Yahoo! Answers を見て なるほどど思い早速 Clojure で書いてみる。 (defn digits [n] (letfn [(digits-internal [n] (when-not (zero? n) (cons (mod n 10) (digits-internal (quot n 10)))))] (reve…

->, ->>, as->, comp

どれも似たような機能なのでどう使い分けようかと言うメモ。 一般的な表現かどうかは分からないが自分の頭の中では結果チェインと呼んでる。 comp は名前の通り関数合成(comp[osition])と呼んだ方がいいんだろうけど。 -> 正直 ->> でほぼ事足りてあまり出番…

p.142 での pow

p.142 で出てくる再帰版の pow だけど、機能を実現するだけならこうも書けるよな (defn pow [base exp] (reduce * (repeat exp base))) 短いコードは正義。ちなみにでっかい数を渡した時の結果について。 user> (pow 2 10000) ArithmeticException integer o…

大きなファイルを扱うお話

練習がてらちょっとしたツールでも作ってみようかとした場合、大きなファイルを読み込んで java.lang.OutOfMemoryError 起きて困ったりした事がちょこちょこあるのでどうするのが良いか 改めて調べてみた。以前 java.lang.OutOfMemoryError が出た時は、読み…

Excel の制限で書式は 4000 までしか指定できない

Clojure+docjure を使って 7000 行くらいのデータを Excel に書きだそうとしたら以下の例外が出た。 Exception in thread "main" java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a…

comp への思い込み解消

compって関数結合順で考えてたら書く順序逆じゃねと勝手に思ってて使う時も微妙に引っかかっていたんだが、comp使わない書き方に変えてみると、要は見た目順なのに最近気づいたwClojureDocs のサンプルから。 user> (filter (comp not zero?) [0 1 0 2 0 3 0…

lazy-seq の 4 つのルール, 後 next と rest の違いとか

Joy of Clojure P115 にあったのをメモ。 プログラミングClojureにもあったと思うが結構忘れがちなので。訳は適当。 遅延シーケンスが発生し得る式の上で lazy-seq マクロを使う もし処理中に別のシーケンスが発生するなら next の代わりに rest を使う シー…

Excel 列名への変換

ググると割と巷にコードサンプルが見つかるものの Clojure は見つからなかったので作ってみた。 (defn num->col-name [n] "1以上の数値からExcelの列名表記に変換する" (letfn [(charseq [x] (when (pos? x) (cons (mod (dec x) 26) (charseq (quot (dec x) …