2013/01/31

EGit could not detect where Git is installed

@ Eclipse Juno SR1 on Windows7
EGit 2.1.0

Git まわりをいじっていたら Eclipse の立ち上がり時に、EGit could not detect where Git is installed というエラーが出るようになってしまいました。

「Git がインストールされている場所がわからない」ってことですね。

文面を読んでみると
Preferences → Team → Git から設定することが可能です
と書いてあるので、設定画面を開いてみましたが、設定できそうなところはどこにもありません。

きっと古いバージョンの情報が表示されちゃってるんでしょうね。
こういう時は、パスが通っていれば大丈夫だろうと思い、環境変数 path に以下のディレクトリを追加してやりました。
参考:Windows TIPS -- HINT:環境変数を変更する
C:\Program Files (x86)\Git\cmd

すると、エラーは出なくなりました。


ちなみに、以下のディレクトリにパスを通してもエラーは出なくなるのですが、cygwin 等と競合するアプリケーションが多数入っているので、cmd ディレクトリを指定した方が無難だと思われます。
C:\Program Files (x86)\Git\bin

2013/01/28

Android の「問題が発生したため~を終了します」を表示しないことは可能か?

昨日、Android の UncaughtExceptionHandler の使い方を間違えると ANR が発生する というエントリで UncaughtExceptionHandler について書きました。

UncaughtExceptionHandler の存在を知ると、例外が発生じた際に処理が出来るのだから、例の「問題が発生したため~を終了します」を表示しないように出来るのではないか?と思うのは人情だと思います。

しかし、結論から言いますと、技術的には可能だけど、しないほうが良いと思います。
以下、その理由です。

2013/01/27

Android の UncaughtExceptionHandler の使い方を間違えると ANR が発生する

Java にはキャッチされなかった例外により Thread が突然終了した場合、あらかじめセットしておいた UncaughtExceptionHandler.uncaughtException() が呼ばれるという機能があります。
本来、キャッチされない例外が発生するのは避けなければなりませんが、どう頑張ってもバグは入り込むもの。
そのため、バグレポートやリソースの保全等に使用されることが多いようです。

この機能、適切に使用すると便利なのですが、使用方法を誤ると ANR (Application Not Responding) が発生する不具合につながります。
以下、その原因と対策について調べてみました。

2013/01/26

gnome-tweak-tool の Window focus mode で Sloppy と Mouse の違い

最近、Ubuntu のデスクトップ環境を Unity から gnome-shell に変更しました。
gnome-shell は gnome-tweak-tool を使用して設定を変更できますが、その項目の中に Window focus mode というものがあります。
名前のごとく、どのタイミングで Window のフォーカスが変わるのか設定できるのですが、ちょっと項目がわかりにくかったので調べてみました。

gnome-tweak-tools

調べてみるとすぐ出てくるのですが、以下のページが参考になります。
focus - What's the difference between "mouse" and "sloppy"? - Ask Ubuntu

というわけで、以下のような意味だそうです。
Clickウィンドウをクリックした時にフォーカスするモード(デフォルト)
Windows と同じ
Mouseマウスオーバーした時にフォーカスするモード
マウスをデスクトップ上に移動させるとフォーカスが外れる
Sloppyマウスオーバーした時にフォーカスするモード
別のウィンドウ上にマウスが移動するまでフォーカスは維持される

2013/01/22

Eclipse Project のフォルダを右クリックで開くプラグイン


Eclipse を使っている際、Project Explorer から任意のフォルダを右クリックして Explorer や Command prompt を開きたくなることがよくあります。

そんな時に使えるのが、openextern というプラグイン。
Eclipse 歴の長い人には Open External とほぼ同じものと言えば通じるでしょうか。
結構便利なので、お勧めです。
openextern - Open shell and folder from eclispe - Google Project Hosting

インストール方法は例によって簡単。
Help → Install New Software...
Add
Location に以下のサイトを指定
http://openextern.googlecode.com/svn/trunk/openextern_update/



インストールが完了すると、Project Explorer の右クリックメニューに openextern という項目が追加され、任意のディレクトリを開けるようになります。
パッケージ配下のファイルをいじりたい時などはかなり便利です。
よく見ると、あの幻のプラグインが…

この openextern は Windows 、Linux、 Mac で動作します。
私は Ubuntu 上の Eclipse でも使用しています。

2013/01/17

Eclipse に NDK Plugin を入れようとしたら "Cannot complete the install because one or more required items could not be found" エラー

このところ、出番が少なくなってきたノートPC (Windows 7 64bit)。
長いこと放ったらかしになっていたので、開発環境を構築しなおしてみました。

「ブログのネタにもなるしね。」とか思って始めたのですが、早々にエラーが。
Eclipse (Juno RC1) をインストールして、最初に ADT をインストールしようとしたところ、 Cannot complete the install because one or more required items could not be found と言われてしまいました。
正確には Android Native Development Tools (NDK Plugins) をインストールしようとしたところでエラーが出ています。
以下、エラー部分抜粋
Cannot complete the install because one or more required items could not be found.
  Software being installed: Android Native Development Tools 21.0.1.v201212060256-543035 (com.android.ide.eclipse.ndk.feature.group 21.0.1.v201212060256-543035)
  Missing requirement: Android Native Development Tools 21.0.1.v201212060256-543035 (com.android.ide.eclipse.ndk.feature.group 21.0.1.v201212060256-543035) requires 'org.eclipse.cdt.feature.group 0.0.0' but it could not be found

「あれ、今までこんなエラー出たことないぞ」と思ってよくみてみると、CDT が入ってなかったからでした。
(赤字のところです)

今までは CDT のインストールの方を先にやってたからなぁ…
組み込み屋ではなくなってきたのを実感。

というわけで、CDT をインストール。
CDT Downloads

Eclipse を再起動の後、もう一度 Android Native Development Tools のインストールを試みると、今度はすんなりインストール出来ました。

Eclipse も依存関係とか自動でチェックしてインストールしてくれると楽なんですけどねぇ

2013/01/11

removeFooterView で ClassCastException

Android の ListView。
よく使うコンポーネントなのに、ハマるポイントがいろいろあります。

今回も、今まで何回か「ハマっている」気がするのだけれど、毎回忘れてしまうやつ。

ListView.removeFooterView で java.lang.ClassCastException が出た場合は、ListView.addFooterView を ListView.setAdapter より先に呼んでしまっている可能性が高い。


addFooterView の Javadoc には以下のように書いてあります。

NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.

書いてあるのは良いのですが、どうせだったら addFooterView で例外発生させて欲しいものです。
かつ、ClassCastException ではなく、もう少しわかりやすい例外を。
と思うのは私だけでしょうか?
adapter が null なんだから判定は簡単なはず。


まー、書いてあるのに守らなかったお前が悪い。と言われればそれまでですけどね…

2013/01/07

RAID1 設定したHDDのS.M.A.R.Tエラーを修復する

年明け早々、S.M.A.R.T で不良セクタが報告されました。
Disk Utility で確認したところ

このディスク、Ubuntu 上でFakeRAIDを組んだもの
いままで RAID の修復なんてやったことないよ…

というわけで、やってみました。

バックアップ

なにはともあれ、まずはバックアップから。
対象のHDDに入っているデータを丸々退避。
Nasneに外付けハードディスクをつけたばかりだったので、データを退避する場所があったのは幸いでした。

エラー箇所の確認

エラー箇所を確認するためには、S.M.A.R.T のセルフテストを実行します。(short ではエラーが出ない場合もあるので、その場合は long にします)
$ sudo smartctl -t short /dev/sdd
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-35-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Sun Jan  6 10:46:18 2013

Use smartctl -X to abort test.

2分待てとのことなので、待ちます。
2分経ったら、結果を確認。
$ sudo smartctl -A -l selftest /dev/sdd
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-35-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   113   109   021    Pre-fail  Always       -       7325
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       523
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   072   072   000    Old_age   Always       -       20601
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       521
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       284
193 Load_Cycle_Count        0x0032   051   051   000    Old_age   Always       -       448507
194 Temperature_Celsius     0x0022   119   094   000    Old_age   Always       -       28
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       2
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       1
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%     20600         1348821247

2箇所もエラーがありますね。とりあえず、最初に問題のあるセクタは 1348821247 (LBA) であることがわかりました。