pharanの日記

どうも、「どうせ崩すのだからとか、経験的にそこまできっちりやる必要はない」とか、「正規化は勘で」とかいうのは、単なる神話っぽいです。「正規化を崩す場合がある」という話が、RDBというモデルをよく判っていない人達によって勘違いされ、勝手に一人歩きをして「正規化は崩しても良い」「正規化は真面目にやらなくても良い」に変質してしまった、と。風の噂で「JOIN使用一切不可」な企業があると聞きましたが、そういうとこが発端なんじゃないかなとか(笑)。

RDBのモデリングは噂や迷信が幅利かせすぎ!
JOINは遅いのではなく、「遅くすることができる」ってだけで、エンティティが意味的に正しく抜き出せてれば(Index使って)何個JOINしても一瞬で返ってくるっつーの!

迷信モデリングしたRDBをフツーに再設計すると8倍とかそういうレベルじゃなく4096倍ぐらい速くなることが良くあります。

質問されたので答えたついでにのせるシリーズ。

Q: 「ログアウト後の戻るボタン対策はどうすればいいのか?」

A: 「PHPデフォルト設定(php.ini-dist)なら正しくログアウト(session_destroy)してればそれで良い。」

「ログアウト後の戻るボタン問題」とは何か。

ログアウトしてもブラウザの戻るボタンで戻るとキャッシュ上のページが表示されてそこから「購入」とか都合の悪い処理をされちゃう問題。

要はブラウザがキャッシュしないで、戻るボタンを押されても必ずサーバに問い合わせてくれれば大丈夫。
ブラウザに「キャッシュ使うな」と言うにはHTTPヘッダに下記を書けば良い。

Expires: 0
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache

Expiresは過去の日付とかなら良い。no-storeとno-cacheは、「ファイルとかにキャッシュするな」と「メモリ上とかにもキャッシュするな」、must-revalidateは「必ずサーバ見に行け」、PragmaはHTTP 1.0用らしいです。
ヘッダを自分で書いてもいいですが、PHPではphp.iniでsession.cache_limiternocache(デフォルト)に設定されていると上記のヘッダを自動的に出してくれます。
必ずサーバに問い合わせてくれれば、ログアウトされてるので「ログインしてください」画面に飛ばすことができます。

via: Hypertext Transfer Protocol HTTP/1.1 – 13 Caching in HTTP

naoyaのはてなダイアリー – prototype.js でデザインパターン – Iterator

JavaScript はプロトタイプベースのオブジェクト指向言語で、C や Java のようなクラスベースのオブジェクト指向言語とはちょっと実装が異なります。

プロトタイプベースのオブジェクト指向のお話。
ソフトウェアの匠 羽生田栄一のオブジェクト論」で始めてちょろっと知ってすごい面白いと思いましたが身近なJavaScriptがプロトタイプベースのオブジェクト指向言語だってことをつい最近知りました。

プログラミングの方法論は、「どう分けたらわかりやすいか」に尽きるのでプログラム言語にとって「人間がどう考えてるのか」は大事。
上記のオブジェクト論に拠れば、人間が対象を認識するときには下記のような手順をふむそうです。

  1. 環境の中から対象を切り出す。
  2. 対象を妥当なクラスに分類する。
  3. 対象をそのクラスの実例(インスタンス)として頭の中で再認する。

これをベースにしたのがクラスベースのオブジェクト指向。
しかし、近年の認知心理学では2のとき同時に「対象とプロトタイプ・インスタンス(代表例)を比較する」ことがわかっているそうです。
こっちをベースにしたのがプロトタイプベースのオブジェクト指向。

対象・クラス・プロトタイプとは、トノサマガエルを認識する場合で考えると、まず対象はトノサマガエル。クラスはカエル。プロトタイプは自分の考える代表例なのでおれの場合は緑色のアマガエルです。

たしかにカエル、犬、ジュースなどといったクラスを考えるとき無意識に代表例で考えてしまいます。プログラミングでもまず代表例のオブジェクトがあって、そこに違う部分のプロパティを追加していくというやり方がわかりやすいのかもしれません。

JavaScript以外にどんなプロトタイプベースの言語があるのかとか気になります!

ソフトウェアの匠
  • ソフトウェアの匠
  • 日経BP社(2004-10)
  • (著)まつもと ゆきひろ
  • (著)萩原正義
  • (著)高林 哲
  • (著)羽生田栄一
  • (著)八田真行
  • (編集)日経バイト
  • 定価:¥ 2,480
  • 新品価格:¥ 2,480
  • 中古価格:¥ 1,500
  • ASIN:4822206653

ref: ソフトウェアの匠

昨日、激しい便意に見舞われて京王新線新宿のトイレに終電6分前に駆け込みました。

そこのトイレは激しく汚いし、1個室内にGが3匹いてそれぞれが相当カオスな動きしやがるし、腹は痛いわ、終電間に合うか心配だわで最低の排泄環境でした。

11人いる!
  • 11人いる!
  • 小学館(1994-11)
  • (著)萩尾 望都
  • 定価:¥ 590
  • 新品価格:¥ 590
  • 中古価格:¥ 102
  • ASIN:4091910114

プログラマー日記(2005-08-09)

なおRailsは、Rubyという言語の特徴を最大限に生かし、またJavaのフレームワークを参考にせず設計されています。PHPのフレームワークも、Javaのさるまねに陥ることなく、PHPの良さとは何かを考えながら、製作していただけたらと思います。

PHPの良さとは何か!

おれの考えたPHPの良さ:

  1. 関数いっぱい
  2. HTMLに埋め込める
  3. オブジェクト指向とか知らなくても作れる

それをフレームワークに生かせないかということで、一発ネタのはずだったAwesomeFrameworkをちょっと変えてみました。

AwesomeFramework-0.5.0.tar.gz

1.関数いっぱい

AwesomeFramework(以下AF)は関数のみ!(クラスとか無い)

  • forward($action) : アクションを実行する。(処理が移る)
  • redirect($action) : アクションにリダイレクトする。(別リクエストになる)
  • fetch($action) : アクションの実行結果の出力を取る。

2.HTMLに埋め込める

AF標準のRendererはPHP!
いままでは「HTMLに埋め込める機能いらねぇ」とか思ってましたが、たとえば単に

Hello World!

と書いたテキストに拡張子「.php」をつけてincludeすると全内容が勝手に出力される!
PHPタグの外側は勝手に出力される=PHPタグが無いテキストは全部が普通に出力される。

3.オブジェクト指向とか知らなくても作れる

AFのactionはただのPHPファイル。関数ですらなく、上から順番に実行されます!

Hello Worldアプリのaction:

<?php
$_REQUEST["message"] = "Hello World";
forward("view");
?>

PHPファイルにするとグローバル変数地獄になって大変だろうと思っていたんですが、全てのactionはforward関数内でincludeされるのでフィルタチェイン的構造になったforward関数のスコープになって何気にnamespaceが分かれてる!

ファイルをactionの単位として$selfというそのaction自身の情報を含んだ変数をインポートすることにしました。($thisだと混乱するのでPerl的な$self)

$selfの中身:

Array
(
    [action] => index
    [file] => index.php
    [abs_path] => D:/Program Files/eclipse-3.0.2/workspace/AwesomeFramework/actions/index.php
    [abs_uri] => http://localhost/index.php?action=index
    [resource] => Array
        (
        )
)

やっべえこのハンドルネーム、じわじわくるよ・・・。

robots.png

オブジェクト指向JavaScript

クロージャとはブロック化されたコードの事です。その特徴はクロージャが生成されたスコープのローカル変数を取り込むことができる、というものです。

JavaScriptでのクロージャの話。PHPだと馴染み浅ですが、楽しいし便利!

pharanの日記

というか、この期に及んで、会社から公式にまだ一度も音信がないのですが。こちらから書面以外で連絡を取る気はありません(口頭で変な口約束交わしたくないし、襲ってきた本人に会うなんてもってのほか)。その旨も内容証明郵便で通知済み。

すごい詳細が気になる。

窓の杜 – 【NEWS】商標権侵害のためメールソフト「鶴亀メール」が「秀丸メール」に名称変更

定番テキストエディター「秀丸エディタ」を開発する(有)サイトー企画は9日、同社製メールソフト「鶴亀メール」を「秀丸メール」に名称変更することを発表した。これは、今月2日に“鶴亀”の商標権者から同社へ通知が届き、「鶴亀メール」が他社の商標権を侵害していたことが判明したため。

先にHidemarnet Explorerを改名すべき。

本家フォーラムの方で少し要望が出たのでMojaviInfoを修正しました。

MojaviInfo-0.4.tar.gz

version 0.4の変更点

  • NOTICEが出る部分を修正。
  • Subversionディレクトリ、emacs, viなどのbackupファイルを一覧から除外。

ref: MojaviInfo