yuu_nkjm blog
2011-01-03(Mon) [長年日記] 編集
[ssh][Windows][Linux] SSHトンネリングを使ってリモートデスクトップ
ネットワーク構成
手順
- gateway1.xxxx-u.ac.jpにログイン [hoge@localhost] ssh gateway1.xxxx-u.ac.jp
-
gateway1.xxxx-u.ac.jpの53389番ポートへのアクセスを,gateway1.nkjm.infoの内側にある,10.228.150.xxxというホストの3389番ポートに転送する.
[hoge@gateway1.xxxx-u.ac.jp] ssh -L 53389:10.228.150.xxx:3389 gateway1.nkjm.info
-
localhostの53389番ポートへのアクセスを,gateway1.xxxx-u.ac.jpの53389番ポートを転送する.
[hoge@localhost] ssh -L 53389:localhost:53389 gateway1.xxxx-u.ac.jp
- localhost上のリモートデスクトップで,接続先をlocalhost:53389にする.
備考
リモートデスクトップの対象のNetBIOS名は分かるが,IPアドレスが分からないときは,
nmblookup ホスト名とする.
2011-01-10(Mon) [長年日記] 編集
[Windows][bat][command] バッチファイルが存在するディレクトリへ移動する(カレントディレクトリを変更する)
バッチファイルを使ってJavaプログラムを起動したいときなどに,バッチファイルが存在するディレクトリへ移動して,そこを基準にその後の処理をしたいことがある.そんな時は%~dp0を使う.
SET BAT_DIR=%~dp0 cd %~dp0
カレントディレクトリを取得する%CD%を使っても同様のことが出来る.カレントディレクトリは,%CD%という環境変数に入っている.
E:\Desktop>echo %CD% E:\Desktop
つまり,これでOK.
SET BAT_DIR=%CD% cd %CD%
%~dp0を使う方は,Linuxで$0を使う方法に似ている.
関連ページ
- 例によって例のごとく,ひしだまさんページにも書かれていた → MS-DOSバッチファイル@ひしだま技術メモ
2011-01-11(Tue) [長年日記] 編集
[Java][JVM][command] JVMのオプション
XX:-UseGCOverheadLimit"とするとOutOfMemoryErrorを回避出来ることがある.
このオプションは,「OutOfMemoryエラーが投げられる前に,VMがGCに費やす時間(の比率?)を制限するポリシーを使う」というもの.オンにしたかったら"XX:+"に,オフにしたかったらXX:-"とする.
XX:+UseGCOverheadLimit Use a policy that limits the proportion of the VM's time that is spent in GC before an OutOfMemory error is thrown. (Introduced in 6.)
JVMの詳細な説明は,Java HotSpot VM Options (English)に出ている.完全には対応していない様だが,日本語はJava HotSpot / パフォーマンスにある.
2011-01-12(Wed) [長年日記] 編集
[Android][Eclipse] EclipseでAndroidアプリケーションを開発する
星の数ほど似た記事はあるが,自分のメモ用に.
ダウンロード
- Android SDKをダウンロードする.Android DevelopersのDonwloadから,android-sdkをダウンロード.解凍して,好きな場所に設置する.
Eclipseの設定
- Eclipse用のpluginをインストールする.Eclipseのヘルプ→ソフトウェアのインストールを選択する.URLをhttps://dl-ssl.google.com/android/eclipse/とする.名前は,Android Pluginあたりで.パッケージは全てを選択する.Eclipseを再起動する.
- Android Pluginの設定をする.ウィンドウ→設定→Androidとして,SDKロケーションに,SDKをおいたパスを設定する.
- ウィンドウよりAndroid SDKおよびADVマネージャを起動する.
- Installed Packageを選択し,Update Allを選択する.必要なAPI類をインストールする."SDK Platform Android xx, API"は最新のもの以外は必要ないので,あとはリジェクトにした.
AVDの設定
- Virtual Devicesより,新規を選択.適当な名前をつける.ターゲットは必要なAPIを指定する.SDカードのサイズは適当に.SkinはDefault(HVGA).ハードウェアもデフォルトとする.Create AVDをクリック.
- Virtual Devicesから先ほど作成したAVDを選択し,開始をクリック.
- ユーザのホームディレクトリ以外にavdのプロファイルが出来ると,起動に失敗するようだ.".android/avd/"ディレクトリがユーザのホームディレクトリにないとだめみたいなので,移動するかシンボリックリンクを張る.この現象は,Windowsのシステム回りのディレクトリ(デスクトップディレクトリ,ユーザのホームディレクトリ)を変更していると起こるそうだ.
- Android SDKおよびADVマネージャを再起動する.
- Virtual Devicesから先ほど作成したAVDを選択し,開始をクリック.今度は起動する.
Androidプロジェクトの作成
- ファイル→新規作成→Android→Androidプロジェクトを選択する.アプリケーション名,パッケージ名,Min SDK versionは適当.Create Activityにチェックを入れる.名前は適当でOK.完了を押すとプロジェクトが作成される.
- AndroidManifest.xmlを編集する.アプリケーションタブを選び,Debbagableをtrueにする.
Androidプロジェクトの実行
- 自動で生成されたActivityクラスをextendsしたJavaファイルを選択し,実行→デバッグの実行構成を選択.Androidアプリケーションを選択し,右クリックして新規作成する.
- Eclipseをcleanコマンドつきで再起動する.
- Androidプロジェクトをプロジェクトの項で指定する.実行を押す.
2011-01-13(Thu) [長年日記] 編集
[Java][リフレクション][例外] Methodクラスのinvokeメソッドにより呼び出した先で起こった例外の出力
Method method;
try{
method.invoke();
catch (InvocationTargetException e) {
e.printStackTrace();
e.getCause().printStackTrace();
}
リフレクションでMethod#invoke()を使って呼び出した先のメソッドで発生した例外は,java.lang.reflect.InvocationTargetExceptionとして投げられる.この例外eから実際に発生した例外を取得するには,e.getCause()とする.
2011-01-14(Fri) [長年日記] 編集
[Java] JVM上で実行している箇所(ソースコード内の行数)の表示
現在どのソースコードの何行目にいるかを取得したいことがある.log4jの機能を使って,ログファイルに書き出すような方法も考えられるが,文字列として取得したい場合などは他の方法が必要.そんなとき,Thread.currentThread().getStackTrace(),もしくはException.getStackTrace()を使う.
メソッドの呼び出し元を調べたい時にも使える.
Threadクラス
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
出力例↓
java.lang.Thread.getStackTrace(Thread.java:1436)
info.nkjm.yuu.java.Hoge.start(Hoge.java:23)
info.nkjm.yuu.java.Hoge.main(Hoge.java:16)
Exceptionクラス
StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
出力例↓
info.nkjm.yuu.java.Hoge.start(Hoge.java:23)
info.nkjm.yuu.java.Hoge.main(Hoge.java:16)
2011-01-15(Sat) [長年日記] 編集
[bash][Linux] シェルスクリプトが実行できない(/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません)
bash: ./hoge.sh: /bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません
すごーく簡単なスクリプトが実行できないとき,ファイル内の改行コードを間違えていることがある.
Windows上でshファイルを作成,sambaを使ってコピーとかすると起こりがち.昔はよくはまった.今となってみれば「^M」(CR, \r, 復帰)がついてるようなエラーが出てるからすぐ気づけるはずなのに….
似たようなのでよくやったのは,sambaで操作したときにファイルのパーミッションが変わってしまって,スクリプトの実行権限が消えていたとかか.
オプションの%pとか,ASCII制御文字の^Mとかってググりにくいんですよね.
2011-01-16(Sun) [長年日記] 編集
[SQLite] SQLiteとコマンドラインでお話しする
SQLiteとコマンドラインでお話しする簡単な例.
$ sqlite3.exe network.sqlite SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" $ sqlite> .tables link node $ sqlite> .schema node; (snip) $ sqlite> select * from node; (snip) $ sqlite> select id from node whare id='123456'; (snip) $sqlite> .exit
自分が想像するコマンドの前に.を打てば大体良さそう.
関連ページ
2011-01-17(Mon) [長年日記] 編集
[Android] 作成したアンドロイド用アプリの端末への転送
インストール
- 携帯電話|NTT DOCOMO|サポート:シャープ ケータイ daSHよりドライバをダウンロード.「「USBドライバ」は、LYNX SH-10BをPC用microUSBケーブル(試供品)を使用してパソコンと接続するためのドライバです。」となっている.
- デバイスマネージャから,黄色くなっていSH10Bを右クリック.ドライバの更新を押す.
- 自分で指定してインストールを選択.usb_driver_JNDK01を選択して,OKを押す.
転送コマンド
端末の操作にシリアル番号が必須かと思いきや,なしでもいけるみたい.でも,どうやって端末を決定してるんだ?一台しかささってないから未指定でいけるのか?端末を返してしまったので,詳細な調査はできずじまい.
adb -s シリアル番号 install E:/Desktop/Othello.apk adb install E:/Desktop/Othello.apk
アンインストールは,パッケージ名を指定する.
adb uninstall info.nkjm.android.othello
2011-01-18(Tue) [長年日記] 編集
[Profiler][JVM][Java][Eclipse] Javaのプロファイラ Java VisualVM
Java1.6以降のSDKをダウンロードするとbin以下にjvisualvm.exeというプロファイラが同梱されている.EclipseのTPTPプラグインを使ってたけど,こっちの方が分かりやすかった.
プログラムの監視
- Java VisualVM(jvisualvm.exe)を起動する.
- 監視対象としたいプログラムを起動する.
- VisualVMの左ペインのローカルセクションに,監視対象としたいプログラムが表示されたら,右クリックして「開く」を選択する.
- 監視タブを開くと,CPUやヒープの利用状況を見ることができる.スレッドタブを開くと,スレッドの利用状況を見ることができる.
CPU時間をサンプリングする
- サンプラタブを開く.CPUボタンをクリックするとサンプリングが開始される.
- 適当な時間が経過したあと,スナップショットボタンを押すとサンプリング結果が表示される.
- 監視対象が終了すると左ペインからプログラムが消えてしまうので,適当なタイミングで右クリックメニューから「アプリケーションのダンプ」を選んでおいた方が良さそう.
ヒープダンプする
- 左ペインから,ヒープをダンプしたいプログラムを右クリックし,ヒープダンプを選ぶ.
- ダンプしたファイルは,Eclipse Memory Analyzerプラグインで見るのが良さそう.IBM HeapAnalyzerも試して見たけど,Eclipse Memory Analyzerの方が直感で操作できた.
関連ページ
- 「Java SE 6完全攻略」管理ツールの集大成 - VisualVM その2 - Java技術最前線:ITpro 「Java SE 6完全攻略」管理ツールの集大成 - VisualVM その3 - Java技術最前線:ITpro