どっかで告知出した? なんでオレ知らなかったんだろう。
Perl には CPAN があります。
この言葉の本当の意味は CPAN を知らない人には分かりません。少なくとも PHP の場合、CPAN に相当するリポジトリはありません。でした。openpear.org は PHP の CPAN、と言っちゃうと大げさですが、少なくとも Pear よりは CPAN に近いものです。Pear には規律が、CPAN には自由があります。openpear.org は pear パッケージに自由を与えます。
別な見方をすると openpear.org は coderepos にパッケージングの機能が追加されたものでもあり、rubyforge や github のようなものでもあります。たぶん。
でもあれなのよね。coderepos には PHPer 少ないし、#openpear@freenode も静まり返ってるし、やっぱ PHP はちょっと文化圏違う感じ。どうなるんでしょ。盛り上がるといいですね。
気がする。ごめんなさいね、古い話でホントに。(ベンチとか取ってないんでその辺は知りません。)
デフォルト DB が postgres になってるのも role に一本化されているのも、メリットの方が大きい。
例えばデフォルト DB の変更は
psql -U postgres
だけで使い始められるってことを意味する。template1 とか書かなくていいし、template1 を誰かに使われてて作業できませんて可能性も減っていい感じ。template1 は使われてるかもしれないから psql -l でデータベース一覧を取得して適当なやつに繋いで…とか余計なことは全然考えなくていい。
また role は \du だけでこの出力を得られる。
Role name | Superuser | Create role | Create DB | Connections | Member of
---------------+-----------+-------------+-----------+-------------+-----------
postgres | yes | yes | yes | no limit |
web | no | no | no | no limit |
www | no | no | no | no limit | {web}
なんだこれとか言っちゃダメ(^^; ただのサンプルだから。これの何がいいって、role の一覧で
- user
- group
- どの user がどの group に属しているのか
全部分かるってこと。しかも ID じゃなくて名前で分かる。スバラシイ。楽ちんじゃないか。これでデータベースの権限管理をまともにやる気になれますよ?
psql -U postgres -t -A -F '|' -c '\du' | awk -F \| '{print $1, $6}'
なんて書くと
postgres
web
www {web}
なんてものが採れます。ふむふむ。(connections の列の中身に空白が入っているのでセパレータをいじってます。この辺はお好きにどうぞ。)
インストール
Fink で rails と activerecord をインストール。してあった。
OSX 10.3 + Fink の Ruby + Fink の PostgreSQL の環境で gem install ruby-postgres はうまくいかない。インストールはできるけどライブラリが入ってない。(もちろん postgresql-dev とか postgresql-shlibs が入ってないとかじゃない。)面倒くさいので
gem install postgres-pr
で回避1。
database.yml
- adapter はあくまで adapter であって module の名前じゃないので postgres ではなく postgresql が正解2
adapter: postgresql
- host は URI の一部として使われるので、DB サーバの hostname は URI の hostname としての規約に従わなければいけない。
host: HOSTNAME( valid URI ? )
引っ掛かったので適当に CNAME をセットして回避。
rake
rake db_schema_dump
したら今さら何ゆってんのよ、仕方ないわね、と怒られた。正解は
rake db:schema:dump
結果
できあがった schema.rb を見てみたが、やっぱ「データとしては」使いにくいんだなと感じた。
いや何をしてたかというと、定義ファイル(ぶっちゃけちゃうと DDL となる sql)が存在しないデータベースがあるわけです。いやまぁ、作ろうと思えばすぐ作れるわけですけど、管理してないんですな。(要するに手作業で作って使い回し。当然リポジトリには入ってない。)これをメンテするのはまぁいいとします。ただ定義が外部にないので接続しないと中身分かんないわけ。3
だからまずは DDL を生成しようかと思ったんだけど、
pg_dump --schema-only
の出力はあんまり見やすくないなぁとか思い始めちゃって4。rails 入れてあったから database.yml を書いて schema dump だ! と盛り上がったはいいけど、やり慣れない作業で結構時間が掛かってしまったうえに結局「データとしては」再利用しやすいわけじゃないということにやってから気がついた。なんか database.yml みたいなものができるものだと勘違いしていたらしい。(migration 使ったことあるのに!)もちろん見やすさで言えば activerecord の schema dump の方が自動でインデント揃えたりしてくれて見やすいことは見やすい。これはこれで便利。
「データとしての利用」ってのは、例えばデータベースの一覧とかテーブルの一覧なんかを取り出して、それらに対してバッチで何か処理を加える場合を考えているんだけど、とりあえず
psql -c COMMAND
と組み合わせる方向を考えた方がいいかな5?
ところで ActiveRecord って Rails の Rakefile がないとやっぱまともに使えないんすかね? 単独で使えたらもっと便利じゃねすか?
Pure Ruby なので速度的には不利だけど、今回は schema dump したいだけなので速度は関係ない。 ↩
世の中 mysql の話ばかりでいやになっちゃう。 ↩
本番であろうが開発環境であろうがね。Excel とか Wiki に書き起こすことは当然できるんだけど、それは置いておく。eclipse を常時使ってるなら繋ぎに行って確認してパースペクティブ切り替えればいいだけっちゃいいだけです。えぇ。 ↩
間延びしてねすか。コメント削れって? ↩
-t -A -F " " とかしておくと加工しやすい出力を得られる。psql の外に取り出しちゃえばこっちのもの。awk や Ruby が火を噴いちゃうわけ。 ↩
※ JSAN 使えというのはとりあえず忘れてください。7日の記事で触れます。
半年近く前の話題にやっと決着ついた。
- script 要素書き出し方式
- XMLHttpRequest
の二つの方法があると書いたけれども、結論から言うと MacIE はどっちも動きませんでした。
まず、XMLHttpRequest が動かないのはいいですね。これは当然。そんなオブジェクトは組み込まれていないし、ActiveX で使うこともできません。はい、一つ片付いた。では 1. の script 要素書き出し方式。
script 要素書き出し方式も厳密には
- document.write()
- DOM
の二つの方法があります1。しかし document.write() はいつでも使えるわけではありません。(やってみりゃすぐ分かります。)
そこで実際に使うのは DOM を操作するって方法になるわけです。まぁこれは誰が書いても大差ない、こういうコードになるはずです。(ならなかったらオレすっげー勘違いしてることに。)
function require( url ) {
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
var head = document.getElementsByTagName( 'head' )[0];
head.appendChild( script );
}
これが MacIE では動きません。
しばらく悩みましたが、
script.src
に代入する処理が動きません。setAttribute だろうがなんだろうが動きません。値の取得はできるんですが、セットできない。
はい終了。src 指定できないんじゃ何もできない。ちなみに、よく調べてないけど iCab も動きませんでした。なんでかは知らない。まぁいずれにせよ分かったことは、
DOM による script 要素の書き出しを使ったスクリプトのロードは MacIE でも iCab でも動かない。XMLHttpRequest を使っても使わなくてもこれらのブラウザはこの段階で除外できる。
ということです。あとは require() 内の処理を丸ごと try - catch で囲んでやれば MacIE, iCab は華麗にスルーされてくれます。
例によって iframe は意図的に無視しています。 ↩
livedoor への統合後、やっと動きがあった。URL が変更になったって言っても DNS の設定と mod_rewrite の設定するだけなのになぁ。本当は a50.livedoor.jp になるはずだったのに、協議の結果 f50.aaa.livedoor.jp になってしまった。長なっとるやん。
Apache の version も上がってないぞ。早く 1.3.33 にしてくれー。
- http://member.nifty.ne.jp/hippo2000/perltips/podread.htm
- http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlpod.html
ついに pod を試してみた。前から気にはなっていたが使っていなかった pod.
感想としては「ちょっと書きにくいが pod2html の出力を見たときの喜びを思えば我慢できる」って感じか(^^; HTML にべったり依存する気はないので pod2text でも pod2html でも出てくる内容は同じになるように書く。でも pod2html ではページの先頭にそのページ内の head1, head2 を抜き出した TOC ができるのでこれがかなり便利。Link なんかも書けるようなので、phpdoc ほど高度な自動化は無理にしても、そこそこ使えるんじゃないだろか。
今さら Perl で大物は扱いたくないってのが本音だけど、そのときは pod の機能を有効に利用できるような仕掛けを用意してから始めるのがよさげだ。