11September
MobaSiF::Template@YAPC::Asia 2009
本日、YAPC::Asia 2009にて、MobaSiF::Template について発表してきました。
正直なところ、うりは "速さ" しかないと思っているので、そこを全面に押し出しました。また、なぜ速く処理できるのかといった、裏側についても説明しました。
今後とも、MobaSiF::Template をよろしくおねがいします。
発表内容について
今回は、利用方法やベンチマークなどの視点で MobaSiF::Template を紹介しました。正直なところ、うりは "速さ" しかないと思っているので、そこを全面に押し出しました。また、なぜ速く処理できるのかといった、裏側についても説明しました。
発表資料@Slideshare
MobaSiF::Template Introduction
View more documents from Tadashi Matsuda.
github/CPAN
MobaSiF::Template は github / CPAN で開発および公開しています。- github
- http://github.com/bobpp/perl-MobaSiF-Template/tree
ぜひ fork して開発に参加してください! - CPAN
- http://search.cpan.org/~bobpp/MobaSiF-Template/
間に合いました!w
今後とも、MobaSiF::Template をよろしくおねがいします。
06September
YAPC::Asia 2009 でお話しします
今週、2009/09/10,11 東京工業大学大岡山キャンパスで行われる YAPC::Asia 2009 の 9/10 のセッションで発表する事になりました。
「高速なテンプレートエンジン "MobaSiF::Template"」と題して、2009/09/10 14:30〜 より 20min にわたって、社内利用フレームワークのテンプレートエンジン部分にスポットを当てて、ベンチマーク等でこのテンプレートエンジンのよさをお伝えできればと思います。
いままで、YAPC::Asia に行った事がなく、初参加でいきなり発表という不思議な状態ではありますが、がんばろうと思いますので、このような内容に興味ご関心のある方は、是非会場まで足を運んでいただければと思います。
よろしくおねがいします。
「高速なテンプレートエンジン "MobaSiF::Template"」と題して、2009/09/10 14:30〜 より 20min にわたって、社内利用フレームワークのテンプレートエンジン部分にスポットを当てて、ベンチマーク等でこのテンプレートエンジンのよさをお伝えできればと思います。
いままで、YAPC::Asia に行った事がなく、初参加でいきなり発表という不思議な状態ではありますが、がんばろうと思いますので、このような内容に興味ご関心のある方は、是非会場まで足を運んでいただければと思います。
よろしくおねがいします。
28April
PHP勉強会でMobaSiFのこと話した
第42回PHP勉強会でPerlフレームワークのMobaSiFについてしゃべってきました。
sotarokにそそのかされてのこのこ出てきたんですが、Perlの話しとかしていいんだろうか。
という最大の疑問を抱えたまま、会場入り。
そういえば、こういう外部に対して、技術ネタを発表するって初めてなので、緊張しまくりのまま発表しました。
つくったものをプレゼンした事はあっても、基本的に学校内の話ですし、それでも結構緊張するのに、外部向けとか。。。みんなやさしくしてねー!みたいな。
コードとか出してもシンタックスの説明からしていたら、時間に収まらないので書けないですし、
発表のネタ元のMobaSiFも今の「モダンPerl」的なフレームワークでもないので、"今の"Perlの世界を映す材料にもならないからです。
もしこの発表で、フレームワーク開発やフレームワークに対する考え方が少しでも広がっていただけたら幸いです。
本当に慣れているからだけなのです。
しかし、比較を始めてからもっとRails世代のフレームワークと比較すべきだったと後悔しています。
これは、EthnaとMobaSiFって一部似ているところがあって、もっと違いすぎるフレームワークと比較した方がよかったなと思います。
とりあえず、発表してみた訳ですが、また何か発表してもいいなー、次はEthnaネタだな!
sotarokにそそのかされてのこのこ出てきたんですが、Perlの話しとかしていいんだろうか。
という最大の疑問を抱えたまま、会場入り。
そういえば、こういう外部に対して、技術ネタを発表するって初めてなので、緊張しまくりのまま発表しました。
つくったものをプレゼンした事はあっても、基本的に学校内の話ですし、それでも結構緊張するのに、外部向けとか。。。みんなやさしくしてねー!みたいな。
発表内容について
今回、sotarokが言っていたのは「PHPerはほかの言語の世界も知るべき」ということで自分を呼んだとの事ですが、結果的にこういうフレームワークに対するアプローチもあるんだよというのを提示することに専念しました。コードとか出してもシンタックスの説明からしていたら、時間に収まらないので書けないですし、
発表のネタ元のMobaSiFも今の「モダンPerl」的なフレームワークでもないので、"今の"Perlの世界を映す材料にもならないからです。
もしこの発表で、フレームワーク開発やフレームワークに対する考え方が少しでも広がっていただけたら幸いです。
ustream
ここから発表を見る事も出来るらしいです!発表資料
第42回PHP勉強会 MobaSiF 発表資料
View more presentations from bobpp.
Ethnaを比較対象にした訳
若干ネタバレですが、本当に慣れているからだけなのです。
しかし、比較を始めてからもっとRails世代のフレームワークと比較すべきだったと後悔しています。
これは、EthnaとMobaSiFって一部似ているところがあって、もっと違いすぎるフレームワークと比較した方がよかったなと思います。
rhaco2
どうみても変態。まずDjango触ってみてから触ってみたい。Ethna
今回は不要に対決姿勢な面もありましたがw やっぱり、いまだにPHPで何か書くならEthnaだと自分は思っているのでAppObjectは残してあげてくださいwとりあえず、発表してみた訳ですが、また何か発表してもいいなー、次はEthnaネタだな!
07February
Rails: Array::to_xmlのすごい点
論より証拠
すばらしすぎる。
>> [{:a=> 1, :b => 2}, {:a => 3, :b => 4}].to_xml(:root => "Symbols")
=> "<?xml version="1.0" encoding="UTF-8"?>
<Symbols>
<Symbol>
<a type="integer">1</a>
<b type="integer">2</b>
</Symbol>
<Symbol>
<a type="integer">3</a>
<b type="integer">4</b>
</Symbol>
</Symbols>
"
このように、配列に対してのto_xmlで :root を複数形で指定すると、その要素が単数形のノードとなって出力されるというミラクル。すばらしすぎる。
07December
Rails: vim/rubyのomni補完
railsの開発はもとより、PHPの開発もvimになり始めつつあるBoBppです。
まだ移動がカーソルキーなのが個人的に問題だと感じております。
そんなことより、Vim/RubyとRails.vimを入れてOmni補完で関数楽々補完したいぜーって思ってたのですが、しても補完してくれませんでした。
調べていくうちに、Vimのrubyサポートがないと動かないことを知ったので、チェックしたところOffとのこと。
今回のVimはFreeBSDのportsから入れたのですが、デフォルトではOffなのですね。そこで
すると華麗に動作。

正直なところ、HABTMくらいは補完できると助かるので、この機能はやはりうれしいです。
まだ移動がカーソルキーなのが個人的に問題だと感じております。
そんなことより、Vim/RubyとRails.vimを入れてOmni補完で関数楽々補完したいぜーって思ってたのですが、
調べていくうちに、Vimのrubyサポートがないと動かないことを知ったので、チェックしたところOffとのこと。
今回のVimはFreeBSDのportsから入れたのですが、デフォルトではOffなのですね。そこで
# make deinstall
# make WITH_RUBY=yes make install clean
してインストールしなおしました。すると華麗に動作。

正直なところ、HABTMくらいは補完できると助かるので、この機能はやはりうれしいです。
31October
DreamhostにExtExif
Railsで作っているものの設置先があれこれあってDreamhostです。
そのプロジェクトで、Exifを扱うことが発生したので、とりあえずExif扱えるライブラリを入れてみようということで色々調べた結果GPSが扱えたりするExtExifにしようと決意。
早速インストールしようと思ったのだが、libexifが無いとのこと。
とりあえず、自分のホームに作ることにした。
次にExtExifのセットアップ。しかし、自前で用意したライブラリ(ここではlibexif)のディレクトリを伝える手段がわからない。
アレコレ調べていくうちに、mkmfのconfigureオプションというのを見つけた。早速実行。
そのプロジェクトで、Exifを扱うことが発生したので、とりあえずExif扱えるライブラリを入れてみようということで色々調べた結果GPSが扱えたりするExtExifにしようと決意。
早速インストールしようと思ったのだが、libexifが無いとのこと。
とりあえず、自分のホームに作ることにした。
$ cd ~
$ mkdir libs
$ cd <i>libexifの解凍先</i>
$ ./configure --prefix=~/libs
$ make
$ make install
とりあえず、これでlibexifが準備できました。次にExtExifのセットアップ。しかし、自前で用意したライブラリ(ここではlibexif)のディレクトリを伝える手段がわからない。
アレコレ調べていくうちに、mkmfのconfigureオプションというのを見つけた。早速実行。
$ gem install extexif -- --with-opt-dir=~/libs
これでいけました!
12September
Rails: FreeBSD + sqlite3
あるテストでsqlite3が必須なような感じだったので、SQLite3をインストールすることに。
例によってportsで入れました。
あと、sqlite3-rubyも入れました。
調べていくと、sqlite3-rubyのインストール時にswigってのが必要らしいのでセットアップしてもダメ。
途方にくれかけたのですが、FreeBSD上でのsqlite3でFTS2を使うとダメらしい(参考: freebsdグループ - くれすのFreeBSD日記 - sqlite3を起動するとSegmentation Faultする)ので、外してみると普通に問題なくどうさ。
sqlite自体の問題だとは思わなかったのでかなり予想外です。
例によってportsで入れました。
# cd /usr/ports/databases/sqlite3
# make install clean
しました。あと、sqlite3-rubyも入れました。
# gem install sqlite3-ruby
これでrakeすると、なんどやってもrubyがSegmentation Faultします。調べていくと、sqlite3-rubyのインストール時にswigってのが必要らしいのでセットアップしてもダメ。
途方にくれかけたのですが、FreeBSD上でのsqlite3でFTS2を使うとダメらしい(参考: freebsdグループ - くれすのFreeBSD日記 - sqlite3を起動するとSegmentation Faultする)ので、外してみると普通に問題なくどうさ。
sqlite自体の問題だとは思わなかったのでかなり予想外です。
06September
Rails: Migrationがぶつかったとき
Railsで共同開発をしている初期段階とかだと、マイグレーションファイルのバージョンがぶつかることも多々あると思います。
そんなときの回避方法をまとめておきたいと思います。なお、ぶつかる場面が各自モジュールを個別に作っていると仮定します。同一テーブル等の衝突については以下で回避できない場合があると思います。
こんなかんじでしょうか。そもそも、こうならないような工夫が必要だと思いますが。
あと、これでうまくいくためのコツですがマイグレーションファイルは作成後すぐsvn addしないほうがいいと思います。すぐaddしちゃうとこういうのがおきたときのリネームとかややこしくなったりするので。
これを自動化するスクリプトとかあればいいなあ。と思った。
ちょっと時間があれば作ってみるかな。
そんなときの回避方法をまとめておきたいと思います。なお、ぶつかる場面が各自モジュールを個別に作っていると仮定します。同一テーブル等の衝突については以下で回避できない場合があると思います。
- #1. svn upとかしてぶつかった。
- なんでぶつかるのー?と悲観にくれましょう。
例として、[010_hoge.rb, 011_fuga.rb]を作っていてマイグレーション済みとし、010_piyo.rbがリポジトリから追加されたファイルとしましょう。現在、010がぶつかりましたね。orz - #2. ぶつかったファイルをリネームする
- リポジトリ管理されている、衝突したバージョンのファイルだけ手元の環境でマイグレーションできるファイル名にリネームします。
例では、
$ mv 010_piyo.rb 012_piyo.rb010_piyo.rbをリネーム対象とし、012_piyo.rbとし、手元の環境では問題なくマイグレーション出来るようにします。 - #3. マイグレーション
- ここまできたらマイグレーションするしかありません。
$ rake db:migrateしちゃってください。勢いも大切? - #4. リネームしたファイルを削除してrevert.
- このままだと、リポジトリのファイルをリネームしてしまい、他人に影響が出まくるので、リポジトリのファイルは元に戻します。
例では、
$ svn revert 010_piyo.rbとして、010_piyo.rbを復活させて、リネームした012_piyo.rbを削除しています。
$ rm 012_piyo.rb - #5. 手元のファイルをリネームする
- 先にコミットされたので、自分は引くしかありません。手元のファイルを回りが問題なくマイグレーションできるようなファイル名にリネームしてください。
例では、
$ mv 010_hoge.rb 011_hoge.rbとして、010だったファイルを011へ、011だったファイルを012にして他人がマイグレーションできるようにしています。
$ mv 011_fuga.rb 012_fuga.rb - #6. 悲劇にあわないためにコミット!
- この作業、結構面倒なのでこういう悲劇が起きないように急いでコミットしましょう(笑)
こんなかんじでしょうか。そもそも、こうならないような工夫が必要だと思いますが。
あと、これでうまくいくためのコツですがマイグレーションファイルは作成後すぐsvn addしないほうがいいと思います。すぐaddしちゃうとこういうのがおきたときのリネームとかややこしくなったりするので。
これを自動化するスクリプトとかあればいいなあ。と思った。
ちょっと時間があれば作ってみるかな。
03September
Rails.vim v200でExtract, Partial
最近、学校の仲間たちとRailsでモノを作っていて、明らかに自分だけVimで作業をしているわけです。
そこで、Rails.vim(説明の日本語版っぽいのはこちら - 83's : rails.vimのいい加減な翻訳)を入れてサクサク開発しているわけです。
しかし、Stableのv.200だと :Rextract, :Rpartialが効かない。
そこでVimscriptの勉強をかねてコードを追ってみた。
plugin/rails.vim line.2778~
それを一旦Offにするためにスワップしてるようなコードだと思う。On/Offのフラグで空文字はおかしかろうということで、以下のように変えてみた。
とりあえず、SVN版ではそうなってるので、引っかかってる人がいればこんな編集しないでSVN版使えばいいと思うよ。
そこで、Rails.vim(説明の日本語版っぽいのはこちら - 83's : rails.vimのいい加減な翻訳)を入れてサクサク開発しているわけです。
しかし、Stableのv.200だと :Rextract, :Rpartialが効かない。
そこでVimscriptの勉強をかねてコードを追ってみた。
plugin/rails.vim line.2778~
let ai = &ai
let &ai = ""
silent exe "norm! :".first.",".last."change\<CR>".fspaces.renderstr."\<CR>.\<CR>"
let &ai = ai
&aiってなんだよ?って感じで調べていくと、多分autoindentの設定をやってるオプション変数らしいってのがわかった。それを一旦Offにするためにスワップしてるようなコードだと思う。On/Offのフラグで空文字はおかしかろうということで、以下のように変えてみた。
let ai = &ai
"let &ai = ""
let &ai = 0
silent exe "norm! :".first.",".last."change\<CR>".fspaces.renderstr."\<CR>.\<CR>"
let &ai = ai
華麗に動作。俺天才。ゴメンナサイ。とりあえず、SVN版ではそうなってるので、引っかかってる人がいればこんな編集しないでSVN版使えばいいと思うよ。

