57. CompTIA Security+

CompTIA Security+に合格しました。(841/900 – 92%)

動機
CISSP合格後、CompTIAの資格を何かとってみようと思ったから。

事前知識
CISSP、テクニカルエンジニア(NW,SC,DB)

学習教材

ある程度の事前知識がある方にはお勧めしません。
掲載されている問題は単語レベルでの確認事項です。実際の問題のニュアンスや難易度とは大きく異なります。
また、問われている深さは平易なもので、「試験の対策」としてはほぼほぼ用いれないという印象でした。
加えて、解説が極めて易しく、こちらも、問題の難易度に比べると不足するかなという印象でした。
ただし、本書の役割は教科書との併用を想定されている(本試験の対策ではない)ということでしたので、初学者が内容を確認進めるのには良いかもしれません。

学習期間
2時間くらい。CISSP合格直後だった、かつ、Retakeキャンペーンをやっていたので、落ちたらもう一回受ければいいやくらいで受験しました。

試験について
セキュリティちょっとやっているから、くらいで受けるとたぶん落ちる。
過大評価するわけではなく、ミニCISSPという印象。IPAのセキュリティとか「だけ」勉強しているとさくっと落ちるかもしれない。
例えばだけど、CCTV, 法的証拠, BIAみたいな単語はあまりIPA試験では問われないはずで、ボーダー得点率が8割っていうことを考えるとかなりきわどいはず。
問題としてはCISSPより一、二枚「薄いところ」を問われている印象でより、キーワードレベルに近かった印象。

55. CISSP

CISSPに合格しました。(本BLOG記載時点ではまだ登録処理は完了していません)
2010年ごろからあまり日本語の記事がないので、参考になればと思い、ポストします。

動機
元々セキュリティを専攻としており、記載された内容に興味があったから。
また、合格時は会社から試験代金が給付されるから。(受験当時8万円程度だったので、これがないと趣味で受けるのは辛いですね。。。)

事前知識
技術要素: テクニカルエンジニア(NW, DB, SC)
プロマネ要素: PMP

学習教材

CISSP認定試験 公式ガイドブック

日本で唯一の学習書籍。ただし、2005年発刊ということで古さが否めない。しかし、日本語で受験する場合、合った方が良い。理由は、日本語訳はこれに従っているから(受験した限りそういうように感じました)。という安心感があります。また、セキュリティの考え方自身は時代が変わってもあまり変わらないです。古い技術を含め、この本の内容は読み込んでおくのが大切だと思いました。

暗号技術入門 第3版 秘密の国のアリス

暗号はどうしても公式ガイドブックの説明だけだと分かりにくいので、一回読んでおくとよい。CISSPの暗号文やの技術的な必要事項はこれ一冊で十分に学べます。暗号って「なんとなく」分かっていることが多いと思うので、一回読んでおくのをお勧め。あと、周りの人に暗号教えるときにとりあえずこの本貸せばいいと思います:)

CISSP All-In-One(AIO)

試験対策本ではあるんですが、受験後も使えるセキュリティのバイブル的な本。内容に関しては、公式ガイドの細かいところをちゃんと説明してくれている。ただし、一通り学習すると、特に新しいことが書いてあるわけでもない。つまり、「わからないところをちゃんと理解」したり「より正しく理解」するのに大切な本。
この本のサマリーはとてもよくまとまっていたと思う。テスト前に見直した。
あと、Adobe Digital Editionの電子書籍がついてきます。そういう面でもおすすめ。つまり、電子書籍買うなら、本を買うといいよ。

CISSP Practice Questions Exam Cram

イチオシ。ひたすら簡単な4択が1000問並んでいます。が、ポイントを押さえて出題されています。具体的には、この本を読んだ後にAIOを読んでも「特にわからないところがない」ようになっていました。簡単とはいえ、何もCISSPの勉強をしていないと50%くらいしか解けません。そういう意味を含めて、最初に取り組むといい本だと感じました。

学習期間
3週間:土日がほとんど使えない環境だったので、かなり精神的に辛くなりました。土日が使えるならともかく、1か月半くらいの時間をとることをお勧めします。

学習方針
CBKレビューなし、Web問題集なしで勉強しました。まず、公式ガイドブックを通読。全体を読んでの感想は「なんとなくわかる」。が、正直、頭にはあまり入ってこない。暗号技術入門はおおよそ知っている内容が多かったので、会社の休み時間に読んだ。
ポイントがわからないからだな、と思って、Exam Cramを解きにかかる。大体これに1.5週間。各単元100問くらいあるので、1日1.5時間くらいずつ取り組んだ。分からないところは付箋を貼って、解説を読む。単元によっては5割くらいしか正解がない。
この上で、2回目を解きながら、ガイドブックでキーワードを拾う。暗記系はあまり気にせずに覚える。たとえばTCSECがOrangeBookとか。これで、正しくなかった問題=1回目で答えを納得して覚えられなかった問題をAIOか公式ブックでキーワードを拾って勉強した。これで1週間。
のこり3日はAIOを通読一回した。
ということで、基本的には、Exam Cramをつぶすとキーワードとしては拾えた気がする。もっとも、4択x1000問=4000肢なので、当たり前といえば当たり前か…

試験について
PMPにしてもCISSPにしても、「試験が著しく難しい」というコメントをみるが、参考書と形式が違ったり、初見の問題だからだと感じている。ちゃんと、ExamCramを解けば、「わからない言葉はほぼない」ようにはなるはず。ただし、おそらくサーベイ問題と思われる20問くらいが本当に解答が分からない。サーベイ問題かわからないからものすごくストレスになる。
実績からいうと、
60分: 100問解く
10分:お手洗い休憩
60分: 100問解く
10分: お手洗い休憩
20分: 50問解く
20分: お手洗い +ごはん休憩
30分: マーク問題 + 全問題チェック
で3:30くらいで回答を終えた。
採点ボタンを押した後、合格でも、何も表示されないので注意!不合格になったとすごく落胆したら、受かっていた。

手続きについて
まず、PearsonVUEのページからISC2用のアカウントを作って試験申し込みをします。
そうすると、ISC2からメールがあり、ISC2のアカウントが払い出されます。ここがちょっとわかりにくいですね。
後は、PearsonVUEから申し込みをします。
他のPearsonの試験と違って、「予約時から、何らかの費用が発生」します。具体的には、日程変更は5000円、キャンセルは10000円です。他の試験だと、1日前までは何回でも予定変更できたりしますね。
試験に受かったら、合格メール来る前にエンドーズメントの書類は準備できます。ちょっといくつかの情報が錯そうしていますが、推薦者がいる場合、レジュメは不要です。

弁理士の学習書籍

購入した本についてここに書いていきます。

入門書

知っておきたい特許法(おすすめ度: ★★★★★)

間違いなく買いの一冊。初学者であっても、経験者であっても楽しく読めると思います。
この本の一番良いところは、法改正に追従しているところ。
ゼミナール意匠法

著作権法入門

まとめ本

特許法・実用新案法(第3版) (【弁理士試験論文マスターノート】)

意匠法(第2版) (【弁理士試験論文マスターノート】) 単

商標法(第2版) (弁理士試験論文マスターノート )

テーマ別 重要特許判例解説

逐条解説・法令集
工業所有権法(産業財産権法)逐条解説

ないといけない本。特許庁の解釈が記載されており、この本を読み込むことが前提となる。必要になる理由は大きく2つ。
1.この厚さは無駄ではない。弁理士試験自身、すべての条文は把握していることが求められるので、各解釈に一度は目が通しておくべきである。かつ、2、3割に関してはそれらの解釈を覚えておく必要があるから。
2.弁理士試験自身、この解釈が「基本」となるから。論述で用いる単語などは本来、この本、というより法文から引っ張ってくる必要があるから

論文対策
悪文

 

54.PMP

PMPに合格しました。この試験を受ける人は詳細な情報を求めていると思うので、少し詳しく書きます。(適度に加筆していきます)

動機
これまで少人数で動くタスクが多かったのですが、比較的大きめなプロジェクトでの業務に携わるようになったため。また、サブプロジェクト相当のリーダーとしてマネジメントを意識すべきだと思ったため。
あと、IPA系の試験でPMBOKというキーワードは良く見ていたし、一回勉強しておくかと思ったから。

35PDUの教材
35PDUのために翔泳社の教材を使いました。


本当は研修に行きたかったのですが、1週間丸々会社を空けるのが難しかったので、通信教育で35PDUを取得。

教材についてアドバイス
自分の経験と他の人の受験体験記を見る限り、なんでも良いです。これらの感想をまとめると
– 35PDUの研修「だけ」では試験対策にならない
– なんらかまとめの書籍を買って勉強すべき
なためです。

スケジュール
諸般の事情でかなりの強行スケジュールでした。
11月: 受験しようと考えて教材を考える。
12/1: 教材到着
12/13:教材終了。平日1,2H、土日は3,4Hくらいの勉強時間。何気に1000問の問題全てを解くのは時間がかかる。講義を見るのに40H, 問題解くのに12Hくらいだったとおもう。
12/14: 3月に受験しようとしていたのだけども、2016/1/11から試験が若干変更になるという情報を見た。急いで受験することに。
12/15: 申込書をがんばって書く。職務経歴を書くのが結構大変。
12/16: 若干徹夜しつつ、一通り書いた。Auditにならなければ証明書はいらないので申請しようと思った…が申請には35PDUの「コース名」などが必要。挫折。
12/17: 年末で空いていたからか?35PDUの証明書をもらえた!(通常2-3weeksと書いてあるので時期とかいろいろによると思います。)急いで申請。
12/23 03:00 : Acceptしたから早くお金払ってね。といわれる。お金を払おうとして、会員になっていないことを思い出した。すぐに会員申請。会員になるのには時間がかかるかと思ったが、即座に会員価格でPMP試験の費用を支払えた。
費用を払った=クレジットカード情報をいれた瞬間に Eligibility IDが届く。Auditを免れた!よかった。
1/7: 受験

学習の方針と教材
以下にいろいろ書きますが、試験対策の結論だけ言うと、パーフェクトマスターと虎の巻を購入して全部の問題が90%正解すれば合格ラインに立てます。
虎の巻だけでいいという書き込みをみますが、パーフェクトマスターの問題も悪くないし、購入したほうがbetter。

まず、学習範囲はPMBOK全体となりますが、これはA4 500ページくらいの教科書で、「すべてが範囲」なので、対策が練りづらいです。しかし、完全な暗記要素を問われることは少ないです。虎の巻の問題を回答まで読んで理解すれば本番の問題で「まったくわからない」となることはないと思います。

まず、問題集に最初に取り組むときは「何を学べばいいか」「メリハリつければいいか」が分からないはずです。勉強の仕方については、個人的に以下のステップが適切だと思いました。
0. 35PDUを勉強します
1. 虎の巻の巻末「以外」を全て解きます。この時、解説を読んでください。わからないキーワードがたくさんあるはずです。
2. ここでも虎の巻の問題全てとPMPパーフェクトマスターの問題全てを解いてください。この際、回答を熟読しなくていい、です。
3. 虎の巻のテキスト部分を読み始めます。これで、内容が頭に少し入ってくるはず。
4. 虎の巻の問題全てとPMPパーフェクトマスターの問題全てを解いて解説を読みます。この際、「選んでない選択肢が何か」を含め、調べてください。分からない言葉はPMBOKを検索します。
5. 虎の巻の「試験の勘所」は直前に暗記しておきましょう。よくできています。

PMP試験合格虎の巻 第5版対応版 (PMP試験対策)

必須。日本語の市販の書籍でもっとも問題集も適切だし、まとめ部分もよくまとまっている。テキスト部分は若干まとめ過ぎな部分もあるが、終わってからみるとよくまとまっていると思う。
特に、選択肢のその他がなぜ間違っているかについてもよく書かれているところ。

PMPパーフェクトマスター PMBOK第5版対応

ちょっと立ち位置が難しくて、買った方がいいけどなにが良かったかを上手く表現できない本。内容は特に特殊なことは書いていなくて、虎の巻よりは細かく、PMBOKマニュアルよりは荒い。問題は解説が不親切。
裏を返すと、ちょっと勉強になれた頃には軽く読める内容で、解説が不親切なので自分で調べれば力がつく。

PMBOKガイド・マニュアル―第5版対応

会社にあったので勉強中読ませてもらっていた。わりとおすすめ。まず、内容としてはパーフェクトマスターのようにまとめ形式になっている。かつ、各々のプロセスのInput/Outputが図にまとめられている。
内容としては虎の巻・PMBOKで触れられている部分ばかりであまり新しい内容はない、というのが正直なところ。同じ境遇(会社にある)なら使っても良いが、良いお値段がするので自分では買わなくていいと思う。

PMBOKガイド

会員になるとPDFがもらえる。書式を買うか、PDFでいいか、という悩みがあると思うが、買わなくていい。ただし、PMBOKをちゃんとINPUTしたいなら、買った方が良い。
まず、PMBOKガイドは合った方がよい。何故なら、問題集においても「テキスト部分にそんな単語でてきていないのに選択肢に含まれている」問題がある。これらを引く際にはPMBOKが必要になる。
次に、PDFはPDFで必須だ。何故なら、上記の例の際は「検索」がしたいからである。
購入する場合は、読み物としたいだろう。ただし、経験上、「一回全体像が分かってからじゃないと読んでもよくわかない」かった。なので、80時間くらい勉強した後に読むと「なるほど!」と思うところがあるのだが、最初から読んでも全体像がよくわからないのではないかな。。。

体験記の「問題がシンプル」という指摘について
PMPの受験情報をみていると、「問題集は本番より簡単」や「基本すぎて役に立たない」というような内容を散見します。しかし、受験した経験からすると、いくつかの観点から、問題集は有効です。
1. 決して重箱の隅をつつく問題ではない
2. 「本番は問題文長い」というがそんなことはない
3. 問題集の方が選択肢がややこしい(虎の巻と比べて)
おそらく、体験記の記載をしている人達は、「分からない問題は難しい」と判断していると思います。
問題集は十分本番の対策になります。自信を持ってください。

時間配分
CBTなので「配分」はできないので、自分の経験では、
60分経過時: 90問120分経過時: 170問
140分経過時: 200問終わり。トイレ休憩
150分経過時: チェック40問を見直し開始
180分経過時: 見直し終わり。終了。

試験時のアドバイス
1つだけ重要なアドバイスがあります。「チェックを間違えるな」
まず、この試験は日本語と英語の上下分割併記です。ただし、英語を下までスクロールしないとNextが押せません。かつ、「問題文をクリックでも選択される」ようになっています。日本語をみて、英語を選択する際は、絶対に選択肢を間違えないようにしましょう。
実際、見直し中に合ったのが、
1. 多分Next押すときに一番下のDをおしちゃったもの
2. 日本語では答えはAなのにBを選択していたもの
がレビュー中に見つかりました。
できれば、選択肢はざっと見直した方がいいと思います。

「日本語」の試験である
一言で言うと、「ちゃんと読め」です。試験自身は英語なので、ここでは「文章を読む力」の試験と言いたいです。例を挙げます。
Q: プロトタイプ実装をしており、最終段階にあり完成を終えた。社内の進捗会議で必要なことはなにか?
という問題があり
A1: 終わったことを報告する
A2: 顧客の要件を満たしていると確認するためデモの日程を取り付ける
この場合、スコープ妥当確認をしたくなるので、A2と言いたいところですが、問題文の通り、「社内の進捗会議」です。A1が正しいです。
のような。焦っていると読み飛ばすので要注意!

四時間は長いか?
長いです。が、IPA高度区分や技術士を受けている人はあまり長く感じないかもしれません。
体験記をみると、あまり試験を受けていない人は非常に長いと感じており、PMを持っているなど、2時間クラスの試験を受けたことある人は「長いね」くらいの感想だと思います。

53.お好み焼き検定 初級

動機
ついつい見つけてしまったので。

申し込み
実は、2年前から申し込もうと思っていたのだけど、「いつから申し込みを開始しているのか分からない」ので、2年連続で申し込み忘れていました。
結論から言うと10月くらいから公式ページをたどって応募できるみたい。

勉強・方法・時間
申し込むと要点集が送られてきます。A4実質10ページくらいなので、正直、前日に1Hくらい勉強で大丈夫。中身も理解できない内容というのは全くないはず。
お好み焼きのお店が多いのどこ?お好み焼き粉の小麦粉の種類は?中農ソースとはなに?のような、身近なライトな話題がたくさんあります。

難易度: ☆
要点集を1,2時間読んでください。

雑記
この検定にちょっとでも興味あれば是非是非受験してほしい!
理由としては、1.ちゃんとしたお好み焼きの焼き方を知れる2.お土産でソースとお好み焼き粉をもらえる ので、家に帰って、ついつい作りたくなります!多分2、3回は。お好み焼きって、普段から作らないと、あまり家で作るぞー!ってならないと思うので、コミュニケーションの活性にとってもおすすめです!
あと、小さい頃から実家のお好み焼きは小麦粉だけ作ったりしていたのですが、お好み焼き粉ってだしが入っているんですね。だからお店のお好み焼き風味あったのかー。とかとか。
一人暮らしなどをして、料理を決定する立場にあり、ついこのページを見てしまった方は是非是非受けてみるといいと思います!

51. マイナンバー保護オフィサー

2015/10に受験しました。

動機
マイナンバーの理解を深めたかった。書店で問題集を見つけて。第一回目ということで安易な問題が出るかなと思ったから。

前提知識
全くなし。

申請/受験
「きんざい」への申し込み。Webに従えばよい。特に留意することはない。
受験はベルサール新宿だった。お昼過ぎからの受験であったので、近くのマックで時間をつぶした。

免除
なし

勉強方法
結論をいうと、テキストは不要。

で十分。これ以上でない。

勉強時間
6H(前日4H + 当日2H)  + たくさん(後日)
問題形式から逆算して難易度を推定したのですが、
○× + 3択、ということで、難しいことを問う試験ではなく、
また、きんざいの性質から、「基礎知識の確認」であり、「みんなに受けさせる試験」だと思ったので、
問題集だけに取り組んだ。
内容をみるに、極めて安易であったため、上記の勉強量。

ただ、受験後、面白かったので自分でコンメンタールなどをかなり読み込んだ。(後述)

難易度
★☆☆☆☆:1
○×+三択であり、合格点、実績の平均点からして、極めて安易。

アドバイス
特にないです。問題集を眺めていると受かる。というレベルの試験。

平均点87.20(合格ボーダー60点)ということで、合格率どれだけ高かったのか気になる…

補足: 各種公式資料は以下の通り
個人情報の保護に関する法律案《逐条解説》
https://staff.aist.go.jp/takagi.hiromitsu/misc/jpappi/

不正競争防止法概要
http://www.meti.go.jp/policy/economy/chizai/chiteki/pdf/2014gaiyou.pdf

著作権テキスト
http://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/pdf/h27_text.pdf

補足: 間違えたところのメモ
特定個人情報保護評価について
民間事業者は特定個人情報保護評価の「義務を負わない」

§27の対象によれば、

行政機関の長等

が対象となる。

行政機関の長等については

§2-14より、行政機関の長等(行政機関の長、地方公共団体の機関、独立行政法人等、地方独立行政法人(地方独立行政法人法、地方公共団体情報システム機構)

等ということらしい。

現行では、民間事業者は評価の義務を負うものではない。

弁護士会からの情報提供について
民間事業者は弁護士会からの問い合わせに対して「照会内容を問わず」特定個人情報を提供してはいけない。

§19-12: 訴訟手続その他の裁判所における手続、裁判の執行、刑事事件の捜査というケースの場合かどうかが論点となる。

http://www.caa.go.jp/planning/kojin/gimon-kaitou.html#q5-4
などをみると一見、

弁護士会から、振り込め詐欺に関連し、銀行に対して、弁護士法に基づく所要の弁護士会照会があった場合

のように、「弁護士法に基づく照会」であればいいように思えるが、「内容による」ということか。
smile絵文字
訴訟、刑事事件などの調査等の場合のみ)

※パブコメかガイドラインに記載があるらしいがみつけられなかった

保管
本人からの同意があっても番号法で定められた場合以外の「特定個人情報の保管は許されない」

理解ミス。本人からの同意があってもダメなんですね。

§20によれば何人も、前条各号のいずれかに該当する場合を除き、特定個人情報(他
人の個人番号を含むものに限る。)を収集し、又は保管してはならない

提供制限
民間事業者が本人に特定情報を提供することは、提供制限の対象と「なる」

これは理解が追いついていなくて、なぜ、「なる」のかをちゃんと言えない。
http://www.ppc.go.jp/legal/policy/answer/

Q5-7: 本人の開示の求めに応じて、本人に特定個人情報を提供すること
A5-7: 本人からの求めに応じて任意に特定個人情報の開示を行う場合には、特定個人情報の提供が認められるもの

結局、本人からの要求に基づいても、特定個人情報の検索が必要なので、利用業務等となる。ということ。。。かな?

WindowsのSendkeysメソッドにおけるエスケープ

WSH等で用いられるSendkeysメソッドは「+^%~」の4文字を送出する場合は”{}”で囲んでエスケープする必要がある。
「{}」の2文字に関してはエスケープに用いられるキーワードなので、これら自身を{}で囲む。
すなわち、”{}”を送出したい場合は、”{{}{}}”を送る。また、”():”の3文字に関してもMSDNによればエスケープが推奨されているのでエスケープする。

String_SendBuffer = Regex.Replace(String_SendBuffer,
“(?<escapechar>[{}+^%~():])”,
“{${escapechar}}”);

 

Note:
(?<name>)は名前付きの引用で、${name}で呼び出せるのだけれど、{${name}}で{\1}相当のことができることに驚き。別のところではまりそうな気がする。
気持ちとしては、\{${name}\}だった。

1行貼り付けアプリケーション作成のTIPS

  • この記事は何か:

VC#で最近書いたコードの特別なTIPSをまとめます。

実装物は別途公開予定です。

  • 背景:

業務や自宅のオペレーションで、決まった作業を決まった手順で行いたいことが多々あります。たとえば、私は、自分のメモの一つである「PukiWikiのインストール手順」として、

cd wiki
chmod 777 attach backup cache counter diff trackback wiki
chmod 755 image image/face lib plugin skin
chmod 666 cache/* wiki/*

のようなコマンド列を用意しています。これを参照してコマンドを入力する際に「Windowsからオペレーション」することが主となるのですが、この場合は、「Putty」や「TeraTerm」を介してアクセスします。

これらのターミナルソフトには「クリップボートの内容を貼り付ける」という機能があるので、上記のコマンド列を実行する際は以下の手法が考えられます。

  • 1.一気にコピーアンドペースト

 利点:
1つのアクションで実行可能
欠点:
出力に時間がかかったり、入力を待つアプリケーションでは正常に動作しないことがある
入力が一気にターミナル上に吐き出され、対応する出力がどれかわからなくなる
コマンドが正常に実行されたかよくわからない

 

  • 2. 一行ずつコピーアンドペースト

 利点:
上の手法の欠点を解決できる
欠点:
手間がかかる
コピペする範囲を間違える可能性がある
コピーがうまく試行できておらず、前のコマンドをもう一度入力する可能性がある
Web上にコンテンツがある場合など選択範囲を間違えると余計なコマンドまで入力する可能性も..

 

  • やりたいこと:

すでにコマンドセットが用意してある状態から一行ずつPuttyやTeraTermにコマンドを貼り付けたい

 

  • googleを用いた机上検討:

– VB#かVC#がいまどきのWindows開発には適していそうだ
– PuttyはShift + INSでクリップボードの内容を貼り付けられる
– TeraTermはAlt + Vでクリップボードの内容を貼り付けられる
– VC#を使えば、グローバルなキーボードイベントに対してフックをかけることができる -> 他のアプリケーションにFocusがあたっている場合でもそれらを奪ってから通常処理に戻せる
– マウスのイベントフックは少し面倒なようだ
– ターミナルソフトは右クリックでも貼り付けで切るけど面倒そう -> クリックする位置のハンドリングしないといけないので、カーソル位置の移動などが面倒

詳細のTIPSです。

  • キーイベントのグローバルフック方法

今回の目的の達成のためには、ターミナルソフトにフォーカスが当たっている(=オペレーションしている状態)で特定のキーが押下された場合に、そのイベントを検知して、適切なアクションを実施する必要があります。通常、各アプリケーションは自分のアプリケーションにフォーカスがあたっている時のみしか、それらのイベントを検知できません。

そのため、WindowsのシステムイベントにHookをかける必要があります。これらは、.NET Framework内に関数が用意されていないため、Win32APIであるSetWindowsHookExを用いて、キーボードのHookのイベントのハンドラを指定する必要があります。

VC#におけるキーイベントのフックに関してはHongliangさんの記事が詳しいです。
http://hongliang.seesaa.net/article/7539988.html
このページでは、VC#からフックのイベントハンドラを容易に追加できるクラスが提供されています。

このクラスの利用に当たっては、tomoemonさんの記事に解説があります。
http://d.hatena.ne.jp/tomoemon/20060706/p1

ハンドラの参照関数の引数であるKeyboardHookedEventArgsのKeyCodeメンバに入力文字列が格納されている。また、UpDownメンバにキーが押されたときか離されたときかという情報が格納されている。すなわち、

if (e.UpDown == KeyboardUpDown.Up && e.KeyCode == Keys.F1)

などで、F1キーの離されたイベントを取得できる。

  • グローバルフックのデバッグに関する検討

上記の手法でキーボードの入力をフックできます。しかし、このとおりにコードを書いても、デバッグにおいてフックが動作しません。
azumayaさんのWikiを参考に、
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2F%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%A5%D5%A5%C3%A5%AF
“デバッグオプションでVisual Studio ホスティングプロセスを有効にするというオプションを無効にする”ことでデバッグモードでのフックが有効になります。

  • フックするキーに関する検討

これで、どのキーでも引っ掛けることができるようになると考えられるのですが、留意しなければならないのは、コンビネーションキーです。
Shift, Alt, Ctrlと同時に別のキー入力。というものです。これについては、以下のとおりのようです。 Altキー: イベントが発生したときに、特殊な構造体の中に、押下されているかの情報が格納されている。

Shift, Ctrlキー: イベントが発生したときに、”これらのキー” + “一緒に押しているキー” の2つのイベントがほぼ同時に送られる
Altキーの場合、今回利用するクラスでは、AltDownというメンバがあり、これで押されているかを判定可能です。

Shift, Ctrlの場合は、Owl’s perspectiveに記載されている記事
http://owlsperspective.blogspot.com/2010/07/whkeyboardll.html
などのように、GetAsyncKeyState関数などを使って、同時に特殊なキーが入力されているかを判別する必要があります。
そのため、ファンクションキーなどの使っていない文字列か、Altとのコンビネーションキーを用いるのが簡単そうでした。(= 何も手を加えずに実行できる)

  • ペーストキーの送出に関する検討(その1)

ターミナルソフトにShift+INS, Alt+Vを送出する方法について考えます。まず、一番最初に検討したのはMSDNの解説でした。
http://msdn.microsoft.com/ja-jp/library/ms171548.aspx
によれば、Win32APIをもちいらずとも、.NET Frameworkの機能である、SendKeysを用いることで、

Windows フォームでは、SendKeys クラスを使用してキーストロークをアクティブなアプリケーションに送ることもできます。

とのことです。
このクラスに関する解説は、
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.sendkeys.aspx
にあり、

 国際対応のアプリケーションでは、Send の使用は避けてください。

という記載から、SendWaitメソッドを利用しなければならないことがわかりました。これらを見れば、

 SendKeys.SendWait(“^V”);       //Ctrl-V
SendKeys.SendWait(“%V”);       //Alt-V
SendKeys.SendWait(“+{INSERT}”);//Shift-INSERT

で送出できることがわかります。実際に、Puttyについて、Shift-INSERTが送出できました : )

  • ペーストキーの送出に関する検討(その2)

ところが、TeraTermについて再現率100%で、

 SendKeys.SendWait(“%V”);       //Alt-V

を用いても、送出したイベントが処理されません。

代わりの方法を検討し、キーボードのイベントを発生させるWin32APIとして、keybd_event()を用いました。
INASOFTさんのコード: http://www.yoshibaworks.com/ayacy/inasoft/autokeyb/chapter3.html
を参考にして以下のようなコードとしました。

// ALT(164) and V(86)の押下イベントを発生
keybd_event((byte)164, 0, 0, (UIntPtr)0);
keybd_event((byte)86, 0, 0, (UIntPtr)0);
// DOWN -> UPの待機イベント
System.Threading.Thread.Sleep(20);
// それらの開放メッセージを発生
keybd_event((byte)164, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);
keybd_event((byte)86, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);

押下イベントを発生させてから、Thread.Sleepで20ms待ってから、KEYUPイベントを発生させているのですが、これが肝のようで、TeraTermではこれをいれないとペーストができませんでした。対してPuttyは、

// Shift(160) and INS(45)の押下, KEYUPイベントを発生
keybd_event((byte)160, 0, 0, (UIntPtr)0);
keybd_event((byte)45, 0, 0, (UIntPtr)0);
keybd_event((byte)160, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);
keybd_event((byte)45, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);

としても、ペーストができたのですが、、、
以上の結果だけを見ると、

Teratermへは、キーボードの押下イベント送出後、少し待ってからKEYUPイベントを送らなければならない

ようです。(実際の原因やTeraTermの仕様は不明です。)

  • まとめ

VC#を用いると、DLLなどを特に用意せずとも、キーボード入力のグローバルフック及び、他ウィンドウに関するイベント送出を実現することができます。ポイントとしては、グローバルフックを行った際には、”Visual Studio ホスティングプロセスを有効”をOFFにすることと、TeraTermではなぜか、SendKeys送出では貼り付けが出来なかったため、keybd_eventとThread.Sleepを用いて、押してから話すまでのSleepをかけることでこれを解決しました。

文章用のIPv4/v6アドレスとAS番号

Web文献や論文などで,IPアドレスの例を記述しなければならない場面があります.
このような場合,次のような空間を使うことが推奨されています.
次の通りです。

IPv4アドレス: 192.0.2.0/24
IPv6アドレス: 2001:DB8::/32
2バイトAS:64496 – 64511
4バイトAS:65536 – 65551

詳細は以下の通り。

  •  IPv4 アドレスブロック

RFC3330 – Special-Use IPv4 Addresses
http://www.rfc-editor.org/rfc/rfc3330.txt

192.0.2.0/24 – This block is assigned as “TEST-NET” for use in
documentation and example code. It is often used in conjunction with
domain names example.com or example.net in vendor and protocol
documentation. Addresses within this block should not appear on the
public Internet.

  •  IPv6 アドレスブロック

RFC3849 – IPv6 Address Prefix Reserved for Documentation
http://www.rfc-editor.org/rfc/rfc3849.txt

The document describes the use of the IPv6
address prefix 2001:DB8::/32 as a reserved prefix for use in
documentation.

  •  AS番号

RFC5398 – Autonomous System (AS) Number Reservation for Documentation Use
http://www.rfc-editor.org/rfc/rfc5398.txt

IANA has reserved a contiguous block of 16 Autonomous System numbers
from the unallocated number range within the “16-bit” number set for
documentation purposes, namely 64496 – 64511, and a contiguous block
of 16 Autonomous System numbers from the “32-bit” number set for
documentation, namely 65536 – 65551.

2byte AS:64496 – 64511
4byte AS:65536 – 65551
参考: http://www.iana.org/assignments/as-numbers/

Hello World.

少し前からBlogをつけ始めようと思っていました。その場としてのWordPress.comです。
以前から文章を投稿できるいくつかのWebサービスを使っていますが、それらの多くはSNSと呼ばれているもので、記録を蓄積する機能として、あるいは、ユーザがそれらの記事を読むのには場が不適切であると感じていました。

どういった形でPublishしていくか、どのような記事を、どのような頻度で更新していくか、という部分を特に定めてアカウントを作ったわけではないのですが、最近、文章としてモノをまとめることも以前に比べて少なくなってしまったため、リハビリを兼ねて。