いつか作ります RSSフィード

2009-03-31

アジャイル・エデュケーション…? 02:46 アジャイル・エデュケーション…? - いつか作ります を含むブックマーク はてなブックマーク - アジャイル・エデュケーション…? - いつか作ります アジャイル・エデュケーション…? - いつか作ります のブックマークコメント

エンジニアを目指す学生は,学生のうちから様々な実務経験を積むことが大事だと考える。実務を通して自分の将来像を明確化することで,学生時代を有効な学習期間に当てられるのだという。「新入社員の教育に1年も2年も費やしていては,企業の競争力が弱まってしまう」(長部氏)

学生のうちには全く役立たずな方向に突っ走っても、「突っ走った」事自体が良い経験となり、その後に生きると思うのだけれど。というわけで、学生時代の勉強からいきなり実利を求めるのはどうなのだろう。

いや、どうせどっちに走っても経験になるってんなら正しい方向に走ったほうが無駄が無いってのは尤もだし、大学の研究では理論をやるとしても実務経験は役に立つのだろうけれど。でも、どう考えても無駄な方向にリスクを考えず突っ走れるのも大学の利点だよね、多分。日本の素人クリエイティブの7割程度は大学生が生み出しているような気がするし、メリケンのベンチャーも大学発って多いし。

先は読めない

このせりふには,学生時代の怠惰への反省だけでなく,「将来仕事で必要だと分かっていたら勉強しておいたのに…」という悔しさも込められているように思う

で、タイトルに戻る。

大学時代の勉強を人生の「設計」、社会人になってからのほうを「実装」と考えると、なんとなくシステム設計に近い構造が見える。設計段階=大学の段階で、実装フェイズに入ってから必要になるものを全て読みきることは出来ない。

というか「仕様変更」も当然入るわけだ。学生時代に「将来はネットワークエンジニアだ!」という要件定義をして、それを元に能力を伸ばしていっても、途中で方針転換して板前になるかも知れない。それは極端だとしてもwebエンジニア程度には変わるかもしれない。

となると、学生時代から分野を絞って専門知識をつけさせる、というのは、ウォーターフォール対アジャイルの構図でウォーターフォールの失敗要因として挙げられるアレと同じ事をしているのではないか、なんて事を思った。

ええと、とりあえず、設計フェイズで全ての仕様を変更の可能性まで含めて網羅するのは不可能だし、学生時代に将来必要になる知識を知るのも不可能です、と。

まとまらねぇ。

2009-03-10

[]ニコニコの検索結果応答が遅い件と、scriptタグがあった場合のブラウザの挙動 19:46 ニコニコの検索結果応答が遅い件と、scriptタグがあった場合のブラウザの挙動 - いつか作ります を含むブックマーク はてなブックマーク - ニコニコの検索結果応答が遅い件と、scriptタグがあった場合のブラウザの挙動 - いつか作ります ニコニコの検索結果応答が遅い件と、scriptタグがあった場合のブラウザの挙動 - いつか作ります のブックマークコメント

神書籍『ハイパフォーマンスwebサイト』を読めばそれで済むのだが。

タグ検索結果ページを開くとレンダリングが途中で止まるが、そこに何があるかというと、これがある。インデントは見やすく調整してある。

<!--↓ニコニ広告↓-->
<div class="mb8p4" id="nicoads">
 <p><img src="http://res.nicovideo.jp/img/tag/nicoads/frm_top.gif" alt="ニコニ広告"></p>
 <div class="nicoads_bg">
  <table width="100%" border="0" cellpadding="0" cellspacing="4">
    <tr valign="top">
    <!--↓出力範囲↓-->
      <script type='text/javascript'><!--//<![CDATA[
      (引用者により中略)
        document.write ("'><\/scr"+"ipt>");
      //]]>--></script>
    <!--↑出力範囲↑-->
    </tr>
  </table>

ニコニ広告のHTMLを書き出すスクリプトである事は通信を分捕ればすぐ分かるのだが、こいつが原因。

仕様が決まらないのでサボる

ブラウザは、上から順にHTMLをパースしレンダリングしていくが、scriptタグがあると、そこでレンダリングを中断する。

何故かというと、scriptタグによってページが書き換えられるかもしれないから(実際、このスクリプトはページを書き換えているわけだ)。

スクリプトの実行を後回しにしたら、最後の最後で「…と、以上のHTMLをこのスクリプトの生成したdivの中に入れてね!」と言われ、レンダリングのやり直しになるかもしれない。だから、ブラウザはスクリプト実行を優先する。

どうすればいいか

  • scriptタグはなるべく後ろに置く

script以前の部分はレンダリングされるので、ユーザーから見た体感時間が短くなる。ページの上の方に書き出したいならdocument.writeじゃなくてDOM操作を使えばいい。レンダリング完了後、スクリプトが実行された瞬間に再レンダリングが発生する事になるが、はるかにマシな状況になるはずだ。

たとえば、twitterの自分の最新書き込み内容が遅れてロードされるのなんかもコレ。

(事前に書き出すものの大きさが分かっているなら、あらかじめ大きさを決めたボックス内に新しい内容が描画されるようにしておくと、再レンダリングの際にユーザーから見たほかのものの位置がズレなくてよい。これをしないと、検索結果をクリックしようとした瞬間に広告ロードが完了し、検索結果がピョイっと下に逃げるような事が起きる)

  • defer属性を指定する

deferというのは「このscriptは描画内容を変更しないので実行を後回しにしていいですよ」という指定。まあ、書き換えるわけなので使うべきではない、というのは尤もな話だが、とりあえずこれを指定しておくとscriptタグを最後にしたのと同じような効果が得られる。

追記

ものすごい速度で修正されてしまったので、現在は再発しない。

しかし、この修正方法もなかなかに面白い(多分すぐ別の方法に書き直されると思うので説明はパス)

2009-03-08

[]ぼくらはバギムーチョの何に腹を立てているのか 11:38 ぼくらはバギムーチョの何に腹を立てているのか - いつか作ります を含むブックマーク はてなブックマーク - ぼくらはバギムーチョの何に腹を立てているのか - いつか作ります ぼくらはバギムーチョの何に腹を立てているのか - いつか作ります のブックマークコメント

DQ9の魔法体系が追加され、

メラ → メラミ → メラゾーマ → メラガイアー

ヒャド → ヒャダルコ → (ヒャダイン) → マヒャドデス

イオ → イオラ → イオナズン → イオグランデ

バギ → バギマ → バギクロス → バギムーチョ

となる、という事で派手に吹き上がっている人々がいる*1。スクエニは、何か踏み込んではいけない部分に踏み込んでしまったのだろうか。

DQ魔法小史

ドラゴンクエストシリーズの呪文体系 - Wikipediaを見ると、DQシリーズの魔法の変遷が見て取れる。

メラ → メラミ → メラゾーマ

ヒャド → ヒャダルコ → (ヒャダイン) → マヒャド

イオ → イオラ → イオナズン

バギ → バギマ → バギクロス

というツリーが成立したのはDQ3(1988年)。それ以降のシリーズは、効果範囲の変更やヒャダインの削除、特技システムによるスキルの多様化などの細かい修正はあったものの、基本的にこのツリーを踏襲している。変化があったのは2006年(後述)なので、実に20年近くもこのツリーは維持された事になる。

我々は、20年近くも「炎系最強呪文といえばメラゾーマ」で過ごしてきたのだ。その感覚はこころの深い部分に既に根ざしている。

二次創作における魔法

『ダイの大冒険』ではこのあたりの感覚を理解していて、中盤の強敵、氷炎魔団長フレイザードは「メラゾーマよりも強力なメラ系魔法」を撃つのではなく、五指爆炎弾(フィンガー・フレア・ボムズ)でメラゾーマを5発同時に撃つ事で圧倒的な力を見せ付ける。大魔王バーンの「いまのはメラゾーマではない…メラだ」も、メラゾーマ=最強という共有体験があって初めて成立する台詞である。

『ダイの大冒険』には創作魔法が多数登場するが、これらは全て既存の魔法の存在を否定しない。ダイ世界においても炎系最強はメラゾーマだし、勇者の必殺技はデイン系派生技である。最強魔法メドローアは既存の魔法体系とは干渉しない形で表現されている。大魔法使いは「ギラ系最強はベギラゴンでその上は無い」と断言しているし、インフレの激しい本作においても、各最強魔法は特定のキャラしか使えない、などの差別化が見て取れる。

FFシリーズにおける魔法

FFシリーズでも長らく最強の座を占めていた「ガ」系魔法の上に「ジャ」魔法が登場したが(FFT以降)、これにはそれほど大きな反発が起きなかった。元々が

ファイア →ファイラ → ファイガ

という分かりやすい構造であり、メラゾーマと違い「この『ガ』はラのひとつ上を示す接尾辞に過ぎない」という意識があったからだと思われる。

ジョーカー

今回調べて初めて知ったのだが、実は『ドラゴンクエストモンスターズ・ジョーカー』で既にバギムーチョなどは登場しており、メラゾーマは2006年の時点で最強魔法でもなんでもなくなっている。

何故これが話題にならなかったのかといえば、DQMは正規シリーズに比べると低年齢層向けの派生作品と認知されており、また実際に大人のゲーマー層のなかに見向きもしなかった人が多かったからであろう。社会的にも、正規シリーズのDQとは注目度が全く違うという点もある。

まとめ

バギムーチョが反感を買う背景には

  • ネーミング規則により、メラゾーマが単なる「メラミのひとつ上」ではなく「メラ系の最強魔法」として認知されていること
  • 極めて長い間メラゾーマ等が最強の座にあったため、「メラゾーマ=最強」という意識がユーザーに芽生えていること
  • 派生作品『ドラゴンクエストモンスターズ・ジョーカー』は低年齢層を中心にリーチしており、それを見ていなかった高年齢層のゲーマーにより反発されている

辺りがある、と考えられる。

うがった見方をすれば、スクウェアエニックスが既に我々高年齢層をDQのターゲットとして見ていない可能性もあるだろう。DQとFFという2大シリーズを手に入れている以上、DQでは回顧厨たるおっさんを切り捨て、DQ=低年齢層向け、FF=高年齢層向け、という指針を打ち出しても不思議ではない。つまり

85 :以下、名無しにかわりましてVIPがお送りします:2009/01/19(月) 13:42:35.55 id:cqh16t/10

DQは子供向けだからいいんだよ

お前らはもう対象外なんだよ

*1:あれ、マヒャドは?

wanderingdjwanderingdj2009/03/17 02:58http://ugomemo.hatena.ne.jp/014FD1A04CD9F03A@DSi/movie/D9F03A_08A1AEB2D0E01_001
ネタにはした。

2009-03-03

コメントアウト・コードは是か非か 12:38 コメントアウト・コードは是か非か - いつか作ります を含むブックマーク はてなブックマーク - コメントアウト・コードは是か非か - いつか作ります コメントアウト・コードは是か非か - いつか作ります のブックマークコメント

コードのコメントアウトが正当化される条件を考えてみた。

ちなみに私は割とザクザク削ってしまう方で、あまりコメントアウト・コードは残さない。理由はマイ美的感覚がそれを許さないのと、不要な行が残ってるとコードを読む際に邪魔だから。

コメントとして残す。

  • 「どうしてここはこう書かれているのか」を示すために、選ばれなかった選択肢であるコードと、選択の理由を残す。
  • どの選択肢を取るかが確定していないと思われる場合に、「こうなるかもしれない」という可能性を示すために残す。これもやはり「意図」を残すという側面が強い。

使われなかったコードの方に戻す際の作業量が多いから、という理由でコメントアウトコードを残すのは無駄。バージョン管理システムに頼れば、その作業量は多くない。残すとしても、代替コードがどのリビジョンにあるかを書いておけば事足りる。

例えば、普通なら (a+b)%c と書くところを、 a+b で桁溢れする可能性を考え ( ( a%c ) + ( b%c ) ) %c と書いた、とかいう場合、 (a+b)%c をコメントアウトして、「桁溢れしそうなんでこっちにしとく」とでもコメントしておいた方が読みやすい。

「すぐに戻す」という意思表示

逆に、1,2行の記述であっても、すぐ書き直すことがありえるような状況ならばコメントアウト。まあ普通に作業効率がいいし*1。そこから飛躍させると、すぐに直せる位置にコメントアウト・コードが残っているという事は、つまりそれを書いた人が、その方が作業効率が高いと、つまり「すぐにこっちのコードに変更する可能性が高い」と考えていたという事実を示唆する*2

つまり、コードを読む人間に「仕様上の未確定事項がまだその辺に埋まっている可能性が高い」という情報が伝わる。

ただし、そのようなaltの存在はあまり長期間許されるものではない。できればさっさと削るべき。あるいは何らかの理由でずっと残したいなら(例えばメンテナンス用のコードとか)、その部分を別クラスなり(Strategyパターン使うとか)に切り分けて、代替選択肢のひとつである事を明示すべきだ。

*1:PHPやRubyなどのLLで作業する際の話なので、C++のような重量級言語だと話が違うのかも

*2:単にバージョン管理システムを使えていないという可能性もあるわけだが、とりあえず忘れる

新着エントリは上に追加。コメントは「はてなユーザのみ」、公開設定はパブリック (だれでも閲覧ができます)。