24 Jan 2016, 11:07

Living Clojure を読んだ

Living Clojure を読んだ。

内容

2 部構成。前半は、Clojure の基本文法について簡単にまとめたもの。 そして、後半は Clojure を身につけるための学習プランが書いてある。

Clojure の文法はシンプルなのだが、それをさらにシンプルに解説する良書。

文法に加えて、Clojure のプロジェクト管理の方法だったり、 Web アプリケーション(ClojureScript)に章を割いているところが面白い.

後半は、7 週間をかけて Clojure をまなぶための学習プランが示される。 学習には、4clojure が利用される。

感想

やさしい英語なので、サクサク読み終えることができた。 読了までにかかった時間は 11 時間。あっという間だ。

文法書は概して読み終えるのに時間がかかったり、 途中で退屈になりやすいが、 この本は不思議の国のアリスを例にした楽しい解説が続き、 また分量としてもちょうど良く、飽きることがなかった。

ただし説明がシンプルなのはよいが、若干物足りなさを感じた。 マクロやプロトコルなど、例がすくないので、理解できていない。

この本のよくできているところは、 文法を定着させるためのトレーニングプランが 後半で示されているところ。文法書は手を動かさないと身につかない。

後半の学習はこれからやります。

06 Jan 2016, 05:20

プログラミング Clojure を読んだ

プログラミング Clojure 第 2 版をようやく読みきりました。

読むのにかかった時間は、36 時間 14 分. 流し読みしてこのくらい.

本の構成

日本語で読める唯一のまともな Clojure 入門書.

全部で 10 章構成.1,2,3 章で、Clojure の基本的な文法を紹介する. 4 章以降、中級、上級向けの内容になってくる。 関数型プログラミング、状態、プロトコル、マクロ、マルチメソッドなどなど。 そして、最後の 2 章で、より実践的なアプリケーションを作成する.

感想

序文がやたらとカッコよかった.

  • Clojure はエレガントだ。
  • Clojure は「Lisp ・リローデッド」だ。
  • Clojure は関数型言語だ。
  • Clojure は並行プログラミングを簡単にする。
  • Clojure は Java を歓迎する。
  • Clojure は速い。

この序文とポールグレアムの本で, 誰もが Lisp ハッカーに憧れて Clojure の門を叩くのではないか?

しかし、内容は難しかった。

理解ができない部分が多々あり。 そういうところは流し読みして、老後の楽しみにして飛ばした。 1、2、3章は理解できたが、それ以降は正直理解したといえない.

これは、初心者向けの本ではない. Lisp や Java を熟知している人が Clojure を使ってみようという場合を想定してかかれている気がした. また、話の展開が早く、話題が次から次へとポンポン変わって、ついていくのが苦しい。

ただし、1,2,3 章で基本的な章を理解したので、 簡単なプログラムはかけるようになった.これからこの本読むひとは、 とりあえず最初の章を理解することを目標においてはどうだろうか?

日本語で出ている資料としてはこのプログラミング Clojure を 入門の入り口として選ぶひとが大多数だと思うが、 これを読みきって理解するひとは少ないのでは? 入門の敷居が高いところにも、Clojure が流行らない理由があるのではと思う.

ちなみに、入門には以下の MOOC がおすすめ.

これからどうするか

Clojure 力をつけるには、どうしよう。 ほかに日本語で読める本には目を通してしまった。選択肢としては、

どれもあまりパッとしないなぁ。答えはここでは出ませんでした。 このままだと、ここで Clojure の勉強がストップして先に進めない.

おすすめあれば、教えてつかあさい.

02 Jan 2016, 00:21

Emacs で Clojure の開発環境を構築

Clojure の勉強を始めました。

まずはなにより Emacs の設定からかと思うので、 Clojure の Emacs 設定を整えました. 現時点での設定をプログにスナップショット.

優れた IDE が備える機能

  • シンタックスハイライト/ インデント clojure-mode
  • 検索・置換 たくさんあるよ.
  • タグジャンプ ggtags
  • コード補間 ac-clojure
  • エラーチェック flycheck
  • リファクタリング clj-refactor
  • インタープリタ・デバッカ cider
  • プロジェクト管理 projectile
  • ドキュメント参照 eldoc

Clojure に特科した Elisp

clojure-mode

<div class="outline-text-3" id="text-orgheadline2">
  <p>
    Clojure のためのメジャーモード. シンタックスハイライトとかインデントとかを正してくれるモード. これは必須.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clojure-mode">https://github.com/clojure-emacs/clojure-mode</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-mode)<br /> [/sourcecode]
  </p>
</div>

cider

<div class="outline-text-3" id="text-orgheadline3">
  <p>
    Clojure のためのインタラクティブな開発環境.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/cider">https://github.com/clojure-emacs/cider</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;cider)<br /> ;; clojure-mode で cider を有効に<br /> (add-hook &#8216;clojure-mode-hook &#8216;cider-mode)<br /> ;; eldoc を有効にする<br /> (add-hook &#8216;cider-mode-hook &#8216;cider-turn-on-eldoc-mode))<br /> [/sourcecode]
  </p>

  <ul class="org-ul">
    <li>
      cider-jack-in で repl 起動
    </li>
    <li>
      cider-connect でリモート repl に接続
    </li>
  </ul>

  <p>
    repl と連携して開発を行うことができる. REPL 駆動開発!!
  </p>
</div>

4clojure

<div class="outline-text-3" id="text-orgheadline4">
  <p>
    clojure の問題集.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/losingkeys/4clojure.el">https://github.com/losingkeys/4clojure.el</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;4clojure)<br /> [/sourcecode]
  </p>

  <p>
    Emacs から問題をといたり、答え合わせができる. そのまま答えを投稿できればいいのだけれども、それは未対応.
  </p>
</div>

ac-cider

<div class="outline-text-3" id="text-orgheadline5">
  <p>
    auto-complete for cider. 強力な補完機能が手に入る.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/ac-cider">https://github.com/clojure-emacs/ac-cider</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;ac-cider)<br /> (add-hook &#8216;cider-mode-hook &#8216;ac-flyspell-workaround)<br /> (add-hook &#8216;cider-mode-hook &#8216;ac-cider-setup)<br /> (add-hook &#8216;cider-repl-mode-hook &#8216;ac-cider-setup)<br /> (eval-after-load &#8220;auto-complete&#8221;<br /> &#8216;(progn<br /> (add-to-list &#8216;ac-modes &#8216;cider-mode)<br /> (add-to-list &#8216;ac-modes &#8216;cider-repl-mode))))<br /> [/sourcecode]
  </p>
</div>

clojure-cheatsheet

<div class="outline-text-3" id="text-orgheadline6">
  <p>
    CheatSheet を参照できる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clojure-cheatsheet">https://github.com/clojure-emacs/clojure-cheatsheet</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-cheatsheet)<br /> (define-key clojure-mode-map (kbd &#8220;C-c C-h&#8221;) #&#8217;clojure-cheatsheet)<br /> [/sourcecode]
  </p>
</div>

clj-refactor

<div class="outline-text-3" id="text-orgheadline7">
  <p>
    Clojure 用リファクタリング支援ツール.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clj-refactor.el">https://github.com/clojure-emacs/clj-refactor.el</a>
    </li>
  </ul>

  <p>
    できる機能か多すぎ!覚えらんない..
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clj-refactor.el/wiki">https://github.com/clojure-emacs/clj-refactor.el/wiki</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clj-refactor)
  </p>

  <p>
    (defun my-clojure-mode-hook ()<br /> (clj-refactor-mode 1)<br /> (yas-minor-mode 1) ; for adding require/use/import statements<br /> ;; This choice of keybinding leaves cider-macroexpand-1 unbound<br /> (cljr-add-keybindings-with-prefix &#8220;C-c C-m&#8221;))
  </p>

  <p>
    (add-hook &#8216;clojure-mode-hook #&#8217;my-clojure-mode-hook)<br /> [/sourcecode]
  </p>
</div>

clojure-snippets

<div class="outline-text-3" id="text-orgheadline8">
  <p>
    Yasnipeet for Clojure
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/mpenet/clojure-snippets">https://github.com/mpenet/clojure-snippets</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-snippets)<br /> (setq clojure-snippets-dir &#8220;~/.emacs.d/el-get/repo/clojure-snippets/&#8221;)<br /> [/sourcecode]
  </p>
</div>

主に Lisp 系に役立つ Elisp

ggtags

<div class="outline-text-3" id="text-orgheadline10">
  <ul class="org-ul">
    <li>
      <a href="https://github.com/leoliu/ggtags">https://github.com/leoliu/ggtags</a>
    </li>
  </ul>

  <p>
    変数や関数の定義にタグジャンプする. ggtags-create-tags 関数を呼ぶと, ctags コマンドがコールされてタグがつくられる.
  </p>

  <p>
    と思ったら、つくられない。.globalrc に設定を追加する必要があるようだ. 以下のサイトを参考にした。ありがとうございます.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ayato.hateblo.jp/entry/20150603/1433329200">Clojure の開発で gtags を使う &#8211; (define -ayalog &#8216;())</a>
    </li>
  </ul>

  <p>
    タグができたら、あとはコマンドを定義するだけ.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;ggtags)<br /> (add-hook &#8216;clojure-mode-hook (lambda () (ggtags-mode 1)))
  </p>

  <p>
    ;; use helm<br /> (setq ggtags-completing-read-function nil)
  </p>

  <p>
    ;; use eldoc<br /> (setq-local eldoc-documentation-function #&#8217;ggtags-eldoc-function)
  </p>

  <p>
    ;; imenu<br /> (setq-local imenu-create-index-function #&#8217;ggtags-build-imenu-index)
  </p>

  <p>
    (define-key ggtags-mode-map (kbd &#8220;C-c g s&#8221;) &#8216;ggtags-find-other-symbol)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g h&#8221;) &#8216;ggtags-view-tag-history)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g r&#8221;) &#8216;ggtags-find-reference)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g f&#8221;) &#8216;ggtags-find-file)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g c&#8221;) &#8216;ggtags-create-tags)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g u&#8221;) &#8216;ggtags-update-tags)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g m&#8221;) &#8216;ggtags-find-tag-dwim)
  </p>

  <p>
    (define-key ggtags-mode-map (kbd &#8220;M-,&#8221;) &#8216;pop-tag-mark))<br /> [/sourcecode]
  </p>
</div>

smartparens

<div class="outline-text-3" id="text-orgheadline11">
  <ul class="org-ul">
    <li>
      <a href="https://github.com/Fuco1/smartparens">https://github.com/Fuco1/smartparens</a>
    </li>
  </ul>

  <p>
    カッコの移動を簡単にする elisp. 似たような機能に Paredit という elisp もある. どちらを使うかは好き嫌い.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;smartparens-config)<br /> (smartparens-global-mode t)<br /> [/sourcecode]
  </p>

  <p>
    以下、自分のキーバインドを貼り付けるけれども、キーバインドは好きに設定してよい.
  </p>

  <p>
    正直、あまりつかいこなせてない&#x2026;
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (define-key sp-keymap (kbd &#8220;C-M-f&#8221;) &#8216;sp-forward-sexp) ;; forward<br /> (define-key sp-keymap (kbd &#8220;C-M-b&#8221;) &#8216;sp-backward-sexp) ;; backward
  </p>

  <p>
    (define-key sp-keymap (kbd &#8220;C-M-n&#8221;) &#8216;sp-next-sexp) ;; next<br /> (define-key sp-keymap (kbd &#8220;C-M-p&#8221;) &#8216;sp-previous-sexp) ;; previous
  </p>

  <p>
    ;; 一段中の/ 外のカッコに移動.<br /> (define-key sp-keymap (kbd &#8220;C-M-d&#8221;) &#8216;sp-down-sexp) ;; down<br /> (define-key sp-keymap (kbd &#8220;C-M-u&#8221;) &#8216;sp-up-sexp) ;; up
  </p>

  <p>
    ;; かっこの先頭と末尾に移動.<br /> (define-key sp-keymap (kbd &#8220;C-M-a&#8221;) &#8216;sp-beginning-of-sexp)<br /> (define-key sp-keymap (kbd &#8220;C-M-e&#8221;) &#8216;sp-end-of-sexp)
  </p>

  <p>
    ;; カッコのなかを削除・コピー (かたまり単位)<br /> ;; sp-kill/copy-hiblid-sexp というものもある<br /> (define-key sp-keymap (kbd &#8220;C-M-k&#8221;) &#8216;sp-kill-sexp)<br /> (define-key sp-keymap (kbd &#8220;C-M-w&#8221;) &#8216;sp-copy-sexp)
  </p>

  <p>
    ;; かっこを外す<br /> (define-key sp-keymap (kbd &#8220;C-M-s&#8221;) &#8216;sp-unwrap-sexp)<br /> [/sourcecode]
  </p>
</div>

show-paren-mode

<div class="outline-text-3" id="text-orgheadline12">
  <p>
    対応する括弧を光らせる.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> ;; turn on highlight matching brackets when cursor is on one<br /> (show-paren-mode 1)<br /> [/sourcecode]
  </p>
</div>

rainbow-delimiters

<div class="outline-text-3" id="text-orgheadline13">
  <p>
    かっこの深さに応じて色付けしてくれる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/Fanael/rainbow-delimiters">https://github.com/Fanael/rainbow-delimiters</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;rainbow-delimiters)<br /> [/sourcecode]
  </p>
</div>

12 Sep 2015, 02:01

オンライン学習 Functional programming with Clojure をやってみた

Clojureが学べるMOOC, Functional programming with Clojureをやってみました.

特徴

Clojureの文法と 関数型の考え方が学べるコース.

  • immutable な データ構造
  • 高階関数
  • 再帰

動画があるわけではなくて、説明とexerciseが交互に並んでいる.

exerciseの評価方法がおもしろい. githubのリポジトリをclone して問題をとき、完了したら pull request を出す. すると、 travisがテストを実行して、点数を出す.

内容は、そこまで難しくない. 自分は、最終ページの応用問題をまだやっていないが、 ここまでの学習時間は20時間程度.

clojureは文法がシンプルなので、 この講座のなかだけで、一通りの作法はみにつく.

感想

書籍による学習よりも、楽しく文法を身につけることができた.

この講座をやることによって、基本的な文法は身についた(つもり). 忘れないようになにかに応用したいところだ. みんなどうやって、 clojure力をつけているのだろうか.

同じようなオンラインの学習教材として、4clojureというものがある. これからは、4clojureをやることで、clojure力をつけていこうと思う.

23 Aug 2015, 15:47

シンプルさが前に進む力となる Clojure

最近、Clojureに惹かれる. なぜだろうか? 以下、ポエム.

自分にはプログラミングの思想があるのだろうか?

自分がをプログラミングをするとき、よりどころとなる思想がない。

別に、思想なんかなくたって、プログラミングはできる. でも、どこか、虚しい。それは、人生の意味と同じだ.

つらいときも、苦しいときも、よりどころとなる思想があれば、 立ち向かっていけるような気がする. どんなにつらい境遇にいようとも、たちどころに力がみなぎってくる. 言葉には、そういう力があると信じている.

そんな、力がみなぎる思想が自分のプログラミングにも欲しいのだ.

プログラミング Clojure

プログラミング Clojureの 文章に心を打たれた.

  • Clojureはエレガントだ。
  • Clojureは「Lisp・リローデッド」だ。
  • Clojureは関数型言語だ。
  • Clojureは並行プログラミングを簡単にする。
  • ClojureはJavaを歓迎する。
  • Clojureは速い。

[sourcecode language=”text” title=”” ]
Clojureのあらゆる要素は、次の2つの概念から導かれる — 簡潔さと力だ
[/sourcecode]

カッコいいと思った. それは、理屈なく、感覚的にだ. この憧れの気持ちを大切にしよう. こういう気持ちが、熱意になるんだ.

簡潔さと力

小さいこと、一つずつのステップが大きなことへとつながっていくこと. そのような、考え方が好きだ.

それは、以前, 以下の文章にまとめた.

この文書にも感銘を受けた.

シンプルさが前に進む力となる. Clojureの思想は、魅力的だ. Clojureには、TDDやGTDに似たような魅力を感じている.

簡潔さと力、これを自分の拠り所にしようと思った.

小さく、一つずつ シンプルな関数を積み上げていく. それはやがて、大きな構造をなす. 全体は大きく、しかし秩序だっていて、シンプルにまとまっている. そんな、世界をClojureはみさせてくれるのだろうか?

26 Apr 2015, 07:26

Emacs でテクノを奏でる?! overtone 連携 と Emacs Live と を試す

はじめに

前回, overtone を起動しました.

今回は Emacs から利用するまでを試します.

Emacs Live

Emacs Live は Overtone を Emacs から操るための 環境, ツール群, Emacs の設定.

<p>
</p>

<ul class="org-ul">
  <li>
    <a href="https://github.com/overtone/emacs-live">https://github.com/overtone/emacs-live</a>
  </li>
</ul>

Install

<div class="outline-text-3" id="text-unnumbered-3">
  <p>
    overtone の設定は, 前回の記事を参照.
  </p>

  <ul class="org-ul">
    <li>
      <p>
        <a href="http://futurismo.biz/archives/3127">Clojure で楽器を演奏しよう! Overtone をインストールしてみた | Futurismo</a>
      </p>

      <p>
        以下のスクリプトを実行する.
      </p>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221; ]<br /> bash <(curl -fksSL https://raw.github.com/overtone/emacs-live/master/installer/install-emacs-live.sh) [/sourcecode] 

    <p>
      ~/.emacs.d に emacs live 用の環境が作成される.
    </p>

    <p>
      もし, すでに .emacs.d が存在する場合は, emacs-live-old-config ディレクトリに旧設定がコピーされる.
    </p></div> </div> 

    <div id="outline-container-unnumbered-4" class="outline-3">
      <h3 id="unnumbered-4">
        Getting Started
      </h3>

      <div class="outline-text-3" id="text-unnumbered-4">
        <ul class="org-ul">
          <li>
            lein repl 起動.
          </li>
          <li>
            emacs 起動.
          </li>
          <li>
            M-x cider-connect で lein に接続する <ul class="org-ul">
              <li>
                localhost/port 番号 (lein repl 起動時にコンソールに出る) を入れる.
              </li>
            </ul>
          </li>
        </ul>

        <p>
          これで, emacs 上から, repl を操作することができる.あとは, コンソー ルから overtone を利用するときと同じ.
        </p>

        <p>
          [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> # External server 起動<br /> $ user=> (use &#8216;overtone.core)<br /> $ user=> (boot-external-server)
        </p>

        <p>
          # 音がでるか確認. ピーっと音が出れば OK.<br /> user=> (demo (sin-osc))<br /> [/sourcecode]
        </p>
      </div>
    </div>

    <div id="outline-container-unnumbered-5" class="outline-3">
      <h3 id="unnumbered-5">
        ファイルに音楽を書く.
      </h3>

      <div class="outline-text-3" id="text-unnumbered-5">
        <p>
          github にサンプルの音楽が置いてある.
        </p>

        <ul class="org-ul">
          <li>
            <a href="https://github.com/overtone/overtone/wiki/Swing">https://github.com/overtone/overtone/wiki/Swing</a>
          </li>
        </ul>

        <p>
          適当なファイルを作成して, コピペ後, C-x C-e でひとつずつ評価すると, コードが repl に送信されて, 音がなる. Live Coding !!
        </p>
      </div>
    </div></div> 

    <div id="outline-container-unnumbered-6" class="outline-2">
      <h2 id="unnumbered-6">
        自分の Emacs で overtone をつかう
      </h2>

      <div class="outline-text-2" id="text-unnumbered-6">
        <p>
          overtone を利用する度に自分の Emacs 設定を Emacs live に置き換えたくは ないので, 自分の Emacs 環境で overtone を利用する方法を試す.
        </p>

        <p>
          Emacs Live を利用すためには, 以下を入れる必要あり.
        </p>

        <ul class="org-ul">
          <li>
            clojure-mode
          </li>
          <li>
            cider
          </li>
        </ul>

        <div data-theme="default" data-height="155" data-width="500" data-github="clojure-emacs/cider" class="github-card">
        </div>

        <p>
        </p>

        <p>
          自分は, el-get からインストールした.
        </p>
      </div>

      <div id="outline-container-unnumbered-7" class="outline-3">
        <h3 id="unnumbered-7">
          clojure-mode
        </h3>

        <div class="outline-text-3" id="text-unnumbered-7">
          <p>
            Clojure のためのメジャーモード.
          </p>

          <ul class="org-ul">
            <li>
              <a href="https://github.com/clojure-emacs/clojure-mode">https://github.com/clojure-emacs/clojure-mode</a>
            </li>
          </ul>

          <p>
            [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-mode)<br /> [/sourcecode]
          </p>
        </div>
      </div>

      <div id="outline-container-unnumbered-8" class="outline-3">
        <h3 id="unnumbered-8">
          cider
        </h3>

        <div class="outline-text-3" id="text-unnumbered-8">
          <p>
            Clojure のためのインタラクティブな開発環境.
          </p>

          <ul class="org-ul">
            <li>
              <a href="https://github.com/clojure-emacs/cider">https://github.com/clojure-emacs/cider</a>
            </li>
          </ul>

          <p>
            [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;cider)<br /> (add-hook &#8216;clojure-mode-hook &#8216;cider-mode)<br /> (add-hook &#8216;cider-mode-hook &#8216;cider-turn-on-eldoc-mode)<br /> [/sourcecode]
          </p>
        </div>
      </div>

      <div id="outline-container-unnumbered-9" class="outline-3">
        <h3 id="unnumbered-9">
          Getting Started
        </h3>

        <div class="outline-text-3" id="text-unnumbered-9">
          <p>
            Emacs Live と起動方法は同じ. 音が出れば OK.
          </p>
        </div>
      </div>
    </div>

    <div id="outline-container-unnumbered-10" class="outline-2">
      <h2 id="unnumbered-10">
        おわりに
      </h2>

      <div class="outline-text-2" id="text-unnumbered-10">
        <p>
          Emacs Live には, いろいろ便利な関数や色が定義されているので, 時間をみて Emacs Live の リポジトリを眺めてみよう.
        </p>

        <p>
          今日はここまで!
        </p>
      </div>
    </div>

    <div id="outline-container-unnumbered-11" class="outline-2">
      <h2 id="unnumbered-11">
        Special Thanks
      </h2>

      <div class="outline-text-2" id="text-unnumbered-11">
        <ul class="org-ul">
          <li>
            <a href="http://bzg.fr/emacs-org-babel-overtone-intro.html">Emacs Org and Overtone quick intro</a>
          </li>
          <li>
            <a href="http://atsuya046.hatenablog.com/entry/2015/02/11/232316">Emacs で Overtone 演奏環境構築 &#8211; のぶ Lab.</a>
          </li>
        </ul>
      </div>
    </div>

19 Apr 2015, 12:37

Clojure で楽器を演奏しよう! Overtone をインストールしてみた

はじめに

前回, overtone を起動しました.

今回は Emacs から利用するまでを試します.

Emacs Live

Emacs Live は Overtone を Emacs から操るための 環境, ツール群, Emacs の設定.

Install

overtone の設定は, 前回の記事を参照.

bash <(curl -fksSL https://raw.github.com/overtone/emacs-live/master/installer/install-emacs-live.sh)

~/.emacs.d に emacs live 用の環境が作成される.

もし, すでに .emacs.d が存在する場合は, emacs-live-old-config ディレクトリに旧設定がコピーされる.

Getting Started

  • lein repl 起動.
  • emacs 起動.
  • M-x cider-connect で lein に接続する
    • localhost/port 番号 (lein repl 起動時にコンソールに出る) を入れる.

これで, emacs 上から, repl を操作することができる.あとは, コンソー ルから overtone を利用するときと同じ.

# External server 起動
$ user=> (use 'overtone.core)
$ user=> (boot-external-server)

# 音がでるか確認. ピーっと音が出れば OK.
user=> (demo (sin-osc))

ファイルに音楽を書く.

github にサンプルの音楽が置いてある.

適当なファイルを作成して, コピペ後, C-x C-e でひとつずつ評価すると, コードが repl に送信されて, 音がなる. Live Coding !!

自分の Emacs で overtone をつかう

overtone を利用する度に自分の Emacs 設定を Emacs live に置き換えたくは ないので, 自分の Emacs 環境で overtone を利用する方法を試す.

Emacs Live を利用すためには, 以下を入れる必要あり.

  • clojure-mode
  • cider

自分は, el-get からインストールした.

clojure-mode

Clojure のためのメジャーモード.

(require 'clojure-mode)

cider

Clojure のためのインタラクティブな開発環境.

(require 'cider)
(add-hook 'clojure-mode-hook 'cider-mode)
(add-hook 'cider-mode-hook 'cider-turn-on-eldoc-mode)

Getting Started

Emacs Live と起動方法は同じ. 音が出れば OK.

おわりに

Emacs Live には, いろいろ便利な関数や色が定義されているので, 時間をみて Emacs Live の リポジトリを眺めてみよう.

今日はここまで!

Special Thanks

18 Apr 2015, 23:58

Clojure で Hello, World

はじめに

千里の道も Hello World からはじまるというユダヤの教えがありますが, 今回は, Clojure で Hello, World をしてみます.

[toc]

Environment

  • Arch Linux
  • Java 1.7

Clojure とは

Clojure は JVM 上で動く Lisp 系モダン関数型言語.

- 以下の本によると, Clojure の魅力は, **簡潔さと力**. つまり... **Elegant**

インストール

事前に, JDK6 以上 をインストールしておくこと.

ダウンロード

以下からダウンロードして解凍.

leiningen

leingen は, clojure 用のビルドツール.

github のページにしたがい lein スクリプトをインストール.

Hello, World

プロンプトから起動

Clojure 起動.

java -cp clojure-1.6.0.jar clojure.main

=>user というプロンプトがでる. 以下を入力で, Hello, World!!

user=> (println "Hello, World!!")
Hello, World!!
nil

REPL から実行

lein から REPL (インタラクティブスクリプト) を呼び出す.

lein repl

user=>というプロンプトがでる.あとは, 上と同じ.

ファイルから実行

ファイルに保存して実行する. 拡張子は, .clj

echh "(println \"Hello, World!!\")" >> hello_world.clj
java -cp clojure-1.6.0.jar clojure.main hello_world.clj

Special Thanks