さて、P2Pで何かやろうと思い立ちScalaでコーディングし始めて一週間、さらにsbtの使い方がまるでわからずEclipseのWorkspaceを完全に破壊しつくし、それからコードを復旧させJavaに臓器不全のまま移植したところで、混雑するバギーなコードに頭を悩ませながらこの記事を書いています。
万事うまくゆけば新月のようなP2P掲示板やデータの共有アプリケーションを作りたく思っていますが、まるでそこまで到達できていない---Chordアルゴリズムの相互接続すら失敗する状況---ので、今日もキーを叩き続けています。できるだけコードは思考に素直な形式で記述したいのですが、Javaの冗長な構文のおかげでわけがわからないことになっています。もう少しScalaのビルドやJARファイルへのマイグレーション(アーカイブ?)が簡単に出来るようなプラグインはないものでしょうか。今更JavaからScalaで書き直せと言われたらそれこそ辛いものがありますが。
特に冗長かつ複雑怪奇な状態になっている(させたのはお前だ!)のが、Successorをチェックする部分なのですが、要するにノードID間の距離を計算しなければならないので数値型を使用するのが有利です。しかしながらSHA-1の160ビットの空間を確保するにはLongでも到底足りず、byte[]とBigIntegerを相互変換しながら処理を続行しています。さらに例外の処理をつけなければならないのでインデントが入り組みます。最悪ですな。
別個に関数を用意して部分を分割するべきでしょうか。
また書く気になったら続きを書くと思います。