NetBeansにJavaのソースコードをチェックするSQEプラグインを入れるとかなり便利ですね。バグや推奨しない書き方などをチェックして教えてくれます。
NetBeansのSQEプラグインによるソースコードチェックのメモ □ NetBeansのSQEプラグインに含まれる機能 * FindBugs Javaコードにあるバグの発見と解析。 * PMD Javaコードにある潜在的な問題の発見。未使用の変数やプライベートメソッドの チェックや、コードの重複、空のtry/catch/finally/switchなどのチェックが行える。 * CheckStyle コーディング基準に沿ったJavaコードを書いているかのチェック。 * Dependency Finder コンパイル済みのJavaコードから依存関係の解析。 □ SQEプラグインのインストール方法 下記の方法は、NetBeans 6.7以上のバージョンが必要になります。 1. プラグインマネージャへのURLの追加 NetBeansのメニューから、「ツール」→「プラグイン」を開きます。 「設定」タブを開き、「追加」ボタンを押して出てきたダイアログで 下記のように入力した上で、「了解」ボタンを押して登録してください。 * 名前 :「SQEソフトウェア品質チェック」などのように任意の名前 * URL : http://deadlock.netbeans.org/hudson/job/sqe/lastStableBuild/artifact/build/full-sqe-updatecenter/updates.xml 2. SQEプラグインのインストール 「使用可能なプラグイン」タブを開き、「カタログを再読み込み」ボタンを押します。 右上の検索ボックスに「SQE」と入力して表示されたプラグインのうち インストールしたいものにチェックを入れます。 「インストール」ボタンを押し、指示に従ってインストールを進めます。 完了の旨のメッセージが出れば、SQEのインストールは終了です。 □ SQEの使い方 ソースコードチェックを行いたいプロジェクトを開いた状態で、NetBeansのメニューから 「ウィンドウ」→「Quality」→「Quality Control Center」を開きます。 ウィンドウ左側のツールバーに「Quality Control Center」タブが追加されているので開きます。 Projectsカテゴリでソースコードチェックを行うプロジェクトを指定し Controlカテゴリの一番左にあるアイコンを押して、FindBugs/PMDのチェックを行います。 チェックにはしばらく時間がかかりますが、チェックが完了すると問題点の数のグラフや 問題点の履歴などが表示され、ウィンドウ右下のペインにチェック結果が表示されます。 チェック結果を開き、ダブルクリックすることで該当の問題箇所にアクセスする こともできます。また、コードエディタの左にPMDの警告アイコンなども表示され ALt+Enterキーで詳細内容を開くことができます。 □ チェック項目のカスタマイズ 問題点の数が多すぎたりチェックに時間がかかるので、FindBugsやPMDでチェックする項目を 絞り込みたい場合は、NetBeansのメニューから「ツール」→「オプション」→「Quality」タブを 開いて、不要な項目のチェックを外します。 FindBugsの場合は、チェック速度(Speed)としてfast/moderate/slowの 項目が表示されているので、実行に時間がかかる場合はslowのチェック項目を 外すと良いかもしれません。 □ Linux環境でFindBugsのメッセージが文字化けする問題の対応例 FindBugsのメッセージは日本語化されていますが、文字コードがSJISのため Linux環境などでは文字化けして表示されます。 そのため、Linux環境などでは下記の手順で日本語メッセージをUTF-8に 変換する必要があります。(下記の例ではNetBeans 6.9) (必要に応じて~/.netbeans/6.9/modules/ext/findbugs.jarのバックアップをとっておくこと) $ mkdir ~/temp/ $ cd ~/temp/ $ jar xvf ~/.netbeans/6.9/modules/ext/findbugs.jar $ nkf -w --overwrite messages_ja.xml $ jar cvf ~/.netbeans/6.9/modules/ext/findbugs.jar . $ rm -rf ~/temp/ □ 参考URL Project Kenai - Software Quality Environment http://kenai.com/projects/sqe/pages/Home マイコミジャーナル - 絶対使うべき! FindBugsでBug退治 http://journal.mycom.co.jp/articles/2006/09/23/findbugs1/index.html
追記:YMSGプロトコルについての記述などを追加。
□ PidginでYahooメッセンジャに接続できない件とその回避方法 2011/6/7に、マルチプロトコル対応のメッセンジャーソフトPidginから Yahooメッセンジャ(Yahoo Japan)に接続できなくなりました。 回避方法としては、以下の通りです。 #将来的には、この回避方法が逆にトラブルの要因となる可能性も #ありますので、その場合は下記の設定を解除するようにしてください。 ◆ Linuxの場合 /etc/hostsファイルに下記のようなエントリを追加してください。 ------------------------------------------------- 124.83.239.240 cs1.msg.vip.ogk.yahoo.co.jp ------------------------------------------------- 操作にはroot権限が必要なので、下記の例のようなコマンドを 利用すると良いでしょう。 $ gksudo gedit /etc/hosts または $ sudo vi /etc/hosts ◆ Windowsの場合 Windowsの場合は、対策パッチの当たったPidgin 2.8が有志によって リリースされているようなので、そちらを使ったほうが良いかもしれません。 電脳のツボ-別館 - http://garakuta.homelinux.org/~nosuke/tsubo/index.php?Windows%2FPidgin%A4%F2%A5%D3%A5%EB%A5%C9%A4%B7%A4%C6%A4%DF%A4%EB Linux版と同じ方法で回避するのであれば、 32ビット版 Windowsなら、C:\Windows\System32\drivers\etc\hosts または 64ビット版 Windowsなら、C:\Windows\SysWOW64\drivers\etc\hosts のファイルに、同様の下記のエントリを追加してください。 ------------------------------------------------- 124.83.239.240 cs1.msg.vip.ogk.yahoo.co.jp ------------------------------------------------- Windows 7などの環境では、ウイルス等に不正に書き換えられてしまうのを防ぐため 上記のhostsファイルの編集には"管理者権限"が必要になります。 メモ帳などのエディタで、右クリック→「管理者権限で実行」を選択して 管理者権限でメモ帳を起動して編集してください。 (管理者権限がないと、ファイルの変更点を保存できません。) □ トラブル原因の調査 私が使っていた環境は、Ubuntu 10.04用のPPA版のpidgin 2.7.11で 6/7にYahooメッセンジャに接続できなくなりました。 Windows向けPidginだと2.8で接続できるような話がネットに転がっていたので Linux環境でビルドしてみたものの、上記のと違い対策パッチを当ててなかったので Yahooメッセンジャに接続できませんでした。 そこで、pidgin 2.8をデバッグオプション付きでビルドしてログを 観察してみると、cs1.msg.vip.ogk.yahoo.co.jp=124.83.219.223の サーバのポート80に接続しようとして拒否されています。 ------------------------------------------------------------ (06:44:19) dns: Got response for 'cs1.msg.vip.ogk.yahoo.co.jp' (06:44:19) dnsquery: IP resolved for cs1.msg.vip.ogk.yahoo.co.jp (06:44:19) proxy: Attempting connection to 124.83.219.223 (06:44:19) proxy: Connecting to cs1.msg.vip.ogk.yahoo.co.jp:80 with no proxy (06:44:19) proxy: Connection in progress (06:44:19) proxy: Connecting to cs1.msg.vip.ogk.yahoo.co.jp:80. (06:44:19) proxy: Error connecting to cs1.msg.vip.ogk.yahoo.co.jp:80 (接続を拒否されました). (06:44:19) proxy: Connection attempt failed: 接続を拒否されました (06:44:19) yahoo: Unable to retrieve server info. 0 bytes retrieved with error message: cs1.msg.vip.ogk.yahoo.co.jp へ接続できません: 接続を拒否されました (06:44:19) connection: Connection error on 0x8e9c7e0 (reason: 0 description: Unable to connect: The server returned an empty response.) (06:44:19) account: Disconnecting account test (0x8c2c9a0) (06:44:19) connection: Disconnecting connection 0x8e9c7e0 (06:44:19) connection: Destroying connection 0x8e9c7e0 ------------------------------------------------------------ pingは返ってくるもののポート80に接続できないので、仕様変更で このサーバでのポートをふさいだか、サービスを停止したものと思われます。 ------------------------------------------------------------ $ ping 124.83.219.223 PING 124.83.219.223 (124.83.219.223) 56(84) bytes of data. 64 bytes from 124.83.219.223: icmp_seq=1 ttl=50 time=25.3 ms $ telnet 124.83.219.223 80 Trying 124.83.219.223... telnet: Unable to connect to remote host: Connection refused ------------------------------------------------------------ □ 接続できるサーバの調査 Yahooメッセンジャのサービスで使われているドメインは、csから始まる cs*.yahoo.co.jpの名前が慣例らしいので、続き番号のドメイン cs2.msg.vip.ogk.yahoo.co.jp を調べました。 ------------------------------------------------------------ $ host cs2.msg.vip.ogk.yahoo.co.jp cs2.msg.vip.ogk.yahoo.co.jp has address 124.83.239.240 ------------------------------------------------------------ その他のドメインについても調べてみると(一番下のリスト参照) csから始まる以下の範囲のサーバであれば、現時点では Yahooメッセンジャのサービスに接続できるようです。 ------------------------------------------------------------ 124.83.239.240 124.83.239.126〜124.83.239.131 ------------------------------------------------------------ (注) ただし、上記はYahooから公式に公開されているものではないので 正しいサーバかどうかは分からず、将来的に接続を拒否される可能性はあります。 □ さらにYMSGプロトコル等について詳しく調べてみた さらに詳しく調べてみると、Yahooメッセンジャ(YMSG)プロトコルでは サービスに最初にアクセスする際、HTTP GETリクエストを http://(サーバ名)/capacity に対して送っているようです。 そのリクエストで返ってきた CS_IP_ADDRESS=(IPアドレス) の IPアドレスに対して接続/認証を試みるのですが 124.83.219.223 のIPアドレスでリクエストした場合は、応答を返していません。 ------------------------------------------------------------ × http://cs1.msg.vip.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS= #アクセスするタイミングによって変わり、124.83.239.126〜131のいずれかとなる) × http://124.83.219.223/capacity ○ http://cs2.msg.vip.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS= #アクセスするタイミングによって変わり、124.83.239.126〜131のいずれかとなる) ○ http://124.83.239.240/capacity ○ http://cs.yahoo.co.jp/capacity → (CS_IP_ADDRESS= #アクセスするタイミングによって変わり、124.83.239.126〜131のいずれかとなる) ○ http://124.83.239.240/capacity (cs2.msg.vip.ogk.yahoo.co.jpと同じ) ○ http://cs101.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.131) ○ http://124.83.239.131/capacity ○ http://cs102.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.130) ○ http://124.83.239.130/capacity ○ http://cs103.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.129) ○ http://124.83.239.129/capacity ○ http://cs104.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.128) ○ http://124.83.239.128/capacity ○ http://cs105.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.127) ○ http://124.83.239.127/capacity ○ http://cs106.msg.ogk.yahoo.co.jp/capacity → (CS_IP_ADDRESS=124.83.239.126) ○ http://124.83.239.126/capacity ------------------------------------------------------------ cs1/cs2サーバにユーザがアクセスした際に、実体サーバのcs101-cs106の 故障や負荷状況によって、アクセスを振り分けているのではないかと想像します。 #単なるラウンドロビンだという気も。 Wikiepdia - Yahoo! Messenger Protocol http://en.wikipedia.org/wiki/Yahoo!_Messenger_Protocol imfreedom.org - Yahoo http://imfreedom.org/wiki/Yahoo □ 結論 PidginからYahooメッセンジャに接続できなくなったのは、 cs1.msg.vip.ogk.yahoo.co.jp の名前解決をして返ってきた 124.83.219.223 に対するhttpリクエストに応答がないためです。 これを回避するには、cs1.msg.vip.ogk.yahoo.co.jp の名前解決リクエストに対して 124.83.239.240 (cs2.msg.vip.ogk.yahoo.co.jp)のIPを返すよう 静的な名前解決の設定をすれば良い。 (各OSにて、静的な名前解決に使用されるhostsファイルを編集する) #もちろん、ソースコードを修正してビルドする手もあります。 いずれPidgin本体に修正が入れば、この回避方法は不要になり 場合によっては、将来的に問題となる可能性はありますが 現時点では、上記の方法で解決できます。 □ 付録 (124.83.239.0/24の範囲のYahooのドメイン一覧) ------------------------------------------------------------ $ for i in `seq 1 254`; do host 124.83.239.$i|grep -v "not found"; done 16.239.83.124.in-addr.arpa domain name pointer as1001.mail.ogk.yahoo.co.jp. 17.239.83.124.in-addr.arpa domain name pointer as1002.mail.ogk.yahoo.co.jp. 18.239.83.124.in-addr.arpa domain name pointer as1003.mail.ogk.yahoo.co.jp. 19.239.83.124.in-addr.arpa domain name pointer as1004.mail.ogk.yahoo.co.jp. 20.239.83.124.in-addr.arpa domain name pointer as1006.mail.ogk.yahoo.co.jp. 21.239.83.124.in-addr.arpa domain name pointer mailevtx101.msg.ogk.yahoo.co.jp. 22.239.83.124.in-addr.arpa domain name pointer mailevtx301.msg.ogk.yahoo.co.jp. 23.239.83.124.in-addr.arpa domain name pointer relay101.msg.ogk.yahoo.co.jp. 73.239.83.124.in-addr.arpa domain name pointer mix4203.mail.ogk.yahoo.co.jp. 74.239.83.124.in-addr.arpa domain name pointer mix4303.mail.ogk.yahoo.co.jp. 75.239.83.124.in-addr.arpa domain name pointer as1005.mail.ogk.yahoo.co.jp. 76.239.83.124.in-addr.arpa domain name pointer as1007.mail.ogk.yahoo.co.jp. 77.239.83.124.in-addr.arpa domain name pointer as1008.mail.ogk.yahoo.co.jp. 78.239.83.124.in-addr.arpa domain name pointer as901.mail.ogk.yahoo.co.jp. 79.239.83.124.in-addr.arpa domain name pointer as902.mail.ogk.yahoo.co.jp. 80.239.83.124.in-addr.arpa domain name pointer as903.mail.ogk.yahoo.co.jp. 81.239.83.124.in-addr.arpa domain name pointer as904.mail.ogk.yahoo.co.jp. 82.239.83.124.in-addr.arpa domain name pointer as905.mail.ogk.yahoo.co.jp. 83.239.83.124.in-addr.arpa domain name pointer as906.mail.ogk.yahoo.co.jp. 84.239.83.124.in-addr.arpa domain name pointer as907.mail.ogk.yahoo.co.jp. 85.239.83.124.in-addr.arpa domain name pointer as908.mail.ogk.yahoo.co.jp. 94.239.83.124.in-addr.arpa domain name pointer mailev401.msg.ogk.yahoo.co.jp. 95.239.83.124.in-addr.arpa domain name pointer mailev402.msg.ogk.yahoo.co.jp. 96.239.83.124.in-addr.arpa domain name pointer mailev403.msg.ogk.yahoo.co.jp. 97.239.83.124.in-addr.arpa domain name pointer mailev404.msg.ogk.yahoo.co.jp. 98.239.83.124.in-addr.arpa domain name pointer mailum401a.msg.ogk.yahoo.co.jp. 99.239.83.124.in-addr.arpa domain name pointer mailum401b.msg.ogk.yahoo.co.jp. 100.239.83.124.in-addr.arpa domain name pointer umr102.msg.ogk.yahoo.co.jp. 101.239.83.124.in-addr.arpa domain name pointer umr101.msg.ogk.yahoo.co.jp. 102.239.83.124.in-addr.arpa domain name pointer um103b.msg.ogk.yahoo.co.jp. 103.239.83.124.in-addr.arpa domain name pointer um103a.msg.ogk.yahoo.co.jp. 104.239.83.124.in-addr.arpa domain name pointer um102b.msg.ogk.yahoo.co.jp. 105.239.83.124.in-addr.arpa domain name pointer um102a.msg.ogk.yahoo.co.jp. 106.239.83.124.in-addr.arpa domain name pointer um101b.msg.ogk.yahoo.co.jp. 107.239.83.124.in-addr.arpa domain name pointer um101a.msg.ogk.yahoo.co.jp. 108.239.83.124.in-addr.arpa domain name pointer rbum102b.msg.ogk.yahoo.co.jp. 109.239.83.124.in-addr.arpa domain name pointer rbum102a.msg.ogk.yahoo.co.jp. 110.239.83.124.in-addr.arpa domain name pointer rbum101b.msg.ogk.yahoo.co.jp. 111.239.83.124.in-addr.arpa domain name pointer rbum101a.msg.ogk.yahoo.co.jp. 112.239.83.124.in-addr.arpa domain name pointer rbes104.msg.ogk.yahoo.co.jp. 113.239.83.124.in-addr.arpa domain name pointer rbes103.msg.ogk.yahoo.co.jp. 114.239.83.124.in-addr.arpa domain name pointer rbes102.msg.ogk.yahoo.co.jp. 115.239.83.124.in-addr.arpa domain name pointer rbes101.msg.ogk.yahoo.co.jp. 116.239.83.124.in-addr.arpa domain name pointer httpcs104.msg.ogk.yahoo.co.jp. 117.239.83.124.in-addr.arpa domain name pointer httpcs103.msg.ogk.yahoo.co.jp. 118.239.83.124.in-addr.arpa domain name pointer httpcs102.msg.ogk.yahoo.co.jp. 119.239.83.124.in-addr.arpa domain name pointer httpcs101.msg.ogk.yahoo.co.jp. 120.239.83.124.in-addr.arpa domain name pointer es106.msg.ogk.yahoo.co.jp. 121.239.83.124.in-addr.arpa domain name pointer es105.msg.ogk.yahoo.co.jp. 122.239.83.124.in-addr.arpa domain name pointer es104.msg.ogk.yahoo.co.jp. 123.239.83.124.in-addr.arpa domain name pointer es103.msg.ogk.yahoo.co.jp. 124.239.83.124.in-addr.arpa domain name pointer es102.msg.ogk.yahoo.co.jp. 125.239.83.124.in-addr.arpa domain name pointer es101.msg.ogk.yahoo.co.jp. 126.239.83.124.in-addr.arpa domain name pointer cs106.msg.ogk.yahoo.co.jp. 127.239.83.124.in-addr.arpa domain name pointer cs105.msg.ogk.yahoo.co.jp. 128.239.83.124.in-addr.arpa domain name pointer cs104.msg.ogk.yahoo.co.jp. 129.239.83.124.in-addr.arpa domain name pointer cs103.msg.ogk.yahoo.co.jp. 130.239.83.124.in-addr.arpa domain name pointer cs102.msg.ogk.yahoo.co.jp. 131.239.83.124.in-addr.arpa domain name pointer cs101.msg.ogk.yahoo.co.jp. 132.239.83.124.in-addr.arpa domain name pointer cgses104.msg.ogk.yahoo.co.jp. 133.239.83.124.in-addr.arpa domain name pointer cgses103.msg.ogk.yahoo.co.jp. 134.239.83.124.in-addr.arpa domain name pointer cgses102.msg.ogk.yahoo.co.jp. 135.239.83.124.in-addr.arpa domain name pointer cgses101.msg.ogk.yahoo.co.jp. 136.239.83.124.in-addr.arpa domain name pointer ums101.msg.ogk.yahoo.co.jp. 137.239.83.124.in-addr.arpa domain name pointer ums102.msg.ogk.yahoo.co.jp. 240.239.83.124.in-addr.arpa domain name pointer cs2.msg.vip.ogk.yahoo.co.jp. 241.239.83.124.in-addr.arpa domain name pointer httpcs2.msg.vip.ogk.yahoo.co.jp. 242.239.83.124.in-addr.arpa domain name pointer as009.mail.vip.ogk.yahoo.co.jp. 252.239.83.124.in-addr.arpa domain name pointer as010.mail.vip.ogk.yahoo.co.jp. ------------------------------------------------------------