shibuyalisptt#4 lt 他言語で作ったwebページをlispでも!
TRANSCRIPT
他言語で作ったWEBページを Lispでも!
Shibuya.Lisp#4 LT ( 2009/11/07 ) making
発表するネタの背景 (建前 )
Lisp は入門者(特に WEB 系の人)に、何か作ってみようと思わせるのに不向き
何か作って公開するのが一番身に付くプログラミング勉強法だと思っている
とりあえず WEB ページを Lisp でもつくれればいいんじゃないか できれば他の言語のものと共存できる形で
例えば
レイアウト
ヘッダー
フッター
サイドバーメインコンテンツ
ここは共通
ここを色々な言語で作って
埋め込めるといい
ということで
いろいろな言語でテンプレートを共有できるテンプレートエンジンを作ろう! (cl-who もいいけど )
他言語でテンプレートを共有できるテンプレートエンジン「 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"))
バインディング生成の流れC
++
で実
装し
たク
ラス
SW
IG
各言
語用
のメ
ソッ
ドラ
ッパ
ー関
数群
各言
語の
FFIラ
ッパ
ー
各言
語の
クラ
ス
SW
IG用
イン
タフ
ェー
スフ
ァイ
ル
cffi:defcfun
CLOS
.h をインクルードするのみ
まだC++
DLL
テンプレートファイル
<{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
デモ
同じレイアウトのページを CL on Hunchentoot PHP on Apacheで
BlackPine
http://code.google.com/p/blackpine/ で公開中(バージョン 0.3.1 )
興味があれば使ってみてください ドキュメントはほとんどない subversion 上の最新版は asdf-install に対応しています
条件分岐・繰り返しにまだ対応していないので実用的ではないですが、、、
あくまで他言語でテンプレートを共有することが目的 機能拡張は C++ でプラグインを作成 ビルドに boost 要ります。(さくらインターネットで動いていた)
ふつうのレンタルサーバーだと CL 版は CGI でしか動きません。。。 背景の説明は完全に後付けです( CL 対応は一番最後だし、、) VPS か自宅サーバーで使うのがおすすめ
個人的には cl-who でいいんじゃないかと思ってる
おまけ(宣伝)
Twitter で退社時間を記録するTawisya( たうぃっしゃー ) 作りました
http://tawisya.ik.am 退社時に @taisya を先頭につけてつぶや
くだけで OK http://tawisya.ik.am/user/{twitterのID}
でグラフ表示します
つかってください!
ご清聴ありがとうございました