2013-05-06

はてブのホットエントリー情報をClojureで取得

提供されているRSSフィードを使用してタイトル・URL・はてブ数・日付の情報を出力してみる。フィードのパースにはclojure.xml/parseを使用した。

1.5から提供されたas->マクロを使用してみた。->や->>よりわずかにコード量がふえるが、使い分けをしなくてよいのとパラメーターが省略されない分、後で見たときに->や->>よりも個人的にわかりやすいと思った。

2013-04-03

Compojure + Leiningenでプロジェクトのテンプレート作成

$ lein new 'プロジェクト名'
ではなく、
lein new compojure 'プロジェクト名'
で作成すると、Compojureを使う際に必要な設定を記載したproject.cljとhandler.cljを自動生成してくれる。
以下は $ lein new compojure web-app で実行したときにできたファイル。(Leiningen 2.1.2)
(defproject web-app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [compojure "1.1.5"]]
  :plugins [[lein-ring "0.8.2"]]
  :ring {:handler web-app.handler/app}
  :profiles
  {:dev {:dependencies [[ring-mock "0.1.3"]]}})
(ns web-app.handler
  (:use compojure.core)
  (:require [compojure.handler :as handler]
            [compojure.route :as route]))

(defroutes app-routes
  (GET "/" [] "Hello World")
  (route/not-found "Not Found"))

(def app
  (handler/site app-routes))

$ lein ring server でサーバーが起動し、localhost:3000でブラウザも起動してくれる。
Hello worldをブラウザに出しただけだが1行もソースコードを書いてない。以前に比べてだいぶ楽になっている。
あと、ファイルの変更後にサーバー再起動は不要。ブラウザをリフレッシュするだけでよい。

2013-03-31

Clojure + Emacsの環境構築メモ

最近作り直したのでメモ。Emacs Liveを使って環境構築。

Emacs LiveはEmacsの便利なプラグインがたくさん入っているオールインワンパッケージみたいなもの(多分)。
Clojureの開発環境を構築する際に必要なプラグインも入っている。Emacs Liveをインストールすれば使い勝手のよい開発環境がすぐ手に入るので、自分のようなエセEmacs使いにはとても便利。

前提:Emacs24がインストール済み、Java6 or 7 がインストール済みであること

leiningenのインストール

homebrewでインストール
$ brew update #古いとバージョン1系がダウンロードされるので念のため
$ brew install leiningen

homebrewを使用しない場合、pathが通っているところ(/usr/local/binなど)にダウンロードし実行権限をつける
$ wget https://raw.github.com/technomancy/leiningen/stable/bin/lein
$ chmod 755 lein

lein -version とコマンドを打ち、Leiningen 2.0.0 のようにバージョンが2系が表示されればインストール成功。

Emacs Liveのインストール

~/.emacs.d配下にgit clone もしくはZIPファイルをダウンロードして展開したものを置く。
※すでに~/.emacs.dフォルダがある場合はバックアップを取っておく

git cloneで取ってくる場合。
$ mkdir ~/.emacs.d
$ git clone https://github.com/overtone/emacs-live.git ~/.emacs.d/
zipファイルをダウンロードして展開する場合
https://github.com/overtone/emacs-liveのZIpボタンからダウンロード


Emacs・nREPLの起動


Emacsを起動して以下のようなスプラッシュ画面が表示されればEmacs Liveのインストールは成功している。


Emacs上で M-x nrepl-jack-in と打ちREPLを起動。ポップアップでコード補完とドキュメントが見れる。


コード補完のポップアップはデフォルトでは2文字入力した時点で起動するが、起動する文字数を変更したい場合
(setq ac-auto-start xxx) #xxxには補完を開始してほしい文字数を設定。
を~/.emacs.d/init.elに追記すれば補完が開始される文字数を変更できる。 xxxの部分に数値ではなくnilを設定するとTABを打った時点でコード補完が起動するようになるが、なぜかポップアップではなく別バッファで候補が表示されてしまう。

あと、開始カッコを書くと自動的に閉じ括弧が自動補完されてしまうためREPL上で改行したい場合は C-j と打つ必要がある。


キーボードショートカット

REPL上ではなく、clojure-modeでソースを書いているときに自分がよく使用するやつ
  • C-x C-e カーソル位置手前のフォームが評価され、エコー領域に結果が表示される
  • C-c C-m カーソル位置手前のマクロの展開結果(macroexpand-1)がバッファに表示される
  • C-c M-m カーソル位置手前のマクロの展開結果(macroexpand-all)がバッファに表示される
  • C-c C-s カーソル位置にある関数・マクロのソースコードがバッファに表示される
  • M-. カーソル位置にある関数・マクロのソースコードにジャンプ
  • M-, M-.でジャンプしてきた元のソースコードに戻る

参考

2013-01-06

「RailsによるアジャイルWebアプリケーション開発 第4版」の第9章でエラーになる

はまったのでメモ

Railsの勉強で「RailsによるアジャイルWebアプリケーション開発 第4版」を写経しているのだが、第9章の「イテレーションD3:ボタンの追加」でActiveModel::MassAssignmentSecurity::Errorというエラーが発生してしまう。

原因は自分の環境のRailsは3.2なのだが、本はバージョン3.1を前提として書かれており、3.2からは更新対象の属性にはattr_accessibleを付けないといけないらしい。ということでattr_accessibleを付けたら問題なく動作した。


参考



素数夜曲 第3夜


  • 二項展開:冪乗を展開する公式
  • 二項係数:二項展開の係数
  • パスカルの三角形:二項展開の係数を三角形状に並べたもの
  • フラクタル図形:自分自身の部分を模倣して増殖していく図形
  • フィボナッチ数列:以下式が定まる数列(1,1,2,3,5,8,13,21,34,55,89,144...)
  •  

  • フィボナッチ数列の連続する三つの数をa < b < c とすると以下の関係が成り立つ

  • コラッツの問題:nが奇数の場合3n + 1し、nが偶数の場合2で割ると全てのnが最終的に1になるかどうか


Clojureで書いてみる

2013-01-04

素数夜曲 第2夜

  • 完全数:自分自身を除くすべての約数を足し合わせた数が自身に一致する数。
  • 過剰数:自分自身を除くすべての約数を足し合わせた数が自身より大きくなる数
  • 不足数:自分自身を除くすべての約数を足し合わせた数が自身より小さくなる数
  • 親和数:自分自身を除くすべての約数を足し合わせた数の自身を除くすべてを除く約数を足し合わせた数が元の数になるもの 例)220と280
  • 平方数は約数を奇数個もつ、それ以外はすべて偶数個もつ。これで平方数の判定ができる
  • すべてのピタゴラス数は以下の式で表すことができる(m > nであること)


Clojureで書いてみる

2013-01-03

3個以上の数の最大公約数、最小公倍数をClojureで求める

素数夜曲の第1夜では2つの数値に対する最大公約数と最小公倍数の求め方が書いてあったが、数が3つ以上の場合はどうするのかと思ったのでメモ。

3つの数値A,B,Cがあり、その最大公約数を求めたい場合は、まずAとBの最大公約数を求めその数とCの最大公約数をもとめればよい。4つ5つと数が増えても考え方は同じ。最小公倍数の場合も同じような考え方でよいはず。

Clojureで書くとこんな感じ。reduce使うと綺麗に書ける

2013-01-02

素数夜曲 第1夜

tumberが使いにくいので戻ってきた。

以前一度読んだ素数夜曲をちまちまとメモをしながら再度読み直してみる。
  • 真の約数:1とその数自身を除いた約数
  • 素数:真の約数を持たない自然数
  • 偶素数:偶数の素数。2のみ
  • 奇素数:奇数の素数
  • 双子素数:2つの素数の差が2である組
  • 合成数:素数の積で表される数
  • 素因数分解:合成数を素数の積に分解すること
  • 素因数:合成数の約数となる素数
  • 最大公約数:ユーグリッドの互除法で求められる
  • 最小公倍数:与えられた2数の積 / 最大公約数で求められる

最大公約数と最小公倍数を求める関数をClojureで書くとこんな感じ