InnokoDB storage engine plugin

InnoDB Deep Talk #1なのにうっかり casual な話をしてしまったという話です。

InnokoDB is a MySQL storage engine plugin that enables one to fetch the 猪子san's recent tweets in a SQL manner.

https://launchpad.net/innokodb

会場で公開デバッグに付き合ってくださった斯波さん初め皆様ありがとうございました。

MySQLがらみの他の作品:
ストアドを使って、Webスクレイピングをしよう!

やったーmod_vimできたよー

Vim scriptはウェブアプリケーション記述言語やったんやー

Plack とかよくわかんないのでさくっと Apache で使えるようにしてみました。

mod_vim

httpd.conf はこんな感じ

LoadModule vim_module mod_vim.so
DocumentRoot .

Listen 8080

PidFile /tmp/pid
LockFile /tmp/lock
ErrorLog /tmp/error_log

VimDisplay :0
VimVersion 7.2
VimEncoding UTF-8

<Location />
    SetHandler vim
    VimExpr vimplack#handle(@@)
</Location>

ビルド方法は、まあ README に書いておけよって感じですが

make top_builddir=/usr/share/apache2/build

みたいにしてください、apr-json が別途必要です。

mattnさんのサンプルはこんな感じに動いています。

f:id:moriyoshi:20120209193608p:image

% ab -n 500 -c 20 http://localhost:8080/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests


Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            8080

Document Path:          /
Document Length:        348 bytes

Concurrency Level:      20
Time taken for tests:   0.587 seconds
Complete requests:      500
Failed requests:        0
Write errors:           0
Total transferred:      246500 bytes
HTML transferred:       174000 bytes
Requests per second:    851.90 [#/sec] (mean)
Time per request:       23.477 [ms] (mean)
Time per request:       1.174 [ms] (mean, across all concurrent requests)
Transfer rate:          410.14 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   22  14.0     20     229
Processing:     0    1   3.4      0      31
Waiting:        0    1   3.4      0      31
Total:          4   23  14.1     21     248

Percentage of the requests served within a certain time (ms)
  50%     21
  66%     22
  75%     23
  80%     25
  90%     28
  95%     32
  98%     52
  99%     98
 100%    248 (longest request)

Enjoy!

JavaScriptで任意のテキストをバイト列からラスタ画像化する、またはその逆

id:monjudohid:nishiohirokazu と話してて作ったんだけどとりあえず使い道なかったので共有します。

テキストをレンダリングして画像にするという話ではなく、

  1. テキストを UTF-8 に変換する
  2. UTF-8 化されたバイト列であるテキストをラスタ画像 (ImageData) にする
  3. 画像を PNG 形式にする

ということをする話です。

f:id:moriyoshi:20120107194512p:image

デモサイト:
http://moriyoshi.github.com/textimgenc/

ソースはこちら:
http://github.com/moriyoshi/textimgenc/

Python Developers Fest 2011.10 で発表しました

最近ネタの切れが悪いと言われます…。

Package documentation より:

This package is a port of a great Perl module called Acme::AKB48 which was created by Hideo Kimura. Although I don’t have the slightest interest in AKB48, I happened to be under the impression that Python world (almost) totally lacks “Acme” essence and feel like it being worth the first Acme to be ported.

http://github.com/moriyoshi/pyakb48
http://pypi.python.org/pypi/pyakb48

俺とPHP

なんか知らないうちにPHPを全然書いたことがないという噂が広まっていて心外すぎるので弁明しておく。長くなるかもしれない。

PHPを使い始めたのはちょうど10年くらい前のことだと思う。4.0.3 あたりが出た頃だ。当時友人たちとシラバスの情報を共有するサイトをつくろうとしていて、PHP を紹介された。データベースに接続してデータの出し入れをするような仕掛けを簡単に作れるという。

それまでは web で何か作るといったら Perl だったし、テンプレートエンジンとかマルチパートパーサとかをまとめたオレオレ web アプリケーションフレームワークを作ってお茶を濁していた。Perl はかなり好きだった。それでも、PHP の手軽さは輝いて見えた。コードをそのまま HTML に埋め込めることでさえ、「poor-man's ASP」だと思って感激していた。マニュアルを見れば、答えが書いてあったから、動くものをあっという間につくり上げることができた。のめり込んでいった。

友人のひとりから、Web 制作会社でのバイトの口を紹介された。PHP で携帯メールを活用したゲームをつくるという。当時は、なぜか頑なに海外からの情報源のみに頼っていたので、mbstring の存在を知らず、iconv 拡張モジュールのみを利用してメール送信を行うプログラムを書くなどした。iconv 関数にバグがあるのを発見して、バグ報告した。はじめてオープンソースのプロダクトに対してパッチを書いた。パッチが採用されて、コミッターにならないかと誘われた。少し迷ったが、断る理由もなかったのでそのとおりにした。

無事ゲームもリリースされ、バイトを辞めることになり、コミッターとして活動する時間を長くとれるようになった。しかし、コミッターとして何をやったらいいのか、見当もつかなかった。そこで、悉にメーリングリストの発言やバグ報告を観察した。やがて、他のコミッターの役割や力関係のようなものが分かってきた。また、プロジェクトとしての目下の問題もわかってきた。バグ報告を処理するところに人手が足りていないようだった。

新しく登録されるバグ報告にひと通り目を通し、自分で処理可能なものは率先して処理することにした。これによって、コミッターとしてのプレゼンスを高めることができ、修正内容によって実力が認められれば、信頼を得られるはずだと思った。そして、その通りになった *1。他の開発者から意見さえ求められるようになった*2。バグ報告者に感謝される喜びが乗じて、さらに作業にのめり込んでいた。今思えば、だいぶ空回りしていたように思う。世界で大勢の人たちが使うプロダクトの品質を、日本の片隅でひとりの人間が日々向上しているのだと思うと、わくわくが止まらなかった。もともとあまり顔を出していなかった大学から、また足が遠のいた。

面白いことばかりでもなかった。PHP のコミッターの一部からは、いい印象を持たれなかったようだ。IRC のコミッターが常駐するチャンネルに出入りするなどして、コミュニケーションの機会を増やすことで理解を得ようとした。ついに、このようなことが発生し、大きくモチベーションを削がれた。大学を卒業することにも力を注がなくてはならなかった。結果、開発からは足が遠のいた。PHP 自体の未来の方向性に対する疑念が生じたというのもあった。

mbstring 拡張モジュールのメンテナンスは長らく廣川さんが行っていたが、多忙のために、廣川さんに代わってバグ報告を処理する機会が多くなった。mbstring が広く使われているということは認識していたので、日常的な開発からは離れたあとも、これだけはコミットメントだと思い、続けた。ある日突然 FacebookOSS チームから GitHub のクーポンが送られてきた。Facebook も mbstring を利用しているらしく、メンテナンスに感謝したいとのことだった。すこし報われた気がした *3

(※続きを読んだらおっぱいおっぱいと書き込んでください)

*1:phpcredits()で Quality Assurance Team に名前があるのはそのため

*2:このときの議論がPHP stream filterの実装に反映している

*3:以前 id:IwamotoTakashi さんにはてなスターを頂いたのが 7 年間活動してきた中での最初の報酬です。大切に使わせてもらっています。