linux における google chrome でのSSL証明書のバックアップ方法

ひっさびさにはてなに書くから記法がわかりません!

市民権もすっかり剥奪されて奴隷階級に身をやつしております今日この頃、皆様お元気でしょうか。母の日にはベタにカーネーション送りましたよ!!そんなわけで google chrome でのSSL証明書のバックアップ方法についてです。

なんで?って、そりゃ StartSSL で証明書を取得したのはいいけど、google chrome で取得してみたら、どうやってクラアント証明書のバックアップをとっていいのか途方に暮れてしまったからです。windows だとどうか分からないけど、linuxchrome だと、「オプション」→「高度な設定」→「セキュリティ」→「証明書の管理」をたどると下記の絶望的なページに飛ばされます。

http://code.google.com/p/chromium/wiki/LinuxCertManagement

さて、つまりは「GUIなんてまだ用意してねーぜ!」ということ(2010年5月現在)だそうなので、自分で頑張って NSS Shared DB と格闘してくれよ!ハハハ!!という話です。さすがは「高度な設定」を名乗るだけはあるよねー。ではどうせすぐに忘れちゃう私のために以下にバックアップ方法をまとめておきます。

まずは準備だ!

最早すっかり Ubuntu っ子になったので、下記で何も考えずに libnss3-tools をインストールしましょう。

sudo apt-get install libnss3-tools

他のディストロの場合は上の LinuxCertManagement のやり方に従うこと。

証明書の一覧を眺めるよ

とりあえず証明書としてどんなものが入っているか確認するよ。私の場合、他の証明書は入れてないから、StartSSLで作成した証明書だけが入ってるからとっても分かり易い感じです。

keita% certutil -d sql:$HOME/.pki/nssdb -L                        [/home/keita]


Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

StartCom Free Certificate Member's StartCom Class 1 Primary Intermediate Client CA ID u,u,u

というわけで、「StartCom Free Certificate Member's StartCom Class 1 Primary Intermediate Client CA ID」がニックネームです。このニックネームというのがなんだか重要そうだから、覚えておいてね!

いよいよバックアップを!!

必要なニックネームを取得したから、次のようにして、バックアップを取り出します。

keita% pk12util -d sql:$HOME/.pki/nssdb -o backup.p12 -n "StartCom Free Certificate Member's StartCom Class 1 Primary Intermediate Client CA ID"
Enter password for PKCS12 file: 
Re-enter password: 
pk12util: PKCS12 EXPORT SUCCESSFUL

これで backup.p12 というファイルがお手元に作成されます。パスワードを聞かれるけど、空でも一応大丈夫みたい。万一失くした時に備えて設定しておいた方がいいと思いますけどねー。ちなみにこの .p12 なファイルってなに?と思ったので調べてみたら、PKCS #12 という鍵と証明書をパッケージしたファイルフォーマットなのだそうです。SSL関係は用語がむずかしくて覚えられそうにない...

http://ja.wikipedia.org/wiki/PKCS

まとめ

さて、これでバックアップがとれて安心ですね。firefox でやればこんな苦労はしないで済むのに...と思うでしょうが、私の場合、そう思った時には手遅れだったの仕方ないのです。だってこの手順を踏まないと firefox に証明書を移すこともできないわけで。

ちなみにこの証明書を firefox に移すためには、「設定」→「詳細」→「暗号化」→「あなたの証明書」→「インポート」で作成した .p12 なファイルを読み込んで下さい。多分他のブラウザも似たようなところから読み込めるんだと思います。

石見銀山に行ってきました!

せっかくの世界遺産ということで石見銀山に行ってきました。とても自然の美しい所で楽しかったのです!でも、うーんどうなんだろう、と思うところもあったのでまとめておきます。

良かった点

  • 町並みが美しいので、天気の良い日にぼーっと眺めると最高だと思います。なるべく高いところから一望するとなお良いと思います(途中の少し小高いところにあるお寺?から見ると全体を眺められました)。
  • 熊谷邸は外から見たら一見地味なのですが、いざ中に入るととても楽しい。家広いし階段急だし、トイレも風呂場も見れて、昔の偉い人はこんなところに暮していたんだな、という生活感を身近に感じられました(というか、つい最近まで実際そこで家の人が生活してたんだって!)。是非見るべきだと思います。おまけに係員の人の説明が丁寧だし親切で言うことありませんでした。お茶のサービスもあったのですが、これがまたおいしくて満足。
  • 銀の採掘場というか掘ってた穴(場所)を間歩というのだそうですが、中がとても楽しい!こんなところで作業してたんだ、とワクワクしました。後ろを歩いてたおばさんが「こんなところで作業してたら早死にするよね」としゃべっていましたが、確かによく分かります。途中横穴が一杯あって思わず覗き込んでしまいます。なお間歩はちょっと寒いくらいに涼しいので、お気をつけ下さい。

なんだかなぁと思った点

  • バスをもう少し増便してもいいのではないでしょうか。
  • お土産屋さんがいまいちな感じ。石見銀山だから銀を買う!ってワケにはいかないので、他にもなんかそれっぽい名物か何か用意して下さると嬉しいです。正直何を買っていいものか分かりませんでしたので、何も買えませんでした。バス停の前に煎餅屋さんがあったから煎餅だけは買ったけど、これ京都のお店なの?とってもおいしかったけど石見銀山で京都はなにか違うと思いました。
  • 各雑貨屋さんに統一感が感じられないので石見銀山らしさというが見つけられずこれまた何も買うことが出来ず。
  • 食べ物屋さんはちょっと冷たい感じだったので残念。
  • 間歩が一箇所しか公開されていないのは多少寂しい気がします。もちろんこれは銀山の保存を考えたら仕方ないのだろうと思います。でもなぁ。
  • 見所が熊谷邸と間歩の二箇所、という感じ。うーん、五百羅漢もあるけど、私はあまり印象に残りませんでした。なんだか寂しい。

まとめ

全体としてとっても地味です。観光地としてはまだまだこれからなのかなぁと思いました。確かに楽しい所なのは間違いないのですが、なんというか、物足りなさばかりが目立ってしまうところが残念でした。私ばかりがこう思うだけならとにかく、帰り掛けの人がブツブツと言ってるのを聞いた感じでは、不満が残った人はそれなりに居たようですよ。

世界遺産という名前の期待はもの凄いものがあると思いますので、そうした期待とのギャップがもの足りなさを感じさせてしまうのでしょうが、もう少し改善できるところはありそうです。というか現在まさにそうした改善の真っ最中で試行錯誤をしているように感じました。今後観光地として少しづつ洗練されていくのでしょうから、うーん地味だなぁ物足りないなぁ、という印象をぬぐえる日がいつか来るのだろうと信じています。磨けば光る原石状態?

KM で遊ぼう!

さて今日も眠れないので、KM について書いておこうと思います。KM ってなに?と思う人がほとんどのことかと思われますが、これは F-Logic の仲間みたいなものです。つまり知識をあーだこーだして遊ぶための枠組みです。"The Knowledge Machine"という格好の良い(しかしあまりにも大胆な)名前で覚えるといいみたいです。

KM: The Knowledge Machine

とか言っておきながら私も全然詳しくないので、他の人も一緒になって KM であーだこーだして下さるととっても嬉しいなと思います。むしろ色々教えて欲しいくらいですから、どなたか一緒に勉強して知見を共有しませんか?

なお、私は Action の扱いについてとても興味があります。そういう目的ですが、正直 Action をうまいこと扱うのって絶対難しいだろうとは思いますから(言語学の経験上、その辺を真面目に考えると、砂漠の荒野をさまよって死ねるよね!)、結局日和って class 周りをつついているだけになってしまうかも知れません。KM については今後も眠れない時にちまちま書いていく予定ですが、そうなったら誰かしかってやって下さい、よろしくお願いします。

まずは動かす

KM は lisp で書かれているそうです。私は scheme しか知らないので、というかそういう括弧の世界は gauche しか触ったことが無いダメな子なので、まず動かそうとした時点で躓きました。同様にダメな人はまず lisp 環境から導入しておいて下さい。Ubuntu の人は次のようにすれば大丈夫。

% sudo apt-get install clisp

次に km-2-2-19-packaged.lisp をダウンロードします。ただしこのまま clisp で処理するとなぜか変な文字列があるからエラーだよ、と怒られるようなので、とりあえずやっつけ的に次のようにして対処しておきます(正しい方法を知っている方教えて下さい)。

% nkf -w km-2-2-19-packaged.lisp > km.lisp

これでようやく動かすことが出来ます。

% clisp -repl km.lisp
(COMMENT: Resetting KM...)
      ====================================================
      KM - THE KNOWLEDGE MACHINE - INFERENCE ENGINE v2.2.16
      ====================================================
Copyright (C) 1994-2008 Peter Clark and Bruce Porter. KM comes with ABSOLUTELY
NO WARRANTY. This is free software, and you are welcome to redistribute it
under certain conditions. Type (license) for details.

Documentation at http://www.cs.utexas.edu/users/mfkb/km/
Type (in-package :km) then (km) for the KM interpreter prompt!
[1]> 

ただしこの時点ではまだ KM 環境の中に入っていないので、指示通りに次のように打ち込んでおきましょう。

[1]> (in-package :km)
#<PACKAGE KM>
KM[2]> (km)
KM> 

というわけでこれで遊ぶ準備が整いました。ではとりあえず猫を二匹登場させてみましょう。

KM> (a Cat)
(_Cat1)
(1 inferences and 35 KB accesses in 0.0 sec [250 lips, 8750 kaps]))

KM> (a Cat)
(_Cat2)
(1 inferences and 27 KB accesses in 0.0 sec [250 lips, 6750 kaps]))

なんだかとっても分かり易くて親切ですね。

読むべきもの

さてとりあえず動いて大変目出たいところですが、色々試す前に次のものは読んでおいた方が良いと思います。全体像がなんとなく把握できます。

http://www.cs.utexas.edu/users/mfkb/km/km-overview.script

あとはクイックリファレンスシートを印刷して手元に置いておきましょう。

http://www.cs.utexas.edu/users/mfkb/km/km-reference-sheet.doc

ただこのリファレンス、一箇所間違いがあって、真ん中くらいに allof が上下に並んでいるところがあると思うのですが、これ下のは oneof なので印刷する前に修正しておいた方がいいと思います。私は印刷してから気付いたのでとても悔しいです。

で、あとはマニュアルを読むべきでしょうけれども、いきなり頑張ると疲れるので私はいずれゆっくりと読むことにしました。

じゃあ遊びます

まずは無難なところでクラスでも作ってみましょうか。

KM> (Cat has (superclasses (Animal)))
(Cat)
(1 inferences and 21 KB accesses in 0.0 sec)

KM> (Animal has (superclasses (Mammal)))
(Animal)
(1 inferences and 21 KB accesses in 0.0 sec)

じゃあ早速サブクラスを問合せしてみます。

KM> (the subclasses of Mammal)
(Animal)
(1 inferences and 3 KB accesses in 0.0 sec)

KM> (the subclasses of Animal)
(Cat)
(1 inferences and 3 KB accesses in 0.0 sec)

うん、いい感じですね。じゃあタクソノミを表示しちゃいましょう。

KM> (taxonomy)
Removing redundant superclasses...
Removing redundant subclasses...
Computing subclasses of Thing...
Thing
   Mammal
      Animal
         Cat
(t)
(7 inferences and 102 KB accesses in 0.0 sec [583 lips, 8500 kaps]))

おおなんと便利なことでしょうか。なんだかワクワクしてきますね!あれれ、さりげなく Animal と Mammal の順序おかしくない?とか簡単に気付けるのもこうして可愛らしく表示してくれたおかげですね(私はうっかり屋さんだからこういう間違いをよくやります、うっかり屋さんにも優しい KM ということです)。素晴らしいと思います。

循環継承

いつも通りに循環継承に挑戦してみます。KM では循環継承はどう扱われるのでしょうか。楽しみですね。

KM> (Dog has (superclasses (Dog)))
(Dog)
(1 inferences and 20 KB accesses in 0.0 sec [250 lips, 5000 kaps]))

おお、なんとあろうことか、知識として認められてしまいました。大丈夫?

KM> (a Dog)
ERROR! Cycle in the KB! Dog is its own superclass!
	-------------------------
	**Switching on debugger** 
Options include:
  g: to see the goal stack
  r: to retry current goal
  a: to abort
  o: to switch off debugger
  A: abort & off - return to top-level prompt AND switch off tracer
  ?: to list more options
	-------------------------

ERROR! Cycle in the KB! Dog is its own superclass!1 <- (_Dog1)                               [(a Dog)](_Dog1)   ; (WARNING: Errors occurred during reasoning)
(1 inferences and 25 KB accesses in 0.0 sec [250 lips, 6250 kaps]))

ほらやっぱり大丈夫じゃないよ!とっても残念な感じですね。

まとめ

以上のように、KM はとっても素敵なおもちゃですから、皆で一緒に遊びましょう。今回は書きませんでしたが、なんと Situation とかあるんですよ。その辺と Action との絡みはとっても楽しみですよね。今からもうワクワクしてます。

「Rubyの普及を目指した自治体基幹業務システム構築」成果報告書をざっと読みました

以下の記事を読んで興味を持ったので「Rubyの普及を目指した自治体基幹業務システム構築」成果報告書をざっと読みました。

この報告書見て、一体何人がRoRを使おうと思うか興味津々なんです。 - ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

報告書は以下からダウンロード出来ます、とっても親切な世の中ですね。

2007年度「自治体等におけるオープンソースソフトウェア活用に向けての導入実証」成果 Rubyの普及を目指した自治体基幹業務システム構築:IPA 独立行政法人 情報処理推進機構

私としては興味深く思ったのは 63 ページ以降の「4.3 人材育成の取組みについての検証」の箇所です。ここにはたった5日間で COBOL の人を Ruby の人に変えてしまおうという驚くべき計画が書かれていて、その結果 7 人中なんと 4 人は大体のところ Ruby を理解できてしまったようです(いやもちろん私のグラフの読み方はかなり恣意的ですけど)。私はこれまでの経験上新しい言語を学ぶのには大体一週間かかると考えていたのですが、たったの 5 日間で Ruby は学習できてしまうのですね。これはなんとも素晴しい事ではないでしょうか!この成果を活かして世の中の COBOL の人をわっしわっしと Ruby の人に転化させてしまえばいいんじゃないのかなぁ、と思いました。嘘です。

ただ、「オブジェクト」を理解できた人が6人居るのに、「クラス」を理解できた人が4人と、2人足りていない所に一抹の不安を感じます。クラスを理解できなった人は果たして本当にオブジェクトを理解できたのでしょうか?

1.9 trunk の proc{}[1,] 問題

先日は各種 1.9 対応用パッチを投げましたが、Ramazeさんへのパッチは追記したようにどうにもマズいものでした。

各種1.9対応パッチ投げますよ! - ¬¬日常日記

これを受けて manveru さんが ruby-core に投げたメールは次のものです。

[ruby-core:18560] Re: [ANN] Ruby 1.9.1 feature freeze

このメールにある例はちょっと長いのでより分かりやすいように最小の例を挙げておきます。

[1,] #=> [1]
proc{}[1,] # => syntax error, unexpected ']'

つまり、#[ ] によるメソッド呼び出しの場合、引数の末尾に","を付けると統語違反になってしまうのがどうなのかが問題提起されているわけです。もちろん通常どのメソッドも末尾に","を付けると統語違反なのですが、#[ ] については、配列の記法から類推してまるで首尾一貫しない統語規則になっているかのように見えてしまうことが問題です。しかも 1.8 においては #[ ] の時には引数の末尾に","を付けても統語違反になりませんから、その点からも 1.9 の振舞いは不満となるわけです。

ruby-core には現在のところこれに対する答えが出ていないので、parse.y を読むことにしたいと思います。ざっと見た感想を書きますと、parse.y は複雑で大変な感じですね。私は果たしてこれを把握できるでしょうか。

私にも出来るPPA

なにか良く分かっていないのですが PPA って便利そうですね。だから私もやってみることにしました。

下のが私のアカウントです。

Keita Yamaguchi in Launchpad

で、アカウント登録日が 2005-11-09 となっているのですが、私はいつの間に launchpad にアカウントを作っていたのでしょうか。正直あまり記憶がないのですが気にしないことにします(あ、でも昔、なんかしようとしてアカウントを作って、そのまま忘れ去ってしまったような)。

ちなみに上に挙げた記事はとっても分かり易くて素晴らしいと思いました。特にCoC書名は手順がわりと複雑なので、分かり易いガイドを書いて下ったおかげでとても助かりました。ありがとうございました!あときっと続編を書いて下さると信じていますのでよろしくお願いします。そういうわけですから、皆さんも是非やってみて下さい。私にも(少なくともここまでは)出来たから他の人もきっと出来るよ!

でも、PPAで何公開したらいいのかな?なにか適当に野良パッケージでも作ってアップロードして良いのでしょうか。それにしても、RPM は結構作った経験があるのですが、deb パッケージは一度も作ったことがないんですよね。大丈夫かな。

あとついでに反省ですけれども、私は linux をそこそこ長く使わせてもらってるくせに、全くと言っていい程 linux 系のコミュニティには貢献した事がないので、そろそろなんとかしたいと思います。手順とかしきたりとかが分からないからやらないわけで、だからそういうのを少し学びたいと考えています。今は Ubuntu 使ってるから(Ubuntu 楽だもんね!)、Ubuntu でなんかすればいいのかな?何が出来るかな?

Rubinius は出来る子!という話

以下の記事を読みました。

lambdaの動作 - はてなかよっ!

それはさすがにどうだろう、と思うわけですが、でも我々には Rubinius という素晴らしい武器があるではないですか!

class Foo
  Map = {
    'key1' => lambda { |bar|
      puts bar
      p MethodContext.current.sender.sender.receiver
    }
  }

  def baz(key, bar)
    Map[key].call(bar)
  end
end

foo = Foo.new
foo.baz('key1', foo.object_id.to_s)

#=> 9
#=> #<Foo:0x9>

てなわけで、出来なくはありません。でもこういうのを使うと世間様に怒られそうな気がします。

追記

id:miura1729 さんの Binding.of_caller はとってもタメになるので是非読みましょう。CRuby でもこんな方法で出来るんですね、ありがとうございました!

CRubyも出来る子!という話 - miura1729の日記

Binding.of_caller のことを今まで知らなかったのですが(出自は Rails なのかな、それとももっと前からあるのかな?)、おお、なんと見事な set_trace_func でしょうか。return してから line に入ったタイミングで binding を取得するわけですね。賢いなぁ。set_trace_func は注目したことがなかったのでなにか楽しい活用方法を考えてみたいと思いました。