おもてなしとしての公衆無線LAN

Twitter経由

会議室では来客用に公衆無線LANを用意しておくのが常識! になってほしいとお前ら思いませんか

確かにその通りである。家なら、ブルース・シュナイアーも語るように、おもてなしの一種として無線LANくらい提供するのも不思議なことではない。

でも、会社で来客に無線LANを提供するのは、プライバシーマークやISMSとの絡みで出来ない企業も多いはずだ。

事業規模の大きな会社では、こういった類の認定は部署ごとに取得していて、そうでないと不便で非効率極まりない業務フローになってしまうのだが、小さな会社の場合は全社的に取得してしまって融通が利かないところも多いのではないかと思う。

ただ、それはさすが「支配者にとっては植民地がこうだったらいいよね」という規格であるISMSの定めるところなだけあって、利便性などあまり考慮されていない単なるルールだ。物事を便利にするのがテクノロジーの存在理由であるわけだから、方向性としては著しく間違っている。

もっとも、こういう不便さにつけこんだ商品でもって変なルールに風穴をあけるのがIT産業ってものなので、たとえばISMS対応の企業向け公衆無線LANという道はある。誰か時間と金のある人はなんとかしてくれたまえ。銭の前ではみんな平等という、資本主義ほど革命に向いている考え方は他にちょっとないので、これは商売でもってISMSという現代の経済奴隷制度を解放する真の資本主義者になるだけの簡単なお仕事です。

Popularity: 2% [?]

なぜPHPが勝ったのか、についての反論

このサイトに来てくれている人たちの代表的なモデルは、平日の業務時間中にアクセスしてくる20代中頃から30代前半くらいの男性らしい。たぶん何かGoogleで検索しているときにうっかりひっかけてしまうのだろう。

非常に反応の薄い「なぜPHPが勝ったのか」について、海外ではそれなりの反響があったようだ(「ときどきの雑記帖」さんは面白い情報が多くてよく読むんだけどトップページの2009年1月分のリンクが間違っているのでなんとかお知らせしたいのだが画像が表示されないのでメールアドレスがわからない)。

ただ、反論の内容は、もともとこれは経営者の立場から述べられたものなのだから、誰もが出来る言語なんてやってもそれで自分がありふれた存在になっちゃうよといわれても、当たり前のことなのでもうちょっと冷静になってもいいんじゃないかと思った。経営者対被雇用者という煽りの方が面白そうだし。

Popularity: 2% [?]

イーノのスピーチ

yomoyomo経由

埴谷雄高の本に書いてあったが、誰かが死ぬ革命なんぞ思想として何の価値があるかという考え方があって、別にそれは革命に限ったことでもなく、あらゆる不愉快な大義名分を突きつけられたら、こう言い返してしまえというのが個人的な信条としてあるわけだが(じゃあ死刑はどうなる?とかまあいろいろあるのが困ったところ)、イーノの演説はとてもよい。

Popularity: 1% [?]

IE7だと誤ったフォーマットのRGB色指定はエラー

Internet Explorer 7で下のJavascriptを実行するとエラーになるのね。

<span id="here" style="color:#000000">hoge</span>
<script>
document.getElementById("here").style.color = '#0000000';
</script>

Popularity: 1% [?]

なぜPHPが勝ったのか

何日か前に「なぜPHPが勝ったのか」と題するエントリを読んだ。勝ったというのが、PHPがここまでポピュラーになり、ポピュラーであり続けているということを指すなら、まさにそうだろう。著者はスタートアップ企業のCTOで、その立場からなぜ自分がPHPを開発プラットフォームとして選択するのかを説明している。言語としてではなく、プラットフォームとしてというのが味噌だ。

このエントリをざっとまとめると:PHPの言語仕様のまずさこそが勝利の原因だ。

前提として、PHPにはそれなりの実績がある大量のコードが既にあり、そのユーザ数も多く、サポートするコミュニティも大きい。その上で、こんな理由を挙げている。

以下、要約。

PHPが勝った理由その1:イテレーションの早さ

PHPなら最初からApacheモジュールとして動作して、再読み込みしても軽快に動作するし、ウェブサーバの再起動なしに再読み込みさえすれば変更内容を確認できる。

PHPが勝った理由その2:貧弱なマッピングとコードとプレゼンテーションの混在

URLをファイルにマッピング、コードとプレゼンテーションをごちゃまぜにする。PHPのアプリケーションではこんなことも許される。普通、頭のいい開発者ならバックエンドの言語が何かURL部分に埋め込んだりはしない。edit.phpが編集画面でregister.phpが会員登録画面だ、なんて間抜けのすることだ。

でも、このやり方だと、ある機能の改修が必要になったとき、どこのコードをいじればいいのか考える必要は全くない。会員登録画面でエラーが出るようになったと連絡が入れば、URLマッピング用の正規表現を一生懸命読んでどのファイルがこの機能を担当しているか探したりせず、あわてずregister.phpを開いて、そこから修正箇所を探せばいい。ボタンのサイズを変えて登録ボタンをもっと目立つようにしたいなら、やっぱりregister.phpを開けばそこにはHTMLとPHPのコードがごちゃごちゃ混在しているはずだから、HTML部分をいじっておしまいだ。ある規模までのアプリケーションなら実はこれでも動くっちゃ動くし、十分っちゃ十分だ。HTMLならわかるけれどもプログラミングには不慣れな人だって、どこかからコピーしてきたコードさえあれば、あとはどこに貼りつけるかの問題にしかならない。

PHPが勝った理由3:ぐちゃぐちゃだが膨大な標準ライブラリ

今日ではプログラミングというのは名人芸のアルゴリズム作成というよりは、ほとんどが半可通のプログラマによるたんなるデータ処理であって、データを上手に処理できる言語にはたくさんの標準ライブラリが必要だ。PHPには、データベースドライバや正規表現、HTTP通信など、とりあえずなんでも一通りそろっていて、さらにプログラミング言語としては悪いことに、まともなパッケージ配布システムやモジュール化も進まずに、単一のインタプリタにすべてが同じように放り込まれている。システム管理者、セキュリティコンサルタント、プログラミング言語の純粋主義者、公開したくないライブラリをバンドルしたいサードパーティ企業をいらつかせるこのやり方は、開発者にはありがたいことで、どこでもたいてい同じような環境になり、コードの再利用も進む。

PHPが勝った理由4:オブジェクト指向プログラミングのサポートが貧弱

叩きどころ満載のPHPだが、特にオブジェクト指向プログラミングのサポートが貧弱であると叩かれることが多い。今日ではかなり改善された一方で、PHPのオブジェクトは長いこと辞書に毛が生えたようなものでしかなかった。

オブジェクト指向の長所の一つにカプセル化がある。しかし、実際のところ、PHPのアプリケーションではオブジェクトはリクエスト毎に作成され、利用され、そして捨てられるものだ。ステートレスに動作しているアプリケーションでオブジェクトの状態がどうこうというのは、実地にはあまり意味をなさない。委譲については、PHPはストレージ部分はMySQLなりmemcachedなり他のプロセスにやってもらうわけだから、外部のプロセスへの簡単なラッパさえあれば事足りてしまう。

ゆえに、これといってオブジェクト指向でないプログラムでも十分ということになり、これまた非プログラマを引き寄せることになる。

そもそもウェブ自体がコードの存在はURLの背後に隠れたものであり、ブラウザからのリクエストをベースにしたステートレスなものなわけだから、PHPのスクリプト自体が一個のオブジェクトみたいなものであり、HTTPが定義するインタフェースを実装したカプセルなのだ。

最終的にPHPが(ウェブプログラミングの世界で)勝利したのは、ウェブの基礎に絡み合ってその写し鏡のようになった言語であったからで、古典的な意味でのエレガントさにそれらを落とし込もうとしたからではない。

もちろん、セキュリティはどうなる!?とか、大規模開発ではこうはいかん!!とか、やっぱPHPは馬鹿用言語だよな、とか、いろいろな異論反論はあるだろう。それらも間違いではないと思う。でも、PHPは非プログラマに最適だとか、言語仕様としてまずいのがその手の人たちに受け入れられた理由だというのは説得力がある。もちろん、PHPでプログラマが仕事をすることは可能だし、すごいものを作る人もいる。もちろん、とか言い出すときは本当はその後にくることが本当に言いたいことなわけだが、ここでもその慣習に従うと、しかしながら、ポピュラーな言語になるには、非プログラマに非プログラマであるままで仕事をさせてしまうという手もあり、それは今のところ結構有効だ、ということだ。もちろん言語設計者としてそれは許し難いという考え方もあるだろうし、ポピュラーになること自体で勝負するのは無意味というのもひとつの知見としてそれはそれで正しいのだが。

Popularity: 3% [?]

シスの暗黒卿、カエル部隊

うちにもシスの暗黒卿がやってきた。
090107_195701

カエル部隊により駆除された。
090102_120901

Popularity: 1% [?]

新米妊婦とその配偶者へのアドバイス

そろそろまとめとくか。とくに今回経験したことから意外だった点とかをピックアップ。

(1)胎児の様子はビデオに残せる

病院でエコー写真をもらってくるのはよくある話なのだが、病院によってはVHSビデオテープを持ち込めばビデオ映像をもらえるところもある。いまどきビデオテープを探すのも大変かもしれないが、それだけの価値はある。

ただし、エコーで撮影した画像を3D写真に加工したやつはちょっと不気味なのであんまりおすすめできない。

(2)骨まで愛して

エコーで撮影された映像には胎児の骸骨が映ることがある。かみさんはギャーと叫んで笑っていたが、確かに笑えるくらい不気味な髑髏画像になる。それはそれでかわいいので、お楽しみに。

(3)病院の嫌な客

たまに見かけるのが、妊婦の付添でやってきた親や配偶者が、自分の娘や嫁に夢中になって、他の妊婦さんに席を譲ったりすることもなく、待合室にどっかと座りこんでいるケース。いろいろ心配事もあるんだろうけど、自分は元気なんだろうから、席くらい譲ればいいのに。

(4)胎児のサイズはわからない

胎児の体重は大腿骨の成長具合で推測して計測される。だから、だいたいの値になる。と、まあつまらないダジャレが言いたかったのではなく、推測値なので、出産直前になっても(推定)体重が増えずどうしようと悩むケースが結構あるようだ。うちの場合、2500グラム以下といわれてかみさんが相当落ち込んでいたのだが、結局産まれてみれば2900グラム以上あった。これは、エコーで撮影された大腿骨がそもそも動きまわっていたり、斜めから撮影されていたりして、ちゃんと長さや太さを測ることができないから生じる誤差が原因なので、途中経過で特に問題がないなら、あまり気に病む必要はないらしい。

(5)準備教室は意外と面白い

区で開催する準備教室とやらに参加してみた。入浴や着替えの実習を人形相手にやるわけだが、けっこうリアルな人形なのでいい練習になる。しかし、うちでは結局ここで習ったようなちゃんとした入浴方法はほとんど(たぶん数回しか)やっていない。風呂場でバスタブに腰かけて太ももの上に赤ん坊をひっくり返してシャワーでざぶざぶ洗ってもぜんぜん嫌がらないしむしろ気持ちいいみたいなのでずっとそうやっている。顔にお湯がかかってもへっちゃらだ。たぶん、おっかなびっくり入浴させると子供の方が何やら異様な雰囲気に気圧されてしまうのだろう。適当にちゃっちゃか洗ってやるとあっけらかんとしたものである。

(6)父子手帳というものがある

申請すれば保健所から父子手帳というのがもらえる。妊婦の様子や出産の様子を書き記したり、そのあたりの生活の心得なんかを読んだりするのに使う。

(7)おならぶー

どんなにオシャレなカップルも、妊婦のおならには耐えなければならない。というか、腸が圧迫されているので、妊婦はたとえアンジェリーナ・ジョリーであってもみんなうっかりぷーすかおならをするものである。これまでどんなに隙のない美女を演じていても、この運命からは逃れられない。どのみち、出産なんておならぷーどころの騒ぎじゃないので、ここら辺で人生を一度清算しておいた方がいい。

(8)事前の打ち合わせが重要

破水した妊婦を前に平然としていられる人間はそうそういないので、事前に入院時の用意は済ませておくのがベスト。それから、いくつかの事項については必ず妊婦と配偶者の双方のコンセンサスを得られるよう、協議しておく必要がある。たとえば、腰の揉み方。下手な揉み方ややる気のない揉み方ほど妊婦を激怒させるものはない。

出産時の妊婦は、自分がこの世で最も不公平かつ苦痛に満ちた扱いを受けていると考えるし、それもあながち間違いともいえない。そのため、日ごろの不満、現状への不満、将来への不満を何の躊躇もなく次から次へと叫び散らすことだって大いにあり得る。その際、付添人に出来ることといえば、少しでも(数千本の針の山から2本くらい短いのを抜く程度だが)苦痛を和らげるための努力として、妊婦の腰を揉むくらいしかない。その際、少しでも揉み方が気に入らなければ、阿修羅と化した妊婦にここぞとばかりに罵倒されることになる。正直いって、配偶者としては何の痛みも感じないし、せいぜい夜中に起きているとか、じっと座っていておしりが痛いとか、そんな程度の負担しかないわけだから、出産期間のすべての暴言については、事前の取り決めで後でなかったことにするよう約束しておくことをすすめる。そして、腰の揉み方については、やはり事前の取り決めで必ずその方法を確認し、それに沿ってひたすら飽くことなく揉み続けること。ここでうっかり他のことに気を取られて揉み方がまずかったり、事前の取り決めをぼんやりして聞き流していたりすると後々まで非難されることになる。だが、その非難に応酬することなど、出産に立ち会ってしまった人には決して出来ない。特に、相手が苦しんでいる中で食べられなかった病院食をかわりに平らげたりしていた人ならば。

とにかく、出産時にしてもらいたいこと、してはいけないことは事前に確認し、この期間中のあらゆる暴言については出産後になかったことにするという取り決めを結んでおくことが重要だ。正気と理性のなくなった相手を許すことは、そんなに難しくはない。

(9)面会謝絶!

出産直後に見舞いに来るのは非礼も甚だしい。出産を終えた元妊婦だって、尻の毛まで逆立つほどいきみかえっていたばかりで、他人を迎えて挨拶なんぞしたくはないはずだ。化粧もせず髪はぼうぼう、疲労の極みで作り笑顔も満足にできやしない。やっと出てきた我が子を、病原菌だらけの外の世界からやって来た連中のおぞましい手で撫で回されるなど冗談じゃない気分なのだ。だから、せめて数日は最小限の見舞いしか受け付けないよう、配偶者も注意すること。

(10)30歳にもなれば誰だって

子供の成長は人それぞれである。何か月で寝返りをうつ、何か月で歯が生える、など平均的な指標はあるのだが、当然ながらそれは個体差があり、多少早かろうが遅かろうが本人の才能に大きな影響があるというデータはない。どうせ30歳くらいまでにはハイハイくらいできるようになるので、この時期の成長の早さに関する心配のほとんどは無駄である。もちろん、病気その他については真剣に心配する必要があるが、ハイハイもせず突然つかまり立ちするようになるうちの赤ん坊のように、人間にはそれぞれの成長過程というものがあり、それが他と多少違うからといってギャーギャー騒ぐのは愚かというものだ。だから、この手の話題にはいつも「まあ、30歳くらいまでにはなんとかなるでしょ」と返事することにしている。

Popularity: 4% [?]

ホワイトハウスのテンプレ

こんな自動返信メールが届いた。

On behalf of President Bush, thank you for your correspondence.

We appreciate hearing your views and welcome your suggestions.

Due to the large volume of e-mail received, the White House cannot respond to every message.

Thank you again for taking the time to write.

ひどいのは、メールに標題がないこと。ブッシュ政権にはまともな自動返信プログラムを作るだけの人間がいないのか。

Popularity: 1% [?]

高速が売りのYii

新年早々、Yii PHP Frameworkを試している。Ruby on Rails以来、PHPでもウェブアプリケーションに使えるフレームワークは雨後の筍のように登場しているが、Rubyで実現できることをPHPで同じようにやろうとしても根本的に無理があるせいで、いずれもデファクトスタンダードになるにはどこか欠けた状態であり、したがって後発であればあるほど有利な状況だ。

そんな中で、このYiiは高速性を売りにしているところが他とちょっと違っている。いわく、

How is Yii Compared with Other Frameworks?

Like most PHP frameworks, Yii is an MVC framework.

Yii excels over other PHP frameworks in that it is efficient, feature-rich and clearly-documented. Yii is carefully designed from the beginning to fit for serious Web application development. It is neither a byproduct of some project nor a conglomerate of third-party work. It is the result of the authors’ rich experience of Web application development and the investigation and reflection of the most popular Web programming frameworks and applications.

サードパーティーの複合体じゃない、何かのバイプロダクトでもない、これ自体で製品レベルのウェブアプリ開発用フレームワークでございます、というわけだ。

環境設定だが、Yiiで用意されているチェック用スクリプト(requirements/index.php)によれば、PHP側でmemcache、PDO、APC、Mcryptなどの拡張機能が有効になっていることが要求される。この時点でさっきのサードパーティーがどうこうというのが破たんしている気がするが、とりあえずいろいろリビルドしてみる。

準備が完了したらさっそくチュートリアルに従ってテストアプリケーションを作成する。YiiRootはYiiをインストールした先と読み替える。

$ cd /YiiRoot/
$ chmod +x framework/yiic
$ ./framework/yiic webapp ./testdrive

自動生成ツールを使ってみる。存在しないディレクトリを指定しているのでディレクトリを作成するかどうか尋ねられる。Yesを選択すると、ずらずらとメッセージが表示されて何やら出来たらしい。

ブラウザでhttp://example.com/testdrive/index.phpにアクセスすると、確かにそれらしい画面が表示されている。正直な感想としては、うーん、デザインはあまりいけてないな。ナビゲーション用バーにHomeと並んでLoginというメニューがあるのでそちらを叩いてみると、確かにCAPTCHAを備えた何やらログイン画面が表示される。

demo/demoまたはadmin/adminでログインできる。内容に間違いがあるとエラー画面も出力される。

とはいえ、まだデータベースを設定しているわけでもないので、たんなるデモ以上の機能はない。さっそくデータベースの設定をする。が、YAMLで設定を書いてrakeでマイグレーション、みたいなおしゃれな機能はないみたいだ。DBを使う場合はPDOがインストール済みである必要がある。

MySQL上にtestdriveというデータベースを作成したら、

CREATE TABLE User(
    id integer NOT NULL PRIMARY KEY auto_increment,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);

という内容のテーブルを作成する。で、YiiRoot/testdrive/protected/config/main.phpの26行目あたりの配列「db」を直してMySQL用のDSNやらユーザ名やらを設定する。mysql_userは実際のMySQLのユーザ名、mysql_passは、まあわかるでしょ。

'db'=>array(
                        'connectionString'=>'mysql:dbname=testdrive',
                        'username' => 'mysql_user',
                        'password' => 'mysql_pass',
                        'emulatePrepare' => true,
                ),

最後の「emulatePrepare」という呪文は、この後で発生するエラーを防ぐもの。というのも、手順通りここから

$ cd YiiRoot/testdrive
$ YiiRoot/framework/yiic shell

でインタラクティブシェルを起動して、

>> model User

と入力して対応するモデルを作成するとチュートリアルには書いてあるが、うちのCentOS 4みたいにMySQLが4系の場合は「exception ‘CDbException’ with message ‘CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 2030 This command is not supported in the prepared statement protocol yet’」などなどなどの例外が発生する。これは文字通り利用中のMySQLがまだプリペアードステートメントをサポートしていないのが原因なので、先ほどの「emulatePrepare」をtrueに設定することで回避することができる。

で、ここからがYiiの売りのひとつ、crud(create、read、update、delete)用スクリプトの自動作成。crudというのは、ようするにウェブアプリケーション開発者ならこれまで数千回くらい手がけてきた、データの新規作成、一覧、更新、削除の一連の流れのこと。

やり方は、先ほどのシェルから

>> crud User

と入力するだけ。いくつかのスクリプトが作成される。

作成したモデルにアクセスするには、http://example.com/testdrive/index.php?r=userのようにGETのrで指定した小文字のモデル名のURLを利用する。この時点ではまだSEOコンサルを喜ばせるかっちょいいURIはない。さっそくアクセスすると、「New User」と「Manage User」のリンクが表示された何もないページが出てくる。問答無用でNew Userをクリックして試しにデータを作成してみる。

ユーザ名はRoy Rogers、パスワードも同じ、メールアドレスはRoyRogers@example.comに。まだパスワード入力用フォームは平文で入力した内容がそのまま表示されてしまうようだ。

無事完了したら、先ほどのhttp://example.com/testdrive/index.php?r=userに戻って、アカウントが作成されたことを確認しよう。

ちなみにdemo/demoでログインいていたらManage Userをクリックするとエラーになってしまった。admin/adminだと動作する。アカウント種別があるようだ。

チュートリアルはここまで。

Popularity: 6% [?]

あけましておめでとうございます

いつも見る夢というのが二種類あるのですが、大晦日も

・学校に再入学させられる(たぶん中学校)
・学期の途中なので何がどうなっているのかぜんぜんわからない
・どの教室に行っていいのかもわからない
・出席日数はもう足りない状態になっている
・ノートを忘れている

という、いつもの夢を見ました。初夢は、たぶんもう一個のパターン

・目の前で飛行機が墜落するのを一部始終眺めている

を見ると思います。あけましておめでとうございます。

Popularity: 1% [?]