2012-01-26
■[その他] git-clone とかで秘密鍵を指定する

git コマンド には SSH のパラメータを渡す方法(rsync で例えると -e "ssh -i $HOME/.ssh/kagi" みたいな指定)がないっぽい?ので、指定した秘密鍵を使うには ~/.ssh/config に記述するしかなさそう
$ touch ~/.ssh/config $ chmod 600 ~/.ssh/config $ cat >> ~/.ssh/config <<EOF Host www.example.com IdentityFile ~/.ssh/takel@www.example.co.jp-to-takel@www.example.com EOF
これを記述した状態で
$ ssh takel@www.example.com -p 10022
$ ssh takel@www.example.com -p 10022 -i ~/.ssh/takel@www.example.co.jp-to-takel@www.example.com
のようにして、そもそもキー等が間違ってないかどうかチェック。
$ ssh -vvv takel@www.example.com -p 10022 > ~/failure-log.txt 2>&1 $ view ~/failure-log.txt 2>&1
あ、そもそも先に接続先に接続元の公開鍵は登録してある前提で。
$ cat ~/.ssh/takel@www.example.co.jp-to-takel@www.example.com.pub >> ~/.ssh/authorized_keys
$ git clone ssh://takel@www.example.com:10022/var/git/example.git
2011-11-28 永遠の17歳のまま0x20歳になりました
2011-11-27
■[その他]これはコーディングコンベンションのレベルの話じゃなくて、言語機能の正確な把握のレベルのお話です

本屋にふらっと言ったら、内容が8割くらい同じ本が別の会社から出ていてびっくりした。
あまりに驚いて、よく確認したくて両方買っちゃった orz
Java でのコーディング規約の例の本なのだが、どうやら絶版っぽい元の本があって、その改訂版っぽい。
しかし翻訳でもない本で、ここまで同じ内容で出版されちゃうのも珍しいと思う。
話は変わるけどその中で、非常に悪いサンプルがあった。
数年前、職場でわけのわからない事を言う人がいたんだけど、どうやらこれの元の本をみて鵜呑みにしたんだろうなと思う。
Java ルールブックのほう、『2.1.1 オブジェクトの参照にはインターフェイスを利用する』のサンプルがすこぶるまずい。
違反例(とされている)
public class BadSample { public static void main(String[] args) { ArrayList<String> sampleList = new ArrayList<String>(); // 1. この本ではここが違反とされている sampleList.add("bad_sample"); BadSample badSample = new BadSample(); String ret = badSample.badMethod(sampleList); System.out.print(ret); } private String badMethod(ArrayList<String> input) { // 2. ここは確かに違反かもね(要件による) return input.toString(); } }
修正例(とされている)
public class GoodSample { public static void main(String[] args) { List<String> sampleList = new ArrayList<String>(); // 1. これは改悪じゃん? sampleList.add("good_sample"); GoodSample goodSample = new GoodSample(); String ret = goodSample.goodMethod(sampleList); System.out.print(ret); } private String goodMethod(List<String> input) { // 2. ここは確かに良くなったかもね return input.toString(); } }
えっと、1. のほうは元のコードで全然悪くないです。 new している時点で具体的な型名を書いてしまっているので、それを受け取る変数名の型を抽象度高くしても意味なくて無意味に不便なだけなんです。
この例の 1. の所で本当に抽象化の恩恵にあやかりたい場合、オブジェクトの生成部分を抽象化して、該当部分から具象クラスに対する知識を取り除いてください。
修正例(ただし元のサンプルに意味がなさ過ぎて有用性も伝わりづらい)
public class ActuallyGoodExample { public static void main(String[] args) { List<String> sampleList = createList(ListImplType.ARRAY_LIST); // これでやっと List<String> で受け取る意味が出てきました。 sampleList.add("actually_good_sample"); ActuallyGoodExample goodSample = new ActuallyGoodExample(); String ret = goodSample.goodMethod(sampleList); System.out.print(ret); } private static List<String> createList(ListImplType listImplType) { switch (listImplType) { case ListImplType.ARRAY_LIST: ArrayList<String> result = new ArrayList<String>(); // ここでは List<E> になくて ArrayList<E> にだけあるメソッド等を使って // 精一杯インスタンスの初期化を頑張ってよい(ArrayList である事は保障されているのだから) return result; case ListImplType.HOGE_LIST: // 別の実装クラスのインスタンスを生成することもありうる。 return new HogeList<String>(); } } private String goodMethod(List<String> input) { return input.toString(); } }
これはコーディングコンベンションのレベルの話じゃなくて、言語機能の正確な把握のレベルのお話です。
この二冊、良い原則もたくさん書いてあるけど『Java の標準規約ではそうです』『著者たちの好みです』っていう隠れた但し書きが必要な所もいっぱいあるので、未熟な人が鵜呑みにするのは良くないと思う。でももっとこういう本には出てきて欲しいと思う。
2011-11-26
2011-09-22
■[その他]裏ゼルダクリア

3DS でゼルダ1やってたんだけど、表から始めて裏ゼルダまでクリアした。
で、裏ゼルダクリアするとセーブデータがまた裏の最初に戻されるのなw 鬼仕様だ。
どうでもいいけど、"ゼルダ1" ってなってるのって多分かなり後期に発売された ROM 版で、ディスク音源鳴ってないと思われる。
リンクとかメトロイドもディスク音源鳴ってない気がするんだけど、これらって ROM 版ってあったんだっけ?
っていうか 3DS なのに 3D じゃない昔のゲームばかりやってる。。。
3D のやつは 500 円でダウンロードできる Vector Racing っていうのがシンプルで爽快感があってわりとお勧め。
2011-09-09
2011-09-08
■[その他]笑いが止まらんww

昨日の出来事「(臭すぎるのがやはりこれ以上耐えられないので)辞めさせてください……」
うーん、次の仕事決める前に辞めるとか馬鹿正直に言っちゃうのはやっぱりダメだなぁ、今後どうしよう……と思いつつ、今日は午前半休をとり本日面接。
「内定でました!!」
どうやら面接の心証がとても良かったらしく、異例ながら即内定となったらしい。
やばい、笑いが止まらんw
■[その他]俺は悪いやつだw

うーん、物事の見通しがつくと残務整理も捗るわw
悶々としてた時と比べ物にならないくらい生産性高いのが実感できるw
そして……もう一社書類通ってるところあるんだよなぁ、と。
ここでふと考えついてしまった。
言い方悪いけど既に保険というか保障があるので、高い額提示してみようw
前職の時とか残業代すごくて、凄い額貰ってた年とかもあるしいいだろw
逆にそれを鑑みた額でそっちも通っちゃったりしたら嬉しい悲鳴だなぁ、今日行ったところは普通に良さそうなんだよね。
とか思ってたら……薫ってきた(>_<;)
きっと本人に悪気があるわけじゃないんだろうから、気の毒だと思うけど、俺はやっぱりこの臭い無理だわ(>_<)

