Twitter / @nyaochugu (via masanovski)
2011-06-18 (via gkojax-text)
2011-08-03
(via quote-over100notes-jp)
This is a tumblelog, kinda like a blog but with short-form, mixed-media posts with stuff I like. Scroll down a bit to start reading, or a bit more to read more about me.
Twitter / @nyaochugu (via masanovski)
2011-06-18 (via gkojax-text)
2011-08-03
(via quote-over100notes-jp)
・JRのキップは無料で何度も「途中下車できる」
JRの乗車券は、走行距離101キロ以上の乗車券のみ途中下車が何度も可能です。つまり、途中下車をしても乗車券をJRに渡すことなく、何度も使い続けることができるんです。「何度も」とはいっても、乗車券の有効期限内のみ有効です。有効期限は200キロごとに増えていき、200キロまでなら2日間有効、400キロなら3日間、600キロなら4日有効になります。
たとえば東京から京都までの乗車券を持っていれば、途中の静岡で途中下車してホテルに泊まっても翌日続けて乗車券を使い続けることができます。気になる人は、細かいルールがありますのでJRサイトをご覧ください。
僕は今回の案件で、システムのレスポンスに徹底的にこだわってる。
それには理由がある。
それは、プログラマの誇りを見せ付けたいからだ。
この案件は、既存機能をコピーして似た機能を作るというものだ。
既存機能は、Webシステムなのに1アクションで
1分や2分以上のレスポンスタイムはザラで、
悪いときには数分後にタイムアウトして、
さらに悪いときには、アプリケーション全体をロックしてしまっていた。
顧客はそれでも我慢して使っていてくれたそうだ。
今回の改変に、顧客がパフォーマンスを要求するのは当然だった。
それにしても酷いアリサマだとコードを見てみると
酷い。
確かにパフォーマンスは出ないのも無理はない。
いや、それどころか僕は、このSI業界の問題を感じざるを得なかった。
この機能はそこそこ難しく、業務的にも重要だ。
しかし、そのコードは、新人~3年目ぐらいのプログラマが書いたとしか思えないコードだった。
例えば、
・Stringを+でツナギまくってパフォーマンスが激劣化していた。
・SQLで、よく考えれば要らないJoinが山ほどあった。
・すべてMapで引数を取り回し、Mapの中身はすべてStringに置き換えられていた。
・数字もDateもStringだ。
・1000行以上もあるSQLは、適切にインデント付けされておらず、読むことすら億劫になる。
その他、Sessionの使い方、クラス分け、変数名の付け方、コメントの書き方に至るまで、
新人が試行錯誤して作った跡が見られる。
この業界の問題、それは
プログラムが、新人~3年目の作業と位置づけられていることだ。
僕はこの認識を変えたい。
だから徹底的に、スキルの差によってどれ程のパフォーマンス差が出るか示したいと思った。
自慢したいわけではない、
10年近くコードと真剣に向き合ってきたから、
新人~3年目に負けるはずはない。
このコーディングに際して、まず徹底的なリファクタリングから取り掛かった。
SQLを読みやすくインデント付けし、Mapを取りやめて適切な型のオブジェクトにし、
StringBufferをつかって、Joinを削った。
作り直したといっても良い。
もちろんチューニングは徹底的に行なった。
実装工数の三分の一を使った。
先週まで、1アクション3秒の壁を越えられなかったけど、今日2秒を越えた。
検索自体は、0.5秒以内。改修前は、早くとも30秒だったので60倍の高速化だ。
最もパフォーマンス差が出たアクションでは、1000倍以上の差となった。
これを顧客に納品する。
今まで、1つ1つのアクションに対してイライラし続けていた機能は、
サクサクと動くようになる。
この機能は、サクサク動くと業務上の使い道が大きく広がることは間違いない。
顧客は感じてくれるだろう。
サクサク動くことの快感を。
顧客は疑問に思ってくれるだろう。
「なぜ既存機能よりも情報量の多い、この機能がこんなに早いのか?」と
そして問い合わせてくれたら良いと思う。
なぜこの機能はこんなに早くて、
他の機能はウンザリするほど遅いのかを。
そのときには、答える。
プログラミングスキルの差としか言えませんと。
新人~3年目が悪いわけじゃない。
ベテランがコードを書かなさ過ぎる。
僕のスキル程度は、ザラに居るはず。
しかし彼らは、設計書のメッセージIDや、設計書更新日付の整合性や
フォントや罫線の切れを合わせるのに貴重な労力を割きすぎるんだ。
システム開発は、顧客の要件を実現するサービス業だ。
要件の実現がキモなのに。
実装がキモなのに。
なぜ、ベテランが頭だけやるのか。
僕にはどう考えても、理解不能だ。
今回、僕は頭の先から尻尾までやった。
それが普通であってほしい。
ネット上にこんなのがあった。「玉音放送を現代語訳してみた」
「耐え難きを耐え、忍び難きを忍び」このフレーズは何度も耳にした。
そして、これが玉音放送で唯一理解出来る箇所でもあった。
何を言ってたのか、全文理解してみようなんて思った事なかった。
そして、これが現代語訳だそうです。
あの時代、国民はどんな想いでこの放送を聞いていたんだろうか、。
世界の情勢と日本の現状をよくよく検討した結果、ありえないと思われる方法をあえてとることにより、この状況を収拾したい。常に私に忠実であるあなたがた日本臣民の皆さんに、今から私の決断を伝えよう。
私は日本政府担当者に米国、英国、中国、ソビエト連邦の4カ国に対して、日本が(ポツダム)共同宣言を受け入れると伝えることを指示した。
そもそも私たち日本国民が穏やかで安心な暮らしができ、世界全体と繁栄の喜びを共有することは、歴代の天皇が代々受け継いで守ってきた教えであり、私自身もその教えを非常に大事なことと考えてきた。
最初に米英2カ国に宣戦布告した理由も日本の自立とアジアの安定を願う気持ちからであり、ほかの国の主権を侵したり、その領土を侵したりすることが、私の目指すところであったわけではない。
けれども戦争はすでに4年も続いており、我らが陸海軍人たちの勇敢な戦いぶりや行政府の役人らの一心不乱の働きぶり、そして1億人の庶民の奉公、それぞれが最善を尽くしたにも関わらず、戦況は必ずしも好転せず、世界情勢を見るに、日本に有利とはとても言えない状況である。
その上、敵は残虐な新型爆弾を使用して多くの罪のない者たちを殺傷し、その被害の及ぶ範囲は、測ることもできないほどに広がっている。もしもこれ以上戦争
を続ければ、最後には我が日本民族の滅亡にもつながりかねない状況であり、 ひいては人類の文明すべてを破壊してしまいかねない。
そのようなことになれば、私はどのようにして1億人の民を守り、歴代天皇の霊に顔向けすることができようか。これが私が政府担当者に対し、共同宣言に応じよと指示した理由である。
私は、アジアを(西欧列強から)開放するために日本に協力してくれた友好国にたいして大変申し訳なく思う。また、日本国民であって戦地で命を失った者、
職場で命を落とし、悔しくも天命をまっとうできなかった者、そしてその遺族のことを考えると、
心も体も引き裂かれんばかりの思いがする。戦争で傷つき、戦災被害にあって家や仕事を失った者たちの暮らしについても、非常に心配に思っている。
この後、日本が受けるであろう苦難は言うまでもなく尋常なものではないであろう。みなさん臣民の悔しい思いも、私はよくよくそれを分かっている。けれども
私は時代の運命の導きにそって、耐え難きを耐え、忍び難きを忍び、これからもずっと続いていく未来のために、平和への扉を開きたい。
私はこうやって日本の国の形を守ることができたのだから忠誠心が高く善良な臣民の真心を信頼し、常にあなたがた臣民とともにある。
感情の激するがままに事件を起こしたり、もしくは仲間同士が争って世の中を乱したり、そのために道を誤って世界からの信頼を失うようなことは、最も戒めたいことである。
何とか国全体が1つとなり、子孫にまでその思いを伝え、神国日本の不滅を信じ、任務はとても重く、行く道は非常に遠いことを覚悟して、将来の建設に向けて
総力を結集し、道義を守り志と規律を強く持って、
日本の力を最大に発揮することを誓い、世界の先進国に遅れをとらずに進むのだという決意を持とうではないか。私の臣民たちよ、ぜひともこの私の意思をよく
よく理解してもらいたい。