おさかなせいざ

プログラミングメモや日記がわりに

最近知ったこととしたこと

イカで述べるClojureはversion 1.8.0 についてである。

Clojure について

Clojure の (case example ...)は (condp = example ...)と等価でない。 Enum の比較を行う際に case ではうまく動作しなかったが、condp であれば動いた。 理由がわからないままなので、Clojureメッチャデキル方はぜひとも教えて頂ければ幸いです。

JavaFX について

と書いたくせにまたClojureなんだけど、Clojurejavafx.scene.control.Label を使おうとして

(def label (Label. "Label"))

とかしたらコンパイルできずに怒られもしないし動かない。

Java 8 で Clojure を使う (2): JavaFX - tnoda-clojure

によると、これはLabelだけでなく、control に含まれるクラス全体らしい。 なのでこれを解決する場合する場合には

(def label (promise))

(defn init []
  (deliver label (Label. "Label")))

のようにすると動いたがバットノウハウ感がある。

JavaFX について

 今度はちゃんと JavaFX についてで、Scene には標準で setOnKeyPressed というキーボードが押された際に発火するhandlerを設定できるメソッドがあるが、 これは KeyCode を含まない。これは KeyEvent/KEY_PRESSED にもともと含まれていないことに起因する。 なので Scene 上で KeyCode が欲しかったら addEventFilter で KeyEvent/KEY_TYPED をとってやるハンドラを設定することで解決できる。 「JavaFXはク○」とか浅はかな知識で思ってごめんなさい。

PDF発表ツール

 良いっぽいのがあった

GitHub - pdfpc/pdfpc: A presenter console with multi-monitor support for PDF files.

けど自分の環境では動かなかったため、ClojureでPDF発表のためのツール開発を初めた。

github.com

上のClojureJavaFXを触っているのはこれを作るため。 現状はPDFの表示とページの移動まで実装できた。 もし気になったりすることがあったら使ってみて下さい。