がるの健忘録 このページをアンテナに追加 RSSフィード

2012-01-22

[][]リアルの中にあるCP

おいちゃんの大好きなTRPGというゲームジャンルの中に、GURPS(ガープス)と言うシステムがありまして、その中でCP(Character Points : キャラクタポイント)という概念があります。

これがさりげなく「現実の考察」において便利だったりするので、ちょろりと書いてみようかと。


GURPSにおいて、CPとは概ね「その人の能力(を数値化したもの)の合計」になります。

つまり、ある人は「剣で戦うこと」が得意であったり、別の人は「魔法で戦うこと」が得意であったり、別の人は「宮廷で噂話との格闘」だったり、或いは「寝屋での以下略」だったり、まぁ個性は色々とあろうかと思うのですが。

同じ「100CPという数値」であれば、大体「同じくらいの強さだろう」という、仮想単位です。


…まぁつまり「得意分野」にうまいこと持ち込むと、25CPのキャラが100CPのキャラに勝てる瞬間もあるのですが(苦笑

言い方を変えると「得意分野にはめ込まない限り」、なかなか勝ち目は薄いってのもまた事実です。


んでまぁ。

このゲームにおいて、スキルは「CPを使って買う」ことを要求されます。

つまりCPってのは実際には「このキャラクタを作成するために消費されたCPの合計」なわけですね。ものっそ擬似的には「貨幣」ってみなしてもいいのかもしれない。

例えば…「剣戟で相手に攻撃を命中させる」という技を。

とある人が1CP支払って覚えると「剣戟:スキルレベル10」になったりします。このゲームだと「50%の成功率」です。

これが2CPを支払うと「スキルレベル11」となり、確立が62.5%に持ち上がります。4CP支払うと「スキルレベル12」、確率が74.1%。

結構違うわけですね。


ちなみに(…旧版の記述だったかもですが)、1CPは大体「200時間の学習と等価」なんだそうで。

200時間って数字はただのゲームタームなのですが、重要なのは「学習時間とスキルが、ある程度比例している」ってこと。


で、ここからが「リアルとの接続」。

多分、本当に多分、なのですが。

Aさん25歳とBさん25歳は、誤差はあるにしても、ある程度「同じ時間数」をすごしていると思うのですよ。GURPS的にいうと「同じようなCPを使ってる」わけですね。

ただ、ンじゃお二人が「どのスキルCPを突っ込んでいるか」で、お二人のスキルの分布図は、えらいこと変わると思うんですね。


でまぁ…わりとよく見かけたり感じたり思ったりするのが。

例えばエンジニアで「そのわりに社内政治に妙に長けている」人って、どうしても「技術力が低い可能性が多い」ように見えまして。

それって多分「他のエンジニアが技術力の学習にCPを突っ込んでいる配分の中で、社内政治に大量のCP突っ込んでいる(分、技術力の学習にCPがまわせてない)」なぁ、って思うこととか、色々あるですよ。


いやまぁもちろん厳密には「人生の大半は寝てたからCP総計が少ない」とか「元の資質(GURPS的には能力値)が高いから、少ないCPでも高いスキルレベルになるから満遍なく高い」とかまぁ色々あるかとは思うのですが。

とはいえ、ある程度「CP総計」と「CPをどれくらい散らかして、どれくら一点集中させたか」っていう観点は、リアルでも有効なんじゃないかなぁ? って思うですよ。


なんていう戯言をわりと昔から考えているので、なんとなくメモ。

[]教えるのってやっぱり難しい…からいい勉強になる

相変わらずの教える系ネタです(「教育ネタ」って書くとなんか違うニュアンスが感じられるので、あえて言い方をホンのわずかにひねってます)。

んと…端的には、例えば「ソースコードレビュー」とかその辺にまつわるお話。


比較的楽なところだと

・コメントがない

・明らかなバグがある

あたりで、この辺は鋭く突っ込んで終わり………ってなわけにもいきません。

「"なぜ"このようなバグを生み出してしまったのか」という、相手の思考ルートに思いを馳せて、可能であれば「その原因を元から滅する」ほうがよりよいです。

ただまぁそれでもなお「これは違うよね?」ですみます。


素晴らしいソースコードインタフェースであれば、その成長をたたえたり祝ったりほめたり言祝いだりしていけばOKです。


問題は、その中間地点。

つまり「明らかなバグではないものの」「嫌なにおいが漂う(可能性のある)」コード。言い方を変えると「とりあえず、自分の好みからはかけ離れた」コード。

ちなみに「下手糞なソースコードレビュアー」は、このあたりを「間違いである」と断じてしまいます、が、おいちゃん的にはそのリアクションは「いかがなものか」感満載でございます。


実際問題として「自分の好みから外れている」コードには、分岐点が存在します。

一つは「考え方や捕らえ方、切り口の違い」。もう一つは「後で厄介な状況が発生する可能性のある、技術的負債を含む」もの。


後者は、きちんと「こういう状況においてこうなるから、この部分についてはまずいから直しましょう」とか言える…のですが。

問題は「どこまで直させるか」。

「全面書き直し」とかいうのは大変に楽ではあるのですが、下手をすると「学習している子のやる気とか意欲とか」そのあたりを、一式、根こそぎ消滅させかねません。

「適切かつ最小限、ピンポイント」な修正の指示は、非常に難易度の高いものがございます。


んで、より難しいのが前者の「考え方や捕らえ方、切り口の違い」。

まず、それを見た瞬間に「考え方や切り口が違うこと」を認識、その直後数秒で「その思考を噛み砕き」「それによって、とりあえず将来"比較的高確率で"起こる可能性のある事象と、その事象をこの実装にぶつけた場合に問題がないか? 或いは問題があるか? のシミュレート」をやる必要があります。

正直なところ、脳みその回路が焼ききれそうになる速度と思考量が、ここで発生します(苦笑

それをやった上で「明らかな問題がある」場合、上述の通り「適切かつ最小限、ピンポイントな修正の指示」を。

問題がない、或いは少なくとも見当たらない場合は「一端修正を飲み込む」必要があるんですね。


…ってなことを心がけてやっていくと、他人のソースコードが本当によい、勉強とトレーニングになります。


書いてあるのは、ぶっちゃけ本当に「無茶レベルの」要求ではありますが。

ソースコードのレビュー、などということをしたり、人様に物事を教えたりするのであれば。

自らにも「ある程度のハードル」を課してみる、ってのも一興かと思うのですが、どんなもんなんですかね?

2012-01-19

[][][]慈悲と峻厳のアンバランスは美しくない

「技術話と魔術話の融合」とかいう、相変わらずピーキーな話を一席。

前半戦(軽く)魔術話経由、後半戦技術の実務話、その後わりあいと「どこにでも言える」ような話に流していく予定です。

予定なんで違うかもしれないけど。


のっけから魔術話で恐縮ですが。

本来的に、生命の樹で重要視されるのは「バランス」です。

つまり「createたる慈悲」と「destroyたる峻厳」は、どちらも重要なわけです。その双方の諸力がバランスよくそろってこそ、ティファレトが美しく輝こうってものです。

ただ、一般的に「創造は善」「破壊は悪」と考えられることも多く…かつ「善」と「悪」に対する真摯な考察もなく。

# いやまぁ「善のみになりたい」んなら、人間やめて天使にでもなったら? って思うのですがね B-p


このあたりから面倒が起きるわけです。

より正確には「バランスを欠いたことによる問題」が。


新しい技術を学ぶのは、非常に面白いです。

特に「難易度の高い、難しい技術」が「理解できた瞬間」のなんともいえない快感度合いは、多分、他でなかなか味わいにくいものなのではないでしょうか?(皆無とはもちろん言いませんが)

その「難しい技術」を「自在に操る瞬間」にいたっては、もしかしたら「これは取り締まり対象になるのでは?」ってなくらい、ドーパミンあたりがじゃぶんじゃぶんあふれかえっているものではなかろうかと愚考いたします。


もちろん。

それらを否定するものでは一切ないのですが。

ただ、時として「難易度の高い技術」におぼれて、例えば「技術の乱用」になってしまったり、あるいは「足元が何気なくおろそかになったり」は、していないでしょうか?

ってのが、このエントリーの眼目。


どこかで伺った伝聞なのですが「簡単なBBSを組むために、デザパタを20種類駆使して作った」なんて御仁もいらっしゃるようですが。

なかなか壮大に「ゲラゲラ笑える」笑い話ではありますが…果たしてどこまで本当の意味で「笑えるか」というと、なかなかに難しいものがあるような気がいたします。

話の本質は「道具の乱用」です。では、道具を「寸分の狂いもズレもなく適切に扱いきっている」と言い切れるだけの自信は、はたしておありでしょうか?


道具の最良の使い方は「使わないこと」だと、おいちゃんは考えております( http://d.hatena.ne.jp/gallu/20091220/p1 )。

「ハンマーを持つ人には、すべてが釘に見える (If all you have is a hammer, everything looks like a nail.) http://ja.wikipedia.org/wiki/%E6%A7%8C 」そうですが、実際問題として「世の中のすべてが釘」なわけではありません。…いやもしかすると世の中のすべてが「紐」である可能性はあるそうですが*1


そしてまた、一度学んでしまうと「理解したつもりになる」のが、人間の性なのかも、しれません http://d.hatena.ne.jp/gallu/20070623/p1

「理解できた瞬間、理解から遠ざかる」のが技術であり知識でありスキルであると思うのです。

かくして「その道具の真意も理解せずに理解したつもりになり」「適切であるか否かではなくて"使いたいから"道具を使い」「道具を使う快感に酔いしれて」「さらなる乱用に猪突猛進」と。


成長とは、まごう事なく「createとdestroyを繰り返す工程」である、とおいちゃんは信じております。

学んで身に着けて、身に着けたものを壊して、そのかけらを集めて更なる何かを作って、それをさらに壊して。

そんな中で「なにやろうがびくともしない、本当の芯」が見つかって、それが多分「基礎」とかって呼ばれるものなんじゃないでしょうか?


ケセドとゲブラーの間での往復。それこそがまさに「力」になるんじゃないのかなぁ、っと、さりげなく魔術的暗喩*2


ただ、現実問題として「破壊」って難しいと思うのですよ。

適切な破壊は必要なはずなのに、暴走させるとあっという間に「分かりやすい悪」になる(ゲブラーの過剰)。

そうすると次は「破壊そのもの」に対する嫌悪感が出てきて。

創造たる慈悲のセフィラーに腰掛けてしまうと、瞬時に「怠惰」になってしまう…んだけど(ケセドの過剰)。

問題は、過剰的破壊と比較して「突っ込みにくい」ので。かくして「…まぁいいか」と、贅肉が増える方向に堕落してくです。


完璧とは「何も足せない」以上に「何も引けない」ものを指すのですが。


或いは、もうちょっと「えぐるような」話をすると。

新しい勉強や知識やスキルや、その辺の勉強って、とても面白いのですが。

一方で「今自分が持っているスキルのたな卸しと磨きこみ」って、なかなかに地味な作業で、結構なところでおろそかになってるんじゃなかろうか、って思うです。


スキルの深広練」で展開したネタですが。

http://d.hatena.ne.jp/gallu/20110425/p1

http://d.hatena.ne.jp/gallu/20110504/p1

http://d.hatena.ne.jp/gallu/20111007/p1


「広げて」「深める」のはもちろん大切なのですが(そこが入り口だし)、最後の「手に馴染ませる(練達する)」というところが…なんか、わりとよく「抜け落ちてるんじゃないかなぁ?」と思って。

で…色々考察をしてみると。

その一端に「今まで"出来ている"と思っていた自分」を「壊したくない」、ようはゲブラーの諸力の欠落、ってのが、一因としてあるんじゃないかなぁ? って思ったです。


でまぁちょうど、魔術話もそろそろ「少しくらい書きたいなぁ」とか思ってたので、ちょうどよいので、ちょろり。

*1:おいちゃん的にはむしろ、世の中のすべては「クィントエッセンス」だと主張してみたいw

*2:こんだけ露骨なのを暗喩とか言うあたりが素晴らしくおこがましい B-p

2012-01-13

[][]芥子の種を持ってきてもらう

システムを作っていると、時々*1、無茶な、或いは無理な要求に遭遇します。

無理であることを説明してもよいのですが…いまひとつ、説明が理解いただきにくいシーンというのが、極めてごく稀に、ほんのわずかばかり、微々たる例外的ケースとして、可能性があります*2


実力行使で(精神的を含む)暴力に訴えるのもまた一興ではあるのですが、あまり楽しい結果にはならないことも少なくないので。

最近つかっているメソッドを紹介いたします。


端的には

・相手に、(彼ら的には)一見可能そうで、その実不可能な「依頼」をしてください

・で、「その依頼の成果がでたら」実装可能です、と、にこやかに伝えます


「うちのサイトの被リンク数が知りたいので、googleとかを使わず、独自で計測できるプログラムを作成してください」とか言われてみたとします。

被リンク数とは「他のサイトから当該サイトへのリンク、が張られている数」です。

母数は、基本的に多分「全世界にあるすべてのWeb Page」です。

いっぱしのエンジニアであれば、考える前に「母数 = 全世界にあるすべてのWeb Page? はぁ?」となるのですが。

これを前提に「ンなもん無理です」といっても、聞き分けのよくない子ちゃんが、ごく稀にいます。


ですので、このように話をします。

「なるほど被リンクですね。では、ベースになる"全世界のすべてのWeb pageのURI"のリストを頂戴できますか? そのリストがあれば、時間はかかりますが(HTMLクロールするからねぇw)、できなくもありません」。


…いやいっそ素直に「無理」って言ってあげたほうが、って気もするのですが。

時々、本当にごく稀に、きわめてレアなケースとして「自分の思い付きが最上位にあって、人の忠告がいまひとつ耳と脳に入り込まない」タイプが、ごく少量、いらっさるので。


元ネタは、お釈迦様の逸話。

こちらのサイトを引用させてもらいまふ。


http://homepage3.nifty.com/junsoyo/hiros/hiro49.htm

キサーゴタミーは,やっと授かった子どもを亡くした。「死んだ子どもを生き返らせる薬」を求めて尋ね歩き,半狂乱でやった来たキサーゴータミーにお釈迦さまは,「芥子(カラシ?)の種を貰っておいで。但し死人を出したことの内ない家から」と言うので,彼女は必死になって死人を出したことのない家を村中探すのだけれど,そんな家があるわけがない。そのうちに彼女は「死者を出したことのない家はない」ことに気づき,「生あるものは必ず死ぬ」というお釈迦さまの言葉を悟って仏弟子となった。


つまり「気付きがあるまで、芥子の種を探し回ってもらいましょう」と。


まぁ「万が一、芥子の種がみつかっちゃうと」もちろん「実装できるんだよね」といわれるので、その辺はちゃんと真摯に設計と論理的考察をする必要があるのですが(別に、無茶を吹っかけることそのものが目的ではないので)。

「100%無理」ではなくても「ちょっと工数膨大ぢゃね? その話」って時は、一度「芥子の種を探してみて」って言ってみると、もしかすると、今までよりは「少しだけ」楽になる、かも、しれません。


保証はしませんが B-p


あぁ真面目な余談。

この辺の話をふって「ちゃんと考えてくれる」お客さんは、なんだかんだ、貴重です。

そういうお客様は、大切に関係性を作っていきましょう。


追記

芥子は、「カラシ」ではなくて「ケシ」であるそうです(岩波仏教辞典、を引いてくださった方がいらっしゃいました。詳しくはコメントを参照してください)。

*1:正確な頻度については言及を避けます B-p

*2:つまり「しょっちゅう」

2012-01-12

[]徳はリファレンスカウンター

よく「陰徳を積む」なんていいますが、あの「徳」です。


結論

徳はリファレンスカウンターなので。

何かをしてあげた当人に見返りを要求しないようにしましょう。GCが働いて、せっかく積んだ陰徳が解放されちゃいます B-p


詳細

とりあえずあなたが「何がしかの上司」であるとしましょう。上司ですから、あなたには「部下」がいます。

例えば「上司」が「部下」に飯をおごったとして。その見返りを要求するのは止めましょう。

「上司」が「部下」に飯をおごった(よいことをした)時点で、どこかにある

いいことをした:上司→部下

という変数がインクリメントされます。なにもしてなきゃ、多分1が入ります*1


で。

このまま行けば、陰徳はいい感じの数字になりそうですが、これで「部下が上司に恩を返す」と、この変数はデクリメントされます。

で、この変数は「リファレンスカウンター」なので、0になったらGCがお掃除しちゃうので「せっかく積んだ陰徳」が消えちゃいます。


もったいない。


なので。

もし部下に「おごってもらったから今度ぼくが珈琲でも」と言われたら「俺にはなにもしなくていいから、お前が部下を持ったら、部下に飯をおごってやれ」といって、陰徳変数のデクリメントを防ぐようにしましょう(笑


っていうふうにおいちゃんは考えているので。

おいちゃんに飯をおごってもらった記憶がある人、教育を受けた心当たりがある人は、くれぐれも「おいちゃんに返すのではなく、今いるいつか出来る部下にそれをやってあげる」ようにしませう。

*1:インクリメントだしねぇ。2だったり0.1だったりするとびっくりだよおいちゃん

2012-01-11

[][]DoS回避用の max_input_vars が出てきました

攻撃付近については

http://www.ipa.go.jp/security/ciadr/vul/20120106-web.html

PHP, Tomcat などを利用して開発されたウェブアプリケーションにおけるサービス運用妨害 (DoS) の脆弱性(CVE-2011-4885等)


ウェブアプリケーション等で使用されている言語 (PHP, Ruby 等) やウェブアプリケーションフレームワーク (Apache Tomcat 等) のハッシュテーブルの実装方法に問題があり、サービス運用妨害 (DoS) の脆弱性が存在します。この脆弱性が悪用されると、運用中のウェブサービスを提供できなくなるなどの被害にあう可能性があります。

あたりを。後は適宜「ググレカス*1」。


とりあえずパッチを覗いて、なんとなく欲しい情報を見つけてみました。

max_input_vars


PHP_INI_SYSTEM

PHP_INI_PERDIR

…むぅ、やっぱり orz

可能なら「PHP_INI_ALL」がうれしかった気がするのですが…まぁまぁ、やむをえないところでしょう多分。

$_GETとかを「使うタイミングで遅延評価」してるわけでもないでしょうし。…おそらく。


デフォルトはどうも1000みたい。…100くらいでいいような気がするんだけどなぁ? 実際、2個以上のパラメタを、おいちゃんは警戒するし。5個以上なら基本「嫌悪対象」だし。


で、上述に違反すると、どうも

Input variables exceeded [max_input_varsの数値]. To increase the limit change max_input_vars in php.ini.

ってメッセージが出るぽい。


後は…

max_input_vars, php_core_globals, core_globals

ってのが、気になったっちゃぁ気になった。

core_globalsだから、おそらく「ユーザが使う普通のglobals」ではないと思うんだけど(&、おいちゃんの監督下でGlobalなんてつかったら、基本"折檻"レベルのペナルティですが)。

多分これは「HTTPヘッダ使って同様のアタックがくることを防ぐ」感じ、なんだろうなぁ、と。…設定別々だといいのに(苦笑


まぁ、何はともあれ、おそらく結構重要と思われるネタなので。

珍しく、流行を先取りしてみようか、とw

*1:微妙に古いかしらん?