julia
ここのところ、朝活と称してスバタやタリーズでドヤ顔をしつつ、
エンターキーを押す活動を行っている。
朝8時30分から9時30分まで。だいたい1時間弱。
今日は何をしようかな、と思ってネタ探ししていた。
そういえばjulia触れてないなあとふと思った。
...よくわかってないので、簡単なWeb Application Frameworkをいじることで
体験しようかなと考えた。
julia?
Good performance, approaching that of statically-compiled languages like C
と書かれている。
パフォーマンスチェックを自分でやったわけではないけど。
他人の意見によると速くてイケてるのでどっか(機械学習分野)で流行り始めてるとのこと[要出典]
公式サイトのパフォーマンス比較を見ると、Fortranといい勝負だ。
自分は試していないのだが、Pythonの関数も呼び出せる。
juliaのインストール
Mac OS Xであるなら、野良Formulaを利用してインストールする。
詳しくはREADME.mdを参考のこと。
エディタでコードハイライトさせたい
vim使ってる。探してみたらあった。
NeoBundleを使ってインストールをする。
NeoBundle 'JuliaLang/julia-vim'
vim +NeoBundleInstall +qall
コードハイライトの確認
問題なし。
WAF Morsel
julia web frameworkでググってでてきたMorselをいじることにした。
sinatra likeなWeb Application Frameworkとのこと。
MeddleやHTTPServerなどの
ライブラリを利用しているようだ。
https://github.com/JuliaLang/Meddle.jl
https://github.com/JuliaLang/HttpServer.jl
インストール
julia REPLを立ちあげ、コマンドを打ち込んで
Morselをインストールする。
…インストールが始まるのだけど、これは楽だなあ
早速Morselを利用してアプリを書いてみる。
アプリケーションの実行
MorselのREADME.mdにあるサンプルコードをそのまま書いて実行する。
using Morsel
app = Morsel.app()
route(app, GET | POST | PUT, "/") do req, res
"This is the root"
end
get(app, "/about") do req, res
"This app is running on Morsel"
end
start(app, 8000)
このファイルをtest.jlとして保存して、
julia test.jl
という形で起動すれば良い。
ブラウザでアクセスしてみる。
うむ。起動している。
テンプレートエンジン使いたい
テンプレートエンジンを利用して組み込んでみるか…
template engineはMustache.jlを利用する
口ひげさん、色々な言語に対して移植されてるんだな。
Mustacheのインストール
MorselのようにREPLを使ってインストール。
組み込み
以下の様な形でソースを書く。
using Morsel
using Mustache
app = Morsel.app()
tpl = mt"Welcome to {{message}}."
route(app, GET | POST | PUT, "/") do req, res
"This is the root"
end
get(app, "/<message>") do req, res
render(tpl, {"message" => req.state[:route_params]["message"]})
end
start(app, 8000)
動作チェック
動かしてみる。
julia test2.jl
Morselで困ったこと
…Morselのspec.jlでは、
req.resources[:parameter]
でパスが取れるような記述があるのだが、
# Route with URL vars
route(app, "/hello/<id::Int>/<name::%[a-z]{3}[0-9]{2}>") do req, res
req.resources[:id] == 99 ? string("Go to hell ", req.resources[:name]) : string("Hello ", req.resources[:name])
end
spec.jlのように書くとキーが存在しないと怒られてしまう。
例えば、以下の感じで書くと...
get(app, "/<message>") do req, res
render(tpl, {"message" => req.resources[:message]})
end
こうなる。キーが見つからない。
結局、コードを読んで
res.stateに:route_paramsに対してパスを突っ込んでるのが
わかったのでそれを利用するようにした。
その他
Qiita、juliaのコードハイライト対応してた。