環境構築・改

環境構築の基礎をさらに改変していく事例

Javaを使ったプロジェクトのワークフロー例。

ゲームエンジンを作る際に、原因を仮定し進めていく。 何も手に付かないよりとりあえず行動することで、 原因にたどり着くという手法の例。

数独は「決められたマスに決まった数字のみうめていくパズル」
難易度が高くなると、数字を仮定し正解にたどりつくかどうかを調べていく。
あとは、運次第。運がよければそれで解法がみつかる。
「今回のエラーの可能性を消していくと同意義、それは"消去法"→"仮定法"である。」

資料

Internal Server error 500 が発生する。原因がわからない ... とりあえず、こう考えてみる↓

jode-time.jarを使ったJDK7でDateTimeライブラリを使った際、時刻を取得するときにnullが発生する

仮定

① JDK7でjode-time.jarはJDK7の補い、2.3であれば動作が保証される

・Androidは7.0 → 1.8 JDK
・iOSでもiPhone5以下、6以上JDK8(現在のバージョン)

このとき、新しいjode-time.jarにセットすべき。 JDK8の標準ライブラリはjode 2.10が標準 - JSR-310 - DateTimeAPIを参照すべき。

対策

・if 文 ~ elsif ~ else

Javaが7または8のバージョンを知るとき、新しいjode-time.jarがセットされるように処理する。

対策2

JRubyプロジェクトを.jarへ変換。.jarでjavaに読み込む処理をセットする。

発生しうる例外

・ArrayIndexOutOfBoundException ... 不正なインデックスを使って、配列がアクセスされたことを示すためにスローされる。
インデックスが負で配列のサイズ異常が予想される。

・IllegalArgmentException ... 不正または不適切なときにメソッドが呼び出されたことを示す。Java環境、Javaアプリケーションは、要求されたオペレーションに適した状態ではない。

・NullPointerException ... null値が入った型、変数を参照しようとした時、発生する。

・実行時例外 java.lang.Runtime.Exception
例外処理なし → コンパイルエラーは起きない。

試行錯誤

可能性

① 改行コードが含まれるとき ... execute、CR + LF、LF、CRのとき、InternalServerError500を起こす。

② 複数のスレッドが共有しようとしたとき、javaでデッドロックが起きる

対策

 原因を突き止める。仮定の材料。とりあえず、これなのか、これじゃないのか、もしくは原因は何なのかを知ることができる。

追記

このような対策をとるべきことはあまりない。ほとんどの場合、実装が独自のものであり、情報共有の場がある。試行錯誤せずともすべての結果を手に入れている。この例は、流用コードを改変していく際に用いる。最小の変更で最大の効果を出すためには、仮のプロジェクトを作るしか方法はないと考えた。しかし、全体のバグと対策を知るために莫大な時間と労力がかかる。何年もかけて、バグを消していけるならこの方法を繰り返していくといいだろう。失敗は成功の素というが、どれだけの失敗にも成功の形を意識することができる。成功よりも失敗から得られることは多い。失敗を受け入れないとしたら、成長などありえない。

Copyright © 2007-2018 Takayuki Kamiyama. All Rights Reserved.