仕事上の愚痴

 愚痴っていうか反省ですけど。
 データセンタ移行時に、確認不足で大事な所がリンク切れしてました。
 社長超不愉快。
 馬鹿だなぁ、俺。やけ酒。
 昨日の徹夜残業も、社長からすりゃ「できてあたりまえ」な案件であり、「社員が一人、アルバイトな後輩の尻拭いで徹夜した」みたいな事実は評価に値しない。ていうか俺の管理責任ですね、はい。
 ああウィスキーが進む。てやんでえ。

酔って書いてますが

 matz氏がphpをdisった件※について、なんか書きたくなった次第。
(※部分的に「disったと看做された」という事でもありますが、文章の組み立てとして先にphp批判の紹介してるから、繋げて邪推されてもおかしくないよなー。matz氏の組み立て方もしくは「火が付く前の補足」が欠けていたのがまずかったと思う)
 模範解答的なコメントも出揃ってるし、よく判らないコメントについての反論も充実してるので、まあ今更本筋に意見する事もないでしょう。
 なのでその界隈の脇道に触れてみる。
http://anond.hatelabo.jp/20080130215148
 には妙に同意させられた。不快感もあるんだけど、なんていうのかな……人間、反論しようがない事を指摘されると苛々してしまうという、その手の感覚かも。
 
 セキュリティセキュリティ、と脅し過ぎ。
 実際に面白い物を作れば良い。そうそう、その通り。そのプレゼンに成功したなら、セキュリティ専門家のレビューのための経費を勝ち取ればいいの。 
 しかも、脆弱性が無視出来るwebアプリってのがあります。社内アプリケーション。けっこ重宝される分野なんですよね。社内からしかアクセスできないwebサーバ上で、SQL叩けない事務員の皆様の効率を徹底的に手助けする用途。この分野では、ブラウザ互換性さえある程度無視できます。大企業では「IEだけで動けば十分、他の検証必要なし」なんてのも多々あることでしょう。
 次いで、課金が絡まない部分に於いて気をつけるべき事って場所も限られます。
「絶対にここで徹底的にチェックしなきゃやべえ!」
 って場所は確かにあるんだけどさ、――もうね、そういう場所ってもちろん玄人が皆神経質になる訳ですが、そういう場に絡むと、入社1年の初心者でも「先輩……ここ大丈夫なんでしょうか?」って聞いて来るレベルな訳です。
 最終的にはカード課金処理を実装する際には文字チェック、ユーザのパスワード投げ合う際にはハッシュ化の上でチャレンジレスポンスなどできっちり生文字隠蔽されてるかのチェック、サーバサイドでユーザ情報が漏洩しそうなケースの考察……いろいろ出て来ますが、みんな想像力豊かです。
 ユーザーからの訴訟やらで失業のリスク背負う訳です。知恵熱出そうなくらい考えますよ。

そうでない場合の屑コード/迷惑コードという物がある

http://d.hatena.ne.jp/Hamachiya2/20080131/security
 三流のプロとしては、hamachiya2氏の指摘する「セキュリティ過敏症」は愚かであり、それよりも『初心者こそ「負荷に気を払え」』って言いたいところです。
 その上で、matz氏の言を考察する意義が見えて来る。
php言語」に対する批判ではなく、「php初心者がコード配布を続けた結果としての現状」に対する批判になるのかな。
 特定の高負荷状態への配慮が足りない「配布アプリ」が増え過ぎているという点ですね。俺に言わせればかのXOOPSも「なめとんのか」という状況です。3モジュール数百万レコードくらいで飽和されたらSQL生成部分全部書き直すしかないわ……と言う事でJava部隊に投げました。
(配布コードが屑なのか、修正できずにコミットできない俺が屑なのかでいうと、もちろん後者です。
 社用案件であり、ライセンス範囲内で文句を外部に投げる事ができない状態だった訳です。結果没られた訳ですが、もちろんXOOPS関係者に責任はありません。……いずれ個人的な改良コードにしてコミットしたいとは思うんだけど、社内承認および熟知がめんどくさい上に最新のコードにコミットできなさそうという状態で放置――)


・活発「故に」いろいろなユースケースに対する汎用化が不十分なんじゃないか
 仮想環境下で動かしているCentOS5.1finalとFreeBSD6.2を実験用自宅サーバとしてるんだけど、「CentOS重っ!」 とか叫んだりしてます。ランレベル切ってコンソール起動、不要サービス切りまくりのapache待機状態だけで、ホストのCPU60%(※30%+30%)とかないだろう。FreeBSDだと20%未満。
 いやね、CentOSはいいOSですよ。BSDPortsでめんどい事がさくっとできる。デフォルトでGUIなのも、「設定してからランレベル下げたい」ってユースに適応してると思う。所謂
バッドノウハウに対するグッドラッパー」として妥当。
 でも、Linux界隈って「活発過ぎるが故に」細部で汎用的な処理/最適な処理ってのが徹底できてない感じなのよね。だれかsleep()の変わりに空forループでインデックスカウンタ回してるプロセスでもいるんじゃねえだろかっていう。

 Linux界隈は今も活発。FreeBSD界隈は比較的閑散としてるけど、堅い人達がしっかりメンテしてる印象を大衆に根付かせっぱなし。Ports Correctionも良い感じに動く。
 でも実験機ならLinuxだよね、って世界。「例のアレを例のコレの依存関係をサクっとクリアした上でパッケージマネージャーでさっくりインストール、俺スゲー。社内プレゼンもカ・ン・ペ・キ・♪」
 ……そんなんだ。実際。エラーが出てもどっかしらで何か引っかかるのでなんとかなる(ex:配布アーカイブ内のドキュメントだったりGoogleだったり、インストーラスクリプトその物だったり)。
 FreeBSDは堅いのが良いのであって、活発なLinux故の利点/欠点と並べて語る訳には行かない。

で、不十分だと何が悪いのか?

PHPでカタいプログラムが書ける」という命題は、「Linuxでカタいシステムを提供できる」とほぼイコール(≒)だ。
 細部まで分かってる奴が、徹底的に問題点を知悉した上で使えば問題ない。どちらも面白い共通項があり、「普及している」「環境として提供されやすい」という点を挙げておく。
 そして、往々にして「徹底」はされていない、という現実にブチあたる。
 しかし「問題」はそれほどは発生していない。
 見過ごされ易い問題ってのは非常に沢山あって、実はもっとも厄介な「問題」ってのがコイツなんだ。
 そして、問題を発見するスキルは常に「運用経験」であり、「その環境に対する熟練度※」でしかない。
(※運用経験ゼロだと、いくら本を読んで知識を得た所で意見する価値はない――むしろ運用経験2年程度の先輩に殴られるかもしれない。って俺はサーバは本業じゃないので傍目でそういった様子を見ているだけなのだけどw)
 運用のプロ、もしくはレビューのプロがいる場合において、プログラマーがしなければいけない事とは何か。
 前者に於いては、運用者が分かり易いコンフィグを仕様書として提供する事。
 後者に於いては、レビュアーが分かり易いコードの仕様書を揃えて提供する事。

 仕様なんて「他者に説明できる」という要件さえ満たしていればいい。
 もちろん語尾のすべてが「にょ。」だったりすると問題だけど、実際にみかか相手の仕様書でも「※ここちょっと自信ありません^^」なんていう事例は見た事があるので、実のところかなり寛容。だと思う。

 世の中、分業化が徹底しているものです。
「バグがあるコードはまずい」
脆弱性があるコードはまずい」
 当然だ。しかし上記二つに「精通するべきだ」と思っている人には少し補足がいると考える。
 君らは「バグレビュアー」「セキュリティーレビュアー」「プログラマー」のどれになりたいのか。という問題提起。

 セキュリティ云々よりも、「サーバー負荷を意識した設計になっているか否か」の方が重要になっちゃう。
 俺が素人コードの修正時に悩むのって、いつもコレだからってのもある。
「そりゃさぁ……今は七千件程度だから三秒待ちで済んでるけどさぁ……他のサービスも動いてるんだし、全行舐めてハッシュに入れて整形出力したらマズイっしょ」みたいな状態だ。JavaScriptでやれる社内案件の為に、グローバルに向けてるwebサービス負荷を食っている訳だ。
 この辺、「Cだから速い」「PHPだからCGIより速い」「Rubyだから遅い」「Pythonなので並」みたいな一般論では割り切れない世界になってます。Rubyでもいいのよ。「Rubyだから最適なアルゴリズムを組み易い」っていうプログラマには素直にRuby渡すべきです。ほんと。CGI経由でも※。
(※俺は社内だろうがCGIRubyActiveRecord多用されたら頭突くけど)

 全ての問題は一カ所に集まります。

 「PHPが普及し過ぎたから」

 ……これですよ。Matz氏が分からん訳はないと思う点でもある。
 でも、(webアプリとしての)「Rubyの暗黒面をPHPが支えているんじゃない?」という着想が頭から離れない……。

 俺が類推するのはApple
 MacBookを使い勝手良くて活用してるけど、最近のAppleってそういう点でPHPの普及になぞらえて「上手くやってる企業」だと思う。
 Macシェア少ないのを良い事に「ウィルス少ないっすセキュリティ大丈夫っす」とか売り込んでるのと一緒で、結局Mac OS Xだって完璧には程遠い、「でも便利な品」に過ぎない。
 シェアが逆だったら、正直Appleの体質では「週間マイクロソフト※」のような徹底的な対策は難しいだろうと思う。今のOS価格のままだと尚更だ。難しいところだと思うんだよなぁ。
 ※毎週のように来るアップデートに対する揶揄。Appleは不具合認知が進んでも頻度が上がらない感じ?

 Appleはシェアが少なくても売り上げている。
 Matz氏や笹田氏は、Rubyのシェア拡大自体には興味がないような発言を公式の場で繰り返している。
 Microsoftは例年、需要の下降曲線の「ゴースト」に怯えている。もちろん元よりゴーストであり、確実な脅威でもない。でもサクっと消えてくれる相手でもない。
 LinuxがMSを潰すのではないか。JSPJavaの普及で、もうPHPは不要なんじゃないのか。一方MSは.netを出した。馬鹿野郎MSのOSデシカウゴカネエヨボケ。で、monoが登場する。

ZendはMSを目指すべき、他言語の自由の為にも

 ぬーむ……。ここで思うんですよ。MSって、初心者プログラマーの囲い込みに一番長けてる企業なのね。
 おい、今「え?」って言った奴、お前だ。
 Visual Basicという単語を思い出せ! そして三回叫ぶんだ!
 Visual Baisc! Visual Baisc! Visual Baisc!
 思い出したか?
 それじゃ今すぐ忘れていいです。ごめんなさい。おれ大嫌いです。上でもわざとBaiscとか打ち間違えるくらいですし。
 
 PHPはWebアプリケーション界のVB
 初心者の囲い込み方についても、実用者に対してもだ。
「Battery Included」なRubyPythonの一歩先を行っている。Perlのラリーにも「パッケージが良い」と言わせた点、俺は最大限の賛美と受け取って良いと思うんだ。
http://www.perl.com/pub/a/2007/12/06/soto-11.html?page=2
 この文中のネームスペースの件も、PHP6での導入が決まっているので今後改善される余地はありかなと思う。しかし、PHP6にはgoto導入も確定っぽいので不安はよぎる……。

 Matz氏が最初から、「以下はPHPの話ではなく、Rubyも注意しなければいけない点だ」とか書いておけば良かったのに、という論旨をmixiで書いていたのだけれど、時既に遅し。
http://www.rubyist.net/~matz/20080126.html#p04
 や、Matz氏が狙った可能性もあるけどさ。。そこまで邪推するのは野暮ってもんだろうなあ。