mrubyをSQLiteに組み込んでみた


mruby いいですね〜。


とりあえずSQLiteから使えるようにしてみました。


https://github.com/spiritloose/sqlite3ext-mruby


とりあえずこんなことができます。

SELECT mrb_eval('ARGV.shift.to_i * 2', 42);
SELECT mrb_load('/path/to/library.rb');
SELECT mrb_load_irep('/path/to/library.mrb');


eval とか load できるだけじゃ面白くないので、ruby で関数を定義できるようにしてみた。

def fib(n)
  n < 2 ? n : fib(n - 1) + fib(n - 2)
end

create_function(:fib) do |n|
  fib(n)
end

っていうファイルを mrb_load すると呼び出せるようになる。

SELECT fib(30);


非常に組み込みやすくて良いわけですが、どう使うと面白いかなぁ。

MobiRuby は素晴らしいですねぇ。


と、約2年ぶりに更新してみるw

YAPC::Asia Tokyo 2010で発表してきました


YAPC::Asia Tokyo 2010で発表してきました。資料は Slide Share においておきました。


会場にこられていた方々、どうもありがとうございました!。

また、時間が足りなくて最後のほうがかなり駆け足になってしまってすみませんでした。


今回のYAPCは、いろいろな発表を聞いて得るものも多かったですし、またいろいろな方々と直接お会いしてお話できてよかったです。

Larryにサインも貰えました!


YAPC::Asia Tokyo 2010で発表します


さて、すごく久しぶりのPostなわけですが…


YAPC::Asia Tokyo 2010で(今日)発表します。


「Write Good Parser in Perl」というタイトルで、パーサについていろいろお話したいと思います。


http://yapcasia.org/2010/talks/63D6EAB0-BC8C-11DF-8791-B9FC0F276C45


よろしくお願いします。


追記

発表してきました。

mod_psgi 永続化、Windows対応、autoconf化など


mod_psgi の開発をぼちぼち進めてます。

mod_psgiPerlインタプリタを永続化するようになりました

ブログには書いてなかったんですが、mod_perl のような方法で永続化するようになってます。

親プロセス起動時に PSGIApp を全て do で読み込むようになっています。

ということで、mod_psgi での .psgi ファイルはアプリケーションの定義と、mod_perl での startup.pl のような効果があります。

Windowsに対応しました

mattnさんがやってくれました。すばらしいですね。

autoconf化しました

ということでインストール方法は

$ ./configure && make && sudo make install

になります。詳しくは README を参照してください。

今はパッケージングしたやつをリリースしてないので、最初にautoconfでconfigureを生成する必要があります。


で今後ですが、PSGI の SHOULD や MAY の部分で実装できてないところの実装(sendfile周りとか)とかをやって、落ち着いたら最適化などをやっていければいいなと思ってます。


あと、永続化方法はまだ検討していて、Passenger や mod_wsgi のような別デーモンを起動するような方法なども検討しています。

mod_psgi を実装してみた


http://github.com/spiritloose/mod_psgi

PSGI を実装したApache2モジュール。

% make && make install

でインストールできて、

LoadModule psgi_module modules/mod_psgi.so
<Location /psgi>
  SetHandler psgi
  PSGIApp /path/to/app.psgi
</Location>

で動く。


がーっと書いたのでまだまだの部分が多いとはおもうけど、一通り実装できたと思う。

Plack::Test::Suite を使ったテストも書いた。

http://github.com/spiritloose/mod_psgi/blob/master/t/suite.t


mod_perlのようにApacheの機能を提供する必要はなく、アプリケーションへはenvを渡せば
いいだけなので、実装は難しくない。

あとはそれ以外の部分をやっていければ。

Perlインタプリタの永続化とか。

あと、設定はmod_wsgiのように

PSGIScriptAlias /psgi /path/to/app.psgi

とかの方がいいのかしら。


mod_perlite については作ってる途中に気づいたんだけど、あれをPSGI対応にするにはほぼ書き直しになる
とおもったのでとりあえず作ってみることにした、という次第。

追記

miyagawaさんよりMac OS Xで以下のエラーでhttpdが起動しないとのこと。

Symbol not found: _PL_stack_sp
  Referenced from: /usr/libexec/apache2/mod_psgi.so
  Expected in: dynamic lookup

Mac OS X で動いた方がいらっしゃったら回避方法を教えていただけると助かります。

こちらの開発環境は以下の通りです。
ApachePerlはソースからビルドしたやつです。

$ uname -a
Linux debian 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686 GNU/Linux
$ cat /etc/debian_version
5.0.3
$ /usr/local/apache2/bin/httpd -v
Server version: Apache/2.2.10 (Unix)
Server built:   Nov 20 2008 11:31:51
$ /usr/local/bin/perl -v

This is perl, v5.10.1 (*) built for i686-linux
=== snip ===

YAPC::Asia 2009 前夜祭で発表してきました


http://conferences.yapcasia.org/ya2009/event/596
Yokohama.pm 出張版 in YAPC::Asia 2009 前夜祭のスピーカー発表(追記あり) - Yokohama Perl Mongers
前夜祭レポート[随時更新]:YAPC::Asia Tokyo 2009 スペシャルレポート|gihyo.jp … 技術評論社


Yokohama.pm 出張版 in YAPC::Asia 2009 前夜祭」で、Schenker について発表させていただきました。

資料は以下に置きました。

他の皆さんのトークも非常に面白かったです。

Yokohama.pmYAPC::Asia の運営の皆様、本当にありがとうございました。


もちろん YAPC本編も参加しています。

zshでcpanコマンド補完


すでにあるかなと思いつつも書いてみた。


以下のファイルを「_cpan」として$fpath に入れる。


とこうなる。

$ cpan -[TAB]
-A  -- Shows the primary maintainers for the specified modules
-C  -- Show the "Changes" files for the specified modules
-D  -- Show the module details.
-L  -- List the modules by the specified authors.
-O  -- Show the out-of-date modules.
-a  -- Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.
-c  -- Runs a `make clean` in the specified module's directories.
-f  -- Forces the specified action, when it normally would have failed.
-h  -- Prints a help message.
-i  -- Installed the specified modules.
-m  -- Makes the specified modules.
-r  -- Recompiles dynamically loaded modules with CPAN::Shell->recompile.
-t  -- Runs a `make test` on the specified modules.
-v  -- Print the script version and CPAN.pm version.