Software development of explosion! -夢の破片(カケラ)たちの日々-

ソフトウェア開発を中心としたコンピューター関連のネタを扱ったブログです

Software development is passion and explosion!

詳細設計書とJavadoc

開発言語にJavaを採用しながら、昔ながらの詳細設計書の記述(コードの日本語訳)を書いている業務系のプロジェクトが多々あると思う。
そこで思うのが、コードを2度記載しているため非効率であるのと、OOPやってると、日本語訳では記述し切れない部分が出てくる。
あくまでも持論なのだが、詳細設計書には不変な部分(開発対象の内部的な処理の流れや、入出力詳細など)を記載する程度に止めて(例えばどう言うタイミングでDBにアクセスしたり、ファイルアクセスしたり、別のサブシステムやら外部システムを呼び出したり)を記述するのと、入出力データの内容(出力メッセージだったり、ファイルフォーマットだったり)、全体的なルール(例外に対しての処理は基本的にどこどこの階層で行うため、それより下の階層では例外処理は行わないなど)を記述する程度に止めて、アルゴリズムやロジックなどの詳細は、特記事項でもない限り、Javadocに解説を記載するようにする。
何故、Javadocなのかというと、コードを修正するので、Javadocも弄るだろうから。(それに、Eclipseなどを使うと、メソッドなんかのJavadocも表示されるので、別ドキュメントを参照、修正する手間が減るから。

何が正しいとか、こうでなければならないなんてものは誰かが勝手に決めたことで、変えれば効率化出来るところは変えて行こうぜ!って言いたい。

iPhoneから送信






iPhoneから送信

Berkeley DB Java Edition

Jettyベースで、テスト用アプリを作ったのだけど、組み込みDBも欲しくなってしまった。で、Google App Engine for JavaのDatastoreみたいに手軽に(SQLレスで)使えて、特にインストールせずに、動作中もバックグラウンドサービス無しで使えるDBが欲しいなと思って色々と探してみたところ、Berkeley DB Java Editionに行き着いた。

まだ、単純なデータのput/get/delete以外はためしてないけど、いい感じ。

というわけで、この前の日曜日にサクッとラッパーライブラリーを書いてみた(まだ、トランザクション周りは未実装だし、あのput方法で果たしてデータのインデックス検索が出来るのやら…)。

実用(と言っても、大して使い道は無いけど)的なライブラリーが出来たらどっかで公開すっかなぁ。

そもそも、いつ、続きを書くのか不明だし(汗)

iPhoneから送信

try WiMAXってみた

電車内でiPad(Wi-Fiモデル)で安い値段でネット繋ぎたい!と思って色々と検討してみた結果、WiMAXを試してみよう!ってことになりました。

で、UQ WiMAXのサイトからtry WiMAXに申し込みました。

数日後、ルーターが届いて、特に設定せずに使えました(エリア内ではですけど)

とりあえず、URoad-7000SSをレンタルしたのですが、2011/5/14現在、鎌倉は駅前(駅から警察署付近くらい)しか電波入りませんでした。
雪の下なんてからっきし入らないです。

鎌倉から新橋までだと、鎌倉〜大船はほぼ圏外(鎌倉駅と大船駅は強いですけど)です。

そこから先は所々圏外になる場所がありますが、概ね通信出来ました。

通勤電車内でネット繋ぎたい!って言うのであれば、WiMAXは結構いいと思います。

もし、auの3Gのエリアも…と言うなら、ISW11HT(htc EVO WiMAX)という手もありでしょう(7000円/月ですが)

iPhoneから送信

Javaで開発していて思ったこと

JavaでWebアプリを開発していて思ったのが、Exception毎にエラー処理を分けると、恐ろしい(エラー処理ばかりでメソッドが埋まる)ことになります。

基本的に、サーブレットサーブレットフィルターをはじめとした制御部分(MVCモデルでいうC部分)では

try {
// 正常系の処理
}
catch (Exception cause) {
// 最小限のエラー処理
}
finally {
// 必要に応じて
}


くらいにとどめておくといいかも。
因みに、ケースバイケースですが、エラー処理を分岐させる必要があったりする場合がありますが、出来ることなら、引数不正だからといって、IllegalArgumentExceptionを多用するのは避けて、個別にRuntimeExceptionを作ってあげたほうがいいかも。

因みに、参考にするなら、Slim3 のFrontControllerのrunBear() (メソッド名合ってるかな?)あたりのコードが綺麗でわかりやすいです。

とまぁ、ぐちゃぐちゃになったソースを整理していてそう思いました。(上に書いたのって最初のコンセプトそのものなんだけどねぇ)

iPhoneから送信

バレーぺディアを読んだり、Twitterで#vabotter の方々に教わった、はやいバレーとは何か?について自分なりの解釈をまとめておきたいと思います。

ちなみに、筆者はバレーボールのプレー経験はありません。単なるそこら辺のファンですので、間違っていたらご指摘ください。
※ つまり、間違っている可能性もあるため、100%鵜呑みにされても困ります。

まず、はやさと言うのは何か?の前に、何故、はやいバレーが求められるのか?を考える必要があります。

テレビなどでよく言われるのは、日本は背が低いから、はやい攻撃を…と言われます。
これは、まともに(相手のブロックが完成するのと同じくらいのタイミングに)相手選手のブロックの上から、スパイクを打ち込むことは難しいからです。
なので、相手選手のブロックが完成する前に、スパイクを打ち込むことが出来れば、アタックが決まり易くなるのです。(堤防が出来上がる前に大雨が降るよりも、堤防を作ってる最中に大雨が降った方が、洪水になり易いのと同じです。)

逆を言えば、ブロックが完成する前にアタックを打ち込む必要があるとも言えます。(ブロックを利用した攻撃もあるかとは思いますが、本題の趣旨と異なるため、このように記述しています)

では、相手のブロックが完成する前にアタックを打つにはどうすれば良いのか?
ここで、テレビなどでよく言われるのは、低くて早く見えるトスにより、相手のブロックが完成する前にアタックを打とうという間違いに行き易くなります。(実は、低いトスよりも高いトスの方が、同じ距離を飛ばすには初速ははやいので、このような表現をしています。詳しくは、バレーぺディアをご参照ください。まぁ、勢い(球速)がなければ、すぐに落っこちゃうよね。)

はやいトス(速く見えるトス)からの攻撃がはやいバレーではないとなると、はやいバレーとは何なのでしょうか?

はやいバレーの重要な要素は次の3つ(下に行けばいくほど重要になると思われる)です。

  • 短いテンポ
  • 高い打点で打てるトス(セット)
  • 複数による同時攻撃

まず1つめ、


テンポって何?

テンポというのは、トスの軌道上、どの位置でインパクト(アタック・ヒット)をするかを意味します。

トスの軌道の頂点(一番高いところ)付近で打つのがファーストテンポ、頂点からやや落下軌道に入ったところで打つのが、セカンドテンポ。
それよりも更に落ちて来ている位置で打つのがサードテンポ。

【12/08 0:35訂正】
正しくは、セカンドテンポとサードテンポのアタッカーの打点は同じだそうです。
そういえば、踏み切りやコミットブロックとのタイミングの兼ね合いを全く書いてなかったので追記。
※ 以下、---まではバレペデの内容ほぼそのままです
ファーストテンポはトスアップとほぼ同時にアタッカーは踏み切りってジャンプします。
セカンドテンポではファーストテンポのタイミングでコミットブロックでジャンプしてから再びブロックをしようとジャンプしても間に合わないタイミングの場合で、
サードテンポはそれが間に合うタイミングになります。

                                                                                                            • -


レアケースとして、頂点にたどり着く前に打つことがあり、その場合にはマイナステンポといいます。
余談ですが、セカンドテンポとサードテンポの違いは、基本的に空いてブロッカーを意識するのがセカンドテンポであり、味方のアタッカーに打つ準備をさせるのがサードテンポとなります。結果的に、セカンドテンポよりもアタックを打つのが遅くなるため、打点が低くなります。

恐らく、これだけだとテンポとはやいバレーの関係性が見えて来ないと思います。

はやいバレーとテンポを結びつけるキーワードは"タイミング"です。
同じ距離を飛ばすのに、山なりの軌道を持ったボールと、直線的な軌道を持ったボールとでは、直線的な軌道を持ったボールの方が、飛距離が短い分、目的地へ到着するのにかかる時間は"短い"のです。
つまり、サードテンポよりセカンドテンポ、セカンドテンポよりファーストテンポといった感じに、タイミングは短くなります。当然のことながら、ブロッカーからすると、ジャンプを始めてからブロックを完成させる時間を短くしないと、アタックを止めづらくなります。


高さの大切さ

ここまで、テンポについて説明しましたが、テンポと高さは直接は関係のないものです。
トスが高かろうと低くかろうと、トスの軌道の頂点で打てばファーストテンポなのです。
ですが、ロシアの選手なんかに低いファーストテンポのトスを打ったところで、簡単に止められてしまいそうだと思いませんか?
はやいバレーとは、ブロッカーのブロックが完成する前にアタックを打つのを目的としていると説明しましたが、そうなると、低いトスではファーストテンポでも意味をなさない(かもしれない)のです。
アタックの打点が高いほど、より、ブロックが完成するのに時間が掛かるはずです。
つまり、打点が高いほうが、ブロッカーからすると、はやい攻撃といえます。


同時(シンクロ)攻撃が要

ここまで、繰り返してブロッカーのブロックが完成する前にアタックを打つといってきました。
高いファーストテンポでの攻撃は、相手のブロックが完成する前にアタックを打つことを主眼に置いているのではないでしょうか?(ここら辺は筆者の推測)
では逆に、ブロッカーにブロックを飛ばすタイミングを遅らせてはどうでしょうか?
何処から攻撃が来るか判断しづらくすれば、ブロックを遅らせることが出来るでしょう。
理想的にはアタッカー4枚による同時(シンクロ)攻撃を仕掛ければ、誰が打ってくるか読めなくなって、ブロックのタイミングが遅れるはずです。
ここで重要なのが"同時"という言葉。
時間差ではダメなのです。同じテンポでなければ、データバレーのご時世、4人が動いても読まれて仕舞う。
なので、同じテンポでの同時攻撃が大切なのです。

ちなみに、テンポにはトスの球速は関係ないので、球速が遅くても高い位置からの同時攻撃が出来れば、はやいバレーになる(まぁ、流石に高いトスがむちゃくちゃ遅いことは無いでしょうけど)といえるかもしれません。
そうすると、球速はそこまではやくなくても、高い打点でファーストテンポのトスを打てるアタッカーを4枚揃えてファーストテンポでなくても、同じテンポで同時に攻撃出来るのが理想なのでしょうね。

(もぅ、はやいバレーって言葉はやめて、シンクロバレーって言わないか?或いはハイテンポバレーとか)

【12/08 1:11追記】
それまでのトスの球速によるものを絶対的速さ(速度)と考えると、テンポって相対的早さ(タイミング)を重視するって解釈になるのかな?
英語だと多分fastからquickへ・・・みたいな感じですかね?(やばい、これじゃぁやってることがテレビ局だ・・・)

勝手にリンクを貼らせていただきますが@kaz10000さんのブログのテンポの解説を見ていただけるとわかりやすいです。

iPadのために電子書籍を自炊する方法

部屋の中が、本だらけで困っていたので、土曜日にiPad 64GB WiFiモデルを買って、裁断機( PLUS 26-106)とドキュメントスキャナー(PFU Scan Snap S1500)をネットで注文しました。
(しかし、注文した翌日や翌々日には注文した品が届いてしまうのには脱帽ものの世の中ですね)

動画付きだとか、細かい手順については色んなサイトで扱われているので注意点だけをメモレベルで書きます。

基本的な手順はには、裁断機で本の背表紙をさいだwでカットして、ページ毎にばらけさせた(元)本のページをドキュメントスキャナーで取り込んでPDF化します。

気を付ける点は大きくは2点ほど。

ページが繋がっていると、スキャン中に止まります(S1500はいい子です)
ドキュメントスキャナーにページをのせすぎるとやっぱり止まります
原稿の向きの自動補正をOFFにしないと上下逆さまになったりしてしまいます

あと、ScanSnapのドライバー(?)の初期設定では、デフォルトでは継続取込ではないので、本を何回かに分けてスキャンしている際は注意しないと本の途中で1PDFファイルの出来上がり…
なので、ScanSnapの設定を継続取込にするといいです。

ちなみに、スーパーファインでスキャンした日経ソフトウェア1冊で大体130〜150MBのPDFになります。

自分みたいに大量の本を自炊(電子化)して、iPadに詰め込もうとお考えの方は、最低でもiPadは32GB以上の容量のモデルをオススメします。

最低限これは入れておけ! Eclipse でJavaを使って開発する際のplugin

最低限、入れておいて損はしないもの
FindBugs http://findbugs.sourceforge.net/ http://findbugs.cs.umd.edu/eclipse/
CheckStyle http://eclipse-cs.sourceforge.net/ http://eclipse-cs.sourceforge.net/update/

入れておくことを推奨するもの
Limy Eclipse Plugin http://www.limy.org/program/eclipse_plugin/ http://www.limy.org/eclipse_plugin/latest/
プロパティエディタ http://propedit.sourceforge.jp/ http://propedit.sourceforge.jp/eclipse/updates/

とりあえずはこんなとこ?