がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

参戦w

いやまぁバトルでもなんでもないのですが。
とりあえず、波の後ろのほうに乗っかりつつ個人的見解とか愚痴とか B-P


発端は、今ホットな
http://www.rubyist.net/~matz/20080126.html#p04
から。

  • いろんなものがfalseだったりするせいで、新たな比較演算子「===」が必要

個人的にはそも「型のあいまいな言語」きらいだしなぁ…

  • hashやlistがobjectが区別できない

えと…「いいもんがなきゃ作る」w

これは…どうなんだろう?
万全とは到底言いがたいけど、PHP5ならある程度…だとは思うです。

  • lambda(無名関数)がない。create_functionはlambdaじゃない

ラムダは自分が嫌いだからなぁ…

  • short_open_tagsやらsafe_modeやらregister_globalsがonになってるかもしれない

論外。そもンなoptionがある時点で。

  • 一貫性のない名前(str_replace,strlen,parse_strとか)

えと…うんわかるけど、これは自分も間違えそうだから微妙だなぁ(苦笑

  • 引数の順番がわかりにくい(in_arrayとかstrposとか)

引数はひとつ。っつかいまどきはクラスでしょ?

  • strpos('abcd','a')は0を返すが、0は偽である

だから型が曖昧なのが以下略。

  • PHPで書かれたたくさんのアプリがあるがどれもHTMLとロジックが分離されてない(本当?)

え〜〜〜〜…多分事実 orz
Smartyとかみんな騒ぐけど、あれって中で「GET&POSTパラメタ取得して関数切って処理」できるよ?

  • PHPは初心者に学びやすい」と言われる。確かにそうかもしれないが、 おかげでどれだけのSQLインジェクションやらXSS脆弱性やら、 ひどいコードが放置されていることか

言語が悪いわけじゃないにしても………ねぇ orz

  • グローバル。使うんじゃないってば。

同じことをいって、某SNSで馬鹿扱いされたなぁ…(遠い目
大体「言語レベルで普通にGLOBALな変数が定義されまくってる」時点で以下略。
ま。コード内にglobalとか書いてあった時点でとりあえずそのコードの信用は数ランク下がりますな。
え? いいえぇそんなぁZendFrameworkにglobalが60数個も書いてあるだなんてげふんごふんがふん。


んと。
「初心者向け」とかいう単語基本的に嫌いで、無駄に敷居下げるから、多分えらいこっちゃなソースが増えるんだと思う。
そういう意味だと、RoRも「10分で作れるとかどうよ」とか思うですが(まつもとさん、心痛めてないかしらん?)
っちゅわけで。

でも、「初心者に簡単」を一般公開されるWebアプリケーションを開発するための言語としての利点にするのはもうやめようよ。

ど真ん中ストレートに同意。

「どの言語で書いてもおかしなコードを書く奴は書く」という指摘もあった。それは言うまでもない事実ではある。そこには反論しない。
が、本当に問題なのは、世の中には「おかしなコードを書くことを助長する言語」もあるという点だ。で、そういう言語にはおおむね「初心者にやさしい」というラベルがついている。どういうわけだか。

コレは多分「訓練されていない初心者が書くから結果的におかしなコードになるんじゃなかろうか」と推測。
別例でVBとか B-P
もうちょい細かく書くと。
本来「ある程度訓練が必要である程度の高さの敷居がある」はずのところに「初心者でも行けまっせで敷居下げた言語」が出現。
初心者が「なんとなく組めたっぽい状態にできる」程度には簡単なので普及 & 組めたっぽいからそれ以上訓練をしない。
訓練しない結果として「奇天烈なコード」とか「がら空きのセキュリティ」とかが頻出。
って流れになると思うです。
つまり「宣伝の仕方とか」? より問題なのは。
ちなみにこの点において。上述にも書いたとおり、Ruby on Railsがまったく同じ道を歩みかねないんじゃないかと思ってるです。


で、上述URIに書かれているコメントから…とりあえず角度鋭くなりそうな突っ込み。

しかし、脆弱性があるWEBアプリケーションを放置したとしても、実際にクラックされることは本当にまれだと思うんですよ。大きなサイトは別ですが。それよりもプログラミングに親しみやすいほうが教育効果も高いのではないかと思います。習うより慣れろですね。

ンなもんは個人サイトでlocalなclose環境でやってくれ。業務でやるんぢゃない。

>strpos('abcd','a')は0を返すが、0は偽である
Rubyの宣伝ですか?

んと。せめて「戻り値は原則===でチェックすべし」ときちんと叫んでないPHPサイドにも山盛りの非があるんじゃなかろうかと愚考。

そもそもプログラミング初学者に
「ライトウェイト言語は簡単だから、これでWEBアプリを作ってみましょう」という形で
学習を勧めるのは、どの言語でも同じ風潮なわけで、
PHPの宣伝文句を批判するよりもそういう風潮そのものを批判されるべきなのでは?

んと…これは基本賛成。実際に「よりまずい」のは風潮そのもの。
ただ「たまさか、それが今一番顕著なのが」PHPなんじゃなかろうかと愚考。


御大に直突っ込み。

すくなくともRubyは「初心者に優しい」と宣伝してません。

うん「まつもとさんは」してない。
でも、特にRoRにおいて、ハイエナ予備軍が「簡単で短時間に作成できる」ことを宣伝しているのもまた事実です。
…もっとも。それを、作成者本人に「非がある」というのはあんまりにもご無体だとは思うですが。
# 後述で本人も「そのような宣伝文句は害悪だと思います」ってはっきり言ってるしなぁ…さぞや今の方向は「不本意」なんだろうと思います。合掌。


ところで。
http://www.rubyist.net/~matz/20050804.html#p05

PHPは言語じゃない。バッチ的にも使えるようになったけど、使うべきというわけじゃない。 私は(他のツールについて改めて学ぶのが面倒なので)PHPをバッチに使うこともあるけど。(Rasmus)

…マヂっすか?(いやまぁ嘘ついてるとは思ってませんが)。
血ぃ吐けそうな内容ですな orz
# まぁ所詮「ぱぁそなるほぉむぺぇぢつぅるづ」だしねぇ B-P


突っ込みに戻って。

言語は正直何だっていい。
クライアントからすれば動くものを作ってくれれば言語なんて2の次すぎる…。

本当に「動くものを作ってくれればいい」“だけ”なら、多分ここまで問題は出ないと思うですがね。

PHPってmagic_quotes_gpcがデフォルトでOnだったりするんで、Offとしない限りSQLインジェクションが起こることはまず無いです。
クロスサイトスクリプティングは不完全」と言う人もいますし、そこら辺の真偽は不明ですが^^;

勘弁してくれ orz


ちゅぎ。
http://www.rubyist.net/~matz/20080129.html#p02
「安全なWebアプリのために言語ができること」
への突っ込み。

  • 安全なメモリ管理

うんまぁ昨今の「高級言語」なら重要かと。

  • パラメタ処理などの抽象化

これは…言語ぢゃなくて「ライブラリ」でやって欲しいなぁとか思う。

  • テンプレートシステムによる出力

これもライブラリ。

  • ORマッパーによるデータベースアクセス

んと…理念はわかるですが、ORマッピングには賛否両論あったような。
なので「別途代替手段でも可」だとは思うです。

  • データフロー追跡

微妙「便利すぎて以下略」な気がしないでもないのですが、安全性という意味ではよいのではないかと。

  • 落とし穴の多寡

この辺はユーザ同士の情報交換も大切かなぁと。


で、コメント突っ込み。

まずは、まつもとさんが言い訳にする「自分はただの一開発者」という認識を改めてください。
あなたは世界中の開発者が使用している「言語」の設計者です。
ましてや滅多にない日本発のものともなれば、あなたはもう開発界の神様仏様なワケです。
そんな人がPHPの欠点を書けば、影響はとてつもなく大きいのです。

言いたいことは凄くわかるし否定もできないんだけど…きっとまつもとさん的には山盛りで不本意だろうなぁと。
一人の人間を「神様扱いして持ち上げたら」、多分その人がかわいそうだとおいらは思う。


で、ちょいと横道。
http://blog.livedoor.jp/dankogai/archives/50993137.html

それは、PHPユーザーは他の言語から学んでいるのか、という点。
PHPユーザーが他の言語ユーザーよりも弱いのは、そこなのではないか。

んと…あえてちょっとだけ反論(反論か?)
PHPユーザが」ではなくて「初心者向け言語と宣伝されている言語を使ってるユーザが」に置換したい。
多分今後も使えるフレーズだから B-p


結論として。
なんかこないだも書いたような気がするけど。基本的には初心者向けの名の下に「"愚かで穴だらけのコードを" "業務で公開した上に" "学ぼうともしない"」のが駄目なのではないかなぁと。ちなみに当然ながらand条件。たった一つfalseになれば全体がfalseになるざんす。
まぁ。お勉強って大切だよねぇって〆で。


追記
せめて「真っ当な」PHP初心者本だれか書かないかなぁ?
正直、いま書店にある本、多分全部駄目出しになっちゃってるし orz

追記

んと…ここのサイト自体は好きなのですが、今回はちょっと突っ込みたいなぁ。


http://neta.ywcafe.net/000828.html

誤解されるようなことを言わないほうがいい立場の人は、言わないほうがいい/かなり気をつけたほうがいい。

うんわからないでもないんですが…少なくともエンジニアたるもの、そこで変な上下作りたくないです。

「たかがひとりのプログラマ」と思いたい気持ちはよくわかるしおかしな思いではないと思うが、 Matz=まつもとゆきひろruby言語の開祖=楽天技術研究所フェロー(以上敬称略)は、一介のプログラマーではない。本人の好むと好まざるとにかかわらず、その一挙手一投足はかなり広い範囲の物事に影響を与えてしまう。

は多分全面的にtrueだと思うですが、それでもなお「変な空気作って言いたいこともいえない」土壌なんて真っ平ごめんだなぁと思ってしまう。


あと。

pearpecl上のライブラリも少しずつ増えていていまやperlcpan同様に必須ツール。

先日も書いたですが。「ChangeLog見てから」にして欲しいなぁとせめて。
# 見た上で。私は「使わない」というスタンスとってます。


で。失礼ながら。おいらが受ける印象は「まつもとさんが言いたいことと違うところを見ている」ようにしか見えない。
多分…というか、希望も入り混じっちゃぁいるのですが。
おそらく、根っこにあるのは
http://www.rubyist.net/~matz/20080126.html#p04

Webアプリケーションをなめるな

この一言に集約されているのではないかと。
あるいはかててくわえて

でも、「初心者に簡単」を一般公開されるWebアプリケーションを開発するための言語としての利点にするのはもうやめようよ。

とか。
で、「たまたま今、PHP界で非常に顕著にそれが出てる」だけなんじゃないかなぁ? と。


いやまぁ根本的にPHPこき下ろしたい部分多々ありますがね B-p
# 「すでにやってるぢゃん」とかいう突っ込みはおいちゃん嫌いだな。

中国の農薬入り餃子に対する各社の対応に思う事

あるサイトにセキュリティホールがありました。
当然ではありますが、それを管理している会社さんにご連絡を差し上げます。とりあえず前提を「その会社さんで自分も今お仕事に関わっている」としましょう。
会社さんはこういいます。
「なるほどそれは非常に危険なセキュリティホールですね。ただ、クライアント様に今その分のお金を出してくれと言っても、うちの瑕疵になってしまうので言えないんですよ。でもうちとしても、それを自前だけでまかなってどうこうするというのも如何なものかと思っているんですよ。とりあえず…そのお話は、上の方に通しておきますので。一端、開発陣を含めて、そういったお話はご内密にしておいていただけますでしょうか?」
しばらく時間が経ちます。
「ええ上の方に話を通しまして。どこか比較的大きな改修案件が取れた時にそのセキュリティホールもふさごうと考えているんですよ。なのでそれまでしばらくお待ちいただいてよろしいですかね?」


複数社で、まったく同じラインのお話を頂戴しています。
場所によっては「家族構成を含む個人情報がDBに入っているSQL-Injection」とか。場所によっては「クレジットカード番号を含む情報が暗号化もされずにDBに入っているSQL-Injection」とか。
管理画面が「BASIC認証のみ」なんてのもザラですねぇ。
それらはすべて「会社の都合で」セキュリティリスクが「しばらくの間」持続するそうです。


12月末には起きていたと予測される、農薬の混入した餃子の話。少しさかのぼれば、例えば食品偽装であり賞味期限偽装であり古紙混入比率偽装であり耐震偽装であり。
きっとそれらは「会社の経営上やむを得ない」判断だったんでしょう。


そんなのが「経営」であるのなら。
自分には、会社を「経営」したいだなんて、1ピコグラムほども思えないのですが。

余談というかなんというか

ふと、興味があったので。


対象:OpenPNE-2.10.3.tar.gz
tar zvxfで展開後、「grep -R GLOBALS * | wc -l 」を実施。
結果………
1018。


ここから何かを思うか思わないかは、あなた次第*1