miauのブログ https://miau.hatenablog.com/ はてなダイアリー「miauの避難所」をはてなブログに移行しました。 https://zenn.dev/miau に移行しようと考え中 http://blogs.law.harvard.edu/tech/rss Hatena::Blog ScanSnap 内部の埃は静電気で飛ばせる(こともある) https://miau.hatenablog.com/entry/20161103/1478172209 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> の読み取り部のガラス裏面に付着した埃はやっかいなものですが、運良くこれを静電気で飛ばすことができましたので、そのお話。<br /> <br /> </p> <div class="section"> <h4>問題</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> でスキャンする際、読み取り部に埃があると縦線が入ってしまいます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20161103200220" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20161103/20161103200220_120.jpg" alt="f:id:miau:20161103200220j:image:medium" title="f:id:miau:20161103200220j:image:medium" class="hatena-fotolife" itemprop="image"></a></span><br /> ↑今回の症状。黒ベタの箇所に緑の線が入ってしまっています。</p><p>通常は読み取り部のガラスを拭けば解消するのですが、今回は何かの拍子に読み取り部のガラスの内側に埃が入ってしまったようで、いくら拭いても縦線が解消しませんでした。</p><p>よくよくガラスを見ると、白い粒が見えるような・・・。ということで顕微鏡で拡大して見てみました。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20161103200902" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20161103/20161103200902_120.jpg" alt="f:id:miau:20161103200902j:image:medium" title="f:id:miau:20161103200902j:image:medium" class="hatena-fotolife" itemprop="image"></a></span><br /> ↑肉眼では粒にしか見えませんでしたが、L 字形になっており、わりとしっかりと付着してしまっていそうです。</p> </div> <div class="section"> <h4>正攻法は?</h4> <p>こういった場合には分解清掃が必要、ということになっています。</p><p>以前も似た症状でサポートセンターに修理依頼したことがあるのですが、その場合の金額は &yen;27,324 とかなり高額(※私が使ってる業務用の fi-7160 の場合)でした。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%AF%A5%AB%A5%E1%A5%E9">ビックカメラ</a>の長期保証に入っていたのでその時は自腹は切らなくてよかったのですが、その後スキャナを机から落としてしまったことがあり、今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%AF%A5%AB%A5%E1%A5%E9">ビックカメラ</a>の保証は受けられなそうです。</p><p>そんなわけで S1500 なんかは自分で分解してしまう人もいるんですが、fi-7160 の分解の仕方はググっても出てきませんでしたし、機種によっては粘着シートが付いていたりで分解が面倒そうなので、分解しなくていい方法を模索することに。</p> </div> <div class="section"> <h4>試したこと(1) ひたすら揺らす→効果なし</h4> <p>点滴石を穿つとも言うし、ひたすら揺らしたら埃も取れるのでは?</p><p>ということで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>のバイブレーションを動かし続けるあやしげなアプリを導入。振動する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>を埃が付着しているところに当てて半日くらい放置してみたのですが、効果はありませんでした。</p> </div> <div class="section"> <h4>試したこと(2) 静電気で飛ばす→成功</h4> <p>これまでも埃が静電気で読み取り面に付着してしまうことがあったので、今回も静電気のせいで付着しているのでは?</p><p>ということで、まずは調べ物。</p> <ul> <li><a href="https://ja.wikipedia.org/wiki/%E6%91%A9%E6%93%A6%E5%B8%AF%E9%9B%BB">&#x6469;&#x64E6;&#x5E2F;&#x96FB; - Wikipedia</a></li> </ul><p>によると、帯電列というものがあって、物質によって正に帯電しやすかったり負に帯電しやすかったりするらしい。ガラスは正に帯電しやすいらしいので、付着しているのは負に帯電しやすい何か?だとすると負に帯電させたものを近付ければガラス面から離れてくれるのかな?そして</p> <ul> <li><a href="http://www.sci-museum.jp/files/pdf/study/research/2011/pb21_023-024.pdf">&#x6B63;&#x9006;&#x96FB;&#x6C17;&#x30AF;&#x30E9;&#x30B2;&#x306B;&#x3064;&#x3044;&#x3066;&#xFF08;&#xFF12;&#xFF09;</a>(PDF)</li> </ul><p>を見ると、テフロンは負に帯電しやすいので使い勝手がいいとのこと。</p><p>ということで、とりあえずモノタロウで <a href="https://www.monotaro.com/p/4144/9161/">201-595 &#x30B9;&#x30ED;&#x30C3;&#x30C8;&#x30EB;&#x30C6;&#x30D5;&#x30ED;&#x30F3;&#x30B7;&#x30FC;&#x30C8; 1&#x500B; KIJIMA(&#x30AD;&#x30B8;&#x30DE;)</a> と、擦り合わせるための <a href="https://www.monotaro.com/p/4554/7205/">1&times;200&times;200 &#x30A2;&#x30AF;&#x30EA;&#x30EB;&#x677F;(&#x900F;&#x660E;) 1&#x679A; &#x30CE;&#x30FC;&#x30D6;&#x30E9;&#x30F3;&#x30C9;</a> を購入。テフロンシート(&yen;539)+アクリル板(&yen;700)+配送費(&yen;500)−クーポン値引(&yen;1,000)で合計 &yen;699。</p><p>届いてから気付いたけど、テフロンシートが予想よりも小さかった(69mm x 96mm くらい)。こういう実験をやりたいのなら、もっと大きいもののほうがいいかも。</p><p>とりあえずアクリル板とテフロンシートを擦ってみて、試しにアクリル板を目標に近付けてみると・・・あっさり埃が飛んで行きました。ということは埃は正に帯電していたということ・・・?よくわからないのですが、スキャンすると縦線は出なくなっているし、運良く問題が解消してくれました。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%B2%D9">電荷</a>によっては逆に埃を集めてくる可能性もあったと思うんですが、ガラス面の埃が問題になっている人(センサー側に埃あるような場合はダメだと思う)で分解する覚悟があるような人は試してみてもいいかもしれません。たぶん下敷きとキッチンペーパーあたりでも同じことはできるんじゃないかと思うので。</p> </div> <div class="section"> <h4>試さなかったこと</h4> <p>強力なレーザーとレンズを使ってピンポイントで焼けないか?とも思ったのですが、センサー部にレーザーが当たってしまうと大変なのでやめました。(大変なことになってしまった例→<a href="http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14163702494">iPhone&#x306E;&#x30AB;&#x30E1;&#x30E9;&#x306B;&#x30EC;&#x30FC;&#x30B6;&#x30FC;&#x30DD;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x3092;&#x5F53;&#x3066;&#x305F;&#x3089;&#x30AB;&#x30E1;&#x30E9;&#x3067;&#x64AE;&#x5F71;&#x3059;&#x308B;&#x3068;&#x304D;... - Yahoo!&#x77E5;&#x6075;&#x888B;</a>)</p> </div> Thu, 03 Nov 2016 20:23:29 +0900 hatenablog://entry/17680117126982584666 自炊 ITサービスマネージャ(試験) https://miau.hatenablog.com/entry/20161016/1476620876 <p>二年ぶりにITサービスマネージャを受験してきましたので、例によって色々メモです。<br /> <br /> </p> <div class="section"> <h4>今回の対策本など</h4> <p>受験する度に本を買ってるので色んな本がたまってきた。10 冊くらい参照してる気がするけど、今回買ったのだけ紹介。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4863541708/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51j4PZ--6WL._SL160_.jpg" class="hatena-asin-detail-image" alt="新人ガール ITIL使って業務プロセス改善します!" title="新人ガール ITIL使って業務プロセス改善します!"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4863541708/hatena-blog-22/">新人ガール ITIL使って業務プロセス改善します!</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 沢渡あまね</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> シーアンドアール研究所</li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/04/17</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4863541708/hatena-blog-22" target="_blank">この商品を含むブログ (3件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4863541899/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51FRVVHndML._SL160_.jpg" class="hatena-asin-detail-image" alt="新米主任 ITIL使ってチーム改善します!" title="新米主任 ITIL使ってチーム改善します!"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4863541899/hatena-blog-22/">新米主任 ITIL使ってチーム改善します!</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 沢渡あまね</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> シーアンドアール研究所</li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/11/26</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4863541899/hatena-blog-22" target="_blank">この商品を含むブログ (3件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div><a class="keyword" href="http://d.hatena.ne.jp/keyword/ITIL">ITIL</a>の復習と論文ネタに使えたりしないかなという期待で。前者は広く浅く入門っぽい内容。後者はサービスデスクの雰囲気がわかっていいかも。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4865750630/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51Kt97gnWuL._SL160_.jpg" class="hatena-asin-detail-image" alt="2016 ITサービスマネージャ「専門知識+午後問題」の重点対策 (重点対策シリーズ)" title="2016 ITサービスマネージャ「専門知識+午後問題」の重点対策 (重点対策シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4865750630/hatena-blog-22/">2016 ITサービスマネージャ「専門知識+午後問題」の重点対策 (重点対策シリーズ)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 平田賀一</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> 株式会社<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2016/05/02</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4865750630/hatena-blog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>2013年のを持ってるけど、午後Iのよくある出題みたいなのがまとまっててわりとよかったので。<br /> 買ってみたけど、午後Iの構成が結構変わってる。重点解説x3、演習問題x12だったところが、重点解説x5+演習問題x7でテーマ毎に整理されている。そして目当てだったコーナーがなくなってた・・・。まあ傾向分析はあるし、これはこれで役に立つかな。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4865750215/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51vB58xRoBL._SL160_.jpg" class="hatena-asin-detail-image" alt="ITサービスマネージャ 合格論文事例集 第4版 (論文事例集シリーズ)" title="ITサービスマネージャ 合格論文事例集 第4版 (論文事例集シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4865750215/hatena-blog-22/">ITサービスマネージャ 合格論文事例集 第4版 (論文事例集シリーズ)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a>教育研究開発部</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/06/10</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4865750215/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>新しいのが出てたので。第3版が2007(H19)〜2011(H23)年の内容だったのに対して、第4版は2009(H21)〜2014(H26)年の内容になってる。時期が重なってる2009(H21)〜2011(H23)年の内容は同じ。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839948607/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51icaYIdq0L._SL160_.jpg" class="hatena-asin-detail-image" alt="ITILの基礎 -ITILファンデーション(シラバス2011)試験対応-" title="ITILの基礎 -ITILファンデーション(シラバス2011)試験対応-"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839948607/hatena-blog-22/">ITILの基礎 -ITILファンデーション(シラバス2011)試験対応-</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 官野厚</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%CA%A5%D3">マイナビ</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/10/19</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4839948607/hatena-blog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>どうもリリース管理と変更管理の境界がわからなくなってきたので、その辺を整理すべく。<br /> Tポイントキャンペーンをやっていたので試しに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%CA%A5%D3">マイナビ</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BD%F1%C0%D2">電子書籍</a>を買ってみたけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%A3%BF%CD%BD%D0%C8%C7%B2%F1">達人出版会</a>(各ページにメールアドレスが入る)と違って、最終ページに氏名等が入ったページが追加される形。どっちで買っても大差なさそう。</p> </div> <div class="section"> <h4>勉強</h4> <p>去年の春以来、午後Iの対策もちゃんとやるスタンスなので、午後Iは重点対策本の重点解説の 5 題を解いたり。</p><p>午後IIは2009(H21)〜2015(H27)の骨子を考えて、苦手な分野は後でじっくり考えたり。実際に論文書いたのは前日の一回のみ。<br /> 「論述の対象とする IT サービスの概要」とアの前半を書く練習は 3〜5 回くらい。「論述の対象とする IT サービスの概要」シートはチーム名なんかも入った新しいフォーマットが見当たらなくて困ってたけど、よく見たら <a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a> のダウンロードページから落とせた(書籍は購入しておく必要あり)のでこれを使った。</p><p>午前IIの対策は、重点対策本を読んだし、空き時間に</p> <ul> <li><a href="http://www.k4.dion.ne.jp/~type_f/">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x52C9;&#x5F37;&#x3092;&#x3084;&#x308A;&#x76F4;&#x3057;&#x3000;&minus;IT&#x30D1;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3001;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x9AD8;&#x5EA6;&#x8A66;&#x9A13;&#x306E;&#x904E;&#x53BB;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&minus;</a></li> </ul><p>このサイトで過去問を 3 年分解いたしで、ちょっとやりすぎた。似たような問題が多いから、何度も受けてるらなもっとさらっとで大丈夫。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場はTKPガーデンシティPREMIUM<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%A9%CD%D5%B8%B6">秋葉原</a>。こんな近い会場あるんだなー。<br /> いつもは受験票が来たら「こんな遠くまで行くのか・・・」ってテンションが下がってたけど、今回は逆にやる気になってた。<br /> 当日もちゃんと受験会場に来てる人が多かった気がする。</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 73%、実際に採点すると 88% で間題なし。<br /> 間違えたうち一問は勘違いだけど、まあ通過してるだろうからいいや。</p> </div> <div class="section"> <h5>午後I</h5> <p>問1はだいたい解けたけど、問2がどの設問でどこまで答えるべきかがピンと来なかった。6 割くらいは解けてると思うんだけど、どうかなー・・・。</p> </div> <div class="section"> <h5>午後II</h5> <p>始まる前に注意事項を読んでたら「ただし, 問題冊子を切り離して利用することはできません。」とか書かれてて驚いた。調べてみたら2005年の秋からこの注意書きはなくなってたんだけど、久々に NG になったらしい。最近切り離して下敷きにするのが気に入ってたんだけど。</p><p>今回のテーマは要員の育成とプロセス不備への対応・・・。前者はすぐには書けなそうだから書くなら後者かな。<br /> ということで 25 分くらいで骨子をまとめて書き始めたんだけど、全体的に流れがおかしくなってしまった。不備の内容をアで軽く書いてイでその調査を〜っていうのがきれいな形なんだろうけど、不備の対応の中で原因がわかっちゃうような事例を選んでしまったので、題意に沿っていない感じに。<br /> ア: 650字、イ: 1250 字、ウ: 650 字ということで、イを書きすぎてウがあまり内容書けずに尻切れトンボな感じだし、A 判定はなさそう。イの文字数を抑えて 5〜10 分でも軌道修正の時間が取れたらよかったんだけど・・・。</p><p>題意に添ってない論文を長々と書いても仕方ないし、論文の骨子にもう少し時間をかけたほうがよかったのかも。いつも「骨子に時間かけすぎた。やばい」みたいなことを言ってるけど、それで合格してるケースもあるし。</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <p>ここ数回の受験では片手間に勉強してたけど、今回はわりと時間をかけてしまった。そのわりにいい論文が書けないままで、どうしたものだか。<br /> 論文の練習は過去三年とかに絞って、論文の精度を高めることを優先したほうがいいのかもしれない。添削を受けることも考えたほうがいいのかも。</p> </div> <div class="section"> <h4>(2016-12-16 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 88.00点 午後I得点 72点 午後II評価ランク A</pre><p>またなぜか合格してました・・・。<br /> 講評がまだ出てない(+試験後に意気消沈してて、骨子にどう肉付けしたかをメモし忘れてた)のでなんともいえないけど、出題趣旨にあった「プロセス単体、プロセス間の連携の観点から〜」といった部分は書けていたっぽいので、そこが評価されたとか・・・?<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/2ch">2ch</a> を見てると午後Iで落ちてた人が多かったみたいなので、午後Iを通過して規定文字数を書ければ合格率は高かったとか、そういうのかも。</p><p>微妙にすっきりしないところではあるけど、形はどうあれ論文系の資験は一通り受かったので、しばらく論文が必要な試験は受けないつもり。<br /> 来年の春は気が向いたら情報セキュリティマネジメント試験か情報処理安全確保支援士を受けるかも、くらいで。<br /> 合格している試験区分でも知識が古くなってしまっているものは多いので、受験するかはともかく、たまに最新のテキストを読んで知識を整理したい。</p> </div> Sun, 16 Oct 2016 21:27:56 +0900 hatenablog://entry/17680117126982584711 試験 システム監査技術者(試験)/成績照会 https://miau.hatenablog.com/entry/20160618/1466233140 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>の日に書き損ねましたが、昨日成績照会したのでこの機会に投稿しておきます。<br /> 春に受験したのはシステム監査。気が付いたらもう 6 度目の受験です。<br /> <br /> </p> <div class="section"> <h4>勉強っぷり</h4> <div class="section"> <h5>午前II対策</h5> <p>例によって</p> <ul> <li><a href="http://www.k4.dion.ne.jp/~type_f/">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x52C9;&#x5F37;&#x3092;&#x3084;&#x308A;&#x76F4;&#x3057;&#x3000;&minus;IT&#x30D1;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3001;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x9AD8;&#x5EA6;&#x8A66;&#x9A13;&#x306E;&#x904E;&#x53BB;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&minus;</a></li> </ul><p>を通勤中に解いたりしていたくらい。</p> </div> <div class="section"> <h5>午後I対策</h5> <p>去年午後IIがわりと書けたと思ったら午後Iで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%AD%C0%DA%A4%EA">足切り</a>されていて勿体なかったので、今年は午後Iをしっかりとやる方針で。</p><p>まずは去年の点数が低かったか原因を確認すべく、解答例と採点講評を確認してみた・・・のだけど、あまり納得いく感じではなかった。問題文に「具体的に答えよ」とか書いているわけでもないのに、講評では「具体性を欠く解答が散見された」とか書かれたりして。<br /> 過去問の講評でも「○○のように答えている解答が散見されたが、△△を答えてほしかった」みたいなコメントは頻繁に見かけたし、出題の仕方にも問題あると思うなー・・・。とりあえずの教訓として、「どう答えるか迷った時には具体的に答える」方針でいこう。</p><p>次に午後I対策として、↓この本を読んでみたり。まあ色んな人が色んなやり方で対策してるんだなー、といった感じ。「小問の数が多い問題を選んだほうがリスク分散になっていい」みたいな意見についてはなるほどと思った。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798138541/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51kpDqpJglL._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理教科書 高度試験午後I記述 春期・秋期" title="情報処理教科書 高度試験午後I記述 春期・秋期"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798138541/hatena-blog-22/">情報処理教科書 高度試験午後I記述 春期・秋期</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> ITのプロ46,三好康之</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2">翔泳社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/03/17</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4798138541/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>これを読んでも回答ポイントの絞り方がわからなかったので、その点について解説されていた <a href="http://d.hatena.ne.jp/asin/479814097X/hatena-blog-22">情報処理教科書 ITストラテジスト 2015年版</a> も読み返したり。この方法でもやっぱり自信を持って答えられる感じにはならないなぁ・・・。</p><p>あとは試験前日&当日に</p> <ul> <li><a href="http://mr-sorao.hatenablog.com/entry/2015/06/19/123334">AU&#x901F;&#x653B;&#x30B5;&#x30D7;&#x30EA;&#x306E;&#x516C;&#x958B; - mr_sorao&rsquo;s diary&#x3000;2015&#x5E74;&#x5EA6;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x76E3;&#x67FB;&#x6280;&#x8853;&#x8005;&#x53D7;&#x9A13;&#x306B;&#x53D6;&#x308A;&#x7D44;&#x3093;&#x3060;&#x8A18;&#x9332;&#x3068;&#x5099;&#x5FD8;&#x9332;</a></li> </ul><p>ここで書かれている<a class="keyword" href="http://d.hatena.ne.jp/keyword/AU">AU</a>速攻アプリと、公式の講評を読んだりもした。</p> </div> <div class="section"> <h5>午後II対策</h5> <p>午後I の対策に時間をかけすぎて午後IIの勉強時間が取れなくなってしまった。<br /> 仕方がないので、数冊持っている対策書/論文集について、どの年度のどの問題の論文例が多いか調べて、例が多いものから順に骨子を考える練習をした。中心として使ったのは <a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a> になるのかな。<br /> いつもは骨子を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%F3%A5%C9%A5%DE%A5%C3%A5%D7">マインドマップ</a>でまとめてるんだけど、リスク要因→コン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>→監査の流れを整理するには表形式のほうがよさそうだと(今更)気付いたので、今回は表形式で考える練習をした。<br /> あと、<a href="http://d.hatena.ne.jp/miau/20151018/1445172042">&#x524D;&#x56DE;&#x306E;IT&#x30B9;&#x30C8;&#x30E9;&#x30C6;&#x30B8;&#x30B9;&#x30C8;&#x53D7;&#x9A13;&#x6642;</a> に参考書に出てきた考え方(モジュール)を意識して、学習中に使えそうな表現が出てきたらメモとして書き貯めていったりもした。</p><p>その他、去年受けた添削の結果を見直したり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/2ch">2ch</a> で「論文を書く上でも参考になる」と紹介されていた <a href="http://d.hatena.ne.jp/asin/448009525X/hatena-blog-22">数学文章作法 基礎編 (ちくま学芸文庫)</a> も読んでみた。個々のテクニックについては日経SYSTEMSの連載なんかでも見かけた内容なので真新しさはなかったけど、「第一章 読者」はこの人の本らしくてよかった。</p> </div> </div> <div class="section"> <h4>全体的な対策として</h4> <p>以前読んだ本の改訂版が出ていたので、気になるところを拾い読みしたりも。細かい単語の違いなんかを整理できてよいです。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197827/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/5168ZUzuY1L._SL160_.jpg" class="hatena-asin-detail-image" alt="よくわかるシステム監査の実務解説(改訂版)" title="よくわかるシステム監査の実務解説(改訂版)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197827/hatena-blog-22/">よくわかるシステム監査の実務解説(改訂版)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 島田裕次</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> 同文舘出版</li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/09/12</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4495197827/hatena-blog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は何度目かの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%EC%B5%FE%C5%D4%BB%D4%C2%E7%B3%D8">東京都市大学</a>世田谷キャンパス@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%F8%BB%B3%C2%E6">尾山台</a>。</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 65%、実際に採点すると 80%。<br /> 最終的な得点だけ見ると問題ないけど、「過去問を解いておけば自信を持って答えられる」みたいな出題がいつもより少なかった気がするので、あまり油断しないほうがよさそう。</p> </div> <div class="section"> <h5>午後I</h5> <p>問1 は得意分野(セキュリティ)だし、だいたい答えられていると思うのだけど。<br /> その後「小問の数がやや多いから」という理由で選んだ 問2 は、どう答えていいものかかなり迷う問題で、手ごたえがよくわからなかった。問3 のほうにしていたほうがよかったのかも・・・と軽く後悔したり。</p> </div> <div class="section"> <h5>午後II</h5> <p>問1 が情報システム投資、問2 が設計・開発段階の品質管理ということで、ここは問2を。<br /> 骨子を考えるのに 28 分くらい使ってしまって。急いで書いたけど ア: 750 字、イ: 875 字、ウ: 725 字ということで、文字数はわりと少なめ。監査では文字数は多めのほうがいいって話があったし、ダメな気がする。<br /> 内容のほうも、イで書いたコン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>がありきたりな感じになってしまったので、ウの監査手続きも「まあ、それくらいしかやることないよね」と思われてしまいそうな内容。よくて B かなー、という印象・・・だったのですが。</p> </div> </div> <div class="section"> <h4>成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 80.00点 午後I得点 72点 午後II評価ランク A</pre><p>なんだか合格してました。勝因がまるでわからない・・・。<br /> まあ去年ほどではないにせよ、比較的書きやすいテーマ(設計・開発)に当たった、ってことなのかなと。</p> </div> <div class="section"> <h4>反省</h4> <ul> <li>結局は「得意なテーマが来るまで根気よく受け続ける」戦略になってしまった・・・</li> <li>秋はITサービスマネージャを受けるつもりなので、ちゃんと手ごたえのある合格を目指したい</li> </ul> </div> Sat, 18 Jun 2016 15:59:00 +0900 hatenablog://entry/17680117126982584812 試験 漢直でPCの操作性も変わってくる https://miau.hatenablog.com/entry/20151214/1450104109 <p>また日付が変わる前に <a href="http://www.adventar.org/calendars/1003">&#x6F22;&#x76F4; Advent Calendar 2015</a> の 14 日目の記事として上げてみます。</p><p><a href="http://d.hatena.ne.jp/miau/20151210/1449756358">&#x524D;&#x56DE;</a>は誤変換のストレスについて書きましたが、今回は漢直でまた別の不満を解消しよう、という話です。私は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> を使っているので <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 限定での話になります。<a href="#f-5566025f" name="fn-5566025f" title="他の環境でも有効なのか知りたいので、気が向いたら教えてください。">*1</a></p><p></p> <div class="section"> <h4>以前から不満だったこと</h4> <p>現在使われている OS(やアプリケーション)はほとんどが欧米で開発されたもので、欧米の人に使いやすくできています。</p><p>例えば、こんなセレクトボックス。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151214232426" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151214/20151214232426.png" alt="f:id:miau:20151214232426p:image:w300" title="f:id:miau:20151214232426p:image:w300" class="hatena-fotolife" style="width:300px" itemprop="image"></a></span><br /> (動く例を <a href="http://jsbin.com/hahoke/1">http://jsbin.com/hahoke/1</a> に置いています。先頭のテキストボックスは <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> が切り換わる様子を確認するためのもので、深い意味はありません。)</p><p>州名を選択するためのセレクトボックスですが、フォーカスして「c」のキーを押せば、「c」で始まる「California」にジャンプできます。「c」のキーを何度も置せば「C」で始まる「California」「Colorado」「Connecticut」を順に移動できますし、「co」のように 2 文字以上入力すれば、その文字で始まる「Colorado」に最初からジャンプできるわけです。</p><p>このようにある程度使いやすくなっているわけですが、これが日本の場合だと・・・。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151214232425" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151214/20151214232425.png" alt="f:id:miau:20151214232425p:image:w300" title="f:id:miau:20151214232425p:image:w300" class="hatena-fotolife" style="width:300px" itemprop="image"></a></span><br /> ↑こうなっています。「東京都」にジャンプしたい場合はどうすればいいでしょう?</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Internet%20Explorer">Internet Explorer</a> ではセレクトボックス上でも <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> を有効にできます。「とうきょうと」と入力して変換すれば、ちゃんと「東京都」にジャンプできるわけです。<a href="#f-6112b234" name="fn-6112b234" title="Microsoft はこの辺の国際化対応を促進していたので、当然といえば当然です。">*2</a> Edge も多少表示が変ですけど、同様の操作ができます。一方で <a class="keyword" href="http://d.hatena.ne.jp/keyword/Firefox">Firefox</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> は <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> が強制的に OFF になるので <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> からは入力できません。</p><p>じゃあ <a class="keyword" href="http://d.hatena.ne.jp/keyword/IE">IE</a> や Edge を使っていれば満足かというと、そんなことはありません。欧米の人が 1〜2 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>で目的の選択肢に達することができる場面で、「toukyou<Space><Enter>」とか「higasi<Space><Enter>」といった入力しないといけないのは、なんとも不満です。</p><p>わかりやすいサンプルとしてプルダウンメニューを挙げましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%AF%A5%B9%A5%D7%A5%ED%A1%BC%A5%E9">エクスプローラ</a>でファイル選択する時なんかにもこの不便を強いられているわけです。</p> </div> <div class="section"> <h4>そこで漢直ですよ</h4> <p>漢直の中でも 2 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>で漢字を入力できる T-Code で考えてみましょう。「東」の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>は「is」ですから、2 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>で目的の選択肢に到達できます。そして「福」の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/vb">vb</a>」を何度も入力すれば「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A1%C5%E7%B8%A9">福島県</a>」「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A1%B0%E6%B8%A9">福井県</a>」「福岡県」を順に移動できます!<a href="#f-8c8a5e64" name="fn-8c8a5e64" title="書いておいてなんですが、こんな使い方をしたい人がいるのだろうか・・・">*3</a> 「fuku<Space><Enter>」をくり返すのに比べると、ずいぶん欧米の人に近い――OS の設計に沿った使い方ができているんじゃないでしょうか。</p><p>そして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Firefox">Firefox</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> では <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> 有効にならないと書きましたが、漢直の入力を可能にするツールには <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> の形式を取っていないものがあります。例えば <a href="https://github.com/kanchoku/kw">&#x6F22;&#x76F4;Win</a> を使えば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Firefox">Firefox</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> であっても、「is(東)」や「<a class="keyword" href="http://d.hatena.ne.jp/keyword/vb">vb</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%CA%CA%A1%A1%CB">(福)</a>」を打つだけでジャンプできるようになります。</p><p>このように、入力方式や採用するツールを適切に選べば、理想的な PC 操作に一歩近づけるかもしれません。</p> </div> <div class="section"> <h4>(蛇足)そうは言っても・・・</h4> <p>漢直は漢字直接「入力」なので、あくまでも入力に最適化されたものです。入力に適した道具が検索にも最適ということはありません。州名の例でも「Colorado」を選択するのに「Co」のように大文字の「C」から入力する必要があると、ちょっと不便でしょう。</p><p>本当の理想を言うと、OS や <a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a> ツールキットのレベルで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Migemo">Migemo</a> が使えるのがいいと思うんですが<a href="#f-409a2b4d" name="fn-409a2b4d" title="外部アプリケーションでよければ [http://uisteven.at-ninja.jp/mw.html:title=Migemize Windows] もあります">*4</a> ・・・それでも、そういったサポートがない現状では、漢直という選択肢もありだと思います。</p> </div><div class="footnote"> <p class="footnote"><a href="#fn-5566025f" name="f-5566025f" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">他の環境でも有効なのか知りたいので、気が向いたら教えてください。</span></p> <p class="footnote"><a href="#fn-6112b234" name="f-6112b234" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> はこの辺の国際化対応を促進していたので、当然といえば当然です。</span></p> <p class="footnote"><a href="#fn-8c8a5e64" name="f-8c8a5e64" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text">書いておいてなんですが、こんな使い方をしたい人がいるのだろうか・・・</span></p> <p class="footnote"><a href="#fn-409a2b4d" name="f-409a2b4d" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text">外部アプリケーションでよければ <a href="http://uisteven.at-ninja.jp/mw.html">Migemize Windows</a> もあります</span></p> </div> Mon, 14 Dec 2015 23:41:49 +0900 hatenablog://entry/17680117126982584896 漢直 誤変換しないことの魅力 https://miau.hatenablog.com/entry/20151210/1449756358 <p>枠が空いていたのでまた滑り込みで登録した <a href="http://www.adventar.org/calendars/1003">&#x6F22;&#x76F4; Advent Calendar 2015</a> の 10 日目の記事です。(Advent Calendar の使い方が間違ってる)</p><p>今回は漢直の魅力の一つである「誤変換のストレスがない」というのを、ちょっと掘り下げて書いてみます。以前行われた社内LT大会で発表した内容を抜粋した感じで、漢直をあまり知らない人向けの内容です。<br /> <br /> </p> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%AB%A4%CA%B4%C1%BB%FA%CA%D1%B4%B9">かな漢字変換</a>を使う上でのストレス</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%AB%A4%CA%B4%C1%BB%FA%CA%D1%B4%B9">かな漢字変換</a>を使用している時に感じるストレスといえば、誤変換に伴うものでしょう。</p><p>誤変換された場合には、</p> <ul> <li>変換候補を確定してしまった場合、打ちなおして変換<a href="#f-89eadbad" name="fn-89eadbad" title="Ctrl+Backspace で再変換できたりもするけれど">*1</a></li> <li>まだ未確定の場合、誤変換された文節まで移動して正しく再変換</li> </ul><p>といった操作が必要になります。</p><p>かといって誤変換を防ごうとすると、「変換」→「候補が正しいか確認して、正しくない場合は次候補を表示」というステップをくり返すような形になり、これはこれで疲れます。</p> </div> <div class="section"> <h4>そこで漢直ですよ</h4> <p>漢直を使えば、基本的に変換/確定といった操作がないため誤変換が発生しません。</p><p>「再変換の必要がない」という利点はわかりやすいと思うのですが、個人的には「誤変換を防ぐために変換候補を注視する必要がない」という点のほうが大きいと思っています。というのも、PC からのフィードバックを得ることなく、一方的に打ち込んでいくだけでよくなるからです。</p><p>一方的に打ち込めるということは、画面を見ずに入力しても問題ないということです。画面を見ないで済むのなら、この時に視線をどこに向けることができるのか、いくつか考えてみましょう。</p> <div class="section"> <h5>1: 入力したいテキストを見る</h5> <p>これはよく言われる利点ですね。原稿から目を離さずに入力できるので、コピータイプ作業はかなり楽になります。</p> </div> <div class="section"> <h5>2: 話し相手を見る</h5> <p>打ち合わせの際にノート PC でメモを取っていると、話を熱心に聞いていないと思われるケースがあると聞きます。漢直を使えば相手の目を見ながらメモを取れるわけで、話を熱心に聞いている雰囲気が十分に出せます。</p> </div> <div class="section"> <h5>3: 何も見ない</h5> <p>特に何も見る必要がない場面であれば、目を瞑ったまま入力できてしまいます。目が疲れて困っている人には嬉しいでしょうし、老後に備えて漢直を覚えておいてもいいかもしれません。</p> </div> </div> <div class="section"> <h4>まあ実際には・・・</h4> <p>漢直は(入力方式にもよりますが)ミスタイプした場合にわけわからない文字になってしまいがちです。</p><p>例えば「漢字が違う」と入力しようとして、2文字目を打ち損ねた場合のことを考えます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A1%BC%A5%DE%BB%FA%C6%FE%CE%CF">ローマ字入力</a>であれば「kン字が違う」のような変換になり、後で見ても何を入力しようとしたのかは想像できるでしょう。ところが漢直(T-Code や私が使っている Try-Code)の場合は・・・<pre><br /> 漢 字 が 違 う<br /> (l4 z/ ;s sp yd)</p><p>↓2文字目の「4」を打ち損ね</p><p>(l z/ ;s sp yd)</p><p>↓以下のように解釈されてしまう</p><p>(lz /; ss py d)<br /> 小 光 熟 談 d</pre>この結果、「小光熟談d」のようにまるでわけのわからない文字になってしまいます。</p><p>なので、たまに画面はチェックしたくなりますし、私が未熟なこともあり、</p> <ul> <li>脳内で思い描いた漢字が間違っている</li> <li>覚えてない漢字を交ぜ書き変換で変換することがある</li> <li>ミスタイプもある</li> </ul><p>ということで画面からずっと目を離すわけにはいかないのですが・・・それでも見る頻度は下げられてきていると思います。</p> <ul> <li> <ul> <li> <ul> <li>-</li> </ul></li> </ul></li> </ul><p>(2015-12-11 追記)ミスタイプの例がおかしかったので少し修正しました。</p> </div><div class="footnote"> <p class="footnote"><a href="#fn-89eadbad" name="f-89eadbad" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">Ctrl+Backspace で再変換できたりもするけれど</span></p> </div> Thu, 10 Dec 2015 23:05:58 +0900 hatenablog://entry/17680117126982584942 漢直 漢直の練習に向いているフォント https://miau.hatenablog.com/entry/20151207/1449497580 <p>(昨日の記事がまだ書かれていないようですが)せっかく今日までカレンダーが埋まってるので、流れに乗って <a href="http://www.adventar.org/calendars/1003">&#x6F22;&#x76F4; Advent Calendar 2015</a> の 7 日目の記事として、小ネタを書いてみます。</p><br /> <p>私が漢直の練習を始めた当初は、覚えた文字をランダムに(一行おきに)出力して、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C6%A5%AD%A5%B9%A5%C8%A5%A8%A5%C7%A5%A3%A5%BF">テキストエディタ</a>でその下の行に同じ文字を入力する形で練習していました。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151207225541" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151207/20151207225541.png" alt="f:id:miau:20151207225541p:image:w400" title="f:id:miau:20151207225541p:image:w400" class="hatena-fotolife" style="width:400px" itemprop="image"></a></span></p><p>こんな感じ。</p><p>最初はこのやり方でうまくいっていたのですが、ひらがな、一部の漢字に続いてカタカナを全部覚えた頃(※T-Code はひらがなとカタカナの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%ED%A1%BC%A5%AF">ストローク</a>が別々に定義されています)に困ったことが起きました。というのも・・・</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151207225540" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151207/20151207225540.png" alt="f:id:miau:20151207225540p:image:w400" title="f:id:miau:20151207225540p:image:w400" class="hatena-fotolife" style="width:400px" itemprop="image"></a></span></p><p>さて、↑カーソルの上のこの文字は、ひらがなの「へ」なのか、それともカタカナの「ヘ」なのか、見分けることができますか?</p><p>たいていのフォントでは両者の字形は同一になっているので、見分けられないと思います。</p><br /> <p>こんな時は文字の区別がやりやすい <a href="http://mix-mplus-ipa.osdn.jp/migu/">MIGU</a>(の 2015-07-12 版以降)を使うと大丈夫です。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>に嬉しい</p> <ul> <li>0O(数字ゼロ・大文字オー)の区別</li> <li>1Il(数字1・大文字アイ・小文字エル)の区別</li> </ul><p>といった特徴以外にも、</p> <ul> <li>「カ力 エ工 ロ口 ー一 ニ二(カタカナ・漢字)へヘ(ひらがな・カタカナ)の区別」</li> </ul><p>という特徴があります。</p><p>先程判別がつかなかった練習テキストも、このフォント(Migu 1M)を使うと・・・。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151207225539" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151207/20151207225539.png" alt="f:id:miau:20151207225539p:image:w400" title="f:id:miau:20151207225539p:image:w400" class="hatena-fotolife" style="width:400px" itemprop="image"></a></span></p><p>左側がくいっと曲がっているものがカタカナ、曲がっていないものはひらがななので、カーソルの上にるのはカタカナ、次の行にあるのはひらがなだとわかりますね。</p><br /> <p>実はこの字形の変更、私が漢直の練習をしていて困っていたので、フォーラムで要望として出したものだったりします。</p> <ul> <li><a href="https://osdn.jp/projects/mix-mplus-ipa/forums/9259/34400/">&#x30B9;&#x30EC;&#x30C3;&#x30C9; &#x516C;&#x958B;&#x8A0E;&#x8B70;:&#x3072;&#x3089;&#x304C;&#x306A;&#x300C;&#x3078;&#x300D;&#x3001;&#x30AB;&#x30BF;&#x30AB;&#x30CA;&#x300C;&#x30D8;&#x300D;&#x306E;&#x533A;&#x5225;&#x306B;&#x3064;&#x3044;&#x3066; - mixfont-mplus-ipa - OSDN</a></li> </ul><p>このリンク先にも書いたのですが、漢直ユーザの体験談では</p> <ul> <li>「何年間も『へ』と『ヘ』の位置を間違って覚えていた」</li> <li>「『へルプ』(※「へ」がひらがな)になっているのを他人に指摘された」</li> </ul><p>といった話もあるようで。漢直をお使いの方は、そのような悲劇を起こさないためにも MIGU を使うといいかもしれません。</p> Mon, 07 Dec 2015 23:13:00 +0900 hatenablog://entry/17680117126982584984 漢直 Jenkins のグラフで縦書きの文字がちゃんと回転しない対策 https://miau.hatenablog.com/entry/20151116/1447685809 <p>Jenkins のグラフについて「日本語が表示されない(お豆腐で表示される)」みたいな問題はわりと見かけるんですが、今の環境で起きてたのは別の現象で。</p><p>本来は</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151116235027" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151116/20151116235027.png" alt="f:id:miau:20151116235027p:image" title="f:id:miau:20151116235027p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> ↑こうなるべきところが、</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20151116235026" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20151116/20151116235026.png" alt="f:id:miau:20151116235026p:image" title="f:id:miau:20151116235026p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> ↑こうなってました。</p><p>y軸の「count」が下から「c」「o」「u」「n」「t」が、各文字は回転せずに積み上げられてしまっています。x軸も「#3」が同様に下から「#」「3」が書かれていってるので、識別できません。</p><p>あまり報告を見かけないので、ほとんどの環境では発生しないんだと思いますが、一応対策を書いておきます。環境は CentOS5、OpenJDK7 です。<br /> <br /> </p> <div class="section"> <h4>先に結論を</h4> <div class="section"> <h5>原因(あまり深く調べてない)</h5> <p>手元の環境(CentOS5)では、<pre><br /> /usr/share/fonts/ja/TrueType/kochi-gothic-subst.ttf<br /> -> /usr/share/fonts/japanese/TrueType/sazanami-gothic.ttf</pre>のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>が設定されています(東風代替フォントとしてさざなみフォントが使われています)が、グラフの描画にこの辺りのフォントが使われると上記の現象が発生してしまうみたいです。</p> </div> <div class="section"> <h5>対策</h5> <p>もっと適切な対応があるかもしれませんが、とりあえずこのファイルが使われなければいいようなので、</p> <ul> <li>システム全体で設定していいのであれば /etc/fonts/local.ini として</li> <li>特定のユーザ(jankins ユーザとか)だけに設定したいのであれば ~/.fonts.conf として</li> </ul><p><a href="https://gist.githubusercontent.com/miau/ac7c9870f36438549623/raw/763b5b5d189237e931f117e50ac8040a7e11d71c/local.conf">&#x3053;&#x3093;&#x306A;&#x30D5;&#x30A1;&#x30A4;&#x30EB;</a> を配置して、<code>fc-cache</code> を実行。</p><p>ただ、こうすると日本語が表示できなくなってしまうので、日本語を表示したい場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPA">IPA</a> フォントでも入れておけばよいです。<pre><br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> install <a class="keyword" href="http://d.hatena.ne.jp/keyword/ipa">ipa</a>-gothic-fonts <a class="keyword" href="http://d.hatena.ne.jp/keyword/ipa">ipa</a>-mincho-fonts <a class="keyword" href="http://d.hatena.ne.jp/keyword/ipa">ipa</a>-pgothic-fonts <a class="keyword" href="http://d.hatena.ne.jp/keyword/ipa">ipa</a>-pmincho-fonts</pre></p><p>Jenkins を再起動すれば、キャッシュされていないグラフについては正しい状態になります。</p> </div> </div> <div class="section"> <h4>解決策に行き当たるまで&URL のメモなど</h4> <p>この現象は長いこと気になっていたので、Jenkins のメンテナンスついでに修正しようと思い立ちまして。</p><p>Jenkins やらその中でグラフの描画に使われている JFreeChart のソースを読んでみたんですが、特にあやしい処理が見付からず。よくわからないので JFreeChart で簡単なグラフを書いてみたら、そちらでも現象は再現するようなので、環境のほうを疑うようになって。</p> <ul> <li><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637250">#637250 - openjdk-7-jre-headless: hardcodes font paths instead of querying available fonts - Debian Bug report logs</a></li> </ul><p>を見ると OpenJDK7 では libfontconfig が使わているようで。</p> <ul> <li><a href="https://wiki.archlinuxjp.org/index.php/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E8%A8%AD%E5%AE%9A">&#x30D5;&#x30A9;&#x30F3;&#x30C8;&#x8A2D;&#x5B9A; - ArchWiki</a></li> </ul><p>あたりに fontconfig まわりの詳しい情報が載っていたのでこれを参考にしつつ、設定をいじりまわしていたらうまくいった、という感じです。<br /> (ちなみに <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> では ~/.java/fonts/*/fcinfo-*.properties あたりに設定がキャッシュされるっぽいので、検証をする時は rm -rf ~/.java/fonts としてキャッシュを消す必要がありました。) </p><p>色々書きましたが、今回は Jenkins でしか使っていないサーバなので、<pre><br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> erase fonts-japanese</pre>として日本語フォント自体を消してしまってもよかったかもしれません。</p> </div> Mon, 16 Nov 2015 23:56:49 +0900 hatenablog://entry/17680117126982585017 eelll/JS を GitHub に上げました https://miau.hatenablog.com/entry/20151028/1446050845 <p>ブラウザで動作する漢直(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C1%BB%FA%C4%BE%C0%DC%C6%FE%CE%CF">漢字直接入力</a>)の練習プログラムに eelll/JS というものがあったのですが、残念ながら <a href="http://www.sato.kuis.kyoto-u.ac.jp/~yuse/tcode/eljs/index.html">&#x516C;&#x958B;&#x30B5;&#x30A4;&#x30C8;</a>(※リンク切れ)が消えてしまっていました。</p><p>今回作者の ゆせ さんに過去バージョン+未公開のバージョンを提供していただきましたので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> に上げました。</p> <ul> <li><a href="https://github.com/miau/eljs">https://github.com/miau/eljs</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> に変換して gh-pages ブランチも作っているので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Pages でも動くようになっています。</p> <ul> <li><a href="https://miau.github.io/eljs/">https://miau.github.io/eljs/</a></li> </ul><p>以下、経緯や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>の説明です。<br /> <br /> </p> <div class="section"> <h4>経緯</h4> <p>実は 2 年ほど前から漢直(Try-Code が基本で、記号類は TT-Code)を使っています。</p><p>私が漢直を練習していた当時(2013/06〜2013/09)は「漢直を体験してみたいなら 漢直/JS を使うといいよ」「漢直を練習するなら eelll/JS を使うといいよ」と言えるような状況だったのですが、2014/04 に 漢直/JS と eelll/JS のサイトが消えてしまい、漢直に興味を持った人にも紹介しづらい状況でした。</p><p>私自身は eelll/JS の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>(0.2.3)を手元に持っていたので、そんなことはすっかり忘れていたのですが・・・最近になって、</p> <blockquote> <p><script> window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); t._e = []; t.ready = function(f) { t._e.push(f); }; return t; }(document, "script", "twitter-wjs"));</script><script> twttr.ready(function (twttr) { var el = document.getElementsByClassName('twitter-syntax-tweet-id-649056764181278720'); for (var i=0;i<el.length;i++) { if (!!el[i].getAttribute('data-is-tweet-loaded')){ continue; } el[i].setAttribute('data-is-tweet-loaded', '1'); twttr.widgets.createTweet('649056764181278720',el[i],{}); } });</script><div class="twitter-syntax-tweet-id-649056764181278720"></div></p> </blockquote> <p>こんなつぶやきを見かけまして。</p><p>0.2.3 の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>は持っているのですぐに <a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> に上げることはできたんですが、せっかく Git 管理にするなら過去バージョンもちゃんと履歴を残したほうがいいですし、作者の方が再公開してくれるのが一番スムーズな流れだと思ったので作者の ゆせ さんに連絡してみました。</p><p>少なくともすぐに再公開される予定はないとのことでしたが、快く過去バージョンと未公開のバージョンを提供してくださったので、軽く整理して <a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> にひとまず上げました。</p> </div> <div class="section"> <h4>未公開のバージョンについて</h4> <p>公開されていた最終バージョンは 0.2.x でしたが、その後 0.3 以降のバージョン(0.3.1 相当)までバージョンが上がっていたそうで、</p> <ul> <li>L-code 実際に練習できる環境が欲しくて機能拡充させていったバージョン</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B0%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9">バグフィックス</a>なども入れている</li> </ul><p>とのことでした。L-code というのは何かというと・・・</p> <blockquote> <p>また履歴の中で『L-code』や『F131215』などと書いているのは、<br /> ゆせ が個人的に試作した“ローマ字漢直”の入力方式の名前で、<br /> 『YALLLTXT』や『LLLLLTXT』はその練習テキストです。</p> </blockquote> <p>とのことです。こちらについても簡単に (と言いつつかなりしっかりと)説明していただきましたので、その内容も HTML にして上げてあります。</p> <ul> <li><a href="https://miau.github.io/eljs/l.html">https://miau.github.io/eljs/l.html</a></li> </ul> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>の説明</h4> <p>Committer は私ですが、Author は ゆせ さん、AuthorDate は .zip または .tar.gz の公開日時(未公開バージョンはファイルの最終更新日時)としています。コマンドでいうと以下のような感じです。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>git commit <span class="synSpecial">-m</span> <span class="synStatement">&quot;</span><span class="synConstant">eelll/JS 0.1</span><span class="synStatement">&quot;</span> <span class="synSpecial">--date=</span><span class="synStatement">&quot;</span><span class="synConstant">2005-06-24T20:43:00</span><span class="synStatement">&quot;</span> <span class="synSpecial">--author=</span><span class="synStatement">&quot;</span><span class="synConstant">xxxx</span><span class="synStatement">&quot;</span> </pre><p>公開バージョンについてはタグを設定しています。(0.1、0.2、0.2.2、0.2.3)</p><p>オリジナルのコンテンツについては org-master、org-0.1、org-0.2... のように、先頭に org- を付加しています。公開されていたままの(<a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP の)コンテンツが取得したい場合はこちらのブランチ/タグから取得してください。</p><p>「org-」が付加されていないブランチ/タグについては、ファイルが元々 <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> で作成されていた(コンテンツ中の charset も <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> 指定だった)かのように履歴を作ってあります。<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Pages で文字化けしないようにするのが目的ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> 上で diff 等も見やすいと思うので、今後メンテナンス対象とするのはこちらのブランチ/タグだけの予定です。</p> </div> <div class="section"> <h4>今後の予定?</h4> <p>最低限の整理だけ行っている状態ですので、</p> <ul> <li>外部サイトのリンク切れ修正</li> <li>Try-Code の定義を最新版に更新</li> <li>README.md を何かしら書く?</li> </ul><p>くらいは行おうかと思ってます。もしかしたら自分用に加えた eelll/JS への変更(ミスしたら次の行に進めない)もオプションとしてコミットするかもしれません。</p><p>また、過去ぶんのコミットをもっと細かく分割するかもしれません。その場合は git push --force でブランチやタグの位置を強制的に変えるような行儀のよくないことをするかもしれませんが、ご了承ください。</p> </div> Wed, 28 Oct 2015 01:47:25 +0900 hatenablog://entry/17680117126982585059 漢直 ITストラテジスト(試験) https://miau.hatenablog.com/entry/20151018/1445172042 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>を受けてきました。今回は 3 年ぶりの IT ストラテジスト。<br /> <br /> </p> <div class="section"> <h4>動機/今回の対策本</h4> <p>IT ストラテジストは IT サービスマネージャに合格してから受けよう、とか考えてたんですが。↓この本が「別の区分を受験す場合にも参考になる」として紹介されているのを見かけて。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4813255760/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/515N0LenBvL._SL160_.jpg" class="hatena-asin-detail-image" alt="ITストラテジスト午後2 最速の論文対策 第2版 (TACの情報処理技術者試験対策シリーズ)" title="ITストラテジスト午後2 最速の論文対策 第2版 (TACの情報処理技術者試験対策シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4813255760/hatena-blog-22/">ITストラテジスト午後2 最速の論文対策 第2版 (TACの情報処理技術者試験対策シリーズ)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 広田航二</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> TAC出版</li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/10/15</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4813255760/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>だったら今回はこの本で勉強してみようかな、と思ったのがきっかけ。</p><p>読んでみると確かに面白い考え方で。</p> <ul> <li>論文をまるごと用意しておくのではなく、論文の部品(モジュール)を用意しておく</li> <li>試験会場では考える作業は一切行わず、モジュールを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%C5%AA">機械的</a>に組み立てるだけでよい</li> </ul><p>という内容。こういう手法について説明されている本は他にもあったと思うけど、具体的でわかりやすかった。</p><p>あと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a> のレビューで「午後1対策のPDF書籍が良かったので〜」と書かれてたので、どの本のことかわからないけど同じ著者のこの本を買ってみた。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/479814097X/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51b6HUTA1LL._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理教科書 ITストラテジスト 2015年版" title="情報処理教科書 ITストラテジスト 2015年版"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/479814097X/hatena-blog-22/">情報処理教科書 ITストラテジスト 2015年版</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 広田航二</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2">翔泳社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/02/17</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/479814097X/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>午後IIの対策は前出の本と被る部分もかなり多い。どちらかというとこちらの本のほうが詳細に書いてあったり、(文字は小さいけど)モジュール例も多かったりする。時間がない人がざっと勉強するなら前者の本、みたいな選び方でいいかと。<br /> こちらの本には午後Iの対策も載っているけど、こちらも特徴的。「こういう風に読みましょう」「こういう風に考えましょう」とステップ毎に解き方を説明する感じなので、電車の中でも読み進められそう。そういうスタイルで勉強したい人にはいいかも。</p><p>その他前回買った <a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a> も IT ストラテジストのところだけ読んだ。問題の分類なんかはこの本のほうが詳しいし、どういう論文だとダメかがわかるので、どちらのほうがいいとも言えない感じ。</p> </div> <div class="section"> <h4>勉強っぷり</h4> <p>午前Iは免除なのでいいとして、午後IIは今回も <a href="http://www.k4.dion.ne.jp/~type_f/">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x52C9;&#x5F37;&#x3092;&#x3084;&#x308A;&#x76F4;&#x3057;</a> で過去問を 3 年ぶんくらい解いておいた。<br /> 午後対策はは上の本を一通り読んで・・・午後Iを2問、午後IIを1問くらい解いてみた程度。モジュールを準備する時間がなかったので、この本に載ってた方法がちゃんと試せなかったのが残念。<br /> そして最後本当に時間がなくなってきてからは、試験センターの「出題趣旨」「採点講評」をざっと読んだり。</p><p>時間がなかったといっても、今回は主に怠けてたせい。今回は日常のタスクの一つとして試験勉強を進める(毎日 30 分だけ勉強して、他の時間はいつも通りに過ごす)スタンスだったけど、そうすると勉強以外のことを先にやりはじめてしまって、結局一日がそのまま終わってしまうこともちらほら。もう少し制約がないとダメらしい。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%C2%E7%B3%D8">日本大学</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%A6%B3%D8%C9%F4">商学部</a>@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%AE%BE%EB%B3%D8%B1%E0%C1%B0">成城学園前</a>。<br /> 乗り換えが面倒で最寄り駅の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C4%BB%D5%A5%F6%C3%AB%C2%E7%C2%A2">祖師ヶ谷大蔵</a>を避けたのだけど、閑静な住宅地で歩きやすかった。(ただしコンビニは少ない)</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 69%、実際に採点すると 19/25 で 76%。<br /> 消去法で選べるのがわりと多くて助かった。</p> </div> <div class="section"> <h5>午後I</h5> <p>春の試験で「午後IIが書きやすいテーマだったのに午後Iで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%AD%C0%DA%A4%EA">足切り</a>されてた」のがわりとトラウマで。今回しっかり解こうと思ったら 1 問目で時間を使いすぎて、なんとか時間内に全問回答できた程度。</p><p>時間がかかった原因は、どういう詳細度で答えるのが正解かわからず考え込んでしまったこと。<br /> 例えば問1の設問1(2)。出題が「対策を述べよ」で、問題文中にはヒントとして「運用負荷を低減するための対策が必要となっている」とあるような場合に、「運用負荷を低減するための対策」とそのまま抜き出して答えるべきか、具体的な対策の内容を挙げるべきか迷ってしまったり。</p><p>やっぱり午後Iの対策では、ちゃんと自分で回答を書いてそれを模範解答と見比べる形のほうがいいのかも。「こういう聞かれ方をしたらこう答えればいい」っていうのをちゃんと覚えるために。</p> </div> <div class="section"> <h5>午後II</h5> <p>モジュールを準備できてないので、結局いつも通りの解き方で。<br /> 骨子に 42 分くらいかかって、概要にも 5 分くらいかかったと思うので、文書を書くのに使える時間が 73 分くらい。90 分くらい欲しいところなので、これはまずい。<br /> ひどい字で書きなぐったら、一応 ア: 625 字、イ: 975 字、ウ: 675 字 くらい書けた。なので(午後I通過してたら)採点はされると思うけど、ちょっとテーマと違う方向に話を展開してしまったので、よくて B 評価かなと。</p><p>よかった点としては、問題用紙を破るテクニックが試せたこと。一時期禁止されてたり、紙を破る音がうるさかったりで今まで試したことはなかったけど、わりと静かに破ることができた。問題とメモ用紙を横に並べて広いスペースを使って考えることができるし、余った紙を下敷きとしても使えば裏写りも多少減るのでオススメ。</p><p>悪かった点としては、午後Iが終わった段階ですでに手が疲れてプルプルしていたこと。書いたけど読めないような字になっちゃったので消して書き直す〜みたいな頻度が高くて、ずいぶん時間を無駄にした気がする。手を鍛えるためにも、何かしら文字をたくさん書くフェーズを勉強に組み込んでおいたほうがよさそう。</p> </div> </div> <div class="section"> <h4>(2015-12-19 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 76.00点 午後I得点 75点 午後II評価ランク A</pre><p>なぜか合格していました。全体システム化計画というよりは「緊急で発生したシステム化要求をどうこなすか」みたいなところを中心に書いてしまったので、ダメかなと思っていたのだけど。背景の説明やら事業戦略との整合性やらについても書いておいたので、逸脱しているというほどではなかったのかな?</p><p>ちなみに</p> <blockquote> <p>例えば問1の設問1(2)。出題が「対策を述べよ」で、問題文中にはヒントとして「運用負荷を低減するための対策が必要となっている」とあるような場合に、「運用負荷を低減するための対策」とそのまま抜き出して答えるべきか、具体的な対策の内容を挙げるべきか迷ってしまったり。</p> </blockquote> <p>この部分の解答例は「運用の負荷を軽減しサポート可能な要員の割合を増やす」でした。どちらか迷ってた 2 つの案を半分ずつ混ぜ込んだくらい。まあ「具体的に書け」とか言われなくても、ある程度具体的に答えておいたほうが安全な問題もあるということで。(システム監査だと抽象的に答えたほうがいい場面もあるので、一概には言えないだろうけど。)</p> </div> Sun, 18 Oct 2015 21:40:42 +0900 hatenablog://entry/17680117126982585118 試験 システム監査技術者(試験) https://miau.hatenablog.com/entry/20150419/1429468645 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>の日の定期更新。<br /> 今回受験したのはシステム監査。去年は受験できなかったので、2 年ぶり 4 度目の受験。<br /> <br /> </p> <div class="section"> <h4>勉強っぷり</h4> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798132608/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51T7c-UcxiL._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)" title="情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798132608/hatena-blog-22/">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> ITのプロ46,三好康之,秋田智紀,佐久間賢次,藤田章康</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2">翔泳社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/07/23</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22" target="_blank">この商品を含むブログ (8件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p><a href="http://d.hatena.ne.jp/miau/20141019/1413739327">&#x534A;&#x5E74;&#x524D;</a> にちらっと書いた、この本を中心に勉強。「他の試験ではこうだけど、監査の試験ではこういう書き方のほうがいい」みたいな他の試験区分と比べた論文のポイントなんかも書いてあって、いくつか勘違いしていたことが修正できてよかった。</p><p>あと、この本を買った時に</p> <ul> <li><a href="http://blog.livedoor.jp/yasuyukimiyoshi/archives/51950205.html">&#x81EA;&#x5206;&#x3089;&#x3057;&#x3044;&#x50CD;&#x304D;&#x65B9; : &#x66F8;&#x5E97;&#x8CFC;&#x5165;&#x8AAD;&#x8005;&#x7279;&#x5178;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306B;&#x95A2;&#x3057;&#x3066;</a></li> </ul><p>にある読者特典サービスを受けられたので、初めて論文の添削というのを受けてみた。自分では「どこか拙い論文だけどどこを直せばいいかわからない」というよう状態だったけど、明確に「ここがダメ」と指摘されたのでよかった。自分では具体的に書いたつもりのところも「具体性がない」とか指摘されたりとか。</p><p>その他去年(受験はしてないけど)買ってあった<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487268852X/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51k1XcZAvWL._SL160_.jpg" class="hatena-asin-detail-image" alt="システム監査技術者合格論文の書き方・事例集 (情報処理技術者試験対策書)" title="システム監査技術者合格論文の書き方・事例集 (情報処理技術者試験対策書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487268852X/hatena-blog-22/">システム監査技術者合格論文の書き方・事例集 (情報処理技術者試験対策書)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 岡山昌二,樺沢祐二,清水順夫,長嶋仁,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%EE%B9%E7%CF%C2%CD%BA">落合和雄</a></li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%B5%BB%BD%D1%BC%D4">情報処理技術者</a>教育センター</li><li><span class="hatena-asin-detail-label">発売日:</span> 2011/01/01</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><span class="hatena-asin-detail-label">購入</span>: 1人 <span class="hatena-asin-detail-label">クリック</span>: 4回</li><li><a href="http://d.hatena.ne.jp/asin/487268852X/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4813253210/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51whZpo0u-L._SL160_.jpg" class="hatena-asin-detail-image" alt="システム監査技術者 合格テキスト 2014年度 (情報処理技術者試験対策)" title="システム監査技術者 合格テキスト 2014年度 (情報処理技術者試験対策)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4813253210/hatena-blog-22/">システム監査技術者 合格テキスト 2014年度 (情報処理技術者試験対策)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> TAC情報処理講座</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> TAC出版</li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/08/21</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4813253210/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>このあたりを読んだり、評判がよかった<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197819/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51FkP1rZYOL._SL160_.jpg" class="hatena-asin-detail-image" alt="よくわかるシステム監査の実務解説" title="よくわかるシステム監査の実務解説"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197819/hatena-blog-22/">よくわかるシステム監査の実務解説</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 島田裕次</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%B1%CA%B8%B4%DB">同文館</a>出版</li><li><span class="hatena-asin-detail-label">発売日:</span> 2012/09/12</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4495197819/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>この本を拾い読みしたり。それ以外に <a href="http://d.hatena.ne.jp/miau/20130421/1366552926">&#x524D;&#x56DE;</a> 使った対策本を読んでみたり、といった感じ。</p><p>午前II については、例によって</p> <ul> <li><a href="http://www.k4.dion.ne.jp/~type_f/">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x52C9;&#x5F37;&#x3092;&#x3084;&#x308A;&#x76F4;&#x3057;&#x3000;&minus;IT&#x30D1;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3001;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x9AD8;&#x5EA6;&#x8A66;&#x9A13;&#x306E;&#x904E;&#x53BB;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&minus;</a></li> </ul><p>を通勤中に解いたり。</p><p>午後の過去問対策は、最初の本に載っていたシステム監査の問題 5 題の骨子を考えた程度。<br /> 本当はもっと過去問を解きたかったんだけど、ずっと体調を崩していて無理だった。途中から目標が「合格すること」じゃなくて「体調を整えて当日ちゃんと会場に行くこと」になったりしてたくらいなので、まあ受験できただけよしとしよう。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%EC%B5%FE%C5%D4%BB%D4%C2%E7%B3%D8">東京都市大学</a>世田谷キャンパス@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%F8%BB%B3%C2%E6">尾山台</a>。またここに来る機会があるかはわからないけど、注意点は</p> <ul> <li>駅から15分くらい歩くので時間に注意</li> <li>大学だけあって会場に時計がなかったので時計は必須</li> <li>地下の部屋で日中の気温のわりに寒かったので防寒は忘れずに</li> </ul><p>くらいかな。</p> <div class="section"> <h5>午前I</h5> <p>厳しめ自己採点で 70%、実際に採点すると 83%。<br /> 諸々の試験区分の受験をしたことがあれば特に勉強しなくていい感じ。とりあえず次回の午前Iの免除は確保と。</p> </div> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 86%、実際に採点すると 92%。こちらも過去問をやってれば問題なし。</p> </div> <div class="section"> <h5>午後I</h5> <p>75 分くらい経ったところで一応回答はできたので、午後IIの準備をちょっとでもするために途中退室。監査は午後Iで落ちたこともあるし、今回あまり勉強してないしで手ごたえはよくわからない。</p> </div> <div class="section"> <h5>午後II</h5> <p>例年書けそうなテーマがなくて困るんだけど、今回のテーマは</p> <ul> <li>問1 ソフトウェアの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>対策の監査</li> <li>問2 消費者を対象とした<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BE%A6%BC%E8%B0%FA">電子商取引</a>システムの監査について</li> </ul><p>みたいな感じで、どっちも(監査じゃないけど)どっぷり経験済みな分野が来たりして。「えっ?どっちを選べば・・・?」と逆に焦ったりしてた。別々の年に出題してくれたら合格率上がって嬉しかったんだけど、それはさておき。</p><p>とりあえず、より専門性が活かせそうな 問1 を選択。ア: 715 字、イ: 1200 字、ウ: 1150 字ということで、今までになく十分な文字数は書けた(その分手はものすごく疲れた)。ちゃんと採点されたら B くらいは行ってくれると思うんだけど、経験済みだからといって、監査人の立場でいい論文が書けているかというと別の話なのでどうだろう。あと思い返してみると記述が足りない点やら誤字やら、減点要素が多い気がする・・・。</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <ul> <li>体調が悪いと学習のスケジュールとか無意味な感じになってしまうので、なんとかしたい。</li> <li>やっぱりテーマによって書けたり書けなかったりの差が激しい。得意なテーマが来るまで根気よく受け続ける戦略も悪くないかも、なんてことも考えてしまう。</li> <li>合格を確実にしたいなら、論文の添削はかなり有効そう。有料のサービスとか受けてみるのもいいかもしれない。</li> <li>秋の試験は・・・負債の片付け(主に本のスキャン作業)が終わるまで、それ以外の物事の優先順位を下げようと思ってるので、まだ片付いてなかったら受験しないかも</li> </ul> </div> <div class="section"> <h4>(2015-07-15 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 85.00点 午前II得点 88.00点 午後I得点 51点 午後II評価ランク -</pre><p>午後Iがダメダメだったので、論文は採点対象にすらならなかった模様。残念。</p><p>今までも「わりと論文が書けた気がする」ってタイミングで午後Iを通過できないパターンはあったので、対策を考えたいところだけど。午後Iって実際に問題を解いて解答例と見比べて勘所を掴むやり方しか知らないからどうしたもんだろう・・・。</p><p>とか思っていたところで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/2ch">2ch</a> の合格報告でよさげな対策を見かけたのでメモ。</p> <ul> <li><a href="http://mr-sorao.hatenablog.com/entry/2015/06/19/123334">AU&#x901F;&#x653B;&#x30B5;&#x30D7;&#x30EA;&#x306E;&#x516C;&#x958B; - mr_sorao&rsquo;s diary&#x3000;2015&#x5E74;&#x5EA6;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x76E3;&#x67FB;&#x6280;&#x8853;&#x8005;&#x53D7;&#x9A13;&#x306B;&#x53D6;&#x308A;&#x7D44;&#x3093;&#x3060;&#x8A18;&#x9332;&#x3068;&#x5099;&#x5FD8;&#x9332;</a></li> </ul><p>これなら移動中に勉強できそうでよさげ。</p> </div> Sun, 19 Apr 2015 03:37:25 +0900 hatenablog://entry/17680117126982585207 試験 PHP fputcsv/fgetcsv の $escape オプション https://miau.hatenablog.com/entry/20141214/1418574582 <p><a href="http://php.net/manual/ja/function.fputcsv.php">fputcsv</a> と <a href="http://php.net/manual/ja/function.fgetcsv.php">fgetcsv</a> には $escape オプションがあります。<br /> (fputcsv のマニュアルが更新されていませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 5.5.4 で $escape オプションが追加されています。)</p><p>この動作を勘違いしていたので、ちょっと整理しておきます。<br /> <br /> </p> <div class="section"> <h4>前提</h4> <p>以下 fputcsv/fgetcsv ともにデフォルトの</p> <ul> <li>$delimiter = ","</li> <li>$enclosure = '"'</li> </ul><p>として呼び出した前提で書きます。(説明文中で $delimiter とか $enclosure とか書いても読みづらいと思うので。)</p><p>動作は <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 5.6.0 で、ソースは <a href="https://github.com/php/php-src/blob/4b9535341a/ext/standard/file.c">&#x73FE;&#x6642;&#x70B9;&#x306E; master &#x6700;&#x65B0;&#x7248;</a> を確認しました。</p> </div> <div class="section"> <h4>期待した動作(勘違い)</h4> <p>期待した動作は、</p> <ul> <li>fputcsv を $escape = "\\"(デフォルト)で呼び出した場合、「"」は「\"」として、「\」は「\\」として出力される</li> <li>fgetcsv を $escape = "\\"(デフォルト)で呼び出した場合、「\"」は「"」として、「\\」は「\」として読み込まれる</li> </ul><p>というものです。なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> 4180 の仕様や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a> の動作に合わせるならば、fgetcsv/fputcsv の呼び出し時に $escape = '"' を指定して</p> <ul> <li>fputcsv 時に「"」を「""」として出力する</li> <li>fgetcsv 時に「""」を「"」として読み込む</li> </ul><p>必要がある・・・のだと思っていました。</p> </div> <div class="section"> <h4>実際の動作</h4> <p>実際の動作は fputcsv/fgetcsv ともに、$escape の指定とは関係なく</p> <ul> <li>fputcsv 時に「"」を「""」として出力する</li> <li>fgetcsv 時に「""」を「"」として読み込む</li> </ul><p>の処理が入っています。</p><p>では $escape = "\\" の動作はどういうものかというと、以下のような動作になっている模様です。</p> <ul> <li>fputcsv の $escape は、fputcsv に渡された文字列中の「"」がその文字で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープ済みであることを示す <ul> <li>「"」は通常「""」として出力されるが、「\"」の場合は「\""」とせず「\"」としてそのまま出力される</li> </ul></li> <li>fgetcsv の $escape は、その文字で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープされている場合はフィールド終端の「"」とみなさないよう指示する <ul> <li>「"ab\",cd"」を読み込んだ場合に「ab\"」「cd"」として読み込むのではなく「ab\",cd」として読み込む</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープを解除して「ab",cd」としてくれるわけではない点に注意</li> </ul></li> </ul><p>上記の動作なので、もし「"」を「\"」に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープする仕様で <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> を作成したければ、</p> <ul> <li>あらかじめ「"」を「\"」に置換した上で、fputcsv を $escape = "\\" で呼び出す</li> <li>fgetcsv を $escape = "\\" として呼び出した上で、「\"」を「"」に置換する</li> </ul><p>必要があります。</p><p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> 4180 に従った <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> を扱いたいのであれば、fputcsv/fgetcsv ともデフォルトの $escape = "\\" のまま使うのはよろしくないですね。余計な処理が入ってしまうので。</p><p>書いてる途中で気付きましたが、stackoverflow で同じような疑問を挙げてる人がいました。やっぱりわかりにくい動作ですよね。</p> <ul> <li><a href="http://stackoverflow.com/questions/26840256/fgetcsv-fputcsv-escape-parameter-fundamentally-broken">php - fgetcsv/fputcsv $escape parameter fundamentally broken - Stack Overflow</a></li> </ul> </div> <div class="section"> <h4>$escape = '"' を指定した場合の挙動</h4> <p>とまあ $escape の意味合いは期待した動作とは違ったわけですが、$escape = '"' を指定した場合に期待した通りに動いてくれれば問題はないわけで。どうなるか確認すると・・・</p> <ul> <li>fputcsv では「"」を「""」ではなく「"」のまま出力してしまうため NG</li> <li>fgetcsv では $escape の判定よりも「""」の判定が先に来ており、「""」を「"」としてうまく読み込んでくれるため OK</li> </ul><p>という結果でした。</p><p>まあ fputcsv は</p> <ul> <li>そもそも <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 5.5.4 まで $escape オプションがなかった</li> <li>改行を <a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> 4180 で決められている CRLF ではなく、LF で出力してしまう</li> <li>自前で同じ処理を書くのもわりと簡単</li> </ul><p>ということで、自前で実装するケースも少なくなかったところではあるのですが・・・<a href="http://git.php.net/?p=php-src.git;a=commit;h=2139d2702d26e62f220f24e268d8ea1e09a9ee64">&#x30B3;&#x30DF;&#x30C3;&#x30C8;&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;</a> を見ると <a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> 4180 に対応できるよう $escape オプションが追加されたようなのに、<del datetime="2014-12-15T01:52:30+09:00">結局状況が変わってないのがちょっと残念ですね。</del></p><p><span class="deco" style="font-weight:bold;">(追記)</span><br /> 書いた後で気付いたんですが、$escape の意図に沿って使うのであれば、あらかじめ「"」を「""」に置換した上で、$escape = '"' を指定して fputcsv を呼べばいいですね。<br /> <span class="deco" style="font-weight:bold;">(追記ここまで)</span><br /> </p> </div> <div class="section"> <h4>keboola/<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a> の動作は?</h4> <p>Composer で <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> を扱うライブラリでは、keboola/<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a> というのが人気らしいです。</p> <ul> <li><a href="https://packagist.org/packages/keboola/csv">keboola/csv - Packagist</a></li> </ul><p>この実装(1.1.3)を確認したところ、</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> の読み込み <ul> <li>fgetcsv を使用</li> <li>コンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タに $escapedBy を渡すことで $escape オプションを変更可。デフォルトでは chr(0) が使われる</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> の出力 <ul> <li>自前で処理を行っている</li> <li>「"」がある場合は「""」にして出力する形</li> <li>改行コードは LF 固定</li> </ul></li> </ul><p>ということで、「どうせフィールドの末尾に \0 なんて入らないよ」というのであればデフォルトのまま、そうでないならば $escapedBy = '"' として使用すればいいでしょう。(改行コード LF が許容できるならですが。)</p><p>ライブラリに頼りたくない&自前で実装したくない場合は、これを見習って fputcsv で $escpae = "\0" を指定しても実用上問題はない気がしますね。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>の設定について</h4> <p>ただ、keboola/<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a> を使えばそれで OK ということはなく、マルチバイト文字には注意は必要です。fgetcsv は内部で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>の情報を使ってマルチバイト文字の境界を調べるので、適切な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>を設定しましょう。</p><p>適切な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>というのは・・・ちょっと乱暴ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> を使ってる人であれば、基本的に C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>でいいんじゃないかと思っています。理由を以下に 3 つ挙げます。</p> <div class="section"> <h5>理由その1: どこでも使える</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>を ja_JP.<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> にしている例を見かけますが、en_US.<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> じゃないと入っていない環境もあったりしますし、変に細かい指定をしてしまうと可搬性が下がってしまいます。C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>ならどこでも使えるのでその点では安心です。</p><p><a href="http://blog.hatena.ne.jp/moriyoshi/">id:moriyoshi</a> が fgetcsv が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>に依存している理由(これを読むと納得せざるを得ない)とともに C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>を使う場合の注意を書いてくれていて、</p> <ul> <li><a href="http://d.hatena.ne.jp/moriyoshi/20090317/1237269553">&#x306A;&#x305C;PHP&#x306E;fgetcsv()&#x306F;&#x30ED;&#x30AB;&#x30FC;&#x30EB;&#x4F9D;&#x5B58;&#x3068;&#x3044;&#x3046;&#x7CDE;&#x4ED5;&#x69D8;&#x306A;&#x306E;&#x304B; - muddy brown thang</a></li> </ul> <blockquote> <p>ただし "C" <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%AB%A1%BC%A5%EB">ロカール</a>では portable characters 以外での標準関数の挙動は未定義なので、libcによってはうまく動かないかも。</p> </blockquote> <p>とのことなので、C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>で portable characters 以外の文字を 1 バイトとして扱ってくれない例を調べてみたのですが、</p> <ul> <li><a href="http://stackoverflow.com/questions/15649165/behavior-of-extended-bytes-characters-in-c-posix-locale">Behavior of extended bytes/characters in C/POSIX locale - Stack Overflow</a></li> </ul><p>によると <a class="keyword" href="http://d.hatena.ne.jp/keyword/Plan%209">Plan 9</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Minix">Minix</a>、*<a class="keyword" href="http://d.hatena.ne.jp/keyword/BSD">BSD</a> family あたりのようです。このあたりの環境でも使用する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を書く場合は C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>以外にしましょう。</p> </div> <div class="section"> <h5>理由その2: 文字境界を気にする必要はあまりない</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> 4180 における <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> 上でのメタキャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タは</p> <ul> <li>LF (U+000A)</li> <li>CR (U+000D)</li> <li>「"」(U+0022)</li> <li>「,」(U+002C)</li> </ul><p>の 4 つなので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> だろうと <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> だろうと 2 バイト目以降に出現しない文字です。「"」を「""」で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしている限りは 1 バイト単位で扱っても問題ありません。</p><p>一方「\」(U+005C) は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> の 2 バイト目に出現します(<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> の 2 バイト目以降には出現しない文字です)ので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> でかつ「"」が「\"」で表現された <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> ファイルを読む場合だけ文字境界に注意が必要です。とはいえ、現在の <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> ではフィルタが使えるので、あらかじめ <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> に変換して読み込んでしまえば問題ありません。以下に例がありました。</p> <ul> <li><a href="http://d.hatena.ne.jp/hnw/20090317">&#x5DE8;&#x5927;&#x306A;SJIS&#x306E;CSV&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;fgetcsv&#x95A2;&#x6570;&#x3067;&#x51E6;&#x7406;&#x3059;&#x308B; - hnw&#x306E;&#x65E5;&#x8A18;</a> <ul> <li>ここで使っている Stream_Filter_Mbstring を Composer で使えるようにしている方もいました。</li> <li><a href="https://github.com/xcezx/Stream_Filter_Mbstring">xcezx/Stream_Filter_Mbstring</a></li> </ul></li> </ul> </div> <div class="section"> <h5>理由その3: マルチバイトの処理がバグってそう?</h5> <p>もう一つ C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>を勧める理由があって。$escape = "\\" ではマルチバイトの扱いにバグありそうなのです。</p> <ul> <li><a href="http://blog.fkoji.com/2012/03161706.html">PHP&#x306E;fgetcsv&#x3067;&#x3046;&#x307E;&#x304F;&#x8AAD;&#x307F;&#x8FBC;&#x3081;&#x306A;&#x3044;&#x30B1;&#x30FC;&#x30B9; - F.Ko-Ji&#x306E;&#x300C;&#x4E00;&#x79D2;&#x5F8C;&#x306F;&#x672A;&#x6765;&#x300D;</a></li> </ul><p>ここで「1,"\あ",おはよう」が読めない例が挙がっていますが、ソースを見ると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープ文字の直後であることを示す state=1 がマルチバイトを読んだときに解除されず、シングルバイトの文字に出会った時に始めて処理されるようになっていそう(「1,"あ\",おはよう」と書いたのと同じような動作になっていそう)でした。C <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>ならこの動作は回避できます。<br /> (上のほうにも書きましたが、$escape = '"' の場合は $escape の判定よりも「""」の判定が先に来ているので、この影響を受けません。)</p> </div> </div> <div class="section"> <h4>蛇足:「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a> で開いた時におかしくなるんだけど」と言われたら</h4> <p>蛇足ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> ファイルに「0123」のようなコードを出力していたとしても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a> で開くと「123」になったりするので、「なんとかならないの?」と言われることもわりとあります。</p><p>この場合は「'0123」のように文字列型であることを明示したり「="0123"」のように計算式を埋め込んだり、といった胡散臭い対策が知られてますが、人間が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a> で開くのが目的なら .xls やら .xlsx を出力したほうがいいんじゃないかと思います。</p> </div> <div class="section"> <h4>2014/12/16 追記</h4> <p>ソースを読み返してみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>が合っていなかった場合(mblen が -1 を返した場合)もシングルバイトの文字として処理しているので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> の <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a> ファイルを $escape = "\\" で読む場合を除いては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>が合っていなくてもうまく読めるケースがほとんどのような気がします。というかこれ以外のケースで問題になるケースが思いつかない・・・。</p><p>そのわりに「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B1%A1%BC%A5%EB">ロケール</a>を設定したらうまくいった」と書いている人がわりと多いので、何か勘違いしているかもしれません。余裕のある時にもうちょっと調べてみます。</p> </div> Sun, 14 Dec 2014 01:29:42 +0900 hatenablog://entry/17680117126982585324 PHP Laravel Homestead の SSH が 2 分に一度固まる問題 https://miau.hatenablog.com/entry/20141209/1418136717 <p>最近プライベートで仕事を頼まれてて <a href="http://laravel.com/">Laravel</a> を使っているんですが、この開発用 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Vagrant">Vagrant</a> box である <a href="http://http://laravel.com/docs/4.2/homestead">Homestead</a> に <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSH">SSH</a> で接続すると、たまにターミナルの応答がなくなることがありました。<br /> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 上の <a class="keyword" href="http://d.hatena.ne.jp/keyword/VirtualBox">VirtualBox</a> 4.3.12 での話。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 上の <a class="keyword" href="http://d.hatena.ne.jp/keyword/VirtualBox">VirtualBox</a> では問題は再現しませんでした。)</p><p>地味にイラッとする感じなので、とりあえず簡単に回避策を調べてみました。<br /> <br /> </p> <div class="section"> <h4>調査</h4> <p>まずは</p> <pre class="code" data-lang="" data-unlink>php -r &#39;$c = 0; $last = microtime(true); while (1) { $now = microtime(true); printf(&#34;%4d: %f\n&#34;, $c++, $now - $last); $last = $now; sleep(1); }&#39;</pre><p>みたいなコマンドを実行して、どれくらいの間隔で発生しているかと、OS 全体が固まってるのか応答がなくなっているだけなのか調べてみました。</p><p>応答がなくなっている間も出力は 1 秒間隔に行われるようなので、OS 全体が固まってるわけではなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSH">SSH</a> の応答がなくなっているだけの模様。また、応答がなくなるのは 120 秒間隔であることがわかりました。</p><p>次にサービスを落としていって確認すると、どうも puppet サービスが原因のようで。service puppet start 時にもターミナルが固まる現象が見られたので、strace で動作を見てみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a> サーバ(10.0.2.3) に puppet という名前の A レコードと AAAA レコードを問い合わせている間にターミナルが固まっている様子でした。</p><p>試しに</p> <pre class="code" data-lang="" data-unlink>dig puppet</pre><p>とやってみたら、これだけでもターミナルが固まるようですので、Homestead や puppet というよりは <a class="keyword" href="http://d.hatena.ne.jp/keyword/VirtualBox">VirtualBox</a> の <a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a> まわりの問題なんでしょうね。</p> </div> <div class="section"> <h4>回避策</h4> <p>puppet のこともよくわからないので適切な解決策かはわからないのですが、</p> <pre class="code" data-lang="" data-unlink>sudo service puppet stop</pre><p>で止めてしまえばターミナルは固まらなくなりました。/etc/hosts で puppet を <a class="keyword" href="http://d.hatena.ne.jp/keyword/127.0.0.1">127.0.0.1</a> に向ける等の対策でもよいみたいです。</p><p>・・とまあ簡単な対応ですが、気になっていた挙動がなくなってすっきりしました。もっと適切な対応方法がある場合は教えてくださいませ。</p> </div> Tue, 09 Dec 2014 23:51:57 +0900 hatenablog://entry/17680117126982585384 謎のリクエスト「88952634」 https://miau.hatenablog.com/entry/20141020/1413823596 <p>今運用をお手伝いしているサイトでログを監視していると、パラメータに「88952634」が指定された謎のリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トが来ることがあります。</p><p>この数字で検索をかけると、被害に遭った大量のサイトが出てくるし、Q&amp;A サイトに「このリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ト何?」という質問が挙がっていたりもします。</p> <ul> <li><a href="http://sns.cs-cart.jp/answer/question/view/id_49/">&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x767B;&#x9332;&#x306B;&#x3064;&#x3044;&#x3066; &raquo; CS-Cart&#x60C5;&#x5831;&#x3092;&#x4EA4;&#x63DB;&#x3057;&#x3088;&#x3046;&#xFF01;</a></li> <li><a href="http://oshiete.goo.ne.jp/qa/8728453.html">cgi&#x3078;&#x306E;&#x30A2;&#x30BF;&#x30C3;&#x30AF;&#xFF1F; - &#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AF;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3; - &#x6559;&#x3048;&#x3066;&#xFF01;goo</a></li> </ul><p>パラメータは「88952634' and 's'='s」みたいになっていることもあるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>検査ツールの類によるアクセスなのは間違いないと思うんですが、具体的にどんなツールか気になったので調べてみました。<br /> <br /> </p> <div class="section"> <h4>結論</h4> <p>先に結論を書いておくと、Safe3WVS(Safe3 Web <a class="keyword" href="http://d.hatena.ne.jp/keyword/Vulnerability">Vulnerability</a> Scanner)という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>検査ツールによるものだと思われます。</p> <ul> <li><a href="http://www.cnblogs.com/Safe3/archive/2011/08/05/2128175.html">Safe3 Web&#x6F0F;&#x6D1E;&#x626B;&#x63CF;&#x7CFB;&#x7EDF; v9.6&#x514D;&#x8D39;&#x7248; - Safe3 - &#x535A;&#x5BA2;&#x56ED;</a></li> </ul><p>このページにリリースノートがありますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A1%BC%A5%F3%A5%B7%A5%E7%A5%C3%A5%C8">スクリーンショット</a>で「88952634」という数字が使われているのが確認できます。</p> </div> <div class="section"> <h4>Safe3 について</h4> <p>上記ツールの開発元は Safe3 という会社のようで。公式ページは <a href="http://www.safe3.com.cn/">http://www.safe3.com.cn/</a> のはずですけど、改装中?なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Internet%20Archive">Internet Archive</a> で見るのがよさそうです。</p> <ul> <li><a href="https://web.archive.org/web/20131020004607/http://safe3.com.cn/">&#x5B89;&#x5168;&#x4F1E;&#x7F51;&#x7EDC; - &#x503C;&#x5F97;&#x4FE1;&#x8D56;&#x7684;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x987E;&#x95EE;&#xFF01;</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Internet%20Archive">Internet Archive</a>)</li> </ul><p>セキュリティ関係のサービスを行っている会社とのこと。</p><p>現在は QQ空&#x95f4;(Q-Zone)を使って公報活動を行っていそうです。</p> <ul> <li><a href="http://88952634.qzone.qq.com/">http://88952634.qzone.qq.com/</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>を見るとわかるように、88952634 という数字はこの会社が使っている QQ number(<a href="http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%B3%E3%82%BB%E3%83%B3%E3%83%88QQ">&#x30C6;&#x30F3;&#x30BB;&#x30F3;&#x30C8;QQ</a> を使用する時に使われる ID)のようです。試しに QQ に利用登録してみたのですが、勝手に発番されるものなので、この数字自体に何か意味があるわけではなさそうです。</p> </div> <div class="section"> <h4>ツールについて</h4> <p>この Safe3 という会社、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code と <a class="keyword" href="http://d.hatena.ne.jp/keyword/SourceForge">SourceForge</a> でいくつかセキュリティ関連のツールを配布しているみたいです。<br /> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code や <a class="keyword" href="http://d.hatena.ne.jp/keyword/SourceForge">SourceForge</a> に置いてるわりにソースは公開されていませんが・・・)</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code <ul> <li>Safe3WAF(Safe3 Web Application <a class="keyword" href="http://d.hatena.ne.jp/keyword/Firewall">Firewall</a>) <ul> <li><a href="http://code.google.com/p/safe3waf/">http://code.google.com/p/safe3waf/</a></li> </ul></li> <li>Safe3WVS(Safe3 Web <a class="keyword" href="http://d.hatena.ne.jp/keyword/Vulnerability">Vulnerability</a> Scanner) ※バイナリ配布もなし <ul> <li><a href="http://code.google.com/p/safe3wvs/">http://code.google.com/p/safe3wvs/</a></li> </ul></li> <li>Safe3SI(Safe3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Sql">Sql</a> Injection Tool) ※バイナリ配布もなし <ul> <li><a href="http://code.google.com/p/safe3si/">http://code.google.com/p/safe3si/</a></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/SourceForge">SourceForge</a> <ul> <li>Safe3WVS(Safe3 Web <a class="keyword" href="http://d.hatena.ne.jp/keyword/Vulnerability">Vulnerability</a> Scanner) <ul> <li><a href="http://sourceforge.net/projects/safe3wvs/">http://sourceforge.net/projects/safe3wvs/</a></li> </ul></li> <li>Safe3SI(Safe3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a> Injector) <ul> <li><a href="http://sourceforge.net/projects/safe3si/">http://sourceforge.net/projects/safe3si/</a></li> </ul></li> </ul></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SourceForge">SourceForge</a> のアップロード者は <a href="http://sourceforge.net/u/safe3/profile/">David Shee</a> という人物のようで、この名前(や「Safe3」の文字列)も被害サイトでたまに見かけました。</p><p>せっかくなので Safe3WVS を実際に動かしてみたのですが(ブラウザのスタートページを hao123 に変えられたりするので、捨てていい <a class="keyword" href="http://d.hatena.ne.jp/keyword/VM">VM</a> 等で試しましょう)、9.0 無料版だと GET での <a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a> Injection のチェックしかできないせいか、88952634 のリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トは再現できませんでした。残念。</p><p>なので Safe3WVS 以外のツールによるアクセスの可能性も残っていますが、とりあえず目星がついてすっきりしたので調査はこの辺りで終了、と。</p> </div> Mon, 20 Oct 2014 01:46:36 +0900 hatenablog://entry/17680117126982585422 ITサービスマネージャ(試験) https://miau.hatenablog.com/entry/20141019/1413739327 <p>去年に続いてITサービスマネージャを受験してきましたので、例によって色々メモです。<br /> <br /> </p> <div class="section"> <h4>今回の対策本など</h4> <p>まず <a href="http://d.hatena.ne.jp/miau/20131022/1382462508">&#x524D;&#x56DE;&#x306E;&#x53D7;&#x9A13;&#x6642;</a> に使った本をさらっと読んで、知識面の復習をして。</p><p>今回は午後IIに集中したかったので、この本を購入。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4872689186/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51PDuedXLDL._SL160_.jpg" class="hatena-asin-detail-image" alt="ITサービスマネージャ合格論文の書き方・事例集 第3版 (情報処理技術者試験対策書)" title="ITサービスマネージャ合格論文の書き方・事例集 第3版 (情報処理技術者試験対策書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4872689186/hatena-blog-22/">ITサービスマネージャ合格論文の書き方・事例集 第3版 (情報処理技術者試験対策書)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 粕淵卓,庄司智浩,鈴木久,長嶋仁,森脇慎一郎,岡山昌二</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2012/07/02</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4872689186/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>H19(2007)〜H23(2011)の 5 年分についてサンプル論文が載ってる。H21(2009)から試験制度が変わってるわけだし、H21〜H25 のものが載った改定版でも出てくれれば完璧だったんだけど。<br /> サンプル論文は「読者が材料として使えるように色々と情報を盛り込む」というスタンス。こういう方針がはっきりしているのはいい。</p><p>この試験は何度も受けているので過去問で練習しててもどうも見覚えがあって、初見の問題でどの程度書けるようになっているか判断できなくなってきたので、オリジナル問題が載っている本も買ってみた。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487268950X/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51GXXemqgqL._SL160_.jpg" class="hatena-asin-detail-image" alt="ITサービスマネージャ分野別予想問題集 (情報処理技術者試験対策書)" title="ITサービスマネージャ分野別予想問題集 (情報処理技術者試験対策書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487268950X/hatena-blog-22/">ITサービスマネージャ分野別予想問題集 (情報処理技術者試験対策書)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a>教育研究開発部</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/08/16</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/487268950X/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>午後IIの問題は10問載ってて、うち8問が完全なオリジナル?解答のポイントは載っているけど、解答例がないものもあるのでそこは要注意。</p><p>あとは、ネットで対策を調べてたら <a href="http://ikura.2ch.sc/test/read.cgi/lic/1382260864/">&#x3010;&#x30EF;&#x30AB;&#x30E4;&#x30DE;&#x30F3;&#x3011;IT&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x30DE;&#x30CD;&#x30FC;&#x30B8;&#x30E3; Part4</a> なんてスレがあって。<a href="http://ikura.2ch.sc/test/read.cgi/lic/1382260864/389">&gt;&gt;389</a> で紹介されてた以下の二冊を試験前日に書ってさらっと読んだり。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/482228381X/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51yv-ajt3QL._SL160_.jpg" class="hatena-asin-detail-image" alt="システムはなぜダウンするのか" title="システムはなぜダウンするのか"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/482228381X/hatena-blog-22/">システムはなぜダウンするのか</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 大和田尚孝,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%B7%D0%A5%B3%A5%F3%A5%D4%A5%E5%A1%BC%A5%BF">日経コンピュータ</a></li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%B7%D0BP">日経BP</a>社</li><li><span class="hatena-asin-detail-label">発売日:</span> 2009/01/22</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><span class="hatena-asin-detail-label">購入</span>: 24人 <span class="hatena-asin-detail-label">クリック</span>: 345回</li><li><a href="http://d.hatena.ne.jp/asin/482228381X/hatena-blog-22" target="_blank">この商品を含むブログ (45件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>こちらは障害の事例がたくさん載っているので、確かに障害に関するネタ出しには使えそう。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798132608/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51T7c-UcxiL._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)" title="情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798132608/hatena-blog-22/">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> ITのプロ46,三好康之,秋田智紀,佐久間賢次,藤田章康</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2">翔泳社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/07/23</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22" target="_blank">この商品を含むブログ (8件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>複数の試験区分を並行して学習することを勧めていたり、もっと早く読んでおいたら役に立ったかも、と思える本。<br /> 午後II の問題を読み込むことを重視してる。あとなぜか<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%B5%CC%DA%BA%E446">乃木坂46</a>。</p><p>その他、</p> <ul> <li><a href="https://www.ipa.go.jp/sec/reports/20140513.html">&#x91CD;&#x8981;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x969C;&#x5BB3;&#x60C5;&#x5831;&#x306E;&#x5206;&#x6790;&#x306B;&#x57FA;&#x3065;&#x304F;&#x300C;&#x60C5;&#x5831;&#x51E6;&#x7406;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x9AD8;&#x4FE1;&#x983C;&#x5316;&#x6559;&#x8A13;&#x96C6;&#xFF08;IT&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x7DE8;&#xFF09;&#x300D;&#x3000;&#x301C;&#x969C;&#x5BB3;&#x306E;&#x518D;&#x767A;&#x9632;&#x6B62;&#x306E;&#x305F;&#x3081;&#x3001;&#x696D;&#x754C;&#x3092;&#x8D8A;&#x3048;&#x3066;&#x5E45;&#x5E83;&#x304F;&#x969C;&#x5BB3;&#x60C5;&#x5831;&#x3068;&#x5BFE;&#x7B56;&#x3092;&#x5171;&#x6709;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x306E;&#x69CB;&#x7BC9;&#x306B;&#x5411;&#x3051;&#x3066;&#x301C;&#xFF1A;IPA &#x72EC;&#x7ACB;&#x884C;&#x653F;&#x6CD5;&#x4EBA; &#x60C5;&#x5831;&#x51E6;&#x7406;&#x63A8;&#x9032;&#x6A5F;&#x69CB;</a></li> </ul><p>この資料も読んでみたり。「教訓例:待機系システムへの切替えが失敗する原因一覧」とか、イメージしやすくてすごくいいと思うので、こんな図がもっと増えるといいな。</p> </div> <div class="section"> <h4>勉強っぷり</h4> <p>試験前の 1 ヶ月を勉強期間に設定して。平日は体調悪かったりで勉強できない日も多かったけど、休日はちゃんと図書館に籠って勉強してた。</p><p>午後II は H19(2007)〜H25(2013)の 7 年分でひととおりで骨子を考えたり、設問アの前半を書く練習をしたり。実際に二時間かけて論文を書いたのは前日に一回のみ。</p><p>午前IIの対策は、通勤中に</p> <ul> <li><a href="http://www.k4.dion.ne.jp/~type_f/">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x52C9;&#x5F37;&#x3092;&#x3084;&#x308A;&#x76F4;&#x3057;&#x3000;&minus;IT&#x30D1;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3001;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3001;&#x9AD8;&#x5EA6;&#x8A66;&#x9A13;&#x306E;&#x904E;&#x53BB;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&minus;</a></li> </ul><p>このサイトで過去問を 2 年分解いたくらい。このサイトは高度試験の解説がちゃんと載ってるので助かる。(たまに誤字や解説の間違いもあるけど・・・)</p><p>午後Iの対策は、<a href="http://d.hatena.ne.jp/asin/4872689437/hatena-blog-22">2013 ITサービスマネージャ「専門知識+午後問題」の重点対策 (情報処理技術者試験対策書)</a> に載っていた設問パターンを読んだのと、前回受験時の注意点</p> <blockquote> <p>午後Iで間違えるパターンは、汎用的な対策を問われている場面で個別の対策を答えてしまっているのが多かった。マネージャとしてプロセスを改善するつもりで答えることを意識すればいいみたい。</p> </blockquote> <p>を思い出しておいた程度。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%C0%BC%A3%B3%D8%B1%A1%B9%E2%C5%F9%B3%D8%B9%BB">明治学院高等学校</a>@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%E2%CE%D8%C2%E6">高輪台</a>。ここ来るの何度目だろ。</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 79%、実際に採点すると 88% で間題なし。やっぱり過去問やってれば大半は解ける感じ。</p> </div> <div class="section"> <h5>午後I</h5> <p>去年もそうだったけど、慎重に解いてたら時間が足りなくなってしまった。問題数が少ないから、一問答えられなかったのは結構痛い。<br /> 午後Iの勉強をしておけば解答の勘所がわかって多少マシだったかもしれないけど、やったからと言って大幅に得点が変わったりはしない気もする。もし今回通過ラインだったら、次回もこれくらいの対策でよさげ。</p> </div> <div class="section"> <h5>午後II</h5> <p>テーマは移行と障害なので、例年に比べると 2 問とも多少は書きやすいテーマ。<br /> とりあえず問2「ITサービスの障害による業務への影響拡大の再発防止について」を選んだ・・・ところまでは良かったんだけど。骨子を考えるのに 30 分使ってしまった上、「論述の対象とするITサービスの概要」も練習していたのとはフォーマットが違ってちょって手こずったり。チーム名をどう表現するのがわかりやすいか、なんて考えてなかったよ・・・。<br /> なんとか時間内に最低限の文字数は書いたけど、文のまとまりは悪いし、「したした論文」だし、マネージャーの視点がどうとか考える余裕がなかったし、システムの複雑化っていう状況も盛り込めてない・・・のでダメそう。文字数を数える余裕もなかったけど、ア: 700 字、イ: 900 字、ウ: 600 字 くらい。(ウは最終行を「以上」で水増しした)</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <p>今回は論文を中心に対策してきたつもりだけど、あいかわらずいい論文が書けない。</p><p>個人的には「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>は、対象者像に合致している人にはちゃんと解ける問題が出る」という印象があって。ここ数年は運用に近い経験を積んでいるので、できれば想像で作った事例ではなく、実務経験をベースに論文を組み立てたいという思いがあったのだけど、今の運用はマネジメントがそれほどきっちりしていない(見えてない部分で何かやってるかもしれないけど)ので、「あらかじめ備えておいたけど問題があった」みたいな手ごろなレベルの経験がなかなか書けない。</p><p>そんなわけで、次回は <a href="http://d.hatena.ne.jp/asin/4798132608/hatena-blog-22">情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS)</a> に書いてたみたいに、実務ベースで組み立てるんじゃなくて、想像で事例を作っていこうかな、と考えているところ。</p><p>学習のスタンスもこの本に従って午後IIの問題から入ってみようかなと。前回は「午後Iがネタの宝庫だ」みたいな意見に従って午後Iを解いていたけれど、どうもピンとこなくて。ところが今回午後IIをある程度解いてから午後Iの問題を解いてみると、確かにこれはネタになるなと思えたので。午後IIをひととおり解く→午後Iを解きながら午後IIの準備をブラッシュアップ、のイメージで。</p><p>もう一つ、たまに試験のことを思い出すように <a class="keyword" href="http://d.hatena.ne.jp/keyword/2ch">2ch</a> のスレもヲチしよう。</p> </div> <div class="section"> <h4>(2014-12-20 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 88.00点 午後I得点 64点 午後II評価ランク B</pre><p>テーマが書きやすかったおかげで前回の C よりはマシでした、と。</p> </div> Sun, 19 Oct 2014 02:22:07 +0900 hatenablog://entry/17680117126982585466 試験 Solr検索クエリの(たぶん)正しいエスケープ https://miau.hatenablog.com/entry/20140705/1404564644 <p>Solr で検索するときの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープ方法を調べていたんですが、ちゃんと実装&説明されているケースが見あたらなかったので、自分なりに説明を書いておきます。<br /> <br /> </p> <div class="section"> <h4>想定するケース</h4> <p>ユーザが入力した文字列 str を使って、</p> <pre class="code" data-lang="" data-unlink>query = &#34;title:&#34; + escape(str);</pre><p>のように検索式を組み立てる場合に、その文字列自体で検索するにはどのように<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープすればいいかを考えます。デフォルトのクエリパーサの動作しか調べていませんので、別のクエリパーサ(DisMax 等?)を使っている場合は何か変更が必要かもしれません。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープの方法</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープは「\」を直前に挿入する前提で説明します。ダブルクォートで囲むことでも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>を解釈させなくすることは可能ですが、フレーズ検索になってしまって期待とは違う結果が返ってしまうこともあるでしょうし、フレーズ検索の内部でも結局「"」の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープは必要になりますので。</p><p><a href="http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java?revision=1603752&view=markup#l571">SolrQueryParserBase &#x306E;&#x5B9F;&#x88C5;</a> を見ると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープが不要な文字を「\」で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープした場合、例えば「\あ」とした場合は「あ」そのものとして解釈されるようです。\uXXXX による<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープも解釈してくれるようですが、特にそうする必要もないので「\」を使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープを使えばいいでしょう。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープの対象</h4> <p>以下の 3 つを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープする必要があります。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープが不要な文字を「\」で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしても問題ないので、極端な話をしてしまうと、全ての文字を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしてしまっても問題ないといえばないです。</p> <div class="section"> <h5>(1) <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a></h5> <p>Solr <a class="keyword" href="http://d.hatena.ne.jp/keyword/Wiki">Wiki</a> に載っている情報です。</p> <ul> <li><a href="https://wiki.apache.org/solr/SolrQuerySyntax">SolrQuerySyntax - Solr Wiki</a></li> </ul> <blockquote> <p>Certain characters are special (<a href="http://lucene.apache.org/java/3_6_0/queryparsersyntax.html#Escaping.2520Special.2520Characters">pre-4.0</a>) or (<a href="http://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Escaping%20Special%20Characters">4.0+</a>) and those characters need to be escaped using quotes or a backslash if you want them to be treated as literals.</p> </blockquote> <p>ということで、Solr 4.0 以降では</p> <pre class="code" data-lang="" data-unlink>+ - &amp;&amp; || ! ( ) { } [ ] ^ &#34; ~ * ? : \ /</pre><p>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープが必要です。Solr 4.0 から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>が使えるようになって「/」の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープも必要になっているんですが、最近書かれた記事でもこれが足りないものは結構ありました。</p><p>ちなみに、「&&」「||」の 2 つを「\&&」「\||」に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしている実装を見かけて「この実装だと『&&&』が入力された場合に『\&&&』になる(『&&』が残る)から SyntaxError になるのでは?」とも思ったのですが、間に空白がないと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>ンとして扱われないので問題なさそうでした。</p> </div> <div class="section"> <h5>(2) 空白文字</h5> <p>ユーザが「a b」を入力した場合、そのまま文字列を組み立てると「title:a b」となり、df(デフォルト検索フィールド)が「text」、q.op(デフォルト検索式)が「OR」の場合は「title:a OR text:b」の意味になります。たぶんこれは期待した結果ではないと思うので、空白も<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしましょう。</p><p>空白として扱われる文字は明言されていないのですが、 <a href="http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/QueryParser.jj?revision=1416025&view=markup#l70">&#x30BD;&#x30FC;&#x30B9;&#x30B3;&#x30FC;&#x30C9;</a> を見ると</p> <pre class="code" data-lang="" data-unlink> | &lt;#_WHITESPACE: ( &#34; &#34; | &#34;\t&#34; | &#34;\n&#34; | &#34;\r&#34; | &#34;\u3000&#34;) &gt;</pre><p>となっていました(U+3000 は全角空白です)ので、この 5 文字を含む形で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしましょう。</p><p>SolrJ の <a href="http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java?revision=1576755&view=markup#l231">ClientUtils.escapeQueryChars</a> は <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isWhitespace%28char%29">Character.isWhitespace</a> を使っており、この 5 文字以外の空白も全て<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 対応の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>が使えるのであれば、これを見習って \s や [:space:] でマッチしたものを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしてしまってもいいでしょう。(実装によって<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープされる文字が違ったりするので、ちゃんとテストして使いましょう。)</p> </div> <div class="section"> <h5>(3) AND/OR/NOT</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>は一切含まれていませんが、「title:AND」とすると</p> <pre class="code" data-lang="" data-unlink>org.apache.solr.common.SolrException: org.apache.solr.search.SyntaxError: Cannot parse &#39;title:AND&#39;: Encountered &#34; &lt;AND&gt; &#34;AND &#34;&#34; at line 1, column 6.</pre><p>のように SyntaxError になってしまいますので、これも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープしておきましょう。</p><p>文字列が「AND」「OR」「NOT」のいずれかと一致する場合は、それぞれ「\AND」「\OR」「\NOT」に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープすればよいです。小文字を含む「and」「And」等はただの文字列として扱われますので、この 3 パターンだけ対応すれば大丈夫です。</p><p>一番対応が漏れやすいと思われる部分で、私も別システムでの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープ実装を見ていなかったらちゃんと実装できていなかったと思います。</p> </div> </div> <div class="section"> <h4>実装例</h4> <p>調査が間に合わなかったので、実際に使っているコードは少々違うのですが・・・。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> で SolrJ を使っているのであれば、AND/OR/NOT に対応するために ClientUtils.escapeQueryChars を軽くラップすれば大丈夫です。</p> <pre class="code lang-java" data-lang="java" data-unlink> <span class="synType">private</span> String escape(String str) { <span class="synStatement">if</span> (<span class="synConstant">&quot;AND&quot;</span>.equals(str) || <span class="synConstant">&quot;OR&quot;</span>.equals(str) || <span class="synConstant">&quot;NOT&quot;</span>.equals(str)) { <span class="synStatement">return</span> <span class="synConstant">&quot;</span><span class="synSpecial">\\</span><span class="synConstant">&quot;</span> + str; } <span class="synStatement">return</span> ClientUtils.escapeQueryChars(str); } </pre><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> だとたぶんこんな感じで期待通りに動作します。/u 修飾子を使わないと \s が U+3000 にマッチしないようなので要注意です。</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> <span class="synPreProc">function</span> escape<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">str</span><span class="synSpecial">)</span> <span class="synSpecial">{</span> <span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synIdentifier">preg_match</span><span class="synSpecial">(</span>'<span class="synConstant">/\A(?:AND|OR|NOT)\z/</span>', <span class="synStatement">$</span><span class="synIdentifier">str</span><span class="synSpecial">))</span> <span class="synSpecial">{</span> <span class="synStatement">return</span> '<span class="synSpecial">\\</span>' <span class="synStatement">.</span> <span class="synStatement">$</span><span class="synIdentifier">str</span>; <span class="synSpecial">}</span> <span class="synStatement">return</span> <span class="synIdentifier">preg_replace</span><span class="synSpecial">(</span>'<span class="synConstant">#([+\-&amp;|!(){}[\]^&quot;~*?:</span><span class="synSpecial">\\\\</span><span class="synConstant">/\s])#u</span>', '<span class="synSpecial">\\\\\\</span><span class="synConstant">1</span>', <span class="synStatement">$</span><span class="synIdentifier">str</span><span class="synSpecial">)</span>; <span class="synSpecial">}</span> </pre> </div> <div class="section"> <h4>セキュリティ的にはどうか</h4> <p>正しい(と思われる)<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープ方法を説明してきましたが、クエリの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープに漏れたからといって、それがセキュリティ面で問題になってくることは少ないと思います。操作できるのは検索クエリなので、できるのはせいぜい全ドキュメントをヒットさせることくらいです。(上限値の設定が不適切なら、それはそれでメモリを枯渇させることも可能かもしれません。)</p><p>Solr 4.0 で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>が使えるようになっているので、効率の悪い<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>を実行させて <a class="keyword" href="http://d.hatena.ne.jp/keyword/DoS">DoS</a> に使えないかとも思ったのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DFA">DFA</a> の <a href="http://www.brics.dk/automaton/index.html">dk.brics.automaton</a> が使われているようなので、その心配もありません。</p><p>ただしクライアントライブラリを使わずに自前で Solr サーバにリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを投げていて URL <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>を怠っているような場合は、</p> <pre class="code" data-lang="" data-unlink>aaa&amp;fl=id:&#34;&lt;script&gt;alert();&lt;/script&gt;&#34;</pre><p>といった文字列を渡すことで、</p> <pre class="code" data-lang="" data-unlink>/select?q=aaa&amp;fl=id:&#34;&lt;script&gt;alert();&lt;/script&gt;&#34;</pre><p>のように本来 HTML <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープが不要な項目に HTML を返させて <a class="keyword" href="http://d.hatena.ne.jp/keyword/XSS">XSS</a> を起こすくらいはできるかもしれませんし、本来ユーザに見せるべきでないフィールドの値を返すこともできるかもしれません。自前で実装しているなら、クエリ中の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープなんかよりも先に URL の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>を気をつけたほうがよさそうです。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープすれば十分か</h4> <ul> <li>数値フィールドに数値以外を渡すと「Invalid Number」エラーになる</li> <li>入力値が長すぎると Jetty の「HttpParser Full」エラーになる</li> </ul><p>といった問題があるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープすればそれで OK というわけではないです。バリデーションもちゃんとやっておきましょう。</p> </div> Sat, 05 Jul 2014 21:50:44 +0900 hatenablog://entry/17680117126982585577 Solr Solrのフレーズ検索についてちょっとメモ https://miau.hatenablog.com/entry/20140621/1403337132 <p>最近 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a> Solr を触ってます。基本的に</p> <ul> <li><a href="http://gihyo.jp/book/2014/978-4-7741-6163-1">&#xFF3B;&#x6539;&#x8A02;&#x65B0;&#x7248;&#xFF3D;Apache Solr&#x5165;&#x9580;&#x2015;&#x2015;&#x30AA;&#x30FC;&#x30D7;&#x30F3;&#x30BD;&#x30FC;&#x30B9;&#x5168;&#x6587;&#x691C;&#x7D22;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#xFF1A;&#x66F8;&#x7C4D;&#x6848;&#x5185;&#xFF5C;&#x6280;&#x8853;&#x8A55;&#x8AD6;&#x793E;</a></li> </ul><p>この本を読めば基本的なところはわかるのですが、フレーズ検索のところだけわかりづらかったので、ちょっとメモしておきます。</p><br /> <p>この本の p82〜p83 に検索式の記述方法が載っていて、フレーズ検索の説明は</p> <dl> <dt>検索式の例</dt> <dd>title:"Webプログラミング"</dd> <dt>説明</dt> <dd>2つ以上の単語の出現順序を保証した検索</dd> </dl><p>となっています。出現順序を保証するということは、"Webプログラミング" で検索する例だと「Webプログラミング」や「Webアプリケーションプログラミング」にはヒットするけど「プログラミングWeb」にはヒットしないということだと理解していました。</p><p>じゃあ厳密に「Webプログラミング」の単語を含む場合だけヒットさせたい場合はどうするんだろう?と調べてみると「フレーズ検索を使え」という情報が出てきて、ちょっと混乱してきました。それなら本にも「2つ以上の単語が連続して出現することを保証した検索」とか説明が書いてそうなものだけど。</p><p>図書館で <a href="http://d.hatena.ne.jp/asin/4774127809/hatena-blog-22">Apache Lucene 入門 ~Java・オープンソース・全文検索システムの構築</a> を借りていたので、こっちの説明も見てみます。<br /> p171</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Lucene">Lucene</a>は「フレーズ検索」をサポートする。フレーズ検索というのは,次のようにダブルクオーテーションで2語以上からなる検索質問語をくくって,指定された語が連続して現れるドキュメントを検索するように指示できる機能のことだ:</p> <pre class="code" data-lang="" data-unlink>&#34;Java プログラミング&#34;</pre> </blockquote> <p>あれ?やっぱり連続する部分を検索するの?</p><p>・・・と思ったけど。p190 より。</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Lucene">Lucene</a>のフレーズ検索では,フレーズを構成する語は互いに離れていてもよい。1つのフレーズとみなせる語と語の最大距離をslopと呼び,PhraseQueryのsetSlop()メソッドでフレーズ検索時に許容するslopを設定する。デフォルトのslopは0であり,その場合は,PhraseQueryにadd()メソッドで追加した語が追加した順番に隙間なは現れている Documentが検索される。</p> </blockquote> <p>slopを1以上にすれば連続してなくても検索できるそうで。Solr でもそういう指定が可能なのかはわからないですが、確かにそれなら「出現順序を保証した検索」という説明で正しいみたいです。ちょっとわかりにくいですけどね。</p><p>ということで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Lucene">Lucene</a> 入門を返却する前にメモでした。この本は Solr を使う上では知らなくていい情報も多いのですが、上記のように個々の説明が詳しかったり、スコアの計算がどんな感じになっているか書いてあったりで、参考になりました。</p> Sat, 21 Jun 2014 16:52:12 +0900 hatenablog://entry/17680117126982585640 Solr paizaオンラインハッカソンVol.2 と PHP コード最適化の話 https://miau.hatenablog.com/entry/20140518/1400402668 <ul> <li><a href="https://paiza.jp/poh/paizen">&#x5973;&#x5B50;&#x5927;&#x751F;&#x3068;&#x30DA;&#x30A2;&#x30D7;&#x30ED;&#x3059;&#x308B;&#x3060;&#x3051;&#x306E;&#x7C21;&#x5358;&#x306A;&#x304A;&#x4ED5;&#x4E8B;&#x3067;&#x3059;&#xFF01;&#xFF5C;paiza&#x30AA;&#x30F3;&#x30E9;&#x30A4;&#x30F3;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;Vol.2</a></li> </ul><p>会社の人からこのネタを振られて。「業務で <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> を使ってる身だし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> で最速を目指してみるかー」とやってみたので、そのお話。<br /> <br /> </p> <div class="section"> <h4>さっそくやってみた</h4> <p>30 分くらいでてきとうに解いたところ・・・。</p> <ul> <li><a href="http://paiza.jp/poh/paizen/result/183b12d17d4001bf56c854d4a4a92853">miau&#x3055;&#x3093;&#x306E;&#x63A1;&#x70B9;&#x7D50;&#x679C;[28&#x70B9;]</a></li> </ul> <blockquote> <p>Test case 3 失敗 (出力結果が間違っています) </p> </blockquote> <p>えー?時間切れならともかく、答えが合わないってことは無いと思うんだけどなぁ。</p><p>後に判明したんだけど、</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>は全テストケースで以下の条件を満たします。</p><p>1 ≦ H ≦ 130 ※ 画面縦の区画数<br /> 1 ≦ W ≦ 130 ※ 画面横の区画数<br /> 1 ≦ N ≦ HW ※ <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A3%A5%B8%A5%A7%A5%C3%A5%C8">ウィジェット</a>の個数<br /> 1 ≦ S_i ≦ 300 (1 ≦ i ≦ N) ※ <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A3%A5%B8%A5%A7%A5%C3%A5%C8">ウィジェット</a>縦大きさ<br /> 1 ≦ T_i ≦ 300 (1 ≦ i ≦ N) ※ <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A3%A5%B8%A5%A7%A5%C3%A5%C8">ウィジェット</a>横大きさ</p> </blockquote> <p>「この『1 ≦ S_i ≦ 300 (1 ≦ i ≦ N)』は『1 ≦ S_i ≦ 130 (1 ≦ i ≦ N)』の誤記だよなー」、と勝手に問題を読み換えてたせいでした。チューニングする→答えが合わない、みたいなことを繰り返してるうちに応募受付期間が終ってしまったので、「※130 ではなく 300 です」みたいに明示しておいてくれると嬉しかったなー、とか思いました。</p> </div> <div class="section"> <h4>考えた<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a></h4> <p>今回の問題に興味がある方だけどうぞ。<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> のコード最適化にしか興味がない方は、「最適化」のところまで読み飛ばして大丈夫です。</p> <div class="section"> <h5>ステップ1</h5> <pre class="code" data-lang="" data-unlink>00000 00100 00010 10001 10000</pre><p>こういうホーム画面があるとして。まずは各座標から、右に連続する 0 の個数を数えます。</p> <pre class="code" data-lang="" data-unlink>54321 21021 32101 03210 04321</pre> </div> <div class="section"> <h5>ステップ2</h5> <p>この各列の末尾に<a href="http://ja.wikipedia.org/wiki/%E7%95%AA%E5%85%B5">&#x756A;&#x5175;</a>っぽく 0 を入れた上で、縦方向に</p> <pre class="code" data-lang="" data-unlink>523000 412340 301230 220120 111010</pre><p>と読んでいきます。</p><p>523 という並びは、この列から右向きにこの幅のウィジットが置ける、つまり</p> <pre class="code" data-lang="" data-unlink>00000 00 000</pre><p>といった領域に配置が可能だという意味でした。ここから各列に置ける最大のウィジットの個数を</p> <pre class="code lang-php" data-lang="php" data-unlink>$preCount = [ 1 =<span class="synError">&gt;</span> [3 =<span class="synError">&gt;</span> 1], // 1 列目には高さ 3 のウィジットが 1 つ置ける 2 =<span class="synError">&gt;</span> [3 =<span class="synError">&gt;</span> 1], // 2 列目には高さ 3 のウィジットが 1 つ置ける 3 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 2], // 3 列目には高さ 1 のウィジットが 2 つ置ける 5 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 1], // 5 列目には高さ 1 のウィジットが 1 つ置ける 4 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 1], // 4 列目には高さ 1 のウィジットが 1 つ置ける ] </pre><p>といった形で求めます。これは、各列ごとに 0 が始まった時点での y 座標を覚えておいて、0 が終わった時点での y 座標との差分を求めることで埋めていきます。</p> </div> <div class="section"> <h5>ステップ3</h5> <p>上記のデータ上で「2 列目には高さ 3 のウィジットが 1 つ置ける」となっていても、実際は</p> <ul> <li>高さ 3 のウィジットが 1 つ</li> <li>高さ 2 のウィジットが 2 つ</li> <li>高さ 1 のウィジットが 3 つ</li> </ul><p>置けるので、これを展開して、</p> <pre class="code lang-php" data-lang="php" data-unlink>$count = [ 1 =<span class="synError">&gt;</span> [3 =<span class="synError">&gt;</span> 1, 2 =<span class="synError">&gt;</span> 2, 1 =<span class="synError">&gt;</span> 1], 2 =<span class="synError">&gt;</span> [3 =<span class="synError">&gt;</span> 1, 2 =<span class="synError">&gt;</span> 2, 1 =<span class="synError">&gt;</span> 1], 3 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 2], 4 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 1], 5 =<span class="synError">&gt;</span> [1 =<span class="synError">&gt;</span> 1], ] </pre><p>この形に変えます。</p><p>ある列から見て n 列目にウィジットを置けるというのは、結局幅 n のウィジットを置けるのと同じことなので、$count[$width][$height] は $width x $height のウィジットをいくつ置けるかというデータになります。あとはウィジット毎にこの配列からルックアップするだけ、と。</p><p>これを実装したコードがこれ(最初に投稿したコードではなく、変数名とかをわかりやすく書き換えたもの。)で、</p> <ul> <li><a href="https://gist.github.com/miau/f69653684c084f1f3ccd/383ac4ee2ddaea4212876bc0cf66e6a1eb73e33d">https://gist.github.com/miau/f69653684c084f1f3ccd/383ac4ee2ddaea4212876bc0cf66e6a1eb73e33d</a></li> </ul><p>この状態では</p> <ul> <li><a href="http://paiza.jp/poh/paizen/result/8bbaa2b1b9885fe85f21ddbdcca56a8e">http://paiza.jp/poh/paizen/result/8bbaa2b1b9885fe85f21ddbdcca56a8e</a></li> </ul><p>Test case 7 は 0.12 秒と。(以下 Test case 7 の時間を基準で考えます。)</p><p>もっと効率のいい<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>もあるかもしれませんが、思いつかないのでこれベースで最適化について説明します。</p> </div> </div> <div class="section"> <h4>最適化</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B6%A5%B5%BB%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0">競技プログラミング</a>でも、業務アプリでも、計算のオーダーを減らすことが大切です。O(N^2) で済む処理を O(N^3) で書いたりしていたら、最適化してもほとんど効果はないです。</p><p>十分計算のオーダーが減って、それでもさらに処理を速くしたい場合は、最適化に手を出すことになります。</p><p>最適化については以下の URL に色々と載ってました。</p> <ul> <li><a href="http://d.hatena.ne.jp/koto2/20080524/1211684383">PHP&#x30B3;&#x30FC;&#x30C9;&#x6700;&#x9069;&#x5316;Tips&#x306E;&#x30A6;&#x30BD;&#x3068;&#x672C;&#x5F53;(&#x89E3;&#x8AAC;) - &#x30AB;&#x30BF;&#x30B3;&#x30C8;&#x65E5;&#x8A18;</a> <ul> <li>実例つきでいくつか解説されてます</li> </ul></li> <li><a href="https://gihyo.jp/dev/feature/01/php-optimize">&#x5FB9;&#x5E95;&#x691C;&#x8A3C;&#xFF01;PHP&#x6700;&#x9069;&#x5316;Tips&#xFF1A;&#x7279;&#x96C6;&#xFF5C;gihyo.jp &hellip; &#x6280;&#x8853;&#x8A55;&#x8AD6;&#x793E;</a> <ul> <li>もっと詳しい話。計測や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>についても書かれているのがいいです。</li> </ul></li> </ul><p>遅くならないコードを書く(未定義のローカル変数を参照して warning が出ないように書くとか)のが大切ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> コードを最適化をする上で重要なのは、前者の URL に載っていた</p> <blockquote> <p>39. もとから用意されてる 関数たち を活用しよう。</p> </blockquote> <p>これだと思ってます。</p><p>C のように自前で処理を書いても十分な速度を出せる言語では、最適なデータ構造と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>を自前で実装すればいいのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> でがんばって複雑な処理を書いても実行が遅くなります。<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> の処理を減らして、C で書かれている標準関数をいかにうまく使ってやるかがポイントになります。</p><p>わかりやすい例では、さきほどのコードにあった</p> <pre class="code lang-php" data-lang="php" data-unlink>for ($x = 0; $x <span class="synIdentifier">&lt; $w; $x++) {</span> <span class="synIdentifier"> $map[$h][$x] =</span><span class="synConstant"> 0;</span> <span class="synIdentifier">}</span> </pre><p>この処理は、</p> <pre class="code lang-php" data-lang="php" data-unlink>$map[$h] = array_fill(0, $w, 0); </pre><p>と書けます。こうしたほうが処理が速いですし、可読性も高くなることが多いです。</p><p>さて、さきほどの処理で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DC%A5%C8%A5%EB%A5%CD%A5%C3%A5%AF">ボトルネック</a>になっているのは、実はここ。</p> <pre class="code lang-php" data-lang="php" data-unlink>fscanf(STDIN, '%d', $n); for ($i = 0; $i <span class="synIdentifier">&lt; $n; $i++) {</span> <span class="synIdentifier"> fscanf(STDIN, </span><span class="synConstant">'%d%d'</span><span class="synIdentifier">, $wh, $ww);</span> <span class="synIdentifier"> echo </span><span class="synStatement">isset</span><span class="synIdentifier">($count[$ww][$wh]) ? $count[$ww][$wh] : 0, </span><span class="synConstant">&quot;\n&quot;</span><span class="synIdentifier">;</span> <span class="synIdentifier">}</span> </pre><p>最後に各ウィジットのサイズを読み込んで結果を出力するループですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 側で最大 16900 回</p> <ul> <li>ループの駆動</li> <li>標準入力からの読み込み</li> <li>配列のルックアップ</li> <li>標準出力への書き出し</li> </ul><p>の処理を行っているので、まあ遅いわけです。</p><p>こんな感じに書き換えるとどうでしょうか。</p> <pre class="code lang-php" data-lang="php" data-unlink>fgets(STDIN); $data = stream_get_contents(STDIN); echo preg_replace_callback( '/([0-9]+) ([0-9]+)/S', function($m) use ($count) { return <span class="synStatement">isset</span>($count[$m[2]][$m[1]]) ? $count[$m[2]][$m[1]] : 0; }, $data ); </pre><p>ループの駆動は preg_replace_callback() の内部で行われるようになり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 側で行っている</p> <ul> <li>標準入力からの読み込み</li> <li>標準出力への書き出し</li> </ul><p>も一度ずつしか行われなくなりました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 側で 16900 回行われるのは、配列のルックアップ(と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A1%BC%A5%B8%A5%E3">クロージャ</a>の呼び出しに伴なうオーバーへッド)だけです。<br /> (ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>では S 修飾子 を使ってます。詳しくはこちらを参照。<br />  <a href="http://xoops.hypweb.net/modules/UsersWiki/person/nao-pon/blog/2013-06-27">&#x6B63;&#x898F;&#x8868;&#x73FE;&#x51E6;&#x7406;&#x30A8;&#x30F3;&#x30B8;&#x30F3; PCRE &#x306E; &#x30D1;&#x30FC;&#x30BF;&#x30F3;&#x5206;&#x6790;&#x30B9;&#x30A4;&#x30C3;&#x30C1;&#x306E;&#x6709;&#x52B9;&#x6027;&#x306B;&#x3064;&#x3044;&#x3066; [nao-pon/blog/2013-06-27] - UsersWiki - XOOPS&#x30DE;&#x30CB;&#x30A2;</a>)</p><p>変更後のコード全体は</p> <ul> <li><a href="https://gist.github.com/miau/f69653684c084f1f3ccd/4269fa28a86e6fe415eab0998192dbc94f70c5cc">https://gist.github.com/miau/f69653684c084f1f3ccd/4269fa28a86e6fe415eab0998192dbc94f70c5cc</a></li> </ul><p>これで、結果は・・・</p> <ul> <li><a href="http://paiza.jp/poh/paizen/result/292cc179848685787e496ab6f5f373e2">http://paiza.jp/poh/paizen/result/292cc179848685787e496ab6f5f373e2</a></li> </ul><p>0.12 秒から 0.05 秒になりました。<br /> <span class="deco" style="font-weight:bold;">(2014/05/22 追記)</span><br /> ・・・と偉そうに書いておいてなんですけど、</p> <pre class="code lang-diff" data-lang="diff" data-unlink> fscanf(STDIN, '%d', $n); <span class="synIdentifier">+$out = '';</span> for ($i = 0; $i &lt; $n; $i++) { fscanf(STDIN, '%d%d', $wh, $ww); <span class="synSpecial">- echo isset($count[$ww][$wh]) ? $count[$ww][$wh] : 0, &quot;\n&quot;;</span> <span class="synIdentifier">+ $out .= isset($count[$ww][$wh]) ? $count[$ww][$wh] : '0';</span> <span class="synIdentifier">+ $out .= &quot;\n&quot;;</span> } <span class="synIdentifier">+echo $out;</span> </pre><p>のように出力を一度にするだけでも十分速いですね。ローカルでの計測だと preg_replace_callback() のほうが 0.002 秒くらい速い程度でしたが、環境によってはこちらのほうが早いのかも?<br /> <span class="deco" style="font-weight:bold;">(2014/05/22 追記ここまで)</span></p><p>ダメ押しでもう一つ最適化してみましょう。ステップ1 で 0 の連続を、</p> <pre class="code lang-php" data-lang="php" data-unlink>for ($y = 0; $y <span class="synIdentifier">&lt; $h; $y++) {</span> <span class="synIdentifier"> $</span><span class="synType">width</span><span class="synIdentifier"> =</span><span class="synConstant"> 0;</span> <span class="synIdentifier"> </span><span class="synType">for</span><span class="synIdentifier"> ($x =</span><span class="synConstant"> $w</span><span class="synIdentifier"> - 1; $x &gt;</span>= 0; $x--) { if ($rawMap[$y][$x] == '0') { $map[$y][$x] = ++$width; } else { $map[$y][$x] = $width = 0; } } } </pre><p>のようにして数えてますが、これも標準関数に任せられないでしょうか。残念ながら <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> は今回の用途に使えるような配列関数が充実していないのですが、文字列であれば preg_replace_callback() に任せられます。幸い幅も高さも 130 までで、1 byte に収まりますので、</p> <pre class="code lang-php" data-lang="php" data-unlink>$map = [ ['5', '4', '3', '2', '1'], ['2', '1', '0', '2', '1'], ['3', '2', '1', '0', '1'], ['0', '3', '2', '1', '0'], ['0', '4', '3', '2', '1'], ]; </pre><p>ではなく、</p> <pre class="code lang-php" data-lang="php" data-unlink>$map = &quot;\x05\x04\x03\x02\x01&quot; . &quot;\x02\x01\x00\x02\x01&quot; . &quot;\x03\x02\x01\x00\x01&quot; . &quot;\x00\x03\x02\x01\x00&quot; . &quot;\x00\x04\x03\x02\x01&quot;; </pre><p>この形に持ってしまいましょう。すると、上記部分の処理はこうできます。(左右どちらから数えても同じなので、54321 ではなく 12345 のようにしています。その他細かい変更もあるので詳しくは <a href="https://gist.github.com/miau/f69653684c084f1f3ccd/revisions">diff</a> を見てください。)</p> <pre class="code lang-php" data-lang="php" data-unlink>$chars = &quot;\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\&quot;#\$%<span class="synError">&amp;</span>'()*+,-./0123456789:;<span class="synIdentifier">&lt;=&gt;</span>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82&quot;; $rawMap = preg_replace_callback( '/0+/', function($m) use ($chars, $w) { return substr($chars, 0, strlen($m[0])); }, $rawMap ); </pre><p>コードの最終形は</p> <ul> <li><a href="https://gist.github.com/miau/f69653684c084f1f3ccd/24cfd0b449b0fe2754089ddca65c4485d15a69a6">https://gist.github.com/miau/f69653684c084f1f3ccd/24cfd0b449b0fe2754089ddca65c4485d15a69a6</a></li> </ul><p>これで、結果はこう。</p> <ul> <li><a href="http://paiza.jp/poh/paizen/result/ab1174e7dd0e3a3350228da90220cfce">http://paiza.jp/poh/paizen/result/ab1174e7dd0e3a3350228da90220cfce</a></li> </ul><p>・・・あれ?タイムは変わらず 0.05 秒のままですね・・・。<br /> ローカルでは 0.002 秒くらい速くなってましたし、以前これと同じ処理を書いたときは 0.04 秒になったので、調子がよければ 0.04 秒に乗るんじゃないかと思います。</p><p>とまあこんな感じで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> での最適化は標準関数を組み合わせるパズルみたいになってくるので、個人的にわりと楽しいです。</p> </div> <div class="section"> <h4>最後に</h4> <p>最適化のやり方をいくつか書きましたが、業務では可読性優先で書いています。上記のような最適化をするのは、呼び出し回数が多く、他の人の目に触れることが少ない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>やライブラリの内部だけです。それも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DC%A5%C8%A5%EB%A5%CD%A5%C3%A5%AF">ボトルネック</a>があったであることが判明してからで、上記の例だと 1 つめの最適化はやっても、2 つめは実コードとしては残さないでしょう。</p><p>実際にやった例を載せておきます。</p> <ul> <li><a href="https://gist.github.com/miau/f84374fe13b9a1ef5523">https://gist.github.com/miau/f84374fe13b9a1ef5523</a></li> </ul><p>Doctrine2 で <a class="keyword" href="http://d.hatena.ne.jp/keyword/Oracle">Oracle</a> にクエリを投げる際に使われるパラメータ置換処理(「?」を「:param1」等に書き換える処理)が遅かったので、まさに今回書いた preg_replace_callback() での最適化を行ったのでした。この処理はコールバックが呼ばれる回数が少ないので preg_replace_callback() による最適化は特に有効で、確かこの処理単独で 20 倍くらい速くなった気がします。</p><p>「速くしたいなら拡張モジュールを作れば?」って意見もあるかと守いますが、保守性の問題で手を出していません。元々 <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> しか知らない人でも保守できるように <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> で開発しているわけで、C を書けないと保守できないようだと意味がないので。</p><p>とはいえ、自分で拡張モジュールを作って「やっぱり C で書くと速いよなー」とかなんとか遊んだりはしてました。これをやっておくと最適化するときにある程度処理コストの予想ができるようになるので、知識として知っておいて損はないですね。まあ予想が裏切られることも多いので、最終的には計測が重要ってことになるのですが。</p> </div> Sun, 18 May 2014 17:44:28 +0900 hatenablog://entry/17680117126982585683 PHP ScanSnap S1500 と fi-7160 の比較(2) https://miau.hatenablog.com/entry/20140513/1399996747 <p>ということで、<a href="http://d.hatena.ne.jp/miau/20140512/1399912535">&#x524D;&#x56DE;</a> の続きです。<a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 と fi-7160 で、ぐにょり以外のスキャン時の画質(裏写り、ぼやけ、縦線)を比べてみました。<br /> <br /> </p> <div class="section"> <h4 id="比較その2-裏写り">比較その2: 裏写り</h4> <p>fi-7160 では裏写りが改善しているという噂なので、ここも軽く比べておきます。検証用に中古で買った <a href="https://www.amazon.co.jp/dp/4757523165?tag=hatena-22&amp;linkCode=ogi&amp;th=1&amp;psc=1">咲 Saki (4) (ヤングガンガンコミックス)</a> から、裏写りが目出つコマを抜き出してます。</p><p>まず、<a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 での RAW 画像(↓)。わりとはっきり裏の文字などが見えると思います。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225353" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225353.png" width="419" height="269" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p><p><a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager で出力された画像がこちら(↓)。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225351" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225351.png" width="416" height="268" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> 私の環境では裏写りがずいぶん軽減されて見てるのですが、実際はカラープロファイルを使って色変換をかけているだけで、裏写りを除去する特別な処理が入っているわけではなさそうです。<a class="keyword" href="https://d.hatena.ne.jp/keyword/ImageMagick">ImageMagick</a> で</p> <pre class="code" data-lang="" data-unlink>convert ScanSnap0.jpg -profile &#34;ScanSnap S1500.icm&#34; -profile &#34;sRGB Color Space Profile.icm&#34; scansnap_raw_profile.jpg</pre><p>を実行したのとほぼ同様でした。(.icm は %SYSTEMROOT%\system32\spool\drivers\color からコピーして使っています。)</p><p>次に、fi-7160 で <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi Series を使った場合。RAW 画像はこんな感じ(↓)です。裏写りは <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> の RAW 画像と同じか、やや目立たない程度ですかね。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225343" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225343.png" width="417" height="263" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p><p>ちなみに <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> の RAW 画像と比べると、かなり暗い画像で出力されているのがわかると思います。参考のために RAW 画像の全体像も貼っておきます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225349" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225349_120.jpg" width="120" height="106" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (S1500 の RAW 画像)<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225344" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225344_120.jpg" width="120" height="115" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (fi-7160 の RAW 画像)</p><p>ここからの処理はまだ詳しくは追っていないのですが、<a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> 同様色変換は行っているようです。<a class="keyword" href="https://d.hatena.ne.jp/keyword/ImageMagick">ImageMagick</a> で</p> <pre class="code" data-lang="" data-unlink>convert &#34;ScandAll PRO0.jpg&#34; -profile &#34;SSM_fi-7160.icm&#34; -profile &#34;sRGB Color Space Profile.icm&#34; fi7160_raw_profile.jpg</pre><p>として再現してみました(↓)。少しだけ裏写りが目立たなくなりました。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225342" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225342.png" width="417" height="264" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p><p>これに加えて <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi Series では何かしら変換をかけているようで、最終的に出力される画像はこの状態になります(↓)。私の環境だと判別できない程度に裏写りは消えました。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225340" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225340.png" width="412" height="263" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> Leeyes で平均化フィルタをかけて見ると裏写りした情報も残っているようなので、これも特別に裏写り除去の処理が入っているわけではなく、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>ストを強くする類の補正じゃないかなと思います。</p><p>fi-7160 は TWAIN ドライバが使えるので、BTScan でスキャンしたものも貼っておきます。一つ前の最終形に比べるとやや裏写りが目立つかな、という程度ですね。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513225338" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513225338.png" width="416" height="264" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p><p>結論としては、S1500 よりも fi-7160 のほうが裏写りが減った画像が出力されるけど、光学系で何か工夫しているわけではなく、画像処理が優れているだけなんじゃないかという気がします。<br /> (2024-05-01 追記)<br /> コメントいただいているように fi-7160 では裏当てを白→黒に変えられるので、「光学系で何か工夫しているわけではなく」というのは正しくなかったです。<br /> (2024-05-01 追記ここまで)</p> </div> <div class="section"> <h4 id="比較その3-ぼやけ">比較その3: ぼやけ</h4> <p>前回「ニ行目に色ずれが発生している」として貼ったこの画像ですが。</p> <blockquote> <p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005445" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005445.png" width="294" height="124" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p> </blockquote> <p>その前後の行もぼやけてますよね。fi-7160 で改善しているか見てみましょう。</p><p>まずは見本ということで、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%D9%A5%C3%A5%C9%A5%B9%A5%AD%A5%E3%A5%CA">フラットベッドスキャナ</a>の GT-X820 で、1200 dpi でスキャンした画像です(↓)。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230634" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230634.png" width="800" height="104" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span></p><p>次に <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500。600 dpi でスキャンした時の RAW 画像と最終出力をまとめて貼っちゃいます。ぐにょりが少なそうな部分を選んでいます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230633" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230633.png" width="612" height="78" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑S1500 RAW 画像)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230632" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230632.png" width="616" height="80" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑S1500 <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager 出力)</p><p>やはりぼやけて見えますね。「題」の最後の二画が不鮮明ですし、ひらがなのハネもきれいに見えません。それと RAW 画像の裏写りしている箇所がノイズっぽくなっています。RAW 画像といいつつ <a class="keyword" href="https://d.hatena.ne.jp/keyword/JPEG">JPEG</a> なので仕方ないですね。</p><p>fi-7160 も 600 dpi でスキャンしたものを、前項と同じく 4 種類。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230631" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230631.png" width="614" height="77" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑fi-7160 RAW 画像)<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230630" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230630.png" width="614" height="77" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑fi-7160 RAW 画像の色変換後)<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230629" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230629.png" width="615" height="78" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑fi-7160 <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi Series 出力)<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230628" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230628.png" width="617" height="75" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> (↑fi-7160 BTScan 出力)</p><p>こちらも S1500 と同程度にぼやけています。また、細かい色ずれは上の S1500 の画像よりも多そうです。前回の検証では目立たなかったんですが、黄色っぽい原稿だと目立つんですかね・・・。<br /> この画像だけ見てもわからないとは思いますが、BTScan は TWAIN で取得した画像を <a class="keyword" href="https://d.hatena.ne.jp/keyword/JPEG">JPEG</a> の最高品質で保存しているので、変なノイズが乗ったりしないのは嬉しいです。</p><p>「1200 dpi と 600 dpi で比べてるから不明瞭になるのは当然なのでは?」という疑問もあると思うので、最後に GT-X820 で 600 dpi でスキャンした画像も載せておきます(↓)。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513230626" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513230626.png" width="614" height="79" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></a></span><br /> 同じ 600 dpi でもやっぱり<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%D9%A5%C3%A5%C9%A5%B9%A5%AD%A5%E3%A5%CA">フラットベッドスキャナ</a>ーだと綺麗ですね。まあ 1 ページをスキャンするのに数十秒かかる+1 ページスキャンする度に作業が発生するのは堪えられないので、よほど気に入った本でないと使わないつもりですが。</p> </div> <div class="section"> <h4 id="比較その4-縦線">比較その4?: 縦線</h4> <p>ホコリ等が読み取り部に留まり続けるせいで、RGB いずれかの輝度が縦のラインで常に一定になってしまう現象です。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513234228" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513234228.png" width="480" height="480" loading="lazy" title="" class="hatena-fotolife" style="width:240px" itemprop="image"></a></span><br /> 原稿を移動させる ADF では避けられないものなので、fi-7160 でも発生します。</p><p>発生は避けられなくても検出はできるはずで、fi-7160 では「Software Operation Panel」→「装置設定2」に「縦スジ検知設定」と「縦スジ検知レベル」の設定があります。ということで「有効」「感度-高」にして実験しているんですが、今のところ検知してくれたことはありません・・・。あまり頼りにせず、こまめに清掃するのがよさそうです。</p> </div> <div class="section"> <h4 id="まとめ">まとめ</h4> <p>fi-7160 は <a class="keyword" href="https://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 と比べると</p> <ul> <li>ぐにょりがかなり少なくなっている(ゼロではない)</li> <li>画像の補正がいい感じにかかるので裏写りが目立たない</li> <li>TWAIN 対応なので、劣化のないデータが取り出せる</li> </ul><p>といった利点がありました。(速度が向上したりもしているんですけど、読むのが<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%DC%A5%C8%A5%EB%A5%CD%A5%C3%A5%AF">ボトルネック</a>になっているのでそこは重視していないです。)</p><p>ClearScan に失敗する問題は解消しなかったので、S1500 で文章中心にスキャンしている人が 9 万円近く出して買い換えるほどかというと、そうでもないと思います。マンガ等をスキャンする時には恩恵は受けられるので、こだわり次第では悪くない選択なんじゃないでしょうか。</p> </div> <div class="section"> <h4 id="最後に">最後に</h4> <p>色々とそれっぽいことを書いてきましたが、なにかしら勘違いしている部分もあるかもしれません。何かおかしな点に気付いたらご指摘ください。</p> </div> Tue, 13 May 2014 00:59:07 +0900 hatenablog://entry/17680117126982585822 自炊 ScanSnap S1500 と fi-7160 の比較(1) https://miau.hatenablog.com/entry/20140512/1399912535 <p>最後に <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 と fi-7160 の比較を書いて S1500 の話は終わりにしようと思ったのですが・・・長くなったので二回に分けます。</p><p>まずは <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 の不満点(いわゆるぐにょり)と、それが fi-7160 で改善されたのか、です。<br /> <br /> </p> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 の不満点</h4> <p>前回書いたとおり技術書は ClearScan で <a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> をかけているんですけど、たまに <a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> に失敗している箇所があります。例えば以下の画像は、1 行目と 3 行目は ClearScan がうまくいっていて文字の境界がはっきりしているのですが、2 行目はぼやけた感じになっています。</p> <blockquote> <p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005446" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005446.png" alt="f:id:miau:20140513005446p:image" title="f:id:miau:20140513005446p:image" class="hatena-fotolife" itemprop="image"></a></span></p> </blockquote> <p>読みづらいし、この箇所は検索に引っかからないことがあるしで、わりと困ります。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> 前の画像を見ると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> に失敗した行で、妙な色にじみが発生しているのがわかります。</p> <blockquote> <p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005445" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005445.png" alt="f:id:miau:20140513005445p:image" title="f:id:miau:20140513005445p:image" class="hatena-fotolife" itemprop="image"></a></span></p> </blockquote> <p>文字だからまだ「読めればいい」と割り切れもしますけど、マンガは絵を楽しむ部分もあるので、こうなってしまうとがっかりです。</p> </div> <div class="section"> <h4>fi-7160(と GT-X820)の購入</h4> <p>上位機種である fi-7160 ではこの辺りが改善されているということで、消費税が上がる前に買ってしまいました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%AF%A5%AB%A5%E1%A5%E9">ビックカメラ</a>で長期保証をつけたので、85,800円 + 3,431円 = 89,231円。</p><p>ついでにハードカバーのスキャンや、見開きページを断栽前にスキャンするために、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%D9%A5%C3%A5%C9%A5%B9%A5%AD%A5%E3%A5%CA">フラットベッドスキャナ</a>ーの GT-X820 も買いました。こちらは 24,117 円。</p><p>ということで、主に fi-7160 と比較しつつ、たまに GT-X820 の話も挟んでいきます。</p> </div> <div class="section"> <h4>比較その1: ぐにょり</h4> <p><a href="http://wikiwiki.jp/bookjisui/?%A5%B9%A5%AD%A5%E3%A5%CA%A1%BC">&#x30B9;&#x30AD;&#x30E3;&#x30CA;&#x30FC; - &#x81EA;&#x708A;&#x6280;&#x8853; Wiki*</a> に説明があるように、</p> <blockquote> <p><a href="http://digitalbook1.blog65.fc2.com/blog-entry-30.html">&#x672C;&#x3092;&#x30C7;&#x30B8;&#x30BF;&#x30EB;&#x5316;&#x3057;&#x3088;&#x3046; ScanSnap&#x306F;&#x6B6A;&#x3080;&#x306E;&#x304B;&#xFF1F;</a><br /> 原稿の左右の端に近い部分が歪む。<br /> なお、自炊スレの一部の人たちは、この歪みを「ぐにょり」と読び、この歪みのために<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>を毛嫌いし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>所有者に冷たい態度で接する。</p> </blockquote> <p>この例のように画像(特に直線)が極端に歪むことを「ぐにょり」と呼ぶことが多いようです。冒頭で挙げた文字の色にじみ(とそれに伴う ClearScan の失敗)も、歪みが原因で発生したものですので、この現象を抑えることができれば改善しそうです。</p> <div class="section"> <h5>S1500 のぐにょりの傾向</h5> <p><a href="http://www.printablepaper.net/">Printable Paper</a> というサイトで方眼紙その他の PDF が作成できるので、これを作って検証してみます。使ったパターンは <a href="http://incompetech.com/graphpaper/hexagonal/">Hexagonal</a> で、オプションは以下のとおりです。</p> <ul> <li>PDF Document Size: A4</li> <li>Minimum Border: 0.05 cm(余白なのでてきとうで OK)</li> <li>Line Weight: 1 points</li> <li>Hexagon Size: 0.05 cm</li> <li>Hexagon Color: Black</li> </ul><p>余白を切り落としてスキャンするとこんな感じになりました。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005438" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005438.png" alt="f:id:miau:20140513005438p:image:w180" title="f:id:miau:20140513005438p:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (クリックで拡大)</p><p>歪みの原因はと原稿の揺れだと言われています。原稿の送りが一定でないと、歪みとともに色ずれが発生するので、色がついている箇所に注目すればその歪みがわかりやすいです。</p><p>この画像でもよく見ると色がついているのがわかるのですが・・・さすがにわかりにくいので、PIL(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> Imaging Library)を使って、歪み部分を強調させてみます。</p><p>使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a> → <a href="https://gist.github.com/miau/ef3fdc496b17da4df2da">https://gist.github.com/miau/ef3fdc496b17da4df2da</a></p><p>RGB それぞれの輝度が 20% 以下の範囲に納まっている場合は歪みはないものとして黒で塗りつぶしています。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> なのでわりと時間がかかりますが、結果はこんな感じです。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005433" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005433.png" alt="f:id:miau:20140513005433p:image:w180" title="f:id:miau:20140513005433p:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (表面。クリックで拡大)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005428" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005428.png" alt="f:id:miau:20140513005428p:image:w180" title="f:id:miau:20140513005428p:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (裏面。クリックで拡大)</p><p>何度かスキャンしてみましたが、傾向は変わらず。横一列の歪みがコンスタントに発生しているのは</p> <ul> <li>表面 <ul> <li>上から 2.5cm 付近</li> <li>下から 5.3cm 付近</li> <li>下から 2.3cm 付近</li> </ul></li> <li>裏面 <ul> <li>上から 1.7cm 付近</li> <li>下から 6.1cm 付近</li> <li>下から 3.1cm 付近</li> </ul></li> </ul><p>でした。これ以外にも、左右の端に強い歪みが発生している箇所もあります。(表は下から 3.3cm、裏は 4.3cm 付近)</p> </div> <div class="section"> <h5>ぐにょりの原因をもっと詳しく</h5> <p>原因については</p> <ul> <li><a href="http://sorano-hate.blogspot.jp/2011/03/scansnap-s1500-dr-2510c.html">&#x7A7A;&#x306E;&#x679C;&#x3066;: ScanSnap S1500 &#x3068; DR-2510C</a></li> </ul><p>にわりと詳しい説明があり、前項で調べた歪みが生じる位置と、S1500 の部品の配置を見比べた上で整合性を合わせると、以下のようになるのではないかと。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513011147" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513011147.png" alt="f:id:miau:20140513011147p:image" title="f:id:miau:20140513011147p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> こんな感じで左から原稿が流れてくるものとして。原稿が排出ローラーに達するまでは、ぶらぶらと揺れながら送られるので、細かい歪みが発生します。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513011146" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513011146.png" alt="f:id:miau:20140513011146p:image" title="f:id:miau:20140513011146p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> 排出ローラーに達したタイミングで、一度めの大きなぐにょりが発生します。ローラーの端に当たったりしているのかもしれません。<br /> そこからは両側のローラーで送られるので、しばらくは比較的安定した状態が続きます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513011145" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513011145.png" alt="f:id:miau:20140513011145p:image" title="f:id:miau:20140513011145p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> ピックアップローラーを離れるタイミングで(?)二度目の大きなぐにょりが発生します。距離からするとピックアップローラーのあたりで何か起きているとは思うのですが、何が起きているかはよくわかりません。<br /> 今回の原稿では、このしばらく後に、左右の端で特に強いぐにょりが発生しています。紙のたわみ具合に起因しているのだとは思いますが、こちらも原因はよくわかりません。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513011144" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513011144.png" alt="f:id:miau:20140513011144p:image" title="f:id:miau:20140513011144p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> 最後の大きなぐにょりは、原稿がフィードローラーを離れるタイミングです。支えがなくなるので、ここは納得です。その後はまた紙がぶらぶらするので、細かい歪みがまた発生すると。</p><p>とまあ色々説明してきましたが、紙質やサイズが変わると、傾向も変わってくると思います。何よりも、排紙時に原稿が引っかからないように気をつけたほうがよいです。特にこのスタッカーのくぼみに引っかかると、わりと大きなぐにょりが発生しますので、あらかじめコピー用紙を敷いておく等の対策をオススメします。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513011528" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513011528.png" alt="f:id:miau:20140513011528p:image" title="f:id:miau:20140513011528p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> </p> </div> <div class="section"> <h5>fi-7160 ではどうか</h5> <p>さきほどと同じ原稿を fi-7160 で読んで、同じように強調してみました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi Series でスキャンすると黒い部分が青〜緑がかってしまいうまく色ずれが強調で検出できなかったので、BTScan を使用しています。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005422" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005422.png" alt="f:id:miau:20140513005422p:image:w180" title="f:id:miau:20140513005422p:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (表面。クリックで拡大)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005416" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005416.png" alt="f:id:miau:20140513005416p:image:w180" title="f:id:miau:20140513005416p:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (裏面。クリックで拡大)</p><p>色ずれは fi-7160 でも完全になくなってはいません(そのせいか、ClearScan の失敗は fi-7160 でも発生しています)が、全体的に S1500 よりは穏やかになっていますね。</p><p>実際に歪みがどの程度見えるか、格子状の原稿を読み込んでみました。使った原稿はさきほどと同じサイトの <a href="http://incompetech.com/graphpaper/plain/">Plain</a> で</p> <ul> <li>PDF Document Size: A4</li> <li>Minimum Border: 0.5 cm</li> <li>Grid Line Weight: 1 points</li> <li>Grid Sacing: 2 lines per cm</li> <li>Grid Color: Black</li> </ul><p>の設定で出力したものです。</p><p>こちらが S1500 で・・・</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005414" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005414.jpg" alt="f:id:miau:20140513005414j:image:w180" title="f:id:miau:20140513005414j:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 表面。クリックで拡大)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005413" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005413.jpg" alt="f:id:miau:20140513005413j:image:w180" title="f:id:miau:20140513005413j:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 裏面。クリックで拡大)</p><p>こちらが fi-7160。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005411" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005411.jpg" alt="f:id:miau:20140513005411j:image:w180" title="f:id:miau:20140513005411j:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (fi-7160 表面。クリックで拡大)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140513005515" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140513/20140513005515.jpg" alt="f:id:miau:20140513005515j:image:w180" title="f:id:miau:20140513005515j:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (fi-7160 裏面。クリックで拡大)</p><p>歪みもかなり改善しているのがわかると思います。</p><p>サイズが大きくなるので画像は上げていませんが、同じ原稿を何度が読み取った場合、S1500 はスキャンする度に歪み方が変わるのですが、fi-7160 は毎回ほぼ同一の画像がスキャンされました。このあたりは fi-7160 のほうが安心感があります。</p> </div> </div> Mon, 12 May 2014 01:35:35 +0900 hatenablog://entry/17680117126982585878 自炊 ScanSnap S1500 でのスキャン方針 https://miau.hatenablog.com/entry/20140510/1399740456 <p>自炊話みっつめ。<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 は主に技術書のスキャンに使ってきたわけですが、その目的や方針について書いておきます。わりと普通だと思います。<br /> <br /> </p> <div class="section"> <h4>目的</h4> <p>2006 年くらいに <a href="http://miau.s9.xrea.com/blog/?itemid=473">&#x672C;&#x68DA;&#x3092;&#x65B0;&#x8ABF;</a> して、「これで心置きなく新しい本が買えるぞー」と喜んでたわけですが。調子に乗って本を買ってたら、あっさり一杯になってしまって。置けない本は会社に置いたりしてました。</p><p>ところが会社が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%A2%A5%C9%A5%EC%A5%B9">フリーアドレス</a>制になるとかで、これを持ち帰る必要が出てきて。ただでさえいっぱいだった部屋に 100 冊くらい本が増えてしまいました。このままでは身動きできないし、仕事中に参照したい情報も結構あるし、これはスキャンするしかないなということで当時定番だった <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 と PK-513L を買ったのでした。</p><p>いざってときに色々な情報を参照できるように本を増やしていたわけですが、それぞれの本についてスキャンされた状態がゴールに変わった場合、資産と思っていた大量の本が負債になって返ってきます。本をいずれスキャンしようと思ってるなら早く着手しておいたほうがいいです。</p> </div> <div class="section"> <h4>ターゲット</h4> <p>うちにあるのはほとんどが技術書とマンガなんですが、</p> <ul> <li>スキャンして外で読めるようになるとメリットが多い</li> <li>一冊あたりの体積が大きい</li> <li>余白が大きいし見開きがないので断裁の難易度が低い</li> </ul><p>ので、技術書から手をつけることにしました。洋書ではたまにハードカバーのものもありますが、これは後回しということで。</p><p>本を断裁したり捨てたりするのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B4%CD%FD%C5%AA">心理的</a>にわりとこたえます。リファレンス性が高くて優先的にスキャンしたい本ほど、長く読まれることを想定してしっかり製本されていて断裁が大変だったりして。「本で読みたくなったらまた買えばいいし」「絶版書は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%F1%B2%F1%BF%DE%BD%F1%B4%DB">国会図書館</a>で読めるし」とかなんとか自分を騙して進めてました。もっと色々な本が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BD%F1%C0%D2">電子書籍</a>で出てくれるといいんですけどね・・・。</p> </div> <div class="section"> <h4>スキャンの前に</h4> <p>全ページに目を通してからスキャンするようにしてます。せっかくデータが引き出せる状態になっても、データを引き出すためのインデックスが脳内にないと意味がないので。</p><p>つい時間をかけて読んでしまうこともあって、この作業が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DC%A5%C8%A5%EB%A5%CD%A5%C3%A5%AF">ボトルネック</a>になってたりするんですが・・・。10 年前に読んだ本は内容もわりと忘れてしまっているので、復習になってなかなかいいです。</p> </div> <div class="section"> <h4>方針</h4> <div class="section"> <h5>ジャケット(カバー)&帯</h5> <p>技術書サイズだと <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 で読み込めないものがほとんどですし、読み込めるものも</p> <ul> <li>360mm 以上の長さがあると長尺読み取りにする必要がある</li> <li>画質がエクセレントの設定では長尺読み取りできない</li> </ul><p>という制限があり、300dpi に落とさないとスキャンできなかったりするので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%D9%A5%C3%A5%C9%A5%B9%A5%AD%A5%E3%A5%CA">フラットベッドスキャナ</a>ーを買ってから考えることにして、スキャンせずにとってあります。</p><p>保管用には <a href="http://d.hatena.ne.jp/asin/B000IGSK9E/hatena-blog-22">リヒトラブ クリヤーブック G3117-8 A2L 20ポケット ブルー</a> を使っています。職場近所の文具屋で買ったんですが、買うときに「売っといてなんだけど、こんな大きいの何に使うの?」って言われたりする程度に大きなファイルです。それでも大きめの本のカバーは入りきってませんけど、傷めずに保管はできてそうです。</p> </div> <div class="section"> <h5>表紙&裏表紙</h5> <p>本体と一緒に断裁してます。</p><p>一時期は</p> <ul> <li><a href="http://comicscan.blog130.fc2.com/blog-entry-6.html">&#x6F2B;&#x753B;&#x3092;&#x30B9;&#x30AD;&#x30E3;&#x30CA;&#x3067;&#x96FB;&#x5B50;&#x66F8;&#x7C4D;&#x5316;&#x3059;&#x308B;&#x521D;&#x5FC3;&#x8005;&#x5411;&#x3051;&#x81EA;&#x708A;&#x89E3;&#x8AAC;&#x30B5;&#x30A4;&#x30C8; &#x30AB;&#x30D0;&#x30FC;&#x4E0B;&#x306E;&#x80CC;&#x8868;&#x7D19;&#x3082;&#x3061;&#x3083;&#x3093;&#x3068;&#x30B9;&#x30AD;&#x30E3;&#x30CA;&#x3067;&#x53D6;&#x308A;&#x8FBC;&#x3081;&#x308B;&#x3088;&#x3046;&#x306B;&#x3059;&#x308B;</a></li> </ul><p>この方法で分離していたんですが、技術書は背の部分にそれほど重要な情報がないし、見返しが破れてしまうこともあるのでやめてしまいました。マンガのスキャンときは分離したほうがよさそうですね。</p> </div> <div class="section"> <h5>見返し</h5> <p>表紙をめって一枚目に色のついた紙がついていることがありますが、この紙のことです。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140510200442" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140510/20140510200442.jpg" alt="f:id:miau:20140510200442j:image" title="f:id:miau:20140510200442j:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>ジャケットと本体と貼り合わせるためにあり、表紙側を「きき紙」、反対側を「遊び紙」と呼んで区別するそうです。</p><p>技術書の中にはこの部分に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A1%BC%A5%C8%A5%B7%A1%BC%A5%C8">チートシート</a>がついていることもありますし、そうでなくても色はわりと記憶を刺激してくれるので、1 ページくらいはスキャンしておきたいと思っている部分です。</p><p>ということで、</p> <ul> <li>表紙ときき紙をスプレーのりで接着する <ul> <li>試しに買った <a href="http://d.hatena.ne.jp/asin/B00777WWAK/hatena-blog-22">3M スコッチ スプレーのり77 ミニ缶 50ml S/N 77 MINI 50ML</a> で 15 冊くらい持ちました。今は 430ml のものを使ってます。</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A1%BC%A5%C8%A5%B7%A1%BC%A5%C8">チートシート</a>等がない場合は遊び紙はスキャンしない</li> </ul><p>という方針でやってます。</p><p>表紙ときき紙を接着した場合、裏側の摩擦形数が大きくなるため、パッドユニットを採用している S1500 ではブレーキがかかる形になり用紙読み取りがスムーズにいきません。(fi シリーズや ix500 ではブレーキローラーを採用しているので問題ないと思います。)結果として、グラデーションがかかった縦長なスキャン結果になったりします。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140511012957" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140511/20140511012957.jpg" alt="f:id:miau:20140511012957j:image:w180" title="f:id:miau:20140511012957j:image:w180" class="hatena-fotolife" style="width:180px" itemprop="image"></a></span><br /> (失敗例。元は単色刷りですが、上部にカラフルな帯が入っています。関係ないですけどグラデーションのかかり方を見ると <del>BGR の順でセンサがありそうですね。</del> ※他の画像を見ると逆のグラデーションもあったので違うかも。)</p><p>対策として、表紙をスキャンする時は原稿を一枚だけセットし、パッドユニットを取り外すようにしていました。キャリアシートを使ってもいいかもしれません。</p> </div> <div class="section"> <h5>本体</h5> <p>技術書は余白が大きいし見開きもないので、多めに断裁していました。ぎりぎりのラインを攻めると糊が残ることがあって、読み取り面に付着すると面倒なので。</p> </div> </div> <div class="section"> <h4>スキャン時の設定</h4> <p>本については</p> <ul> <li>画質: エクセレント(カラー 600dpi)</li> <li>カラーモード: カラー</li> <li>読み取り面: 両面</li> <li>継続読み取り: 有効</li> <li>その他オプション: すべて OFF</li> <li>ファイル形式: PDF</li> <li>圧縮率: 圧縮 1</li> </ul><p>の設定です。物を捨てるのが苦手な私は情報を捨てるのも苦手なので、なるべく情報の欠落が少ない設定にしています。データの保存先が足りないなら HDD を足せばいいですし、読みやすくするのは後でいくらでもできるので。</p><p>技術書だからこの設定でよかったのですが、マンガをスキャンする際は端の情報が失われないように <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> で保存したほうがいいかもしれないですね。</p><p>その他書類等もスキャンしてましたが、その時はグレースケールにしたり 300 dpi にしたり、1枚だけでプレビューしたほうが便利そうなものは <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> にしたり、「捨ててもいい」と思える割合に応じて色々です。</p><p>あとは、サイズが大きかったりページ数が多い本については、%TEMP%\JpgTmp を見て 2GB になる前にスキャンを終わらせたりしてまました。</p> </div> <div class="section"> <h4>スキャン後</h4> <p>S1500 のスキャン後の画像はややぼやけた感じになります。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140511013000" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140511/20140511013000.png" alt="f:id:miau:20140511013000p:image" title="f:id:miau:20140511013000p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> (オプションなしでスキャンしたもの)</p><p>「文字をくっきりします」オプションを使うと改善はするんですけど、まだぼやけた感じは残ります。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140511012959" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140511/20140511012959.png" alt="f:id:miau:20140511012959p:image" title="f:id:miau:20140511012959p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> (「文字をくっきりします」オプションでスキャンしたもの)</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Acrobat">Acrobat</a> で ClearScan で <a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> 認識させると、境界がくっきりします。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140511012958" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140511/20140511012958.png" alt="f:id:miau:20140511012958p:image" title="f:id:miau:20140511012958p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> (オプションなしでスキャンし、ClearScan を通したもの)</p><p>文字がぼやけていると、目のフォーカスがあってないと勘違いして脳ががんばるせいか、読んでいて妙に疲れるんですよね。ClearScan は字形が多少崩れたり、まれに不要な回転がかかったりと問題も多いんですが、サイズは小さくなるし検索もできるようになるしでお手軽なのでこの方法を使ってます。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BD%F1%C0%D2">電子書籍</a>と比べた利点?</h4> <p>ちなみに、スキャンして <a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> にかけるくらいなら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BD%F1%C0%D2">電子書籍</a>を買ったほうが</p> <ul> <li>手間がかからない</li> <li>元データから作るので、精度が高くファイルサイズも小さい</li> <li>割安な場合も多い</li> </ul><p>ということでいいのですが。唯一スキャン+<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a> の利点かもしれないなと思ったのが、画像部分に対してもたまに検索が可能になることです。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140511012956" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140511/20140511012956.png" alt="f:id:miau:20140511012956p:image" title="f:id:miau:20140511012956p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> (画像が検索できた例)</p><p>これが役に立つかは謎ですけどね。</p> </div> Sat, 10 May 2014 01:47:36 +0900 hatenablog://entry/17680117126982585932 自炊 ScanSnapHelper(ScanSnap Manager 補助ツール)を作ってみた https://miau.hatenablog.com/entry/20140506/1399394781 <p>前回 <a href="http://d.hatena.ne.jp/miau/20140505/1399266761">ScanSnap S1500 &#x306E;&#x30B9;&#x30AD;&#x30E3;&#x30F3;&#x6642;&#x306E;&#x52D5;&#x4F5C;&#x306A;&#x3069;</a> で</p> <blockquote> <p>(3) RAW画像の出力<br /> (中略)<br /> 後続の処理に進むとすぐ消されてしまうファイルですが、このファイルを保存したり差し換えたりする方法については後日また書こうと思います。</p> </blockquote> <p>と書きましたが、この「RAW画像を保存したり差し換えたりする方法」というのは、自作のツールを使うものでした。公開できる程度にまとめたので <a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> に上げました。</p> <ul> <li><a href="https://github.com/miau/ScanSnapHelper">https://github.com/miau/ScanSnapHelper</a></li> </ul><p>プログラムの説明は README.md にざっと書いているので、ここでは補足的な内容を書いておきます。<br /> <br /> </p> <div class="section"> <h4>検証環境</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a>/8 上で</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager(PfuSsMon.exe)+ <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi Series(PfuSsMff.exe) + fi7160</li> </ul><p>といった組み合わせで動作確認しています。</p> </div> <div class="section"> <h4>見た目</h4> <p>こんな感じです。地味です。<br /> <span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140507013943" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140507/20140507013943.png" alt="f:id:miau:20140507013943p:image" title="f:id:miau:20140507013943p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> </p> </div> <div class="section"> <h4>処理のタイミング</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager(PfuSsMon.exe)では </p> <ul> <li>(1) C:\<a class="keyword" href="http://d.hatena.ne.jp/keyword/WINDOWS">WINDOWS</a>\SSDriver\fi5110\fjtw32.dll 経由で <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>*.raw に書き込み</li> <li>(2) %PROGRAMFILES%\<a class="keyword" href="http://d.hatena.ne.jp/keyword/PFU">PFU</a>\<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>\Driver\PfuSsCtl.dll 経由で <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>*.raw を読み込み</li> </ul><p>という動作になっていました。この (2) のタイミングで hook.bat を呼び出すため、<a href="http://msdn.microsoft.com/ja-jp/library/cc429198.aspx">CreateFileA</a> が</p> <ul> <li>dwDesiredAccess が GENERIC_READ</li> <li>lpFileName が SSRawData\<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> を含む</li> </ul><p>状態で呼び出されたことを条件に hook.bat を起動しています。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager for fi(PfuSsMff.exe)では、RAW ファイルのパスは</p> <pre class="code" data-lang="" data-unlink>%APPDATA%\PFU\ScanSnapManagerForFi\ScandAll PRO【0からの連番】.raw</pre><p>という名称になりますが、こちらは</p> <ul> <li>(1) C:\<a class="keyword" href="http://d.hatena.ne.jp/keyword/WINDOWS">WINDOWS</a>\Twain_32\Fjicube\fjictwsv.exe で書き込み</li> <li>(2) PfuSsMff.exe で読み込み</li> </ul><p>という動作になっていました。PfuSsMff.exe を監視している限りは、うまいこと <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager と同一の条件で引っかけることができたので、こちらにも対応した次第です。</p> </div> <div class="section"> <h4>RAW画像の差し換えについて</h4> <p>サンプル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a> replace_images.py の説明として、</p> <blockquote> <ul> <li>RAW 画像を images <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにある同名のファイルで置き換えます。</li> <li>copy_here.py で保存した RAW 画像を再利用し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager の設定によって結果がどう変わるかを検証するのに使えます。</li> </ul> </blockquote> <p>と書きましたが、差し換え後のファイルはどんなものでもいいわけではありません。適当な <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> ファイルに差し換えると</p> <pre class="code" data-lang="" data-unlink>イメージの処理中にエラーが発生しました。 ケーブル類を一度抜いてから、再度接続してください。</pre><p>のエラーになります。%PROGRAMFILES%\<a class="keyword" href="http://d.hatena.ne.jp/keyword/PFU">PFU</a>\<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>\Driver\PfuSsCtlErr.log によると</p> <pre class="code" data-lang="" data-unlink>ExtractImageFromJFIF() Failed. Error = FFFFFFFF.</pre><p>だそうで、詳細は不明です。</p><p>ちゃんと確認していないのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> が RAW 画像を作る際に使用しているのが LEADTOOLS なので、<a href="http://www.leadtools.com/downloads/free-utilities.htm">LEAD Command Line Image File Converter</a> であらかじめ変換をかけてやれば RAW 画像として読み込んでくれるようでした。</p><p>LEAD Command Line Image File Converter を C:\LEADCMD にインストールしたものとして、<a href="http://www.pythonware.com/products/pil/">Python Imaging Library (PIL)</a> で作成した画像を RAW として使えるようにする例を</p> <ul> <li><a href="https://gist.github.com/miau/756fb8b14e33c6bb837e">https://gist.github.com/miau/756fb8b14e33c6bb837e</a></li> </ul><p>に make_raw_files.py として上げていますので参考にどうぞ。</p><p>ちなみにこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>は、背景の上に 4000x4000 pixel の白い正方形を描き、その四隅に赤いマークをつけるものです。これを RAW 画像として取り込むと、3997x4003 pixel となり、左は 4 pixel、上は 2 pixel が削られていました。逆に右は 1 pixel、下は 5 pixel 背景部分が残っています。実際にスキャンしたものと違って影がないので、そのあたりの調整でずれているのかもしれません。</p><p>ついでに、上の gist に上がっている pick_jpg.py は引数で渡された .pdf から .jpg を抽出するものです。生データがそのまま埋め込まれているだけなので、かなり簡単な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で抽出できちゃいます。</p> </div> <div class="section"> <h4>原稿の回転について</h4> <p>元々このツールを作った動機は、サンプル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a> rotate_for_comic.py の処理で、</p> <blockquote> <ul> <li>右綴じ・右開きの本を横向きにスキャン可能にするためのものです。 <ul> <li>実際にやってみると<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>がおかしなことになったので、実用には向きません。</li> </ul></li> <li><a href="http://annystudio.com/software/jpeglosslessrotator/">JPEG Lossless Rotator</a> を .\jpegr_portable64 として配置した上で使う必要があります。</li> <li>偶数ページは左に 90 度、奇数ページは右に 90 度回転させます。</li> </ul> </blockquote> <p>これです。</p> <ul> <li>原稿を横向きにして取り込む <ul> <li>スキャンする距離が短くなるので取り込みが速くなる</li> <li>自分で断裁した面を上に向けられるので、断裁面が多少曲がっていたり破れたりしていても問題ない</li> </ul></li> <li>RAW 画像時点で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B9%A5%EC%A5%B9">ロスレス</a>回転する <ul> <li>RAW 画像は 8 の倍数 pixel になっているようなので、問題なく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B9%A5%EC%A5%B9">ロスレス</a>回転できる</li> </ul></li> <li>ScanSnapHelper を起動しておくだけでよく、その後の加工の手間も要らない</li> </ul><p>ということで利点だらけなのですが、実際やってみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>がおかしく・・・あれ?極端に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>がおかしくなったりはしませんね。どうも以前検証した際に勘違いしただけっぽいです・・・。</p><p>気が向いた方は使ってみてもいいかもしれませんが、影の向きは本来とは 90 度違う方向にできますので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>が多少ずれる可能性はあると思います。</p><p><span class="deco" style="font-weight:bold;">(2014-11-03 追記)</span><br /> iX500 を使っている場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager V6.3L22 以降で向きの補正ができるようになったそうです。</p> <ul> <li><a href="http://scansnap.fujitsu.com/jp/feature/turn.html">&#x30B9;&#x30AD;&#x30E3;&#x30CA; ScanSnap&#xFF1A; &#x66F8;&#x7C4D;&#x30B9;&#x30AD;&#x30E3;&#x30F3;&#x3092;&#x5FEB;&#x9069;&#x306B;&#x3059;&#x308B;&rdquo;&#x5411;&#x304D;&#x88DC;&#x6B63;&rdquo;&#x6A5F;&#x80FD; : &#x5BCC;&#x58EB;&#x901A;</a></li> </ul><p><span class="deco" style="font-weight:bold;">(2014-11-03 追記 ここまで)</span><br /> </p> </div> <div class="section"> <h4>その他やりたかったこと</h4> <div class="section"> <h5>RAW 画像の PDF への埋め込み</h5> <p>なるべく高品質なデータを残したいのであれば、RAW データを残すのがいいことになります。ですが元の RAW データは背景部分も無駄に大きく、PDF や <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> と両方のファイルを残すのももったいないです。</p><p>なので理想的には</p> <ul> <li>RAW データをやや大きめに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A5%B9%A5%EC%A5%B9">ロスレス</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a></li> <li>前回「画質がエクセレント PDF 保存する場合の動作」で書いたように、PDF に画像を傾けて埋め込むことで傾き補正</li> <li>カラープロファイルを PDF 側に埋め込む</li> </ul><p>ができればいいなと。</p><p>がんばれば実現できそうな気もするのですが、埋め込む際の原点を計算しなおしたりが手軽にできなそうなので、手を出せませんでした。</p> </div> <div class="section"> <h5>残り容量の表示</h5> <p>技術書をスキャンしていると、</p> <pre class="code" data-lang="" data-unlink>処理できる総ファイルサイズの上限(2GB)に達しました。 読み取りが完了した部分のファイルを保存し、最後のページを確認して残りの部分を、再度読み取りしてください。</pre><p>と言われて、変なページで区切られることがあって。これを防止するために</p> <ul> <li>%TEMP%\JpgTmp のサイズをチェック</li> <li>「この調子でスキャンすると、あと○枚で 2GB に達するよ」みたいな情報を表示</li> </ul><p>をやりたいなとは思いつつ未実装です。</p> </div> </div> <div class="section"> <h4>EasyHook について</h4> <p>フック部分で使っているライブラリです。</p> <ul> <li><a href="http://easyhook.codeplex.com/">EasyHook - The reinvention of Windows API Hooking - Home</a></li> </ul><p>こういう処理を書く場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> で書くのが定番だったのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> だと <a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a> を作るのがちょっと面倒です。また、普段 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GC">GC</a> がある言語を使っていると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> でうまくメモリ管理できる自信もなかったりします。</p><p>EasyHook を使えば、わりと簡単に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%20.NET"> .NET</a> からフック処理が呼び出せるので、オススメです。コミットログを見てもらえばわかると思いますが、今回のアプリケーションは EasyHook のサンプルである FileMon を元に作っています。</p><p>参考にした URL をいくつか貼っておきます。</p> <ul> <li><a href="http://www.sghaida.com/easyhook-for-systemcall-hooking/">EasyHook for systemcall hooking | Saddam Abu Ghaida</a> <ul> <li>結局 CreateFileA だけしかフックしていませんが、ファイルまわりの <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> のサンプルが色々とありました。</li> </ul></li> <li><a href="http://surferonwww.info/BlogEngine/post/2011/09/13/Strong-named-assembly.aspx">&#x53B3;&#x5BC6;&#x306A;&#x540D;&#x524D;&#x4ED8;&#x304D;&#x30A2;&#x30BB;&#x30F3;&#x30D6;&#x30EA; - WebSurfer&#39;s Home</a> <ul> <li>EasyHook を動作させるにはこの作業が必要でした。</li> </ul></li> </ul> </div> Tue, 06 May 2014 01:46:21 +0900 hatenablog://entry/17680117126982586022 自炊 ScanSnap S1500 のスキャン時の動作など https://miau.hatenablog.com/entry/20140505/1399266761 <p>2010年の5月に <a href="http://scansnap.fujitsu.com/jp/product/s1500/">ScanSnap S1500</a> を買っていたのですが、<a href="http://imagescanner.fujitsu.com/jp/products/fi-7180/">fi-7160</a> を買って <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 を手放すことにしたので、ノウハウを軽くまとめておこうかと。</p><p>まずはスキャン時の動作やら、各種設定によって画像ファイルの属性がどのように変わるかを書いておきます。S1500 を持っている人であっても、ほとんどの人が気にしないくらい細かい話なので、気をつけてください。</p><br /> <p>以下 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a>/8 あたりでの検証結果です。</p> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> Manager のプロセス構成</h4> <p>以下のような構成みたいです。</p> <pre class="code" data-lang="" data-unlink> PfuSsMon.exe -&gt; ScanSnap Manager の GUI。スキャン時の画像処理もこのプロセス。 PfuSsOrg.exe PfuSsOrgPDF2JPEG.exe PfuSsQuickMenu.exe -&gt; 何に保存するか聞いてくるウィンドウ Scan2Folder.exe -&gt;「指定したフォルダに保存」時に起動するウィンドウ このタイミングでは 【イメージの保存先】\yyyymmddhhmiss.pdf を参照している</pre><p>スキャンに関わるほとんどの処理は PfuSsMon.exe が行っているので、このプロセスだけ追えば大丈夫そうです。</p> </div> <div class="section"> <h4>スキャン時の動作</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500 でスキャンを行った場合の PfuSsMon.exe の動作を追ってみました。</p> <div class="section"> <h5>(1) 設定の読み込み?</h5> <p>深くは追っていませんが、%APPDATAR\<a class="keyword" href="http://d.hatena.ne.jp/keyword/PFU">PFU</a>\<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>\*.cfg がいろいろと読み込まれます。</p> </div> <div class="section"> <h5>(2) カラープロファイルの読み込み</h5> <p><a href="http://msdn.microsoft.com/ja-jp/library/cc428525.aspx">OpenColorProfile</a> で以下のカラープロファイルが読み込まれます。</p> <ul> <li>%SYSTEMROOT%\system32\spool\drivers\color\<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> S1500.icm</li> <li>%SYSTEMROOT%\system32\spool\drivers\color\sRGB Color Space Profile.icm</li> </ul> </div> <div class="section"> <h5>(3) RAW画像の出力</h5> <p>まず %TEMP%\SSRawData に、ScanSnap0.raw(表面)、ScanSnap1.raw(裏面)のように一面に対して 1 ファイルずつ画像が出力されます。RAW と言いつつ中身は <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> ファイルなのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>(トリミング)も行われていない、かなり生データに近いファイルです。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140505135042" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140505/20140505135042.png" alt="f:id:miau:20140505135042p:image" title="f:id:miau:20140505135042p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>(その辺にあった半券を取り込んだもの。意図的に傾けて取り込んだもので、普通はこんなに傾きません。)</p><p><a href="http://homepage3.nifty.com/kamisaka/JpegAnalyzer/">JpegAnalyzer Plus</a> で見ると、以下のような情報が出ました。(「★dpi」を付加した部分は、dpi 設定によって変わる部分です。また、上記の画像に対応する情報ではありません。)</p> <pre class="code" data-lang="" data-unlink>Address Length Message 00000000 ****** SOI :Start Of Image ****** 00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.2 (JFIF) 密度 600:600 dots/inch ★dpi 600:600, 300:300, 200:200, 150:150 00000014 [0084] DQT :Define Quantization Table 00000018 QT0-8bit LEADTOOLS色差 画質015 ★dpi 600,300,200:015, 150:002 00000059 QT1-8bit LEADTOOLS輝度 画質015 ★dpi 600,300,200:015, 150:002 0000009A [0004] DRI :Define Restart Interval (MCU blocks=653) ★dpi 600:653, 300:326, 200:217, 150:163 000000A0 [0011] SOF0 :Start Of Frame 0 - Baseline DCT 5224[0] x 2816[0] pixel - 24bit color (YCbCr 4:4:4) ComponentID-01 Y 1x1 QT0 ComponentID-02 Cb 1x1 QT1 ComponentID-03 Cr 1x1 QT1 000000B3 [01A2] DHT :Define Huffman Table 【汎用ハフマンテーブル】 000000B7 HT0-DC 汎用輝度HT-DC 000000D4 HT0-AC 汎用輝度HT-AC 00000187 HT1-DC 汎用色差HT-DC 000001A4 HT1-AC 汎用色差HT-AC 00000257 [000C] SOS :Start Of Scan 0-63[00] HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1] 00000265 ****** Image Data ****** Data Size 3,706,553 bytes 0038911E ****** EOI :End Of Image ******</pre><p>なお、カラーモードがグレースケールでも白黒であっても、カラー画像として保存されます。白黒は「1200 dpi 相当」とは書かれていますが、実際 600 dpi のデータが元になっているので、ちょっと引っかかります。(ベイヤーパターンの CCD ならそうなる表記されるのもわかるのですが、スキャナーの CCD はリニアイメージセンサだと思いますし・・・。)</p><p>片面読み取り時も 2 枚出力されますが、裏面の画像は以降の処理では使用していないようです。ということは、裏側の画像情報を使った裏写り除去の処理は行っていないようです。</p><p>次の紙を読み込むと ScanSnap2.raw、ScanSnap3.raw のように連番で続いていきますが、継続読み取り時は 0 にリセットされるようです。</p><p>後続の処理に進むとすぐ消されてしまうファイルですが、このファイルを保存したり差し換えたりする方法については後日また書こうと思います。(<span class="deco" style="font-weight:bold;">20140509 追記</span>: 書きました。<a href="http://d.hatena.ne.jp/miau/20140506/1399394781">ScanSnapHelper&#xFF08;ScanSnap Manager &#x88DC;&#x52A9;&#x30C4;&#x30FC;&#x30EB;&#xFF09;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x307F;&#x305F;</a>)</p> </div> <div class="section"> <h5>(4) カラープロファイルによる色変換</h5> <p>最込に読み込んだカラープロファイルを利用して(<a href="http://msdn.microsoft.com/ja-jp/library/cc428445.aspx">CreateMultiProfileTransform</a> と <a href="http://msdn.microsoft.com/ja-jp/library/cc428559.aspx">TranslateBitmapBits</a> を使って)色変換がかかります。</p> </div> <div class="section"> <h5>(5) %TEMP%\JpgTmp 等への出力</h5> <p>変換&切り出しが終わった画像が以下のファイルに出力されます。</p> <ul> <li>%TEMP%\JpgTmp\Spool_For_<a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a>*.jpg ※PDF 出力時のみ <ul> <li>最終出力画像を作るための中間ファイル</li> <li>この総サイズをチェックすれば「処理できる総ファイルサイズの上限(2GB)に達しました。」エラーを事前に防げる</li> </ul></li> <li>【イメージの保存先】\YYYYMMDDHHMISS.jpg ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> 出力時のみ <ul> <li>最終出力ファイル</li> </ul></li> <li>%TEMP%\ImfrTemp\ImfrImg*.jpg <ul> <li>プレビュー用の画像?直近の二枚だけ残る</li> </ul></li> <li>%TEMP%\BizCardTemp\sstmp*.jpg <ul> <li>名前からすると名刺用の画像?JpgTmp と同じくらいのサイズだけど見開き画像が入ってない</li> </ul></li> </ul><p>この時点で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>や傾き補正も行われていて、このように画像になっています。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140505135040" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140505/20140505135040.png" alt="f:id:miau:20140505135040p:image" title="f:id:miau:20140505135040p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>RAW 画像と見比べると、色合いが変わっているのもわかると思います。確かに RAW 画像はやや青が強いのですが、ちょっと補正が効きすぎて赤〜黄色がかってしまっているように感じますね。</p><p>「傾き補正も行われ〜」と書きましたが、実は例外があります。画質がエクセレント(600dpi、白黒は1200dpi)で PDF で保存する場合は傾き補正は行われず、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%C3%A5%D4%A5%F3%A5%B0">クロッピング</a>のみが行われた以下のような画像が出力されます。(理由については後述)</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140505135039" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140505/20140505135039.png" alt="f:id:miau:20140505135039p:image" title="f:id:miau:20140505135039p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>カラーの場合、JpegAnalyzer Plus で見るとこんな情報が出ました。</p> <pre class="code" data-lang="" data-unlink>00000000 ****** SOI :Start Of Image ****** 00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.0 (JFIF) 密度 600:600 dots/inch ★dpi 600:600, 300:300, 200:200, 150:150 00000014 [001D] COM :Comment PFU ScanSnap Manager #S1500 00000033 [0043] DQT :Define Quantization Table 00000037 QT0-8bit IJG輝度 画質95 ★圧縮率 1:95, 2:80, 3:67, 4:45, 5:15 00000078 [0043] DQT :Define Quantization Table 0000007C QT1-8bit IJG色差 画質95 ★圧縮率 1:95, 2:80, 3:67, 4:45, 5:15 000000BD [01A2] DHT :Define Huffman Table 【汎用ハフマンテーブル】 000000C1 HT0-DC 汎用輝度HT-DC 000000DE HT0-AC 汎用輝度HT-AC 00000191 HT1-DC 汎用色差HT-DC 000001AE HT1-AC 汎用色差HT-AC 00000261 [0011] SOF0 :Start Of Frame 0 - Baseline DCT 3552[0] x 2459[5] pixel - 24bit color (YCbCr 4:2:0) ComponentID-00 Y 2x2 QT0 ComponentID-01 Cb 1x1 QT1 ComponentID-02 Cr 1x1 QT1 00000274 [000C] SOS :Start Of Scan 0-63[00] HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1] 00000282 ****** Image Data ****** Data Size 3,610,577 bytes 00371A53 ****** EOI :End Of Image ******</pre><p>RAW データと比べると、サンプリング比が 4:4:4 から 4:2:0 に変わっており、間引きが入っています。圧縮率の設定によって画質が変わっています。それがどういう意味を持つかは、このページを参照ということで。</p> <ul> <li><a href="http://hp.vector.co.jp/authors/VA032610/JPEGFormat/AboutImage.htm">&#x753B;&#x50CF;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x69CB;&#x9020;</a></li> <li><a href="http://hp.vector.co.jp/authors/VA032610/JPEGFormat/ratio.htm">&#x753B;&#x8CEA;&#x30FB;&#x5727;&#x7E2E;&#x7387;&#x306B;&#x3064;&#x3044;&#x3066;</a></li> </ul><p>グレースケールの場合もカラーとほぼ同じ情報でしたが、以下の点が変わっていました。</p> <pre class="code" data-lang="" data-unlink>000000BD [00D2] DHT :Define Huffman Table 000000C1 HT0-DC 汎用輝度HT-DC 000000DE HT0-AC 汎用輝度HT-AC 00000191 [000B] SOF0 :Start Of Frame 0 - Baseline DCT 3542[2] x 2461[3] pixel - 8bit grey scaled (Mono) ComponentID-00 Y 1x1 QT0 0000019E [0008] SOS :Start Of Scan 0-63[00] HT Selector[DC/AC] Y[0/0]</pre><p>白黒だとこうでした。<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a> ですね。</p> <pre class="code" data-lang="" data-unlink>ヘッダのない TIFF CCITT T.6 FAX4(CCITT T.6) 00094F98-00095045 0th IFD Tag-14 Next IFD 00000000 (Value-00000000) 00094F9A 0100 画像の幅 7088 00094FA6 0101 画像の高さ 4912 00094FB2 0102 画像ビットの深さ 1 (bit) 00094FBE 0115 コンポーネント数 1 00094FCA 0116 ストリップ中のライン数 4,912 00094FD6 0111 画像データへのポインタ 00000008 (Value-00000008) 00094FE2 0117 ストリップのデータ量 610,192 bytes 00094FEE 0103 圧縮種類 T.6MMR圧縮(Group4) 00094FFA 0106 画素構成 グレイスケール(白=0) 00095006 010A Fill Order MSB to LSB 00095012 011C 画像データの並び 点順次 Chunky format 0009501E 011A 画像の幅の解像度 72 0009502A 011B 画像の高さの解像度 72 00095036 0128 画像の幅と高さの解像度の単位 インチ(dpi)</pre> </div> <div class="section"> <h5>(6) PDF 生成の中間処理</h5> <p>ファイル形式が PDF の場合、以下のような処理が行われます。</p> <ul> <li>【イメージの保存先】\YYYYMMDDHHMISS.pd~ に空ページの PDF ファイルを出力</li> <li>%TEMP%\SSMon\【32桁の16進数】_【5桁の連番】.tmp として <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> ファイルを出力 <ul> <li>ただし先頭に 80 bytes 謎データが入っている</li> </ul></li> <li>%Temp%\PFUSSMON_SPL.LST にファイル名書き出し</li> <li>%TEMP%\SSMon\【32桁の16進数】_【5桁の連番】_Compressed.pdf.tmp として単一ページの PDF に変換 <ul> <li>AdobeScanLibrary.dll や PDFL70.dll を使って処理(処理中で %Temp%\Acr【32桁の16進数】.tmp を使用)</li> </ul></li> <li>JpgTmp\SPOOL【5桁の連番】.ini には都度画像の情報を出力 <ul> <li>その後の処理では使われてないっぽい</li> </ul></li> </ul><p>SPOOL*.ini についてはフォーマットも軽く調べていたので書いておきます。</p> <pre class="code" data-lang="" data-unlink>[File] FilePath=C:\Users\****\AppData\Local\Temp\JpgTmp\Spool_For_ScanSnap001.jpg BuffSize=561818 DataType=2 InCompression=3 ★color,gray:3, binary:1 Width=3551 Height=2455 Color=24 ★color:24, gray:8, binary:1 Resolution=600 ★binary は 1200 等 OutCompression=3 ★color,gray:3, binary:1 SegmentMono=1 RotationAngle=0 →270 だったら左に 90 度回転してくれる。 DeskewAngle=-20 →傾きっぽい。強制回転された場合は 0 になる。 GBJPG=1 ★color,gray:1, binary:0 Flag=1</pre><p>ちなみにファイル形式が <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> の場合はこのあたりの処理は行われず、%Temp%\PFUSSMON_FCN.INI にファイルの一覧が出力されるだけです。</p> </div> <div class="section"> <h5>(7) ファイルの保存</h5> <p>ファイル形式が PDF の場合は、</p> <ul> <li>【イメージの保存先】\aa【32桁の16進数】 として YYYYMMDDHHMISS.pdf~ を退避?(でも使ってない気がする)</li> <li>*Compressed.pdf.tmp を結合して YYYYMMDDHHMISS.pd~ に格納</li> <li>YYYYMMDDHHMISS.pd~ を YYYYMMDDHHMISS.pdf にリネーム</li> </ul><p>といった感じで最終的な PDF が出来上がります。</p><p>ファイル形式が <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> の場合は、すでに保存済みなので特に何も行われません。</p><p>ファイル名をつけたりする部分は後続の exe に処理させているようです。</p> </div> </div> <div class="section"> <h4>画質がエクセレント PDF 保存する場合の動作</h4> <p>画質がエクセレント(600dpi、白黒は1200dpi)で PDF 保存する設定だった場合、傾いてスキャンされた画像は、PDF 中に逆向きに傾けて埋め込むことで補正を行っているようです。</p><p>PDF では変換<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C8%A5%EA%A5%C3%A5%AF%A5%B9">マトリックス</a>を定義できて、これを使えば画像その他を引き伸ばしたり傾けたりして表示できます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140505135534" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140505/20140505135534.png" alt="f:id:miau:20140505135534p:image" title="f:id:miau:20140505135534p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> (<a href="http://acroeng.adobe.com/PDFReference/PDF_1.3/PDF%20Reference%201.3.pdf">PDF Reference second edition&#x3010;PDF&#x3011;</a> の 129 ページあたりを切り貼りして引用)</p><p>この変換<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C8%A5%EA%A5%C3%A5%AF%A5%B9">マトリックス</a>を変える命令が cm なのですが、傾けて保存される場合は</p> <pre class="code" data-lang="" data-unlink>212.3054962 -13.8981018 26.2519531 401.0214996 -12.8987274 7.3783112 cm</pre><p>のように第 2、3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%DA%A5%E9%A5%F3%A5%C9">オペランド</a>が 0 以外になっていることが確認できます。</p><p>PDF ビューアで開くと、傾きが正されているのがわかります。白い部分が目立ちますが、普通はこんなに傾きませんので技術書を取り込んでいる限りでは気になりませんでした。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20140505135038" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20140505/20140505135038.png" alt="f:id:miau:20140505135038p:image" title="f:id:miau:20140505135038p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>何が嬉しいかというと、より元画像に近い(回転処理による画像劣化がない)情報を保持しながら、通常の使用ではその傾きが気にならない動作になっていることですね。</p> </div> <div class="section"> <h4>調査のためのツールとか</h4> <p>もっと詳しく調べたい方もいるでしょうし、後継機種である <a class="keyword" href="http://d.hatena.ne.jp/keyword/ScanSnap">ScanSnap</a> iX500 で動作が変わっているかもしれませんので、このあたりの動作を調べるのに役立つツールを紹介しておきます。</p> <div class="section"> <h5>Process Monitor</h5> <ul> <li><a href="http://technet.microsoft.com/ja-jp/sysinternals/bb896645">Process Monitor</a></li> </ul><p>ファイルや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%B8%A5%B9%A5%C8%A5%EA">レジストリ</a>のアクセスを表示するプログラムです。Process <a class="keyword" href="http://d.hatena.ne.jp/keyword/Explorer">Explorer</a> や TCPView も含めて必須のツールなので、<a href="http://technet.microsoft.com/ja-jp/sysinternals/bb842062.aspx">Sysinternals Suite</a> でまとめて入れてます。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> Monitor v2</h5> <ul> <li><a href="http://www.rohitab.com/apimonitor">API Monitor; Spy on API Calls and COM Interfaces (Freeware 32-bit and 64-bit Versions!) | rohitab.com</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> の呼び出しをトレースするプログラムです。ファイルアクセスよりも上の層の情報を知りたいときや、<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> hook のあたりをつけるのに使います。</p><p>ただし、環境によっては <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> 呼び出しがうまく拾えないケースもあるようですので、そういうものだと思って使ったほうがいいと思います。.icm に対する CreateFileW の呼び出しが、ある環境(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Win8">Win8</a>.1 64 bit)では拾えないのに、別の環境(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Win7">Win7</a> 32 bit)なら拾える、なんとことがありました。(スキャナの設定が悪いのかと思って数時間ハマってました。)</p> </div> <div class="section"> <h5>HHD USB Monitor</h5> <ul> <li><a href="http://www.hhdsoftware.com/usb-monitor">USB Port Monitor Software Data Transfer Protocol Analyzer Data Logger</a></li> </ul><p>USB の生データを覗けるツールで、ライセンスは $64.99 ですが 14 日間試用できます。<br /> <a href="http://sourceforge.net/projects/usbsnoop/">Usb Sniffer for Windows</a> は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a> 以降で使えないし、<a href="http://www.perisoft.net/bushound/">Bus Hound</a> のフリー版はデータサイズに制限があって今回の用途には向かない&価格が $799 と高いので、こちらを使ってデータを覗いたりしてました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB">プロトコル</a>が公開されてるわけでもなく、USB 通信の勝手がわかってるわけでもないので、眺めただけで終わりましたが・・・。</p> </div> <div class="section"> <h5>PDFtk</h5> <ul> <li><a href="http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/">PDFtk - The PDF Toolkit</a></li> </ul><p>PDF の内容は(元々圧縮されている <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a> 以外の箇所は)圧縮されているので、それを解除したい場合なんかに使います。<br /> xxx.pdf の圧縮を解除して xxx_uncompressed.pdf として出力するコマンドは下記のとおりです。</p> <pre class="code" data-lang="" data-unlink>pdftk xxx.pdf output xxx_uncompressed.pdf uncompress</pre> </div> </div> Mon, 05 May 2014 14:12:41 +0900 hatenablog://entry/17680117126982586062 自炊 msysgit(Git for Windows) で STATUS_ACCESS_VIOLATION が出る時の対策 https://miau.hatenablog.com/entry/20131229/1388301913 <p>git のコマンドを叩くと<pre><br /> 0 [main] sh.exe" 6768 handle_exceptions: Exception: STATUS_<a class="keyword" href="http://d.hatena.ne.jp/keyword/ACCESS">ACCESS</a>_VIOLATION<br /> 1620 [main] sh.exe" 6768 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump</pre>こんなエラーが出る状態になってしまったので、対策方法のメモ。ちなみに試したバージョンは Git-1.8.4-preview20130916.exe です。</p><br /> <p>Process Monitor で見てみると、sh.exe が起動する時に %TEMP% に対して QueryDirectory を実行して、ファイルの一覧を拾った直後で落ちている様子。このタイミングでこんなエラーが出るってことはどうせ日本語ファイルがらみだろうなー・・・。</p><p>ということで、%TEMP% (C:\Users\【ユーザ名】\AppData\Local\Temp)直下にある、名前に日本語を含むファイルと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを全て消したら、あっさり解決。</p><p>条件はよくわからないけど、拡張子部分に日本語があると起きやすいみたいで、いくつか試した感じだと「あああ.あ11」って名前のファイルが一つあるだけで上記のエラーが起きるみたい。</p> <ul> <li><a href="http://shiroikagami.blogspot.jp/2012/08/msysgit.html">&#x767D;&#x3044;&#x93E1;: msysGit&#x3067;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x51FA;&#x305F;&#x3089;</a></li> </ul> <blockquote> <p>Git-1.7.8-preview20111206.exe</p><p>なら正常動作。</p> </blockquote> <p>という情報もあったけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 対応が入ったのが Git-1.7.10-preview20120409.exe 以降なので悩むところ。日本語を使わない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>しか触らないなら、古いバージョンを入れなおしたほうが手っ取り早いかも。</p><p><span class="deco" style="font-weight:bold;">(さっそく追記)</span><br /> </p> <ul> <li><a href="https://github.com/msysgit/msysgit/issues/25">Fails with Exception: STATUS_ACCESS_VIOLATION &middot; Issue #25 &middot; msysgit/msysgit</a></li> </ul><p>古いバージョンの msys-1.0.dll を使えば OK って話も見つけた。でもこれって <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 対応を捨てるってことだよなぁ・・・。</p> Sun, 29 Dec 2013 16:25:13 +0900 hatenablog://entry/17680117126982586116 Git Cisco VPN Client の起動が遅くなったときの対策 https://miau.hatenablog.com/entry/20131208/1386512342 <p>社外からメール読んだりするのに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cisco">Cisco</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a> Client を使っているのですが、最近起動するのに 90 秒くらいかかるようになってしまって。調べてみると <a href="http://fiddler2.com/">Fiddler</a> で「Decrypt <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a> traffic」を有効にしている場合に発生する問題のようなので、解決方法のメモです。</p><br /> <p>まあググったらすぐ出てくるんですが。</p> <ul> <li><a href="https://supportforums.cisco.com/thread/2196895">Cisco VPN Client says &quot;Opening cert store.&quot; for 5 to 10 minutes|2196895 - Cisco Support Community</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Fiddler">Fiddler</a> で「Decrypt <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a> traffic」オプションを使っている場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Fiddler">Fiddler</a> が <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a> の接続先ごとにダミーの証明書を作るそうで。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cisco">Cisco</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a> Client が起動時にその証明書を全て開くので、そこで時間がかかっていると。</p><p>このダミーの証明書を消せばいいそうですが、具体的なやり方はこのあたりに載ってました。</p> <ul> <li><a href="http://stackoverflow.com/questions/16827901/how-do-you-remove-the-root-ca-certificate-that-fiddler-installs">ssl - How do you remove the root CA certificate that fiddler installs - Stack Overflow</a></li> </ul><p>以下の 2 つやり方があるそうです。</p> <ul> <li>1) <a class="keyword" href="http://d.hatena.ne.jp/keyword/Fiddler">Fiddler</a> から削除する <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Fiddler">Fiddler</a> の「Tools」→「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Fiddler">Fiddler</a> Options」→「<a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a>」を開く</li> <li>「Decrypt <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a> traffic」のチェックを外して「Remove Interception Certificates」を押す</li> </ul></li> <li>2) certmgr から削除する <ul> <li>「ファイル名を指定して実行」で certmgr.<a class="keyword" href="http://d.hatena.ne.jp/keyword/msc">msc</a> を開く</li> <li>「証明書」→「個人」→「証明書」のリストで「発行者」が「DO_NOT_TRUST_FiddlerRoot」になっているものを削除する</li> </ul></li> </ul><p>今回は 2) の画面で確認しながら 1) の方法で実行しました。<br /> 証明書の数は 295 個あったのが 3 個に減って、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cisco">Cisco</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a> Client の起動時間も数秒に戻りました。めでたしめでたし。</p> <div class="section"> <h4>(おまけ)スプラッシュスクリーンの画像差し換え</h4> <p>「起動するのに 90 秒くらいかかる」と書きましたが、この起動中にスプラッシュスクリーンが最前面にやってきて別のウィンドウを隠されるのが非常に鬱陶しかったので、最初はスプラッシュスクリーンの画像を小さくする消極的な対策をとったりしてました。</p> <ul> <li><a href="http://www.cisco.com/cisco/web/support/JP/docs/SEC/VirtualPrivateNWs_VPN_/VPNClient/AG/003/5vcAch10.html?bid=0900e4b1828c3b44">Cisco VPN &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x7BA1;&#x7406;&#x8005;&#x30AC;&#x30A4;&#x30C9; &#x30EA;&#x30EA;&#x30FC;&#x30B9; 5.0 - VPN &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8; &#x30BD;&#x30D5;&#x30C8;&#x30A6;&#x30A7;&#x30A2;&#x306E;&#x30AB;&#x30B9;&#x30BF;&#x30DE;&#x30A4;&#x30BA; - Cisco Systems</a></li> </ul> <blockquote> <p>splash_screen.<a class="keyword" href="http://d.hatena.ne.jp/keyword/png">png</a><br /> (中略)<br /> ブランドが変更されたスプラッシュ画面グラフィックは、ステータス テキストを表示するボックスが収まるように少なくとも 280 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>幅である必要があります。グラフィックの最下部には、フル幅の空白領域がなくれはならず、その高さは 36 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>以上でなければなりません。</p> </blockquote> <p>とのことなので、%PROGRAMFILES%\<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cisco%20Systems">Cisco Systems</a>\<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a> Client\Resources\splash_screen.<a class="keyword" href="http://d.hatena.ne.jp/keyword/png">png</a> を 280x36 にリサイズしたり。もう起動が速くなったのであんまり意味ないですが、萌え化して遊びたい人にはいいかなと思ったのでとりあえずメモでした。</p> </div> Sun, 08 Dec 2013 23:19:02 +0900 hatenablog://entry/17680117126982586155 ITサービスマネージャ(試験) https://miau.hatenablog.com/entry/20131022/1382462508 <p>なんだか受験報告ブログになりつつありますが、それは置いといて。</p><p>今回は 3 年ぶり 5 度目のITサービスマネージャの受験でしたので、色々とメモ。<br /> <br /> </p> <div class="section"> <h4>下調べ</h4> <p>最近はさすがに慣れてきて、まず公式情報も見るようになってきた。</p><p>前にこの試験を受けたのは 2010 年で、この時に買った対策書はあるけど、</p> <ul> <li><a href="http://www.ipa.go.jp/about/press/20120522.html">IPA &#x72EC;&#x7ACB;&#x884C;&#x653F;&#x6CD5;&#x4EBA; &#x60C5;&#x5831;&#x51E6;&#x7406;&#x63A8;&#x9032;&#x6A5F;&#x69CB;&#xFF1A;&#x30D7;&#x30EC;&#x30B9;&#x767A;&#x8868;&#x3000;&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x300C;&#x51FA;&#x984C;&#x7BC4;&#x56F2;&#x300D;&#x304A;&#x3088;&#x3073;&#x300C;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x300D;&#x6539;&#x8A02;&#x7248;&#x306E;&#x516C;&#x958B;&#x306B;&#x3064;&#x3044;&#x3066;</a></li> </ul><p>みたいに 2012/05 に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E9%A5%D0%A5%B9">シラバス</a>が変わってるし、</p> <ul> <li><a href="http://www.jitec.ipa.go.jp/1_00topic/topic_20130426_kaitei.html">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#x306E;&#x300C;&#x51FA;&#x984C;&#x7BC4;&#x56F2;&#x300D;&#x53CA;&#x3073;&#x300C;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x300D;&#x306B;&#x304A;&#x3051;&#x308B;&#x4E00;&#x90E8;&#x5206;&#x91CE;&#x306E;&#x69CB;&#x6210;&#x30FB;&#x8868;&#x8A18;&#x306E;&#x898B;&#x76F4;&#x3057;&#x306B;&#x3064;&#x3044;&#x3066;</a></li> </ul><p>2013/04 に JIS Q 20000 の用語が使われるように変わってるので新しいのを書ったほうがよさげ、と。</p> </div> <div class="section"> <h4>今回の対策本</h4> <p>ということでその後の発行された本を探したけど、私が探したタイミングでは出ていなかったので、前回わりとよかった気がする</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4872689437/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51LVfpgUJvL._SL160_.jpg" class="hatena-asin-detail-image" alt="2013 ITサービスマネージャ「専門知識+午後問題」の重点対策 (情報処理技術者試験対策書)" title="2013 ITサービスマネージャ「専門知識+午後問題」の重点対策 (情報処理技術者試験対策書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4872689437/hatena-blog-22/">2013 ITサービスマネージャ「専門知識+午後問題」の重点対策 (情報処理技術者試験対策書)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 平田賀一,粕淵卓</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%C6%A5%C3%A5%AF">アイテック</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/05/30</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4872689437/hatena-blog-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>この本を購入。好感触な点は <a href="http://d.hatena.ne.jp/miau/20101017/1287313062">&#x524D;&#x56DE;&#x306E;&#x53D7;&#x9A13;&#x6642;</a> に書いたとおり変わってなくて。前回不足していた ITILv3 や JIS Q 20000 の説明もちゃんと入ってた。</p><p>今回気付いたけど、この本は午後 I の過去問が 3 年分載っているものの、直近の 3 年分ではなくその前の 3 年分になっている。(直近の 3 年間は各 1 問ずつ重点解説に入っている。)どうも <a href="http://d.hatena.ne.jp/asin/4872689364/hatena-blog-22">徹底解説ITサービスマネージャ本試験問題〈2013〉 (情報処理技術者試験対策書)</a> と問題が被らないようにそうしてるみたいなので、新しめの過去問を解きたいならこれもまとめて買ったほうがいいし、一冊で完結させたいなら別の本のほうがいいのかも。</p><p>あと、問題の解説でたまに「?」となることがあった。例えば、平成20年春午後I問4 は試験センターの解答例が間違ってる(理由の説明が足りない)と思うんだけど、その誤った解答に沿って解説してるので筋が通ってない。別の本を立ち読みすると、</p> <ul> <li><a href="http://d.hatena.ne.jp/asin/4798131091/hatena-blog-22">情報処理教科書 ITサービスマネージャ 2013年版</a> はやや補足してるけどまだ説明不足</li> <li><a href="http://d.hatena.ne.jp/asin/4813251307/hatena-blog-22">ITサービスマネージャ 合格トレーニング 2013年度 (情報処理技術者試験対策)</a>(だったと思う)はちゃんと「これじゃ足りない」「こう書くべき」と説明されてる</li> </ul><p>という感じだった。次回対策書を選ぶときに参考にしよう。</p><p>あと、今年はこの機会に <a class="keyword" href="http://d.hatena.ne.jp/keyword/ITIL">ITIL</a> の勉強をしておきたかったので、試験対策書以外にも二冊購入。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414438X/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51FsUUrw-1L._SL160_.jpg" class="hatena-asin-detail-image" alt="要点解説 ITサービスマネジメント [ITIL V3][JIS Q20000]対応" title="要点解説 ITサービスマネジメント [ITIL V3][JIS Q20000]対応"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414438X/hatena-blog-22/">要点解説 ITサービスマネジメント [ITIL V3][JIS Q20000]対応</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 黒崎寛之</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2010/11/20</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><span class="hatena-asin-detail-label">購入</span>: 1人 <span class="hatena-asin-detail-label">クリック</span>: 11回</li><li><a href="http://d.hatena.ne.jp/asin/477414438X/hatena-blog-22" target="_blank">この商品を含むブログ (5件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>こちらの本で ITILv3 と JIS Q 20000 をひととおり。さすがに一冊まるまるこのテーマを扱っているだけあって、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D3%A5%B9%A5%DE%A5%CD%A5%B8%A5%E1%A5%F3%A5%C8">サービスマネジメント</a>上どういうプロセスが必要かはよくわかった。<br /> プロジェクトの運用について、理想像が一つ固ったのもよかったかな。仕事でも役に立ちそう。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774146285/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51dnOZ6V5fL._SL160_.jpg" class="hatena-asin-detail-image" alt="ITIL V3実装の要点 ?一問一答でよくわかる" title="ITIL V3実装の要点 ?一問一答でよくわかる"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774146285/hatena-blog-22/">ITIL V3実装の要点 ?一問一答でよくわかる</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 久納信之</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2011/05/10</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><span class="hatena-asin-detail-label">購入</span>: 1人 <span class="hatena-asin-detail-label">クリック</span>: 4回</li><li><a href="http://d.hatena.ne.jp/asin/4774146285/hatena-blog-22" target="_blank">この商品を含むブログ (3件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/IT%A5%B5%A1%BC%A5%D3%A5%B9%A5%DE%A5%CD%A5%B8%A5%E1%A5%F3%A5%C8">ITサービスマネジメント</a>を導入するときの疑問に一問一答形式で答えている本。上の本を読んでると企業間でサービス提供しているイメージが強かったけど、この本でいう「IT組織」は社内の組織のイメージが強かった。まあ多少は論文書くときに役に立つのかも、くらい。</p> </div> <div class="section"> <h4>勉強っぷり</h4> <p>今は客先に常駐していて、社員さんより早く帰らないといけないので、わりと早めに帰れてはいる。まあ帰ってからも結構仕事をしているんだけど、試験前の 1 ヶ月程は帰ってからの時問を勉強にあてたので、めずらしく勉強時間がとれた。</p><p>本はひととおり読んで。問題を解いたのは、午後Iが11問、午後IIは過去問から 1問(実際に原稿用紙に書いた)+ 11 問(骨子考えた)。あと午前Iは試験会場に向かう途中で 2009 年くらいに買った対策本を読んでいた程度。</p><p>午後Iで間違えるパターンは、汎用的な対策を問われている場面で個別の対策を答えてしまっているのが多かった。マネージャとしてプロセスを改善するつもりで答えることを意識すればいいみたい。<br /> 午後IIはテーマによって「これはいけるんじゃない?」って骨子が書けるものから「このテーマが出たら諦めよう」ってものまで様々。ここは運次第かなぁ。</p><p>あと、これまで担当したプロジェクトをサービスの視点で整理してみたり、午後IIを解くときも 3 問中 1 問を選ぶところから時間を計りながらやってみたり、わりと色々なことが試せた。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%C0%BC%A3%B3%D8%B1%A1%B9%E2%C5%F9%B3%D8%B9%BB">明治学院高等学校</a>@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%E2%CE%D8%C2%E6">高輪台</a>。<br /> 高校の教室は生活感があって面白いなー。</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 73%、実際に採点すると 93%。まあ過去問やってれば大丈夫と。</p> </div> <div class="section"> <h5>午後I</h5> <p>慎重に解答を考えてたら時間がギリギリになった。本番だと解答用紙に清書する時間が必要だし、ちょっと急ぐくらいのほうがいいかも。<br /> まあ 6 割以上は解けてると思う。</p> </div> <div class="section"> <h5>午後II</h5> <p>2 問中 1 問選択なんだけど、2 問とも苦手テーマ・・・。</p><p>とりあえず「サービスレベルが未達となる兆候への対応について」を選んで、骨子をなんとか考えて「論述の対象とするITサービスの概要」を書いたところで残り 80 分。ア: 725 字、イ: 875 字、ウ: 825 字 と最低の文字数は書けたけど、出来はイマイチ。関連部門との連携とか、期待されてる設問と別のところに書いてしまった気が。あと、試験中にウの規定文字数が 800 文字だと勘違いして、ウの内容を薄っぺらく伸ばしてしまったので流れが変になっていた気がする。</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <ul> <li>今回は勉強時間がとれたので、色々試せて満足</li> <li>次回午後IIの対策をするときは、苦手なテーマを重点的に攻めよう</li> </ul> </div> <div class="section"> <h4>(2013-12-20 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 88.00点 午後I得点 78点 午後II評価ランク C</pre><p>やっぱ午後IIが課題と。</p> </div> Tue, 22 Oct 2013 02:21:48 +0900 hatenablog://entry/17680117126982586177 試験 Google Code Jam 2011〜2013 の話 https://miau.hatenablog.com/entry/20130512/1368371737 <p>今年も(私の中では)終わってしまったわけですが。ここ数年ぶんの出来事を、</p> <ul> <li>その時々でどんな言語に興味を持っていたのか</li> <li>各言語に対してどんな感想を持ったのか</li> </ul><p>を中心に、まとめてさらっと書いておきます。<br /> <br /> </p> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code Jam 2011</h4> <div class="section"> <h5>結果</h5> <ul> <li><a href="http://www.go-hero.net/jam/11/name/miau">Code Jam 2011 Statistics - Participant Details: miau</a></li> </ul><p>ということで、Round1 を通過できずに終了。</p> </div> <div class="section"> <h5>方針</h5> <ul> <li>何かのめりこめる言語を探したい <ul> <li>「どんな処理でも <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> で書いてやる!」と考えてた頃のような情熱がほしい</li> <li>条件はこんな感じ <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> くらい簡単に書けて、速く動作する言語(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> だと妙に遅いとか不可)</li> <li>メモ化やら末尾最適化やらが簡単にできる言語</li> <li>実用性が高いもの(DLL が作成できるとか、仕事でつかえそうだとか、配布が容易だとか)</li> </ul></li> </ul></li> </ul><p>ちなみに前年の反省を活かして、触りたい言語についてはあらかじめ入出力くらいは書けるようにしておいた。</p> </div> <div class="section"> <h5>使った言語</h5> <ul> <li>Go <ul> <li>当時流行ってた(?)ので。</li> <li>もっと簡単に解けるのに、無駄にゴルーチンやらチャンネルを使って解いて遊んでた。</li> <li>悪くはないけどすごくハマったりもしなかった <ul> <li>最近「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%B9%A5%D7%A5%E9%A5%C3%A5%C8%A5%D5%A5%A9%A1%BC%A5%E0">クロスプラットフォーム</a>でかけるからいいよ!」みたいな話を見かけたので、また触るかも</li> </ul></li> </ul></li> <li><a href="http://claylabs.com/clay/">Clay</a> <ul> <li>手軽に DLL が作れるということで。</li> <li>最近の言語っぽく書きやすく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>はちょっと重いけど実行は速い。</li> <li>わりと気に入ってたんだけど、その後使ってないのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9">文字コード</a>まわりのサポートが少ないから・・・だったかな。</li> </ul></li> <li>Perl6 <ul> <li>たまには触っておきたかったので</li> <li>やっぱり動作遅い・・・</li> </ul></li> <li>Factor <ul> <li>たまたま <a href="http://oss.infoscience.co.jp/factor/roundtable/index.html">Factor &#x5EA7;&#x8AC7;&#x4F1A; - &#x3042;&#x3057;&#x305F;&#x306E;&#x30AA;&#x30FC;&#x30D7;&#x30F3;&#x30BD;&#x30FC;&#x30B9;&#x7814;&#x7A76;&#x6240;</a> あたりを読んで、スタック指向言語に興味を持ったので</li> <li>スタックが一つずつ消費されてくんだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6">インタラクティブ</a>シェルがあるからこの様子がわかりやすい。</li> <li>うまい人はもっと簡潔にかけてるから、たまに触って感覚を掴んでおきたい感じ。</li> </ul></li> <li>F# <ul> <li>「他に普段触らない言語なかったっけ?」という感じで適当に</li> </ul></li> <li>D <ul> <li>Round 1A を Groovy で解こうと思ったら、家の PC でうまく動かなかったので、適当に入っていたやつで</li> </ul></li> <li>Groovy <ul> <li>この年の本命。</li> <li>「配列のメソッドが最初から <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> + <a class="keyword" href="http://d.hatena.ne.jp/keyword/ActiveSupport">ActiveSupport</a> くらい充実してるし、it とか使えるし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> よりいいかも!」「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Groovy%2B%2B">Groovy++</a> を使えば速くなるし末尾最適化もできるっぽいし、Groovy かわいいよ Groovy」と急に気に入ったので。</li> <li>ところが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Groovy%2B%2B">Groovy++</a> を使うと型を書かないといけない箇所が増えるし<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>通らなくて苦労するし、かわいい部分がどっかに行ってしまうことに気づいて、その後は Jenkins 関係でしか使ってない</li> </ul></li> </ul> </div> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code Jam Japan 2011</h4> <div class="section"> <h5>結果</h5> <ul> <li><a href="http://codejam-source-viewer.appspot.com/#!/889487/miau">http://codejam-source-viewer.appspot.com/#!/889487/miau</a></li> </ul><p>予選と決勝しかないけど、決勝を一問くらい解いたくらいでイマイチ。</p> </div> <div class="section"> <h5>方針</h5> <ul> <li>時間的にあんまり余裕がなかったので使い慣れてる <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> で</li> <li>他の言語を触るにしても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> で解いた後におまけ的に触る感じ</li> </ul> </div> <div class="section"> <h5>使った言語</h5> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> <ul> <li>いつの間にか Enumerable のメソッドが増えてて、Groovy と比べても見劣りしない感じに <ul> <li>それでもやっぱり<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>系は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> のほうが充実してる気はするけど</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> での動作が遅いので、損した気分になる・・・</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/CoffeeScript">CoffeeScript</a> <ul> <li>コーヒーの問題だから <a class="keyword" href="http://d.hatena.ne.jp/keyword/CoffeeScript">CoffeeScript</a> 使っておくかー、みたいな</li> <li>submit したら答えが合わず(<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> の sort() が文字列でソートされてたせい)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> のほうを submit したので<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>は残ってなかったり</li> </ul></li> <li>D <ul> <li>ビット配列が使える気がして触ったけど、あんまり意味がなかった気がする。</li> </ul></li> </ul> </div> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code Jam 2012</h4> <div class="section"> <h5>結果</h5> <ul> <li><a href="http://www.go-hero.net/jam/12/name/miau">Code Jam 2012 Statistics - Participant Details: miau</a></li> </ul><p>Round 1 で終了と。</p> </div> <div class="section"> <h5>方針</h5> <ul> <li>前年に触った Factor がわりと面白かったので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%E9%A5%C0%A5%A4%A5%E0">パラダイム</a>が違う言語を触りたい</li> <li><a href="http://d.hatena.ne.jp/asin/4839941068/hatena-blog-22">プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?</a> を解いてまじめに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>の勉強をする <ul> <li>と言いつつ初級編の真ん中くらいまでしかやってない</li> </ul></li> </ul> </div> <div class="section"> <h5>使った言語</h5> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Prolog">Prolog</a> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%E9%A5%C0%A5%A4%A5%E0">パラダイム</a>が違う言語代表(論理型言語)。普段とは違う考え方が必要で新鮮だった。</li> <li>最初は SWI-<a class="keyword" href="http://d.hatena.ne.jp/keyword/Prolog">Prolog</a> を使ってたけど、入力が面倒なので <a class="keyword" href="http://d.hatena.ne.jp/keyword/GNU">GNU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Prolog">Prolog</a> に乗り換えたりとか、これだけで 22 時間使ってしまった・・・</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PowerShell">PowerShell</a> <ul> <li>当時 cmd.exe から乗り換えようとしてたので</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を書く上では、他の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC">スクリプト言語</a>ほど使いやすくないかなぁ</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> <ul> <li>時間がなくなってきたので適当に使っただけ</li> </ul></li> <li>Julia <ul> <li>この年の本命。</li> <li><a href="http://d.hatena.ne.jp/amarui/20120221/1329823079">&#x306A;&#x305C;&#x50D5;&#x3089;&#x306F;Julia&#x3092;&#x4F5C;&#x3063;&#x305F;&#x304B; - &#x4E38;&#x4E95;&#x7D9C;&#x7814;</a> を読んで期待が高まった+<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 用のバイナリも正式ではないものの上がっていたので</li> <li>マクロが強力な言語を触るのが初めてだったので、いろいろ作って遊んでた <ul> <li>そのせいで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>寄りの練習できなかった・・・</li> </ul></li> <li>若い言語だから、言語が成長していく過程を見られたり、要望を出したりバグ報告したりで楽しかった</li> <li>「もっと深く関わりたいけど、関数型の言語やら、よく比較されてる R や <a class="keyword" href="http://d.hatena.ne.jp/keyword/Mathematica">Mathematica</a> の知識を身に着けからにしよう」とか思っているうちに放置気味に。</li> </ul></li> </ul> </div> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Code Jam 2013</h4> <div class="section"> <h5>結果</h5> <ul> <li><a href="http://www.go-hero.net/jam/13/name/miau">Code Jam 2013 Statistics - Participant Details: miau</a></li> </ul><p>今年も Round 1 で終了。</p> </div> <div class="section"> <h5>方針</h5> <ul> <li>1 つくらいは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%E9%A5%C0%A5%A4%A5%E0">パラダイム</a>が違う言語を触りたい、くらい?</li> </ul> </div> <div class="section"> <h5>使った言語</h5> <ul> <li><a href="http://www.golfscript.com/golfscript/">GolfScript</a> <ul> <li>またスタック指向言語を触っておこうか、って感じで。</li> <li>ネタっぽい言語だけど、APL を ASCII にした感じなので、うまくハマるとかなり簡潔に書ける気がする</li> <li>とはいえ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6">インタラクティブ</a>シェルがないので、スタック指向言語の利点が活きてないような <ul> <li>golfscript.rb の簡潔さも芸のうちだから仕方ないのかな</li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Nemerle">Nemerle</a> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a> で書いてた処理を簡潔に書きなおせそうで、しばらくマニュアル読みこんでたので記念に</li> <li>マクロが強力なのがいい。printf() のフォーマットと引数が合わないと <a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a> でエラー教えてくれたりして新鮮。 <ul> <li>でも <a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a> の動作はまだ不安定で、たまにエラーが出なくなるので再起動してた・・・</li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> <ul> <li><a href="http://d.hatena.ne.jp/asin/4274068854/hatena-blog-22">すごいHaskellたのしく学ぼう!</a> を読んだ記念</li> <li>もう数か月前のことだから、いろいろ忘れてて汚いコードになってしまった・・・</li> </ul></li> <li>Groovy <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> より書きやすいかなーと思ったんだけど、今触ってみると「あれ?この機能ないの?」みたいなのが結構あった <ul> <li>shift/unshift、all、zip、リスト内包表記とか</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> のほうが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> っぽい部分が残ってて、自分のスタイルには向いてる気がする</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> <ul> <li>多次元(連想)配列を作るのが楽かなってことで使ってみたけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> と違って ++ で新しい要素を作ってくれないから、あんまりきれいにならなかった</li> <li>あと多次元配列を扱うときは変数名の先頭に $ があるとうるさく見えるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> は避けたほうがいいのかも、と思ったり</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> <ul> <li>Qualification Round A. Tic-Tac-<a class="keyword" href="http://d.hatena.ne.jp/keyword/Toe">Toe</a>-Tomek で使ったけど、これだけは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> らしく(?)簡潔に書けた気がするので gist で晒しておこう <ul> <li><a href="https://gist.github.com/miau/5563798">https://gist.github.com/miau/5563798</a></li> </ul></li> <li>普段はまずやらないけど、$_ を多用すると見た目がすっきりするなー、とか思った</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> <ul> <li>時間がなかったので適当に</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Scala">Scala</a> <ul> <li>今年の本命。</li> <li>「仕事で <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> を使うから何かしら勉強になるかなー」って思って触りはじめたけど、<a href="http://d.hatena.ne.jp/asin/4844330845/hatena-blog-22">Scalaスケーラブルプログラミング第2版</a> を読み終えた頃に、ほとんど <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> の勉強ならないことに気づいた <ul> <li>Round 1A の A を力技で解くにはどうすればいいか調べてて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/BigDecimal">BigDecimal</a> やら MathContext やらの知識が身についた程度?</li> </ul></li> <li>関数型と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%BB%D8%B8%FE">オブジェクト指向</a>がうまいこと合わさってるなーって印象。 <ul> <li>関数型の部分は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> っぽい部分が多いので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> 触ってるとすんなり入れるかも。</li> </ul></li> <li>いざってときについ手続型っぽい処理を書いちゃうので、関数型の特訓には向かないかも。 <ul> <li>関数型っぽく書くなら <a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> のほうが簡潔に書けちゃうし・・・。</li> </ul></li> </ul></li> </ul> <ul> <li> <ul> <li> <ul> <li>-</li> </ul></li> </ul></li> </ul><p>という感じでした。今後の方針としては</p> <ul> <li>年に一回だけだといつまでたっても成長しないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/TopCoder">TopCoder</a> やら <a class="keyword" href="http://d.hatena.ne.jp/keyword/AtCoder">AtCoder</a> に参加したい(毎年言ってる気がする・・・)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> で解いたりして、もっと関数型っぽい考え方に詳しくなっておきたい</li> </ul><p>ってところですかね。</p> </div> </div> Sun, 12 May 2013 00:15:37 +0900 hatenablog://entry/17680117126982586298 システム監査技術者(試験) https://miau.hatenablog.com/entry/20130421/1366552926 <p>久々にブログを更新したと思ったら<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>の感想だったりする、わりとよくあるパターンですけど。とりあえずこれ書いておくと「誰もこんなの興味ないだろうから、さっさと次の話題を書こう」って気になって、ブログの更新が続いたりするので、ご容赦ください。</p><p>今回受験したのはシステム監査。去年は受験できなかったので、2 年ぶり 3 度目の受験。<br /> <br /> </p> <div class="section"> <h4>勉強っぷり</h4> <p>ちょっと古い本だけど、前回買っておいたこの本で、解説+午前の問題については二周くらい読んだ。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798117595/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51Ish6QqR9L._SL160_.jpg" class="hatena-asin-detail-image" alt="情報処理教科書 システム監査技術者 2009年度版" title="情報処理教科書 システム監査技術者 2009年度版"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798117595/hatena-blog-22/">情報処理教科書 システム監査技術者 2009年度版</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%EE%B9%E7%CF%C2%CD%BA">落合和雄</a></li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2">翔泳社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2008/10/03</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li> <span class="hatena-asin-detail-label">クリック</span>: 1回</li><li><a href="http://d.hatena.ne.jp/asin/4798117595/hatena-blog-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>時間がそれほどなかったので、午後I や午後II の問題は実際に解答を書いたりせず、頭でぼんやり考えて解答を見る程度。</p><p>ちなみに <a href="http://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html">&#x60C5;&#x5831;&#x51E6;&#x7406;&#x63A8;&#x9032;&#x6A5F;&#x69CB;&#xFF1A;&#x60C5;&#x5831;&#x51E6;&#x7406;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;&#xFF1A;&#x8A66;&#x9A13;&#x8981;&#x7DB1;&#x30FB;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x30FB;&#x904E;&#x53BB;&#x554F;&#x984C; &#x306A;&#x3069;</a> を見ると 2012 年の 5 月に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E9%A5%D0%A5%B9">シラバス</a>が変わっているようで。試験対策書を買うならこれ以降に出たもののほうがいいんだろうけど、上記の対策所は 2010 年版が最後なので、他のを選んだほうがいいのかも。</p><p>あと、以前から「監査のイメージを掴むために試験対策書じゃない本も読もう」と考えていたので、今回はこの本を読んでみた。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197916/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/41D6bgjPpdL._SL160_.jpg" class="hatena-asin-detail-image" alt="IT監査とIT統制―基礎から事業継続・ネットワーク・クラウドまで―" title="IT監査とIT統制―基礎から事業継続・ネットワーク・クラウドまで―"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4495197916/hatena-blog-22/">IT監査とIT統制―基礎から事業継続・ネットワーク・クラウドまで―</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 社団法人日本内部監査協会編</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%B1%CA%B8%B4%DB">同文館</a>出版</li><li><span class="hatena-asin-detail-label">発売日:</span> 2012/09/27</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4495197916/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>教科書的な本なのであまり監査人の生活について具体的なイメージがつかめたわけではないけど、個別監査計画書のサンプルが載っていたりで、前よりはイメージができるようになった。</p><p>内部監査に関する本で、内部監査人協会の用語が使われている(試験はたぶん<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%D0%BA%D1%BB%BA%B6%C8%BE%CA">経済産業省</a>の用語がベース)ので、そこは注意が必要かも。</p><p>あと応用例として<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>に関する監査について書かれてる章があって。ちょうど<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E9%A5%D0%A5%B9">シラバス</a>変更のポイントに「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>の普及」なんて書いてあったから、「出題されたらラッキー」くらいに思ってた(けど、結局出題されてない)。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%EC%B3%A4%C2%E7%B3%D8">東海大学</a>高輪キャンパス@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%F2%B6%E2%B9%E2%CE%D8">白金高輪</a>。<br /> 「駅から会場に向かう途中でコンビニの一つくらいあるだろう」と思ってたらなかったので、入り口の反対側まで行って昼食を買って、ちょうどいいくらいの時間に到着。</p> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 65%、実際に採点すると 88% と。<br /> 監査がらみは過去問と似たような問題が多くて午前対策が役に立った+知らなくても考えればわかる感じの問題が多かった。</p><p>といいつつ前回間違えたところをまた間違えたので、前回のメモを引用。</p> <blockquote> <ul> <li>SECIモデルの I が何の略か <ul> <li><a href="http://www.atmarkit.co.jp/aig/04biz/seci.html">SECI&#x30E2;&#x30C7;&#x30EB; &minus; &#xFF20;IT&#x60C5;&#x5831;&#x30DE;&#x30CD;&#x30B8;&#x30E1;&#x30F3;&#x30C8;&#x7528;&#x8A9E;&#x4E8B;&#x5178;</a></li> <li>この図は何度か見ていたのに頭に入ってなかったので、<a href="http://www.jaist.ac.jp/ks/labs/umemoto/ai_km.html">&#x77E5;&#x8B58;&#x7BA1;&#x7406;&#x304B;&#x3089;&#x77E5;&#x8B58;&#x7D4C;&#x55B6;&#x3078; -&#x30CA;&#x30EC;&#x30C3;&#x30B8;&#x30DE;&#x30CD;&#x30B8;&#x30E1;&#x30F3;&#x30C8;&#x306E;&#x6700;&#x65B0;&#x52D5;&#x5411;-</a> みたいなモデル入りの図で覚えたほうが</li> </ul></li> </ul> </blockquote> <p>あと、ファイブフォース分析も間違えた。ここがわかりやすいかな。</p> <ul> <li><a href="http://www.itc-sb.com/05_column/sub01.html">5&#x30D5;&#x30A9;&#x30FC;&#x30B9;&#x5206;&#x6790;&#xFF08;5&#x3064;&#x306E;&#x7AF6;&#x4E89;&#x8981;&#x56E0;&#xFF09;&#xFF3B;ITC&#x30B5;&#x30F3;&#x30B7;&#x30E3;&#x30A4;&#x30F3;&#x30FB;&#x30D6;&#x30EC;&#x30A4;&#x30F3;&#x30BA;&#xFF3D;</a></li> </ul> </div> <div class="section"> <h5>午後I</h5> <p>今まで結構解答のポイントを外しがちだったので、確実に解答できそうな問題を選ぼうとフラフラしてたら 10 分ほどロスして。急いで解きはじめたものの、90 分まるまる使った。</p><p>通過してるかは微妙なライン。「この運用に問題があるのはわかるけど、どっちの問いで答えるべきなんだろう?」と迷うことが多いので、やっぱり実際に問題を解いたりして感覚を掴んでおいたほうがいいみたい。</p><p>ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%B8%A5%E3%A5%A4%A5%EB">アジャイル</a>開発の監査についても出題されてて、ちょっと新鮮だった。</p> </div> <div class="section"> <h5>午後II</h5> <p>消去法で「要件定義の適切性に関するシステム監査について」を選択したものの、文章の流れが思い浮かばない。30 分くらいで骨子が何とか書けたので急いで書き始めて。<br /> ア: 750 字、イ: 850 字、ウ: 950 字 と最低の文字数には達したものの、「要件定義の適切性」というポイントは外してしまったので、採点されても C くらいじゃないかと。</p><p>やっぱり練習してないといきなりは書けないなー、という印象。</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <ul> <li>今回はわりと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E2%A5%C6%A5%A3%A5%D9%A1%BC%A5%B7%A5%E7%A5%F3">モティベーション</a>高く勉強できてたのでよかった <ul> <li>「<a href="http://www.meti.go.jp/policy/netsecurity/new_systemauditG.html">&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x7BA1;&#x7406;&#x57FA;&#x6E96;</a> とか普通に開発するときのチェックリストとして使えそうだなー」とか「電子<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%C3%C8%F1%BC%D4%B7%C0%CC%F3%CB%A1">消費者契約法</a>で『確認画面を表示してれば、間違って申し込みしても取り消せない』みたいに決まってるからみんな確認画面が好きなのかなー」とか、業務に絡めて興味を持って勉強できてた</li> <li>試験対策書じゃない別の本を読むのも楽しい。次回も別の本を読めたらいいな。</li> </ul></li> <li>今回は計画的に勉強してたんだけど、やっぱり直前に忙しくなったりして問題を解く時間が作れなかったので、早めに問題を解こう</li> <li>秋はITサービスマネージャ?でも日程見たらリリースとかぶってそうだから、未受験になるかも。</li> </ul> </div> <div class="section"> <h4>(2013-07-07 追記)成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 ***.**点 午前II得点 88.00点 午後I得点 65点 午後II評価ランク C</pre><p>まあ予想通りと。</p> </div> Sun, 21 Apr 2013 23:02:06 +0900 hatenablog://entry/17680117126982586335 試験 ITストラテジスト(試験) https://miau.hatenablog.com/entry/20121021/1366554837 <p>(当時書いていたのに用語をいろいろ調べているうちに投稿する機会を逃したので、2013-04-21 にこっそり投稿してます)</p><p>ここ 2 回ほど色々あって受験できなかったので、1 年半ぶりの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%F0%CA%F3%BD%E8%CD%FD%BB%EE%B8%B3">情報処理試験</a>です。今回は IT ストラテジスト。2 年半ぶり 2 度目の受験。<br /> <br /> </p> <div class="section"> <h4>勉強っぷり</h4> <p>前回受験したときの</p> <ul> <li><a href="http://d.hatena.ne.jp/miau/20091018/1255878415">IT&#x30B9;&#x30C8;&#x30E9;&#x30C6;&#x30B8;&#x30B9;&#x30C8;&#xFF08;&#x8A66;&#x9A13;&#xFF09; - miau&#x306E;&#x907F;&#x96E3;&#x6240;</a></li> </ul><p>とほぼ同じ。</p><p>今回は午前Iもあるので午前の本は計算問題以外ひととおり眺めておいた。時間がないので計算問題の類は飛ばして。<br /> 午後の対策は実際に解いたりせずに、各章の冒頭を読んだくらい。</p><p>まあ要するに一夜漬けです。</p> </div> <div class="section"> <h4>試験</h4> <p>受験会場は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%EC%B5%FE%C5%D4%BB%D4%C2%E7%B3%D8">東京都市大学</a>世田谷キャンパス@<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%F8%BB%B3%C2%E6">尾山台</a>。<br /> コンビニで昼食買おうと思ったらすごい列で驚いた。10 分くらい並んでたのかな?<br /> そんなわけでちょうどいいくらいの時間に到着。</p> <div class="section"> <h5>午前I</h5> <p>回答出てたので採点したら 25/30 で 83% と。(厳しめ自己採点では 69%。ちょっと厳しすぎたか。)<br /> とりあえず次回の午前I免除権は確保できた。</p> </div> <div class="section"> <h5>午前II</h5> <p>厳しめ自己採点で 59%、実際に採点すると 52% といった感じ。今回はここで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%AD%C0%DA%A4%EA">足切り</a>みたい。<br /> 1問回答選ぶの間違えてたのがあったし、午前Iの対策せずに午前IIの対策に集中してたらなんとかなったレベルだと思うからちょっと惜しいところではあるけど、まあ仕方ない。</p><p>あの午前対策本だけだと余裕を持って通過するのは難しそうなので、次回は何か別の対策書を買おう。</p> </div> <div class="section"> <h5>午後I</h5> <p>75 分くらいで完了。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%AD%C0%DA%A4%EA">足切り</a>だから採点されないけど、たぶん合格ラインは超えてたと思う。<br /> 比較的時間に余裕あるし、考えればわかる問題が多いから、次回はここは軽めでよさそう。</p> </div> <div class="section"> <h5>午後II</h5> <p>システム化計画まわりの話であれば、今やってる案件がらみで何か書けそうだなー、と妄想してたんですが。今回はシステム化計画まわりで手頃な出題がなくて。仕方がないので「IT を活用した事業戦略の策定について」を選択。</p><p>骨子に 40 分、概要に 10 分くらいかかって、文書書けるのが 70 分しかない。<br /> ア: 450 字、イ: 850 字、ウ: 625 字 でなんとか最低ラインの文字数は書きなぐったけど、文字はひどいし、事業戦略に意識がいく余り IT をあまり活用できてないし。わりとひどい感じでした。</p><p>もし採点されていても D だった気がします。</p> </div> </div> <div class="section"> <h4>反省&感想</h4> <ul> <li>前回がわりと書きやすい論文だった+たまたま午前IIも通過できてたんで油断してた</li> <li>今まで経験した案件の一覧を作っておいて「この分野で出題が来たらこういうこと書けそう」ってのを作っておきたい・・・と前から思っているんだけど作れてない。次はやりたい。</li> </ul><p>春はまあシステム監査です。</p> </div> <div class="section"> <h4>成績照会</h4> <pre class="code" data-lang="" data-unlink>午前I得点 88.40点 午前II得点 56.00点 午後I得点 ---点 午後II評価ランク -</pre> </div> <div class="section"> <h4>次回の午前I 用メモ</h4> <p>午前I で解答を間違えたり、理解があやふやだった用語をいろいろメモ。</p> <ul> <li><a href="http://e-words.jp/w/SMP.html">SMP</a></li> <li><a href="http://e-words.jp/w/VLIW.html">VLIW</a></li> <li><a href="http://e-words.jp/w/E382B9E383BCE38391E383BCE382B9E382ABE383A9.html">&#x30B9;&#x30FC;&#x30D1;&#x30B9;&#x30AB;&#x30E9;</a></li> <li>スーパーパイプライン→<a href="http://e-words.jp/w/E38391E382A4E38397E383A9E382A4E383B3.html">&#x30D1;&#x30A4;&#x30D7;&#x30E9;&#x30A4;&#x30F3;</a></li> <li><a href="http://e-words.jp/w/ETL.html">ETL</a></li> <li><a href="http://e-words.jp/w/OLAP.html">OLAP</a></li> <li><a href="http://e-words.jp/w/E38387E383BCE382BFE3839EE382A4E3838BE383B3E382B0.html">&#x30C7;&#x30FC;&#x30BF;&#x30DE;&#x30A4;&#x30CB;&#x30F3;&#x30B0;</a></li> <li><a href="http://e-words.jp/w/BPO.html">BPO</a></li> <li>技術のSカーブ→<a href="http://jp.corogaru.jp/management/s-curv.html">&#x6280;&#x8853;&#x9032;&#x6B69;&#x306E;S&#x5B57;&#x30AB;&#x30FC;&#x30D6;</a></li> <li><a href="http://kotobank.jp/word/GAAP">GAAP</a></li> <li><a href="http://kotobank.jp/word/IASB">IASB</a></li> <li><a href="http://kotobank.jp/word/IFRS">IFRS</a></li> <li><a href="http://kotobank.jp/word/SEC">SEC</a></li> <li><a href="http://e-words.jp/w/EMS-2.html">EMS</a></li> <li><a href="http://kotobank.jp/word/LBO">LBO</a></li> <li><a href="http://e-words.jp/w/CSF.html">CSF</a> = KFS</li> <li><a href="http://e-words.jp/w/IVR.html">IVR</a>(音声自動応答)</li> <li><a href="http://www.atmarkit.co.jp/aig/04biz/spld.html">&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x30E9;&#x30A4;&#x30F3;&#x958B;&#x767A;</a></li> <li><a href="http://m-words.jp/w/SPA.html">SPA</a></li> <li><a href="http://m-words.jp/w/TOC.html">TOC</a> (Theory of Constraints)</li> <li><a href="http://www.atmarkit.co.jp/aig/04biz/irr.html">IRR</a> (Internal Rate of Return)</li> <li><a href="http://e-words.jp/w/XBRL.html">XBRL</a></li> <li><a href="http://kotobank.jp/word/%E3%82%B3%E3%83%B3%E3%82%B8%E3%83%A7%E3%82%A4%E3%83%B3%E3%83%88%E5%88%86%E6%9E%90">&#x30B3;&#x30F3;&#x30B8;&#x30E7;&#x30A4;&#x30F3;&#x30C8;&#x5206;&#x6790;</a></li> </ul> </div> Sun, 21 Oct 2012 23:33:57 +0900 hatenablog://entry/17680117126982586398 試験 文字集合の包含関係とテストに使うべき文字 https://miau.hatenablog.com/entry/20110919/1316427760 <p>先月あたりから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9">文字コード</a>まわりの調査をしていたので、そのことについて書こうと思ったのですが。もろもろの説明の前提として<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>に対する説明が必要で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>の説明にはその対象となる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>についての説明が必要で・・・ということで、まずは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>についての概説です。<br /> <br /> </p> <div class="section"> <h4>目的</h4> <p>冒頭に書いたように、私が行った<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9">文字コード</a>まわりの調査結果を書くための前提部分の説明が目的ではあるんですが、もうひとつ目的がありまして。</p><p>Web を見てまわっていると、いくつかの文字を不適切に選んで「この文字で確認したらうまくいったから大丈夫」というように不十分な調査がなされている事例が多々ありました。せっかく調査結果をまとめてくれているのに不十分なせいで活用できない=同じ調査を再度行う、という残念なことになってしまっているので「今後調査/テストを行う際にどのような文字を抽出すればよいか」という基礎情報的なものを示すことができればいいなと。</p> </div> <div class="section"> <h4>説明の方針</h4> <p>いちおうテーマは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>なのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>が実際に扱うことになるのは符号化されたデータのほうなので、そちらについても必要に応じて言及しています。主に「可能な限り文字化けしない」(=入力した文字がそのまま保たれる)ことを目的としていますので、字体の変化や文字の入れ替え等には言及していません。</p><p>なお、気になっているのは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP のような JIS ベースの符号化ですので、ISO-8859-1 のように JIS と関係のない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>には言及しません。</p> </div> <div class="section"> <h4>包含図</h4> <p>各包含関係の中に、そこの含まれる代表的な文字と、可能であればその領域に含まれる文字数(多数ある場合は * 等で省略)を記載しています。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20110919184343" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20110919/20110919184343.png" alt="f:id:miau:20110919184343p:image" title="f:id:miau:20110919184343p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>理解不足や間違い等もあると思いますので、気づいた点があればご指摘ください。</p> </div> <div class="section"> <h4>各<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>の概説</h4> <p>これだけ見ても「何がなにやら」という感じだと思うので、簡単に説明しておきます。</p><p>右下で背景色がカラフルになっている部分がありますが、これは細かい話になってくるので、まずは枠で囲んだ部分だけ説明します。</p> <div class="section"> <h5>ASCII</h5> <p>キーボードに記載されている英数字&記号たちです。(日本語キーボードの &yen; を除く)</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200201">JIS X 0201</a></h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C6%A5%F3%CA%B8%BB%FA">ラテン文字</a>(基本的に ASCII と同じ英数字)+カタカナ(いわゆる半角カナ)です。</p><p>英数字の部分は ISO 646(ASCII のうち 12 文字を各国の事情に合わせて差し替えられるようにした規格)に従っており、「\」(バックスラッシュ)と「~」(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%EB%A5%C0">チルダ</a>)は <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200201">JIS X 0201</a> では「&yen;」と「&#x203E;」に置き換えられています。現在主流の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>では ASCII と互換性を持った形で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>が行われるので、あまり気にしなくて良い部分ではあるのですが、これが円記号問題の発端になっています。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1978</h5> <p>ひらがなや標準的な漢字、全角の英数字、記号、カタカナが含まれています。ここで規定されている英数字、記号、カタカナについては、厳密には全角に割り当てることにはなっていないのですが、実際は全角の記号に割り当てられているのでこのように考えていていいと思います。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a></h5> <p>広義では絵文字なんかも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>になるようですが、ここでは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>である <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字の総称として説明します。図はかなり見づらくなってしまったので、ここだけ簡単にして抜き出します。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20110919184344" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20110919/20110919184344.png" alt="f:id:miau:20110919184344p:image" title="f:id:miau:20110919184344p:image" class="hatena-fotolife" itemprop="image"></a></span><br /> </p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1978 に含まれない文字を、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> と <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> がそれぞれ独自に定義したものです。共通している文字もあれば、そうでないものもあります。</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字のうち、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>に含まれていなかった部分を <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> が追加したものです。</li> </ul></li> </ul><p>このような包含関係になっているため、以下のいずれかの組み合わせで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>はカバーできることになります。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>+<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>+<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字</li> </ul><p>なお、CP932(日本語の <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 環境で標準として使われる <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> の拡張。IANA では <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows-31J">Windows-31J</a> の名称。)では <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字 を全て取り込んでいます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字だけですべての<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>が表せるわけですから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字に元々含まれている文字については二箇所に出現することになります。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1983</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1978 に 75 文字追加されています。うち 10 文字については<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>として存在していた部分であり、CP932 では<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>に加えこれらの文字も保持していますので、これらも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%F3%BD%C5%C5%D0%CF%BF">二重登録</a>(もともと<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字と <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 系で重複していた「∵」「¬」に至っては三重登録)されます。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1990 / <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>:1997</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1990 では <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1983 からさらに 2 文字追加されています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>:1997 では文字の追加は行われていないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> といったらこの範囲だと考えればよいです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a>-1983 の流れがあったので図示しましたが、調査の際は特に意識する必要はない部分です。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%E4%BD%F5%B4%C1%BB%FA">補助漢字</a>)</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> に足りない文字を新しく定義したものです。いろいろ情報を見ていると「<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に置き換えられる予定」みたいな書き方になっていて軽視されていそうですが、本来の <a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP では利用可能な領域なので少し注意が必要です。とはいっても <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 上で <a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP という場合は CP932 と同じ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>からなる CP51932 を指す場合が多く、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> の範囲が扱えないことが多いのですが。(これについては次回詳しく書きます。)</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2000(拡張漢字/第三水準、第四水準)</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> で不足している文字を補うという目的は <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> と同じなのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> を包含する形で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> の余った領域に詰め込めるように文字を選びなおしたものです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> は使わず <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> を使っていく方向だったみたいですが、CP932 と非互換な部分があるためか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>としてはあまり使われていないようです。</p><p>もともと <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 外の領域を使用していましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1、3.2 で全ての領域がカバーされており、現時点では <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> の文字を扱う際は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> で扱うことになります。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> では <a class="keyword" href="http://d.hatena.ne.jp/keyword/BMP">BMP</a> 外の文字(<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-16">UTF-16</a> で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>・ペアとなる、いわゆる 4 バイト文字)が含まれるので注意が必要です。また、一部の文字については <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> で 1 文字に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>されず、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 2 文字を合成して表すことになっています。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2004</h5> <p>いわゆる <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS2004">JIS2004</a> で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2000 から 10 文字が追加されました。包含図では <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2000 を囲む形で図示すべきなんですが、さすがにごちゃごちゃしすぎるので追加部分だけを図示しています。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%20Vista">Windows Vista</a> がこの領域の文字を扱えるようになったことが話題になっていましたが、現時点では<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>として利用できないため、Web アプリケーションを作る立場では「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Vista">Vista</a> からはこの領域の文字も送られてくる」という程度の認識でよいと思います。注意点は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> の扱いと同じです。</p> </div> <div class="section"> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.0、3.1、3.2</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> の範囲が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> の範囲に収まっていることを示すために図示したかっただけで、調査の際はバージョンはあまり気にしなくていいはずです。(今後 6.0 の絵文字等は気にする必要があるかもしれませんが。)</p> </div> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 選定 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字の文字種について</h4> <p>さきほど説明を省略した右下のカラフルな部分についてですが、参考にしたページを先に挙げておきます。ほぼこのページの受け売りです。</p> <ul> <li><a href="http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/uf900.html">&#x30E6;&#x30CB;&#x30B3;&#x30FC;&#x30C9; CJK&#x4E92;&#x63DB;&#x6F22;&#x5B57; F900&#x301C;FAFF</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 選定 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字の領域には記号と漢字が含まれていますが、漢字については <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 上で</p> <ul> <li>CJK 統合漢字(CJK UNIFIED IDEOGRAPH)</li> <li>CJK 互換漢字(CJK COMPATIBILITY IDEOGRAPH)</li> </ul><p>の 2 つに分類されています。CJK 統合漢字は通常どおりに使ってよいのですが、CJK 互換漢字はその名のとおり互換性のために残されている文字で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 本来の立場からすると CJK 統合漢字にある別の文字に置き換えてしまいたいけれど、それをやってしまうとラウンドトリップ変換が行えないので仕方なく残している、という文字です。</p><p>CJK 互換漢字は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 上でいくつかの領域に分かれて定義されています。基本的に <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 選定 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字の領域については「The <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 32 compatibility ideographs(<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字に基づくもの)」に含まれているんですが、「&#xF929;」「&#xF9DC;」の 2 文字については「Pronunciation variants from KS X 1001:1998(KS X 1001:1998(韓国)における発音重複に基づくもの)」に含まれています。</p><p>このあたりはわざわざ分類しなくてもいいんですが、The <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 32 compatibility ideographs はカナダ文字とも言われる領域で、私が調査中に「32 文字って書いてあるけど、数えると 34 文字あるぞ?どこかで分類間違えたかな?」と焦ってしまったので、念のため図示しました。</p><p>「The <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 32 compatibility ideographs(<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字に基づくもの)」については、参考ページの注意書きに</p> <blockquote> <p>「備考」の項目に「統合漢字」とあるものは、互換用ではなくCJK統合漢字です(詳細)。</p> </blockquote> <p>と書かれており、この部分については CJK 統合漢字と同じように使用してもよいそうです。結果としてこの領域右側の黄色とピンクの領域が CJK 互換漢字ということになり、この領域のものはアプリケーションによって CJK 統合漢字に置き換えられることがあるので注意が必要です。たとえば <a class="keyword" href="http://d.hatena.ne.jp/keyword/Skype">Skype</a> がこういった動作になっていて、テスト用に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>を送ったつもりがちゃんと送れてなくてハマったりしました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> も条件によっては一部の文字で不思議な動作をしたりしていたんですが、これについてはまた後日。</p><p>図の左側に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれる CJK 互換漢字も表記してあります。こちらは「<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> compatibility ideographs(<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>における包摂基準変更に基づくもの)」に含まれており、すべて互換漢字として扱ってよいようですので、こちらについても CJK 統合漢字に置き換えらえられると困るのであれば、注意が必要になります。</p> </div> <div class="section"> <h4>CP932 の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>が特殊な文字について</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>の話からは逸れてしまうんですが、せっかくテスト用に使える文字種を羅列しているので、CP932 で注意が必要な文字についても簡単に記載しておきます。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> の変換が特殊といわれているのは以下の 8 文字だと思います。</p> <table> <tr> <th>CP932</th> <th>CP932 での名称 </th> <th>Win </th> <th></th> <th>other</th> <th></th> </tr> <tr> <td>0x815C</td> <td>HORIZONTAL BAR </td> <td>U+2015</td> <td>&#x2015;</td> <td>U+2014</td> <td>&#x2014;</td> </tr> <tr> <td>0x8160</td> <td>FULLWIDTH TILDE </td> <td>U+FF5E</td> <td>&#xFF5E;</td> <td>U+301C</td> <td>&#x301C;</td> </tr> <tr> <td>0x8161</td> <td>PARALLEL TO </td> <td>U+2225</td> <td>&#x2225;</td> <td>U+2016</td> <td>&#x2016;</td> </tr> <tr> <td>0x817C</td> <td>FULLWIDTH HYPHEN-MINUS </td> <td>U+FF0D</td> <td>&#xFF0D;</td> <td>U+2212</td> <td>&#x2212;</td> </tr> <tr> <td>0x8191</td> <td>FULLWIDTH CENT <a class="keyword" href="http://d.hatena.ne.jp/keyword/SIGN">SIGN</a> </td> <td>U+FFE0</td> <td>&#xFFE0;</td> <td>U+00A2</td> <td>&#xA2;</td> </tr> <tr> <td>0x8192</td> <td>FULLWIDTH POUND <a class="keyword" href="http://d.hatena.ne.jp/keyword/SIGN">SIGN</a> </td> <td>U+FFE1</td> <td>&#xFFE1;</td> <td>U+00A3</td> <td>&#xA3;</td> </tr> <tr> <td>0x81CA</td> <td>FULLWIDTH NOT <a class="keyword" href="http://d.hatena.ne.jp/keyword/SIGN">SIGN</a> </td> <td>U+FFE2</td> <td>&#xFFE2;</td> <td>U+00AC</td> <td>&#xAC;</td> </tr> <tr> <td>0xFA55</td> <td>FULLWIDTH BROKEN BAR </td> <td>U+FFE4</td> <td>&#xFFE4;</td> <td>U+00A6</td> <td>&#xA6;</td> </tr> </table><p>Win が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>方式で、other はそれ以外での方式で発生しえる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>先です。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> の <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> を利用するとすべて Win の文字になりますが、それ以外のものについてはライブラリや製品、指定する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9">文字コード</a>によってこの組み合わせはまちまちなので、注意が必要です。</p><p>特に「〜」の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>に失敗して「?」等になる問題が発生するケースが多いです。これと「−」(全角ハイフン)以外の文字はあまり使わないので問題視されにくいですが、もし入力されたら同じように「?」になったりするわけなので、適切に処理されることは確認しておくべきでしょう。</p><p>MS 公式にもちゃんとまとまっていないんですが、参考となる情報としては以下のものがありました。</p> <ul> <li><a href="http://support.microsoft.com/kb/313143/ja">[XWEB] &#x4FEE;&#x6B63;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0; Q283214 &#x306E;&#x9069;&#x7528;&#x5F8C;&#x306B;&#x4E00;&#x90E8;&#x306E;&#x65E5;&#x672C;&#x8A9E;&#x6587;&#x5B57;&#x304C;&#x7591;&#x554F;&#x7B26;&#x306B;&#x306A;&#x308B;</a> <ul> <li>上記 8 文字のうち、HORIZONTAL BAR 以外の 7 文字が記載されています。</li> </ul></li> <li><a href="http://support.microsoft.com/kb/286776/ja">[NT] JIS X 0221 &#x3068;&#x30B3;&#x30FC;&#x30C9;&#x30DA;&#x30FC;&#x30B8; 932 &#x306E;&#x30DE;&#x30C3;&#x30D4;&#x30F3;&#x30B0;&#x304C;&#x7570;&#x306A;&#x308B;</a> <ul> <li>HORIZONTAL BAR を含む 4 文字について記載がありました。</li> </ul></li> </ul><p>上記以外に、JIS の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B6%CD%FD%BC%E7%B5%C1">原理主義</a>に近い形で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>を行うと、以下のようになっているケースもあるかもしれません。ただ、現在ではほとんど見かけることはないと思います。</p> <table> <tr> <th>CP932</th> <th>CP932 での名称 </th> <th>Win </th> <th></th> <th>other</th> <th></th> </tr> <tr> <td>0x5C </td> <td>REVERSE SOLIDUS (YEN <a class="keyword" href="http://d.hatena.ne.jp/keyword/SIGN">SIGN</a>)</td> <td>U+005C</td> <td>\</td> <td>U+00A5</td> <td>&#xA5;</td> </tr> <tr> <td>0x7E </td> <td>TILDE </td> <td>U+007E</td> <td>~</td> <td>U+203E</td> <td>&#x203E;</td> </tr> <tr> <td>0x815F</td> <td>FULLWIDTH REVERSE SOLIDUS </td> <td>U+FF3C</td> <td>&#xFF3C;</td> <td>U+005C</td> <td>\</td> </tr> <tr> <td>0x8150</td> <td>FULLWIDTH MACRON </td> <td>U+FFE3</td> <td>&#xFFE3;</td> <td>U+203E</td> <td>&#x203E;</td> </tr> <tr> <td>0x818F</td> <td>FULLWIDTH YEN <a class="keyword" href="http://d.hatena.ne.jp/keyword/SIGN">SIGN</a> </td> <td>U+FFE5</td> <td>&#xFFE5;</td> <td>U+00A5</td> <td>&#xA5;</td> </tr> </table> </div> <div class="section"> <h4>結局どの文字をテストに使えばいいの?</h4> <p>目的によって違うので「これで十分」というものはないのですが、不適切な選び方をしないように気をつければいいんじゃないかと思います。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>をテストするのであれば「&#x2460;」のように <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> に含まれないものを選ぶ(※<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> はあまり使われてないのでとりあえずここでは無視)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP が関わる環境で <a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 選定 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 拡張文字をテストするのであれば、「&#x9AD9;」のように <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれないものを選ぶ</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> の文字をテストするのであれば、問題の切り分けが容易なように「&#x263A;」のように JIS 外の文字を選ぶ <ul> <li>もし切り分けの容易さよりも手順の簡単さを選ぶなら、いきなり<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>ペアの「&#x20BB7;」を選ぶというような選択もあり</li> </ul></li> </ul><p>といった感じです。</p> </div> <div class="section"> <h4>文字の一覧(コピペ用)</h4> <p>本当は図を <a class="keyword" href="http://d.hatena.ne.jp/keyword/SVG">SVG</a> 等で出力してコピーできるようにしたかったのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>が含まれまくっているせいか Cacoo でうまくエクスポートできなかったので、コピペ用に文字の一覧を記載しておきます。</p><p>「この文字が化けるけどどの領域に含まれているんだっけ?」という場合にも使えるよう、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>と CJK 互換漢字についてはすべての文字を記載しました。図中で代表として使った文字については太字で示しています。</p><p><span class="deco" style="font-weight:bold;">追記</span>: 最初は図と見比べながら使う前提でただ羅列していたんですが、見比べにくい気がしたので説明を追加しました。このリスト単独でもそれなりに使えるとは思いますが、たとえば <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> の項にすべての <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> の箇所が載っているわけではない(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>に含まれる部分はそちらに載せている)というような部分もあるので、図と見比べて過不足がないか確認した上でご利用ください。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200201">JIS X 0201</a> <ul> <li><span class="deco" style="font-weight:bold;">&#xA5;&#x203E;</span>(※多すぎるので入力しづらい 2 文字のみ)</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> <ul> <li><span class="deco" style="font-weight:bold;">あ亜Aア¥凜熙♪堯</span>(※多すぎるので図に記載したもののみ)</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>にのみ存在 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#x2252;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#x2460;</span>&#x2461;&#x2462;&#x2463;&#x2464;&#x2465;&#x2466;&#x2467;&#x2468;&#x2469;&#x246A;&#x246B;&#x246C;&#x246D;&#x246E;&#x246F;&#x2470;&#x2471;&#x2472;&#x2473;<span class="deco" style="font-weight:bold;">&#x3349;</span>&#x3314;&#x3322;&#x334D;&#x3318;&#x3327;&#x3303;&#x3336;&#x3351;&#x3357;&#x330D;&#x3326;&#x3323;&#x332B;&#x334A;&#x333B;&#x339C;&#x339D;&#x339E;&#x338E;&#x338F;&#x33C4;&#x33A1;&#x337B;&#x301D;&#x301F;&#x33CD;&#x32A4;&#x32A5;&#x32A6;&#x32A7;&#x32A8;&#x3232;&#x3239;&#x337E;&#x337D;<span class="deco" style="font-weight:bold;">&#x337C;</span>&#x222E;&#x221F;<span class="deco" style="font-weight:bold;">&#x22BF;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれないもの <ul> <li><span class="deco" style="font-weight:bold;">&#x2211;</span></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C3%BC%EC%CA%B8%BB%FA">特殊文字</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字の重複部分 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#x2235;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#x2116;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれないもの <ul> <li>&#x2160;&#x2161;<span class="deco" style="font-weight:bold;">&#x2162;</span>&#x2163;&#x2164;&#x2165;&#x2166;&#x2167;&#x2168;&#x2169;&#x2121;&#x3231;</li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a> 選定<a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a>拡張文字 <ul> <li>記号(全て <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれる) <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#xFFE2;</span>(※<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> と異なる変換では &#xAC;)</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれないもの <ul> <li>&#x2170;&#x2171;<span class="deco" style="font-weight:bold;">&#x2172;</span>&#x2173;&#x2174;&#x2175;&#x2176;&#x2177;&#x2178;&#x2179;&#xFF07;&#xFF02;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#xFFE4;</span>(※<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> と異なる変換では &#xA6;)</li> </ul></li> </ul></li> <li>CJK 統合漢字 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> にも <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> にも含まれるもの <ul> <li>&#x4E28;&#x4EE1;&#x4F00;&#x4F03;&#x4F56;&#x4F8A;&#x4F92;&#x4F9A;&#x4F94;&#x4FC9;&#x501E;&#x5022;&#x5040;&#x5042;&#x5046;&#x5070;&#x5094;&#x514A;&#x519D;&#x5215;&#x52A6;&#x52AF;&#x52DB;&#x5300;&#x5393;&#x53B2;&#x549C;&#x54A9;&#x54FF;&#x5586;&#x57AC;&#x57C7;&#x57C8;&#x590B;&#x595B;&#x595D;&#x59A4;&#x5B56;&#x5BC0;&#x5BD8;&#x5C1E;&#x5CA6;&#x5CBA;&#x5D27;&#x5D42;&#x5D6D;&#x5DB8;&#x5DB9;&#x5F34;<span class="deco" style="font-weight:bold;">&#x5F45;</span>&#x5F67;&#x5FDE;&#x608A;&#x60D5;&#x60F2;&#x6130;&#x6137;&#x6198;&#x62A6;&#x63F5;&#x6460;&#x649D;&#x64CE;&#x6600;&#x6609;&#x6615;&#x661E;&#x6624;&#x6631;&#x6657;&#x6659;&#x66FB;&#x6673;&#x6699;&#x66A0;&#x66B2;&#x66BF;&#x66FA;&#x6766;&#x67BB;&#x67C0;&#x6852;&#x6844;&#x68C8;&#x68CF;&#x6968;&#x6998;&#x69E2;&#x6A30;&#x6A46;&#x6A73;&#x6A7E;&#x6AE4;&#x6BD6;&#x6C3F;&#x6C5C;&#x6C86;&#x6CDA;&#x6D04;&#x6D87;&#x6DAC;&#x6DCF;&#x6DFC;&#x6E27;&#x6E3C;&#x6E5C;&#x6EBF;&#x6F88;&#x6FB5;&#x6FF5;&#x7005;&#x7007;&#x7085;&#x70AB;&#x7104;&#x710F;&#x7146;&#x7147;&#x715C;&#x71C1;&#x71FE;&#x72B1;&#x72BE;&#x7377;&#x73C9;&#x73D6;&#x73E3;&#x7407;&#x7426;&#x742A;&#x742E;&#x7462;&#x7489;&#x749F;&#x752F;&#x756F;&#x769B;&#x769C;&#x76A6;&#x7746;&#x7821;&#x784E;&#x7864;&#x7994;&#x799B;&#x7AD1;&#x7AEB;&#x7B9E;&#x7D48;&#x7D5C;&#x7DB7;&#x7E52;&#x7E8A;&#x7F47;&#x8301;&#x837F;&#x83C7;&#x8448;&#x84B4;&#x84DC;&#x8553;&#x8559;&#x88F5;&#x891C;&#x8A12;&#x8A37;&#x8A79;&#x8AA7;&#x8ABE;&#x8ADF;&#x8AF6;&#x8CF0;&#x8D12;&#x9127;&#x91D7;&#x91DA;&#x91E4;&#x91E5;&#x91ED;&#x91EE;&#x920A;&#x9210;&#x9239;&#x923A;&#x923C;&#x9240;&#x924E;&#x9251;&#x9259;&#x9267;&#x9278;&#x9288;&#x92A7;&#x92D0;&#x92D3;&#x92D7;&#x92D9;&#x92E0;&#x92E7;&#x92F9;&#x92FB;&#x92FF;&#x9302;&#x931D;&#x931E;&#x9321;&#x9325;&#x9348;&#x9357;&#x9370;&#x93C6;&#x93DE;&#x9445;&#x969D;&#x96AF;&#x9733;&#x974F;&#x9755;&#x9857;&#x9865;&#x9A4E;&#x9ADC;&#x9B75;&#x9B8F;&#x9BB1;&#x9C00;&#x9D6B;&#x9D70;&#x9E19;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> には含まれるが <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> には含まれないもの <ul> <li>&#x70BB;&#x5307;&#x5324;&#x548A;&#x589E;&#x5BEC;&#x5D53;&#x5FB7;&#x6665;&#x6801;&#x6A6B;&#x7028;&#x7501;&#x769E;&#x7930;&#x7AE7;&#x7DA0;&#x7DD6;&#x8362;&#x85B0;&#x8B7F;&#x8CF4;&#x90DE;&#x9115;&#x973B;&#x974D;&#x999E;&#x9B72;<span class="deco" style="font-weight:bold;">&#x9ED1;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> には含まれるが <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> には含まれないもの <ul> <li>&#x4F39;&#x4FCD;&#x4FFF;&#x50D8;&#x5164;&#x51BE;&#x529C;&#x52C0;&#x5372;&#x53DD;&#x5765;&#x58B2;&#x5953;&#x5963;<span class="deco" style="font-weight:bold;">&#x59BA;</span>&#x5DD0;&#x5F21;&#x605D;&#x60DE;&#x6111;&#x6213;&#x662E;&#x670E;&#x6C6F;&#x6D6F;&#x6D96;&#x6E39;&#x7324;&#x73BD;&#x73D2;&#x73F5;&#x7429;&#x787A;&#x7FA1;&#x83F6;&#x856B;&#x8B53;&#x8ECF;&#x9067;&#x91DE;&#x9206;&#x9277;&#x92D5;&#x93A4;&#x93F8;&#x9431;&#x9448;&#x9743;&#x9927;&#x9BBB;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> にも <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> にも含まれないもの <ul> <li>&#x4EFC;&#x50F4;&#x51EC;&#x5759;&#x5CF5;&#x6085;&#x6120;&#x654E;&#x663B;&#x6AE2;&#x6DF8;&#x6DF2;&#x7682;&#x8807;&#x8D76;&#x9592;&#x9751;<span class="deco" style="font-weight:bold;">&#x9AD9;</span></li> </ul></li> </ul></li> <li>CJK 互換漢字(全て <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> に含まれない) <ul> <li>統合漢字として扱うべきもの <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれるもの <ul> <li>&#xFA0F;<span class="deco" style="font-weight:bold;">&#xFA11;</span>&#xFA13;&#xFA14;&#xFA1F;&#xFA21;&#xFA24;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれないもの <ul> <li>&#xFA0E;&#xFA23;<span class="deco" style="font-weight:bold;">&#xFA27;</span>&#xFA28;&#xFA29;</li> </ul></li> </ul></li> <li>The <a class="keyword" href="http://d.hatena.ne.jp/keyword/IBM">IBM</a> 32 compatibility ideograph <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#xFA10;</span>&#xFA15;&#xFA16;&#xFA19;&#xFA1A;&#xFA1B;&#xFA20;&#xFA22;&#xFA26;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれないもの <ul> <li>&#xFA12;&#xFA17;&#xFA18;&#xFA1C;&#xFA1D;<span class="deco" style="font-weight:bold;">&#xFA1E;</span>&#xFA25;&#xFA2A;&#xFA2B;&#xFA2C;&#xFA2D;</li> </ul></li> </ul></li> <li>Pronunciation variants from KS X 1001:1998(すべて <a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれる) <ul> <li><span class="deco" style="font-weight:bold;">&#xF929;&#xF9DC;</span></li> </ul></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200212">JIS X 0212</a> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれるもの <ul> <li><span class="deco" style="font-weight:bold;">&#x9AB6;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> に含まれないもの <ul> <li><span class="deco" style="font-weight:bold;">&#x676E;</span></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2000 <ul> <li>合成文字 <ul> <li><span class="deco" style="font-weight:bold;">&#x304B;&#x309A;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.0 の文字 <ul> <li><span class="deco" style="font-weight:bold;">&#x3402;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.2 の CJK 互換漢字 <ul> <li><span class="deco" style="font-weight:bold;">&#xFA30;</span>&#xFA31;&#xFA32;&#xFA33;&#xFA34;&#xFA35;&#xFA36;&#xFA37;&#xFA38;&#xFA39;&#xFA3A;&#xFA3B;&#xFA3C;&#xFA3D;&#xFA3E;&#xFA3F;&#xFA40;&#xFA41;&#xFA42;&#xFA43;&#xFA44;&#xFA45;&#xFA46;&#xFA47;&#xFA48;&#xFA49;&#xFA4A;&#xFA4B;&#xFA4C;&#xFA4D;&#xFA4E;&#xFA4F;&#xFA50;&#xFA51;&#xFA52;&#xFA53;&#xFA54;&#xFA55;&#xFA56;&#xFA57;&#xFA58;&#xFA59;&#xFA5A;&#xFA5B;&#xFA5C;&#xFA5D;&#xFA5E;&#xFA5F;&#xFA60;&#xFA61;&#xFA62;&#xFA63;&#xFA64;&#xFA65;&#xFA66;&#xFA67;&#xFA68;&#xFA69;&#xFA6A;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.2 の文字 <ul> <li><span class="deco" style="font-weight:bold;">&#x3251;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1 の文字(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>ペア) <ul> <li><span class="deco" style="font-weight:bold;">&#x2000B;</span></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a>:2004 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.0 の文字 <ul> <li>&#x4FF1;&#x525D;&#x541E;<span class="deco" style="font-weight:bold;">&#x5653;</span>&#x59F8;&#x5C5B;&#x5E77;&#x7626;&#x7E6B;</li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1 の文字(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>ペア) <ul> <li><span class="deco" style="font-weight:bold;">&#x20B9F;</span></li> </ul></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a>(JIS 外の文字) <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.0 の文字 <ul> <li><span class="deco" style="font-weight:bold;">&#x263A;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1 の文字(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>ペア) <ul> <li><span class="deco" style="font-weight:bold;">&#x20BB7;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1 の文字(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>ペアではない) <ul> <li><span class="deco" style="font-weight:bold;">&#x3F4;&#x3F5;</span></li> </ul></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.2 の文字 <ul> <li><span class="deco" style="font-weight:bold;">&#x214A;</span> (※おそらく通常のフォントでは表示できません)</li> </ul></li> </ul></li> </ul> </div> <div class="section"> <h4>参考情報</h4> <p>図をまとめるための情報源について多数あったのですが、まとめきれていないのでいずれ追記 or 別記事にまとめて記載します。まずは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>を理解する上で参考になった情報源を挙げておきます。</p> <ul> <li><a href="http://www.asahi-net.or.jp/~ax2s-kmtn/character/japan.html">&#x65E5;&#x672C;&#x306E;&#x6587;&#x5B57;&#x30B3;&#x30FC;&#x30C9;</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0">エンコーディング</a>、その他用語について、いい感じにまとまっています。上では<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>を分類しすぎて全体像がつかみにくくなっているので、概要が知りたい場合は <a href="http://www.asahi-net.or.jp/~ax2s-kmtn/ref/mdc.html">Windows&#x306E;&#x6A5F;&#x7A2E;&#x4F9D;&#x5B58;&#x6587;&#x5B57;</a> のページを見るといいかもしれません。</p> <ul> <li><a href="http://www.seiai.ed.jp/sys/text/cs/mcodes/jis0213table.html">JIS X 0213 &#x30B3;&#x30FC;&#x30C9;&#x8868; (94&times;94)</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> のコード表ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200208">JIS X 0208</a> の各規格、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JIS%20X%200213">JIS X 0213</a> の各規格、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 3.1/3.2 で追加された文字が色分けされており、イメージがつかみやすいです。ちなみに聖愛中学高等学校のコンテンツで、高校の授業に使われているんだと思います。周辺のコンテンツを見るとかなり充実していて、こんなのを授業で勉強できるのはすごく羨ましいです。</p> </div> <div class="section"> <h4>(追記)</h4> <p>いくつか注意書きをするつもりが書き忘れてました。</p><p>まず、こんなめんどくさいことを考えたくなければ、システム全体を <a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> 系(<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> とか <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-16">UTF-16</a> とか)で統一しましょう。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a> だけで文字を扱うことができれば、JIS 系の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%BC%EF%B0%CD%C2%B8%CA%B8%BB%FA">機種依存文字</a>、MS932 の注意点からは解放されます。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8">サロゲート</a>・ペアや合成文字、CJK統一文字/CJK互換文字の問題は残りますが。)</p><p>あと、上記に挙げた全ての文字種でテストすれば十分かというと、そういうわけではありません。たとえば <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> では 2 バイト目に \ が入るから問題になりやすいとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/EUC">EUC</a>-JP で文字境界を意識しないと意図しない処理になるとか、ASCII では下位 7 bit しか扱わないから \xa5 が \x25 になるとか、そういった部分には一切触れていません。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BD%B8%B9%E7">文字集合</a>に絡まない部分については個別にご確認ください。</p> </div> Mon, 19 Sep 2011 19:22:40 +0900 hatenablog://entry/17680117126982586430 文字コード 携帯サイトを UTF-8 で作りたくて au ブラウザのバージョンを調べてみた https://miau.hatenablog.com/entry/20110918/1316354441 <p><img class="daily-photo-from-diary-import" src="https://cdn-ak.d.st-hatena.com/diary/miau/2011-09-18.png" alt="miau2011-09-18" title="miau2011-09-18"></p><br /> <p>現在構築中のシステム、全体的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9">文字コード</a>は <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> で統一するつもりだったのですが、携帯電話用のサイトは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で表示する流れになってしまったようで。<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> で統一できると何かと楽なので、携帯電話が <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> に対応してそうか情報を集めてみました。</p><p>結論ですが、サイトの特性によるので一概には言えなそうです。<br /> <br /> </p> <div class="section"> <h4>まとまった情報</h4> <ul> <li><a href="http://symple.jp/113.html">au&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3001;&#x3044;&#x307E;&#x3060;&#x306B;UTF-8&#x304C;&#x4F7F;&#x3048;&#x305A;&#xFF01; | &#x682A;&#x5F0F;&#x4F1A;&#x793E;&#x30B7;&#x30F3;&#x30E1;&#x30C8;&#x30EA;&#x30C3;&#x30AF;&#x516C;&#x5F0F;&#x30D6;&#x30ED;&#x30B0; - &#x643A;&#x5E2F;&#x958B;&#x767A;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x308B;&#x6280;&#x8853;&#x60C5;&#x5831;</a></li> </ul><p>2010-09-09 時点の情報で、見つけた中では一番詳細な比較になっていました。表示が正しく行われているかだけでなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> 対応やパラメータの文字化けについても言及してされています。まとめを抜き出すと、</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/docomo">docomo</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/SoftBank">SoftBank</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a>に完全対応できているが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a>は最新ブラウザ(バージョン7.2)ですら完全に対応できていない!しかも<a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a>はブラウザバージョンや<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>かどうかなどの要因で何やら複雑に変化している。</p> </blockquote> <p>とのことで。</p><p>最近の <a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a> 端末にはブラウザ ver7.2 と ver6.2 の二種類がありますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> でサイトを構築した場合、</p> <ol> <li>ブラウザ ver7.2 の場合 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/XHTML">XHTML</a> のコンテンツであれば動作に問題なし</li> <li>HTML のコンテンツでは、非 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> 通信時に GET 送信のパラメータが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で送られる</li> </ul></li> <li>ブラウザ ver6.2 の場合 <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/XHTML">XHTML</a> や <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> を使用した場合正しく表示されない</li> <li>HTML で 非 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> だと表示は正しく行えるが、GET 送信のパラメータが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で送られる</li> </ul></li> </ol><p>といった感じみたいです。</p><p>パラメータが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で送られてくるのはプログラム側で対策できるし、HTML/<a class="keyword" href="http://d.hatena.ne.jp/keyword/XHTML">XHTML</a> どちらを使うかもこちらで選択できますが、EC サイトなんかを運営する場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> が使えない(=ユーザがサーバの正当性を確認できない)のは致命的です。今回のシステムはまさにそういうケース(<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> を使いたい)なので、サポートする端末に ver6.2 のものが含まれる場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> でのサイト構築は諦めるしかなさそうです。</p> <blockquote> <div class="section"> <h5>(補足1)<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> 未使用でよければ・・・</h5> <p>もし構築するサイトが <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> 未使用でよければ、コンテンツを HTML で作成し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a> 用に <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> の処理を入れることで <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> でのサイト構築は可能なようです。この場合の注意点等については下記の 2 サイトが参考になりそうでした。</p> <ul> <li><a href="http://www.tatamilab.jp/rnd/archives/000382.html">&#x30B1;&#x30FC;&#x30BF;&#x30A4;&#x98F2;&#x98DF;&#x691C;&#x7D22;&#x3001;au&#x30FB;&#x30BD;&#x30D5;&#x30C8;&#x30D0;&#x30F3;&#x30AF;&#x7AEF;&#x672B;&#x306B;&#x5BFE;&#x5FDC;&#xFF5C;blog&#xFF5C;&#x305F;&#x305F;&#x307F;&#x30E9;&#x30DC;</a> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/2007-02-26">2007-02-26</a> 時点の情報。<a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a> は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で送られてくるので対策として以下のような処理を入れたとか。</li> </ul></li> </ul><pre class="code" data-lang="" data-unlink>mb_convert_encoding($_GET[&#34;Keyword&#34;],&#39;UTF-8&#39;,&#39;UTF-8,SJIS&#39;)</pre> <ul> <li><a href="http://d.hatena.ne.jp/komoriya/20090819/1250685554">&#x300C;&#x30E1;&#x30E2;&#x300D;&#x643A;&#x5E2F;&#x30B5;&#x30A4;&#x30C8;&#x3092;UTF-8&#x3067;&#x51FA;&#x529B;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x3068;SEO&#x8A55;&#x4FA1; - komoriya&#x306E;&#x306F;&#x3066;&#x306A;&#x30C0;&#x30A4;&#x30A2;&#x30EA;&#x30FC;</a> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/2009-08-19">2009-08-19</a> 時点の情報。<a class="keyword" href="http://d.hatena.ne.jp/keyword/SEO">SEO</a> 的にも問題なかったとか。</li> </ul></li> </ul> <blockquote> <p>「サイトのリニューアルの際に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> -> <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a>をやってみたんですけど、リニューアル前後での<a class="keyword" href="http://d.hatena.ne.jp/keyword/AU">AU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>の検索<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%AE%C6%FE">流入</a>数、INDEX数共に減少することなく、いくつかの最適化も行ったことも加えて増加傾向にあります。」</p> </blockquote> </div> <div class="section"> <h5>(補足2)ブラウザバージョンについて</h5> <p>バージョン 7.2 といわれる端末の UserAgent を見ても「UP.Browser/6.2〜」となっていて不思議だったんですが、ここのバージョンが「UP.Browser/6.2_7.2.〜」のものがバージョン 7.2 にあたるそうです。</p> <ul> <li><a href="http://www.flexfirm.jp/technicalnote/jikki/jk081218.html">&#x30C6;&#x30AF;&#x30CB;&#x30AB;&#x30EB;&#x30CE;&#x30FC;&#x30C8; | &#x5B9F;&#x6A5F;&#x691C;&#x8A3C;&#x306E;&#x73FE;&#x5834;&#x304B;&#x3089; | &#x682A;&#x5F0F;&#x4F1A;&#x793E;KSK &#x30D5;&#x30EC;&#x30C3;&#x30AF;&#x30B9;&#x30FB;&#x30D5;&#x30A1;&#x30FC;&#x30E0; &#x30D3;&#x30B8;&#x30CD;&#x30B9;&#x30E6;&#x30CB;&#x30C3;&#x30C8;</a></li> </ul><p>また、従来端末(KCP 等)が 6.2 以下で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/KCP%2B">KCP+</a> 端末が 7.2 とのことです。</p> </div> </blockquote> </div> <div class="section"> <h4>ブラウザバージョンを調べてみる</h4> <p>サポート対象の機種を「○年○月以降に発売のもの」だとか「過去○年以内に発売のもの」と決めて、うまいこと ver7.2 の端末までに絞り込めれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> でサイト構築してもよさそうなので、ここ数年発売されている機種のブラウザバージョンを調べてみました。<br /> 調査には以下のデータ(2011-08-25 版)を使用しました。</p> <ul> <li><a href="http://r.impressrd.jp/iil/k-taiprofile">&#x30B1;&#x30FC;&#x30BF;&#x30A4;&#x7AEF;&#x672B;&#x30D7;&#x30ED;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x30C7;&#x30FC;&#x30BF;&#xFF08;&#x7121;&#x511F;&#x7248;&#xFF09;</a> <ul> <li>→<a href="http://webrage.jp/service/mcg/data/dprofile.html">&#x30B5;&#x30FC;&#x30D3;&#x30B9; | &#x682A;&#x5F0F;&#x4F1A;&#x793E; &#x30A6;&#x30A7;&#x30D6;&#x30EC;&#x30C3;&#x30B8;</a>(移管先)</li> </ul></li> </ul><p>また、冒頭のサイトのブックマークで</p> <blockquote> <p><a href="http://blog.hatena.ne.jp/tailtame/">id:tailtame</a> Mobile, tips<br /> 「UP.Browser/7.2」でちょっと調べたら今度の800MHz帯の周波数再編で全部<a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a>対応携帯になるのか…もうちょっとだなぁ。</p> </blockquote> <p>とありました。800MHz帯の再編により、新800MHz帯が利用できない機種は 2012年7月24日 以降に使えなくなるという話のようで。</p> <ul> <li><a href="http://www.kddi.com/corporate/news_release/2010/0405a/besshi.html">800MHz&#x5E2F;&#x306E;&#x5468;&#x6CE2;&#x6570;&#x518D;&#x7DE8;&#x306B;&#x4F34;&#x3046;&#x300C;CDMA 1X&#x300D;&#x306A;&#x3069;&#x306E;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x7D42;&#x4E86;&#x7B49;&#x306E;&#x304A;&#x77E5;&#x3089;&#x305B;&#x3008;&#x5225;&#x7D19;&#x3009; | 2010&#x5E74; | KDDI&#x682A;&#x5F0F;&#x4F1A;&#x793E;</a></li> </ul><p>に端末の一覧があったので、この情報も集めてみることにします。こちらについては 2006/12/15?発売の <a href="http://ja.wikipedia.org/wiki/W47T">W47T</a> が「<a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a>初のトリプルバンド(L800(在来800)MHz、N800(新800)MHz、2GHz)端末」とのことなので、これ以降の端末だけ情報を集めれば十分そうです。</p><p><span class="deco" style="font-weight:bold;">(2012/08/06 追記)</span><br /> わざわざ調べてしまいましたが、</p> <ul> <li><a href="http://keitaiall.jp/list.html">&#x6A5F;&#x7A2E;&#x60C5;&#x5831;&#x4E00;&#x89A7; &#xFF1A;&#xFF1A; &#x643A;&#x5E2F;&#x5411;&#x3051;&#x958B;&#x767A;&#x8005;&#x306E;&#x305F;&#x3081;&#x306E;&#x6A5F;&#x7A2E;&#x60C5;&#x5831;&#x30B5;&#x30A4;&#x30C8; &#xFF1A;&#xFF1A; KEITAIALL&#xFF1A;&#x30B1;&#x30FC;&#x30BF;&#x30A4;&#x30FB;&#x30AA;&#x30FC;&#x30EB;</a></li> </ul><p>こちらで</p> <ul> <li>キャリア: <a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a></li> <li>発売日: >2006/12/15</li> </ul><p>としてフィルタして、発売日でソートすれば同じ情報が最新の状態で見られます・・・。<br /> <span class="deco" style="font-weight:bold;">(2012/08/06 追記 ここまで)</span><br /> </p> </div> <div class="section"> <h4>調査結果</h4> <p>各月に発売された端末を分類すると、こんな感じになりました。これ以前の機種はすべて新800MHz非対応機種 or ver6.2 の機種でした。なお、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>は対象に入っていません。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/miau/20110918225330" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/miau/20110918/20110918225330.png" alt="f:id:miau:20110918225330p:image" title="f:id:miau:20110918225330p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>まず、新800MHz 対応機種にも ver6.2 のものは多数あるようで。残念ながら「2012-07-24 以降は何も気にせずに <a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> でサイト構築できるようになる」とは言えないようです。</p><p>次に、最近発売されている機種はほとんど ver7.2 ですが、まだちらほらと ver6.2 が残っています。とはいえ、2009年11月以降に発売されている ver6.2 の機種は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EB%A5%D6%A5%E9%A5%A6%A5%B6">フルブラウザ</a>非対応機種で、</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%CA%C3%B1%A5%B1%A1%BC%A5%BF%A5%A4">簡単ケータイ</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E5%A5%CB%A5%A2%A5%B1%A1%BC%A5%BF%A5%A4">ジュニアケータイ</a></li> <li>ビジネス用(あえて機能制限している)</li> <li>800MHz帯周波数再編の代替機で、主に通話とメールだけの機能に集約している(<a href="http://ja.wikipedia.org/wiki/PT002">P002</a>)</li> </ul><p>とわけありの品ばかりなんですよね。<a href="http://ja.wikipedia.org/wiki/KCP">KCP - Wikipedia</a> にも以下のような説明がありました。</p> <blockquote> <p>このため、2010年度以降に新規開発された従来のKCPに対応した機種は前述の通り、SANYOブランドおよび<a class="keyword" href="http://d.hatena.ne.jp/keyword/KCP%2B">KCP+</a>/KCP3.x対応機種[2]を除く京セラ全機種、および<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%CA%C3%B1%A5%B1%A1%BC%A5%BF%A5%A4S">簡単ケータイS</a> PT001[3]を除く韓パンテック全機種に見られるのみとなり、事実上、KCP対応機種は初心者向けおよび高齢者向け、児童向けにそれぞれ整理されつつある。</p> </blockquote> <p>これらをどう扱うかが問題で。「わざわざこういう機種を選ぶくらいだから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%E9%A5%A6%A5%B8%A5%F3%A5%B0">ブラウジング</a>はしない人たちでしょ」と切り捨ててしまえるサイトもあるでしょうし、逆にこういった層を対象にしているサイトであれば「見られない場合は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EB%A5%D6%A5%E9%A5%A6%A5%B6">フルブラウザ</a>で見てね」という逃げも打てず、サポート対象にせざるを得ません。本当は利用者の割合とか調べて決めるのがいいんでしょうね。</p><p>今回のサイトは携帯電話でのアクセスがかなり多いですし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Shift_JIS">Shift_JIS</a> で表示する方針も妥当そうなので、おとなしくそれに従うことにしました。まあ方針に納得できたのでよかったです。</p> </div> Sun, 18 Sep 2011 23:00:41 +0900 hatenablog://entry/17680117126982586493