2006-06-25 (Sun)
#
昨日(24日)、Mission Impossible 3 (M:i:III; Mission Impossible 3 Starring Tom Cruise - MI 3 Movie - Official Site) の先々行上映に行った。
劇場が、(1)フィルムのピントが微妙に合っとらんよ、(2) 音響が耳をつんざくセッティングでえらく不快、だっだが、
いい! とりあえず観とけ。
Philip Seymour Hoffman as Owen Davian が悪すぎ! ムキーッ!
# Rubyist九州会合
Tag(s): Ruby同じく昨日。
railsについて喋ったり。スライドを用意してなかったので、だいたい下記のような話。他にも何かあったかなぁ。
- 私はノートPCは持っていないので、現地で機械を貸してもらう。しかし、PostgreSQLのインストール、apt-get install 一発では入らない。Ubuntu Linux? pg_hba.conf ファイルが ident sameuser になっている。Webアプリの場合は、UNIXユーザ=データベースユーザにしにくいから、md5ぐらいで。
- 私は、データベースのテーブルは、SQLでゴリゴリ書く。PostgreSQL、MySQLの方言があるので、両方で通用するのを書くのは難しい。今回のアプリはPostgreSQL用に作っている。
例えば、PostgreSQLではidフィールドはserial型だが、MySQLではauto_increment修飾を付ける、など。あと、PostgreSQLにはunsigned intがない。
Eclipseのプラグインで、SQLモデリング(データベース内のスキーマと双方向に変換可)があるとか。
- created_at, updated_at, lock_version フィールドはrailsでは特別な意味を持つ。生成時刻、更新時刻、それから楽観的ロック。
楽観的ロックは、二人が同一のエントリを編集しようとすると、列を読み込んだときと書き込むときのバージョン番号を確認することで、片方をエラーにする。編集はできるが、更新するときにエラーにする。
- データベースモデリング。取引先の振込口座テーブルは、「現在の」振込口座になる。実際にどこに振り込んだか、という「歴史的な」振込口座は、別途保存しておく必要がある。マスタはどれも「現在の」値なので、それだけで足りるかどうか考えないといけない。
- アプリケーションを作る。私は、とりあえず何でもscaffoldして、そこを足がかりにして作っていく。
- その前に使うライブラリなど。セキュリティは、ModelSecurity で確保する。優れたライブラリで、お勧め。
ModelSecurityは、コントローラ(アクション単位も可)、モデルオブジェクト(プロパティ単位も可)について、ログイン必須、管理者必須、読み込み可能、書き込み可能などの制約を付けていく。railsはURLでコントローラ/アクションを選択するが、直接想定外のアクションにアクセスされても安全を保てる。
- 文字の変換にicu4rを使う。いろいろな名前やふりがなは、できるだけ正規化しておきたい。というのも、「㏍」や「㍍」、「㍻」「㈱」などが混ざると検索がしにくい。Unicodeの正規化NFKCを使うのが簡単。(互換漢字の問題はとりあえず置いておく。)
- ユーザーインターフェイスとしては、検索を多用する。一覧から選ぶのは項目が増えてくるとすぐに破綻する。あと、すでに登録されているのに、またマスタに登録することのなんと多いことか。
- SearchTextクラスを用意する。これは、検索テキストを仕舞うためのオブジェクトで、データベースとは関係がない。だからActiveRecord::Baseからは派生させない。しかし、あたかもActiveRecordのオブジェクトのように振舞うようにする。具体的には、self.human_attribute_name メソッドなどを定義する。こうすることで、railsのエラーチェックとユーザーへのフィードバック機構を利用できる。
- などなど。