2012年12月27日木曜日

Puttyを使って鍵認証を設定する

先日、さくらVPSを申し込み、Apache等のインストールを行っている。

ほとんど、ドットインストールのさくらVPSの基礎を参考に行っているw

そのうち、#06 鍵認証を設定しよう(1)#07 鍵認証を設定しよう (2)では、Macで鍵を作ってうんぬんとなっているが、Windowsで鍵認証をしたい場合があるので、Windowsで鍵を作ってうんぬんの話をここに残しておく。ここではPuttyを使用する。

ちなみに、さくらVPSに限った話ではないので、他のサーバ接続でも利用できる・・・はず

1. puttygen.exeを起動する。きっと、putty.exeと同じフォルダに入っているはず

2. 「生成」ボタンをクリックする。
3. 「乱数を生成するために空白のエリア上でマウスを動かしてください」とメッセージが出るので、その通りにやる。

4. 完了後、「公開鍵の保存」をクリックし、ひとまず、"id_rsa.pub"という名前で公開鍵ファイルを保存する。
5. 続けて、「秘密鍵の保存」をクリックし、ひとまず、"id_rsa.ppk"という名前で秘密鍵ファイルを保存する。
6. サーバに接続する。
7. ホームディレクトリで以下のコマンドを実行する
 $> mkdir ~/.ssh
8. パーミッション設定する
 $> chmod 700 .ssh
9. ローカルマシンに戻り、先ほど作製した公開鍵id_rsa.pubをWinSCPやPutty付属のpscp等を用いて、サーバの.sshディレクトリに転送する。
10. 再びサーバに行き、.sshディレクトリに cd する。
11. 以下のコマンドを実行する(OpenSSH用に変換作業を行う)
 $> ssh-keygen -i -f id_rsa.pub >> authorized_keys
12. authorized_keysファイルのパーミッション設定する
 $> chmod 600 authorized_keys
13. id_rsa.pubが不要になったので削除する。
 $> rm -f id_rsa.pub
14. ローカルマシンに戻り、Puttyを起動
15. 左のカテゴリから「セッション」をクリックし、「保存されたセッション」の欄に登録されている鍵認証をしたいサーバのセッションを選択し、「読込」をクリックする。セッションが無い場合は、「ホスト名(またはIPアドレス)」にサーバのホスト名またはIPアドレスを書いといて、「保存されたセッション」に任意のセッション名を入れて、一旦「保存」をクリックして保存しておこう。

16. 左のカテゴリから「接続」→「SSH」→「認証」をクリックする。
17. 「認証のためのプライベートキーファイル」の右側の「参照」をクリックして、先ほど作製した秘密鍵id_rsa.ppkを指定する。完了したら、再び「セッション」カテゴリに戻って「保存」をクリックしておく。

18. 保存したセッションを読み込んで、「開く」をクリックする。以下のように"Authenticationg with public key"のメッセージが出れば成功である。

※参考

2012年12月24日月曜日

クラスローダー経由でプロパティファイルを読み込む

備忘録です。

Javaでプロパティファイルを読み込む方法の一つに、クラスローダーを利用する方法がある。Javaプログラム実行時に、クラスパス上にあるファイルを読む込みたいときに有効である(プロパティファイルの在り処にクラスパスを通しておけば、ローダー経由で読み込めるということ)。

以下、log4jを使おうと思って、専用のプロパティファイル(log4j.properties)を用意して読み込む処理を書いた例。
        InputStream ins = null;
        ins = Main.class.getClassLoader().getResourceAsStream("log4j.properties");
        PropertyConfigurator.configure(ins);

2012年12月22日土曜日

Java系ライブラリのsources.jarを作る

忘れずにメモ。

よく、apache系のライブラリを使うのですが、ソースを(Eclipse上で)見たいことがよくあり、Eclipseでライブラリのパスを通すときに、ソースをパッケージングしたファイルへのパスも設定しておくと、より容易に見やすくなるんですよ。

今回はlog4jを使うので、log4jのソースをパッケージングしたファイルを作ることに。

・前提
 ・Apache Antがコマンドライン上で使えるようになっていること

1. log4j-x.y.z.zipをここからダウンロード(x.y.zはバージョン)
2. zipファイルを解凍
3. ターミナルあるいはコマンドプロンプトで、解凍してできたフォルダに移動
4. 以下のコマンドを実行
 > ant -f build.xml jar
5. すると、dist/libフォルダが作られ、その中にバイナリのjarとソースのjarが作られる。

※バイナリのjarは既に解凍してできたフォルダの直下にあるから別に不要なんだけど

ついでにEclipseでの設定もメモしておく。

1. log4jを使うプロジェクトを用意
 今回はLog4jSampleプロジェクトを作成
2. log4j-x.y.z.jarとlog4j-x.y.z-sources.jarをインポートする。
 僕の個人的なやり方だけど、libフォルダを作って、その中にjarを置いた。インポートはEclipseのインポート機能を使ってもいいし、単純にコピペでやってもいい
3. プロジェクト右クリック→プロパティ→「Javaのビルド・パス」をクリック→「ライブラリー」タブをクリック→「追加ボタン」をクリック→log4j-x.y.z.jarを選択。選択するとダイアログが以下のような感じになる。
4. 追加されたlog4j-x.y.z.jarをクリックすると、オプションメニューが展開されるので、そのうちの「ソース添付」をクリックし、右の「編集」をクリック。log4j-x.y.z-sources.jarを選択する。そうすると、ダイアログが以下のようになる。

設定関係はこれでおk。あとはJavaコードを書けばよい。試しにlog4jの実装を見てみる。やり方はいろいろあるが、オーソドックスなのは、「パッケージ・エクスプローラ」に出ている「参照ライブラリー」をクリック→log4j-x.y.z.jarをクリックすると、クラス一覧が現れるので、そこから見たいクラスをダブルクリックすればソースが見れるようになる。ちなみに、「ソース添付」の設定がしていないとくりっくしても「該当ソースが見つかりません」みたいなメッセージが出てたと思う。


他には、自分がlog4jのinfoメソッドを書いたときに「infoメソッドの実装を見てみたい」と思ったら、ctrlキーを押しながらマウスポインタをメソッドに持っていってそのままクリックするか、表示されたメニューの「宣言を開く」をクリックする。

すると、infoメソッドの宣言元が表示される。


※「後になって言うなよ」な話
今回sources.jarを作るにあたり、ダウンロードしzipファイルの中にたまたまビルドスクリプトがあり、sources.jarを作るための処理があったからいいものの、他のライブラリも同様にできるとは限らない。sources.jarも公開されているのでそれをダウンロードするだけでおkな場合もあるし、作るための処理を自作しないといけないこともあると思う。

あと、別にソースをパッケージングする必要は実は無い。「ソース添付」のところでソースのフォルダを選択してもいいので。ただ、パッケージングしたほうが仲間内で開発するときに渡しやすいかなっていうくらい。

2012年10月31日水曜日

jQuery DeferredとSafariとalert


※この記事は問題が発生したが原因が分からなかったため、知ってたら教えて欲しいという記事です。

"jQuery Deferred API"という非同期処理のためのオブジェクトがjQueryにあります。

「Deferredって何?」と思った方は検索欄に「jQuery Deferred」と入れて調べてくださいな。

そのDeferredのサンプルを書いていて気づいたのだが、Safariだけ動かした時だけおかしな挙動になるケースがあった。

それは以下のコード
var doAaa = function() {
    var dfd = $.Deferred();

    setTimeout(function() {
        $('#BList').append('<li>aaa</li>');
        dfd.resolve();
    }, 1000);

    return dfd.promise();
};

var doBbb = function() {
    alert('doBbb done');
};

var doSampleB = function() {
    // clear
    $('#BList').empty();

    doAaa().done(doBbb);
};


Deferredを用いて、doAaaの実行後にdoBbbを実行するというもの。doAaaは画面に"aaa"と表示させて、doBbbは単にalertを表示させている。HTMLではボタンを押すとdoSampleBが実行されるように作った。

なので、"aaa"と表示した後にalertが出るのが正しい、と思っている。

だが、safariだけ"aaa"と表示する前にalertが出てしまう(´・ω・`)

chromeの場合は想定どおり

safariの場合は先にalertが出る

先に出たalertを閉じるとaaaが表示される。

Firefox、IE、Operaでも試したが、こちらは想定どおり(chromeと同じ)だった。
OSをWindowsからMacに変えて試したが、こちらでもsafariだけ先にalertが出た。

ちなみに、"aaa"と表示するところをalertで出した場合は、どのブラウザでも正しい順序でalertが出た。
doBbb内でalert出すところをjQueryで"bbb"と表示するように変えたが、どのブラウザでも正しく"aaa"、"bbb"の順で表示された。

なので、描画とalert周りがブラウザによって何か制御が違うのかなという気がするが、それ以上のことはよく分からず(´・ω・`)
誰か知っている人がいたら教えてください。