shibuyalisptt#4 lt 他言語で作ったwebページをlispでも!

12
他他他他他他他 WEB 他他他他 Lisp 他 Shibuya.Lisp#4 LT 2009/11/07 making

Upload: toshiaki-maki

Post on 10-May-2015

1.561 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

他言語で作ったWEBページを Lispでも!

Shibuya.Lisp#4 LT ( 2009/11/07 )  making

Page 2: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

自己紹介

making ( まきんぐ と呼びます ) twitter: making url: http://ik.am

Page 3: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

発表するネタの背景 (建前 )

Lisp は入門者(特に WEB 系の人)に、何か作ってみようと思わせるのに不向き

何か作って公開するのが一番身に付くプログラミング勉強法だと思っている

とりあえず WEB ページを Lisp でもつくれればいいんじゃないか できれば他の言語のものと共存できる形で

Page 4: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

例えば

レイアウト

ヘッダー

フッター

サイドバーメインコンテンツ

ここは共通

ここを色々な言語で作って

埋め込めるといい

Page 5: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

ということで

いろいろな言語でテンプレートを共有できるテンプレートエンジンを作ろう! (cl-who もいいけど )

Page 6: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

他言語でテンプレートを共有できるテンプレートエンジン「 BlackPine」!

C++ で書いて SWIG(*) で各種言語用バインディングまとめて作成 cffi/python/perl/php/ruby/lua/java/guile

に対応 インタフェースは PHP の Smarty 風

* : http://swig.org

$bp = new BlackPine();$bp->setTemplateDir("./template");$bp->assign("foo", "hoge");$bp->assign("bar", "hoge");echo $bp->toString(”layout.bp");

(defvar *bp* (make-instance 'black-pine))(set-template-dir *bp* "./template")(assign *bp* "foo" "hoge")(assign *bp* "bar" "hoge”)(format t (to-string *bp* ”layout.bp"))

Page 7: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

バインディング生成の流れC

++

で実

装し

たク

ラス

SW

IG

各言

語用

のメ

ソッ

ドラ

ッパ

ー関

数群

各言

語の

FFIラ

ッパ

各言

語の

クラ

SW

IG用

イン

タフ

ェー

スフ

ァイ

cffi:defcfun

CLOS

.h をインクルードするのみ

まだC++

DLL

Page 8: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

テンプレートファイル

<{include header.bp}><{$foo}><{$bar}><{include sidebar.bp}><{include footer. bp}>

layout.bp

Header!!<{$header}>

header.bp

Sidebar!!<{$sidebar}>

sidebar.bp

Footer!!<{$footer}>

footer.bp

Page 9: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

デモ

同じレイアウトのページを CL on Hunchentoot PHP on Apacheで

Page 10: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

BlackPine

http://code.google.com/p/blackpine/ で公開中(バージョン 0.3.1 )

興味があれば使ってみてください ドキュメントはほとんどない subversion 上の最新版は asdf-install に対応しています

条件分岐・繰り返しにまだ対応していないので実用的ではないですが、、、

あくまで他言語でテンプレートを共有することが目的 機能拡張は C++ でプラグインを作成 ビルドに boost 要ります。(さくらインターネットで動いていた)

ふつうのレンタルサーバーだと CL 版は CGI でしか動きません。。。 背景の説明は完全に後付けです( CL 対応は一番最後だし、、) VPS か自宅サーバーで使うのがおすすめ

個人的には cl-who でいいんじゃないかと思ってる

Page 11: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

おまけ(宣伝)

Twitter で退社時間を記録するTawisya( たうぃっしゃー ) 作りました

http://tawisya.ik.am 退社時に @taisya を先頭につけてつぶや

くだけで OK http://tawisya.ik.am/user/{twitterのID}

でグラフ表示します

つかってください!

Page 12: ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!

ご清聴ありがとうございました