<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://labs.mengurume.net//</id>
  <title>Mengurume Labs</title>
  <updated>2011-05-11T15:00:00Z</updated>
  <link rel="alternate" href="http://labs.mengurume.net//"/>
  <link rel="self" href="http://labs.mengurume.net//feed.xml"/>
  <author>
    <name>Mengurume</name>
    <uri>http://labs.mengurume.net/</uri>
  </author>
  <entry>
    <id>tag:labs.mengurume.net,2011-05-12://archives/20110512letter/</id>
    <title type="html">Rubyistの皆様へ</title>
    <published>2011-05-11T15:00:00Z</published>
    <updated>2011-05-11T15:00:00Z</updated>
    <link rel="alternate" href="http://labs.mengurume.net//archives/20110512letter/"/>
    <content type="html">&lt;p&gt;　Ruby on 松江ラーメンの大ファンであらせられる皆様におかれましては、本日がどのような日であるか、確実にご承知のことと存じます。&lt;/p&gt;

&lt;p&gt;　去年の今日、Ruby on 松江ラーメンは一般発売を開始しました。そうです、今日はRuby on 松江ラーメンの誕生日なのです！！！&lt;/p&gt;

&lt;p&gt;　やはり個人的には、昨年のRubyKaigi2010で出張販売をさせていただいたことが、非常に心に残っています。一生の素晴らしい思い出です。参加メンバーは皆そうではないかと思います。&lt;/p&gt;

&lt;p&gt;　今年も参加させていただけたらと思ってはいたのですが、結論から言いますと、今年は参加することが出来ません。（参加したいと言って参加できる類の会では無いですので、おかしい表現ですが、行きたい気持ちがあったものでこういう表現以外に見つかりませんでした。）&lt;br /&gt;　また、この場を借りまして、こちらからの問い合わせに迅速に対応してくださった実行委員の皆様に感謝申し上げます。ありがとうございます。&lt;/p&gt;

&lt;p&gt;　昨年いろいろな方々とおはなしをさせていただいた際に「来年（2011）も会えたら良いですね！」と会話してくださった方が何人もいらっしゃって、楽しみだったのですが…。&lt;/p&gt;

&lt;p&gt;　というわけで、温かいお言葉をいただいた我々、皆様に手紙をと思いまして書いてみました。駄文ですが目を通していただけたらと思います。&lt;/p&gt;

&lt;div style="border:1px solid #eee;backgrounc-color:#fefefe;padding:7px;"&gt;
&lt;p&gt;前略&lt;/p&gt;
&lt;p&gt;　前年のRubyKaigi2010ではたくさんの皆様にお世話になりました。私たちにとってはいろいろな出会いがあって、非常に有意義に過ごした3日間でした。今年のRubyKaigi2011は最後のRubyKaigiということで、楽しみでもありますし、RubyKaigi後がどうなるのかと興味もあります。&lt;/p&gt;
&lt;p&gt;　今年についても事情が許せば参加させていただきたいと思っていたのですが、会場の都合で残念ながら昨年のように参加させて頂くことが出来なくなりました。&lt;/p&gt;
&lt;p&gt;　ことさらブログで書くような話では無いかとは思いますが、昨年、「来年も会えたら良いですね!」と交歓させていただいた方もたくさんいらっしゃって、そういう方にお会い出来ないという事が残念でもあり、申し訳ないと思い、ブログにてご挨拶させていただこうという次第です。&lt;/p&gt;
&lt;p&gt;　現在、未曾有の大震災のため、多くの犠牲や損害が生じています。公務員の方々の活躍や、被災者の規律ある行動などを見聞きします。たくさんの方々が自身の領分の中で力を発揮しているというのは、凄惨な状況にあっても感動を覚えます。&lt;/p&gt;
&lt;p&gt;　情報技術に関しても、地震発生後に様々なサービスが矢継ぎ早に登場したり、twitterをはじめとした情報伝達に一役買ったりと、Rubyに限った話ではありませんが、重要な役割を果たしているのは言うまでもありません。&lt;/p&gt;
&lt;p&gt;　そういった社会的なインフラとしても重要な役割を担っている皆様に、心から敬意を表します。皆様の一つずつの取り組みが積み重なって、情報技術が災害時に大きな仕事を果たしたのだと思います。&lt;/p&gt;
&lt;p&gt;　今回、参加出来ないわけですが、もちろんRuby on 松江ラーメンの販売は継続していきたいと思います。継続こそが私たちが出来る、ささやかな取り組みです。今後ともよろしくお願い致します!&lt;/p&gt;
&lt;p style="text-align:right;"&gt;草々&lt;/p&gt;
&lt;p&gt;追伸&lt;/p&gt;
&lt;p&gt;むしろ松江に遊びに来てください。RubyWorld Conferenceがありますしね!&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;　今後とも宜しくお願いします！&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:labs.mengurume.net,2011-01-15://archives/20110115ssd_ubuntu/</id>
    <title type="html">Thinkpad X61をSSDに換装してUbuntu10.10にしつつ年を越す！起動約20秒になったよ！</title>
    <published>2011-01-14T21:38:29Z</published>
    <updated>2011-01-14T21:38:29Z</updated>
    <link rel="alternate" href="http://labs.mengurume.net//archives/20110115ssd_ubuntu/"/>
    <content type="html">&lt;p&gt;　あけましておめでとうございます。Takashi.Uです。&lt;/p&gt;
&lt;p&gt;　皆様、年越しの瞬間はいかがお過ごしだったでしょうか？ワタクシの年越しはタイトルの通りHDDの交換という「なぜこのタイミングで？」という作業を行っていました。&lt;/p&gt;
&lt;p&gt;　今回はこの作業の様子をご覧いただこうと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5356135226/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5043/5356135226_e51a3d420a.jpg" width="374" height="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　まず、今回交換するのはIntelのSSD128GBです。アマゾンで20,000円を切る程度の値段で購入しました。これをThinkPad X61に搭載します。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5356148686/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5050/5356148686_6cd4e688cf.jpg" width="374" height="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　いろいろと入っていますが、必要なのは本体だけです。それでは早速作業です！&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355536737/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5244/5355536737_f059edde3f.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　と行きたいところですが、バッテリーを忘れずに外しましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355538971/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5248/5355538971_0f5c173886.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　ハードディスクはここら辺に入っています。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5356155808/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5161/5356155808_e347b667b7.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　ネジを外して、上に押し上げるような形で蓋を取ります。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5356161498/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5243/5356161498_0ebab3a28f.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　開けてみますと、黒いテープ状のものがあります。これを引っ張ることでハードディスクを引っ張り出す構造になっています。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355551923/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5170/5355551923_4c2681b060.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　引っ張り出します。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355559861/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5121/5355559861_17463c8153.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　引っ張りだしたらこんな感じです。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355564109/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5050/5355564109_1fd57b6936.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　ハードディスクを覆っている部品を分解します。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5356182342/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5250/5356182342_d8e2f3efa4.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　外した部品を新しくつけるSSDに装着します。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355571221/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5289/5355571221_08cd93ddba.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　元あったように戻して蓋をしましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/takashi_u/5355573177/" title="Untitled by Takashi.U, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5283/5355573177_6effba3033.jpg" width="500" height="374" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;　あとはインストールです。CDをUSBブートしてインストールしてみました。SSDとして認識されています。&lt;/p&gt;
&lt;p&gt;　電源を入れて、パスワードをいれて、Chromeを起動してWEBサイトを見ることが出来るようになるまで約20秒になりました。&lt;/p&gt;
&lt;p&gt;　快適です。&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:labs.mengurume.net,2011-01-10://archives/20100110test/</id>
    <title type="html">あけましておめでとうございます</title>
    <published>2011-01-10T07:26:00Z</published>
    <updated>2011-01-10T07:26:00Z</updated>
    <link rel="alternate" href="http://labs.mengurume.net//archives/20100110test/"/>
    <content type="html">&lt;p&gt;　あけましておめでとうございます。本年も宜しくお願いします。（写真は本文と関係ありません）&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/mengurume/5021451805/" title="100830_051026 by mengurume, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4111/5021451805_ba2646d9a2.jpg" width="300" height="500" alt="100830_051026" /&gt;&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:labs.mengurume.net,2010-12-10://archives/2010xmas/</id>
    <title type="html">サンタクロースの存在を証明する方法</title>
    <published>2010-12-09T21:38:29Z</published>
    <updated>2010-12-09T21:38:29Z</updated>
    <link rel="alternate" href="http://labs.mengurume.net//archives/2010xmas/"/>
    <content type="html">&lt;p&gt;　サンタクロースが存在するのかしないのか、子供から質問される日が来ることを恐れているTakashi.Uです。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;　うちの子は2歳と11ヶ月で、サンタクロースのことは全く知らないようです。しかし、いつ何時サンタクロースについて疑問を持つか分かりません。&lt;/p&gt;
&lt;p&gt;　そこで、「お父さん、サンタクロースっているのー？」と聞かれたときの対策を今のうちから考えました。その結果、次のような方針で対処しようかと思うに至りました。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;　まず、サンタクロースの衣装を用意します。そしてさっそうと子供の前に登場します。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;親「ほーら、サンタクロースはいるだろう？」&lt;/p&gt;
&lt;p&gt;子「えー！お父さんでしょー。ニセモノのサンタクロースだよー。」&lt;/p&gt;
&lt;p&gt;親「ニセモノがいるってことは本物がいるってことだよ。」&lt;/p&gt;
&lt;p&gt;子「？」&lt;/p&gt;
&lt;p&gt;親「本物がいなかったら偽者はいないだろ？ニセモノは本物をまねるわけだから。」&lt;/p&gt;
&lt;p&gt;子「うん。」&lt;/p&gt;
&lt;p&gt;親「つまり、本物のサンタクロースが存在しなければ、ニセモノのサンタクロースは存在しないという命題は正しいわけだ。」&lt;/p&gt;
&lt;p&gt;子「うん。」&lt;/p&gt;
&lt;p&gt;親「ということは、この命題の対偶であるニセモノのサンタクロースが存在すれば、本物のサンタクロースが存在するも正しいんだよ。」&lt;/p&gt;
&lt;p&gt;子「なるほどー！そっかー！」&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;　ほーら、これで一件落着ですよ！&lt;/p&gt;
&lt;p&gt;　でも、子供は次にこんな質問をしてくるかもしれません。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;子「サンタクロースがいるんだったら、どうして僕にプレゼントを持ってこないの？」&lt;/p&gt;
&lt;p&gt;親「サンタクロースは忙しいからね。子供はいっぱいいるし難しいのさ。」&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;　これは迂闊な返答です。きっと子供はこう言うでしょう。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;子「えー！じゃーさ、例えば子供の数をnとするよ。n=1のときは余裕でプレゼントを持ってこれるよね？」&lt;/p&gt;
&lt;p&gt;親「ふむ。」&lt;/p&gt;
&lt;p&gt;子「n=kのときに、サンタクロースはプレゼントを渡すことが出来るとしたら、n=k+1のときも渡すことができるはずだよ。1人ぐらい子供が増えてもたいしたことないもん！」&lt;/p&gt;
&lt;p&gt;親「うっ…」&lt;/p&gt;
&lt;p&gt;子「数学的帰納法によるとnは任意の自然数で成立するから、サンタクロースはみんなにプレゼントをもってくるはずだよ！」&lt;/p&gt;
&lt;p&gt;親「ぐふっ…」&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;　お後がよろしいようで。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;※あくまでネタです。学問的に突っ込むのは無粋ですので御遠慮ください。&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:labs.mengurume.net,2010-11-21://archives/c14n20101121/</id>
    <title type="html">e-Govで電子申請（一括申請）するためのプログラム作成に関する覚書</title>
    <published>2010-11-20T15:00:00Z</published>
    <updated>2010-11-20T15:00:00Z</updated>
    <link rel="alternate" href="http://labs.mengurume.net//archives/c14n20101121/"/>
    <content type="html">&lt;p&gt;e-GovユーザーのTakashi.Uです。&lt;/p&gt;
&lt;p&gt;今年からe-Gov（電子申請）で一括申請が始まりました。複数の届出をまとめて一括で届けることが出来るという便利なサービスですが、通常の電子申請のようにブラウザ上で操作して行うのではなく、対応アプリ（様々専門アプリがあるようです）を使用しなければならず、若干残念なことになっています。&lt;/p&gt;

&lt;p&gt;この度、残念な状況を打破すべく重い腰を上げてe-Gov一括申請をすることにしました。島根県民・松江市民なので当然にRubyを使ってということになります。躓いたり、理解するのに時間がかかったりしたところがあったので、覚書としてこのエントリーに記したいと思います。&lt;/p&gt;

&lt;p&gt;『仕様公開 | e-Gov電子申請システム一括申請について』&lt;br /&gt;
&lt;a href="http://shinsei.e-gov.go.jp/menu/interface/"&gt;http://shinsei.e-gov.go.jp/menu/interface/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;仕様や電子証明書のサンプルが配布されています。こちらの仕様書に基づいてプログラムを作成します。&lt;/p&gt;
&lt;p&gt;で、肝心な覚書ですが、次のことを列挙しておきたいと思います。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RubyとOpenSSLでの署名について&lt;/li&gt;
&lt;li&gt;XMLの正規化について&lt;/li&gt;
&lt;/ul&gt;

&lt;p style="font-weight:700;"&gt;RubyとOpenSSLでの署名について&lt;/p&gt;

&lt;p&gt;Ruby(1.9.2)とOpenSSLで電子署名をするわけですが、opensslライブラリを使用するとすごく簡単に署名できます。ちなみにWindowsなのでRuby Installerを使わせていただいています。簡単に導入できてすごく良いです！&lt;/p&gt;

&lt;p&gt;Ruby Installer&lt;br /&gt;
&lt;a href="http://rubyforge.org/projects/rubyinstaller/"&gt;http://rubyforge.org/projects/rubyinstaller/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;署名のコードですがこんな感じです。&lt;/p&gt;

&lt;pre class="brush: ruby"&gt;
require 'openssl'
require 'base64'

digester = OpenSSL::Digest::SHA1.new
pkcs12 = OpenSSL::PKCS12.new(File.open(key),password)
sig = Base64.encode64(pkcs12.key.sign(digester,str))
&lt;/pre&gt;

&lt;p&gt;こんな感じであっさりと署名ができちゃいます。簡単ですね。&lt;/p&gt;
&lt;p&gt;変数は次のものを想定しています。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;key → .p12ファイル&lt;/li&gt;
  &lt;li&gt;password → 上記鍵のパスワード&lt;/li&gt;
  &lt;li&gt;str → 署名したい文字列&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;仕様書にあるX509Certificate要素は次のコードで求めることができます。&lt;/p&gt;

&lt;pre class="brush: ruby"&gt;
cer = Base64.encode64(pkcs12.certificate.to_der)
&lt;/pre&gt;

&lt;p&gt;これまた簡単です。&lt;/p&gt;

&lt;p style="font-weight:700;"&gt;XMLの正規化について&lt;/p&gt;

&lt;p&gt;XMLの正規化を行う必要があります。XMLの正規化に関することは検索すればたくさん出てきます。&lt;/p&gt;

&lt;p&gt;今回は、XMLを自分でイチから作らなければならなかったことと、RubyではXML正規化ライブラリを見つけられなかったことから、自分で作るXMLを正規化された状態にしておくという方針でいきました。&lt;/p&gt;

&lt;p&gt;その際、特に注意しなければならなかったこと（嵌ったこと）は名前空間が継承されることです。不勉強なので知りませんでした。&lt;/p&gt;

&lt;p&gt;【参考】Place Under Glacier: canonicalization and xml:id&lt;br /&gt;
&lt;a href="http://veritas-vos-liberabit.com/mt/archives/2004/06/canonicalizatio.html"&gt;http://veritas-vos-liberabit.com/mt/archives/2004/06/canonicalizatio.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;具体的には、次のXML（一部）があったとします。&lt;/p&gt;

&lt;pre class="brush: xml"&gt;
&amp;lt;Signature xmlns="http://www.w3.org/…" Id="…"&amp;gt;
  &amp;lt;SignedInfo&amp;gt;
    …
&lt;/pre&gt;

&lt;p&gt;e-Govの仕様書によれば、署名対象はSignedInfoエレメントになります。しかし、そのまま署名してはダメです。名前空間の部分を継承しなければなりません。（もちろん、他の正規化要件も満たす必要があります。）&lt;/p&gt;

&lt;p&gt;というわけで、署名対象のSignedInfoエレメントは次のようになります。&lt;/p&gt;

&lt;pre class="brush: xml"&gt;
&amp;lt;SignedInfo xmlns="http://www.w3.org/…"&amp;gt;
  …
&lt;/pre&gt;

&lt;p&gt;これで、e-Govのシステムのチェックを通すことが出来ました。めでたしめでたし。&lt;/p&gt;</content>
  </entry>
</feed>

