heyheytower 日々のメモです。誰かのお役に立てれば幸いです。 2018-11-13T01:19:47+09:00 maijou2501 Hatena::Blog hatenablog://blog/8454420450073236792 家庭内の情報共有【その2】(Alexa Echo Plus, Any.do) hatenablog://entry/10257846132668837667 2018-11-13T01:19:47+09:00 2018-11-21T23:22:13+09:00 Alexa Echo Plus を購入したので、Alexa の "買い物リスト"、"やることリスト" と自分の定期タスク管理を連動したく、ToDoアプリ選定・Slack連動を目的としました。 <p><figure id="anydo"> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20181113/20181113004032.png" alt="anydo" title="anydo" class="hatena-fotolife" itemprop="image"></span> <figcaption> Pic.1 Any.do でのToDoリストの様子 </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#概要">概要</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#ToDoアプリの選定">ToDoアプリの選定</a></li> <li><a href="#タスク管理ソフト-Anydo-と-Slack-を連動する方法">タスク管理ソフト "Any.do" と Slack を連動する方法</a></li> <li><a href="#未処理タスクのリマインド実行の実装">未処理タスクのリマインド実行の実装</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>以前のエントリ<a href="http://maijou2501.hateblo.jp/entry/home-infoshare-slack-trello-hubot">家庭内の情報共有(Slack, Trello, IFTTT, HUBOT, Zaim, MyThings) - heyheytower</a>で家庭内の情報共有についてまとめておりました。</p> <p>今回 Alexa Echo Plus を購入したので、Alexa の "買い物リスト"、"やることリスト" と自分の定期タスク管理を連動したく、ToDoアプリ選定・Slack<a href="#f-d6a05a27" name="fn-d6a05a27" title="https://slack.com">*1</a> 連動を目的としました。</p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=maijou2501-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01J4IY8WE&linkId=65c02e9157233cc29a087a1d58e5d63b"></iframe> <h2 id="概要">概要</h2> <p>本エントリでは下記の調査・実施を行った。</p> <ul> <li>Alexa の "買い物リスト"、"やることリスト" と連動できるToDoアプリの選定(Any.do一択でした)</li> <li>タスク管理ソフト "Any.do" と Slack を連動する方法</li> <li>未処理タスクの slack リマインド実行の実装</li> </ul> <h2 id="方法">方法</h2> <h3 id="ToDoアプリの選定">ToDoアプリの選定</h3> <p>日本語圏で使えるToDoアプリは "Any.do"<a href="#f-a2dd3a14" name="fn-a2dd3a14" title="https://www.any.do/">*2</a> 一択でした。</p> <p>しかしながら Trello<a href="#f-56dc662f" name="fn-56dc662f" title="https://trello.com/">*3</a> と同じように、下記が実行できるので問題ないと判断しました。</p> <ul> <li>定期タスク追加が可能(週・月一は設定できるが、2週に一回などは設定できないが)</li> <li>やったかやっていなかチェックできる</li> <li>Slack と連動できる(IFTTTなど経由で。アプリネイティブではサービスは無し。)</li> </ul> <h3 id="タスク管理ソフト-Anydo-と-Slack-を連動する方法">タスク管理ソフト "Any.do" と Slack を連動する方法</h3> <p>単純に IFTTT<a href="#f-89bf31af" name="fn-89bf31af" title="http://ifttt.com">*4</a> を利用します。</p> <ul> <li>Item added to your To Do List</li> <li>Item completed on your To Do List</li> <li>Item added to your Shopping List</li> <li>Item completed on your Shopping List</li> </ul> <p>Alexa の上記トリガーと、Slack 出力を連携させます。 ※2018/11初旬ほどから日本語化けが直り、ようやく運用に乗るようになりました。</p> <p><figure id="anydo_shopping"> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20181113/20181113004334.png" alt="anydo_shopping" title="anydo_shopping" class="hatena-fotolife" itemprop="image"></span> <figcaption> Pic.2 Alexaから買い物リストに追加を行い slack へ投稿される様子 </figcaption> </figure></p> <p><figure id="anydo_task"> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20181113/20181113004408.png" alt="anydo_task" title="anydo_task" class="hatena-fotolife" itemprop="image"></span> <figcaption> Pic.3 Any.do からタスク完了チェックを行い slack へ投稿される様子 </figcaption> </figure></p> <h3 id="未処理タスクのリマインド実行の実装">未処理タスクのリマインド実行の実装</h3> <p>Any.do のリストをコマンドから操作できる<a href="https://www.npmjs.com/package/ado-cli">ado-cli - npm</a>を利用し、必要な出力を抜き出し、Slack へ投稿します。 (公式<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>などはなさそうでした。) Slack への投稿は<a href="https://qiita.com/tt2004d/items/50d79d1569c0ace118d6">[10分で出来る]シェルスクリプトの結果をslackに投稿 - Qiita</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を使わせていただきました。</p> <pre class="code" data-lang="" data-unlink>$ cat /home/pi/Programs/shell/181103-slack-anydo/anydo-daily.sh #!/bin/sh /home/pi/.anyenv/envs/ndenv/versions/v8.9.3/bin/ado login -e mail@address -p password /home/pi/.anyenv/envs/ndenv/versions/v8.9.3/bin/ado list | sed &#39;:lbl1;N;s/SOMEDAY.*TODAY.*\n//;b lbl1;&#39; | grep -E &#34;掃除|todo&#34; | /home/pi/Programs/shell/181103-slack-anydo/slack-todo.sh /home/pi/.anyenv/envs/ndenv/versions/v8.9.3/bin/ado list | sed &#39;:lbl1;N;s/SOMEDAY.*TODAY.*\n//;b lbl1;&#39; | grep -v -E &#39;^$&#39; | grep -v -E &#34;掃除|todo&#34; | /home/pi/Programs/shell/181103-slack-anydo/slack-shopping.sh $ $ ls -la /home/pi/Programs/shell/181103-slack-anydo/anydo-daily.sh -rwxrwxrwx 1 pi pi 528 11月 5 01:44 /home/pi/Programs/shell/181103-slack-anydo/anydo-daily.sh</pre> <p>ado-<a class="keyword" href="http://d.hatena.ne.jp/keyword/cli">cli</a> は表示するリストを指定できないので下記をうまく<a class="keyword" href="http://d.hatena.ne.jp/keyword/Grep">Grep</a>してそれぞれ、買い物リスト・やることリストの項目として Slack 通知しています。</p> <ul> <li>Alexa から買い物リスト追加だと Any.do では SOMEDAY に登録される</li> <li>Alexa からやることリスト追加だと Any.do ではTODAYに登録される</li> </ul> <pre class="code" data-lang="" data-unlink>$ /home/pi/.anyenv/envs/ndenv/versions/v8.9.3/bin/ado list SOMEDAY (0) - パン用スキム UPCOMING (19) - [掃除]床の水拭き - [掃除]ホコリ取り -snip- - [todo]ドキュメント整理 - [todo]通帳記帳 TOMORROW (0) TODAY (1) - [todo]ドキュメント整理</pre> <p>定時投稿は cron を使います。</p> <pre class="code" data-lang="" data-unlink>$ sudo crontab -e # Daily 0 17 * * * /home/pi/Programs/shell/181103-slack-anydo/anydo-daily.sh</pre> <p><figure id="anydo_shopping_reminder"> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20181113/20181113005106.png" alt="anydo_shopping_reminder" title="anydo_shopping_reminder" class="hatena-fotolife" itemprop="image"></span> <figcaption> Pic.4 Any.do からの買い物リスト定期リマインドの様子 </figcaption> </figure></p> <p><figure id="anydo_task_reminder"> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20181113/20181113005051.png" alt="anydo_task_reminder" title="anydo_task_reminder" class="hatena-fotolife" itemprop="image"></span> <figcaption> Pic.5 Any.do からのやることリスト定期リマインドの様子 </figcaption> </figure></p> <h2 id="まとめ">まとめ</h2> <p><a href="#sec_1">目的</a>については達成しました。<br/> これで声によって、やることリスト・買い物リストへの追加が行え、そしてそのリストの残タスクを Slack にて確認することもできるようになりました。</p> <p>現在試験運用中なので、これから使用感・運用に伴う変更点や追加点など随時更新したいと思います。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-d6a05a27" name="f-d6a05a27" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://slack.com">https://slack.com</a></span></p> <p class="footnote"><a href="#fn-a2dd3a14" name="f-a2dd3a14" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.any.do/">https://www.any.do/</a></span></p> <p class="footnote"><a href="#fn-56dc662f" name="f-56dc662f" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://trello.com/">https://trello.com/</a></span></p> <p class="footnote"><a href="#fn-89bf31af" name="f-89bf31af" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://ifttt.com">http://ifttt.com</a></span></p> </div> maijou2501 Ubuntu16.04 で IPv6 (OCN 光 マンション、NEC AtermWR8700N) hatenablog://entry/8599973812341411178 2018-01-28T01:06:31+09:00 2018-02-05T01:42:59+09:00 プロバイダのOCNのプラン "OCN 光" が IPv6接続に対応したようなので、アパート環境のIPv6対応を行った。 <p><figure id="pic_ipv6"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180128/20180128000013.png" title="ubuntu_16.04-ipv6" alt="ubuntu_16.04-ipv6" /> <figcaption> Pic.1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続確認 </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#プロバイダとプランの組み合わせとIPv6利用可能か確認">プロバイダとプランの組み合わせとIPv6利用可能か確認</a></li> <li><a href="#ブロードバンドルーターのIPv6接続対応確認">ブロードバンドルーターのIPv6接続対応確認</a></li> <li><a href="#Ubuntu1604-の-IPv6設定確認">Ubuntu16.04 の IPv6設定確認</a></li> <li><a href="#動作確認">動作確認</a><ul> <li><a href="#Ubuntu1604-Desktop">Ubuntu16.04 Desktop</a></li> <li><a href="#スマートフォン-TORQUEトルク-G034">スマートフォン "TORQUE(トルク) G03"*4</a></li> <li><a href="#Kindle-Fire-HD-8-タブレット5">Kindle Fire HD 8 タブレット*5</a></li> <li><a href="#Kindle-Paperwhite-Wi-Fi-第5世代6">Kindle Paperwhite Wi-Fi (第5世代)*6</a></li> </ul> </li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>プロバイダのOCN<a href="#f-081daa57" name="fn-081daa57" title="https://support.ntt.com/ocn?parentGoodsCode=511">*1</a>のプラン "OCN 光" が <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a> <a href="#f-3f20540e" name="fn-3f20540e" title="https://ja.wikipedia.org/wiki/IPv6">*2</a>接続に対応したようなので、アパート環境の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>対応を行った。</p> <p>自分のNW環境</p> <ul> <li>プロバイダ OCN, プラン "OCN 光 マンション" を契約</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A1%BC%A5%C9%A5%D0%A5%F3%A5%C9%A5%EB%A1%BC%A5%BF">ブロードバンドルータ</a>ー "AtermWR8700N"<a href="#f-c00b3ccb" name="fn-c00b3ccb" title="http://www.aterm.jp/product/atermstation/product/warpstar/wr8700n-hp/">*3</a></li> </ul> <p>自分のPC環境</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/debian_version stretch/sid $ uname <span class="synSpecial">-a</span> Linux calc0 4.4.0<span class="synConstant">-112</span>-generic <span class="synComment">#135-Ubuntu SMP Fri Jan 19 11:48:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux</span> $ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=16.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=xenial <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 16.04.3 LTS</span><span class="synStatement">&quot;</span> $ cat /etc/network/interfaces <span class="synComment"># interfaces(5) file used by ifup(8) and ifdown(8)</span> auto lo iface lo inet loopback auto enp0s25 iface enp0s25 inet dhcp </pre> <h2 id="方法">方法</h2> <p>基本的には下記の記事を参考にした。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsupport.ntt.com%2Focn%2Fsupport%2Fpid2900000jzj" title="OCN IPv6インターネット接続|OCN | NTT Com お客さまサポート" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="プロバイダとプランの組み合わせとIPv6利用可能か確認">プロバイダとプランの組み合わせと<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>利用可能か確認</h3> <p>私は "OCN 光 マンション" を契約しているのですが、</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsupport.ntt.com%2Fhikari%2Ffaq%2Fdetail%2Fpid2300000h6p" title="OCN IPv6インターネット接続機能(IPoE)の提供状況を確認したい | OCN 光/OCN | NTT Com お客さまサポート" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%E5%B5%AD">上記</a>を参考に確認したところ、下記のようにIPoE接続を利用できるようであった。</p> <pre class="code" data-lang="" data-unlink>IPv6インターネット接続 接続方式 ご利用可否 IPoE接続 ご利用いただけます</pre> <h3 id="ブロードバンドルーターのIPv6接続対応確認"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A1%BC%A5%C9%A5%D0%A5%F3%A5%C9%A5%EB%A1%BC%A5%BF">ブロードバンドルータ</a>ーの<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続対応確認</h3> <p>下記から "AtermWR8700N" で<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>ブリッジが可能であることを確認した。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fflets.com%2Fnext%2Flist_router.html" title="フレッツ 光ネクスト対応状況一覧表(他社ブロードバンドルーター)|フレッツ 光ネクスト|フレッツ光公式|NTT東日本|インターネット接続ならフレッツ光" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A1%BC%A5%C9%A5%D0%A5%F3%A5%C9%A5%EB%A1%BC%A5%BF">ブロードバンドルータ</a>ーの WEB UI にアクセスし、下記項目から設定を適用した。<br/> 基本設計>基本設定><a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>ブリッジ</p> <h3 id="Ubuntu1604-の-IPv6設定確認">Ubuntu16.04 の <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>設定確認</h3> <p>デフォルトの設定で<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>が有効であり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>設定だったため特に設定は不要であった。</p> <p>使用する<a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a>サーバを変更しておきます。</p> <pre class="code" data-lang="" data-unlink># IPv6 DNS setting { echo &#34;2001:4860:4860::8888&#34; echo &#34;2001:4860:4860::8844&#34; } | sudo tee -a /etc/resolvconf/resolv.conf.d/head sudo service networking restart</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a>サーバのデフォルトも下記のように無事変わったようです。</p> <pre class="code" data-lang="" data-unlink>$ nslookup -query=aaaa google.com Server: 2001:4860:4860::8888 Address: 2001:4860:4860::8888#53 Non-authoritative answer: google.com has AAAA address 2404:6800:4004:81a::200e Authoritative answers can be found from:</pre> <h3 id="動作確認">動作確認</h3> <h4 id="Ubuntu1604-Desktop">Ubuntu16.04 Desktop</h4> <p><a href="http://www.ocn.ne.jp/v6/">IPアドレスについて| OCN</a> から確認した結果は、<a href="#pic_ipv6">スクリーンショット</a>のとおり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv4">IPv4</a>を同時に利用できているようであった。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>アドレスは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a>上からの<code>ifconfig</code>結果の "inet6アドレス 範囲:グローバル" とも一致していた。</p> <h4 id="スマートフォン-TORQUEトルク-G034"><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> "TORQUE(トルク) G03"<a href="#f-00a679ab" name="fn-00a679ab" title="http://www.kyocera.co.jp/prdct/telecom/consumer/lineup/g03/">*4</a></h4> <p>端末自体は <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a> に対応しているよう。</p> <p><figure id="pic_ipv6_torque_wifi"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180128/20180128223348.png" title="ipv6-torque-wifi" alt="ipv6-torque-wifi" /> <figcaption> Pic.2 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続確認(<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/Wi-Fi">Wi-Fi</a>接続) </figcaption> </figure></p> <p>しかしながら <a class="keyword" href="http://d.hatena.ne.jp/keyword/au">au</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/KDDI">KDDI</a>)回線では、IPv6接続できないようでした。</p> <p><figure id="pic_ipv6_torque_au"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180128/20180128222605.png" title="ipv6-torque-au" alt="ipv6-torque-au" /> <figcaption> Pic.3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続確認(<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/au">au</a>回線接続) </figcaption> </figure></p> <h4 id="Kindle-Fire-HD-8-タブレット5"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle%20Fire%20HD">Kindle Fire HD</a> 8 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%D6%A5%EC%A5%C3%A5%C8">タブレット</a><a href="#f-4d748535" name="fn-4d748535" title="https://www.amazon.co.jp/Fire-HD-8-%E3%82%BF%E3%83%96%E3%83%AC%E3%83%83%E3%83%88-8%E3%82%A4%E3%83%B3%E3%83%81-New%E3%83%A2%E3%83%87%E3%83%AB-16GB-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B01J94SZCM">*5</a></h4> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01J94SZCM/maijou2501-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51QNV8acCXL._SL160_.jpg" class="hatena-asin-detail-image" alt="Fire HD 8 タブレット (Newモデル) 16GB、ブラック" title="Fire HD 8 タブレット (Newモデル) 16GB、ブラック"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01J94SZCM/maijou2501-22/">Fire HD 8 タブレット (Newモデル) 16GB、ブラック</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2017/06/06</li><li><span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li><li><a href="http://d.hatena.ne.jp/asin/B01J94SZCM/maijou2501-22" target="_blank">この商品を含むブログ (4件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a> 対応OKでした。</p> <p><figure id="pic_ipv6_kindle_fire"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180128/20180128222036.png" title="ipv6-kindle-fire-wifi" alt="ipv6-kindle-fire-wifi" /> <figcaption> Pic.4 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続確認(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle%20Fire">Kindle Fire</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a>接続) </figcaption> </figure></p> <h4 id="Kindle-Paperwhite-Wi-Fi-第5世代6"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle%20Paperwhite">Kindle Paperwhite</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a> (第5世代)<a href="#f-05f609b8" name="fn-05f609b8" title="https://www.amazon.co.jp/gp/product/B007OZO03M/ref=oh_aui_search_detailpage?ie=UTF8&psc=1">*6</a></h4> <p>IPv6 には対応していないようでした。(※2012年の製品)</p> <p><figure id="pic_ipv6_kindle_paperwhite"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180128/20180128223942.png" title="ipv6-kindle-paperwhite-wifi" alt="ipv6-kindle-paperwhite-wifi" /> <figcaption> Pic.5 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>接続確認(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle%20Paperwhite">Kindle Paperwhite</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a>接続) </figcaption> </figure></p> <h2 id="まとめ">まとめ</h2> <p><a href="#sec_1">目的</a>のとおり<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPv6">IPv6</a>対応を行うことができた。</p> <h2 id="所感">所感</h2> <p>2012/05/21 にアップした本ブログ第一回の記事に対して、ようやく決着がつけられてすっきりしました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fmaijou2501.hateblo.jp%2Fentry%2F20120521%2F1337605161" title=" Ubuntu10.04 で IPv6 - heyheytower" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-081daa57" name="f-081daa57" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://support.ntt.com/ocn?parentGoodsCode=511">https://support.ntt.com/ocn?parentGoodsCode=511</a></span></p> <p class="footnote"><a href="#fn-3f20540e" name="f-3f20540e" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://ja.wikipedia.org/wiki/IPv6">https://ja.wikipedia.org/wiki/IPv6</a></span></p> <p class="footnote"><a href="#fn-c00b3ccb" name="f-c00b3ccb" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.aterm.jp/product/atermstation/product/warpstar/wr8700n-hp/">http://www.aterm.jp/product/atermstation/product/warpstar/wr8700n-hp/</a></span></p> <p class="footnote"><a href="#fn-00a679ab" name="f-00a679ab" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.kyocera.co.jp/prdct/telecom/consumer/lineup/g03/">http://www.kyocera.co.jp/prdct/telecom/consumer/lineup/g03/</a></span></p> <p class="footnote"><a href="#fn-4d748535" name="f-4d748535" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.amazon.co.jp/Fire-HD-8-%E3%82%BF%E3%83%96%E3%83%AC%E3%83%83%E3%83%88-8%E3%82%A4%E3%83%B3%E3%83%81-New%E3%83%A2%E3%83%87%E3%83%AB-16GB-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B01J94SZCM">https://www.amazon.co.jp/Fire-HD-8-%E3%82%BF%E3%83%96%E3%83%AC%E3%83%83%E3%83%88-8%E3%82%A4%E3%83%B3%E3%83%81-New%E3%83%A2%E3%83%87%E3%83%AB-16GB-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B01J94SZCM</a></span></p> <p class="footnote"><a href="#fn-05f609b8" name="f-05f609b8" class="footnote-number">*6</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.amazon.co.jp/gp/product/B007OZO03M/ref=oh_aui_search_detailpage?ie=UTF8&psc=1">https://www.amazon.co.jp/gp/product/B007OZO03M/ref=oh_aui_search_detailpage?ie=UTF8&psc=1</a></span></p> </div> maijou2501 家庭内の情報共有(Slack, Trello, IFTTT, HUBOT, Zaim, MyThings) hatenablog://entry/8599973812330684362 2018-01-06T04:52:25+09:00 2018-10-01T16:22:49+09:00 家庭内の情報共有を円滑にするために、チャットアプリ・タスク管理アプリ等を導入したことについてまとたエントリーです。 各種共有したい情報を Slack に集約します。 <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#概要">概要</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#ToDo管理">ToDo管理</a><ul> <li><a href="#未処理タスクのリマインド">未処理タスクのリマインド</a></li> </ul> </li> <li><a href="#郵便物の配達情報の共有">郵便物の配達情報の共有</a><ul> <li><a href="#Gmail-にて自動ラベル付与の設定">Gmail にて自動ラベル付与の設定</a></li> <li><a href="#Gmail-IFTTT-Slack-転送の設定">Gmail->IFTTT->Slack 転送の設定</a></li> <li><a href="#配送状況の通知-20181001-現在これまで機能が動いていることを確認できていないので使うのを辞めました">配送状況の通知 (2018/10/01 現在、これまで機能が動いていることを確認できていないので使うのを辞めました。)</a></li> </ul> </li> <li><a href="#Google-Calendar-情報の-Slack-への転送">Google Calendar 情報の Slack への転送</a></li> <li><a href="#金魚熱帯魚のご飯やり状況共有">金魚・熱帯魚のご飯やり状況共有</a><ul> <li><a href="#defunctmac-mini-setup">[defunct]mac-mini setup</a></li> <li><a href="#Raspberry-Pi2-Model-B-setup">"Raspberry Pi2 Model B" setup</a></li> <li><a href="#ご飯を忘れていた場合はリマインダーが届くようにする">ご飯を忘れていた場合はリマインダーが届くようにする</a></li> </ul> </li> <li><a href="#水槽の温度管理の通知">水槽の温度管理の通知</a></li> <li><a href="#買い物リストの共有とリマインド">買い物リストの共有とリマインド</a></li> <li><a href="#お財布情報の共有">お財布情報の共有</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>家庭内の情報共有を円滑にするために、チャットアプリ・タスク管理アプリ等を導入したことについてまとめたエントリーです。</p> <h2 id="概要">概要</h2> <p>情報を Slack<a href="#f-be90fd9d" name="fn-be90fd9d" title=" https://slack.com/ ">*1</a>に集約します。</p> <ul> <li>ToDo管理はTrelloで自動タスク生成・実行管理(リマインドはHUBOTより実行)</li> <li>郵便物の配達情報の共有は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a>->IFTTT->Slack</li> <li>勤怠情報は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Calendar">Google Calendar</a> に保存しているので Slack への編集時・予定前日の通知</li> <li>金魚・熱帯魚のご飯やり状況の共有(ご飯あげたら <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> 押下。忘れたらHUBOTよりリマインド)</li> <li>買い物リスト共有と、定時リマインド</li> <li>お財布情報はZaimで管理しているので、出入金があったら Slack へ通知</li> </ul> <h2 id="方法">方法</h2> <h3 id="ToDo管理">ToDo管理</h3> <p>下記ができるプラットフォームとして Trello<a href="#f-b6a13529" name="fn-b6a13529" title="https://trello.com/">*2</a> を選択しました。</p> <ul> <li>定期タスク追加が可能</li> <li>やったかやっていなかチェックできる</li> <li>Slack と連動できる</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a> を公開している (HUBOT と簡単に連携できる。リマインドのために使える仕組みがある)</li> </ul> <p>定期タスク登録は Power-Up > Card Repeater を用いました。</p> <p><figure id="pic_trello_todo"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20171227/20171227205659.png" title="trello_todo" alt="trello_todo" /> <figcaption> Pic.1 Trello でのToDo管理 </figcaption> </figure></p> <p>Slack 通知には簡単に Trelloアラート<a href="#f-6154eade" name="fn-6154eade" title="https://slack.com/apps/A0F814C4R-trello-alerts">*3</a>を使ってます。</p> <h4 id="未処理タスクのリマインド">未処理タスクのリマインド</h4> <p>Trello の特定のリストのカードで、チェックリストが未完了のものを抜き出し、Slack へ定時投稿します。<br/> 下記の "scripts/trello-todo.coffee" が作ったリマインダーです。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2Fhubot-komu" title="maijou2501/hubot-komu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><figure id="trello_todo_remind"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180108/20180108225146.png" title="trello_todo_remind" alt="trello_todo_remind" /> <figcaption> Pic.2 Trello でのToDoリマインドの様子 </figcaption> </figure></p> <h3 id="郵便物の配達情報の共有">郵便物の配達情報の共有</h3> <p>下記にて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> から Slack への転送を実現します。</p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> にて自動ラベル付与</li> <li>ラベル付与されたメールを Slack へ転送</li> </ol> <h4 id="Gmail-にて自動ラベル付与の設定"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> にて自動ラベル付与の設定</h4> <p>下記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%BF%C1%F7%B6%C8">運送業</a>者からのメールに対し、自動的にラベル「delivery」が付与されるよう <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> にて設定を行いました。</p> <ul> <li>ヤマト</li> <li>佐川急便</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%CD%B9%CA%D8">日本郵便</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a></li> <li>ヨドバシ</li> </ul> <h4 id="Gmail-IFTTT-Slack-転送の設定"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a>->IFTTT->Slack 転送の設定</h4> <p>配達情報は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> に届くので、IFTTT<a href="#f-a61596e7" name="fn-a61596e7" title="https://ifttt.com/">*4</a>にて「If new email in inbox labeled delivery, then post a message to a Slack channel」を作製して、Slack に投稿するように設定しました。</p> <h4 id="配送状況の通知-20181001-現在これまで機能が動いていることを確認できていないので使うのを辞めました"> <del>配送状況の通知</del> (2018/10/01 現在、これまで機能が動いていることを確認できていないので使うのを辞めました。)</h4> <p><s></p> <p>下記のサービスをIFFTと連携させて、Slack から配送状況を追えるようにしました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.slice.com%2F" title="Rakuten Slice - the simplest way to track and organize everything you buy online." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>下記のレシピをテスト運用中です。</p> <ul> <li>「If shipment status changes, then post a message to a Slack channel」</li> <li>「Add package delivery dates to <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Calendar">Google Calendar</a>」</li> </ul> <p></s></p> <h3 id="Google-Calendar-情報の-Slack-への転送"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Calendar">Google Calendar</a> 情報の Slack への転送</h3> <ol> <li>Slack > アプリを検索する > <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> カレンダー から「Slack とカレンダーを連携させる」を選択</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20calendar">Google calendar</a> の特定のカレンダーを、Slack のチャンネルと連動するように設定</li> </ol> <p>設定が完了すると「App管理」の配下から、下記のように設定されていることが確認できます。</p> <pre class="code" data-lang="" data-unlink>勤怠 はカレンダーの更新情報やリマインダーを #予定 へ投稿します</pre> <p>これで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20calendar">Google calendar</a> で "前日に通知" などのリマインダーが予定に設定されていれば、 Slack にも前日にリマインダーが飛ぶようになります。(当然、追加・編集時にも Slack へ投稿されます)</p> <h3 id="金魚熱帯魚のご飯やり状況共有">金魚・熱帯魚のご飯やり状況共有</h3> <p>下記の記事を参考に <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> を用いて、簡単に管理します。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Ftakustaqu%2Fitems%2F8539b33780c9675c8657" title="Amazon Dash Buttonを(正しくない方向で)使ってみた - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fjsoizo%2Fitems%2F3b8bba4160f41aef20f4" title="Amazon Dash ButtonをただのIoTボタンとして使う - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>ご飯をあげたら <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> を押して、ご飯をあげたことを Slack で共有します。</p> <p><figure id="pic_slack"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180105/20180105202155.png" title="Slack-feed[f:id:maijou2501:20180106045101p:plain]" alt="Slack-feed" /> <figcaption> Pic.3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> を押して Slack へ自動投稿 </figcaption> </figure></p> <h4 id="defunctmac-mini-setup">[defunct]<a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>-mini setup</h4> <p><s> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> 検知のサーバーとして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>-mini を用いているので下記のようにセットアップを実施しました。 </s> <ins datetime="2018-01-23T02:43:47+09:00">(2018/1/23現在 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a> で運用しています。)</p> <pre class="code" data-lang="" data-unlink>// nodebrew curl -L git.io/nodebrew | perl - setup touch .bash_profile echo &#39;export PATH=$HOME/.nodebrew/current/bin:$PATH&#39; &gt;&gt; ~/.bash_profile source ~/.bash_profile // node.js, npm nodebrew install-binary stable nodebrew use v8.9.3 // brew ruby -e &#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&#34; // git brew install git // dash-button mkdir dash-button npm init npm install node-dash-button --save</pre> <h4 id="Raspberry-Pi2-Model-B-setup">"Raspberry Pi2 Model B" setup</h4> <p>省電力化したいため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>-mini の変わりに <a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a><a href="#f-8cb9aae7" name="fn-8cb9aae7" title="https://www.raspberrypi.org/">*5</a> を用いることにした。</p> <pre class="code" data-lang="" data-unlink>// pcap install sudo apt install libpcap-dev // install anyenv git clone https://github.com/riywo/anyenv ~/.anyenv echo &#39;export PATH=&#34;$HOME/.anyenv/bin:$PATH&#34;&#39; &gt;&gt; ~/.bashrc echo &#39;eval &#34;$(anyenv init -)&#34;&#39; &gt;&gt; ~/.bashrc source ~/.bashrc // dasher clone mkdir Programs cd Programs git clone https://github.com/maddox/dasher.git cd dasher // node ndenv install v8.9.3 ndenv local v8.9.3 // dasher install npm install // For `sudo npm` (ref. http://make.kosakalab.com/make/electronic-work/nodejs_raspi/) sudo visudo // edit config.json vi config/config.json // running nohup sudo npm start &amp;</pre> <h4 id="ご飯を忘れていた場合はリマインダーが届くようにする">ご飯を忘れていた場合はリマインダーが届くようにする</h4> <p>ボットが時間指定でご飯忘れフラグが立っているかをチェックして、ご飯を与えていなくフラグが立ったままの時にリマインドを行うように HUBOT<a href="#f-d9111db1" name="fn-d9111db1" title="https://hubot.github.com/">*6</a> を作製しました。</p> <p>後述するレポジトリの下記3つが連動してリマインドを行います。</p> <ul> <li>"scripts/*_fish-reset.coffee" (トリガーは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20Dash%20Button">Amazon Dash Button</a> の押下で投稿される文章で、フラグを消します)</li> <li>"scripts/*_fish-reminder-1.coffee" (フラグが立っている場合に、ご飯を忘れていると判断しリマインド実行)</li> <li>"scripts/*_fish-reminder-2.coffee" (リセット用で、フラグを立てます。ここでもう一度通知をすることも可能)</li> </ul> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2Fhubot-komu" title="maijou2501/hubot-komu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>下記は参考ページ。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fmisopeso%2Fitems%2F1f418dd02e89234499b3" title="Slack で Hubot を使えるようにする - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fmats116%2Fitems%2F0164b37ffaa90f03f2a0" title="Hubotで定期タスクを動かす - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="水槽の温度管理の通知">水槽の温度管理の通知</h3> <p>下記の記事で適正水温から外れた時に <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> へアラートを投げるようにしていたので、「If new <a class="keyword" href="http://d.hatena.ne.jp/keyword/tweet">tweet</a> by specific user @Aquarino2501, then post a message to a Slack channel」という条件で、Slack に投稿するように設定しました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fmaijou2501.hateblo.jp%2Fentry%2F2016%2F04%2F18%2F003629" title="Internet of Aquarium : ESP-WROOM-02 と ThingSpeak を利用して - heyheytower" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="買い物リストの共有とリマインド">買い物リストの共有とリマインド</h3> <p><figure id="pic_trello_buy"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180106/20180106045101.png" title="trello_buy" alt="trello_buy" /> <figcaption> Pic.4 Trello での買い物リスト管理 </figcaption> </figure></p> <p>下記と <a href="https://developers.trello.com/v1.0/reference#checklist">Trello Developers</a> を参考に、Trello の "買い物リスト" の "お使い" カードからチェックリスト情報を取得して、未チェックのものを夕方にリマインドするように HUBOT を作製しました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fengineering.otobank.co.jp%2Fentry%2F2015%2F05%2F11%2Fhubot-trello-lunch" title="TrelloとHubotの美味しい連携 ~ Hubotにランチを決めさせてみよう - OTOBANK Engineering Blog" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>下記の "scripts/trello-buy.coffee" が作ったリマインダーです。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2Fhubot-komu" title="maijou2501/hubot-komu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="お財布情報の共有">お財布情報の共有</h3> <p>下記の記事を参考に、Zaim<a href="#f-095487fb" name="fn-095487fb" title="https://zaim.net/">*7</a> を MyThings<a href="#f-7ae810c8" name="fn-7ae810c8" title="https://mythings.yahoo.co.jp/">*8</a>を連動させています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fitooky.com%2Fnotify-slack-of-deposits-and-withdrawals-of-zaim" title="Zaimの入出金をSlackに通知するようにした" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><figure id="pic_zaim"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20180121/20180121235805.png" title="zaim+MyThings+slack" alt="zaim+MyThings+slack" /> <figcaption> Pic.5 Zaim で入出金があった場合の slack への連動 </figcaption> </figure></p> <h2 id="まとめ">まとめ</h2> <p><a href="#sec_1">目的</a>については、取り急ぎまとめは完了です。</p> <p>現在試験運用中なので、これから使用感・運用に伴う変更点や追加点など随時更新したいと思います。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-be90fd9d" name="f-be90fd9d" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"> <a href="https://slack.com/">https://slack.com/</a> </span></p> <p class="footnote"><a href="#fn-b6a13529" name="f-b6a13529" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://trello.com/">https://trello.com/</a></span></p> <p class="footnote"><a href="#fn-6154eade" name="f-6154eade" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://slack.com/apps/A0F814C4R-trello-alerts">https://slack.com/apps/A0F814C4R-trello-alerts</a></span></p> <p class="footnote"><a href="#fn-a61596e7" name="f-a61596e7" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://ifttt.com/">https://ifttt.com/</a></span></p> <p class="footnote"><a href="#fn-8cb9aae7" name="f-8cb9aae7" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.raspberrypi.org/">https://www.raspberrypi.org/</a></span></p> <p class="footnote"><a href="#fn-d9111db1" name="f-d9111db1" class="footnote-number">*6</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://hubot.github.com/">https://hubot.github.com/</a></span></p> <p class="footnote"><a href="#fn-095487fb" name="f-095487fb" class="footnote-number">*7</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://zaim.net/">https://zaim.net/</a></span></p> <p class="footnote"><a href="#fn-7ae810c8" name="f-7ae810c8" class="footnote-number">*8</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://mythings.yahoo.co.jp/">https://mythings.yahoo.co.jp/</a></span></p> </div> maijou2501 言語別開発ツールの棚卸し hatenablog://entry/10328749687214595030 2017-02-09T00:59:57+09:00 2017-02-22T22:48:15+09:00 言語別の開発ツール群を棚卸しした。言語は、C言語・Python・Ruby・Haskell、プラスαです。 <p><figure id="pic_aquarino"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20170208/20170208231531.png" title="HaskellLogoStyPreview-1.png" alt="HaskellLogoStyPreview-1.png" /></p> <p><figcaption> Pic.1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> Logo </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#自分の環境">自分の環境</a></li> <li><a href="#言語別の開発ツール群">言語別の開発ツール群</a></li> <li><a href="#参考にしたサイト">参考にしたサイト</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>開発スタイルについて思うところがあり見直したため、自分用のメモとして言語別の開発ツール群をまとめた。</p> <h2 id="自分の環境">自分の環境</h2> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/debian_version stretch/sid $ uname <span class="synSpecial">-a</span> Linux calc0 4.4.0<span class="synConstant">-62</span>-generic <span class="synComment">#83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</span> $ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=16.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=xenial <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 16.04.1 LTS</span><span class="synStatement">&quot;</span> </pre> <h2 id="言語別の開発ツール群">言語別の開発ツール群</h2> <p>エディタは"neovim"<a href="#f-ac3efedb" name="fn-ac3efedb" title="https://neovim.io/">*1</a>を用いており、補完・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%BF%A5%C3%A5%AF%A5%B9">シンタックス</a>チェック(syntastic<a href="#f-94392034" name="fn-94392034" title="https://github.com/vim-syntastic/syntastic">*2</a>)・タグジャンプ(+tagbar<a href="#f-ca5a250d" name="fn-ca5a250d" title="https://github.com/majutsushi/tagbar">*3</a>)などを用いていることを断っておきます。</p> <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>を用いたものではなく、ライトなプログラム作製が主です。</p> <p><figure id="table_develop"> <figcaption> Table.1 言語別の開発ツール群 </figcaption></p> <table> <thead> <tr> <th>言語 </th> <th><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%B8%C0%B8%EC">C言語</a> </th> <th><a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> </th> <th><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> </th> <th><a class="keyword" href="http://d.hatena.ne.jp/keyword/Haskell">Haskell</a> </th> <th>Shell Script </th> <th><a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> </th> </tr> </thead> <tbody> <tr> <td>環境 </td> <td>- </td> <td>pyenv(anyenv<a href="#f-5a9e47f9" name="fn-5a9e47f9" title="https://github.com/riywo/anyenv">*4</a>)</td> <td>rbenv(anyenv) </td> <td>stack<a href="#f-e05b1aab" name="fn-e05b1aab" title="https://docs.haskellstack.org/en/stable/README/">*5</a> </td> <td>- </td> <td>- </td> </tr> <tr> <td>パッケージ管理 </td> <td>- </td> <td>pip(requirements.txt) </td> <td>gem </td> <td>Cabal </td> <td>- </td> <td>- </td> </tr> <tr> <td>Lint・スタイルチェック </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/gcc">gcc</a> </td> <td>flake8(pyflakes+pep8)+Pylint </td> <td>rubymotion+rubocop </td> <td>Hlint+scan<a href="#f-6648a9cb" name="fn-6648a9cb" title="https://hackage.haskell.org/package/scan">*6</a>+hdevtools<a href="#f-6be61048" name="fn-6be61048" title="https://hackage.haskell.org/package/hdevtools">*7</a></td> <td>ShellCheck<a href="#f-c31a2235" name="fn-c31a2235" title="https://www.shellcheck.net/">*8</a> </td> <td>mdl<a href="#f-bc02fa7b" name="fn-bc02fa7b" title="https://github.com/mivok/markdownlint">*9</a> </td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C6%A1%BC%A5%B7%A5%E7%A5%F3">ドキュメンテーション</a> </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Doxygen">Doxygen</a><a href="#f-7eb9d69b" name="fn-7eb9d69b" title="http://www.doxygen.jp/">*10</a></td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Sphinx">Sphinx</a>(docstring) </td> <td>Yard </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/haddock">haddock</a> </td> <td>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Doxygen">Doxygen</a><a href="#f-5a5bd8db" name="fn-5a5bd8db" title="https://rickfoosusa.blogspot.jp/2011/08/howto-have-doxygen-support-bash-script.html">*11</a>)</td> <td>- </td> </tr> <tr> <td>テスト-ドキュメント例示 </td> <td>(assert.h) </td> <td>doctest </td> <td>p0deje/yard-doctest(minitest-doctest)</td> <td>docktest </td> <td>- </td> <td>- </td> </tr> <tr> <td>テスト-実装 </td> <td>CUnit </td> <td>unittest </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Rspec">Rspec</a> </td> <td>Hspec </td> <td>(shUnit) </td> <td>- </td> </tr> <tr> <td>テストライナー </td> <td>Make </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Sphinx">Sphinx</a>+watchdog </td> <td>Guard </td> <td>Cabal </td> <td>- </td> <td>- </td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a> </td> <td><code>gcc -g -C0 -Wall test.c &amp;&amp; gdb a.out</code> </td> <td><code>pdb test.py</code> </td> <td><code>ruby -rdebug test.rb</code> </td> <td><code>ghci test.hs</code>(:step、:list) </td> <td><code>bash -x test.sh</code>、コード内に <code>trap 'read 〜' DEBUG</code> <a href="#f-943fef85" name="fn-943fef85" title="http://oss-lab.net/?p=730">*12</a> </td> <td>- </td> </tr> <tr> <td>タグ </td> <td>ctags </td> <td>ctags </td> <td>ctags </td> <td>hasktags<a href="#f-a917d8d5" name="fn-a917d8d5" title="https://hackage.haskell.org/package/hasktags">*13</a> </td> <td>ctags </td> <td>ctags(markdown2ctags<a href="#f-1dfb32dd" name="fn-1dfb32dd" title="https://github.com/jszakmeister/markdown2ctags">*14</a>)</td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Travis">Travis</a> CI </td> <td>autotools+Make </td> <td>unittest </td> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Rspec">Rspec</a> </td> <td>Cabal </td> <td>- </td> <td>- </td> </tr> <tr> <td>Code Climate:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%D0%A5%EC%A5%C3%A5%B8">カバレッジ</a>率計測</td> <td>- </td> <td>o </td> <td>o </td> <td>o </td> <td>- </td> <td>- </td> </tr> <tr> <td>heroku デプロイ </td> <td>- </td> <td>o </td> <td>o </td> <td>- </td> <td>- </td> <td></td> </tr> </tbody> </table> <p><ins datetime="2017-02-22T22:17:05+09:00"> 【2017/02/22 追記】デバックについて追記を行いました。 </ins></p> <p><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/Javadoc">Javadoc</a>" ライクなものが好みだったため、それが反映されています。</p> <p></figure></p> <h2 id="参考にしたサイト">参考にしたサイト</h2> <p>自分の開発スタイルが学生時代から変わらず「<a class="keyword" href="http://d.hatena.ne.jp/keyword/vim">vim</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>書いて<a class="keyword" href="http://d.hatena.ne.jp/keyword/CGI">CGI</a>」みたいなレベルだったので、TDDのバイブルを読んだり、下記のサイトなどに触発されつつ、開発スタイルについて改めました。</p> <p><a href="https://www.amazon.co.jp/gp/product/4894717115/ref=as_li_qf_sp_asin_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4894717115&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4894717115&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4894717115" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br/> 書籍:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C6%A5%B9%A5%C8%B6%EE%C6%B0%B3%AB%C8%AF">テスト駆動開発</a>入門<br/> 著者:ケント ベック</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fd.hatena.ne.jp%2Fkazu-yamamoto%2F20121205%2F1354692144" title="Haskellの単体テスト最前線 - あどけない話" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h2 id="所感">所感</h2> <p>言語別に網羅的に見ることによって、何ができていないかをチェックすることができましたし、記憶の棚卸しができました。</p> <p>言語選択・開発スタイル・使用ツールについては様々な選択肢・組み合わせがありますが、その組み合わせ考案の一助になればと思います</p> <div class="footnote"> <p class="footnote"><a href="#fn-ac3efedb" name="f-ac3efedb" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://neovim.io/">https://neovim.io/</a></span></p> <p class="footnote"><a href="#fn-94392034" name="f-94392034" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/vim-syntastic/syntastic">https://github.com/vim-syntastic/syntastic</a></span></p> <p class="footnote"><a href="#fn-ca5a250d" name="f-ca5a250d" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/majutsushi/tagbar">https://github.com/majutsushi/tagbar</a></span></p> <p class="footnote"><a href="#fn-5a9e47f9" name="f-5a9e47f9" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/riywo/anyenv">https://github.com/riywo/anyenv</a></span></p> <p class="footnote"><a href="#fn-e05b1aab" name="f-e05b1aab" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://docs.haskellstack.org/en/stable/README/">https://docs.haskellstack.org/en/stable/README/</a></span></p> <p class="footnote"><a href="#fn-6648a9cb" name="f-6648a9cb" class="footnote-number">*6</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://hackage.haskell.org/package/scan">https://hackage.haskell.org/package/scan</a></span></p> <p class="footnote"><a href="#fn-6be61048" name="f-6be61048" class="footnote-number">*7</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://hackage.haskell.org/package/hdevtools">https://hackage.haskell.org/package/hdevtools</a></span></p> <p class="footnote"><a href="#fn-c31a2235" name="f-c31a2235" class="footnote-number">*8</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.shellcheck.net/">https://www.shellcheck.net/</a></span></p> <p class="footnote"><a href="#fn-bc02fa7b" name="f-bc02fa7b" class="footnote-number">*9</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/mivok/markdownlint">https://github.com/mivok/markdownlint</a></span></p> <p class="footnote"><a href="#fn-7eb9d69b" name="f-7eb9d69b" class="footnote-number">*10</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.doxygen.jp/">http://www.doxygen.jp/</a></span></p> <p class="footnote"><a href="#fn-5a5bd8db" name="f-5a5bd8db" class="footnote-number">*11</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://rickfoosusa.blogspot.jp/2011/08/howto-have-doxygen-support-bash-script.html">https://rickfoosusa.blogspot.jp/2011/08/howto-have-doxygen-support-bash-script.html</a></span></p> <p class="footnote"><a href="#fn-943fef85" name="f-943fef85" class="footnote-number">*12</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://oss-lab.net/?p=730">http://oss-lab.net/?p=730</a></span></p> <p class="footnote"><a href="#fn-a917d8d5" name="f-a917d8d5" class="footnote-number">*13</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://hackage.haskell.org/package/hasktags">https://hackage.haskell.org/package/hasktags</a></span></p> <p class="footnote"><a href="#fn-1dfb32dd" name="f-1dfb32dd" class="footnote-number">*14</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/jszakmeister/markdown2ctags">https://github.com/jszakmeister/markdown2ctags</a></span></p> </div> maijou2501 コマンドオプションによる "ハーモニー" <harmony/> hatenablog://entry/10328749687212026351 2017-01-31T23:26:03+09:00 2017-01-31T23:30:40+09:00 "ハーモニー" の登場人物をコマンドオプションによる一発芸にて。 <p><figure id="pic_harmony"></p> <p><a href="https://www.amazon.co.jp/gp/product/4150311668/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4150311668&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4150311668&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4150311668" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p> <p><figcaption> 書名:ハーモニー<br/> 著者:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B0%CB%C6%A3%B7%D7%B3%C4">伊藤計劃</a> </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#はじめに">はじめに</a></li> <li><a href="#自分の環境">自分の環境</a></li> <li><a href="#登場人物">登場人物</a><ul> <li><a href="#霧慧-トァン">霧慧 トァン</a></li> <li><a href="#零下堂-キアン">零下堂 キアン</a></li> <li><a href="#御冷-ミァハ">御冷 ミァハ</a></li> <li><a href="#霧慧-ヌァザ">霧慧 ヌァザ</a></li> </ul> </li> <li><a href="#さいごに">さいごに</a></li> </ul> <h2 id="はじめに"><a name="sec_1"></a>はじめに</h2> <p>感想とかでなく、一発芸的なものを。</p> <p><code>netstat</code> を使っている時になんか聞いたことのある響きだなと、それなら他にもあるかなと。</p> <h2 id="自分の環境">自分の環境</h2> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/debian_version stretch/sid $ uname <span class="synSpecial">-a</span> Linux calc0 4.4.0<span class="synConstant">-59</span>-generic <span class="synComment">#80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</span> $ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=16.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=xenial <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 16.04.1 LTS</span><span class="synStatement">&quot;</span> </pre> <h2 id="登場人物">登場人物</h2> <h3 id="霧慧-トァン">霧慧 トァン</h3> <p><figure id="operation_tuan"> <figcaption>Op.1 トァン</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ netstat <span class="synSpecial">-tuan</span> 稼働中のインターネット接続 <span class="synPreProc">(</span><span class="synSpecial">サーバと確立</span><span class="synPreProc">)</span> Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 tcp <span class="synConstant">0</span> <span class="synConstant">0</span> 0.0.0.0:<span class="synConstant">25</span> 0.0.0.0:* LISTEN -snip- </pre> <p>ネットワークの上級監察官という感じ。(&ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/netstat">netstat</a> -toan&rdquo; でも良いかも)</p> <p></figure></p> <h3 id="零下堂-キアン">零下堂 キアン</h3> <p><figure id="operation_xian"> <figcaption>Op.2 キアン</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">ls</span> <span class="synSpecial">-Xian</span> 合計 <span class="synConstant">476</span> <span class="synConstant">26476551</span> drwxr-xr-x <span class="synConstant">2</span> <span class="synConstant">1000</span> <span class="synConstant">1000</span> <span class="synConstant">4096</span> <span class="synConstant">11</span>月 <span class="synConstant">19</span> <span class="synConstant">01</span>:<span class="synConstant">24</span> Desktop <span class="synConstant">13634029</span> drwxrwxr-x <span class="synConstant">14</span> <span class="synConstant">1000</span> <span class="synConstant">1000</span> <span class="synConstant">4096</span> <span class="synConstant">5</span>月 <span class="synConstant">28</span> <span class="synConstant">2015</span> Dictionary -snip- </pre> <p><code>ls</code>で色んな数字を多く出力できるか試みたが、(<code>ls</code>では)アクセス権限を数字で表現できないのであった…</p> <h3 id="御冷-ミァハ">御冷 ミァハ</h3> <p><figure id="operation_miaha"> <figcaption>Op.3 ミァハ</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ date <span class="synStatement">&quot;</span><span class="synConstant">+%M %I %a %H %A</span><span class="synStatement">&quot;</span> <span class="synConstant">04</span> <span class="synConstant">11</span> 火 <span class="synConstant">23</span> 火曜日 </pre> <p>彼女の発言はその時代においては独特だ…</p> <h3 id="霧慧-ヌァザ">霧慧 ヌァザ</h3> <p><figure id="operation_nuxa"> <figcaption>Op.4 ヌァザ</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ ps nuxa USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <span class="synConstant">0</span> <span class="synConstant">1</span> 0.0 0.0 <span class="synConstant">120020</span> <span class="synConstant">6212</span> ? Ss <span class="synConstant">22</span>:<span class="synConstant">02</span> <span class="synConstant">0</span>:<span class="synConstant">01</span> /sbin/init splash <span class="synConstant">0</span> <span class="synConstant">2</span> 0.0 0.0 <span class="synConstant">0</span> <span class="synConstant">0</span> ? S <span class="synConstant">22</span>:<span class="synConstant">02</span> <span class="synConstant">0</span>:<span class="synConstant">00</span> <span class="synStatement">[</span>kthreadd<span class="synStatement">]</span> -snip- </pre> <p>何とはいっても親子。オプションが似ています。</p> <h2 id="さいごに">さいごに</h2> <p>学生時分、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B0%CB%C6%A3%B7%D7%B3%C4">伊藤計劃</a>さんのおかげで素晴らしい読書体験ができました。<br/> 本当にありがとうございました。</p> maijou2501 `bash` でディレクトを移動した時と、コマンドが空の状態で Enter を押したときに `ls` と `git status` を表示する (よく使うコマンド操作の簡略化・自動化) hatenablog://entry/10328749687208107368 2017-01-20T01:14:42+09:00 2017-02-09T01:06:24+09:00 コマンド履歴を見るといつも同じようなコマンドを実行していた。 操作の簡略化・自動化のため、"`bash` でディレクトを移動した時と、コマンドが空の状態で Enter を押したときに `ls` と `git status` を表示する"、"bash でのcd入力の省略"、"apt の定期実行"、"cronによるコマンドの自動実行"などの設定を行った。 <p><figure id="pic_enter"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20170121/20170121001446.png" title="Enter押下時のスクリーンショット" alt="コマンド操作の簡略化・自動化した結果のスクリーンショット" /> <figcaption> Pic.1 各種トリガーで<code>ls -AFC</code> と <code>git status -sb</code> が実行されたところ </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#コマンド履歴の確認">コマンド履歴の確認</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#bash-でコマンドが空の状態で-Enter-を押したときに-ls-と-git-status-を表示する">bash でコマンドが空の状態で Enter を押したときに ls と git status を表示する</a></li> <li><a href="#ディレクトリを移動したら自動で-ls-と-git-status-を表示する">ディレクトリを移動したら自動で ls と git status を表示する</a><ul> <li><a href="#挙動">挙動</a></li> </ul> </li> <li><a href="#bash-でのcd入力の省略">bash でのcd入力の省略</a></li> <li><a href="#apt-の定期実行">apt の定期実行</a></li> <li><a href="#cronによるコマンドの自動実行">cronによるコマンドの自動実行</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> <li><a href="#余談">余談</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>コマンド履歴を確認したところ、いつも同じようなコマンドを実行していることが分かった。<br/> 操作の簡略化・自動化できる要素が多分にあったため、その対応を行う。</p> <p><figure id="operation_env"> <figcaption>Op.1 環境確認</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/debian_version stretch/sid $ uname <span class="synSpecial">-a</span> Linux calc0 4.4.0<span class="synConstant">-59</span>-generic <span class="synComment">#80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</span> $ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=16.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=xenial <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 16.04.1 LTS</span><span class="synStatement">&quot;</span> </pre> <p></figure></p> <h2 id="コマンド履歴の確認"><a name="sec_2"></a>コマンド履歴の確認</h2> <p><a href="http://d.hatena.ne.jp/zariganitosh/20131028/history_master">コマンド履歴の達人を目指してみる - ザリガニが見ていた&hellip;。</a>のコマンドを参考にさせていただきました。</p> <p><figure id="operation_history"> <figcaption>Op.2 実行頻度の高い上位10コマンド</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">history</span>|<span class="synStatement">sed</span> <span class="synSpecial">-e</span> <span class="synStatement">'</span><span class="synConstant">s/sudo //g</span><span class="synStatement">'</span>|awk <span class="synStatement">'</span><span class="synConstant">{ print $2 }</span><span class="synStatement">'</span>|<span class="synStatement">sort</span>|uniq <span class="synSpecial">-c</span>|<span class="synStatement">sort</span> <span class="synSpecial">-r</span>|head <span class="synConstant">1181</span> ll <span class="synConstant">918</span> vi <span class="synConstant">619</span> <span class="synStatement">cd</span> <span class="synConstant">534</span> git <span class="synConstant">245</span> apt <span class="synConstant">226</span> l <span class="synConstant">211</span> systemctl <span class="synConstant">165</span> journalctl <span class="synConstant">133</span> <span class="synStatement">rm</span> <span class="synConstant">129</span> cat </pre> <p></figure></p> <h2 id="方法">方法</h2> <p>できるだけキー入力を省略できるような仕組みと、定期実行でコマンド自動化(cron等)を行う。</p> <h3 id="bash-でコマンドが空の状態で-Enter-を押したときに-ls-と-git-status-を表示する"><a name="sec_3"><code>bash</code> でコマンドが空の状態で Enter を押したときに <code>ls</code> と <code>git status</code> を表示する</a></h3> <p>下記の仕組みを用いれば、<code>ls</code>と<code>git</code>の入力を減らすことができると考えた。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fyuyuchu3333%2Fitems%2Fe9af05670c95e2cc5b4d" title="Enter で ls と git status を表示すると便利 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fmarcy_o%2Fitems%2Fd51773cdd110d77cfdd8" title="fishshell で Enter 押したときに ls と git status を表示する - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>コマンドが空であることの判定は、<code>~/.bash_history</code>の行数の増加をチェックして用いることにした。<br/> 当該コードについては次のトピックが関連するので、次のセクションの<a href="#code_enter">コード</a>に併記します。</p> <h3 id="ディレクトリを移動したら自動で-ls-と-git-status-を表示する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で <code>ls</code> と <code>git status</code> を表示する</h3> <p>下記を参照しました。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fuplus_e10%2Fitems%2Fc58ab78e062218dc4eda" title="ディレクトリ移動したらls pushd popd cd autocd対応版 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>本件は <code>PROMPT_COMMAND</code> を用いることで複数のコマンド実行を実現しており、それを <code>dispatch</code> にて処理するために下記を参照しました。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Ftay07212%2Fitems%2F9509aef6dc3bffa7dd0c%23_reference-cc77df5bbe8d5944eb99" title="[BASH] PROMPT_COMMANDで複数の処理を行う - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>そして、<a href="sec_3">前述の内容</a>のコードを合わせた下記のコードを<code>.bashrc</code>に追記します。</p> <p><figure id="code_enter"> <figcaption>Code.1 <code>bash</code> で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>を移動した時と、コマンドが空の状態で Enter を押したときに <code>ls</code> と <code>git status</code> を表示する</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synComment"># Git repository check</span> function check_git <span class="synSpecial">{</span> <span class="synStatement">if [</span> <span class="synStatement">&quot;</span><span class="synPreProc">$(</span><span class="synSpecial">git rev-parse --is-inside-work-tree </span><span class="synConstant">2</span><span class="synSpecial">&gt; /dev/null</span><span class="synPreProc">)</span><span class="synStatement">&quot;</span> <span class="synStatement">=</span> <span class="synConstant">'true'</span> <span class="synStatement">]</span>; <span class="synStatement">then</span> <span class="synStatement">echo</span><span class="synConstant"> -e </span><span class="synStatement">&quot;</span><span class="synSpecial">\e</span><span class="synConstant">[0;33m--- git status ---</span><span class="synSpecial">\e</span><span class="synConstant">[0m</span><span class="synStatement">&quot;</span> git <span class="synStatement">status</span> <span class="synSpecial">-sb</span> <span class="synStatement">fi</span> <span class="synSpecial">}</span> <span class="synComment"># cd -&gt; cd + ls</span> function autols <span class="synSpecial">{</span> <span class="synStatement">if [</span> <span class="synStatement">&quot;</span><span class="synPreProc">${AUTOLS_DIR</span><span class="synStatement">:-</span><span class="synPreProc">$PWD}</span><span class="synStatement">&quot;</span> <span class="synStatement">!=</span> <span class="synStatement">&quot;</span><span class="synPreProc">$PWD</span><span class="synStatement">&quot;</span> <span class="synStatement">]</span>; <span class="synStatement">then</span> <span class="synStatement">ls</span> <span class="synSpecial">-ACF</span> check_git <span class="synStatement">fi</span> <span class="synIdentifier">AUTOLS_DIR</span>=<span class="synStatement">&quot;</span><span class="synPreProc">${PWD}</span><span class="synStatement">&quot;</span> <span class="synSpecial">}</span> <span class="synStatement">export</span><span class="synIdentifier"> PROMPT_COMMAND_AUTOLS=</span><span class="synStatement">&quot;</span><span class="synConstant">autols</span><span class="synStatement">&quot;</span> <span class="synComment"># Enter -&gt; ls + git status</span> <span class="synStatement">export</span><span class="synIdentifier"> HISTCONTROL=</span>ignorespace <span class="synIdentifier">COUNT</span>=<span class="synPreProc">$(</span><span class="synSpecial">wc -l &lt; ~/.bash_history</span><span class="synPreProc">)</span> function lsgit <span class="synSpecial">{</span> <span class="synIdentifier">COUNT_TMP</span>=<span class="synPreProc">$(</span><span class="synSpecial">wc -l &lt; ~/.bash_history</span><span class="synPreProc">)</span> <span class="synStatement">if [</span> <span class="synStatement">&quot;</span><span class="synPreProc">$COUNT</span><span class="synStatement">&quot;</span> <span class="synStatement">!=</span> <span class="synStatement">&quot;</span><span class="synPreProc">$COUNT_TMP</span><span class="synStatement">&quot;</span> <span class="synStatement">]</span>; <span class="synStatement">then</span> <span class="synIdentifier">COUNT</span>=<span class="synStatement">&quot;</span><span class="synPreProc">$COUNT_TMP</span><span class="synStatement">&quot;</span> <span class="synStatement">return</span> <span class="synConstant">0</span> <span class="synStatement">fi</span> <span class="synStatement">ls</span> <span class="synSpecial">-ACF</span> check_git <span class="synSpecial">}</span> <span class="synStatement">export</span><span class="synIdentifier"> PROMPT_COMMAND_LSGIT=</span><span class="synStatement">&quot;</span><span class="synConstant">lsgit</span><span class="synStatement">&quot;</span> <span class="synIdentifier">dispatch () {</span> <span class="synStatement">export</span><span class="synIdentifier"> EXIT_STATUS=</span><span class="synStatement">&quot;</span><span class="synPreProc">$?</span><span class="synStatement">&quot;</span> <span class="synStatement">local</span> f <span class="synComment"># shellcheck disable=SC2153</span> <span class="synStatement">for</span> f <span class="synStatement">in</span> <span class="synPreProc">${!PROMPT_COMMAND_*}</span><span class="synStatement">;</span> <span class="synStatement">do</span> <span class="synStatement">eval</span> <span class="synStatement">&quot;</span><span class="synPreProc">${!f}</span><span class="synStatement">&quot;</span> <span class="synStatement">done</span> <span class="synStatement">unset</span><span class="synIdentifier"> f</span> <span class="synIdentifier">}</span> <span class="synStatement">export</span><span class="synIdentifier"> PROMPT_COMMAND=</span><span class="synStatement">&quot;</span><span class="synConstant">dispatch</span><span class="synStatement">&quot;</span> </pre> <p></figure></p> <h4 id="挙動">挙動</h4> <p>まず <code>history</code> の挙動について下記を一読ください。</p> <blockquote><p>・先頭がスペースであるコマンドを履歴に残さない方法 > ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF">はてなブックマーク</a>での補足コメント、有難う御座いました。</p> <p>1 > export HISTCONTROL=ignorespace<br/> ・先頭がスペースであるコマンドを履歴に残さない+重複コマンドを記録しない方法</p> <p>1 > export HISTCONTROL=ignoreboth<br/> <br><cite><a href="http://www.10yendama.com/archives/257">Linuxでコマンド履歴を残さない方法 | 十円玉という名のブログ</a></cite></p></blockquote> <p><code>~/.bashrc</code>に記載があるのですが、デフォルトでは<code>HISTCONTROL=ignoreboth</code>の設定です。</p> <p>今回<a href="#code_enter">コード</a>中で<code>export HISTCONTROL=ignorespace</code>を指定しており、その点をふまえて本件の挙動を確認してみます。</p> <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>をここで再掲しますので、合わせて挙動を確認してみてください。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20170121/20170121001446.png" title="Enter押下時のスクリーンショット" alt="Enter押下時のスクリーンショット" /></p> <ol> <li><code>cd ~/.github/</code>を実行する(<code>cd</code>入力がないが、省略する設定を行っている。<a href="#sec_autocd">後述</a>。)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で<strong><code>ls</code> と <code>git status</code> を表示する</strong>(<code>git</code><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>ではないのでstatus表示はなし)</li> <li><code>cd dotfiles</code>を実行する</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で <code>ls</code> と <code>git status</code> を表示する</li> <li><code>w</code>コマンドの実行</li> <li><code>w</code>コマンドの結果表示</li> <li>コマンドが空の状態で Enter を押す</li> <li><code>~/.bash_history</code>の行数が増えなかったため、<code>ls</code> と <code>git status</code> を表示する</li> <li><code>cd .git</code>を実行する</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で <code>ls</code> と <code>git status</code> を表示する(<code>git</code><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>ではないのでstatus表示はなし)</li> <li><code>cd ..</code>の実行</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で <code>ls</code> と <code>git status</code> を表示する</li> <li><code>cd ..</code>の実行</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら自動で <code>ls</code> と <code>git status</code> を表示する(注意:<code>HISTCONTROL=ignoreboth</code>の条件では、<strong>同じコマンドを続けて実行した際は<code>~/.bash_history</code>の行数が増えないため、<code>ls</code>と<code>git status</code>が表示される</strong>という動きになってしまい、ここでは"<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを移動したら"もTRUEなので2回<code>ls</code>と<code>git status</code>が表示されてしまいます。)</li> </ol> <p>※どこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リでも<code>git</code><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>か確認して<code>git status</code>を表示するという手もありますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>内でコマンド実行のたびに<code>git status</code>が表示されるのは可読性が悪くなると思い、上記のような挙動をコーディングしました。</p> <h3 id="bash-でのcd入力の省略"><a name="sec_autocd"><code>bash</code> での<code>cd</code>入力の省略</a></h3> <p><code>~/.bashrc</code>に<code>shopt -s autocd</code>を追記すると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ名のみが入力された際に<code>cd</code>が自動追記されます。</p> <h3 id="apt-の定期実行"><code>apt</code> の定期実行</h3> <p>下記2サイトを参考にしました。</p> <blockquote><p>3 unattended-upgradesパッケージ<br/> 自動アップグレードを実行するパッケージです。<br/> デフォルトだとセキュリティアップデートのみをアップグレードする設定になっています。<br/> アップデート後にシステム再起動が必要な場合に再起動させることも設定できます。<br/> サーバ運用している場合はアップグレード作業が不要になるので便利なツールです。<br/> <br><cite><a href="https://www.hiroom2.com/2016/05/12/ubuntu-16-04%E3%81%A7%E8%87%AA%E5%8B%95%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88-%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%99%E3%82%8B/">Ubuntu 16.04: 自動アップデート / アップグレードの設定をする - Narrow Escape</a></cite></p></blockquote> <p><iframe src="http://orangain.hatenablog.com/embed/unattended-upgrades" title="unattended-upgradesはインストールしただけでは動かない - orangain flavor" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>自分の環境ではすでにインストールされていることが確認できたので、<code>/etc/apt/apt.conf.d/20auto-upgrades</code>の内容を確認して、足りない内容を追記しました。(自動実行自体は過去に"ソフトウェアとアップデート"で設定していたのか、インストール時に設定していたのかできていたよう…)</p> <p><figure id="operation_apt"> <figcaption>Op.3 aptの自動実行設定の追記</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt <span class="synSpecial">-y</span> install unattended-upgrades パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 unattended-upgrades はすでに最新バージョン <span class="synPreProc">(</span><span class="synSpecial">0.90ubuntu0.3</span><span class="synPreProc">)</span> です。 アップグレード: <span class="synConstant">0</span> 個、新規インストール: <span class="synConstant">0</span> 個、削除: <span class="synConstant">0</span> 個、保留: <span class="synConstant">0</span> 個。 $ <span class="synStatement">echo</span><span class="synConstant"> </span><span class="synStatement">'</span><span class="synConstant">APT::Periodic::AutocleanInterval &quot;1&quot;;</span><span class="synStatement">'</span><span class="synConstant"> </span>| sudo tee <span class="synSpecial">-a</span> /etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::AutocleanInterval <span class="synStatement">&quot;</span><span class="synConstant">1</span><span class="synStatement">&quot;</span>; $ <span class="synStatement">echo</span><span class="synConstant"> </span><span class="synStatement">'</span><span class="synConstant">APT::Periodic::Download-Upgradeable-Packages &quot;1&quot;;</span><span class="synStatement">'</span><span class="synConstant"> </span>| sudo tee <span class="synSpecial">-a</span> /etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::Download-Upgradeable-Packages <span class="synStatement">&quot;</span><span class="synConstant">1</span><span class="synStatement">&quot;</span>; </pre> <p><ins datetime="2017-01-23T22:31:56+09:00" cite="https://linux-audit.com/upgrading-external-packages-with-unattended-upgrade/"> (2017/1/23 追記)<br/> <code>/etc/apt.conf.d/50unattended-upgrades</code>に対して、アップグレード対象をセキュリティだけでなく通常のアップデートも含めるためのコメントインと、更に自分はPPAから外部パッケージの<code>Neovim</code>をインストールしていたので下記を参照にしてレポジトリの追加を行った。</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Flinux-audit.com%2Fupgrading-external-packages-with-unattended-upgrade%2F" title="Upgrading External Packages with unattended-upgrade - Linux Audit" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ head /var/lib/apt/lists/ppa.launchpad.net_neovim-ppa_unstable_ubuntu_dists_xenial_InRelease -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Origin: LP-PPA-neovim-ppa-unstable Label: Neovim Unstable Suite: xenial Version: 16.04 Codename: xenial Date: Sun, <span class="synConstant">22</span> Jan <span class="synConstant">2017</span> <span class="synConstant">20</span>:<span class="synConstant">50</span>:<span class="synConstant">44</span> UTC Architectures: amd64 arm64 armhf i386 powerpc ppc64el s390x $ $ head /etc/apt.conf.d/50unattended-upgrades // Automatically upgrade packages from these <span class="synPreProc">(</span><span class="synSpecial">origin:archive</span><span class="synPreProc">)</span> pairs Unattended-Upgrade::Allowed-Origins <span class="synSpecial">{</span> <span class="synStatement">&quot;</span><span class="synPreProc">${distro_id}</span><span class="synConstant">:</span><span class="synPreProc">${distro_codename}</span><span class="synStatement">&quot;;</span> <span class="synStatement">&quot;</span><span class="synPreProc">${distro_id}</span><span class="synConstant">:</span><span class="synPreProc">${distro_codename}</span><span class="synConstant">-security</span><span class="synStatement">&quot;;</span> <span class="synStatement">&quot;</span><span class="synPreProc">${distro_id}</span><span class="synConstant">:</span><span class="synPreProc">${distro_codename}</span><span class="synConstant">-updates</span><span class="synStatement">&quot;;</span> // <span class="synStatement">&quot;</span><span class="synPreProc">${distro_id}</span><span class="synConstant">:</span><span class="synPreProc">${distro_codename}</span><span class="synConstant">-proposed</span><span class="synStatement">&quot;;</span> // <span class="synStatement">&quot;</span><span class="synPreProc">${distro_id}</span><span class="synConstant">:</span><span class="synPreProc">${distro_codename}</span><span class="synConstant">-backports</span><span class="synStatement">&quot;;</span> <span class="synStatement">&quot;</span><span class="synConstant">LP-PPA-neovim-ppa-unstable:xenial</span><span class="synStatement">&quot;;</span> <span class="synSpecial">}</span>; $ sudo <span class="synStatement">mv</span> /etc/cron.daily/apt-compat /etc/cron.daily/.apt-compat </pre> <p></ins></p> <h3 id="cronによるコマンドの自動実行"><code>cron</code>によるコマンドの自動実行</h3> <p><a href="http://saba.omnioo.com/note/1233/crontab%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/">Saba note</a>を参考に、いつも<code>apt</code>と一緒に実行していた下記のコマンドを一日一回は実行するように設定しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ crontab <span class="synSpecial">-l</span> <span class="synComment"># min hour day mth wday user command</span> <span class="synConstant">10</span> <span class="synConstant">23</span> * * * ito trash-empty <span class="synConstant">30</span> <span class="synStatement">&gt;</span>/dev/null <span class="synConstant">2</span><span class="synStatement">&gt;&amp;1</span> <span class="synConstant">20</span> <span class="synConstant">23</span> * * * ito nvim <span class="synSpecial">-c</span> <span class="synStatement">&quot;</span><span class="synConstant">call dein#update()|q</span><span class="synStatement">&quot;</span> <span class="synStatement">&gt;</span>/dev/null <span class="synConstant">2</span><span class="synStatement">&gt;&amp;1</span> </pre> <p>本環境でのファイル削除は、<code>rm</code>の代わりに<code>trash</code>コマンドを用いています。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>削除の場合もゴミ箱に投入され、削除して30日経過したファイルをゴミ箱からも削除する設定にしています。)</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fandreafrancia%2Ftrash-cli" title="andreafrancia/trash-cli" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>Neovim <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>のアップデートも一日一回できるようになりました。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>アップデート関数の実行を引数として与え、実行後にNeovimを終了しています。)</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2FShougo%2Fdein.vim" title="Shougo/dein.vim" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><a href="https://twitter.com/ShougoMatsu">暗黒美夢王(deo developer)(@ShougoMatsu)さん</a>、いつもありがとうございます!!</p> <h2 id="まとめ">まとめ</h2> <p><a href="#sec_1">目的</a>は達成できた。</p> <p>これで<a href="#sec_2">コマンド履歴の確認</a>のトップ10のうち、下記のコマンドの入力回数が減ることが期待できます。</p> <ul> <li>ll</li> <li>cd</li> <li>git</li> <li>apt</li> <li>l</li> </ul> <p><aside></p> <h2 id="余談">余談</h2> <p>次は自動ログ監視の仕組みを用いて<code>journalctl</code>の入力回数を減らしたいですね。</p> <p>しかしながら、<code>journalctl</code>と<code>systemctl</code>の入力回数が多いのは、下記の開発のためですね。懐かしい。</p> <p><iframe src="http://maijou2501.hateblo.jp/embed/convert-systemd-from-SysVinit" title="&quot;SysVinit&quot; 起動の自作 deb パッケージを &quot;systemd&quot; 対応させる - heyheytower" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p></aside></p> <p>以上</p> maijou2501 "SysVinit" 起動の自作 deb パッケージを "systemd" 対応させる hatenablog://entry/10328749687191965352 2016-10-31T00:32:15+09:00 2016-10-31T00:32:15+09:00 自作 deb パッケージ(likana)の "systemd" 対応を行った。 <p><figure id="pic_aquarino"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20161030/20161030010225.png" title="likana.service のステータス" alt="likana.service のステータス" /> <figcaption> Pic.1 "systemd" 対応させた自作サービス (likana) </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#debhelper-の-systemd-対応">"debhelper" の "systemd" 対応</a></li> <li><a href="#deb-パッケージのUbuntu1604xenial-対応">deb パッケージの Ubuntu16.04(xenial) 対応</a></li> <li><a href="#debianpackageservice-の作成">debian/package.service の作成</a></li> <li><a href="#systemd-での設定ファイルについて">"systemd" での設定ファイルについて</a></li> <li><a href="#systemd-での-etcdefaultpackage-への配置を-Makefile-にて対応">"systemd" での /etc/default/package への配置を Makefile にて対応</a></li> <li><a href="#debianpostrm-への追記">debian/postrm への追記</a></li> <li><a href="#systemd-の-service-の実行を-input-グループで行う">"systemd" の "service" の実行を "input" グループで行う</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>以前作成した <a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a> パッケージが "SysVinit" 起動だったため、自分の環境が "Ubuntu16.04" になったこともあり "systemd" 対応を行った。</p> <p><iframe src="http://maijou2501.hateblo.jp/embed/2015/03/02/004950" title=" IMEオン忘れ時打ち直しツール「likana」のリリース - heyheytower" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h2 id="方法">方法</h2> <h3 id="debhelper-の-systemd-対応">"debhelper" の "systemd" 対応</h3> <p>下記記事の通り、<code>debian/control</code>、<code>debian/rules</code> に追記を行いました。</p> <p><figure id="quote_systemd"></p> <blockquote><p>systemd対応¶</p> <p>systemdの場合は、debhelperのadd onとして、dh-systemdが用意されています。 ですので、まず、 <a class="keyword" href="http://d.hatena.ne.jp/keyword/debian">debian</a>/control のBuild-Dependsに、dh-systemdを追記します。</p> <p>Build-Depends: debhelper (&gt;= 8.0.0), (snip), dh-systemd (&gt;= 1.5), (snip)<br/> 次に、 <a class="keyword" href="http://d.hatena.ne.jp/keyword/debian">debian</a>/rules の%ターゲットのdhコマンドのオプションとして、systemdを追記します。</p> <p>%:<br/> dh $@ --with quilt,systemd<br/> systemd用の設定ファイルは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/upstart">upstart</a>と同様テンプレートは用意されていません。<a class="keyword" href="http://d.hatena.ne.jp/keyword/debian">debian</a>/&lt;パッケージ名&gt;.serviceとして用意します。<a class="keyword" href="http://d.hatena.ne.jp/keyword/debian">debian</a>/yrmcds.service として作成します。</p> <p>上記のみで、あとはdh-systemdが良きように設定してくれるのですが、これだけではpurge(apt-get purge)の時に残骸が残ります。 ですので、 postrm で下記のファイルを削除します。</p> <p>/etc/systemd/system/yrmcds.service<br/> /etc/systemd/system/multi-user.target.wants/yrmcds.service<br/> /var/lib/systemd/<a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a>-systemd-helper-enabled/yrmcds.service.dsh-also<br/> /var/lib/systemd/<a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a>-systemd-helper-enabled/multi-user.target.wants/yrmcds.service<br/> /var/lib/systemd/<a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a>-systemd-helper-masked/yrmcds.service</p> <p><br /><cite><a href="http://d.palmtb.net/2014/01/30/how_to_create_a_debian_package_of_support_to_sysvinit__upstart__systemd.html" >How to create a Debian package of support to sysvinit, upstart, systemd — ペンギンと愉快な機械の日々</a></cite> </figure></p></blockquote> <h3 id="deb-パッケージのUbuntu1604xenial-対応"><a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a> パッケージの Ubuntu16.04(xenial) 対応</h3> <p>下記に記載がありますとおり、<code>debian/changelog</code> の対象<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>記載を変更します。</p> <blockquote><p>That format is a series of entries like this:</p> <pre><code> package (version) distribution(s); urgency=urgency [optional blank line(s), stripped] * change details more change details [blank line(s), included in output of dpkg-parsechangelog] * even more change details [optional blank line(s), stripped] -- maintainer name &lt;email address&gt;[two spaces] date </code></pre> <p>package and version are the source package name and version number.</p> <p>distribution(s) lists the distributions where this version should be installed when it is uploaded - it is copied to the Distribution field in the .changes file. See Distribution, Section 5.6.14.<br/> <br><cite><a href="https://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog">Debian Policy Manual - Source packages</a></cite></p></blockquote> <p>実際は <code>dch -v 1.5-2ppa</code> などを実行して <code>debian/changelog</code> を編集します。</p> <p>下記コードでは、"1.5-2ppa" のバージョンから "xenial" に変更されていることがご覧いただけるかと思います。</p> <p><figure id="code_changelog"> <figcaption>Code.1 <code>debian/changelog</code></figcaption></p> <pre class="code" data-lang="" data-unlink>likana (1.5-2ppa) xenial; urgency=low * Set up a systemd. -- ito &lt;maijou2501@gmail.com&gt; Thu, 15 Sep 2016 23:43:45 +0900 likana (1.4-1ppa) precise; urgency=low * Fix, typo and binary path. -- ito &lt;maijou2501@gmail.com&gt; Fri, 16 Sep 2016 23:41:21 +0900</pre> <p></figure></p> <p>これで "PPA" にて<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>ナリが作成される際の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>指定が完了しました。</p> <h3 id="debianpackageservice-の作成"><code>debian/package.service</code> の作成</h3> <p>"systemd" の "Unit" を書く前にそもそも "systemd" の仕組みが分かっていなかったので、<a href="#quote_systemd">先ほどの記事</a>や下記の記事で理解を深めた。</p> <p><iframe src="http://enakai00.hatenablog.com/embed/20130914/1379146157" title="Systemd入門(1) - Unitの概念を理解する - めもめも" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fequj65.net%2Ftech%2Fsystemd-boot%2F" title="「Systemd」を理解する ーシステム起動編ー | ギークを目指して" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>自分の場合でも、<code>/etc/init.d/package</code> の内容をもとに、"service" の "Unit" を作成した。</p> <h3 id="systemd-での設定ファイルについて">"systemd" での設定ファイルについて</h3> <p>設定ファイルは同じ <code>/etc/default/package</code> を用いて良いようだ。</p> <p><a href="https://wiki.ubuntu.com/SystemdForUpstartUsers"> SystemdForUpstartUsers - Ubuntu Wiki </a></p> <blockquote><p>Existing sysvinit style scripts read configuration in the form of variable assignments from a file under /etc/default. A policy decision is needed on whether systemd units will do the same.</p> <p><br /><cite><a href="https://wiki.ubuntu.com/systemd">systemd - Ubuntu Wiki</a></cite></p></blockquote> <p>しかし下記の記事内容のとおりで変数の扱いが違うようで、<code>/etc/default/package</code> の中で変数の代入に変数を用いないようにした。</p> <p><a href="http://qiita.com/kobanyan/items/f8e8a3bd5406e1d290fb"> systemd の Environment / EnvironmentFile では変数展開できません - Qiita </a></p> <h3 id="systemd-での-etcdefaultpackage-への配置を-Makefile-にて対応">"systemd" での <code>/etc/default/package</code> への配置を <code>Makefile</code> にて対応</h3> <p>"SysVinit" の場合、<code>debian/package.default</code> を利用することで、<code>/etc/default/package</code> へ配置できていたが, 自分の設定が足りないせいなのか "systemd" を用いた場合に配置がうまくいかなかった。</p> <p>正しい対応ではないかもしれないが、<code>Makefile</code> の "install" ルールにて対応した。</p> <p><figure id="code_Makefile"> <figcaption>Code.2 "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>" より抜粋</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>-snip- install: -snip- <span class="synStatement">test</span> <span class="synSpecial">-e</span> <span class="synPreProc">${DESTDIR}</span>/etc/default &amp;&amp; install <span class="synSpecial">-m</span> <span class="synConstant">644</span> <span class="synSpecial">-g</span> root <span class="synSpecial">-o</span> root debian/<span class="synPreProc">${NAME}</span>.default <span class="synPreProc">${DESTDIR}</span>/etc/default/<span class="synPreProc">${NAME}</span> -snip- </pre> <p></figure></p> <h3 id="debianpostrm-への追記"><code>debian/postrm</code> への追記</h3> <p><a href="#quote_systemd">先ほどの記事</a>を参考に、削除すべきファイルを設定した。</p> <p>自分の場合は <code>debian/package.udev</code> を利用しているので、<code>/etc/udev/rules.d/*package.rules</code> を削除する設定を追加した。</p> <h3 id="systemd-の-service-の実行を-input-グループで行う">"systemd" の "service" の実行を "input" グループで行う</h3> <p>自作のサービスでは <code>/dev/input/event*</code> をオープンするもので、"systemd" では "service" のグループを "input" に設定しないといけないようであった。</p> <p><a href="https://wiki.archlinux.org/index.php/users_and_groups"> Users and groups - ArchWiki </a></p> <p><figure id="operation_ls"> <figcaption>Op.1 オーナーと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の確認</figcaption></p> <pre class="code" data-lang="" data-unlink>$ ls -l /dev/input/ 合計 0 drwxr-xr-x 2 root root 100 10月 30 23:19 by-id drwxr-xr-x 2 root root 100 10月 30 23:19 by-path crw-rw---- 1 root input 13, 64 10月 30 23:19 event0 crw-rw---- 1 root input 13, 65 10月 30 23:19 event1 crw-rw---- 1 root input 13, 66 10月 30 23:19 event2 crw-rw---- 1 root input 13, 67 10月 30 23:19 event3 crw-rw---- 1 root input 13, 68 10月 30 23:19 event4 crw-rw---- 1 root input 13, 69 10月 30 23:19 event5 crw-rw---- 1 root input 13, 70 10月 30 23:19 event6 crw-rw---- 1 root input 13, 71 10月 30 23:19 event7 crw-rw---- 1 root input 13, 72 10月 30 23:19 event8 crw-rw---- 1 root input 13, 73 10月 30 23:19 event9 crw-rw-r-- 1 root input 13, 0 10月 30 23:19 js0 crw-rw---- 1 root input 13, 63 10月 30 23:19 mice crw-rw---- 1 root input 13, 32 10月 30 23:19 mouse0</pre> <p></figure></p> <h2 id="まとめ">まとめ</h2> <p><a href="#sec_1">目的</a>のとおり、以前作成した <a class="keyword" href="http://d.hatena.ne.jp/keyword/deb">deb</a> パッケージ(likana)の "systemd" 対応を行うことができた。</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2Flikana" title="maijou2501/likana" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>※ "PPA" での公開 " <a href="https://launchpad.net/~maijou2501/+archive/ubuntu/likana"> likana : kyohei ito </a> "</p> maijou2501 Ubuntu16.04 のエラーログ確認 hatenablog://entry/10328749687190756291 2016-10-23T23:49:16+09:00 2018-04-05T12:32:40+09:00 Pic.1 journalctl -p 3 の結果 目次 目的 確認 環境 エラーログ エラーログ対応 'systemd-udevd' の件 pulseaudioの件 'NetworkManager' の件 'NetworkManager' を使わないDHCP設定 'talpa: Failed to open directory' の件 'BIOS bug: CPU MTRRs don't cover all of memory' の件 'gnome-screensaver' の件 'nautilus' の件 'org.a11y' の件 'tmpfiles' の件 'Telepathy.Acc… <p><figure id="pic_journalctl"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20161023/20161023000426.png" title="エラーログ表示" alt="エラーログ表示" /> <figcaption> Pic.1 <code>journalctl -p 3</code> の結果 </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#確認">確認</a><ul> <li><a href="#環境">環境</a></li> <li><a href="#エラーログ">エラーログ</a></li> </ul> </li> <li><a href="#エラーログ対応">エラーログ対応</a><ul> <li><a href="#systemd-udevd-の件">'systemd-udevd' の件</a></li> <li><a href="#pulseaudioの件">pulseaudioの件</a></li> <li><a href="#NetworkManager-の件">'NetworkManager' の件</a><ul> <li><a href="#NetworkManager-を使わないDHCP設定">'NetworkManager' を使わないDHCP設定</a></li> </ul> </li> <li><a href="#talpa-Failed-to-open-directory-の件">'talpa: Failed to open directory' の件</a></li> <li><a href="#BIOS-bug-CPU-MTRRs-dont-cover-all-of-memory-の件">'BIOS bug: CPU MTRRs don't cover all of memory' の件</a></li> <li><a href="#gnome-screensaver-の件">'gnome-screensaver' の件</a></li> <li><a href="#nautilus-の件">'nautilus' の件</a></li> <li><a href="#orga11y-の件">'org.a11y' の件</a></li> <li><a href="#tmpfiles-の件">'tmpfiles' の件</a></li> <li><a href="#TelepathyAccountManager-の件">'Telepathy.AccountManager' の件</a></li> <li><a href="#fwupd-の件">'fwupd' の件</a></li> <li><a href="#Could-not-parse-desktop-file-の件">'Could not parse desktop file' の件</a></li> <li><a href="#docker-関連">docker 関連</a></li> <li><a href="#zeitgeist-関連">zeitgeist 関連</a></li> </ul> </li> <li><a href="#結果">結果</a></li> </ul> <h2 id="目的"><a name="sec_1"></a>目的</h2> <p>Ubuntu16.04 を使い始めて3週間経過し、設定が一通り終わったためエラーログの精査を行った。<br/> エラーの内容とその解決方法について記載する。</p> <h2 id="確認">確認</h2> <h3 id="環境">環境</h3> <p>筐体は <a href="http://pc.usy.jp/wiki/378.html"> NEC Express5800/S70 タイプRB </a>。</p> <p><figure id="operation_environment"> <figcaption>Op.1 環境確認</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=16.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=xenial <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 16.04.1 LTS</span><span class="synStatement">&quot;</span> $ cat /etc/debian_version stretch/sid $ uname <span class="synSpecial">-a</span> Linux calc0 4.4.0<span class="synConstant">-45</span>-generic <span class="synComment">#66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux</span> $ lsusb Bus <span class="synConstant">002</span> Device <span class="synConstant">003</span>: ID 17ef:<span class="synConstant">6009</span> Lenovo ThinkPad Keyboard with TrackPoint $ /opt/sophos-av/bin/savdstatus <span class="synSpecial">--version</span> Copyright <span class="synConstant">1989-2016</span> Sophos Limited. All rights reserved. Sophos Anti-Virus <span class="synStatement">=</span> 9.12.3 -snip- </pre> <p></figure></p> <h3 id="エラーログ">エラーログ</h3> <p><figure id="operation_error_log"> <figcaption>Op.2 エラーログ確認</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ journalctl <span class="synSpecial">-p</span> <span class="synConstant">1</span> <span class="synSpecial">-p</span> <span class="synConstant">2</span> -- No entries <span class="synSpecial">--</span> $ journalctl <span class="synSpecial">-p</span> <span class="synConstant">3</span> -snip- <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90010, key code </span><span class="synConstant">190</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90011, key code </span><span class="synConstant">148</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90012, key code </span><span class="synConstant">152</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90013, key code </span><span class="synConstant">236</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90014, key code </span><span class="synConstant">238</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90015, key code </span><span class="synConstant">212</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90016, key code </span><span class="synConstant">227</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90017, key code </span><span class="synConstant">191</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x90019, key code </span><span class="synConstant">205</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x9001a, key code </span><span class="synConstant">225</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x9001b, key code </span><span class="synConstant">224</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">46</span> calc0 systemd-udevd<span class="synStatement">[</span><span class="synConstant">335</span><span class="synStatement">]</span>: Error calling EVIOCSKEYCODE on device node <span class="synStatement">'</span><span class="synConstant">/dev/input/event2</span><span class="synStatement">'</span> <span class="synPreProc">(</span><span class="synSpecial">scan code 0x9001d, key code </span><span class="synConstant">372</span><span class="synPreProc">)</span>: Invalid argument <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">48</span> calc0 NetworkManager<span class="synStatement">[</span><span class="synConstant">677</span><span class="synStatement">]</span>: nm_device_get_device_type: assertion <span class="synStatement">'</span><span class="synConstant">NM_IS_DEVICE (self)</span><span class="synStatement">'</span> failed <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">50</span> calc0 kernel: talpa: Failed to open directory: <span class="synConstant">-13</span> <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">50</span> calc0 kernel: talpa: Failed to open initial directory: <span class="synConstant">-13</span> <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">50</span> calc0 kernel: talpa: Failed to open initial directory /run/user/<span class="synConstant">1000</span>/gvfs: <span class="synConstant">-13</span> <span class="synConstant">10</span>月 <span class="synConstant">22</span> <span class="synConstant">23</span>:<span class="synConstant">28</span>:<span class="synConstant">47</span> calc0 pulseaudio<span class="synStatement">[</span><span class="synConstant">692</span><span class="synStatement">]</span>: <span class="synStatement">[</span>pulseaudio<span class="synStatement">]</span> bluez5-util.c: GetManagedObjects<span class="synPreProc">()</span> failed: org.freedesktop.DBus.Error.TimedOut: Failed to activate service <span class="synStatement">'</span><span class="synConstant">org.bluez</span><span class="synStatement">'</span>: timed out $ $ journalctl <span class="synSpecial">-p</span> <span class="synConstant">4</span> -snip- <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">39</span> calc0 kernel: WARNING: BIOS bug: CPU MTRRs don<span class="synStatement">'</span><span class="synConstant">t cover all of memory, losing 32MB of RAM.</span> <span class="synConstant">-snip-</span> <span class="synConstant">10月 23 17:58:46 calc0 org.gnome.ScreenSaver[1017]: ** (gnome-screensaver:1231): WARNING **: Couldn</span><span class="synStatement">'</span>t get presence <span class="synStatement">status</span>: The name org.gnome.SessionManager was not provided by any .service files <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">46</span> calc0 org.gnome.ScreenSaver<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: ** <span class="synPreProc">(</span><span class="synSpecial">gnome-screensaver:</span><span class="synConstant">1231</span><span class="synPreProc">)</span>: WARNING **: Config key not handled: picture-opacity <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: <span class="synPreProc">(</span><span class="synSpecial">nautilus:</span><span class="synConstant">1587</span><span class="synPreProc">)</span>: GLib-GIO-CRITICAL **: g_dbus_interface_skeleton_unexport: assertion <span class="synStatement">'</span><span class="synConstant">interface_-&gt;priv-&gt;connections != NULL</span><span class="synStatement">'</span> failed <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: <span class="synPreProc">(</span><span class="synSpecial">nautilus:</span><span class="synConstant">1587</span><span class="synPreProc">)</span>: GLib-GIO-CRITICAL **: g_dbus_interface_skeleton_unexport: assertion <span class="synStatement">'</span><span class="synConstant">interface_-&gt;priv-&gt;connections != NULL</span><span class="synStatement">'</span> failed <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: アプリケーションを登録できませんでした: Unable to acquire bus name <span class="synStatement">'</span><span class="synConstant">org.gnome.Nautilus</span><span class="synStatement">'</span> <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: <span class="synPreProc">(</span><span class="synSpecial">nautilus:</span><span class="synConstant">1587</span><span class="synPreProc">)</span>: Gtk-CRITICAL **: gtk_icon_theme_get_for_screen: assertion <span class="synStatement">'</span><span class="synConstant">GDK_IS_SCREEN (screen)</span><span class="synStatement">'</span> failed <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: <span class="synPreProc">(</span><span class="synSpecial">nautilus:</span><span class="synConstant">1587</span><span class="synPreProc">)</span>: GLib-GObject-WARNING **: invalid <span class="synPreProc">(</span><span class="synSpecial">NULL</span><span class="synPreProc">)</span> pointer instance <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">17</span>:<span class="synConstant">58</span>:<span class="synConstant">50</span> calc0 org.freedesktop.FileManager1<span class="synStatement">[</span><span class="synConstant">1017</span><span class="synStatement">]</span>: <span class="synPreProc">(</span><span class="synSpecial">nautilus:</span><span class="synConstant">1587</span><span class="synPreProc">)</span>: GLib-GObject-CRITICAL **: g_signal_connect_object: assertion <span class="synStatement">'</span><span class="synConstant">G_TYPE_CHECK_INSTANCE (instance)</span><span class="synStatement">'</span> failed -snip- <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">27</span>:<span class="synConstant">55</span> calc0 org.a11y.Bus<span class="synStatement">[</span><span class="synConstant">911</span><span class="synStatement">]</span>: ** <span class="synPreProc">(</span><span class="synSpecial">process:</span><span class="synConstant">999</span><span class="synPreProc">)</span>: WARNING **: Failed to register client: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">27</span>:<span class="synConstant">55</span> calc0 org.a11y.Bus<span class="synStatement">[</span><span class="synConstant">911</span><span class="synStatement">]</span>: Activating service <span class="synIdentifier">name</span>=<span class="synStatement">'</span><span class="synConstant">org.a11y.atspi.Registry</span><span class="synStatement">'</span> <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">27</span>:<span class="synConstant">55</span> calc0 org.a11y.Bus<span class="synStatement">[</span><span class="synConstant">911</span><span class="synStatement">]</span>: Successfully activated service <span class="synStatement">'</span><span class="synConstant">org.a11y.atspi.Registry</span><span class="synStatement">'</span> -snip- <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">14</span> calc0 systemd-tmpfiles<span class="synStatement">[</span><span class="synConstant">479</span><span class="synStatement">]</span>: <span class="synStatement">[</span>/usr/lib/tmpfiles.d/var.conf:<span class="synConstant">14</span><span class="synStatement">]</span> Duplicate line <span class="synStatement">for</span> path <span class="synStatement">&quot;</span><span class="synConstant">/var/log</span><span class="synStatement">&quot;</span>, ignoring. <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">19</span> calc0 org.freedesktop.Telepathy.AccountManager<span class="synStatement">[</span><span class="synConstant">920</span><span class="synStatement">]</span>: <span class="synPreProc">(</span>process:<span class="synConstant">1387</span><span class="synPreProc">)</span>: mcd-WARNING **: Not sure what the <span class="synStatement">type</span> of <span class="synStatement">'</span><span class="synConstant">mc-account-name</span><span class="synStatement">'</span> is, assuming string <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">19</span> calc0 org.freedesktop.Telepathy.AccountManager<span class="synStatement">[</span><span class="synConstant">920</span><span class="synStatement">]</span>: <span class="synPreProc">(</span>process:<span class="synConstant">1387</span><span class="synPreProc">)</span>: mcd-WARNING **: Not sure what the <span class="synStatement">type</span> of <span class="synStatement">'</span><span class="synConstant">mc-account-name</span><span class="synStatement">'</span> is, assuming string <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">19</span> calc0 org.freedesktop.Telepathy.AccountManager<span class="synStatement">[</span><span class="synConstant">920</span><span class="synStatement">]</span>: <span class="synPreProc">(</span>process:<span class="synConstant">1387</span><span class="synPreProc">)</span>: mcd-WARNING **: Not sure what the <span class="synStatement">type</span> of <span class="synStatement">'</span><span class="synConstant">mc-account-name</span><span class="synStatement">'</span> is, assuming string <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">25</span> calc0 org.freedesktop.Telepathy.ConnectionManager.haze<span class="synStatement">[</span><span class="synConstant">920</span><span class="synStatement">]</span>: tp-glib-Message: Exiting <span class="synConstant">10</span>月 <span class="synConstant">23</span> <span class="synConstant">19</span>:<span class="synConstant">45</span>:<span class="synConstant">25</span> calc0 org.freedesktop.fwupd<span class="synStatement">[</span><span class="synConstant">677</span><span class="synStatement">]</span>: <span class="synPreProc">(</span>fwupd:<span class="synConstant">1583</span><span class="synPreProc">)</span>: Fu-WARNING **: Failed to coldplug: UEFI firmware updating not supported </pre> <p></figure></p> <h2 id="エラーログ対応">エラーログ対応</h2> <h3 id="systemd-udevd-の件">'systemd-udevd' の件</h3> <p><figure id="quote_hwdb"></p> <blockquote><p>However, can you please do this:</p> <p>  - Edit /lib/udev/hwdb.d/60-keyboard.hwdb (as root, e. g. with "sudo gedit") to remove this paragraph:</p> <p># <a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> Natural Ergonomic Keyboard 4000<br/> keyboard:usb:v045Ep00DB*<br/>  KEYBOARD_KEY_c022d=zoomin<br/>  KEYBOARD_KEY_c022e=zoomout</p> <p>Then reboot your computer, verify that the warning went away.<br/> <br /><cite><a href="https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1389201">Bug #1389201 “[keymap Microsoft Natural Ergonomic Keyboard 4000]...” : Bugs : systemd package : Ubuntu</a></cite> </figure></p></blockquote> <p><code>/lib/udev/hwdb.d/60-keyboard.hwdb</code> を編集すれば良さそうと見当をつけ、'scan code 0x90010' というエラーログの記載から下記のコードを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>した。</p> <p><figure id="code_hwdb"> <figcaption>Code.1 <code>/lib/udev/hwdb.d/60-keyboard.hwdb</code> の設定抜粋</figcaption></p> <pre class="code lang-conf" data-lang="conf" data-unlink><span class="synComment"># ThinkPad Keyboard with TrackPoint</span> evdev:input:b0003v17EFp6009* KEYBOARD_KEY_090012=screenlock <span class="synComment"># Fn+F2</span> KEYBOARD_KEY_090013=battery <span class="synComment"># Fn+F3</span> KEYBOARD_KEY_090014=wlan <span class="synComment"># Fn+F5</span> KEYBOARD_KEY_090016=switchvideomode <span class="synComment"># Fn+F7</span> KEYBOARD_KEY_090017=f21 <span class="synComment"># Fn+F8 touchpad toggle</span> KEYBOARD_KEY_090019=suspend <span class="synComment"># Fn+F12</span> KEYBOARD_KEY_09001a=brightnessup <span class="synComment"># Fn+Home</span> KEYBOARD_KEY_09001b=brightnessdown <span class="synComment"># Fn+End</span> KEYBOARD_KEY_09001d=zoom <span class="synComment"># Fn+Space</span> KEYBOARD_KEY_090011=prog1 <span class="synComment"># ThinkVantage button</span> KEYBOARD_KEY_090015=camera <span class="synComment"># Fn+F6 headset/camera VoIP key ??</span> KEYBOARD_KEY_090010=f20 <span class="synComment"># Microphone mute button; should be micmute</span> </pre> <p></figure></p> <p><a href="#quote_hwdb">引用</a>では編集後に<code>reboot</code>しろと書いてあるがそれだけでは設定は反映されず、<code>/lib/udev/hwdb.d/60-keyboard.hwdb</code> の先頭に下の記載があったため、その記載のとおりにコマンドを実行した。</p> <p><figure id="code_hwdb_top"> <figcaption>Code.2 <code>/lib/udev/hwdb.d/60-keyboard.hwdb</code> の先頭部分抜粋</figcaption></p> <pre class="code lang-conf" data-lang="conf" data-unlink><span class="synComment"># and add your rules there. To load the new rules execute (as root): </span> <span class="synComment"># udevadm hwdb --update</span> </pre> <p></figure></p> <p>もちろん上記の操作によってキーボードに設定されたスリープなどの機能は使えなくなりますので、その点はご留意ください。</p> <h3 id="pulseaudioの件"><code>pulseaudio</code>の件</h3> <p><figure id="quote_pulseaudio_bug"></p> <blockquote><p>If you choose to forcibly disable bluez5 service, I'd recommend you then also<br/> * remove pulseaudio-module-<a class="keyword" href="http://d.hatena.ne.jp/keyword/bluetooth">bluetooth</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/rpm">rpm</a><br/> <br /><cite><a href="https://bugzilla.redhat.com/show_bug.cgi?id=1222113">Bug 1222113 – [pulseaudio] bluez5-util.c: GetManagedObjects() failed: org.freedesktop.systemd1.LoadFailed: Unit dbus-org.bluez.service failed to load: No such file or directory.</a></cite> </figure></p></blockquote> <p><a href="#quote_pulseaudio_bug">引用</a>のとおり、パッケージの削除を行った。</p> <p><figure id="operation_del_package"> <figcaption>Op.3 'pulseaudio' 関連パッケージの削除</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt remove pulseaudio-module-bluetooth </pre> <p></figure></p> <h3 id="NetworkManager-の件">'NetworkManager' の件</h3> <p>下記ページなどいろいろ調べてみたのですが、結局のところ 'NetworkManager' 自体使わなくても良かったことに気づきましたので、'NetworkManager' を停止して自分で<a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>設定を行うことにしました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fanswers.launchpad.net%2Fubuntu%2F%2Bquestion%2F270573" title="Question #270573 : Questions : Ubuntu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h4 id="NetworkManager-を使わないDHCP設定">'NetworkManager' を使わない<a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>設定</h4> <p><figure id="operation_network_interface"> <figcaption>Op.4 ネットワークインターフェースの確認</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ ip a <span class="synConstant">1</span>: lo: <span class="synStatement">&lt;</span>LOOPBACK,UP,LOWER_UP<span class="synStatement">&gt;</span> mtu <span class="synConstant">65536</span> qdisc noqueue state UNKNOWN group default qlen <span class="synConstant">1</span> -snip- <span class="synConstant">2</span>: enp0s25: <span class="synStatement">&lt;</span>BROADCAST,MULTICAST,UP,LOWER_UP<span class="synStatement">&gt;</span> mtu <span class="synConstant">1500</span> qdisc pfifo_fast state UP group default qlen <span class="synConstant">1000</span> </pre> <p></figure></p> <p>確認したインターフェースの<a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>設定を行いました。</p> <p><figure id="code_interfaces"> <figcaption>Code.3 <code>/etc/network/interfaces</code>への追記</figcaption></p> <pre class="code lang-conf" data-lang="conf" data-unlink><span class="synComment"># interfaces(5) file used by ifup(8) and ifdown(8)</span> auto lo iface lo inet loopback auto enp0s25 iface enp0s25 inet dhcp </pre> <p></figure></p> <p>その後、'NetworkManager' の停止を行いました。</p> <p><figure id="operation_stop_service"> <figcaption>Op.5 'NetworkManager' の停止</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo systemctl <span class="synStatement">stop</span> network-manager.service $ sudo systemctl disable network-manager.service Synchronizing state of network-manager.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install disable network-manager insserv: warning: current <span class="synStatement">start</span> runlevel<span class="synPreProc">(</span><span class="synSpecial">s</span><span class="synPreProc">)</span> <span class="synPreProc">(</span><span class="synSpecial">empty</span><span class="synPreProc">)</span> of script <span class="synSpecial">`network-manager</span><span class="synStatement">'</span><span class="synConstant"> overrides LSB defaults (2 3 4 5).</span> <span class="synConstant">insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `network-manager</span><span class="synStatement">'</span><span class="synSpecial"> overrides LSB defaults </span><span class="synPreProc">(</span><span class="synConstant">0</span> <span class="synConstant">1</span> <span class="synConstant">6</span><span class="synPreProc">)</span><span class="synSpecial">.</span> <span class="synSpecial">Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.</span> <span class="synSpecial">Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.</span> </pre> <p></figure></p> <h3 id="talpa-Failed-to-open-directory-の件">'talpa: Failed to open directory' の件</h3> <p><a href="https://community.sophos.com/products/server-protection-integration/f/sophos-anti-virus-for-linux-basic/8362/could-not-open/30546#30546"> could not open? - Sophos Anti-Virus for Linux Basic - Server Protection - Sophos Community </a></p> <p>sophosのサポートからはスキャンの際に除外設定を行うこと、と案内がありました。</p> <p>しかしながら、<code>talpa</code> のオンアクセス検索の時のエラーかなと考えており、下記の対策など行ってみましたがどうも解決しませんでした。</p> <p><figure id="operation_sophos_setting"> <figcaption>Op.6 Sophos Anti-Virus の追加設定内容</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo /opt/sophos-av/bin/savconfig add ExcludeFilesystems fuse $ sudo /opt/sophos-av/bin/savconfig add ExcludeFilePaths /run/user/<span class="synConstant">1000</span>/gvfs/ </pre> <p></figure></p> <p>対処ができず悔しいですが、この件はちょっと保留です。</p> <h3 id="BIOS-bug-CPU-MTRRs-dont-cover-all-of-memory-の件">'<a class="keyword" href="http://d.hatena.ne.jp/keyword/BIOS">BIOS</a> bug: CPU MTRRs don't cover all of memory' の件</h3> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fbugs.launchpad.net%2Fubuntu%2F%2Bsource%2Flinux%2F%2Bbug%2F319912" title="Bug #319912 “BIOS bug: CPU MTRRs don&#39;t cover all of memory” : Bugs : linux package : Ubuntu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>上記記事によると <a class="keyword" href="http://d.hatena.ne.jp/keyword/BIOS">BIOS</a> のアップデートを行う必要があるようですが、自分の<a class="keyword" href="http://d.hatena.ne.jp/keyword/BIOS">BIOS</a>リビジョンは最新のようなので今回はこのままにします。</p> <p><figure id="quote_express5800_bios"></p> <blockquote><p>現在報告の有る最新<a class="keyword" href="http://d.hatena.ne.jp/keyword/BIOS">BIOS</a>リビジョンは、1.0.0028<br/> <br /><cite><a href="http://pc.usy.jp/wiki/378.html#vb1a5d2b">NEC Express5800/S70 タイプRB - usyWiki</a></cite> </figure></p></blockquote> <p><figure id="operation_dmidecode"> <figcaption>Op.7 <code>dmidecode</code> の結果</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo dmidecode <span class="synComment"># dmidecode 3.0</span> Getting SMBIOS data from sysfs. SMBIOS 2.6 present. <span class="synConstant">63</span> structures occupying <span class="synConstant">2018</span> bytes. Table at 0x000EF700. Handle 0x0000, DMI <span class="synStatement">type</span> <span class="synConstant">0</span>, <span class="synConstant">24</span> bytes BIOS Information Vendor: Phoenix Technologies Ltd Version: 1.0.0028 -snip- </pre> <p></figure></p> <h3 id="gnome-screensaver-の件">'<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnome">gnome</a>-screensaver' の件</h3> <p>下記を見ると、マルチユーザ環境が影響を及ぼしているバグのようです。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fbugs.launchpad.net%2Fubuntu%2F%2Bsource%2Fdbus%2F%2Bbug%2F1553466" title="Bug #1553466 “org.gnome.SessionManager was not provided by any ....” : Bugs : dbus package : Ubuntu" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>こちらもそもそもスクリーンセーバを使っていなかったので、パッケージの削除を行いました。</p> <p><figure id="operation_del_screensaver"> <figcaption>Op.8 '<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnome">gnome</a>-screensaver' の削除</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt <span class="synSpecial">-y</span> remove gnome-screensaver </pre> <p></figure></p> <h3 id="nautilus-の件">'<a class="keyword" href="http://d.hatena.ne.jp/keyword/nautilus">nautilus</a>' の件</h3> <p>下記のような <code>nautilus</code> を再インストールするば良いという記事が多く、対応してみたものの解決には至らなかったため保留としました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fubuntu-mate.community%2Ft%2Fnautilus-files-failed-to-launch%2F4719%2F13" title="Nautilus [files] failed to launch" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="orga11y-の件">'org.a11y' の件</h3> <p>そもそも 'a11y' とは 'Accessibility' のことのようです。</p> <p><figure id="quote_a11y"></p> <blockquote><p>A11Y is a shortening of Accessibility (A, Eleven letters, Y; the same shortening <a class="keyword" href="http://d.hatena.ne.jp/keyword/scheme">scheme</a> can be seen in Internationalization -> <a class="keyword" href="http://d.hatena.ne.jp/keyword/i18n">i18n</a> or Localization -> <a class="keyword" href="http://d.hatena.ne.jp/keyword/l10n">l10n</a>).<br/> <br /><cite><a href="https://lists.debian.org/debian-user/2014/07/msg01151.html">Re: What is this stuff ?</a></cite> </figure></p></blockquote> <p>'The name org.<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnome">gnome</a>.SessionManager was not provided by any' のエラーログの通り、'<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnome">gnome</a>-session'をインストールしてみたのですがエラーは解消できませんでした。</p> <p><figure id="operation_install_gnome-session"> <figcaption>Op.9 '<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnome">gnome</a>-session' のインストール</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt <span class="synSpecial">-y</span> install gnome-session </pre> <p></figure></p> <p>こちらも保留です。</p> <h3 id="tmpfiles-の件">'tmpfiles' の件</h3> <p>下記を読むとバグのようで、<code>/usr/lib/tmpfiles.d/var.conf</code> の該当行を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>して対応しました。(将来的に不具合が解消されるかもですが、一定時間ごとにエラー出力されるようでそれを抑止したいための対応です。)</p> <p><a href="https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1556713"> Bug #1556713 “systemd-tmpfiles [/usr/lib/tmpfiles.d/var.conf:14]...” : Bugs : systemd package : Ubuntu </a></p> <h3 id="TelepathyAccountManager-の件">'Telepathy.AccountManager' の件</h3> <p><a href="http://www.aosabook.org/en/telepathy.html"> The Architecture of Open Source Applications: Telepathy </a></p> <p>自分には不要なパッケージそうだったので削除しました。</p> <p><figure id="operation_remove_telepathy"> <figcaption>Op.10 'telepathy' のアンインストール</figcaption></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt remove telepathy-mission-control<span class="synConstant">-5</span> </pre> <p></figure></p> <h3 id="fwupd-の件">'fwupd' の件</h3> <p>自分の筐体は 'Legacy <a class="keyword" href="http://d.hatena.ne.jp/keyword/BIOS">BIOS</a>' のみで '<a class="keyword" href="http://d.hatena.ne.jp/keyword/UEFI">UEFI</a>' には対応していないので何となくエラーログのとおりではあるのですが、このエラーに関しては報告が数件見つかるぐらいで、対応方法について情報が見つかりませんでした。</p> <p><figure id="quote_fwupd"></p> <blockquote><p>Aug 18 10:57:08Aspire-V3-112P-C1AQ org.<a class="keyword" href="http://d.hatena.ne.jp/keyword/freedesktop">freedesktop</a>.fwupd[2255]: (fwupd:3147):Fu-WARNING **: Failed to coldplug: <a class="keyword" href="http://d.hatena.ne.jp/keyword/UEFI">UEFI</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/firmware">firmware</a> updating notsupported</p> <p>So I don't have <a class="keyword" href="http://d.hatena.ne.jp/keyword/UEFI">UEFI</a> enabled, I'm running off of Legacy, I don't know if that's causing the problems.<br/> <br /><cite><a href="https://ubuntuforums.org/archive/index.php/t-2334136.html">[SOLVED] Had Ubuntu 16.04LTS for 6 days now... a bumpy road from windows 10 [Archive] - Ubuntu Forums</a></cite> </figure></p></blockquote> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Faskubuntu.com%2Fquestions%2F808654%2Fbuggy-start-up-on-repaired-upgrade-from-14-04-to-ubuntu-16-04-lts%2F808900" title="buggy start up on repaired upgrade from 14.04 to ubuntu 16.04 LTS" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p><ins datetime="2018-04-05T12:09:04+09:00"> (追記:2018/4/5)新たに対応しました。</p> <h3 id="Could-not-parse-desktop-file-の件">'Could not parse desktop file' の件</h3> <pre class="code" data-lang="" data-unlink> 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file parcellite-startup.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file remmina-applet.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file diodon.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file diodon.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file gnome-screensaver.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file parcellite-startup.desktop or it references a not found TryExec binary$ 4月 05 01:54:57 calc0 gnome-session-binary[1403]: WARNING: Could not parse desktop file fingerprint-polkit-agent.desktop or it references a not found TryExec binary$</pre> <p>該当の desktop file を削除しました。(パッケージ削除に <code>sudo apt-get remove --purge package</code> を使えば防げていたかも)</p> <pre class="code" data-lang="" data-unlink>cd ~/.config/autostart rm parcellite-startup.desktop diodon.desktop remmina-applet.desktop gnome-screensaver.desktop fingerprint-polkit-agent.desktop</pre> <h3 id="docker-関連">docker 関連</h3> <pre class="code" data-lang="" data-unlink> 4月 05 01:55:02 calc0 systemd-udevd[2247]: Could not generate persistent MAC address for docker0: No such file or directory$ 4月 05 01:55:02 calc0 kernel: aufs au_opts_verify:1597:dockerd[2077]: dirperm1 breaks the protection by the permission bits on the lower branch$</pre> <p>最近 docker を使っていなかったのでサービスを停止しました。</p> <pre class="code" data-lang="" data-unlink>sudo systemctl disable docker.service sudo systemctl disable docker.socket</pre> <h3 id="zeitgeist-関連"><a class="keyword" href="http://d.hatena.ne.jp/keyword/zeitgeist">zeitgeist</a> 関連</h3> <pre class="code" data-lang="" data-unlink>4月 05 01:55:16 calc0 org.gnome.zeitgeist.SimpleIndexer[1197]: ** (zeitgeist-fts:3048): WARNING **: Unable to get info on application:///usr/share/gnome/autostart/gnome-gmail-startup.desktop</pre> <p>snap でダウンロードされた <code>gnome-gmail</code> でしたが、使っていなかったので削除しました。</p> <h2 id="結果">結果</h2> <p><figure id="table_result"> <figcaption>Table.1 エラーログ対処の結果</figcaption></p> <table> <thead> <tr> <th>カテゴリ </th> <th style="text-align:right;">件数</th> </tr> </thead> <tbody> <tr> <td>解決 </td> <td style="text-align:right;">8 </td> </tr> <tr> <td>未解決 </td> <td style="text-align:right;">4 </td> </tr> <tr> <td>バグのため保留</td> <td style="text-align:right;">1 </td> </tr> </tbody> </table> <p></figure></p> <p></ins></p> <p>以上</p> maijou2501 小物用の撮影ボックスを500円で自作する hatenablog://entry/10328749687181910560 2016-09-02T00:08:02+09:00 2016-09-02T00:08:02+09:00 100均の商品5点で、小物用の撮影ボックスを自作してみた。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160828/20160828132905.jpg" title="撮影ボックス" alt="撮影ボックス" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#材料">材料</a></li> <li><a href="#工作道具">工作道具</a></li> <li><a href="#作成手順">作成手順</a></li> <li><a href="#撮影してみた">撮影してみた</a></li> <li><a href="#参考サイト">参考サイト</a></li> </ul> <h2 id="目的">目的</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/LEGO">LEGO</a> 作品を綺麗に撮影したいと思い、撮影ボックスが欲しくなりました。<br/> 撮影ボックスは構造が簡単なため、100均の商品だけで自作を試みました。</p> <h2 id="材料">材料</h2> <p>以下を近所の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%A4%A5%BD%A1%BC">ダイソー</a>で購入しました。</p> <p>List.1 購入品目</p> <table> <thead> <tr> <th>品目 </th> <th>個数</th> <th>値段(税別)</th> </tr> </thead> <tbody> <tr> <td>PPシート(半透明) </td> <td>4 </td> <td>400 </td> </tr> <tr> <td>模造紙(厚口、5枚入り)</td> <td>1 </td> <td>100 </td> </tr> </tbody> </table> <h2 id="工作道具">工作道具</h2> <ul> <li>カッター(大きい刃だと工作が楽です)</li> <li>工作マット(カッティングマット)</li> <li>養生テープ</li> </ul> <h2 id="作成手順">作成手順</h2> <ol> <li>2枚のPPシートを正方形にカットする(カットした部分も使いますので傷をつけないこと)</li> <li>PPシートを養生テープで貼り付ける(しまう時に折りたためるように貼るのがミソです)</li> <li>模造紙を貼付ける</li> <li>撮影ボックスを組立てる</li> </ol> <p>各工程の工作参考図です。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160901/20160901233259.jpg" title="撮影ボックス-PPシートの貼付け" alt="撮影ボックス-PPシートの貼付け" /><br/> Pic.1 PPシートの貼付け</p> <p>※ 折りたたんだ時に一枚のPPシートサイズになるように、山折・谷折りを考えて養生テープを貼ります。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160901/20160901233415.jpg" title="撮影ボックス-模造紙の貼付け" alt="撮影ボックス-模造紙の貼付け" /><br/> Pic.2 模造紙の貼付け(緑の四角の上部を貼り付け)</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160828/20160828132822.jpg" title="撮影ボックス-上部から俯瞰" alt="撮影ボックス-上部から俯瞰" /><br/> Pic.3 自作した撮影ボックスの組立</p> <p>模造紙は結構たるませて良いようです。(急な傾斜をつけない)</p> <h2 id="撮影してみた">撮影してみた</h2> <p>照明の具合はまだまだ要検討ですが、床で撮影していた頃よりは格段に良いです。</p> <p><a data-flickr-embed="true" href="https://www.flickr.com/photos/134416355@N07/29281284136/" title="セキセイインコ-2 by maijou2501, on Flickr"><img src="https://farm9.staticflickr.com/8823/29281284136_db14b40068_b.jpg" width="1024" alt="セキセイインコ-2"></a><script async src="https://embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p> <p><a data-flickr-embed="true" href="https://www.flickr.com/photos/134416355@N07/29314439595/" title="マガモ_2 by maijou2501, on Flickr"><img src="https://farm9.staticflickr.com/8267/29314439595_77a99e6c6e_b.jpg" width="1024" alt="マガモ_2"></a><script async src="https://embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p> <p><a data-flickr-embed="true" href="https://www.flickr.com/photos/134416355@N07/29235728101/" title="マガモ_3 by maijou2501, on Flickr"><img src="https://farm9.staticflickr.com/8052/29235728101_5ae3387366_b.jpg" width="1024" alt="マガモ_3"></a><script async src="https://embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p> <h2 id="参考サイト">参考サイト</h2> <p><a href="http://www.a-syasin.com/1000box/"> 1,000円で作る撮影ボックス </a></p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fblog.livedoor.jp%2Fdesumiru%2Farchives%2F1787179.html" title="撮影ボックス(ブース)を自作 : ですみる!" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>以上</p> maijou2501 Ubuntu 16.04 LTS Desktop から GUI 環境を削除する hatenablog://entry/10328749687180820963 2016-08-26T00:20:28+09:00 2016-09-09T22:54:18+09:00 "Ubuntu 16.04 Server" が必要だったが、億劫がって "Ubuntu 16.04 Desktop" をインストールしてしまったので、Desktop 環境から GUI 環境を取り除くことにした。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160909/20160909225226.png" title="CUI" alt="CUI" /></p> <p><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#GUI-X-Window-System-を削除する">GUI (X Window System) を削除する</a></li> <li><a href="#入出力関係の修正">入出力関係の修正</a></li> <li><a href="#CUIログインText-Mode-ログイン-への設定変更">CUIログイン(Text Mode ログイン) への設定変更</a></li> </ul> </li> </ul> <h2 id="目的">目的</h2> <p>雑誌付録の "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 16.04 LTS 日本語 Remix" から、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 16.04 Server" をインストールできるかと思ったのですができなかった。<br/> "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 16.04 Server" の ISO から DVD を準備するのも億劫だったため、Desktop 環境から <a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a> 環境を取り除くことにした。</p> <h2 id="方法">方法</h2> <h3 id="GUI-X-Window-System-を削除する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/X%20Window%20System">X Window System</a>) を削除する</h3> <p>WEBで調べると下記のような記事がいくつかヒットした。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Faskubuntu.com%2Fquestions%2F483612%2Fhow-to-remove-ubuntu-desktop-completely-and-retain-gnome-shell" title="How to remove ubuntu-desktop completely and retain gnome-shell?" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>みなさん色々な方法を試されているようです…。</p> <p>今回は <a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a> ログイン画面にて "Alt+F1" を押し <a class="keyword" href="http://d.hatena.ne.jp/keyword/CUI">CUI</a> ログインを行い、下記のコマンドを実行した。</p> <pre class="code" data-lang="" data-unlink>apt -y purge ubuntu-desktop apt -y purge lightdm</pre> <p>各種パッケージの削除に30分ほどかかりました。</p> <h3 id="入出力関係の修正">入出力関係の修正</h3> <p>その後、"LTS 日本語 Remix" のためか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CUI">CUI</a> 画面表示で文字化けしている箇所があったため下記を実行した。</p> <pre class="code" data-lang="" data-unlink>update-locale LANG=C dpkg-reconfigure keyboard-configuration</pre> <p>2行目はキーボードの設定で、初期状態のキーボード設定が日本語キーボードに合わなかったため <a class="keyword" href="http://d.hatena.ne.jp/keyword/CUI">CUI</a> 設定画面で下記のサイトを参考に設定を行いました。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fktyubeshi%2Fitems%2F847b05b7879e2f45da54" title="Ubuntu12.04 キーボード設定の変更 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="CUIログインText-Mode-ログイン-への設定変更"><a class="keyword" href="http://d.hatena.ne.jp/keyword/CUI">CUI</a>ログイン(Text Mode ログイン) への設定変更</h3> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fubuntuhandbook.org%2Findex.php%2F2014%2F01%2Fboot-into-text-console-ubuntu-linux-14-04%2F" title="Ubuntu 14.04, 13.10: Boot into Text Mode / Console / Command Line | UbuntuHandbook" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>上記を参考に下記を実行した。</p> <pre class="code" data-lang="" data-unlink>sudo sed -i -e &#34;s/^GRUB_CMDLINE_LINUX=\&#34;.*$/GRUB_CMDLINE_LINUX=\&#34;text\&#34;/&#34; /etc/default/grub sudo update-grub</pre> <p>その後、再起動を実行すると <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> Server のような環境で利用することができました。</p> <p>以上。</p> maijou2501 Windows 標準の機能を用いた、マルウェアのアンチデバッグ機能を逆手に利用したマルウェア対策 hatenablog://entry/6653812171403414066 2016-07-03T01:32:29+09:00 2017-03-17T17:59:16+09:00 気の効いたマルウェアだとデバッガ検知を行なっているということもあり(ex. EMDIVI)、Windows 標準の機能(コマンドプロンプト、ショートカット機能)を用いてデバッガが動いるように見せかけ、マルウェアの活動抑止に利用します。 <p><a name="pic_1"></a> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160701/20160701020604.png" title="リンクファイルのプロパティ" alt="リンクファイルのプロパティ" /><br/> pic.1 リンクファイルのプロパティ</p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#2-cmdexe-を-OLLYDBGEXE-にリネーム">2. cmd.exe を OLLYDBG.EXE にリネーム</a></li> <li><a href="#4-ショートカットのプロパティ設定">4. ショートカットのプロパティ設定</a></li> </ul> </li> <li><a href="#おとりプロセスの起動状態の確認">おとりプロセスの起動状態の確認</a></li> <li><a href="#PowerShell-を用いたバックグラウンド実行2016719-追記">PowerShell を用いたバックグラウンド実行(2016/7/19 追記)</a></li> <li><a href="#2017317追記">(2017/3/17追記)</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>のアンチ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>機能を利用して、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>の活動を抑制する仕組みをセットアップします。</p> <p>気の効いた<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>ですとデバッガ検知を行なっているということもあり(ex. EMDIVI)、これは逆に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>の活動抑止に利用できるのでは…と考えたところ、すでに先人がいっらっしゃいました。<br/> 2009年にLACの松木さんという方が、下記の論文を提出されてました。</p> <p><a href="https://www.google.co.jp/url?url=https://ipsj.ixsq.nii.ac.jp/ej/index.php%3Faction%3Dpages_view_main%26active_action%3Drepository_action_common_download%26item_id%3D66465%26item_no%3D1%26attribute_id%3D1%26file_no%3D1%26page_id%3D13%26block_id%3D8&amp;rct=j&amp;q=&amp;esrc=s&amp;sa=U&amp;ved=0ahUKEwj4l8aSnNDNAhWDKpQKHWQEDuQ4ChAWCB0wAg&amp;sig2=8lxrhnb2koWnmaTSs6u-9A&amp;usg=AFQjCNFOLzGCFiTBzMFWiWnvwcIdAjUobw"> マルウェアの耐解析機能を逆用した活動抑止手法の提案 - 情報処理学会論文誌 </a></p> <p><a href="https://www.google.co.jp/url?url=https://ipsj.ixsq.nii.ac.jp/ej/index.php%3Faction%3Dpages_view_main%26active_action%3Drepository_action_common_download%26item_id%3D66466%26item_no%3D1%26attribute_id%3D1%26file_no%3D1%26page_id%3D13%26block_id%3D8&amp;rct=j&amp;q=&amp;esrc=s&amp;sa=U&amp;ved=0ahUKEwi17du6h9XNAhVElJQKHUNaAVgQFggZMAE&amp;sig2=BdyWu-poFgxHJ14NjywC8A&amp;usg=AFQjCNER9SXaI5mz85Mh56gw7jxNM2gmaQ"> セキュリティ無効化攻撃を利用した マルウェアの検知と活動抑止手法の提案 - 情報処理学会論文誌 </a></p> <p>IsDebuggerPresent の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</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/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>対策を行うことを目的としました。</p> <h2 id="方法">方法</h2> <p>要約としては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 標準の機能(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>、ショートカット機能)を用いてデバッガが動いるように見せかけます。<br/> <strong>( 2016/7/19 追記 : ショートカット機能ではなく <a class="keyword" href="http://d.hatena.ne.jp/keyword/PowerShell">PowerShell</a> のバックグラウンド実行を用いる方法を記載)</strong></p> <ol> <li><code>%SystemDrive%\WINDOWS\system32\cmd.exe</code> を任意の場所にコピー</li> <li><code>cmd.exe</code> を <code>OLLYDBG.EXE</code> にリネーム</li> <li>リネームしたファイルのショートカット作成</li> <li>ショートカットのプロパティ設定</li> <li>ショートカットをスタートアップ(コマンド<code>shell:Startup</code>で確認)に登録する</li> </ol> <p>&lsquo;4&rsquo; のショートカットのプロパティは下記の設定を行います。(先頭の画像 <a href="#pic_1">pic.1</a>も参考にしてください。)</p> <ul> <li>リンク先へコマンドオプションを追記「 /K &ldquo;title OllyDbg"」</li> <li>実行時の大きさ「最小化」</li> <li>画面バッファー・ウインドウサイズを最小の設定(邪魔にならないよう小さく設定するだけなので任意です。)</li> </ul> <p>手順 &lsquo;2&rsquo;, &lsquo;4&rsquo; については、下記より意図などを説明をいたします。</p> <h3 id="2-cmdexe-を-OLLYDBGEXE-にリネーム">2. <code>cmd.exe</code> を <code>OLLYDBG.EXE</code> にリネーム</h3> <p>下記の引用の通りに <code>cmd.exe</code> をリネームすることで、プログラムのイメージ名を <code>OLLYDGB.EXE</code> であると逆に偽装します。</p> <blockquote><p>『OllyDbg』のプロセスを検出して解析を妨害するタイプのウイルスを解析したい</p> <p>基本的なOllyDbgのプロセス検出手法としては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>上で実行されているプロセスの一覧を取得して、各プロセス名のチェックによりOllyDbgが起動されているかを判断します。<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>関数を用いてプロセス一覧を取得する方法は5種類ありますが、通常は以下の3つの方法のいずれかを使用します。<br/>  <br/> ・Process32First(Next)関数等のTool Help <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を使用<br/> ・EnumProcesses関数等のProcess status <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>(PSAPI)を使用<br/> ・OSが保持するパフォーマンスデータから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%B8%A5%B9%A5%C8%A5%EA">レジストリ</a>の不可視キーとして取得<br/>  <br/> 最も簡単なプロセス検出回避アプローチとしては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>が把握するプロセス名はプロセスの実行ファイル名となるため、単純にOllyDbgの実行ファイル名を別のものに変更すれば、起動時にエラーメッセージは出るもののプロセス名も変更されOllyDbgのプロセスは検出されなくなります。<br/> <br /><cite><a href="http://hp.vector.co.jp/authors/VA028184/OllyDbgQA.htm">OllyDbg Q&amp;A (Digital Travesia)</a></cite></p></blockquote> <p>また、下記の調査を鑑みますと、プログラムの配置場所は任意で良さそうです。(自分は折角なので、OllyDbgのフォルダを参考にそれっぽい場所に配置しましたが。)</p> <blockquote><p>調査した範囲では,停止対象プロセスの判定はプロセス名のみで,実行ファイルのパスや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%E5%A1%BC%A5%C6%A5%C3%A5%AF%A5%B9">ミューテックス</a>を用いた確認は行っていない</p> <p><br /><cite><a href="https://www.google.co.jp/url?url=https://ipsj.ixsq.nii.ac.jp/ej/index.php%3Faction%3Dpages_view_main%26active_action%3Drepository_action_common_download%26item_id%3D66466%26item_no%3D1%26attribute_id%3D1%26file_no%3D1%26page_id%3D13%26block_id%3D8&rct=j&q=&esrc=s&sa=U&ved=0ahUKEwi17du6h9XNAhVElJQKHUNaAVgQFggZMAE&sig2=BdyWu-poFgxHJ14NjywC8A&usg=AFQjCNER9SXaI5mz85Mh56gw7jxNM2gmaQ">セキュリティ無効化攻撃を利用した マルウェアの検知と活動抑止手法の提案</a></cite></p></blockquote> <h3 id="4-ショートカットのプロパティ設定">4. ショートカットのプロパティ設定</h3> <p>ここでは下記の理由からウインドウタイトルをデバッガが起動しているかのように偽装するため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>の <code>title</code> コマンドを利用してウインドウタイトルを変更します。</p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>は、可視ウィンドウを列挙し、各ウィンドウのタイトルバーの文字を以下の文字列と比較します。  <br/> ・Ollydbg<br/> ・Process Explorer<br/> ・Process Hacker<br/> ・Process Monitor<br/> ・SoftICE<br/> ・W32Dasm<br/> ・<a class="keyword" href="http://d.hatena.ne.jp/keyword/WireShark">WireShark</a>=<br/>  <br/> ウィンドウのタイトルバーの文字が上述の文字列のいずれかを含んでいた場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>は、スリープコマンドを実行することで、自身の不正活動の実行を中断します。<br/> <br /><cite><a href="http://about-threats.trendmicro.com/Malware.aspx?language=jp&name=BKDR_EMDIVI.LEW">BKDR_EMDIVI.LEW | 危険度: 低 | トレンドマイクロ:セキュリティ情報</a></cite></p></blockquote> <h2 id="おとりプロセスの起動状態の確認">おとりプロセスの起動状態の確認</h2> <p>本件のおとりプロセスを起動させてから、コマンド<code>tasklist</code>を利用して起動状態を確認してみます。</p> <pre class="code" data-lang="" data-unlink>C:¥Users¥ito&gt;tasklist /V /FO LIST /FI &#34;WINDOWTITLE eq OllyDbg&#34; イメージ名: OLLYDBG.EXE PID: 4904 セッション名: Console セッション#: 3 メモリ使用量: 2,436 K 状態: Running ユーザー名: ITO-WIN¥ito CPU 時間: 0:00:00 ウィンドウ タイトル: OllyDbg</pre> <p>上記を見ると、メモリ使用量が小さいこと以外は本家の <code>OLLYDGB.EXE</code> の起動状態と同じでした。</p> <p>また、ウイルスによってはプログラムの強制停止を行うものもあるようなので、本件のおとりのプロセスが停止されていたら注意しないとですね。</p> <blockquote><p>・以下のセキュリティ関連のツール、その他のプロセスを終了します。</p> <p>msdev.exe<br/> dbgview.exe<br/> mirc.exe<br/> ollydbg.exe<br/> <br /><cite><a href="http://www.mcafee.com/japan/security/virPQ.asp?v=W32/Pinkslipbot.gen.j">ウイルス検索 | マカフィー株式会社</a></cite></p></blockquote> <h2 id="PowerShell-を用いたバックグラウンド実行2016719-追記"><a class="keyword" href="http://d.hatena.ne.jp/keyword/PowerShell">PowerShell</a> を用いたバックグラウンド実行(2016/7/19 追記)</h2> <p>&ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a>&rdquo; 以降であればデフォルトで <a class="keyword" href="http://d.hatena.ne.jp/keyword/PowerShell">PowerShell</a> が利用できますので、下記を参考にスタートアップフォルダにバッチファイルを設置し、バックグラウンド(ウインドウ非表示)で自動実行するようにしました。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fcd01%2Fitems%2F82829ba0ec0f59e1b04d" title="バッチファイルから PowerShell を呼び出す方法 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://qiita.com/cd01/items/82829ba0ec0f59e1b04d">qiita.com</a></cite></p> <pre class="code lang-dosbatch" data-lang="dosbatch" data-unlink>@powershell -NoProfile -ExecutionPolicy Unrestricted <span class="synConstant">&quot;</span><span class="synSpecial">$s</span><span class="synConstant">=[scriptblock]::create((gc \&quot;</span><span class="synIdentifier">%~f0</span>\<span class="synConstant">&quot;|?{</span><span class="synSpecial">$_</span><span class="synConstant">.readcount -gt 1})-join\&quot;</span>`n\<span class="synConstant">&quot;);&amp;</span><span class="synSpecial">$s</span><span class="synConstant">&quot;</span> <span class="synIdentifier">%*</span>&amp;<span class="synStatement">goto:eof</span> <span class="synIdentifier">Start</span>-Process -WindowStyle hidden -FilePath <span class="synConstant">&quot;C:\Program Files\odbg110\OLLYDBG.EXE&quot;</span> -ArgumentList <span class="synConstant">&quot;/K title OllyDbg&quot;</span> </pre> <p>こちらでしたらタスクバーもすっきりしますね。</p> <h2 id="2017317追記"> <ins cite="https://securingtomorrow.mcafee.com/mcafee-labs/stopping-malware-fake-virtual-machine/" datetime="2017-03-17T17:49:51+09:00">(2017/3/17追記)</ins> </h2> <p>下記サイトでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>に対して実機環境を仮想環境だと誤認させて &ldquo;アンチ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>機能を逆手に利用した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>対策&rdquo; を実現させておりました。</p> <p><a href="https://securingtomorrow.mcafee.com/mcafee-labs/stopping-malware-fake-virtual-machine/">Stopping Malware With a Fake Virtual Machine | McAfee Blogs</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%B8%A5%B9%A5%C8%A5%EA">レジストリ</a>値追加・ファイル作製・プロセス作製など実機への影響範囲が大きい点は考慮しないといけませんが、とても興味深い実験結果が報告されていたため共有いたします。 </ins></p> <h2 id="所感">所感</h2> <p>最後にこんなことを書くのもあれですが、本件のおとりプロセスの有効性はお守り程度と考えて、皆さんはきちんと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A4%A5%EB%A5%B9%C2%D0%BA%F6">ウイルス対策</a>ソフトとEMET<a href="#f-d2b4df79" name="fn-d2b4df79" title="https://technet.microsoft.com/ja-jp/security/jj653751.aspx">*1</a>を導入してください。<br/> ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A4%A5%EB%A5%B9%C2%D0%BA%F6">ウイルス対策</a>ソフトは回し者ではないですが、経験から &lsquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kaspersky">Kaspersky</a>&rsquo; をお勧めしておきます。最新のウイルスに対するパターンファイルの作成が早いように感じます。</p> <p>あと面白い記事を見つけまして、</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fblog.f-secure.jp%2Farchives%2F50465000.html" title="エフセキュアブログ : 遅いCPUはマルウェア防御に等しい?" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://blog.f-secure.jp/archives/50465000.html">blog.f-secure.jp</a></cite></p> <p>上記のような感染対象の選択が行われているのであれば、自分の実験用ノートPCは7,8年前のもので &ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Intel">Intel</a>&reg; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Celeron">Celeron</a>&reg; M CPU 440 @1.86GHz 1.86GHz&rdquo; のCPUなので感染しないかもですね。</p> <p>以上、"「かみついて」、君を感じる 罠の中" ということで。</p> <div class="footnote"> <p class="footnote"><a href="#fn-d2b4df79" name="f-d2b4df79" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://technet.microsoft.com/ja-jp/security/jj653751.aspx">https://technet.microsoft.com/ja-jp/security/jj653751.aspx</a></span></p> </div> maijou2501 Internet of Aquarium : ESP-WROOM-02 と ThingSpeak を利用して hatenablog://entry/10328537792371310554 2016-04-18T00:36:29+09:00 2017-01-18T00:13:48+09:00 アクアリウムを始めたので、"ESP-WROOM-02" を "無線付Arduino" として使い適正水温監視を行うこととした。 <p><figure id="pic_aquarino_1"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160416/20160416001940.jpg" title="Aquarino(旧ケース)" alt="Aquarino(旧ケース)" /><br/> <figcaption> Pic.0 Aquarino外観 (新しいケースのバージョンもあります。写真は<a href="#pic_aquarino_2">こちら</a>から) </figcaption> </figure></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#監視方法">監視方法</a></li> <li><a href="#作成">作成</a><ul> <li><a href="#Arduino-で水温温度測定">Arduino で水温(温度)測定</a><ul> <li><a href="#温度センサ">温度センサ</a></li> <li><a href="#温度通信状態表示のため-LCD">温度・通信状態表示のため LCD</a></li> <li><a href="#省電力のための-Deep-Sleepモード-利用">省電力のための "Deep-Sleepモード" 利用</a></li> <li><a href="#ThingSpeak-への接続に-HTTPS-を利用">ThingSpeak への接続に HTTPS を利用</a></li> <li><a href="#デバッグ用のシリアルモニタへの出力">デバッグ用のシリアルモニタへの出力</a></li> <li><a href="#ソースコード">ソースコード</a></li> <li><a href="#ハードウェア作成のための準備">ハードウェア作成のための準備</a></li> <li><a href="#ハードウェア作成">ハードウェア作成</a></li> <li><a href="#動作確認">動作確認</a></li> </ul> </li> <li><a href="#ThingSpeak-に水温データを送信しアーカイブグラフ化">ThingSpeak に水温データを送信しアーカイブ・グラフ化</a></li> <li><a href="#水温監視を-ThingSpeak-のアプリ-React-で実行--適正温度を外れた場合は-Twitter-へツイート">水温監視を ThingSpeak のアプリ "React" で実行 &amp; 適正温度を外れた場合は Twitter へツイート</a></li> <li><a href="#ThingSpeak-からのツイートを-IFTTT-で監視し警告メールを送信">ThingSpeak からのツイートを IFTTT で監視し警告メールを送信</a></li> </ul> </li> <li><a href="#TODO">TODO</a></li> <li><a href="#付録">付録</a><ul> <li><a href="#秋月さんで販売している-ESP-WROOM-0214-の-EAGLEライブラリ">秋月さんで販売している "ESP-WROOM-02"*14 の "EAGLEライブラリ"</a></li> <li><a href="#制作費用">制作費用</a></li> <li><a href="#ケースを入れ替えました2017117追記">ケースを入れ替えました(2017/1/17追記)</a></li> </ul> </li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%AF%A5%A2%A5%EA%A5%A6%A5%E0">アクアリウム</a>を始めたので、表題の方法で適正水温監視を行う。</p> <p><a data-flickr-embed="true" href="https://www.flickr.com/photos/134416355@N07/albums/72157666284959182" title="2016_aquarium_01"><img src="https://farm2.staticflickr.com/1562/26118385361_c2c17d1e76_z.jpg" width="640" height="480" alt="2016_aquarium_01"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p> <h2 id="監視方法">監視方法</h2> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a> で水温(温度)測定</li> <li>ThingSpeak<a href="#f-0d6c177f" name="fn-0d6c177f" title="https://thingspeak.com">*1</a> に水温データを送信し<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6">アーカイブ</a>・グラフ化</li> <li>水温監視を ThingSpeak のアプリ "React"<a href="#f-243ac199" name="fn-243ac199" title="https://thingspeak.com/apps">*2</a> で実行</li> <li>適正温度を外れた場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> へツイート</li> <li>ThingSpeak からのツイートを IFTTT<a href="#f-7e103683" name="fn-7e103683" title="https://ifttt.com">*3</a> で監視し警告メールを送信</li> </ol> <h2 id="作成">作成</h2> <h3 id="Arduino-で水温温度測定"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a> で水温(温度)測定</h3> <p>まず母体として、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a>" を "無線付<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>" として使いました。回路図・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>はまとめて後述しています。</p> <p>また、本エントリで作成したものについては "Aquarino" と名付けましたので、以後そのように記載します。</p> <h4 id="温度センサ">温度センサ</h4> <p>手元に MCP9700<a href="#f-314daae6" name="fn-314daae6" title="http://akizukidenshi.com/catalog/g/gI-03286/">*4</a> がありましたので、下記を参考に利用しました。</p> <p><a href="http://arms22.blog91.fc2.com/blog-entry-415.html"> Arduinoで遊ぼう -温度センサIC、MCP9700を使って温度を測る - なんでも作っちゃう、かも。 </a></p> <p>注意としては、5V電源とGNDを繋ぎ間違えると一発で壊れてしますので、ご用心を。(壊れてからは、TOUT の許可されている電圧上限 1V の値を受け取っていたので、TOUT に負荷がかかっていたかもしれません^^; 自分は2つダメにしてしまいました…)</p> <h4 id="温度通信状態表示のため-LCD">温度・通信状態表示のため <a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a></h4> <p>こちらも手元に "LCDキャラクタディスプレイモジュール(16×2行バックライト無)"<a href="#f-cbba6d06" name="fn-cbba6d06" title="http://akizukidenshi.com/catalog/g/gP-00040/">*5</a> がありましたので、下記を参考に利用しました。</p> <p><a href="http://blazeazuki.exblog.jp/22723877"> 【Arduino】SC1602B(16桁LCDディスプレイ)を使ってみる。 : Blazing Azuki's Blog </a></p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a> のために GPIO2 をデジタル出力として利用しました。( GPIO0,2,15 をデジタル出力として使う場合は、実行モードを妨げないようにしないといけません。<a href="#f-ca065b1b" name="fn-ca065b1b" title="http://deviceplus.jp/hobby/entry0032/">*6</a> )</p> <h4 id="省電力のための-Deep-Sleepモード-利用">省電力のための "Deep-Sleepモード" 利用</h4> <p>下記がとても参考になりました。</p> <p><a href="http://qiita.com/azusa9/items/65a5c3772c41631b5ca1"> ESP8266の真骨頂Deep-Sleepモードの使い方 - Qiita </a></p> <p>今回の場合ですと <a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a> が待機状態でも <a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a> は通電したままですので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a> の最後に表示した状態が持続します。</p> <h4 id="ThingSpeak-への接続に-HTTPS-を利用">ThingSpeak への接続に <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a> を利用</h4> <p>"WiFiClientSecure class" を利用して対応し、証明書(フィンガープリント)確認なども行うようにしました。</p> <p>GETリクエストは <code>https://api.thingspeak.com/update?api_key=XXXXXXXXXX&amp;field2=20</code> という感じです。</p> <h4 id="デバッグ用のシリアルモニタへの出力"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>用のシリアルモニタへの出力</h4> <p>リリースバージョンでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>してますが、参考に載せておきます。</p> <pre class="code" data-lang="" data-unlink>Connecting to XXXXmask-networkXXXX ....... WiFi connected IP address : 192.168.1.123 Connecting HOST : api.thingspeak.com TOUT from MCP9700 : 796 mV (count 0) TOUT from MCP9700 : 778 mV (count 1) TOUT from MCP9700 : 779 mV (count 2) TOUT from MCP9700 : 779 mV (count 3) TOUT from MCP9700 : 780 mV (count 4) TOUT Average : 782.40 mV ( 24.84 degress C) Requesting URL : /update?api_key=XXXXXXXXXXXXXXX&amp;field1=24.84 closing connection.</pre> <h4 id="ソースコード"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a></h4> <p>下記で公開しております。</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2FAquarino" title="maijou2501/Aquarino" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h4 id="ハードウェア作成のための準備">ハードウェア作成のための準備</h4> <p>EAGLE<a href="#f-7f99c887" name="fn-7f99c887" title="http://www.cadsoftusa.com/">*7</a> で回路図を作成し、パーツ郡は下記を利用しました。</p> <ul> <li>日本の記号対応<a href="#f-27d06d4d" name="fn-27d06d4d" title="http://lowreal.net/2013/11/02/2">*8</a></li> <li>スロット式DCジャック<a href="#f-fb98bf8a" name="fn-fb98bf8a" title="http://d.hatena.ne.jp/seinzumtode/20130531/1369988380">*9</a></li> <li>抵抗など<a href="#f-84043162" name="fn-84043162" title="http://threesons-technicalmemo.blogspot.jp/2014/03/eagle.html">*10</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a><a href="#f-74f5e037" name="fn-74f5e037" title="https://code.google.com/archive/p/phi-prompt-user-interface-library/downloads#makechanges">*11</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a><a href="#f-45f2c54c" name="fn-45f2c54c" title="https://github.com/maijou2501/EAGLE/tree/master/esp-wroom-02">*12</a></li> </ul> <p>始めての EAGLE 利用なので間違った使い方などあるかと思いますが、下記が本エントリで作成した <a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a> を含む回路図です。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160417/20160417014949.jpg" title="Aquarino 回路図" alt="Aquarino 回路図" /><br/> Pic.1 回路図</p> <p>ユニバーサル基板でのパーツ配置を自動でできないかと思い、途中まで検討してみました。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160417/20160417015007.jpg" title="Aquarino パターン図の検討" alt="Aquarino パターン図の検討" /><br/> Pic.2 パターン図の検討</p> <p>しかしながら回路も小規模でユニバーサル基板利用なので、結局自分で考えた方が早そうということで配置を検討したメモが下記です。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160417/20160417015405.jpg" title="Aquarino ユニバーサル基板実装案" alt="Aquarino ユニバーサル基板実装案" /><br/> Pic.3 ユニバーサル基板実装案</p> <h4 id="ハードウェア作成">ハードウェア作成</h4> <p>Pic.3 のメモを参考に実際に実装した基板が下記です。(裏側は試行錯誤があったためクオリティが酷いですが…)</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160416/20160416001335.jpg" title="Aquarino ユニバーサル基板実装(表)" alt="Aquarino ユニバーサル基板実装(表)" /><br/> Pic.4 ユニバーサル基板実装(表)</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160416/20160416001137.jpg" title="Aquarino ユニバーサル基板実装(裏)" alt="Aquarino ユニバーサル基板実装(裏)" /><br/> Pic.5 ユニバーサル基板実装(裏)</p> <h4 id="動作確認">動作確認</h4> <iframe width="560" height="315" src="https://www.youtube.com/embed/P5nLBAxz4zM?rel=0&cc_load_policy=1&showinfo=0" frameborder="0" allowfullscreen></iframe> <p> Movie.1 "Aquarino" の動作(字幕に動作説明あり)</p> <h3 id="ThingSpeak-に水温データを送信しアーカイブグラフ化">ThingSpeak に水温データを送信し<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6">アーカイブ</a>・グラフ化</h3> <p>グラフ設定として、Y軸の最小・最大値を設定しました。</p> <iframe width="450" height="260" style="border: 1px solid #cccccc;" src="https://thingspeak.com/channels/91271/charts/1?dynamic=true&max=35&min=0&results=60&title=temperature&type=line&yaxis=degree+Celsius%5B%E2%84%83%5D"></iframe> <p> Graph.1 水槽の温度監視</p> <h3 id="水温監視を-ThingSpeak-のアプリ-React-で実行--適正温度を外れた場合は-Twitter-へツイート">水温監視を ThingSpeak のアプリ "React" で実行 &amp; 適正温度を外れた場合は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> へツイート</h3> <p>適正水温の監視は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a> 側で行うのではなく、ThingSpeak のアプリ "react" が目的に合っていそうだったのでこちらを利用しました。</p> <p>別解として "ThingTweet"<a href="#f-28c05cd0" name="fn-28c05cd0" title="http://qiita.com/minori24/items/38c06d206ceae1330e0c">*13</a> を利用する方法も考えたのですが、適性水温の変更やツイート内容を変更するためには "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>" のコードを編集した後に再書き込みが必要であり、これが面倒だと考えて採用を見送りました。</p> <h3 id="ThingSpeak-からのツイートを-IFTTT-で監視し警告メールを送信">ThingSpeak からのツイートを IFTTT で監視し警告メールを送信</h3> <p>IFTTT で監視を行い、自分の <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウントで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%B7%A5%E5%A5%BF%A5%B0">ハッシュタグ</a> "#thingspeak" が付加されてツイートされたら、指定アドレスへ警告メールを送信する設定を行いました。</p> <p><a href="https://ifttt.com/view_embed_recipe/408904-if-new-tweet-by-target-user-with-hashtag-thingspeak-then-send-an-email-from-my-gmail-address" target = "_blank" class="embed_recipe embed_recipe-l_94" id= "embed_recipe-408904"><img src= 'https://ifttt.com/recipe_embed_img/408904' alt="IFTTT Recipe: If new tweet by target user with hashtag #thingspeak, then send an email from my gmail address connects twitter to gmail" width="370px" style="max-width:100%"/></a><script async type="text/javascript" src= "//ifttt.com/assets/embed_recipe.js"></script></p> <h2 id="TODO">TODO</h2> <p>水温低下時は別途ヒーターの設備があるのですが、水温上昇時に対処する設備がありません。<br/> "Aquarino" ではシリアル通信のための RX・DX が空いているので、それで "水槽用冷却ファン" を制御しようと考えています。</p> <h2 id="付録">付録</h2> <h3 id="秋月さんで販売している-ESP-WROOM-0214-の-EAGLEライブラリ">秋月さんで販売している "<a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a>"<a href="#f-8b340498" name="fn-8b340498" title="http://akizukidenshi.com/catalog/g/gK-09758/">*14</a> の "EAGLEライブラリ"</h3> <p>"ikesato" さんの "<a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a>" の "EAGLEライブラリ"<a href="#f-0388cf26" name="fn-0388cf26" title="http://qiita.com/ikesato/items/92f4cb143e7aeb5e0f9b">*15</a> を基に、見出しのパーツを作成しました。</p> <p>下記にパーツイメージ画像と共に公開してますので、ご確認のうえご利用いただけましたらと。</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmaijou2501%2FEAGLE%2Fblob%2Fmaster%2Fesp-wroom-02%2F" title="maijou2501/EAGLE" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <h3 id="制作費用">制作費用</h3> <p>table.1 "Aquarino" 制作費用(はんだ等の消耗品は除く)</p> <table> <thead> <tr> <th>製品 </th> <th>単価</th> <th>数</th> <th>値段</th> </tr> </thead> <tbody> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/DIP">DIP</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%A9%B7%EE%C5%C5%BB%D2%C4%CC%BE%A6">秋月電子通商</a>) </td> <td>650 </td> <td>1 </td> <td>650 </td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/LCD">LCD</a>キャラクタディスプレイモジュール(16×2行バックライト無)</td> <td>500 </td> <td>1 </td> <td>500 </td> </tr> <tr> <td>温度センサーIC MCP9700 </td> <td>38 </td> <td>1 </td> <td>38 </td> </tr> <tr> <td>片面ユニバーサル基板(D) </td> <td>30 </td> <td>1 </td> <td>30 </td> </tr> <tr> <td>低損失三端子レギュレータ TA48M033F(SQ) </td> <td>100 </td> <td>1 </td> <td>100 </td> </tr> <tr> <td>カーボン抵抗1/4W 10kΩ </td> <td>1 </td> <td>3 </td> <td>3 </td> </tr> <tr> <td>カーボン抵抗1/4W 20kΩ </td> <td>1 </td> <td>1 </td> <td>1 </td> </tr> <tr> <td>半固定ボリューム(20kΩ) </td> <td>40 </td> <td>1 </td> <td>40 </td> </tr> <tr> <td>DCジャック(<a class="keyword" href="http://d.hatena.ne.jp/keyword/DIP">DIP</a>) </td> <td>100 </td> <td>1 </td> <td>100 </td> </tr> <tr> <td>ブレッドボード・ジャンパーコード(オス-メス)(10本入) </td> <td>220 </td> <td>1 </td> <td>220 </td> </tr> <tr> <td>電線50cm </td> <td>20 </td> <td>2 </td> <td>40 </td> </tr> <tr> <td>ACアダプター5V2A GF12-US0520 </td> <td>650 </td> <td>1 </td> <td>650 </td> </tr> <tr> <td>ABS樹脂ケース(蝶番式・中) 112-TS </td> <td>120 </td> <td>1 </td> <td>120 </td> </tr> <tr> <td>絶縁ラジアルリード型<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%D1%C1%D8%A5%BB%A5%E9%A5%DF%A5%C3%A5%AF%A5%B3%A5%F3%A5%C7%A5%F3%A5%B5">積層セラミックコンデンサ</a> 0.1μ </td> <td>10 </td> <td>1 </td> <td>10 </td> </tr> <tr> <td>丸ピンICソケット </td> <td>3 </td> <td>11</td> <td>33 </td> </tr> <tr> <td>丸ピンIC連結ソケット </td> <td>5 </td> <td>3 </td> <td>15 </td> </tr> <tr> <td>合計 </td> <td>- </td> <td>- </td> <td>2550</td> </tr> </tbody> </table> <h3 id="ケースを入れ替えました2017117追記"><a name="sec_1"></a><ins datetime="2017-01-17T23:52:52+09:00">ケースを入れ替えました(2017/1/17追記)</ins> </h3> <p><figure id="pic_aquarino_2"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20170117/20170117232916.jpg" title="ケースを上から見た写真" alt="ケースを上から見た写真" /> <figcaption> Pic.6 Aquarino外観(新ケース) </figcaption> </figure></p> <p><figure id="pic_aquarino_3"> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20170117/20170117232617.jpg" title="ケースを横から見た写真" alt="ケースを横から見た写真" /> <figcaption> Pic.7 Aquarino外観(新ケース) </figcaption> </figure></p> <p><ins datetime="2017-01-17T23:52:52+09:00"> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9%A5%C6%A1%BC">エステー</a>さんの冷蔵庫の脱臭炭のケースがちょうど良いサイズだったので、ケースを工作のうえケーブルも収まるように新たに細工しました。<a href="#pic_aquarino_1">旧ケース</a>よりもスリムで良いですね。 </ins></p> <h2 id="所感">所感</h2> <p>タイトルからすると竜頭蛇尾な内容かもですが、自分としてはボリュームのあるプロジェクトで、初めの構想から1ヶ月半が経とうとしています。</p> <p>EAGLE も勉強することができましたし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ESP-WROOM-02">ESP-WROOM-02</a> の扱いにも慣れてきました。また <a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a> で動画に字幕をいれられることが分かったり、ThingSpeak 利用も IFTTT のレシピ公開なども初めてでした。</p> <p>センサのハードウェア・ソフトウェアの構想・実装、加えて<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%B7%A5%E5%A5%A2%A5%C3%A5%D7">マッシュアップ</a>まで、"IoT" の要素技術を一通り学ぶことができた実り多いプロジェクトでした。<br/> しかしながらこれで終わりではなく、これからは運用・改修・機能追加など持続して取り組んでいきたいと思います。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-0d6c177f" name="f-0d6c177f" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://thingspeak.com">https://thingspeak.com</a></span></p> <p class="footnote"><a href="#fn-243ac199" name="f-243ac199" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://thingspeak.com/apps">https://thingspeak.com/apps</a></span></p> <p class="footnote"><a href="#fn-7e103683" name="f-7e103683" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://ifttt.com">https://ifttt.com</a></span></p> <p class="footnote"><a href="#fn-314daae6" name="f-314daae6" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://akizukidenshi.com/catalog/g/gI-03286/">http://akizukidenshi.com/catalog/g/gI-03286/</a></span></p> <p class="footnote"><a href="#fn-cbba6d06" name="f-cbba6d06" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://akizukidenshi.com/catalog/g/gP-00040/">http://akizukidenshi.com/catalog/g/gP-00040/</a></span></p> <p class="footnote"><a href="#fn-ca065b1b" name="f-ca065b1b" class="footnote-number">*6</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://deviceplus.jp/hobby/entry0032/">http://deviceplus.jp/hobby/entry0032/</a></span></p> <p class="footnote"><a href="#fn-7f99c887" name="f-7f99c887" class="footnote-number">*7</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.cadsoftusa.com/">http://www.cadsoftusa.com/</a></span></p> <p class="footnote"><a href="#fn-27d06d4d" name="f-27d06d4d" class="footnote-number">*8</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://lowreal.net/2013/11/02/2">http://lowreal.net/2013/11/02/2</a></span></p> <p class="footnote"><a href="#fn-fb98bf8a" name="f-fb98bf8a" class="footnote-number">*9</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://d.hatena.ne.jp/seinzumtode/20130531/1369988380">http://d.hatena.ne.jp/seinzumtode/20130531/1369988380</a></span></p> <p class="footnote"><a href="#fn-84043162" name="f-84043162" class="footnote-number">*10</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://threesons-technicalmemo.blogspot.jp/2014/03/eagle.html">http://threesons-technicalmemo.blogspot.jp/2014/03/eagle.html</a></span></p> <p class="footnote"><a href="#fn-74f5e037" name="f-74f5e037" class="footnote-number">*11</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://code.google.com/archive/p/phi-prompt-user-interface-library/downloads#makechanges">https://code.google.com/archive/p/phi-prompt-user-interface-library/downloads#makechanges</a></span></p> <p class="footnote"><a href="#fn-45f2c54c" name="f-45f2c54c" class="footnote-number">*12</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/maijou2501/EAGLE/tree/master/esp-wroom-02">https://github.com/maijou2501/EAGLE/tree/master/esp-wroom-02</a></span></p> <p class="footnote"><a href="#fn-28c05cd0" name="f-28c05cd0" class="footnote-number">*13</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://qiita.com/minori24/items/38c06d206ceae1330e0c">http://qiita.com/minori24/items/38c06d206ceae1330e0c</a></span></p> <p class="footnote"><a href="#fn-8b340498" name="f-8b340498" class="footnote-number">*14</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://akizukidenshi.com/catalog/g/gK-09758/">http://akizukidenshi.com/catalog/g/gK-09758/</a></span></p> <p class="footnote"><a href="#fn-0388cf26" name="f-0388cf26" class="footnote-number">*15</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://qiita.com/ikesato/items/92f4cb143e7aeb5e0f9b">http://qiita.com/ikesato/items/92f4cb143e7aeb5e0f9b</a></span></p> </div> maijou2501 Gmail などのWEBメールで適切に処理されない S/MIME受信メールに対して、Linux 上で改ざん・デジタル署名の確認などを行う hatenablog://entry/10328537792368787397 2016-03-31T00:46:16+09:00 2016-09-07T23:45:27+09:00 メールの添付ファイル `smime.p7s` について調べてみた。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160907/20160907221919.png" title="OpenSSL_logo.png" alt="OpenSSL_logo.png" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#背景">背景</a></li> <li><a href="#smimep7s-とは">smime.p7s とは</a></li> <li><a href="#smimep7s-を-openssl-コマンドで処理してみる下調べ">smime.p7s を openssl コマンドで処理してみる(下調べ)</a><ul> <li><a href="#環境">環境</a></li> <li><a href="#証明書の有効性確認">証明書の有効性確認</a><ul> <li><a href="#補足--SSL-認証局証明書の更新">補足 : SSL 認証局証明書の更新</a></li> <li><a href="#サーバー証明書の失効を確認する">サーバー証明書の失効を確認する</a><ul> <li><a href="#OCSPリクエストによるサーバー証明書の失効確認">OCSPリクエストによるサーバー証明書の失効確認</a></li> <li><a href="#別解サーバー証明書失効リスト-CRL-を取得する">【別解】サーバー証明書失効リスト (CRL) を取得する</a></li> </ul> </li> </ul> </li> <li><a href="#送信元の確認">送信元の確認</a></li> <li><a href="#メール内容の改ざん有無の確認">メール内容の改ざん有無の確認</a><ul> <li><a href="#改ざん無し">改ざん無し</a></li> <li><a href="#メッセージボディの改ざん有り">メッセージボディの改ざん有り</a></li> <li><a href="#電子証明書の期限切れ">電子証明書の期限切れ</a></li> </ul> </li> <li><a href="#SMIME証明書チェックスクリプトを作成">S/MIME証明書チェックスクリプトを作成</a><ul> <li><a href="#Gmail-からメールをローカルに保存する">Gmail からメールをローカルに保存する</a></li> <li><a href="#改ざん確認">改ざん確認</a></li> <li><a href="#emlファイルよりSMIME証明書部分を切り出す">emlファイルよりS/MIME証明書部分を切り出す</a><ul> <li><a href="#切り出した-SMIME証明書の確認">切り出した S/MIME証明書の確認</a></li> </ul> </li> <li><a href="#証明書の-Verify-を行う-一部のSMIME証明書などサーバー証明書中間証明書などを逆順に記載しているものにも対応">証明書の Verify を行う (一部のS/MIME証明書など、サーバー証明書・中間証明書などを逆順に記載しているものにも対応)</a><ul> <li><a href="#補足--証明書の中身を見てみる">補足 : 証明書の中身を見てみる</a></li> </ul> </li> <li><a href="#OCSPリクエストによるサーバー証明書の失効確認-1">OCSPリクエストによるサーバー証明書の失効確認</a></li> <li><a href="#送信元の確認-1">送信元の確認</a></li> </ul> </li> <li><a href="#SMIME証明書チェックスクリプト完成版">S/MIME証明書チェックスクリプト(完成版)</a><ul> <li><a href="#例成功">例:成功</a></li> <li><a href="#例改ざんされている">例:改ざんされている</a></li> <li><a href="#例証明書が古い">例:証明書が古い</a></li> <li><a href="#例送信者が署名者と違う">例:送信者が署名者と違う</a></li> </ul> </li> </ul> </li> <li><a href="#所感">所感</a></li> <li><a href="#追記--20160404-">追記 ( 2016/04/04 )</a></li> </ul> <h2 id="背景">背景</h2> <p>表題の件に関係し、銀行から送られてくるメールの添付ファイル <code>smime.p7s</code> にいつも疑問を感じていたため、何であるか調査を行い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> 上にて適切な処理ができるか確認しました。</p> <h2 id="smimep7s-とは">smime.p7s とは</h2> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>を扱えない電子メールソフトもあるため、"smime.p7m"という名の本文や、"smime.p7s"という名の添付ファイルに困惑する人が多い。<br/> <br /><cite><a href="https://ja.wikipedia.org/wiki/S/MIME">S/MIME - Wikipedia</a></cite></p></blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a> に対応していないメーラでは、<strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書を添付ファイルとして表示</strong>しているのですね。</p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>(エスマイム、Secure / Multipurpose Internet Mail Extensions)とは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/MIME">MIME</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%D7%A5%BB%A5%EB%B2%BD">カプセル化</a>した電子メールの公開鍵方式による暗号化とデジタル署名に関する標準規格である。<br/> <br /><cite><a href="https://ja.wikipedia.org/wiki/S/MIME">S/MIME - Wikipedia</a></cite></p></blockquote> <p>"公開鍵方式による" ということで、openssl<a href="#f-1f51a231" name="fn-1f51a231" title="https://www.openssl.org/">*1</a>コマンドでどうにかできそうです。</p> <h2 id="smimep7s-を-openssl-コマンドで処理してみる下調べ">smime.p7s を openssl コマンドで処理してみる(下調べ)</h2> <p>自分は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> を使っているので、まずは<code>smime.p7s</code>をダウンロードして処理してみます。</p> <h3 id="環境">環境</h3> <pre class="code" data-lang="" data-unlink>$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION=&#34;Ubuntu 12.04.5 LTS&#34; $ openssl version OpenSSL 1.0.1 14 Mar 2012</pre> <h3 id="証明書の有効性確認">証明書の有効性確認</h3> <p>openssl の smime コマンドで Verify も簡単にできるかと思ったのですが、一度デコードしないといけないようです。</p> <p><a href="https://wiki.nikhef.nl/grid/How_to_handle_OpenSSL_and_not_get_hurt_using_the_CLI#Base64_to_S.2FMIME_p7s_file_to_certificate_chain"> How to handle OpenSSL and not get hurt using the CLI - GridWiki </a></p> <p><a href="http://qiita.com/kunichiko/items/12cbccaadcbf41c72735"> RSA鍵、証明書のファイルフォーマットについて - Qiita </a></p> <pre class="code" data-lang="" data-unlink>$ openssl pkcs7 -in smime.p7s -inform DER -print_certs -out /tmp/output.crt</pre> <p>そして、メールに添付された当該証明書の信頼性を、インストール済みの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EB%A1%BC%A5%C8%BE%DA%CC%C0%BD%F1">ルート証明書</a>から確認します。</p> <blockquote><p>・/usr/share/ca-certificates/ 以下にバラバラのファイルとして CA cert が置かれる<br/> ・/etc/<a class="keyword" href="http://d.hatena.ne.jp/keyword/ssl">ssl</a>/certs/ にはそのファイルへの<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>と c_rehash で生成されたファイルが置かれる<br/> ・上記のファイルを一つにまとめたもの(だと思う)が /etc/<a class="keyword" href="http://d.hatena.ne.jp/keyword/ssl">ssl</a>/certs/ca-certificates.crt に置かれる<br/> <br /><cite><a href="http://d.hatena.ne.jp/satob/20060226/p2">Debian の SSL 認証局証明書 (CA cert.) を最新に保つ - Lazy Diary @ はてな</a></cite></p></blockquote> <p><a href="http://d.hatena.ne.jp/gakeno_ueno_horyo/20120720/1342782204"> openssl コマンドでのSSL証明書の検証 - なんだそのカオは -_- </a></p> <p><a href="http://www.usupi.org/sysad/252.html"> openssl でSSL/TLSと戯れてみる - いますぐ実践! Linuxシステム管理 / Vol.252 </a></p> <pre class="code" data-lang="" data-unlink>$ openssl verify -verbose -x509_strict -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/output.crt /tmp/output.crt: OK </pre> <p>返り値チェックで、成功・失敗が分かるかと思ったのですが、error 出力でも返り値0だったりしたので、"OK" という文字列出現を確認することとしました。</p> <p>加えて、ここでエラーが発生する場合、後述するのですが一部の証明書で「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>・中間証明書などを逆順に記載しているもの」があったため、その可能性を疑ってみると良いと思います。</p> <h4 id="補足--SSL-認証局証明書の更新">補足 : <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%A7%BE%DA%B6%C9">認証局</a>証明書の更新</h4> <p>自分の場合は、NG の場合のエラーメッセージで "<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EB%A1%BC%A5%C8%BE%DA%CC%C0%BD%F1">ルート証明書</a>が古い" 的なことを言われたので(内容はコピーし忘れました…)、下記を参考に証明書を更新しました。</p> <p><a href="http://d.hatena.ne.jp/satob/20060226/p2"> Debian の SSL 認証局証明書 (CA cert.) を最新に保つ - Lazy Diary @ はてな </a></p> <pre class="code" data-lang="" data-unlink>sudo update-ca-certificates --fresh</pre> <h4 id="サーバー証明書の失効を確認する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の失効を確認する</h4> <p>下記にも記載があるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>失効リスト (CRL) を使うのは現実的ではないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>(Online Certificate Status Protocol)<a href="#f-d283afb2" name="fn-d283afb2" title="https://ja.wikipedia.org/wiki/Online_Certificate_Status_Protocol">*2</a>を使います。</p> <p><a href="http://www.atmarkit.co.jp/ait/articles/0102/23/news002.html"> PKI基礎講座(5):証明書の有効性 - @IT </a></p> <h5 id="OCSPリクエストによるサーバー証明書の失効確認"><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>リクエストによる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の失効確認</h5> <p>ここではメール送信者の証明書だけを、その上位の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C7%A7%BE%DA%B6%C9">認証局</a>に失効していないか確認します。(手順が複雑になるため、証明書パス全体の確認は行わない。)</p> <p><a href="http://d.hatena.ne.jp/blooper/20120912/1347465070"> 私が愛した openssl (PKI 編 その 2) - してみむとて </a></p> <pre class="code" data-lang="" data-unlink>$ OCSP_URI=`openssl x509 -in /tmp/output.crt -noout -text | egrep ocsp | sed -e &#34;s/.*\(http.*\)$/\1/&#34;` $ awk &#39;BEGIN{RS=&#34;&#34;;FS=&#34;\n&#34;};{a[NR]=$0}END{print a[2]}&#39; /tmp/outpu.crt &gt; /tmp/intermediate.crt $ openssl ocsp -issuer /tmp/intermediate.crt -cert /tmp/output.crt -url $OCSP_URI -resp_text -respout resp.der -no_nonce -CAfile /tmp/intermediate.crt 〜略〜 -----END CERTIFICATE----- Response verify OK /tmp/output_reverse.crt: good This Update: Mar 30 09:02:34 2016 GMT Next Update: Apr 6 09:02:34 2016 GMT</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a> 記載が無い場合は失効確認は行わない。<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>記載が無く、CRL記載だけのものは少ないと思いますし、運用してみて改修するか考えようと思います。</p> <h5 id="別解サーバー証明書失効リスト-CRL-を取得する">【別解】<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>失効リスト (CRL) を取得する</h5> <p>証明書に記載のある CRL をダウンロードし、それとの突き合わせを行います。</p> <p><a href="http://d.hatena.ne.jp/i_k_b/20100112/1263293430"> opensslによるサーバー証明書失効リスト (CRL) 確認 - IKB: 雑記帖 </a></p> <p><a href="http://blog.livedoor.jp/k_urushima/archives/875438.html"> 自堕落な技術者の日記 : OpenSSL 1.0.0 beta1 タイムスタンプ検証機能 - livedoor Blog(ブログ) </a></p> <p>メール送信者の証明書中から CRL 配布ポイントを確認・ダウンロードを行い、デジタル署名の確認に合わせて CRL との突き合わせを行なっています。</p> <pre class="code" data-lang="" data-unlink>mkdir ~/.crl pushd ~/.crl curl -O ` openssl x509 -noout -text -in output.crt | grep .crl | sed -e &#34;s/.*\(http.*\.crl\)$/\1/&#34; ` c_rehash . popd openssl verify -verbose -crl_check -x509_strict -CApath ~/.crl -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/output.crt</pre> <h3 id="送信元の確認">送信元の確認</h3> <p>メールに記載された送信元と、下記コマンド実行で出力される証明書に記載された署名者アドレスを突き合わせます。</p> <pre class="code" data-lang="" data-unlink>grep emailAddress /tmp/output.crt | sed -e &#34;s/.*emailAddress=\(.*\)/\1/&#34;</pre> <h3 id="メール内容の改ざん有無の確認">メール内容の改ざん有無の確認</h3> <p>これは下記の記事を参考にしましたが、簡単なようです。</p> <p><a href="http://ja.stackoverflow.com/questions/12616/smime-p7s%E3%81%8B%E3%82%89%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E3%82%92%E6%B1%82%E3%82%81%E3%81%9F%E3%81%84"> openssl - smime.p7sからメッセージダイジェストを求めたい - スタック・オーバーフロー </a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> で "メッセージのソースを表示" を行い、ここでは<code>gmail.eml</code>と名前をつけて保存し、下記コマンドを実施します。</p> <pre class="code" data-lang="" data-unlink>openssl smime -verify -in gmail.eml</pre> <h4 id="改ざん無し">改ざん無し</h4> <ul> <li>返り値 : 0</li> <li>標準出力 : Verification successful</li> </ul> <p>※メッセージボディの <a class="keyword" href="http://d.hatena.ne.jp/keyword/sha1">sha1</a> ハッシュを確認し改ざんを確認しているので、試しにメッセージヘッダを改ざんしても上記結果となります。</p> <h4 id="メッセージボディの改ざん有り">メッセージボディの改ざん有り</h4> <ul> <li>返り値 : 4</li> <li>標準出力 : Verification failure</li> <li>エラー出力 : 140465929549472:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest failure:pk7_doit.c:1158:</li> <li>エラー出力 : 140465929549472:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:pk7_smime.c:410:</li> </ul> <h4 id="電子証明書の期限切れ"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BE%DA%CC%C0%BD%F1">電子証明書</a>の期限切れ</h4> <ul> <li>返り値 : 4</li> <li>標準出力 : Verification failure</li> <li>エラー出力 : 139838430467744:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:pk7_smime.c:342:Verify error:certificate has expired</li> </ul> <h3 id="SMIME証明書チェックスクリプトを作成"><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書チェック<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を作成</h3> <p>これまでの内容では、<code>smime.p7s</code>を操作していましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> の "メッセージのソースを表示" からメールを保存したものは eml 形式なので、そこから<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BE%DA%CC%C0%BD%F1">電子証明書</a>をパースします。</p> <h4 id="Gmail-からメールをローカルに保存する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> からメールをローカルに保存する</h4> <p>いちいちメールを閲覧時に "メッセージのソースを表示" するのは面倒なので、メッセージのダウンロードを簡単にできるようにします。</p> <p>メールを普通に表示している時のURLを下に記します。("YYYYYYYYYYYYYYYY" はおそらくユーザ毎のメールID)</p> <pre class="code" data-lang="" data-unlink>https://mail.google.com/mail/u/0/?zx=XXXXXXXXXXXX#inbox/YYYYYYYYYYYYYYYY</pre> <p>メッセージのソースを表示した時のURLを下に記します。("ZZZZZZZZZZ" はおそらくユーザID)</p> <pre class="code" data-lang="" data-unlink>https://mail.google.com/mail/u/0/?ui=2&amp;ik=ZZZZZZZZZZ&amp;view=om&amp;th=YYYYYYYYYYYYYYYY</pre> <p>上記URL構造から、メール閲覧時に下記 <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> にてダウンロードを実施します。("ZZZZZZZZZZ" は適宜置き換えてください。)</p> <pre class="code" data-lang="" data-unlink>javascript:(function(){var str=&#34;&#34;+document.location;num=str.slice(-16); url=&#34;https://mail.google.com/mail/u/0/?ui=2&amp;ik=ZZZZZZZZZZ&amp;view=om&amp;th=&#34;+num; var a = document.createElement(&#39;a&#39;); a.href = url; a.setAttribute(&#39;download&#39;, &#34;gmail.eml&#34;); a.dispatchEvent(new CustomEvent(&#39;click&#39;)); })()</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> でのダウンロードについては、下記サイトを参考にさせていただきました。</p> <p><a href="http://qiita.com/yaegaki/items/914ced7595f86eb00afd"> javascriptからファイル保存ダイアログを出す - Qiita </a></p> <h4 id="改ざん確認">改ざん確認</h4> <p>先程のテストしたコマンドの返り値から、改ざん判定を行います。</p> <pre class="code" data-lang="" data-unlink>if `openssl smime -verify -in gmail.eml 1&gt;/dev/null` ; then echo &#39;NoPolute: OK&#39; else exit 1 fi</pre> <h4 id="emlファイルよりSMIME証明書部分を切り出す">emlファイルより<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書部分を切り出す</h4> <ol> <li>ダウンロードした eml ファイルの改行が<code>0d0a</code>なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/awk">awk</a>利用のため<code>0a</code>に変換する</li> <li>最終行(付近)の multi-part 終了を示すハイフンを含む部分を削除する</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/awk">awk</a> で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書部分を切り取る</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/BASE64">BASE64</a>デコードを実行する</li> </ol> <pre class="code" data-lang="" data-unlink>perl -pe &#39;s/\r\n/\n/&#39; gmail.eml | sed &#39;s/------.*--//g&#39; | awk &#39;BEGIN{RS=&#34;&#34;;FS=&#34;\n&#34;};{a[NR]=$0}END{print a[NR]}&#39; | base64 -d &gt; /tmp/smime.p7s</pre> <p>上記手順により添付ファイルとして見えていた<code>smime.p7s</code>と同じものが取り出せました。</p> <h5 id="切り出した-SMIME証明書の確認">切り出した <a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書の確認</h5> <p>ここでは確認として、取り出した<code>/tmp</code>配下のファイルと、ダウンロードした<code>smime.p7s</code>ファイルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%B7%A5%E5%C3%CD">ハッシュ値</a>を比較します。</p> <pre class="code" data-lang="" data-unlink>$ md5sum /tmp/smime.p7s ca49c2ed84c7d108f23bc66157766e88 /tmp/smime.p7s $ md5sum smime.p7s ca49c2ed84c7d108f23bc66157766e88 smime.p7s</pre> <p>ダウンロードした<code>smime.p7s</code>ファイルと同じものを、うまく eml ファイルから切り出せたようです。</p> <h4 id="証明書の-Verify-を行う-一部のSMIME証明書などサーバー証明書中間証明書などを逆順に記載しているものにも対応">証明書の Verify を行う (一部の<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書など、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>・中間証明書などを逆順に記載しているものにも対応)</h4> <p>いざ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の Verify を行う段になりまして、一部 <a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書で Verify が失敗する事象に出くわしました。</p> <p>これは "<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BB%B0%C9%A9%C5%EC%B5%FEUFJ">三菱東京UFJ</a>ダイレクト" さんの <a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書の場合で生じた事象だったのですが、どうも連結されている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の順番が一般的なものと逆だったようです。</p> <p><a href="http://tkuchiki.hatenablog.com/entry/2013/08/29/175759"> (ELB に)中間証明書とクロスルート証明書の連結する順番に注意 - tkuchikiの日記 </a></p> <p><a href="http://diary.bis5.net/2013/12/10/450.html"> SSLサーバー証明書に中間証明書を結合する [(全部俺)何でも Advent Calendar 2013 8日目] | maruTA(Bis5)'s Weblog – Side D:iary </a></p> <p>したがいまして、連結された<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の中の証明書を逆順にしてチェックを行うのが<code>openssl</code>的に正しいのかなと思うのですが、正順(?)の場合も合わせてチェックすることにします。</p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書のデコード</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>(中身は正順)の Verify</li> <li>連結された<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の中の証明書を逆順にする</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>(中身は逆順)の Verify</li> </ol> <pre class="code" data-lang="" data-unlink>openssl pkcs7 -in /tmp/smime.p7s -inform DER -print_certs -out /tmp/output.crt openssl verify -verbose -x509_strict -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/output.crt cat /tmp/output.crt | awk &#39;BEGIN{RS=&#34;&#34;;FS=&#34;\n&#34;};{a[NR]=$0}END{for(i=NR;i&gt;0;i--)print a[i]&#34;\n&#34;}&#39; &gt; /tmp/output_reverse.crt openssl verify -verbose -x509_strict -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/output_reverse.crt</pre> <h5 id="補足--証明書の中身を見てみる">補足 : 証明書の中身を見てみる</h5> <pre class="code" data-lang="" data-unlink>openssl x509 -text -noout -in /tmp/output.crt</pre> <h4 id="OCSPリクエストによるサーバー証明書の失効確認-1"><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>リクエストによる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%A1%BC%BE%DA%CC%C0%BD%F1">サーバー証明書</a>の失効確認</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>記載があるか確認し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCSP">OCSP</a>リクエスト結果の返り値で失効しているか判定しています。</p> <pre class="code" data-lang="" data-unlink>OCSP_URI=`openssl x509 -in /tmp/output_reverse.crt -noout -text | egrep ocsp | sed -e &#34;s/.*\(http.*\)$/\1/&#34;` if [ -n &#34;$OCSP_URI&#34; ]; then awk &#39;BEGIN{RS=&#34;&#34;;FS=&#34;\n&#34;};{a[NR]=$0}END{print a[2]}&#39; /tmp/output_reverse.crt &gt; /tmp/intermediate.crt if `openssl ocsp -issuer /tmp/intermediate.crt -cert /tmp/output_reverse.crt -url $OCSP_URI -resp_text -no_nonce -CAfile /tmp/intermediate.crt 1&gt;/dev/null` ; then echo &#39;Status : OK&#39; else echo &#39;Status : NG&#39; fi rm /tmp/intermediate.crt else echo &#39;OCSP_URI: None&#39; fi</pre> <h4 id="送信元の確認-1">送信元の確認</h4> <p>証明書に記載されたアドレスと、メールに記載された送信元を突き合わせます。</p> <pre class="code" data-lang="" data-unlink>FROM_ADDRESS=`egrep &#34;^From:&#34; $TARGET_MAIL | perl -pe &#39;s/.*?([a-zA-Z0-9!$&amp;\*\.=^\`|~#%\+\/?_{}\-]+@[a-zA-Z0-9_\-\.]+).*/$1/&#39; | perl -pe &#39;s/\r\n/\n/&#39;` CERT_ADDRESS=`grep emailAddress /tmp/output.crt | sed -e &#34;s/.*emailAddress=\(.*\)/\1/&#34; | perl -pe &#39;s/\r\n/\n/&#39;` if [ $FROM_ADDRESS = $CERT_ADDRESS ] ; then echo &#39;Address : OK&#39; else echo &#39;Address : NG&#39; echo &#34;FROM_ADDRESS = $FROM_ADDRESS&#34; echo &#34;CERT_ADDRESS = $CERT_ADDRESS&#34; exit 1 fi</pre> <h3 id="SMIME証明書チェックスクリプト完成版"><a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>証明書チェック<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>(完成版)</h3> <p><script src="https://gist.github.com/8c748ec17e4253b88a2d62aba86e1ab7.js"> </script><cite class="hatena-citation"><a href="https://gist.github.com/8c748ec17e4253b88a2d62aba86e1ab7">gist.github.com</a></cite></p> <h4 id="例成功">例:成功</h4> <pre class="code" data-lang="" data-unlink>$ smime gmail.eml Verification successful NoPolute: OK Certify : OK Response verify OK Status : OK Address : OK</pre> <h4 id="例改ざんされている">例:改ざんされている</h4> <pre class="code" data-lang="" data-unlink>$ smime gmail_replace.eml Verification failure 139750278760096:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest failure:pk7_doit.c:1158: 139750278760096:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:pk7_smime.c:410:</pre> <h4 id="例証明書が古い">例:証明書が古い</h4> <pre class="code" data-lang="" data-unlink>$ smime gmail.eml Verification failure 139844339644064:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:pk7_smime.c:342:Verify error:certificate has expired</pre> <h4 id="例送信者が署名者と違う">例:送信者が署名者と違う</h4> <pre class="code" data-lang="" data-unlink>$ smime gmail_bad_sender.eml Verification successful NoPolute: OK Certify : OK Response verify OK Status : OK Address : NG FROM_ADDRESS = notice@hogemail.ocn.ne.jp CERT_ADDRESS = notice@infomail.ocn.ne.jp</pre> <h2 id="所感">所感</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%D0%BE%DA%CC%C0%BD%F1">サーバ証明書</a>まわりの知識があまり無かったので勉強になりました。そして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>の世間での扱われ方もわかりましたし、在り方として普及が難しいのもわかりました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%E1%A1%BC%A5%EB">WEBメール</a>、つまるところブラウザからローカルの資源にアクセスするという意味でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%E1%A1%BC%A5%EB">WEBメール</a>とは相性が悪いですし、署名を<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a>サーバ上でやる場合の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%EB%CC%A9%B8%B0">秘密鍵</a>の取り扱いは…などなど。</p> <p>本件は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/MUA">MUA</a>(Mail User Agent)を利用すれば簡単に代替できるのですが<a href="#f-ea24bae0" name="fn-ea24bae0" title="http://blog.livedoor.jp/k_urushima/archives/1729954.html">*3</a>、会社ならまだしも、プライベートではどこからでもアクセスできる<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%E1%A1%BC%A5%EB">WEBメール</a>が楽なんですよね。そして、どうしてもE2E(End-to-End)で暗号化したい場合の手段では<a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a>も必要かもしれませんが、それなら今時ならメールでなくとも…という感じはありますね。</p> <p>なにはともあれ、「<code>smime.p7s</code>を見て何だろうなと思わなくて良くなり、いざという時はそれを適切に処理できるようになった」というのが、精神安定上的な意味で一番の成果ですね。</p> <h2 id="追記--20160404-">追記 ( 2016/04/04 )</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> では、タイトルの件とは別に2011年位から "送信<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>認証" は行なっているようですね。(だから <a class="keyword" href="http://d.hatena.ne.jp/keyword/S/MIME">S/MIME</a> は…)</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/DKIM">DKIM</a><a href="#f-48b4a0fc" name="fn-48b4a0fc" title="http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/">*4</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/SPF">SPF</a><a href="#f-49fd2dc5" name="fn-49fd2dc5" title="http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/">*5</a></li> </ul> <p><a href="https://support.google.com/mail/answer/180707?hl=ja"> メール認証 - Gmail ヘルプ </a></p> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a>" で <a class="keyword" href="http://d.hatena.ne.jp/keyword/DKIM">DKIM</a>+<a class="keyword" href="http://d.hatena.ne.jp/keyword/SPF">SPF</a> 設定を行い、 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a> は "送信<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>認証" チェックもできるわけですし、そもそもメールに限らず <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> サービス内 (・間) のやり取りは <a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%A4%A5%D9%A1%BC%A5%C8%A5%AF%A5%E9%A5%A6%A5%C9">プライベートクラウド</a>ともいうべき中で行われているわけでして…囲い込まれ感が凄いですね。</p> <p><a href="https://support.google.com/mail/answer/6330403?hl=ja"> 通信時のメールの暗号化(TLS) - Gmail ヘルプ </a></p> <p>社会が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> に取り込まれていくようです。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-1f51a231" name="f-1f51a231" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://www.openssl.org/">https://www.openssl.org/</a></span></p> <p class="footnote"><a href="#fn-d283afb2" name="f-d283afb2" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://ja.wikipedia.org/wiki/Online_Certificate_Status_Protocol">https://ja.wikipedia.org/wiki/Online_Certificate_Status_Protocol</a></span></p> <p class="footnote"><a href="#fn-ea24bae0" name="f-ea24bae0" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://blog.livedoor.jp/k_urushima/archives/1729954.html">http://blog.livedoor.jp/k_urushima/archives/1729954.html</a></span></p> <p class="footnote"><a href="#fn-48b4a0fc" name="f-48b4a0fc" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/">http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/</a></span></p> <p class="footnote"><a href="#fn-49fd2dc5" name="f-49fd2dc5" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/">http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/</a></span></p> </div> maijou2501 Ubuntu12.04 で "Kinict v1" + "OpenKinect" + ( ( "OpenNI1.5.7" + "NITE1.5.4" ) xor ( "PCL" ) ) の環境構築 hatenablog://entry/6653586347155915092 2016-02-06T01:15:31+09:00 2016-09-06T23:30:40+09:00 Ubuntu12.04 で "Kinict v1" を使ってみる。 <p><a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B003T9VDJQ/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B003T9VDJQ&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003T9VDJQ&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=B003T9VDJQ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#環境">環境</a></li> <li><a href="#登場する技術についての概説">登場する技術についての概説</a></li> <li><a href="#はじめにインストールのための参考サイトについて">はじめに(インストールのための参考サイトについて)</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#Kinect-v1-の動作確認を行う">"Kinect v1" の動作確認を行う</a><ul> <li><a href="#Install-on-libtisch-PPA">Install on libtisch PPA</a></li> <li><a href="#Kinect-v1-の動作確認">"Kinect v1" の動作確認</a></li> </ul> </li> <li><a href="#骨格の認識や手の追跡など行いたいので準備として-OpenNI-をインストールする">骨格の認識や手の追跡など行いたいので、準備として OpenNI をインストールする</a><ul> <li><a href="#OpenNI-のインストール">OpenNI のインストール</a></li> <li><a href="#OpenNI-の動作確認1-失敗例のエラー内容を書いたのでここは飛ばしてください">OpenNI の動作確認1 (失敗例のエラー内容を書いたので、ここは飛ばしてください)</a></li> <li><a href="#OpenNI-が-Kinect-を扱えるようにドライバのインストールを行う">OpenNI が Kinect を扱えるように、ドライバのインストールを行う</a></li> <li><a href="#OpenNI-の動作確認2-成功">OpenNI の動作確認2 (成功)</a></li> </ul> </li> <li><a href="#骨格の認識や手の追跡のためのミドルウェア-NiTE-をインストール">骨格の認識や手の追跡のためのミドルウェア NiTE をインストール</a><ul> <li><a href="#NITE-のインストール">NITE のインストール</a></li> <li><a href="#NITE-の動作確認">NITE の動作確認</a></li> </ul> </li> <li><a href="#Point-Cloud-Library-PCL-のインストール">Point Cloud Library (PCL) のインストール</a><ul> <li><a href="#インストール">インストール</a></li> <li><a href="#動作確認">動作確認</a></li> </ul> </li> </ul> </li> <li><a href="#付録失敗手順">付録(失敗手順)</a><ul> <li><a href="#OpenNI2-のインストール">OpenNI2 のインストール</a></li> <li><a href="#OpenNI2-が-Kinect-を扱えるようにドライバのインストールを行う">OpenNI2 が Kinect を扱えるように、ドライバのインストールを行う</a><ul> <li><a href="#OpenNI2-FreenectDriver-のインストール失敗">OpenNI2-FreenectDriver のインストール(失敗)</a></li> <li><a href="#libusb-1020-のインストール">"libusb-1.0.20" のインストール</a></li> <li><a href="#OpenNI2-FreenectDriver-のインストール成功">OpenNI2-FreenectDriver のインストール(成功)</a></li> </ul> </li> </ul> </li> <li><a href="#List1-ドライバのインストール状態と各ライブラリミドルウェアの動作関係Ubuntu1204Kinect-v1">List.1 ドライバのインストール状態と、各ライブラリ・ミドルウェアの動作関係("Ubuntu12.04"+"Kinect v1")</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>今更ではございますが "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" を手に入れたので、表題の環境構築を目的にセットアップを行う。<br/> 加えて、この分野の初心者の自分には各ソフトウェアの位置づけが分かりにくかったので、簡単に説明も加える。</p> <h2 id="環境">環境</h2> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/lsb-release <span class="synIdentifier">DISTRIB_ID</span>=Ubuntu <span class="synIdentifier">DISTRIB_RELEASE</span>=12.04 <span class="synIdentifier">DISTRIB_CODENAME</span>=precise <span class="synIdentifier">DISTRIB_DESCRIPTION</span>=<span class="synStatement">&quot;</span><span class="synConstant">Ubuntu 12.04.5 LTS</span><span class="synStatement">&quot;</span> $ $ uname <span class="synSpecial">-a</span> Linux calc0 3.13.0<span class="synConstant">-52</span>-generic <span class="synComment">#86~precise1-Ubuntu SMP Tue May 5 18:08:21 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux</span> $ $ lsusb | <span class="synStatement">grep</span> Xbox Bus <span class="synConstant">002</span> Device <span class="synConstant">006</span>: ID 045e:02ad Microsoft Corp. Xbox NUI Audio Bus <span class="synConstant">002</span> Device <span class="synConstant">005</span>: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor Bus <span class="synConstant">002</span> Device <span class="synConstant">007</span>: ID 045e:02ae Microsoft Corp. Xbox NUI Camera </pre> <h2 id="登場する技術についての概説">登場する技術についての概説</h2> <ul> <li>OpenKinect(ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>など複雑なことはできないが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> を手っ取り早く使えるライブラリ・ツール郡を提供)</li> <li>OpenNI(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> の映像をストリーム出力として処理するためのライブラリを提供。後述のNiTE、PCLの利用に必要)</li> <li>NITE(OpenNI を通して、骨格の認識や手の追跡などを行うための<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%C9%A5%EB%A5%A6%A5%A7%A5%A2">ミドルウェア</a>)</li> <li>Point Cloud Library(OpenNI を通して、特徴推定・平面の認識・物体検知など行う3D点群処理ライブラリ)</li> </ul> <p>ブログをまとめている時に見つけた、下記サイトも分かりやすかったです。</p> <p><a href="http://ilolio.hatenablog.com/entry/2014/05/26/233330"> 初代Kinectのドライバ関連(「Kinect for Windows SDK」,「OpenNI+NiTE」) 現状まとめ(2014年5月26日現在) - いろりおのメモ帳 </a></p> <h2 id="はじめにインストールのための参考サイトについて">はじめに(インストールのための参考サイトについて)</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> が初めて発売されてから5年も経ち、今ではそのプログラムについてもあまり話題にならなくなった位なので、情報はたくさんありました。<br/> しかし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> 自体もバージョン1 では <a class="keyword" href="http://d.hatena.ne.jp/keyword/Xbox">Xbox</a> 用、商業利用が可能なもの、そしてバージョン2、と3種類があり、さらに <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> といろいろな環境で動作を確認した情報が溢れておりました。</p> <p>ですので、読者の方でこれから <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> を試したいという奇特な方に対しては老婆心ながら、「自分の環境に近い人の記事を2,3集めてそれぞれ試してみても、何度も失敗し試行錯誤することになるよ」と、予め警鐘を鳴らしておきますね。</p> <p>自分が主に参考にしたのは、下記の2つです。あとは失敗のたびに似たようなページを参照し続けました。</p> <p><a href="http://kyutech-triathlon.blogspot.jp/2014/10/ubuntu-1404-lts-kinect-ver1-20141023.html"> 九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24) </a></p> <p><a href="https://www.kdab.com/setting-up-kinect-for-programming-in-linux-part-1/"> Setting up Kinect for programming in Linux (part 1) - KDAB </a></p> <h2 id="方法">方法</h2> <h3 id="Kinect-v1-の動作確認を行う">"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" の動作確認を行う</h3> <p>手っ取り早くハードウェアとしての動作確認をしたいので、OpenKinect<a href="#f-b181833a" name="fn-b181833a" title=" https://openkinect.org">*1</a> プロジェクトの成果物を用います。</p> <p>骨格の認識や、手の追跡など凝ったことはできませんが、カメラとしての簡単な動作確認が行えます。</p> <h4 id="Install-on-libtisch-PPA">Install on libtisch PPA</h4> <blockquote><p>An <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> launchpad ppa for Lucid(10.04), <a class="keyword" href="http://d.hatena.ne.jp/keyword/Maverick">Maverick</a> (10.10), Natty (11.04), Oneiric (11.10) and Pangolin (12.04) is available at:<br/> <a href="https://launchpad.net/~floe/+archive/libtisch">https://launchpad.net/~floe/+archive/libtisch</a><br/> to use it, open a console and execute:<br/> <br /><cite><a href="https://openkinect.org/wiki/Getting_Started#Ubuntu.2FDebian">Getting Started - OpenKinect</a></cite></p></blockquote> <p>上記記事を参考に、下記コマンドを実行した。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo add-apt-repository ppa:floe/libtisch sudo apt-get update sudo apt-get <span class="synSpecial">-y</span> install libfreenect libfreenect-dev libfreenect-demos sudo adduser <span class="synPreProc">$USER</span> video </pre> <h4 id="Kinect-v1-の動作確認">"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" の動作確認</h4> <p>準備のため、下記パッケージのインストールを実行した。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo apt-get install freeglut3 freeglut3-dev sudo apt-get install binutils-gold </pre> <p>そして、動作確認のため "glview" を実行します。<br/> 操作方法などは下記の引用内容を参考にしました。</p> <blockquote><p>○動作確認<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a>をつなぐ。<br/> サンプルプログラムで動作を確認<br/> サンプルプログラムは以下の3つ<br/> ・glview // 標準のサンプルプログラム<br/> ・cppview // glviewのcpp版<br/> ・glpclview // 距離画像の3次元表示プログラム</p> <p>&gt; glview, cppviewの操作方法<br/> w : 少し上に向ける<br/> s : 水平に向ける<br/> x : 少し下に向ける<br/> f : カメラ表示切り替え(RGB, 赤外カメラ)<br/> 1-3 : LED表示色切り替え<br/> 4-6 : LED表示色切り替え(点滅)<br/> 0 : LED消灯<br/> ESC : 終了</p> <p>&gt; glpclviewの操作方法<br/> マウスドラッグ:視点移動(回転のみ)<br/> w : 拡大<br/> s : 縮小<br/> ESC : 終了<br/> <br /><cite><a href="http://tclip.blog.fc2.com/blog-entry-102.html">Kinect ubuntu10.04にlibfreenectをインストールする - TK's HP</a></cite></p></blockquote> <p>コマンド実行によりウインドウが立ち上がり、遅延もなくリアルタイムに描画されていました。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160204/20160204235546.jpg" title="深度計測の動作確認" alt="深度計測の動作確認" /><br/> Pic.1 "glview" で "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" が動作できていること、深度を計測できていることを確認</p> <h3 id="骨格の認識や手の追跡など行いたいので準備として-OpenNI-をインストールする">骨格の認識や手の追跡など行いたいので、準備として OpenNI をインストールする</h3> <p>OpenNI<a href="#f-eb817b6d" name="fn-eb817b6d" title="https://github.com/OpenNI/OpenNI">*2</a> 自体は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> からの映像をストリーム出力として処理するためするためのものらしいです。<br/> 現状では OpenNI2<a href="#f-148f671f" name="fn-148f671f" title="https://github.com/occipital/openni2">*3</a> が最新ですが、結論を先に言うと自分の環境では "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" を認識できなかったため OpenNI をインストールして使いました。(失敗内容は最後の"付録"に記載します。)</p> <p><a href="http://opensource.srad.jp/story/14/03/04/046241/"> オープンソースのKinectドライバOpenNI、提供終了へ。Appleによる買収が影響? | スラド オープンソース </a></p> <h4 id="OpenNI-のインストール">OpenNI のインストール</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a> の README を参考にしました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> ~/git git clone https://github.com/OpenNI/OpenNI openni <span class="synStatement">cd</span> openni/Platform/Linux/CreateRedist/ ./RedistMaker <span class="synStatement">cd</span> ../Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 sudo ./install.sh </pre> <h4 id="OpenNI-の動作確認1-失敗例のエラー内容を書いたのでここは飛ばしてください">OpenNI の動作確認1 (失敗例のエラー内容を書いたので、ここは飛ばしてください)</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">pwd</span> /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 $ <span class="synStatement">cd</span> Samples/Bin/x64-Release/ $ ./NiViewer One or more of the following nodes could not be enumerated: </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> のドライバをインストールしないと、上記のようなエラーがでます。</p> <h4 id="OpenNI-が-Kinect-を扱えるようにドライバのインストールを行う">OpenNI が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> を扱えるように、ドライバのインストールを行う</h4> <p>下記記事を参考に、"synapticon/SensorKinect" のドライバを用いました。</p> <blockquote><p>③についてはパッケージの取得先を以下のように変えました。</p> <p>旧:<a href="https://github.com/avin2/SensorKinect">https://github.com/avin2/SensorKinect</a></p> <p>新:<a href="https://github.com/synapticon/SensorKinect">https://github.com/synapticon/SensorKinect</a><br/> <br /><cite><a href="http://kyutech-triathlon.blogspot.jp/2014/10/ubuntu-1404-lts-kinect-ver1-20141023.html">九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24)</a></cite></p></blockquote> <p>インストールは下記コマンドを実行しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> ~/git git clone https://github.com/synapticon/SensorKinect <span class="synStatement">cd</span> SensorKinect/Platform/Linux/CreateRedist/ ./RedistMaker <span class="synStatement">cd</span> ../Redist/Sensor-Bin-Linux-x64-v5.1.2.1/ sudo ./install.sh </pre> <h4 id="OpenNI-の動作確認2-成功">OpenNI の動作確認2 (成功)</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">pwd</span> /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 $ <span class="synStatement">cd</span> Samples/Bin/x64-Release/ $ ./NiViewer </pre> <p>下記のようにリアルタイムに映像が出力されれば成功です。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160205/20160205005738.jpg" title="OpenNI の動作確認" alt="OpenNI の動作確認" /><br/> Pic.2 "NiViewer" で "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1" からの映像を取得できていることを確認</p> <h3 id="骨格の認識や手の追跡のためのミドルウェア-NiTE-をインストール">骨格の認識や手の追跡のための<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%C9%A5%EB%A5%A6%A5%A7%A5%A2">ミドルウェア</a> NiTE をインストール</h3> <h4 id="NITE-のインストール">NITE のインストール</h4> <p><a href="https://bitbucket.org/kaorun55/openni-2.2/src/2f54272802bfd24ca32f03327fbabaf85ac4a5c4/NITE%202.2%20%CE%B1/?at=master"> kaorun55 / OpenNI 2.2 α / ソース / NITE 2.2 α — Bitbucket </a></p> <p><a href="https://code.google.com/archive/p/simple-openni/downloads"> Google Code Archive - Long-term storage for Google Code Project Hosting. </a></p> <p>自分は上記サイトより "OpenNI_NITE_Installer-Linux64-0.27.zip" をダウンロードして、下記を実行しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>unzip OpenNI_NITE_Installer-Linux64-0.27.zip sudo <span class="synStatement">mv</span> OpenNI_NITE_Installer-Linux64-0.27 /usr/<span class="synStatement">local</span>/src/ <span class="synStatement">cd</span> /usr/<span class="synStatement">local</span>/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/ </pre> <p>その後インストール前に、フリーで使えるというライセンスキーを下記記事を参考に入力しました。</p> <blockquote><p>cd ~/<a class="keyword" href="http://d.hatena.ne.jp/keyword/kinect">kinect</a>/NITE-Bin-Dev-<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>-x64-v1.5.2.21/Data</p> <p>Modify the license in the files: Sample-Scene.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>, Sample-Tracking.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>, and Sample-User.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>.</p> <p>    &lt;License vendor=”PrimeSense” key=”0KOIk2JeIBYClPWVnMoRKn5cdY4=”/&gt;</p> <p>    cd ..<br/>     sudo ./install.sh<br/> <br /><cite><a href="http://blog.ethanlim.net/2013/08/installing-openni-nite-sensorkinect-on.html">Ethan Lim: Installing OpenNI, NiTE, SensorKinect on Ubuntu 12.04</a></cite></p></blockquote> <p>そしてインストールを行います。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">pwd</span> /usr/<span class="synStatement">local</span>/src/OpenNI_NITE_Installer-Linux64-0.27/OpenNI-Bin-Dev-Linux-x64-v1.5.4.0/ $ sudo ./install.sh </pre> <h4 id="NITE-の動作確認">NITE の動作確認</h4> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> ~/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release ./Sample-NiSimpleSkeleton <span class="synStatement">cd</span> /usr/<span class="synStatement">local</span>/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/Samples/Bin/x64-Release ./Sample-PointViewer </pre> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160205/20160205234454.jpg" title="手のひらのトラッキング" alt="手のひらのトラッキング" /><br/> Pic.3 "Sample-PointViewer" で手のひらをト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>できていることを確認</p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release ./Sample-NiUserTracker </pre> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160205/20160205235330.jpg" title="骨格のトラッキング" alt="骨格のトラッキング" /><br/> Pic.4 "Sample-NiUserTracker" で骨格をト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>できていることを確認</p> <h3 id="Point-Cloud-Library-PCL-のインストール">Point Cloud Library (PCL) のインストール</h3> <p><strong>※注意※<br/> 本エントリの方法でPCLをインストールすると、新しく OpenNI がインストールされるようで、先程インストールしたOpenNI(+SensorKinect) が使えなくなるようでした。<br/> ですので私は共存させることを諦め、PCLをアンインストールし、OpenNIとSensorKinectをインストールし直しました。</strong></p> <p>PCL<a href="#f-7c6cd78c" name="fn-7c6cd78c" title="http://pointclouds.org/">*4</a> については下記サイトが一番詳しかったです。</p> <p><a href="http://derivecv.tumblr.com/post/10198738207"> 【シリーズ「PCLを触ってみよう!」第一回】3D点群処理ライブラリ「Point Cloud... | DERiVE コンピュータビジョン ブログ </a></p> <h4 id="インストール">インストール</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get update sudo apt-get install libpcl-all </pre> <h4 id="動作確認">動作確認</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>pcl_openni_viewer pcl_openni_pcd_recorder pcl_viewer usa.pcd </pre> <iframe width="560" height="315" src="https://www.youtube.com/embed/d8DUV2yWkrU?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe> <h2 id="付録失敗手順">付録(失敗手順)</h2> <h3 id="OpenNI2-のインストール">OpenNI2 のインストール</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt-get install <span class="synSpecial">-y</span> libcv-dev $ sudo apt-get install <span class="synSpecial">-y</span> libudev-dev $ sudo apt-get install <span class="synSpecial">-y</span> openjdk<span class="synConstant">-7</span>-jdk $ <span class="synStatement">mkdir</span> ~/git $ <span class="synStatement">cd</span> ~/git $ git clone https://github.com/occipital/openni2 $ <span class="synStatement">cd</span> openni2/Packaging $ python ./ReleaseVersion.py x64 $ <span class="synStatement">cd</span> OpenNI-Linux-x64-2.2/Samples/Bin $ ./SimpleViewer After initialization: SimpleViewer: Device open failed: DeviceOpen using default: no devices found </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>スが見つからないようです。</p> <h3 id="OpenNI2-が-Kinect-を扱えるようにドライバのインストールを行う">OpenNI2 が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> を扱えるように、ドライバのインストールを行う</h3> <p>OpenNI2-FreenectDriver のインストールで、OpenNI2 から <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> を認識できるという下記記事を見つけたので、インストールを試みました。</p> <p><a href="https://github.com/occipital/OpenNI2/issues/31"> DeviceOpen using default: no devices found · Issue #31 · occipital/OpenNI2 </a></p> <h4 id="OpenNI2-FreenectDriver-のインストール失敗">OpenNI2-FreenectDriver のインストール(失敗)</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">cd</span> ~/git $ git clone https://github.com/OpenKinect/libfreenect $ <span class="synStatement">cd</span> libfreenect $ <span class="synStatement">mkdir</span> build $ <span class="synStatement">cd</span> build $ cmake .. <span class="synSpecial">-DBUILD_OPENNI2_DRIVER</span><span class="synStatement">=</span>ON 〜略〜 Undefined reference to libusb_get_parent<span class="synPreProc">()</span> 〜略〜 </pre> <p>全エラー内容はコピーし忘れたのですが、"libusb >= 1.0.18" で失敗したことが分かりました。</p> <h4 id="libusb-1020-のインストール">"libusb-1.0.20" のインストール</h4> <p>下記記事を参考に、インストール作業を行いました。</p> <p><a href="http://stackoverflow.com/questions/28835794/undefined-reference-to-libusb-get-parent-compiling-freenect"> make - Undefined reference to libusb_get_parent() - compiling freenect - Stack Overflow </a></p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">cd</span> /usr/<span class="synStatement">local</span>/src wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.20/libusb-1.0.20.tar.bz2 tar <span class="synSpecial">-xvf</span> libusb-1.0.20.tar.bz2 <span class="synStatement">cd</span> libusb-1.0.18/ ./configure <span class="synSpecial">--prefix=/usr</span> <span class="synSpecial">--disable-static</span> make sudo make install sudo ln <span class="synSpecial">-s</span> /usr/lib/libusb-1.0.so /usr/lib/x86_64-linux-gnu/libusb-1.0.so </pre> <h4 id="OpenNI2-FreenectDriver-のインストール成功">OpenNI2-FreenectDriver のインストール(成功)</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo apt-get install <span class="synSpecial">-y</span> libudev-dev <span class="synStatement">cd</span> ~/git git clone https://github.com/OpenKinect/libfreenect <span class="synStatement">cd</span> libfreenect <span class="synStatement">mkdir</span> build <span class="synStatement">cd</span> build cmake .. <span class="synSpecial">-DBUILD_OPENNI2_DRIVER</span><span class="synStatement">=</span>ON make <span class="synComment">#Repository=&quot;/example/path/to/Samples/Bin/OpenNI2/Drivers/&quot;</span> cp <span class="synSpecial">-L</span> lib/OpenNI2-FreenectDriver/libFreenectDriver.so <span class="synPreProc">${Repository}</span> <span class="synComment"># ln -s lib/OpenNI2-FreenectDriver/libFreenectDriver.{so,dylib} ${Repository}</span> </pre> <p>上記、共有ライブラリの配置やリンクをおいたり試行錯誤したのですが、自分の環境では OpenNI2 を使うことはできませんでした。<br/> (そして諦めて、OpenNi をインストールし始めました、という訳です。)</p> <h2 id="List1-ドライバのインストール状態と各ライブラリミドルウェアの動作関係Ubuntu1204Kinect-v1">List.1 ドライバのインストール状態と、各ライブラリ・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%C9%A5%EB%A5%A6%A5%A7%A5%A2">ミドルウェア</a>の動作関係("Ubuntu12.04"+"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v1")</h2> <table> <thead> <tr> <th> </th> <th>OpenKinect</th> <th>OpenNI+NITE</th> <th>OpenNI2 </th> <th>PCL</th> </tr> </thead> <tbody> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a>ドライバ事前インストール無し</td> <td>o </td> <td>x </td> <td>x </td> <td>o </td> </tr> <tr> <td>avin2/SensorKinect </td> <td>o </td> <td>x </td> <td>x </td> <td>o </td> </tr> <tr> <td>synapticon/SensorKinect </td> <td>o </td> <td>o </td> <td>x </td> <td>o </td> </tr> <tr> <td>OpenNI2-FreenectDriver </td> <td>o </td> <td>x </td> <td>x(本来は動く。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> v2なら?)</td> <td>o </td> </tr> </tbody> </table> <h2 id="所感">所感</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> も値段の割にすごいハードウェアですし、OpenNI も PCL もすごいライブラリですね。</p> <p>そしてちょっと今回気付いたのは、自分の好みは "hecomi" さんの後追いが多いなーと。<br/> 意図してないのですが、何かに熱中して調べだすと "hecomi" さんの<a href="http://tips.hecomi.com/"> 凹みTips </a>に行き着くんですよね(^^;<br/> この予想だと、自分の次の興味は "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Oculus%20Rift">Oculus Rift</a>" になりそうです。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-b181833a" name="f-b181833a" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"> <a href="https://openkinect.org">https://openkinect.org</a></span></p> <p class="footnote"><a href="#fn-eb817b6d" name="f-eb817b6d" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/OpenNI/OpenNI">https://github.com/OpenNI/OpenNI</a></span></p> <p class="footnote"><a href="#fn-148f671f" name="f-148f671f" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://github.com/occipital/openni2">https://github.com/occipital/openni2</a></span></p> <p class="footnote"><a href="#fn-7c6cd78c" name="f-7c6cd78c" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://pointclouds.org/">http://pointclouds.org/</a></span></p> </div> maijou2501 はてなブログで使える Markdown 記法の "引用" 文章を、JavaScript で作成する hatenablog://entry/6653586347153301067 2016-01-17T05:49:11+09:00 2017-03-31T00:45:50+09:00 はてなブログの "引用をストック" の代わりに、 Markdown 記法の "引用" 文章を JavaScript で作成する。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160117/20160117191859.png" title="TROJ_POWELIKS" alt="TROJ_POWELIKS" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#はてなブログ謹製の-引用をストック-を利用する">はてなブログ謹製の &ldquo;引用をストック&rdquo; を利用する</a></li> <li><a href="#引用したい文章を範囲選択した後JavaScriptブックマークレット-で-Markdown-記法の引用を作成する">引用したい文章を範囲選択した後、JavaScript(ブックマークレット) で Markdown 記法の引用を作成する</a></li> <li><a href="#所感">所感</a></li> <li><a href="#おまけコード">おまけコード</a></li> </ul> <h2 id="目的">目的</h2> <p>表題の件、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>で楽に引用を行うにはどうしたらよいか迷ったので、その試行錯誤と解決法を記載する。</p> <h2 id="はてなブログ謹製の-引用をストック-を利用する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>謹製の &ldquo;引用をストック&rdquo; を利用する</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>内だと、範囲選択を行った文章を下記のように引用できる。<a href="#f-8cd5c30b" name="fn-8cd5c30b" title="http://staff.hatenablog.com/entry/2015/08/26/174500">*1</a></p> <blockquote cite="http://maijou2501.hateblo.jp/entry/2015/06/16/013936" data-uuid="6653586347153304808"><p>※ --disable-<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a> : <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%D7%A5%EC%A5%C3%A5%C8">アプレット</a>など実行できないように<a class="keyword" href="http://d.hatena.ne.jp/keyword/JAVA">JAVA</a>無効化 ※ --no-referrers : GETパラメータで重要情報をやりとりしている場合に備えて referrer 削除指定</p><cite><a href="http://maijou2501.hateblo.jp/entry/2015/06/16/013936">Chromeブラウザでのユーザ情報偽装について - heyheytower</a></cite></blockquote> <p>ちなみに貼り付けられるタグは下記です。</p> <pre class="code lang-html" data-lang="html" data-unlink><span class="synIdentifier">&lt;</span><span class="synStatement">blockquote</span><span class="synIdentifier"> </span><span class="synType">cite</span><span class="synIdentifier">=</span><span class="synConstant">&quot;http://maijou2501.hateblo.jp/entry/2015/06/16/013936&quot;</span><span class="synIdentifier"> </span><span class="synType">data</span><span class="synIdentifier">-uuid=</span><span class="synConstant">&quot;6653586347153304808&quot;</span><span class="synIdentifier">&gt;&lt;</span><span class="synStatement">p</span><span class="synIdentifier">&gt;</span>※ --disable-java : Java アプレットなど実行できないようにJAVA無効化 ※ --no-referrers : GETパラメータで重要情報をやりとりしている場合に備えて referrer 削除指定<span class="synIdentifier">&lt;/</span><span class="synStatement">p</span><span class="synIdentifier">&gt;&lt;</span><span class="synStatement">cite</span><span class="synIdentifier">&gt;&lt;</span><span class="synStatement">a</span><span class="synIdentifier"> </span><span class="synType">href</span><span class="synIdentifier">=</span><span class="synConstant">&quot;http://maijou2501.hateblo.jp/entry/2015/06/16/013936&quot;</span><span class="synIdentifier">&gt;</span><span class="synUnderlined">Chromeブラウザでのユーザ情報偽装について - heyheytower</span><span class="synIdentifier">&lt;/</span><span class="synStatement">a</span><span class="synIdentifier">&gt;&lt;/</span><span class="synStatement">cite</span><span class="synIdentifier">&gt;&lt;/</span><span class="synStatement">blockquote</span><span class="synIdentifier">&gt;</span> </pre> <p>簡単に引用できるのは良いのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> 記法で記事を書いている時の可読性が悪いですし、引用を見ると改行がうまく引用されていないようでした。<br/> (改行の件は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a>+<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>の環境由来かもしれませんが。)</p> <h2 id="引用したい文章を範囲選択した後JavaScriptブックマークレット-で-Markdown-記法の引用を作成する">引用したい文章を範囲選択した後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%A5%EC%A5%C3%A5%C8">ブックマークレット</a>) で <a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> 記法の引用を作成する</h2> <p>引用したい文章を範囲選択した後、ブラウザのコンソールから <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> のコードを実行します。</p> <p><script src="https://gist.github.com/de19b3a1d1272c40a486.js"> </script></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> コードを実行すると、下記内容のポップアップが行われます。</p> <pre class="code" data-lang="" data-unlink>&gt; ※ --disable-java : Java アプレットなど実行できないようにJAVA無効化 &gt; ※ --no-referrers : GETパラメータで重要情報をやりとりしている場合に備えて referrer 削除指定 &gt; &lt;br /&gt;&lt;cite&gt;&lt;a href=&#34;http://maijou2501.hateblo.jp/entry/2015/06/16/013936&#34;&gt;Chromeブラウザでのユーザ情報偽装について - heyheytower&lt;/a&gt;&lt;/cite&gt;</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> ならこれを &ldquo;Ctrl+c&rdquo; でコピーし<a href="#f-493d47b4" name="fn-493d47b4" title="https://gist.github.com/de19b3a1d1272c40a486">*2</a>、他のブラウザならポップアップ内容を範囲指定のうえコピーして利用します。<br/> これを本エントリ(編集方法が &ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a>モード")に貼りつけたものが下記です。</p> <blockquote><p>※ &ndash;disable-<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a> : <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%D7%A5%EC%A5%C3%A5%C8">アプレット</a>など実行できないように<a class="keyword" href="http://d.hatena.ne.jp/keyword/JAVA">JAVA</a>無効化<br/> ※ &ndash;no-referrers : GETパラメータで重要情報をやりとりしている場合に備えて referrer 削除指定<br/> <br /><cite><a href="http://maijou2501.hateblo.jp/entry/2015/06/16/013936">Chromeブラウザでのユーザ情報偽装について - heyheytower</a></cite></p></blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>謹製の &ldquo;引用をストック&rdquo; と違って、<u>リンクの一行上で改行を行なっています。</u><br/> これは見やすくするための自分の好みなので、好きに変更すると良いと思います。</p> <p>こだわりとしては、要素内容は &amp;&lt;> を文字<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%C2%C2%CE%BB%B2%BE%C8">実体参照</a>に置換しています。<br/> 属性値のURLは、取得時点で &ldquo;&amp;&lt;> が文字<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%C2%C2%CE%BB%B2%BE%C8">実体参照</a>でエスケープされていたのでそのまま利用しています。</p> <h2 id="所感">所感</h2> <p>いままで引用フォーマット作成は手作業だったので、これで引用が捗りそうです。</p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> 記法は方言がたくさんありますので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> を少し変更すれば引用フォーマットを合わせられると思いますので、広く利用いただければ幸いです。</p> <h2 id="おまけコード">おまけコード</h2> <p><strong>&ldquo;現在表示中のページの <a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> 記法のリンクを作成する <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> コード&rdquo;</strong> を共有します。</p> <p><script src="https://gist.github.com/2dc86f0c99a2301254ff.js"> </script></p> <p><ins datetime="2017-03-31T00:31:37+09:00" cite="http://milk1000cc.hatenablog.com/entry/20081219/1229670782"> (追記:2017/3/31)<a class="keyword" href="http://d.hatena.ne.jp/keyword/MSDN">MSDN</a>などのURL内に丸括弧が含まれる場合があり、URLの丸括弧をURL<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>するようにしました。<br/> しかし、下記のサイトの検証結果のようにブラウザによってURL<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>結果が<code>alert</code>ではURLデコードされた状態になるようです。 参考までに、自分の使用している<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chromium">Chromium</a>は &ldquo;バージョン 56.0.2924.76 Built on <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> , running on <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 16.04 (64-bit)&rdquo; ですがURLデコードされるようで、しかも開発者ツールでの実行ではURL<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>の状態で表示されました。<br/> なので、自分の環境では &ldquo;URLの丸括弧をURL<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>する&rdquo; は達成されませんでした… </ins></p> <p><iframe src="http://milk1000cc.hatenablog.com/embed/20081219/1229670782" title=" location.href, document.URL のエンコードがブラウザによってバラバラな件 - milk1000cc&#39;s blog" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>また、 <strong>&ldquo;現在表示中のページの <a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> 記法の脚注を作成し alert() で表示する <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> コード&rdquo;</strong> も共有しておきます。</p> <p><script src="https://gist.github.com/9303874472e5b082b33a.js"> </script></p> <p>以上。</p> <div class="footnote"> <p class="footnote"><a href="#fn-8cd5c30b" name="f-8cd5c30b" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://staff.hatenablog.com/entry/2015/08/26/174500">http://staff.hatenablog.com/entry/2015/08/26/174500</a></span></p> <p class="footnote"><a href="#fn-493d47b4" name="f-493d47b4" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://gist.github.com/de19b3a1d1272c40a486">https://gist.github.com/de19b3a1d1272c40a486</a></span></p> </div> maijou2501 Ubuntu の Markdown 入力環境のために、 AutoKey で "Shift + Enter" に "半角スペース2回 + Enter" を割り当てる。 hatenablog://entry/6653586347151964592 2016-01-07T01:18:43+09:00 2016-09-06T23:36:00+09:00 Ubuntu で "AutoKey" を使い、"Shift + Enter" に "半角スペース2回 + Enter" を割り当てる。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160107/20160107002709.jpg" title="AutoKey の設定" alt="AutoKey の設定" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#インストール使い方">インストール・使い方</a></li> <li><a href="#スクリプト-Shift--Enter-に-半角スペース2回--Enter-を登録">スクリプト "Shift + Enter" に "半角スペース2回 + Enter" を登録</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>下記引用のとおりで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> で日本入力を行うとタイピング数がかさんでしまうことが煩わしかった。</p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a>って改行(半角スペース2回)が面倒だと思ってたのですけど,<br/> SHIFT + Enterに半角スペース2回を割り当てたら幸せになりました.<br/> <cite><a href="http://sonoshou.hatenablog.jp/entry/2013/12/20/Sublime_Text_%E3%81%A7_Markdown%EF%BC%8E">sonoshouのまじめなブログ</a></cite></p></blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 環境では <a href="https://autohotkey.com/"> AutoHotkey </a>を用いて "Shift + Enter" に "半角スペース2回 + Enter" を割り当てていたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> 環境でも同様にしたかったため <a href="https://code.google.com/p/autokey/"> AutoKey </a> を導入した。</p> <h2 id="インストール使い方">インストール・使い方</h2> <p>インストール・使い方などは下記を参考にした。<br/> 使い方が分かりやすかったです。ありがとうございます。</p> <p><a href="http://www.mazn.net/blog/2012/06/03/735.html"> AutoKeyでLinuxのキーボード操作をカスタマイズ@Fedora 17 | Mazn.net </a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo apt-get <span class="synSpecial">-y</span> install autokey-qt </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%AB%C6%B0%B5%AF%C6%B0">自動起動</a>については run level 2,3,4,5 が、デフォルトで設定されていました。</p> <h2 id="スクリプト-Shift--Enter-に-半角スペース2回--Enter-を登録"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a> "Shift + Enter" に "半角スペース2回 + Enter" を登録</h2> <p>前提として、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> が ON の状態から <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> OFF に切り替えて "半角スペース2回 + Enter" を入力後 <a class="keyword" href="http://d.hatena.ne.jp/keyword/IME">IME</a> ON に戻す、という挙動を目指します。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 環境の <a class="keyword" href="http://d.hatena.ne.jp/keyword/AutoHotKey">AutoHotKey</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/Markdown">Markdown</a> の改行であれば、苦ではないためそのように設定しております。</p> <p>AutoKey ではいろいろ癖があるようで、 "Shift + Enter" を押すとそのタイピング文も分も入力されてしまうようであった。<br/> 上記に加えて <code>keyboard.send_keys("&lt;enter&gt;")</code> を用いると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/vim">vim</a> 上で挙動が変だったため使わないようした。</p> <p>最終的には "Shift + Enter" がタイプされた際に、下記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>が実行されるように登録した。</p> <p><script src="https://gist.github.com/b1674d99f5b1a1d463ce.js"> </script></p> <p>※ "J" は Record Macro 機能で取得したキーですが、 "半角/全角" キーを表しています。<br/> ※ <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/2095c1668de5410ca5a0">コチラ</a>をご利用ください。</p> <h2 id="所感">所感</h2> <p><code>.vimrc</code> などで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AD%A1%BC%A5%D0%A5%A4%A5%F3%A5%C9">キーバインド</a>を登録している訳ではないので、ブラウザ上等の他の <a class="keyword" href="http://d.hatena.ne.jp/keyword/Markdown">Markdown</a> エディタで使える点も便利です。</p> <p><a href="https://github.com/maijou2501/likana"> likana </a> と組み合わせて、とても気持ちの良い入力環境が整いつつあり、満足した結果となりました。</p> <p>以上。</p> maijou2501 創元SF短編賞アンソロジー『原色の想像力』を読んで hatenablog://entry/6653586347151407954 2016-01-04T00:43:13+09:00 2016-09-06T23:39:59+09:00 『原色の想像力』を読んだ感想です。亘星恵風 著「ママはユビキタス」が一番好きでした。 <p><a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4488739016/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4488739016&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4488739016&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4488739016" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p> <p>書名:原色の想像力(創元SF短編賞アンソロジー)<br/> 編集:大森 望 他</p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#はじめに">はじめに</a></li> <li><a href="#ママはユビキタス亘星恵風-著">「ママはユビキタス」亘星恵風 著</a><ul> <li><a href="#初版-P257">初版 P.257</a></li> <li><a href="#初版-P251-RNAに写し取られてから">初版 P.251 「RNAに写し取られてから」</a></li> <li><a href="#初版-P259-言語的意識">初版 P.259 「言語的意識」</a></li> <li><a href="#初版-P275-船内にいる宇宙人も含まれているに違いないと考えた">初版 P.275 「船内にいる宇宙人も含まれているに違いないと考えた」</a></li> <li><a href="#初版-P292-太陽は太陽系外からほとんど見えなくなっている">初版 P.292 「太陽は太陽系外からほとんど見えなくなっている」</a></li> </ul> </li> <li><a href="#盤上の夜宮内悠介-著">「盤上の夜」宮内悠介 著</a></li> <li><a href="#ぼくの手のなかでしずかに松崎有理-著">「ぼくの手のなかでしずかに」松崎有理 著</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="はじめに">はじめに</h2> <p>2010年12月24日発行から遅れること5年、"第56回 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%C0%C5%C4%B8%C5%CB%DC%A4%DE%A4%C4%A4%EA">神田古本まつり</a>" にて安く手に入ったので昨年末に読みました。</p> <p>短編賞選考作品から選んだとはいえ、少なからず編者の意向もあったと考えられ、様々なジャンルの作品が収録されております。<br/> しかしながら、私ならSF初心者の方には無難に『<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/415031098X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=415031098X&linkCode=as2&tag=maijou2501-22">日本SF短篇50 I (日本SF作家クラブ創立50周年記念アンソロジー)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=415031098X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> 』のシリーズがあるのでそちらをお勧めしますし、しかもこのアンソロジーは往年のSFファンとしては見たようなアイディアが多いので、日本のSFを追っている人向けという感慨を持ちました。</p> <p>とはいいましても面白く読めまして、自分は下記作品が好きでした。</p> <ul> <li>「ママは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E6%A5%D3%A5%AD%A5%BF%A5%B9">ユビキタス</a>」亘星恵風 著</li> <li>「盤上の夜」宮内悠介 著</li> <li>「ぼくの手のなかでしずかに」松崎有理 著</li> </ul> <h2 id="ママはユビキタス亘星恵風-著">「ママは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E6%A5%D3%A5%AD%A5%BF%A5%B9">ユビキタス</a>」亘星恵風 著</h2> <p>初版P.494で大森さんが「SFはストーリーなんて〜」と仰ってましたが自分もそのように思っており、これもそれを良い意味で地で行く、たくさんのアイディアから成り立つハードSFですね。<br/> 自分はこのアンソロジーで一番好きでした。別のアンソロジーにもあった「銀河風帆走」(宮西建礼 著)もそうでしたが、海外のハードSFを思わせるような、タイトルからは想像できない骨太な内容でした。</p> <p>商業的な意味だと考えられますが、この作品に賞が無いのはちょっと理不尽だと思います。</p> <h3 id="初版-P257">初版 P.257</h3> <p>自分は脳のニューロネットワークのデータ化からの意識のシミュレーション等はできないと考えているのですが、作者さん自身は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> で下記のように話されており、確かに作中ではスキャンの技術的内容に細かく触れており、その辺のこだわりから来ているのだなと思いました。</p> <p><a href="https://twitter.com/wataboshif"> 亘星 恵風(@wataboshif)さん | Twitter </a></p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B0%A5%EC%A5%C3%A5%B0%A1%A6%A5%A4%A1%BC%A5%AC%A5%F3">グレッグ・イーガン</a>は大好きなのですが、人間をいとも簡単にデータ化してしまっているのは、生きた丸ごとの脳に電極を刺して1つの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CB%A5%E5%A1%BC%A5%ED%A5%F3">ニューロン</a>の細胞膜を貫いてデータをとる研究で苦しんだ経験があると、納得できないのです。せめてこれぐらいは苦労してほしい。</p></blockquote> <p>データ化し時系列にシミュレーションするにしても、触感などのフィードバックはどう考えているのか、脳は成長過程において外部からの刺激が無いとうまく発達できないと考えられていることをどう考えているのか<a href="#f-2500c032" name="fn-2500c032" title="Taro Toyoizumi, Hiroyuki Miyamoto, Yoko Yazaki-Sugiyama, Nafiseh Atapour, Takao K. Hensch, and Kenneth D. Miller. "A theory of the transition to critical period plasticity: inhibitioselectivelysuppressesspontaneousactivity", Neuron, 10.1016/j.neuron.2013.07.022">*1</a>(発達過程ではないので、適切な刺激は不要と考えているか)など、自分の中では未消化でした。<br/> あと、瞬間のスキャンデータを取得している訳ではないので、その辺をどう処理しているのか。(揮発性のデータもあると考えれますし。)<br/> 短編で説明風にならないように暗示してほしいと言っているわけではなく、自分はタイムマシン的な意味でこのアイディは空想だなと判断しているだけですので、考え方の違いですが。</p> <h3 id="初版-P251-RNAに写し取られてから">初版 P.251 「<a class="keyword" href="http://d.hatena.ne.jp/keyword/RNA">RNA</a>に写し取られてから」</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/RNA">RNA</a>や生化学・生理学に注目しているのは作者の背景を考えると分かりますが、この辺からのディテイルへのこだわりはすごいと思います。<br/> すごく好きな書き方です。</p> <h3 id="初版-P259-言語的意識">初版 P.259 「言語的意識」</h3> <p>この考え方は分かりやすかったです。<br/> 読者に分かるよううまく定義がなされているなあと、作者の力量が発揮されている所だと思いました。</p> <h3 id="初版-P275-船内にいる宇宙人も含まれているに違いないと考えた">初版 P.275 「船内にいる宇宙人も含まれているに違いないと考えた」</h3> <p>イーガンの "ワンの絨毯" へのオマージュでしょうか。</p> <h3 id="初版-P292-太陽は太陽系外からほとんど見えなくなっている">初版 P.292 「太陽は太陽系外からほとんど見えなくなっている」</h3> <p>"ダイソン球" のアイディアですね。</p> <h2 id="盤上の夜宮内悠介-著">「盤上の夜」宮内悠介 著</h2> <p>勝手に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B9%C7%EE%BB%CC">森博嗣</a>さんが追い求めている抽象への憧れに近い考えがあるのでは、と思いました。<br/> かく言うのも、<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4488018157/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4488018157&linkCode=as2&tag=maijou2501-22">盤上の夜 (創元日本SF叢書)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4488018157" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> を別途読んでいたから、かもしれませんが。<br/> ということで、短編で読むのではなく、宮内悠介さんの一冊の本で読むことをおすすめします。</p> <h2 id="ぼくの手のなかでしずかに松崎有理-著">「ぼくの手のなかでしずかに」松崎有理 著</h2> <p><a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4488734030/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4488734030&linkCode=as2&tag=maijou2501-22">量子回廊 (年刊日本SF傑作選) (創元SF文庫)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4488734030" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> で「あがり」も読んでいたのですが、このアンソロジーの中で抜群に小説でした。</p> <p>選考者の山田さんも別の話で仰ってましたが、SFのアイディアを "虚しさ" などのちょっとした機微な小説らしい主題に転化させることができているところが、安心して読ませるなぁと思いました。</p> <p>でも、女性との出会いの部分は無理がありますよね。作者さんの照れ、でしょうか。</p> <h2 id="所感">所感</h2> <p>なんども引き合いに出して申し訳ないですが、「銀河風帆走」もそうなのですが日本でハードSFというと、どうしても過去のアイディアの集合になってしまうところがいつも同じだなと…(自分はすごく好きなのですが)。<br/> とは言いえ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AE%BE%BE%BA%B8%B5%FE">小松左京</a>さんのようにSFを神話や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%C5%BB%F6%B5%AD">古事記</a>などの文脈で読み取ったりと、日本SF創成期ではオリジナリティがあったはずなので、今はSF成熟期といったところなのでしょうか。<br/> また、新しいアイディアにすぐに群がって刹那的に楽しむというのも文学としてはどうなのかというところもあるので、SFのアイディア出しというところも難しいところではありますが。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%E9%A5%C3%A5%AF%A5%DB%A1%BC%A5%EB">ブラックホール</a>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%CC%BB%D2%CE%CF%B3%D8">量子力学</a>に関してもそうですね。)</p> <p>そういった意味では、イーガンの「<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4153350249/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4153350249&linkCode=as2&tag=maijou2501-22">クロックワーク・ロケット</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4153350249" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> 」「<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4153350125/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4153350125&linkCode=as2&tag=maijou2501-22">白熱光</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4153350125" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> 」、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DF%BE%EB%C5%E3">円城塔</a>さんの作品群などは、定理で遊んでいる作品であり、自分のなかではSFのアイディア(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DF%BE%EB%C5%E3">円城塔</a>さんはテーマがたまたまSFだっただけな気がしますが)が昇華されているなと、最近楽しく読んでいます。(デーデキントの"<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4003392418/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4003392418&linkCode=as2&tag=maijou2501-22">数について―連続性と数の本質</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4003392418" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> " 等に近いのかもしれません。)<br/> 上記を踏まえて選考者の方々も仰っていましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DF%BE%EB%C5%E3">円城塔</a>さんのような作品が少なかった、というのは自分も意外でした。<br/> もう少し真似する人が多いのかなと思ってましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DF%BE%EB%C5%E3">円城塔</a>さんがあのクオリティの作品を続々書けるというのはやはり特別なのだなと思いました。</p> <p>以上。</p> <div class="footnote"> <p class="footnote"><a href="#fn-2500c032" name="f-2500c032" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">Taro Toyoizumi, Hiroyuki Miyamoto, Yoko Yazaki-Sugiyama, Nafiseh Atapour, Takao K. Hensch, and Kenneth D. Miller. "A theory of the transition to critical period plasticity: inhibitioselectivelysuppressesspontaneousactivity", Neuron, 10.1016/j.neuron.2013.07.022</span></p> </div> maijou2501 『セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-』を読んで hatenablog://entry/6653586347150783837 2015-12-31T02:34:49+09:00 2016-09-06T23:43:06+09:00 『セキュリティコンテストチャレンジブック』を読んだ感想です。CTF で使われる技術がどんなものかイメージできました。 <p><a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4839956480/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4839956480&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4839956480&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4839956480" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br/> 書名:『セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-』<br/> 著者:碓井 利宣 他</p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#はじめに">はじめに</a></li> <li><a href="#Part-1-バイナリ解析">Part 1 「バイナリ解析」</a><ul> <li><a href="#備忘録">備忘録</a></li> </ul> </li> <li><a href="#Part-2-pwn">Part 2 「pwn」</a><ul> <li><a href="#備忘録-1">備忘録</a></li> </ul> </li> <li><a href="#書籍記載誤りの可能性">書籍記載誤りの可能性</a><ul> <li><a href="#第2刷-P67">第2刷 P.67</a></li> <li><a href="#第2刷-P72">第2刷 P.72</a></li> <li><a href="#第2刷-P74">第2刷 P.74</a></li> <li><a href="#第2刷-P117">第2刷 P.117</a></li> </ul> </li> <li><a href="#所感">所感</a></li> </ul> <h2 id="はじめに">はじめに</h2> <p>CTF(Capture The Flag) の話は知人からよく聞くのですが、実際どういったものか知らなかったのでこの書籍を手に取りました。<br/> 結果的には、読んだ範囲では CTF に初めて触れる人にはすごく良い本なのでは、と感想を持ちました。</p> <p>シェルコードなどにも興味があり、書籍前半の知識は自分に足りないものだったので、下記 Part を読んだ。</p> <ul> <li>Part 0 「イントロダクション」</li> <li>Part 1 「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>ナリ解析」</li> <li>Part 2 「pwn」</li> </ul> <h2 id="Part-1-バイナリ解析">Part 1 「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>ナリ解析」</h2> <p><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> 環境共に CTF で標準的に使われるツールの説明、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> の日常使いの範囲では触れることのない下記コマンド郡の使い方について、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%BB%A5%F3%A5%D6%A5%EA%B8%C0%B8%EC">アセンブリ言語</a>の基礎について、すごく分かりやすかったです。</p> <ul> <li>file</li> <li>ltrace</li> <li>strace</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/gdb">gdb</a></li> </ul> <p>※ トレーサ・デバッガの使い方は、日常的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>されている方などでは常識なのでしょうが。</p> <p>加えて、この Part だけではないですが上級者がよく利用しているツール郡に触れている点も、脱初心者の勉強には役に立つのではと思いました。<br/> <a href="https://github.com/radare/radare2"> radare/radare2 · GitHub </a></p> <p>(あと今更で恥ずかしいことですが、実行ファイル内のシンボル情報の strip に関して、リリースビルドと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>ビルドって考えてなかったなと気づきました…)</p> <h3 id="備忘録">備忘録</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>ghex objdump <span class="synSpecial">-d</span> <span class="synSpecial">-M</span> intel a.out rasm2 <span class="synSpecial">-d</span> <span class="synConstant">9090</span> <span class="synComment">#nop nop</span> </pre> <h2 id="Part-2-pwn">Part 2 「pwn」</h2> <p>こちらも標準的なツール郡の説明が分かりやすかったですし、pwn(シェル奪取等) の流れも理解しやすかったです。</p> <p><a href="https://github.com/0vercl0k/rp"> 0vercl0k/rp · GitHub </a><br/> <a href="https://github.com/longld/peda"> longld/peda · GitHub </a><br/> <a href="https://github.com/slimm609/checksec.sh"> slimm609/checksec.sh · GitHub </a></p> <p>"2.2.2 実行ファイルのセキュリティ機構の確認" については、自分が知らないだけで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>がセキュリティに関して良きに計らってくれていたのですね。<a href="#f-a55e9e7f" name="fn-a55e9e7f" title="http://pwn.hatenadiary.jp/entry/2015/12/05/195316">*1</a>(RELRO<a href="#f-d431fdcc" name="fn-d431fdcc" title="http://d.hatena.ne.jp/yupo5656/20060618/p1">*2</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSP">SSP</a><a href="#f-5d940a2c" name="fn-5d940a2c" title="http://saitoh.hatenablog.jp/entry/2014/08/24/223531">*3</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NX">NX</a> bit、ASLR<a href="#f-d8de8b9b" name="fn-d8de8b9b" title="https://docs.oracle.com/cd/E39368_01/b72804/ol_kernel_sec.html">*4</a>、PIE<a href="#f-e9f662a7" name="fn-e9f662a7" title="http://0xcc.net/blog/archives/000109.html">*5</a>)</p> <p>ret2plt や ret2libc の後に popret gadget の処理を行ったり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NX">NX</a> bit が有効な場合に ROP を用いて攻撃を行う、"2.5.2 ASLRの回避" では表題の件を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%E2%A5%EA%A5%EA%A1%BC%A5%AF">メモリリーク</a>から回避し ROP の処理を行うエクスプロイトコードを作成する等、ここまでできたら楽しいでしょうね。</p> <h3 id="備忘録-1">備忘録</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>checksec.sh <span class="synSpecial">--file</span> a.out rp <span class="synSpecial">-f</span> a.out <span class="synSpecial">-r</span> <span class="synConstant">1</span> | <span class="synStatement">grep</span> pop readelf <span class="synSpecial">-r</span> got-file readelf <span class="synSpecial">-s</span> a.out | <span class="synStatement">grep</span> global-variation sudo sysctl <span class="synSpecial">-w</span> <span class="synIdentifier">kernel.randomize_va_space</span>=<span class="synConstant">0</span> <span class="synComment">#ASLR off</span> sudo sysctl <span class="synSpecial">-w</span> <span class="synIdentifier">kernel.randomize_va_space</span>=<span class="synConstant">2</span> <span class="synComment">#ASLR on</span> ldd a.out <span class="synComment">#check shared-library memery address</span> nm <span class="synSpecial">-D</span> /lib/i386-linux-gnu/libc.so.6 | <span class="synStatement">grep</span> system strings <span class="synSpecial">-tx</span> /lib/i386-linux-gnu/libc.so.6 | <span class="synStatement">grep</span> /bin/sh objdump <span class="synSpecial">-d</span> <span class="synSpecial">-M</span> intel <span class="synSpecial">-j</span> .plt <span class="synSpecial">--no</span> a.out </pre> <h2 id="書籍記載誤りの可能性">書籍記載誤りの可能性</h2> <h3 id="第2刷-P67">第2刷 P.67</h3> <p>減産 -> 減算</p> <h3 id="第2刷-P72">第2刷 P.72</h3> <p>関数 "loc_1" の中で、カウンタ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%B8%A5%B9%A5%BF">レジスタ</a> "ecx" を初期化しているので、無限ループに陥る気がします。</p> <pre class="code lang-asm" data-lang="asm" data-unlink><span class="synIdentifier">xor</span> <span class="synIdentifier">ecx</span>, <span class="synIdentifier">ecx</span> </pre> <h3 id="第2刷-P74">第2刷 P.74</h3> <p>Func -> Func2</p> <h3 id="第2刷-P117">第2刷 P.117</h3> <p>ステップ4 -> ステップ5</p> <h2 id="所感">所感</h2> <p>CTF に挑戦したいという人は、これを足がかりに更に進んだ内容に挑戦できるのではないでしょうか。<br/> 基礎知識の説明・ツールの使い方について説明が多い気もしましたが、これから何を行うか、何を調べたくて何を使うかという流れになっているので、初学者には必要な内容が網羅されていると思われるのでむしろ良い点だと思います。</p> <p>少し畑違いの自分ではありましたが、ITセキュリティ技術者の基礎知識として知っておく必要がある内容を理解しやすく楽しく読めました。良書だと思います。</p> <p>CTF ではスピードが求められるでしょうから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>ナリ解析や pwn に関しては数をこなして繰り返しの練習が必要なのだろうなと思いました。身体で手順を覚える、ような。<br/> WEB周りに関しても手作業の試行錯誤が必要なことが多いですし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/XSS">XSS</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL%A5%A4%A5%F3%A5%B8%A5%A7%A5%AF%A5%B7%A5%E7%A5%F3">SQLインジェクション</a>なんかも自動化で当たりをつけてからは、やはり手作業でどこまで実行できるのかなど、CTF に関してその実は泥臭い作業で、やはり好きな人でないとできないよなぁ、と思いました (個人的には CTF に仕事のような作業を感じてしまいましたので、向かないのかもしれません。)</p> <p>また、話に聞くとメモリ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%F3">ダン</a>プの問題もあったり、暗号に関する知識が必要であったり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%EB%A5%B7%A5%B9%A5%C6%A5%E0">ファイルシステム</a>の知識(デジタル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A9%A5%EC%A5%F3%A5%B8%A5%C3%A5%AF">フォレンジック</a>的な知識)が必要だったりと、チーム戦なら広範囲の知識をカバーできるメンバを揃えるのも大変そうですし、前提知識が皆違いますからコミュニケーションも大変そうですね。<br/> 実際に CTF に参加されている方々は知識もさることながら、行動力も本当にすごいと思います。</p> <p>以上。</p> <div class="footnote"> <p class="footnote"><a href="#fn-a55e9e7f" name="f-a55e9e7f" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://pwn.hatenadiary.jp/entry/2015/12/05/195316">http://pwn.hatenadiary.jp/entry/2015/12/05/195316</a></span></p> <p class="footnote"><a href="#fn-d431fdcc" name="f-d431fdcc" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://d.hatena.ne.jp/yupo5656/20060618/p1">http://d.hatena.ne.jp/yupo5656/20060618/p1</a></span></p> <p class="footnote"><a href="#fn-5d940a2c" name="f-5d940a2c" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://saitoh.hatenablog.jp/entry/2014/08/24/223531">http://saitoh.hatenablog.jp/entry/2014/08/24/223531</a></span></p> <p class="footnote"><a href="#fn-d8de8b9b" name="f-d8de8b9b" class="footnote-number">*4</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://docs.oracle.com/cd/E39368_01/b72804/ol_kernel_sec.html">https://docs.oracle.com/cd/E39368_01/b72804/ol_kernel_sec.html</a></span></p> <p class="footnote"><a href="#fn-e9f662a7" name="f-e9f662a7" class="footnote-number">*5</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://0xcc.net/blog/archives/000109.html">http://0xcc.net/blog/archives/000109.html</a></span></p> </div> maijou2501 Ubuntu12.04 でデジカメ写真編集 Vol.3 (Exif 情報の取り扱い) hatenablog://entry/6653458415125401768 2015-10-22T00:56:36+09:00 2016-09-06T23:47:04+09:00 「デジカメのRAWファイルを Ubuntu 上で写真編集できるようにする」の Vol.3 です。Vol.3 は、写真のExif情報の取り扱いについての記事です。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151022/20151022005433.png" title="GIMP 2.8" alt="GIMP 2.8" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#経緯">経緯</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#コマンドラインツールで-Exif情報を編集できるものを探す">コマンドラインツールで Exif情報を編集できるものを探す</a></li> <li><a href="#RAWファイルからExif情報をJPEG画像にコピーする">RAWファイルからExif情報をJPEG画像にコピーする</a><ul> <li><a href="#オリジナルのExif情報をコピーする">オリジナルのExif情報をコピーする</a></li> </ul> </li> <li><a href="#Exif編集ツールで特定項目の削除追加を行う">Exif編集ツールで特定項目の削除・追加を行う</a><ul> <li><a href="#GPS-情報を付加する">GPS 情報を付加する</a></li> <li><a href="#編集に利用したソフトウェア情報を付加する">編集に利用したソフトウェア情報を付加する</a></li> <li><a href="#撮影者情報を付加する">撮影者情報を付加する</a></li> <li><a href="#写真の回転情報を編集削除する">写真の回転情報を編集・削除する</a></li> <li><a href="#カメラのシリアルを削除する">カメラのシリアルを削除する</a></li> <li><a href="#圧縮されていたというExif情報を削除する">圧縮されていたというExif情報を削除する</a></li> </ul> </li> </ul> </li> <li><a href="#蛇足ピンぼけ画像を修整するプラグインrefocus-it-のインストール">蛇足(ピンぼけ画像を修整するプラグイン"refocus-it" のインストール)</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Olympus">Olympus</a> STYLUS-1s" を購入したため、それで撮影した RAWファイルの画像を Ubuntu12.04 にて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> と同様な写真編集を行えるよう、Vol.2 まで作業を行ってきた。</p> <p>Vol.3 の本エントリーでは、Vol.2 までの作業で写真の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報が失われてしまっていたため、その対処法について記載する。</p> <h2 id="経緯">経緯</h2> <p>Vol.2 までの手順で、UFRaw を用いてRAWファイルから<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像現像を行い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> による編集を経て、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像を作成しました。</p> <p>そして、いざ <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を見てみるとカメラ情報などが無く、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で出力した <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像には <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報が埋め込まれないという問題に突き当たったのでした。</p> <p><a href="http://www.gimpusers.com/forums/gimp-user/16200-gimp-doesn-t-saveexif-on-tiff-files">GIMP doesn't saveEXIF on TIFF files (2014) — Help &amp; Support — gimpusers.com</a></p> <h2 id="方法">方法</h2> <p>下記の手順で解決を図りました。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>ツールで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を編集できるものを探す</li> <li>RAWファイルから<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像にコピーする</li> </ul> <p>しかし、上記では<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報が完全でないことがわかったので、最終的には下記方法を用いました。</p> <p><b></p> <ul> <li>撮影の際に "RAWファイル+<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(低品質)" を保存するようにし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(低品質)から編集後の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(高品質)に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーする</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>編集ツールで特定項目の削除・追加を行う</li> </ul> <p></b></p> <h3 id="コマンドラインツールで-Exif情報を編集できるものを探す"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>ツールで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を編集できるものを探す</h3> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fameblo.jp%2Fitboy%2Fentry-11044330647.html" title="『画像からExifの読取り削除するコマンドあれこれ』" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>上記ページを参考に、下記に機能をまとめました。</p> <p>Table.1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を編集できるツールと、それぞれの機能の互換を示す</p> <table> <thead> <tr> <th> ツール </th> <th> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報表示(詳細) </th> <th> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報コピー </th> <th> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報削除 </th> </tr> </thead> <tbody> <tr> <td> jhead </td> <td> jhead -v disp.jpg </td> <td> jhead -te from.jpg to.jpg </td> <td> jhead -purejpg delete.jpg </td> </tr> <tr> <td> <a class="keyword" href="http://d.hatena.ne.jp/keyword/ImageMagick">ImageMagick</a> </td> <td> identify -verbose disp.jpg </td> <td> convert from.jpg to.jpg </td> <td> mogrify -strip delete.jpg </td> </tr> <tr> <td> exiftool </td> <td> exiftool disp.jpg </td> <td> exiftool -tagsfromfile -all:all from.jpg to.jpg </td> <td> exiftool -all= delete.jpg </td> </tr> </tbody> </table> <p>上記のなかでも <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a> 情報編集のナレッジが多かった "exiftool" を使っていくことにしました。</p> <p>また "exiftool" では、<b> "RAWファイルから<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像にコピーする" </b>ことができるのも特記事項です。(本エントリ後半で、自分の目的では使えないことが分かるのですが…)</p> <h3 id="RAWファイルからExif情報をJPEG画像にコピーする">RAWファイルから<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像にコピーする</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-tagsfromfile</span> ../PA040515.ORF <span class="synSpecial">-all</span>:all <span class="synSpecial">-overwrite_original</span> PA040515.jpg Warning: MakerNotes too large to write <span class="synError">in</span> JPEG segment - PA040477.jpg <span class="synConstant">1</span> image files updated $ exiftool ../PA040477.ORF | wc <span class="synConstant">199</span> <span class="synConstant">1139</span> <span class="synConstant">8851</span> $ exiftool ./PA040477.jpg | wc <span class="synConstant">76</span> <span class="synConstant">376</span> <span class="synConstant">3384</span> </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を全てコピーしたはずですが、120項目程少ないです。</p> <p>明らかに "Warning: MakerNotes too large〜" が原因で、しかも小手先では治らなさそうです。<a href="#f-eecb00f4" name="fn-eecb00f4" title=" http://130.15.24.88/exiftool/forum/index.php?topic=2990.0 ">*1</a></p> <p>試しに <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で RAWファイルから <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像現像を行い、その<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を見てみました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool ../PA040477.jpg | wc <span class="synConstant">67</span> <span class="synConstant">314</span> <span class="synConstant">2964</span> </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> の UFRaw を経ている時点で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a> 情報が消えているみたいです。</p> <p>RAWファイルからどうこうしようというのは諦めて、<b>撮影時にRAWファイル と一緒に "<a class="keyword" href="http://d.hatena.ne.jp/keyword/EXIF">EXIF</a>情報の付加された <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像" を保存するようにし、それから編集済みの<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーする</b>ことにします。</p> <h4 id="オリジナルのExif情報をコピーする">オリジナルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーする</h4> <p>撮影の際に "RAWファイル+<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(低品質)" を保存するようにし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(低品質)から編集後の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(高品質)に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーする</p> <p>Table.2 登場するファイルの説明</p> <table> <thead> <tr> <th>種類 </th> <th>ファイル </th> </tr> </thead> <tbody> <tr> <td>撮影時に保存したRAWファイル </td> <td> original.ORF</td> </tr> <tr> <td>撮影時に保存した<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像 </td> <td> original.JPG </td> </tr> <tr> <td>RAWファイルから現像し編集を進めた画像 </td> <td> modify.jpg </td> </tr> </tbody> </table> <p>始めに全ての<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報数を確認し、失敗する<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>コピーを試しています。<br/> その後、撮影時に保存した<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像から、編集を終えた<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーしています。</p> <pre class="code" data-lang="" data-unlink>$ exiftool original.ORF | wc 199 1139 8846 $ exiftool original.JPG | wc 186 1016 8133 $ exiftool modify.jpg | wc 70 342 3096 $ exiftool -tagsfromfile original.ORF -all:all -overwrite_original modify.jpg Warning: MakerNotes too large to write in JPEG segment - modify.jpg 1 image files updated $ exiftool modify.JPG | wc 84 402 3736 $ exiftool -tagsfromfile original.JPG -all:all -overwrite_original modify.jpg 1 image files updated $ exiftool modify.jpg | wc 191 1037 8344</pre> <p>数はぴったり合いませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>内容として問題なさそうでした。</p> <h3 id="Exif編集ツールで特定項目の削除追加を行う"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>編集ツールで特定項目の削除・追加を行う</h3> <p>下記サイト郡を参考にして、exiftool によって編集を進めました。</p> <p><a href="http://highearthorbit.com/exiftool-is-easy-to-use/">Exiftool is easy to use :: High Earth Orbit</a></p> <p><a href="http://ninedegreesbelow.com/photography/exiftool-commands.html">ExifTool example commands</a></p> <p><a href="http://kokufu.blogspot.jp/2010/12/exiftool_04.html">穀風: ExifTool.exe の簡単な使い方 - 編集編</a></p> <h4 id="GPS-情報を付加する"><a class="keyword" href="http://d.hatena.ne.jp/keyword/GPS">GPS</a> 情報を付加する</h4> <p>下記では <a class="keyword" href="http://d.hatena.ne.jp/keyword/wikipedia">wikipedia</a> で調べた、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%E9%CD%D5%BB%D4%C6%B0%CA%AA%B8%F8%B1%E0">千葉市動物公園</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPS">GPS</a>情報を付加しました。<a href="#f-bbdee4a3" name="fn-bbdee4a3" title="https://tools.wmflabs.org/geohack/geohack.php?language=ja&amp;pagename=%E5%8D%83%E8%91%89%E5%B8%82%E5%8B%95%E7%89%A9%E5%85%AC%E5%9C%92&amp;params=35_38_40_N_140_7_31.8_E_type:landmark_region:JP">*2</a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-gps</span>:<span class="synIdentifier">GPSLatitude</span>=<span class="synStatement">&quot;</span><span class="synConstant">35,38,40</span><span class="synStatement">&quot;</span> <span class="synSpecial">-gps</span>:<span class="synIdentifier">GPSLatitudeRef</span>=<span class="synStatement">&quot;</span><span class="synConstant">N</span><span class="synStatement">&quot;</span> <span class="synSpecial">-gps</span>:<span class="synIdentifier">GPSLongitude</span>=<span class="synStatement">&quot;</span><span class="synConstant">140,7,31.8</span><span class="synStatement">&quot;</span> <span class="synSpecial">-gps</span>:<span class="synIdentifier">GPSLongitudeRef</span>=<span class="synStatement">&quot;</span><span class="synConstant">E</span><span class="synStatement">&quot;</span> <span class="synSpecial">-overwrite_original</span> add.jpg <span class="synConstant">1</span> image files updated </pre> <p>ちなみに <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a> タグについては、マニュアルを見ると良いです。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ man Image::ExifTool::TagNames </pre> <h4 id="編集に利用したソフトウェア情報を付加する">編集に利用したソフトウェア情報を付加する</h4> <pre class="code" data-lang="" data-unlink>$ exiftool -Software=&#34;GIMP 2.8.14&#34; -overwrite_original add.jpg 1 image files updated </pre> <h4 id="撮影者情報を付加する">撮影者情報を付加する</h4> <pre class="code" data-lang="" data-unlink>$ exiftool -Artist=&#34;name&#34; -Copyright=&#34;name?&#34; -overwrite_original add.jpg 1 image files updated </pre> <h4 id="写真の回転情報を編集削除する">写真の回転情報を編集・削除する</h4> <p>下記サイトを参考にしました。</p> <p><a href="http://kuteken.hatenablog.com/entry/2013/11/10/180802http://kuteken.hatenablog.com/entry/2013/11/10/180802"> exiftool ・ Image Magick で Exif Orientation 情報を追加・編集する - 君たちは永遠にそいつらより若い </a></p> <p>下記は上記サイトからの引用です。</p> <pre class="code" data-lang="" data-unlink>Exif定義 = exiftoolのvalue = Image Magickのvalue ---- 1 = Horizontal (normal) = top-left 2 = Mirror horizontal = top-right 3 = Rotate 180 = bottom-right 4 = Mirror vertical = bottom-left 5 = Mirror horizontal and rotate 270 CW = left-top 6 = Rotate 90 CW = right-top 7 = Mirror horizontal and rotate 90 CW = right-bottom 8 = Rotate 270 CW = left-bottom ※CW=Clock Work = 時計回り</pre> <p>今回は削除のコマンドを記載します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-Orientation</span><span class="synStatement">=</span> -overwrite_original PA040219.jpg <span class="synConstant">1</span> image files updated </pre> <h4 id="カメラのシリアルを削除する">カメラのシリアルを削除する</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-makernotes</span>:<span class="synIdentifier">SerialNumber</span>= <span class="synSpecial">-overwrite_original</span> delete.jpg <span class="synConstant">1</span> image files updated </pre> <p>またはシリアルはオリジナル画像からコピーしない。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-tagsfromfile</span> original.JPG <span class="synSpecial">-all</span>:all <span class="synSpecial">-x</span> makernotes:SerialNumber <span class="synSpecial">-overwrite_original</span> modify.jpg <span class="synConstant">1</span> image files updated </pre> <h4 id="圧縮されていたというExif情報を削除する">圧縮されていたという<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報を削除する</h4> <p>本エントリーでは未圧縮画像に、圧縮画像の <a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報をコピーしたので、この作業が必要です。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-ExifImageWidth</span><span class="synStatement">=</span> -<span class="synIdentifier">ExifImageHeight</span>= <span class="synSpecial">-overwrite_original</span> delete.jpg <span class="synConstant">1</span> image files updated </pre> <p>またはこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a>情報はオリジナル画像からコピーしない。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ exiftool <span class="synSpecial">-tagsfromfile</span> original.JPG <span class="synSpecial">-all</span>:all <span class="synSpecial">-x</span> ExifImageWidth <span class="synSpecial">-x</span> ExifImageHeight <span class="synSpecial">-overwrite_original</span> modify.jpg <span class="synConstant">1</span> image files updated </pre> <p>下記サイトを参照すると、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a> Image Width", "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Exif">Exif</a> Image Height" は元画像より小さく圧縮された場合に付加されるようです。</p> <p><a href="http://www.exiv2.org/tags.html"> Exiv2 - Image metadata library and tools </a></p> <p><a href="http://imagemagick.org/discourse-server/viewtopic.php?t=27037"> Exif Image Height[Width] values differ from Image Height[Width] values - ImageMagick </a></p> <pre class="code" data-lang="" data-unlink>Exif Image Width is tag 0xa002, &#34;PixelXDimension&#34; Exif Image Height is tag 0xa003, &#34;PixelYDimension&#34;</pre> <h2 id="蛇足ピンぼけ画像を修整するプラグインrefocus-it-のインストール">蛇足(ピンぼけ画像を修整する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>"refocus-it" のインストール)</h2> <p><a href="https://forums.ubuntulinux.jp/viewtopic.php?id=10752">Ubuntu&#x65E5;&#x672C;&#x8A9E;&#x30D5;&#x30A9;&#x30FC;&#x30E9;&#x30E0; / Ubuntu10.04&#x3078;Iterative Refocus&#xFF08;Refocus-it&#xFF09;&#x3092;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x65B9;&#x6CD5;</a></p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fd.hatena.ne.jp%2Fkadokura%2F20071009%2Fp1" title="GIMPでピンぼけ画像を修整する - みんなのIT活用術" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p>インストールは上のページを参考にしました。</p> <p><a href="http://sourceforge.net/projects/refocus-it/">Iterative refocus plug-in for GIMP download | SourceForge.net</a></p> <p>上記ページからダウンロードを行います。<br/> インストール<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ配下からの、インストール方法は下記です。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt-get <span class="synSpecial">-y</span> install libgimp2.0-dev $ tar zxvf refocus-it-2.0.0.tar.gz $ <span class="synStatement">cd</span> refocus-it-2.0.0 $ ./configure $ make $ sudo make install </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>の使用にはマシンスペック次第ですが、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Dual%20Core">Dual Core</a> 2.8GHz" でも20分位時間がかかりました。<br/> (configure オプションで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Intel">Intel</a> compiler を使うなどすると、実行速度が上がるかもしれません。)</p> <h2 id="所感">所感</h2> <p>今回編集した写真は下記にアップロードしています。</p> <p><a data-flickr-embed="true" href="https://www.flickr.com/photos/134416355@N07/albums/72157659935325001" title="2015-千葉市動物公園"><img src="https://farm1.staticflickr.com/757/21884211798_02434d2d85_h.jpg" width="1600" height="1197" alt="2015-千葉市動物公園"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B8%A5%BF%A5%EB%A5%AB%A5%E1%A5%E9">デジタルカメラ</a>初心者の勉強途中で恐縮ですが、気に入っていただけるものが少しでもあれば嬉しいです。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-eecb00f4" name="f-eecb00f4" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"> <a href="http://130.15.24.88/exiftool/forum/index.php?topic=2990.0">http://130.15.24.88/exiftool/forum/index.php?topic=2990.0</a> </span></p> <p class="footnote"><a href="#fn-bbdee4a3" name="f-bbdee4a3" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="https://tools.wmflabs.org/geohack/geohack.php?language=ja&pagename=%E5%8D%83%E8%91%89%E5%B8%82%E5%8B%95%E7%89%A9%E5%85%AC%E5%9C%92&params=35_38_40_N_140_7_31.8_E_type:landmark_region:JP">https://tools.wmflabs.org/geohack/geohack.php?language=ja&pagename=%E5%8D%83%E8%91%89%E5%B8%82%E5%8B%95%E7%89%A9%E5%85%AC%E5%9C%92&params=35_38_40_N_140_7_31.8_E_type:landmark_region:JP</a></span></p> </div> maijou2501 Ubuntu12.04 でデジカメ写真編集 Vol.2 (写真編集) hatenablog://entry/6653458415125268844 2015-10-20T22:12:15+09:00 2016-09-08T00:42:32+09:00 「デジカメのRAWファイルを Ubuntu 上で写真編集できるようにする」の Vol.2 です。Vol.2 は、GIMP の初歩的な使い方についての記事です。 <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#カラーバランスPhotoshopカラーバランスGIMP">カラーバランス(Photoshop)→カラーバランス(GIMP)</a></li> <li><a href="#レベル補正PhotoshopレベルGIMP">レベル補正(Photoshop)→レベル(GIMP)</a></li> <li><a href="#色相彩度Photoshop色相彩度GIMP">色相・彩度(Photoshop)→色相・彩度(GIMP)</a></li> <li><a href="#アンシャープマスクPhotoshopシャープGIMP">アンシャープマスク(Photoshop)→シャープ(GIMP)</a></li> <li><a href="#他の互換機能とGIMPウィンドウモード">他の互換機能とGIMPウィンドウモード</a></li> <li><a href="#TIFF画像から-JPEG画像の生成">TIFF画像から JPEG画像の生成</a></li> </ul> </li> <li><a href="#まとめと問題提議">まとめと問題提議</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Olympus">Olympus</a> STYLUS-1s" を購入したため、それで撮影した RAWファイルの画像を、Ubuntu12.04 にて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> と同様な写真編集を行えるよう環境構築を行う。</p> <p>Vol.2 の本エントリーでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> を用いて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> と同じように写真編集を行う。</p> <p>自分は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%DE%BD%F1">図書</a>館で借りた下記書籍も参考にしました。</p> <p><a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4844361155/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4844361155&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4844361155&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=4844361155" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br/> 書名:ともかくカッコイイ写真に仕上げたい! <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>で完成させる写真表現のワザ<br/> 著者:橘田龍馬</p> <h2 id="方法">方法</h2> <p>初歩的な使い方について、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>ではどの機能が互換なのか書いていく。</p> <h3 id="カラーバランスPhotoshopカラーバランスGIMP">カラーバランス(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>)→カラーバランス(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>)</h3> <p>「メニュー>色>カラーバランス」から利用する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151020/20151020205751.png" title="カラーバランス" alt="カラーバランス" /><br/> Pic.1 カラーバランスの調整</p> <h3 id="レベル補正PhotoshopレベルGIMP">レベル補正(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>)→レベル(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>)</h3> <p>「メニュー>色>レベル」から利用する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151020/20151020210136.png" title="色レベルの調整" alt="色レベルの調整" /><br/> Pic.2 色レベルの調整</p> <h3 id="色相彩度Photoshop色相彩度GIMP">色相・彩度(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>)→色相・彩度(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>)</h3> <p>「メニュー>色>色相・彩度」から利用する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151020/20151020210242.png" title="色相・輝度・彩度の調整" alt="色相・輝度・彩度の調整" /><br/> Pic.3 色相・輝度・彩度の調整</p> <h3 id="アンシャープマスクPhotoshopシャープGIMP">アンシャープマスク(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>)→シャープ(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>)</h3> <p>「メニュー>フィルタ>強調>アンシャープマスク」から利用する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151020/20151020211035.png" title="シャープの調整" alt="シャープの調整" /><br/> Pic.4 シャープの調整</p> <h3 id="他の互換機能とGIMPウィンドウモード">他の互換機能と<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>ウィンドウモード</h3> <p>当然と言えば当然なのですが、ほぼほぼ基本機能は置き換えられてます。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%F3%A5%AB%A1%BC%A5%D6">トーンカーブ</a>→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%F3%A5%AB%A1%BC%A5%D6">トーンカーブ</a></li> <li>明るさ・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>スト→明るさ・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>スト</li> <li>ぼかし(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%A6%A5%B9">ガウス</a>)→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%A6%A5%B9">ガウス</a>ぼかし</li> <li>ぼかし(移動)→モーションぼかし</li> <li>ノイズを加える→ノイズ</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB%A5%DC%A5%C3%A5%AF%A5%B9">ツールボックス</a>→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB%A5%DC%A5%C3%A5%AF%A5%B9">ツールボックス</a></li> <li>アーティスティック→芸術的効果</li> </ul> <p>使いやすくするため、下記サイトを参照して画面を "シングルウィンドウモード" に設定してみました。</p> <p><a href="http://www.lifehacker.jp/2014/04/140412gimp_photoshop.html">無料画像編集ツール『GIMP』をフォトショっぽく使ってみよう | ライフハッカー[日本版]</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151021/20151021211550.png" title="シングルウィンドウモード" alt="シングルウィンドウモード" /><br/> Pic.5 GIMP2.8 で "シングルウィンドウモード" を使ってみたところ</p> <p>これで大分使いやすくなりました。</p> <h3 id="TIFF画像から-JPEG画像の生成"><a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像から <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像の生成</h3> <p>私は最終的に "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Flickr">Flickr</a>" にアップロードするので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像を <a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像に変換します。</p> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Flickr">Flickr</a>" は <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像もアップロードできますが、サイトで自動的に高圧縮<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像に変換されるようなので、自分で低圧縮<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像にします。<a href="#f-ddac32be" name="fn-ddac32be" title="http://shiology.com/shiology/2010/07/2089-100728-dp2.html">*1</a></p> <p>下記設定例は<a href="http://docs.gimp.org/ja/gimp-images-out.html"> 第6章 GIMP から画像を引き出す </a>を参考にしました。</p> <ul> <li>品質 "100"( 「95以上の値は通常あまり有意義ではありません。」とのことですが、最高品質にします。)</li> <li>サブサンプリング "1x1,1x1,1x1 (最高品位): (4:4:4)"</li> <li>DCT 変換方法 "<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%E2%C6%B0%BE%AE%BF%F4">浮動小数</a>"</li> </ul> <p>Table.1 各ファイル形式におけるサイズ比較</p> <table> <thead> <tr> <th>ファイル形式 </th> <th>サイズ[MB]</th> </tr> </thead> <tbody> <tr> <td>RAWファイル</td> <td>11 </td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像 </td> <td>36 </td> </tr> <tr> <td><a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像 </td> <td>19 </td> </tr> </tbody> </table> <h2 id="まとめと問題提議">まとめと問題提議</h2> <p>上記手順で、<b>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> を用いて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> と同じように写真編集を行う"</b> は達成で、RAWファイルから<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像現像を行い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> による編集を経て、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像に至りました。</p> <p>しかし、ここで問題が…<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で出力した<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/EXIF">EXIF</a>情報が埋め込まれていないようなのです。<a href="#f-d93ef7f4" name="fn-d93ef7f4" title="http://www.gimpusers.com/forums/gimp-user/16200-gimp-doesn-t-saveexif-on-tiff-files">*2</a></p> <p>これは次回のエントリーにて対策を行います。</p> <h2 id="所感">所感</h2> <p>写真編集ですが、フレームに対象をバランス良く捉えればトリミングは必要無いですし、光量・露出が適切なら<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>スト調整もあまり必要ない気がします。<br/> ぼかしも同様に、前景・後景のぼかしは写真編集である程度加工もできますが、撮影距離と絞りで調整できるようにこのカメラで経験を積まないとですね。<br/> 撮る時に様々な面で意識しないといけませんね。</p> <p>"色相・彩度" の調整は劇的なので、自分が見た時のイメージに近づける以上の効果は加えないよう気をつけています。</p> <p>以上</p> <div class="footnote"> <p class="footnote"><a href="#fn-ddac32be" name="f-ddac32be" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://shiology.com/shiology/2010/07/2089-100728-dp2.html">http://shiology.com/shiology/2010/07/2089-100728-dp2.html</a></span></p> <p class="footnote"><a href="#fn-d93ef7f4" name="f-d93ef7f4" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.gimpusers.com/forums/gimp-user/16200-gimp-doesn-t-saveexif-on-tiff-files">http://www.gimpusers.com/forums/gimp-user/16200-gimp-doesn-t-saveexif-on-tiff-files</a></span></p> </div> maijou2501 Ubuntu12.04 でデジカメ写真編集 Vol.1 (環境準備) hatenablog://entry/6653458415125066317 2015-10-20T00:41:31+09:00 2016-09-08T00:42:16+09:00 「デジカメのRAWファイルを Ubuntu 上で写真編集できるようにする」の Vol.1 です。Vol.1 は、GIMP を用いてRAWファイルを正しい色で扱えるようにするところまで設定を行います。 <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#exFATファイルシステム-のSDカードをマウントできるようにする">"exFATファイルシステム" のSDカードをマウントできるようにする</a></li> <li><a href="#GIMP-で-RAWファイル編集するための準備">GIMP で RAWファイル編集するための準備</a></li> <li><a href="#RAWファイルの現像の流れShotwell-で画像確認">RAWファイルの現像の流れ(Shotwell で画像確認)</a></li> <li><a href="#RAWファイルの現像の流れUFRaw-でカラープロファイルを正しく設定する">RAWファイルの現像の流れ(UFRaw でカラープロファイルを正しく設定する)</a></li> <li><a href="#RAWファイルの現像の流れUFRaw-による-TIFF画像への現像">RAWファイルの現像の流れ(UFRaw による TIFF画像への現像)</a></li> <li><a href="#TIFF画像を正しい色で扱えるようにする">TIFF画像を正しい色で扱えるようにする</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> <li><a href="#所感">所感</a><ul> <li><a href="#16-bitチャンネルのTIFF画像を出力できるRAWファイル現像ソフト-RawTherapee2015117-追記">16-bit/チャンネルのTIFF画像を出力できるRAWファイル現像ソフト "RawTherapee"(2015/11/7 追記)</a></li> </ul> </li> </ul> <h2 id="目的">目的</h2> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Olympus">Olympus</a> STYLUS-1s" を購入したため、それで撮影した RAWファイルの画像を、Ubuntu12.04 にて <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> と同様な写真編集を行えるよう環境構築を行う。</p> <p>Vol.1 の本エントリーでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> を用いてRAWファイルを正しい色で扱えるようにするところまで設定を行う。</p> <iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=303030&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=maijou2501-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00OZ8HP2E" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> <h2 id="方法">方法</h2> <h3 id="exFATファイルシステム-のSDカードをマウントできるようにする">"<a class="keyword" href="http://d.hatena.ne.jp/keyword/exFAT">exFAT</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%EB%A5%B7%A5%B9%A5%C6%A5%E0">ファイルシステム</a>" のSDカードをマウントできるようにする</h3> <p>デジカメでSDカードをフォーマットしたのですが、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/exFAT">exFAT</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%EB%A5%B7%A5%B9%A5%C6%A5%E0">ファイルシステム</a>" を用いており、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ubuntu">ubuntu</a> 12.04 では標準サポートではないためそのままではマウントできなかった。</p> <p>そのため下記パッケージのインストールを行い、SDカードをマウントできるようにした。<a href="#f-61d3d20f" name="fn-61d3d20f" title="http://ameblo.jp/poyo2samurai/entry-11578628030.html">*1</a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo add-apt-repository ppa:relan/exfat sudo apt-get update sudo apt-get <span class="synSpecial">-y</span> install fuse-exfat exfat-utils </pre> <p>(上記コマンドでは 「公開鍵が〜」との警告がでたが、y 入力で許可して、設定を行った。)</p> <p>コマンド実行後、ファイラの <a class="keyword" href="http://d.hatena.ne.jp/keyword/nautilus">nautilus</a> からSDカードアイコンをクリックする、または mount コマンドを用いて、SDカードをマウントすることができた。</p> <h3 id="GIMP-で-RAWファイル編集するための準備"><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で RAWファイル編集するための準備</h3> <p>今回、私のデジカメでは "RAWファイル+<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像(低品質)" を保存する設定している。<br/> これは後述するRAWファイル取り扱い・現像ソフトウェアの "UFRaw" によって、<a class="keyword" href="http://d.hatena.ne.jp/keyword/EXIF">EXIF</a>情報が失われてしまうための対応策である。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/EXIF">EXIF</a>情報については別エントリーにて…)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> におけるRAWファイル現像で、参考にしたのは下記のサイトです。</p> <p><a href="http://gihyo.jp/admin/serial/01/ubuntu-recipe/0074">第74回 Ubuntuでデジタル一眼レフカメラを使う:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> がインストールされていなければ、これをインストールし、目的の <a class="keyword" href="http://d.hatena.ne.jp/keyword/gimp">gimp</a>-ufraw パッケージをインストールします。<br/> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Olympus">Olympus</a> の RAWファイルは拡張子が "ORF" で、これの現像はとりあえずできるようでしたが、完全対応しているのかは未確認です。)</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo apt-get <span class="synSpecial">-y</span> install gimp sudo apt-get <span class="synSpecial">-y</span> install gimp-ufraw </pre> <h3 id="RAWファイルの現像の流れShotwell-で画像確認">RAWファイルの現像の流れ(Shotwell で画像確認)</h3> <p>個々人で楽な手順などがあると思いますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>のパッケージで作業をやりたいという自分の考えがあったため、RAWファイルの閲覧には "Shotwell" を使った。</p> <p>このソフトは Ubuntu12.04 にデフォルトインストールされているが、RAWファイルのサムネイル画像表示ができ、クリックした時の拡大表示の際は自動で<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像へ現像を行うため、ピンぼけ確認なども簡単にできるのでこれを用いました。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019233135.png" title="Shotwellのサムネイル画像" alt="Shotwellのサムネイル画像" /><br/> Pic.1 Shotwell で画像を確認しているところ</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019231140.png" title="Shotwellの拡大表示後の確認" alt="Shotwellの拡大表示後の確認" /><br/> Pic.2 Shotwell で画像をクリックして拡大画像を見たあと、ファイラで<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPEG">JPEG</a>画像ができていることを示したところ</p> <h3 id="RAWファイルの現像の流れUFRaw-でカラープロファイルを正しく設定する">RAWファイルの現像の流れ(UFRaw でカラープロファイルを正しく設定する)</h3> <p>現像するRAWファイルが決まったら、右クリック「<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>画像エディタで開く」を選択します。<br/> または、ファイル拡張子が <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で関連付けされていれば、クリックで自動的に <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> が起動すると思います。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019232016.png" title="GIMPプラグイン &quot;UFRaw&quot;" alt="GIMPプラグイン &quot;UFRaw&quot;" /><br/> Pic.3 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a> "UFRaw" でRAWファイルを開いたところ</p> <p>ここで、簡単に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>ストの調整や画像の切り出しなどを行うのですが、そのためにはカラープロファイルを正しく設定する必要があります。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019233406.png" title="UFWaw のカラープロファイル設定" alt="UFWaw のカラープロファイル設定" /><br/> Pic.4 UFWaw のカラープロファイル設定画面</p> <p>私は下記のサイト群を一読し、カラープロファイルについて理解を深めました。</p> <ul> <li><a href="http://www.mori-soft.com/2008-08-15-01-36-37/2008-12-07-09-39-26/59-gimp6">【Gimp】『現在のカラープロファイル』について(旧:作業用色空間について)</a></li> <li><a href="http://iccii.seesaa.net/article/30711245.html">カラーマネジメントことはじめ: 晴れときどきGIMP</a></li> <li><a href="http://www.magic-object.mydns.jp/Fedora18WithGimpIccCms.html">GIMP と色管理</a></li> <li><a href="http://photo-studio9.com/color_management/">モニタの見た目とプリントの色を合わせる方法![写真カラーマネジメント] | studio9</a></li> </ul> <p>設定は Pic.4 の通りで、画像には "sRGB" を埋め込み、ディスプレイのモニタープロファイルを適用する設定を行いました。</p> <p>私のディスプレイは "LG製 M2762WS" だったので、サポートページからカラープロファイルをダウンロードしました。<a href="#f-5dff09f9" name="fn-5dff09f9" title="http://www.lg.com/jp/support-product/lg-M2762WS-PM#">*2</a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ unzip M2762WS.zip Archive: M2762WS.zip inflating: m2762ws.cat inflating: M2762WS.icm inflating: M2762WS.inf </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6">アーカイブ</a>を展開した後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> のディスプレイのモニタープロファイルに "icm ファイル"を適用しました。</p> <p>これで、他の端末が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A1%BC%A5%DE%A5%CD%A5%B8%A5%E1%A5%F3%A5%C8">カラーマネジメント</a>を行なっていれば、画像が他の端末でも同じような色味で見えることが保証できます。</p> <h3 id="RAWファイルの現像の流れUFRaw-による-TIFF画像への現像">RAWファイルの現像の流れ(UFRaw による <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像への現像)</h3> <p>本格的な写真加工は <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で行うとし、簡易的な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%C8%A5%E9">コントラ</a>ストの調整や画像の切り出しなどを UFRaw で行ったあとは、Pic.3 にある右下の "OK" をクリックして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> の編集画面に移動する。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a>の編集画面では「メニュー>ファイル>名前をつけて保存」を選択し、その後、圧縮なしの "<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像" で保存を行う。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a> 画像を選択する理由は、写真編集で画像を劣化させないためである。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019234758.png" title="GIMP にて TIFF 画像で保存" alt="GIMP にて TIFF 画像で保存" /><br/> Pic.5 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> で RAWファイルを <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a> 画像に変換するところ</p> <h3 id="TIFF画像を正しい色で扱えるようにする"><a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像を正しい色で扱えるようにする</h3> <p>はじめに <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像のカラープロファイルを「メニュー>画像>画像の情報」から確認しておく。<br/> UFRaw ではデフォルトで "sRGB" が選択されているはずであるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像上からも確認する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019235229.png" title="TIFF画像のカラープロファイルの確認" alt="TIFF画像のカラープロファイルの確認" /><br/> Pic.6 <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像に埋め込まれたカラープロファイルの確認(sRGB が確認できる)</p> <p>次に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> の「メニュー>編集>環境設定」からモニタープロファイルを設定する。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151019/20151019235915.png" title="GIMP のモニタープロファイルの設定" alt="GIMP のモニタープロファイルの設定" /><br/> Pic.7 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> のモニタープロファイルの設定(利用ディスプレイの "LG製 M2762WS" 設定が確認できる)</p> <p>ついでに、「ファイルを開く時の挙動 "埋めこまれているプロファイルを使う"」を設定しておく。<br/> (今後、カラープロファイル "adobeRGB" などを使う場合もあるかもしれないので "RGBに変換" を選択せず、また手間を考えて "どうするか確認" を選択しなかった。)</p> <p>上記設定にて、下記のように少し写真の色味が変わるかと思います。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151020/20151020000955.png" title="モニタープロファイル適用による写真の違い" alt="モニタープロファイル適用による写真の違い" /><br/> Pic.8 モニタープロファイル適用による写真の違い(左 : モニタープロファイル無し、右 : 有り)</p> <p>加えて、ディスプレイの設定でも「映像モード "ユーザ設定"」や「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%A7%B2%B9%C5%D9">色温度</a> "sRGB"」などの設定を行なってください。<br/> ディスプレイの設定で鮮やかにする設定になっていたりすると、これも他の端末で見た時のイメージの差異が生まれる原因となりますので注意が必要です。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151007/20151007012345.jpg" title="ディスプレイ &quot;LG製 M2762WS&quot; の映像設定" alt="ディスプレイ &quot;LG製 M2762WS&quot; の映像設定" /><br/> Pic.9 モニターの映像設定</p> <h2 id="まとめ">まとめ</h2> <p>上記で、<b>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> を用いてRAWファイルを正しい色で扱えるようにする"</b> ことができました。</p> <h2 id="所感">所感</h2> <p>カメラは奥が深くて、勉強が大変ですがそれが楽しいですね。<br/> 次回は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a> のように写真を編集してみます。</p> <h3 id="16-bitチャンネルのTIFF画像を出力できるRAWファイル現像ソフト-RawTherapee2015117-追記">16-bit/チャンネルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像を出力できるRAWファイル現像ソフト "RawTherapee"(<b>2015/11/7 追記</b>)</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> は次期の 3.0 バージョンで、16-bit/チャンネル(またはそれ以上)の <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a> 画像に対応すると謳っております。<a href="#f-e35541fa" name="fn-e35541fa" title=" http://docs.gimp.org/ja/gimp-config-use-gegl.html ">*3</a><br/> 私が今使っております version 2.8.14 では下記のようなポップアップによる説明で、対応していない旨が分かります。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20151107/20151107011314.png" title="16-bit/チャンネルのTIFF画像を開いた時のエラーメッセージ" alt="16-bit/チャンネルのTIFF画像を開いた時のエラーメッセージ" /><br/> Pic.10 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> の <a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像エラーメッセージ</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GIMP">GIMP</a> 3.0 にアップグレードした暁には、下記のRAWファイル現像ソフトで 16-bit/チャンネルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/TIFF">TIFF</a>画像を出力できるので、使ってみたいと考えております。</p> <p><a href="http://freesoft.tvbok.com/freesoft/image/how_to_use_rawtherapee_3.html"> RawTherapeeの使い方3:画像の現像、保存方法、その他の項目 </a></p> <p>以上。</p> <div class="footnote"> <p class="footnote"><a href="#fn-61d3d20f" name="f-61d3d20f" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://ameblo.jp/poyo2samurai/entry-11578628030.html">http://ameblo.jp/poyo2samurai/entry-11578628030.html</a></span></p> <p class="footnote"><a href="#fn-5dff09f9" name="f-5dff09f9" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://www.lg.com/jp/support-product/lg-M2762WS-PM#">http://www.lg.com/jp/support-product/lg-M2762WS-PM#</a></span></p> <p class="footnote"><a href="#fn-e35541fa" name="f-e35541fa" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text"> <a href="http://docs.gimp.org/ja/gimp-config-use-gegl.html">http://docs.gimp.org/ja/gimp-config-use-gegl.html</a> </span></p> </div> maijou2501 Ubuntu12.04 で "Sophos Anti-Virus for Linux" を使ってみる hatenablog://entry/8454420450098821643 2015-06-24T23:45:02+09:00 2016-09-08T00:42:00+09:00 "Sophos Anti-Virus for Linux" を Ubuntu12.04 にインストールして、動作確認を行った。 <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#インストール">インストール</a></li> <li><a href="#動作確認">動作確認</a></li> <li><a href="#設定変更">設定変更</a><ul> <li><a href="#OS-起動時の-Sophos-Anti-Virus-for-Linux-自動起動">OS 起動時の "Sophos Anti-Virus for Linux" 自動起動</a></li> <li><a href="#メール宛先メールサーバの設定変更">メール宛先・メールサーバの設定変更</a></li> <li><a href="#アップデート間隔の変更">アップデート間隔の変更</a></li> <li><a href="#エラー対策1検索の対象から特定ファイルを除外">エラー対策1(検索の対象から特定ファイルを除外)</a></li> <li><a href="#エラー対策2検索の対象から特定ディレクトリを除外">エラー対策2(検索の対象から特定ディレクトリを除外)</a></li> <li><a href="#エラー対策3調査中">エラー対策3(調査中)</a></li> </ul> </li> </ul> </li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>"Sophos Anti-Virus for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>" を Ubuntu12.04 にインストールし、各種設定変更を行う。</p> <h2 id="方法">方法</h2> <p>インストールは下記サイトを参考にさせていただきました。<br/> <a href="http://zokibayashi.hatenablog.com/entry/2015/05/27/233114">Sophos Anti-Virus for Linuxを使う - 雑木林</a></p> <h3 id="インストール">インストール</h3> <p>tgz ファイルダウンロード後は下記コマンドを実行しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ tar zxvf sav-linux-free-9.9.tgz $ sudo sophos-av/install.sh $ sudo /opt/sophos-av/bin/savupdate </pre> <h3 id="動作確認">動作確認</h3> <p>下記コマンドを実行すると "テスト用ウイルス様ファイル" のダウンロードが行われ、それによりウイルスを検知しポップアップが生じました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ wget http://files.trendmicro.com/products/eicar-file/eicar.com </pre> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150624/20150624225023.png" title="Sophos Anti-Virus 警告" alt="Sophos Anti-Virus 警告" />!<br/> Pic.1 "Sophos Anti-Virus" の警告</p> <p>ログも確認します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo /opt/sophos-av/bin/savlog <span class="synStatement">[</span>sudo<span class="synStatement">]</span> password <span class="synStatement">for</span> ito: 日時 カテゴリ イベント 〜略〜 <span class="synConstant">2015</span>年<span class="synConstant">06</span>月<span class="synConstant">23</span>日 <span class="synConstant">22</span>時<span class="synConstant">55</span>分<span class="synConstant">27</span>秒: log.threat 脅威が /home/ito/eicar.com で検出されました: EICAR-AV-Test <span class="synPreProc">(</span>閉じる<span class="synPreProc">)</span>。<span class="synPreProc">(</span>ファイルはまだ感染しています。<span class="synPreProc">)</span> </pre> <h3 id="設定変更">設定変更</h3> <h4 id="OS-起動時の-Sophos-Anti-Virus-for-Linux-自動起動">OS 起動時の "Sophos Anti-Virus for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>" <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%AB%C6%B0%B5%AF%C6%B0">自動起動</a></h4> <p>下記コマンドを実行する。</p> <pre class="code" data-lang="" data-unlink>sudo /opt/sophos-av/bin/savdctl enableOnBoot savd</pre> <p>※自分の環境では "sudo /opt/sophos-av/bin/savdctl enableOnBoot savd" 実行後も systemV の起動設定が反映されてなさそうだったので、 "sudo sysv-rc-conf" で "sav-protect" の 2:on、3:on、4:on、5:on <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%AB%C6%B0%B5%AF%C6%B0">自動起動</a>設定を行った。(2015/06/28 追記)</p> <h4 id="メール宛先メールサーバの設定変更">メール宛先・メールサーバの設定変更</h4> <pre class="code" data-lang="" data-unlink>sudo /opt/sophos-av/bin/savconfig set Email test@testmail.jp sudo /opt/sophos-av/bin/savconfig set EmailServer targethost:25</pre> <h4 id="アップデート間隔の変更">アップデート間隔の変更</h4> <pre class="code" data-lang="" data-unlink>sudo /opt/sophos-av/bin/savconfig set UpdatePeriodMinutes 120</pre> <h4 id="エラー対策1検索の対象から特定ファイルを除外">エラー対策1(検索の対象から特定ファイルを除外)</h4> <p>OS 再起動時に、"/var/log/<a class="keyword" href="http://d.hatena.ne.jp/keyword/daemon">daemon</a>.log" に下記出力がありました。</p> <pre class="code" data-lang="" data-unlink>Jun 24 01:16:01 calc0 savd: Error detected: 0x3c: Unable to write to talpa socket in /var/log/ntp.log Jun 24 01:16:01 calc0 savd: Error detected: 0x3c: Unable to write to talpa socket in /run/ntpd.pid</pre> <p>また、"sudo /opt/sophos-av/bin/savlog" を実行した結果のログには下記出力がありました。</p> <pre class="code" data-lang="" data-unlink>2015年06月24日 01時16分01秒: log.error /var/log/ntp.log を検索中、エラーが発生しました: 0x3c: Unable to write to talpa socket (閉じる)。 (操作は拒否されました。) 2015年06月24日 01時16分01秒: log.error /run/ntpd.pid を検索中、エラーが発生しました: 0x3c: Unable to write to talpa socket (閉じる)。 (操作は拒否されました。)</pre> <p>これに対しては、下記を設定し検索の対象から当該ファイルを除外しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo /opt/sophos-av/bin/savconfig add ExcludeFilePaths /var/log/ntp.log sudo /opt/sophos-av/bin/savconfig add ExcludeFilePaths /run/ntpd.pid </pre> <h4 id="エラー対策2検索の対象から特定ディレクトリを除外">エラー対策2(検索の対象から特定<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを除外)</h4> <p>OS 再起動時に、"/var/log/kern.log" に下記出力がありました。</p> <pre class="code" data-lang="" data-unlink>Jun 23 22:42:52 calc0 kernel: [ 863.182817] talpa: Failed to open a directory /home/ito/.gvfs: -13 Jun 23 22:42:52 calc0 kernel: [ 863.182832] talpa: Failed to open a directory /home/ito/gdrive: -13</pre> <p>これは <a class="keyword" href="http://d.hatena.ne.jp/keyword/google%20%A5%C9%A5%E9%A5%A4%A5%D6">google ドライブ</a>共有のため、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a>-drive-ocamlfuse" で使っていた<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リでした。</p> <p>上記に対しては、下記を設定し検索の対象から当該<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを除外しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo /opt/sophos-av/bin/savconfig add ExcludeFileOnGlob <span class="synStatement">'</span><span class="synConstant">/home/ito/gdrive/*</span><span class="synStatement">'</span> sudo /opt/sophos-av/bin/savconfig add ExcludeFileOnGlob <span class="synStatement">'</span><span class="synConstant">/home/ito/.gvfs/*</span><span class="synStatement">'</span> </pre> <h4 id="エラー対策3調査中">エラー対策3(調査中)</h4> <p>"/var/log/kern.log" に下記出力がありました。</p> <pre class="code" data-lang="" data-unlink>Jun 24 22:34:50 calc0 kernel: [ 2006.789087] talpa-vfshook: atomic_open exit 1</pre> <p>上記に関してはWEBにも情報が少なく、発生タイミングも分からず他にログ出力もないため、対策につき調査中です。</p> <p>参考<br/> <a href="http://openforum.sophos.com/t5/Sophos-Anti-Virus-for-Linux/Several-asophos-av-problems/td-p/20975">Several asophos-av problems - SophosFreeTalk community</a></p> <h2 id="所感">所感</h2> <p>最新版ではないかもですが、下記ドキュメントを参考に設定を行いました。<br/> <a href="https://www.sophos.com/ja-jp/medialibrary/PDFs/documentation/savl_9_cgeng.pdf?la=ja-JP">Sophos Anti-Virus for Linux 環境設定ガイド</a></p> <p>ソフォスさん、今後使い続けるかは分かりませんが、ありがたく使わせてもらいます。</p> <p>以上。</p> maijou2501 Chromeブラウザでのユーザ情報偽装について hatenablog://entry/8454420450097755060 2015-06-16T01:39:36+09:00 2017-03-08T00:01:33+09:00 不正なサイトを閲覧した際に攻撃者(不正なWEBサーバ)へ端末OS・ブラウザ情報を与えないための、Chromeブラウザにおけるユーザ情報偽装設定を行う。 <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a></li> <li><a href="#現状の環境">現状の環境</a><ul> <li><a href="#1-サーバが受け取るリクエストヘッダの-User-Agent-以下UA-を偽装する">1. サーバが受け取るリクエストヘッダの &ldquo;User-Agent&rdquo; (以下UA) を偽装する</a><ul> <li><a href="#navigator-オブジェクトを確認するその1">navigator オブジェクトを確認する。(その1)</a></li> </ul> </li> <li><a href="#2-ブラウザでの-JavaScript-処理におけるユーザ情報処理を偽装する">2. ブラウザでの JavaScript 処理におけるユーザ情報処理を偽装する</a><ul> <li><a href="#navigator-オブジェクトを確認するその2">navigator オブジェクトを確認する。(その2)</a></li> </ul> </li> <li><a href="#3-おまけ-ルータの-WAN-側-MAC-アドレスの変更">3. (おまけ) ルータの WAN 側 MAC アドレスの変更</a></li> </ul> </li> <li><a href="#1-を実行しないで-2-だけ設定した場合の-navigator-オブジェクト確認">&ldquo;1&rdquo; を実行しないで &ldquo;2&rdquo; だけ設定した場合の navigator オブジェクト確認</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>ドライブバイダウンロード(以下DBD)攻撃などにも多少は有効だと考えられる、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>ブラウザにおけるユーザ情報偽装設定を行う。</p> <p>※ 2016/07/07 追記<br/> ユーザ情報偽装の意図としては下記で、不正なサイトを閲覧した際に攻撃者(不正なWEBサーバ)へ端末OS・ブラウザ情報を与えないためです。</p> <blockquote><p>(A) ブラウザフィンガープリンティング<br/> OS、Web ブラウザ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>の種類に応じて応答の可否を決定する。このとき、標的とするアプ<br/> リケーションが搭載されたクライアントを選択的に攻撃する。攻撃者がアプリケーションの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を<br/> 利用した不正なコードを埋め込んでいた場合、アプリケーションのバージョンが異なるとコードが正<br/> 常に実行されず、予期せぬ不具合が発生する可能性がある。クライアントがこの不具合を検知する<br/> ことで、悪性サイトを検知できる可能性がある。しかし、クローキングにより、対象を限定して不正な<br/> コード配信することで、不正なコードの不具合が原因で検知される可能性が低くなる。また、D3M<br/> 2014 の pcap ファイルから難読化された <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> を抽出し、Caffeine Monkey[7]を使用して難<br/> 読化を解除した。また、難読化を解除した <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> の一部を以下に示す。<br/> if(navigator.userAgent.toLowerCase().indexOf(&ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/msie">msie</a> 7&rdquo;)==-1)<br/> 上記の処理は、アクセスしたユーザの User-Agent が <a class="keyword" href="http://d.hatena.ne.jp/keyword/IE7">IE7</a> か否かで処理を変化させている。この処<br/> 理は、ブラウザフィンガープリンティングの 1 種であると考えられる。<br/> <br /><cite><a href="http://www.iwsec.org/mws/2014/files/mws_cup_2014_pre1.pdf">MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例</a></cite></p></blockquote> <h2 id="方法">方法</h2> <ol> <li>サーバが受け取るリクエストヘッダの &ldquo;User-Agent&rdquo; を偽装する</li> <li>ブラウザでの <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> 処理におけるユーザ情報処理を偽装する</li> <li>(おまけ) ルータの WAN 側 <a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC">MAC</a> アドレスの変更</li> </ol> <p>※本件では Ubuntu12.04 で動作を確認したが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> オプションなどは <a class="keyword" href="http://d.hatena.ne.jp/keyword/windows">windows</a> 環境でも同様に有効でした。</p> <h2 id="現状の環境">現状の環境</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> を普通に起動し、開発者ツール(F12) console から navigator オブジェクトを確認する。</p> <pre class="code" data-lang="" data-unlink>&gt; navigator.userAgent &lt; &#34;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36&#34; &gt; navigator.appVersion &lt; &#34;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36&#34; &gt; navigator.platform &lt; &#34;Linux x86_64&#34;</pre> <h3 id="1-サーバが受け取るリクエストヘッダの-User-Agent-以下UA-を偽装する">1. サーバが受け取るリクエストヘッダの &ldquo;User-Agent&rdquo; (以下<a class="keyword" href="http://d.hatena.ne.jp/keyword/UA">UA</a>) を偽装する</h3> <p>これは下記からダウンロードできるアドオン &ldquo;User-Agent Switcher for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>&rdquo; を用いた。</p> <p><a href="https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg?hl=ja">User-Agent Switcher for Chrome - Chrome ウェブストア</a></p> <p>アドオンを有効にし、確認サイト<a href="https://www.cman.jp/network/support/go_access.cgi">アクセス情報【使用中のIPアドレス確認】</a>で見ると <a class="keyword" href="http://d.hatena.ne.jp/keyword/UA">UA</a> が偽装されていることがわかる。</p> <pre class="code" data-lang="" data-unlink>ブラウザを表す文字列(userAgent) Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14</pre> <p>※他のOS・ブラウザの組み合わせを使いたい場合は、下記などが参考になりました。<br/>  <a href="http://user-agents.me/">ser-Agents.me - User agent string analysis</a><br/>  <a href="https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference">Gecko ユーザエージェント文字列リファレンス | MDN</a></p> <p>※各種 <a class="keyword" href="http://d.hatena.ne.jp/keyword/windows">windows</a> OS での値については下記が詳しかったです。<br/>  <a href="https://msdn.microsoft.com/ja-jp/library/ms537503(v=vs.85).aspx">&#x30E6;&#x30FC;&#x30B6;&#x30FC; &#x30A8;&#x30FC;&#x30B8;&#x30A7;&#x30F3;&#x30C8;&#x6587;&#x5B57;&#x5217;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;</a></p> <h4 id="navigator-オブジェクトを確認するその1">navigator オブジェクトを確認する。(その1)</h4> <p>アドオン &ldquo;User-Agent Switcher for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>&rdquo; で &ldquo;<a class="keyword" href="http://d.hatena.ne.jp/keyword/Opera">Opera</a> 12.14&rdquo; を適用した結果です。</p> <pre class="code" data-lang="" data-unlink>&gt; navigator.userAgent &lt; &#34;Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14&#34; &gt; navigator.appVersion &lt; &#34;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36&#34; &gt; navigator.platform &lt; &#34;Windows&#34;</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/UA">UA</a>は変更されましたが、 &ldquo;navigator.appVersion&rdquo; は変わっていません。それは次の項目で対応します。<br/> 念のため、確認サイト<a href="https://www.cman.jp/network/support/go_access.cgi">アクセス情報【使用中のIPアドレス確認】</a>でも見てみます。</p> <pre class="code" data-lang="" data-unlink>ブラウザのバージョン(appVersion)  5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36</pre> <h3 id="2-ブラウザでの-JavaScript-処理におけるユーザ情報処理を偽装する">2. ブラウザでの <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> 処理におけるユーザ情報処理を偽装する</h3> <p>下記サイトを参考に <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> 起動オプションを設定する。<br/> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> 自体を無効にすることは実用的ではないため実施しない。)</p> <p><a href="http://chrome.half-moon.org/43.html#obcd30eb">起動オプション - Google Chrome まとめWiki</a><br/> <a href="http://peter.sh/experiments/chromium-command-line-switches/">List of Chromium Command Line Switches « Peter Beverloo</a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>/usr/bin/google-chrome <span class="synSpecial">--disable-java</span> <span class="synSpecial">--no-referrers</span> <span class="synSpecial">--user-agent=</span><span class="synStatement">&quot;</span><span class="synConstant">Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14</span><span class="synStatement">&quot;</span> </pre> <ul> <li>&ndash;disable-<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a> : <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%D7%A5%EC%A5%C3%A5%C8">アプレット</a>など実行できないように<a class="keyword" href="http://d.hatena.ne.jp/keyword/JAVA">JAVA</a>無効化</li> <li>&ndash;no-referrers : <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9">リファラ</a>を削除することで「攻撃者の意図する経路」ではない方法でサイトへアクセスしたと見せかける</li> </ul> <p>※ 2016/07/07 追記<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9">リファラ</a>を削除する意図は下記です。</p> <blockquote><p>(B) <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9">リファラ</a>検査<br/> 攻撃者は、改ざんした Web サイトの URL が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9">リファラ</a>に設定されているか確かめることでアクセス<br/> の可否を決定する。このとき、攻撃者が意図する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9">リファラ</a>が付与されている場合のみ応答する。検査<br/> 目的で悪性Webサイトにアクセスする際、攻撃者の意図する経路で悪性Webサイトにアクセスする<br/> 必要があるため、検査が困難だと考えられる。<br/> <br /><cite><a href="http://www.iwsec.org/mws/2014/files/mws_cup_2014_pre1.pdf">MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例</a></cite></p></blockquote> <h4 id="navigator-オブジェクトを確認するその2">navigator オブジェクトを確認する。(その2)</h4> <pre class="code" data-lang="" data-unlink>&gt; navigator.userAgent &lt; &#34;Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14&#34; &gt; navigator.appVersion &lt; &#34;9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14&#34; &gt; navigator.platform &lt; &#34;Windows&#34;</pre> <p>しかしながら、この設定の弊害として私の環境では <a class="keyword" href="http://d.hatena.ne.jp/keyword/YOUTUBE">YOUTUBE</a> などでの <a class="keyword" href="http://d.hatena.ne.jp/keyword/Flash">Flash</a> プレイヤーが利用できなくなりました。<br/> おそらくブラウザの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>が正常に読み込めなくなったためだと思いますが、プライベートではちょっと使いにくい設定ですね。</p> <h3 id="3-おまけ-ルータの-WAN-側-MAC-アドレスの変更">3. (おまけ) ルータの WAN 側 <a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC">MAC</a> アドレスの変更</h3> <p>提示しなくて良い情報は<a class="keyword" href="http://d.hatena.ne.jp/keyword/ISP">ISP</a>相手でもできるだけ隠すという意味で、この設定を行います。<br/> これはルータによって設定画面が異なりますが、ご参考までに私のルータ設定画面を載せておきます。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150616/20150616011359.png" title="ルータのMACアドレス変更" alt="ルータのMACアドレス変更" /><br/> Pic.1 ルータの WAN 側 <a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC">MAC</a> アドレスの変更</p> <p><ins datetime="2017-03-07T23:44:43+09:00" cite="https://wiki.archlinuxjp.org/index.php/MAC_%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E5%81%BD%E8%A3%85"> 【2017/3/7 追記】<br/> Network Investigative Technique(NIT) を例として、使用端末の<a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC%A5%A2%A5%C9%A5%EC%A5%B9">MACアドレス</a>についても偽装することが有効だと考え、下記の &ldquo;方法 1: systemd-networkd&rdquo; にて起動毎に<a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC%A5%A2%A5%C9%A5%EC%A5%B9">MACアドレス</a>を変更することとした。</p> <p><a href="https://wiki.archlinuxjp.org/index.php/MAC_%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E5%81%BD%E8%A3%85#.E6.96.B9.E6.B3.95_1:_systemd-networkd">MAC アドレス偽装 - ArchWiki</a></p> <blockquote><p>閲覧者のコンピューターを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D1%A5%A4%A5%A6%A5%A7%A5%A2">スパイウェア</a>に感染させたFBIは、約1300件の本物の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>(筆者註:Torを経由した<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>ではなく閲覧者の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>)や<a class="keyword" href="http://d.hatena.ne.jp/keyword/MAC%A5%A2%A5%C9%A5%EC%A5%B9">MACアドレス</a>、タイムスタンプ、利用しているOS、そのバージョン、OSで利用されているユーザー名などの様々な情報を入手した。<br/> <br><cite><a href="https://the01.jp/p0002706/">FBIが児童ポルノサイト運営、スパイウェアを配布 | THE ZERO/ONE</a></cite> </ins></p></blockquote> <h2 id="1-を実行しないで-2-だけ設定した場合の-navigator-オブジェクト確認">&ldquo;1&rdquo; を実行しないで &ldquo;2&rdquo; だけ設定した場合の navigator オブジェクト確認</h2> <p>&ldquo;navigator.platform&rdquo; が正しく表示されてしまいますね。<a href="#f-01546410" name="fn-01546410" title="http://memopad.bitter.jp/w3c/jsref/prop_nav_platform.html">*1</a></p> <pre class="code" data-lang="" data-unlink>&gt; navigator.userAgent &lt; &#34;Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14&#34; &gt; navigator.appVersion &lt; &#34;9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14&#34; &gt; navigator.platform &lt; &#34;Linux x86_64&#34;</pre> <h2 id="所感">所感</h2> <p>DBD攻撃云々については少々あやかったエントリ名で、実際は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Flash">Flash</a> プレイヤーや、PDF ビュアーの停止なども考えないといけないですし、 iframe の有無や、 そもそも不正なサイトでは難読化されているとはいえ <a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> で判定すると静的解析で検知されるため、ブラウザの <a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a> 処理、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0">レンダリング</a>処理で<br/> ブラウザ判定を行う場合もあるため、ここに書いた内容だけでは防げるとは言いがたいですね。</p> <p>参考資料<br/> <a href="http://www.iwsec.org/mws/2014/files/mws_cup_2014_pre1.pdf">MWS Cup 2014 事前課題1 「Drive-by Download 攻撃解析」 回答例 </a><br/> <a href="http://www.iwsec.org/mws/2013/files/mws_cup_2013_review1.pdf">MWS Cup 2013 事前課題1 「Drive-by Download 攻撃解析」 解答例</a></p> <p>一助になれば、というところです。</p> <p>以上。</p> <div class="footnote"> <p class="footnote"><a href="#fn-01546410" name="f-01546410" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a href="http://memopad.bitter.jp/w3c/jsref/prop_nav_platform.html">http://memopad.bitter.jp/w3c/jsref/prop_nav_platform.html</a></span></p> </div> maijou2501 CUPS の WEBインターフェースの無効化 hatenablog://entry/8454420450097746267 2015-06-15T23:32:27+09:00 2016-09-09T22:50:11+09:00 CUPS の脆弱性が見つかったため、WEBインターフェースの無効化を行う。 <p><a name="pic_1"></a> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150615/20150615232609.png" title="CUPS Web Interface" alt="CUPS Web Interface" /><br/> pic.1 CUPS の "Web Interface" を無効にしたところ</p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#cupsdconf-設定の書き換え">cupsd.conf 設定の書き換え</a></li> <li><a href="#WEBインターフェース無効化の確認">WEBインターフェース無効化の確認</a></li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>CUPS の下記のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>も見つかり、WEBインターフェースを使うこともないので機能の無効化を行う。</p> <p><a href="http://jvn.jp/vu/JVNVU96553205/">JVNVU#96553205: CUPS (Common Unix Printing System) に複数の脆弱性</a></p> <h2 id="cupsdconf-設定の書き換え">cupsd.conf 設定の書き換え</h2> <p>"man cupsd.conf" で確認したが listen 自体無効にする方法が見つからなかったので、暫定処置として "WebInterface No" のうえで "<a class="keyword" href="http://d.hatena.ne.jp/keyword/localhost">localhost</a> のみ変更したポート番号へアクセス可能" と設定した。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo <span class="synStatement">sed</span> <span class="synSpecial">-i</span> <span class="synSpecial">-e</span> <span class="synStatement">'</span><span class="synConstant">s/^Listen localhost:631$/Listen localhost:50631/</span><span class="synStatement">'</span> /etc/cups/cupsd.conf sudo <span class="synStatement">sed</span> <span class="synSpecial">-i</span> <span class="synSpecial">-e</span> <span class="synStatement">'</span><span class="synConstant">s/^WebInterface Yes$/WebInterface No/</span><span class="synStatement">'</span> /etc/cups/cupsd.conf </pre> <h2 id="WEBインターフェース無効化の確認">WEBインターフェース無効化の確認</h2> <p>レスポンスは下記です。ブラウザでアクセスすると<a href="#pic_1">pic.1</a>のようになります。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ curl <span class="synSpecial">-i</span> localhost:<span class="synConstant">50631</span> HTTP/1.1 <span class="synConstant">200</span> OK Date: Mon, <span class="synConstant">15</span> Jun <span class="synConstant">2015</span> <span class="synConstant">14</span>:<span class="synConstant">21</span>:<span class="synConstant">18</span> GMT Server: CUPS/1.5 Content-Language: en_US Upgrade: TLS/1.0,HTTP/1.1 Connection: close Content-Type: text/html; <span class="synIdentifier">charset</span>=utf<span class="synConstant">-8</span> Content-Length: <span class="synConstant">459</span> <span class="synStatement">&lt;</span>!DOCTYPE HTML PUBLIC <span class="synStatement">&quot;</span><span class="synConstant">-//W3C//DTD HTML 4.01 Transitional//EN</span><span class="synStatement">&quot;</span> <span class="synStatement">&quot;</span><span class="synConstant">http://www.w3.org/TR/html4/loose.dtd</span><span class="synStatement">&quot;&gt;</span> <span class="synStatement">&lt;</span>HTML<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>HEAD<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>META HTTP-<span class="synIdentifier">EQUIV</span>=<span class="synStatement">&quot;</span><span class="synConstant">Content-Type</span><span class="synStatement">&quot;</span> <span class="synIdentifier">CONTENT</span>=<span class="synStatement">&quot;</span><span class="synConstant">text/html; charset=utf-8</span><span class="synStatement">&quot;&gt;</span> <span class="synStatement">&lt;</span>TITLE<span class="synStatement">&gt;</span>Web Interface is Disabled - CUPS v1.5.<span class="synStatement">3&lt;</span>/TITLE<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>LINK <span class="synIdentifier">REL</span>=<span class="synStatement">&quot;</span><span class="synConstant">STYLESHEET</span><span class="synStatement">&quot;</span> <span class="synIdentifier">TYPE</span>=<span class="synStatement">&quot;</span><span class="synConstant">text/css</span><span class="synStatement">&quot;</span> <span class="synIdentifier">HREF</span>=<span class="synStatement">&quot;</span><span class="synConstant">/cups.css</span><span class="synStatement">&quot;&gt;</span> <span class="synStatement">&lt;</span>/HEAD<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>BODY<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>H<span class="synStatement">1&gt;</span>Web Interface is Disabled<span class="synStatement">&lt;</span>/H<span class="synStatement">1&gt;</span> <span class="synStatement">&lt;</span>P<span class="synStatement">&gt;</span>The web interface is currently disabled. Run <span class="synStatement">&quot;</span><span class="synConstant">cupsctl WebInterface=yes</span><span class="synStatement">&quot;</span> to <span class="synStatement">enable</span> it.<span class="synStatement">&lt;</span>/P<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>/BODY<span class="synStatement">&gt;</span> <span class="synStatement">&lt;</span>/HTML<span class="synStatement">&gt;</span> </pre> <h2 id="所感">所感</h2> <p>WEBインターフェースは無効にできましたが、できればポート自体閉じたいところです。<br/> また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/localhost">localhost</a> しかアクセスできないとはいえ Version 記載も隠したいですね。</p> <p>以上。</p> maijou2501 「YAMAHA チューナー用マイク TM-10L」の断線修理 hatenablog://entry/8454420450097177558 2015-06-11T00:53:48+09:00 2016-09-07T23:10:34+09:00 「YAMAHA チューナー用マイク TM-10L」のチューナー差し込み端子側の断線修理を行う。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150608/20150608001305.jpg" title="YAMAHA チューナー用マイク TM-10L" alt="YAMAHA チューナー用マイク TM-10L" /><br/> Pic.1 <a href="http://jp.yamaha.com/products/musical-instruments/winds/accessories/tuners/tm10l/?mode=model">TM-10L - チューナー - ヤマハ株式会社</a></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#修理手順">修理手順</a><ul> <li><a href="#断線箇所を露出させる">断線箇所を露出させる</a></li> <li><a href="#断線部のハンダ付け">断線部のハンダ付け</a></li> <li><a href="#ケーブル保護">ケーブル保護</a></li> <li><a href="#動作確認">動作確認</a></li> </ul> </li> <li><a href="#所感">所感</a></li> </ul> <h2 id="目的">目的</h2> <p>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAMAHA">YAMAHA</a> チューナー用マイク TM-10L」の、チューナー差し込み端子側で断線が生じていたため修理を行う。</p> <h2 id="修理手順">修理手順</h2> <p>下記サイトを参考に修理を行った。<br/> <a href="http://www.geocities.jp/yukialpine/horn/tunerrepair/tunerrepair.html">チューナーマイク修理</a></p> <h3 id="断線箇所を露出させる">断線箇所を露出させる</h3> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610231405.jpg" title="チューナー用マイクの皮膜を剥く" alt="チューナー用マイクの皮膜を剥く" /><br/> Pic.2 皮膜を剥く</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610232151.jpg" title="チューナー用マイクのケーブル保護部分のカット" alt="チューナー用マイクのケーブル保護部分のカット" /><br/> Pic.3 ケーブル保護部分のカット</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610232314.jpg" title="チューナー用マイクの断線箇所の露出" alt="チューナー用マイクの断線箇所の露出" /><br/> Pic.4 断線箇所の露出</p> <h3 id="断線部のハンダ付け">断線部のハンダ付け</h3> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610232827.jpg" title="チューナー用マイクの内部配線の露出" alt="チューナー用マイクの内部配線の露出" /><br/> Pic.5 内部配線の露出</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610233032.jpg" title="チューナー用マイクの内部配線の断線を修復" alt="チューナー用マイクの内部配線の断線を修復" /><br/> Pic.6 内部配線の断線を修復</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610233436.jpg" title="チューナー用マイクの外側配線の断線を修復" alt="チューナー用マイクの外側配線の断線を修復" /><br/> Pic.7 外側配線の断線を修復</p> <h3 id="ケーブル保護">ケーブル保護</h3> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610233849.jpg" title="チューナー用マイクの剥いだ皮膜を戻す" alt="チューナー用マイクの剥いだ皮膜を戻す" /><br/> Pic.8 剥いだ皮膜を戻す</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610234319.jpg" title="チューナー用マイクを絶縁テープで保護" alt="チューナー用マイクを絶縁テープで保護" /><br/> Pic.9 絶縁テープで保護</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610234937.jpg" title="チューナー用マイクのケーブル補強" alt="チューナー用マイクのケーブル補強" /><br/> Pic.10 カットしたケーブル保護部分を嵌め、今回のハンダ部分も補強</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610235203.jpg" title="チューナー用マイクへ更に絶縁テープ" alt="チューナー用マイクへ更に絶縁テープ" /><br/> Pic.11 再び絶縁テープで補強</p> <h3 id="動作確認">動作確認</h3> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150610/20150610235422.jpg" title="マイクの動作確認" alt="マイクの動作確認" /><br/> Pic.12 442Hz で A音 確認</p> <p>元通りに直りました♪</p> <h2 id="所感">所感</h2> <p>今回修理したものが既に生産終了していた品とは知りませんでした。<br/> 直したばかリで気が早いですが、次に買うとしたら下記製品が欲しいですね。</p> <p><a href="http://www.amazon.co.jp/gp/product/B00CQI0J4Q/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00CQI0J4Q&linkCode=as2&tag=maijou2501-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00CQI0J4Q&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=maijou2501-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=maijou2501-22&l=as2&o=9&a=B00CQI0J4Q" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br/> Pic.13 <a class="keyword" href="http://d.hatena.ne.jp/keyword/YAMAHA">YAMAHA</a> チューナー用マイクロフォン ホワイト/レッド TM-20WHRD</p> <p>以上。</p> maijou2501 Ubuntu でシンプルな左クリック自動化を行う hatenablog://entry/8454420450095149683 2015-05-22T01:07:04+09:00 2016-09-07T23:19:08+09:00 マウスの左クリックを行う Java プログラムを公開する。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150522/20150522010520.png" title="プログラムの動作例" alt="プログラムの動作例" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#動作確認環境">動作確認環境</a><ul> <li><a href="#Ubuntu1204">Ubuntu12.04</a></li> <li><a href="#Windows-7">Windows 7</a></li> </ul> </li> <li><a href="#使い方">使い方</a></li> <li><a href="#蛇足情報">蛇足情報</a></li> </ul> <h2 id="目的">目的</h2> <p>5年前くらいに書いた、マウスの左クリックを行う <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> プログラムを公開する。</p> <h2 id="動作確認環境">動作確認環境</h2> <h3 id="Ubuntu1204">Ubuntu12.04</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>$ java <span class="synSpecial">-version</span> java version <span class="synStatement">&quot;</span><span class="synConstant">1.6.0_35</span><span class="synStatement">&quot;</span> OpenJDK Runtime Environment <span class="synPreProc">(</span><span class="synSpecial">IcedTea6 1.13.7</span><span class="synPreProc">)</span> <span class="synPreProc">(</span><span class="synSpecial">6b35-1.13.7-1ubuntu0.12.04.2</span><span class="synPreProc">)</span> OpenJDK <span class="synConstant">64</span>-Bit Server VM <span class="synPreProc">(</span><span class="synSpecial">build 23.25-b01, mixed mode</span><span class="synPreProc">)</span> </pre> <h3 id="Windows-7"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a></h3> <p>5年前くらいの開発環境が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%207">Windows 7</a> で、sun <a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> 1.7 だった記憶があります。</p> <h2 id="使い方">使い方</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>と実行方法は下記です。<br/> ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> のインストールは "apt-get install openjdk" で良いと思います。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ javac Click.java $ java Click </pre> <p>動作は下記です。(実行イメージはページトップの画像をご参照ください。)</p> <ol> <li>実行してから5秒間、1秒間隔でマウスの座標を取得する</li> <li>X・Y座標を入力する</li> <li>"2" で指定した座標で10秒毎に左クリックが行われる</li> <li>停止は "Ctrl+C" か、コンソールを閉じてください</li> </ol> <p><script src="https://gist.github.com/383f40e627f642a4385b.js"> </script></p> <h2 id="蛇足情報">蛇足情報</h2> <p>ちょっと複雑なことをさせるのであれば下記を改造して使うと、<br/> 移動してクリック、移動してクリック、など登録できます。</p> <p><a href="https://gist.github.com/maijou2501/04c67f7ccc5878b70839">https://gist.github.com/maijou2501/04c67f7ccc5878b70839</a></p> <p>以上。</p> maijou2501 "guake" の透明効果が無効になったので有効化させる hatenablog://entry/8454420450095139712 2015-05-21T23:26:38+09:00 2016-09-08T23:32:16+09:00 なぜか "guake" の透明効果が無効になってしまったので、その再有効化を行った。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150521/20150521231711.png" title="Ubuntu Tweak" alt="Ubuntu Tweak" /></p> <h2>目的</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/X%20window%20system">X window system</a> の挙動が一度おかしくなったのが原因だと思われるが、<br/> "guake" の透明効果が無効になってしまったので、その再有効化を行う。</p> <h2>方法</h2> <h3>ネットから同じような事例を調べる</h3> <p>下記を参考にしたが、私の環境では透明効果が再有効化されませんでした。</p> <p><a href="http://blog.craftgear.net/500e2183915c940304000003/title/Guake%E3%81%A7%E9%80%8F%E9%81%8E%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E4%BB%B6">http://blog.craftgear.net/500e2183915c940304000003/title/Guake%E3%81%A7%E9%80%8F%E9%81%8E%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E4%BB%B6</a></p> <h3>Unity の透明化機能を疑う</h3> <p>以前、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> Tweek" の設定を行なっていた際に、Unity のウインドウの透明化機能を<br/> 担っているのが "コンポジットマネージャ" だったと記憶していたので、その設定を確認した。</p> <p>OFF になっていたため ON に設定し再起動したところ、"guake" の透明効果が有効になった。</p> <h2>結論</h2> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> Tweek" 設定の "コンポジットマネージャ" を ON に設定し再起動したところ、<br/> "guake" の透明効果が有効になった。</p> <h2>後から判明した原因と対策 (2016/01/31 追記)</h2> <p>自分の環境では <a class="keyword" href="http://d.hatena.ne.jp/keyword/NVIDIA">NVIDIA</a> のドライバをインストールした時点で、Unity 3D から Unity 2D に切り替わっていたことが原因だったようです。<br/> ドライバをアンインストールし再起動した時点で Unity 3D に切り替わり、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ubuntu">Ubuntu</a> Tweek" 設定の "コンポジットマネージャ" の項目はなくなり、本エントリ記載のリンクの方法にて透明効果が再有効化しました。</p> <p>以上。</p> maijou2501 CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その5: CUDA+OpenMPI 実行 ) hatenablog://entry/8454420450094752574 2015-05-20T00:53:24+09:00 2016-09-08T23:34:54+09:00 2ホスト間でGPGPUを行うことを目的とした最終工程として "CUDA+OpenMPI" のテストを行い、環境構築が正しく行えているか確認します。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150517/20150517223757.png" title="Open_MPI_logo.png" alt="Open_MPI_logo.png" /><br/> <span style="font-size: 80%">By <a href="http://www.open-mpi.org">Open MPI</a> [<a href="http://opensource.org/licenses/bsd-license.php">BSD</a> or Attribution], <a href="https://commons.wikimedia.org/wiki/File%3AOpen_MPI_logo.png">via Wikimedia Commons</a></span></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#OpenMPI-プログラム">"OpenMPI" プログラム</a></li> <li><a href="#OpenMPI-プログラムのコンパイルと実行結果">"OpenMPI" プログラムのコンパイルと実行結果</a></li> <li><a href="#CUDA-プログラム">"CUDA" プログラム</a></li> <li><a href="#CUDA-プログラムのコンパイルと実行結果">"CUDA" プログラムのコンパイルと実行結果</a></li> <li><a href="#CUDAOpenMPI-プログラム">"CUDA+OpenMPI" プログラム</a></li> <li><a href="#CUDAOpenMPI-プログラムのコンパイルと実行結果">"CUDA+OpenMPI" プログラムのコンパイルと実行結果</a></li> </ul> </li> <li><a href="#結論">結論</a></li> </ul> <h2 id="目的">目的</h2> <p>以前、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ubuntu">ubuntu</a>(12.04) 4台で <a class="keyword" href="http://d.hatena.ne.jp/keyword/NFS">NFS</a> にてファイル共有を行い、OpenMPI でホスト間通信させることで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境を構築しました。<br/> そしてこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境の2ホスト上にCUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>を追加し、2ホスト間で<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPGPU">GPGPU</a>を行うことを目的として<br/> CUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>配置と、前エントリでは対応する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>ドライバと CUDA Toolkit のインストールを行いました。</p> <p>今回は表題の通り"CUDA+OpenMPI" のテストを行い、環境構築が正しく行えているか確認します。</p> <h2 id="方法">方法</h2> <p>テストとして "n=1,2,…,512×2000 を足し上げる<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%B8%C0%B8%EC">C言語</a>のプログラム" を書きます。<br/> (n+1)*(n/2)で答えが出ると言われれば実用性のないプログラムですが、作り易かったのでこれを選びました。</p> <p>下記の段階をふみ、"CUDA+OpenMPI" のプログラムに作り替えていきます。</p> <ol> <li>"OpenMPI" プログラム</li> <li>"CUDA" プログラム</li> <li>"CUDA+OpenMPI" プログラム</li> </ol> <h3 id="OpenMPI-プログラム">"OpenMPI" プログラム</h3> <p><script src="https://gist.github.com/220e220248e08727e0e9.js"> </script></p> <h3 id="OpenMPI-プログラムのコンパイルと実行結果">"OpenMPI" プログラムの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>と実行結果</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>・実行結果は下記です。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>は "<a class="keyword" href="http://d.hatena.ne.jp/keyword/icc">icc</a>" を使っているので、オプションはそれに最適化されています。)</p> <pre class="code" data-lang="" data-unlink>$ mpicc mpi_reduce.c -o mpi_reduce -Wall -O3 -no-prec-div -xHost -parallel $ $ mpirun -n 4 -host calc0,calc1,calc2,calc3 ./mpi_reduce name=calc0, rank/size=0/4, my_sum=32768128000 name=calc1, rank/size=1/4, my_sum=98304128000 name=calc3, rank/size=3/4, my_sum=229376128000 name=calc2, rank/size=2/4, my_sum=163840128000 sum=524288512000 UINT64_MAX=18446744073709551615 $ </pre> <h3 id="CUDA-プログラム">"CUDA" プログラム</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>で合算も実行させるべきとは思いますが、テストプログラムなのでご容赦ください。</p> <p><script src="https://gist.github.com/8424852e959495e9b9c8.js"> </script></p> <h3 id="CUDA-プログラムのコンパイルと実行結果">"CUDA" プログラムの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>と実行結果</h3> <p>"Tesla C1060" は "CUDA Capability 1.3" のため、下記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>オプションが必要です。</p> <blockquote><p>-arch="sm_13"</p></blockquote> <pre class="code" data-lang="" data-unlink>$ nvcc -ccbin=/opt/intel/bin/icc cuda.cu -o cuda --compiler-options=&#34;-Wall -xHOST -O3 -no-prec-div -parallel&#34; -arch=&#34;sm_13&#34; nvcc warning : The &#39;compute_11&#39;, &#39;compute_12&#39;, &#39;compute_13&#39;, &#39;sm_11&#39;, &#39;sm_12&#39;, and &#39;sm_13&#39; architectures are deprecated, and may be removed in a future release. $ $ ./cuda sum = 524288512000 $ </pre> <h3 id="CUDAOpenMPI-プログラム">"CUDA+OpenMPI" プログラム</h3> <p><script src="https://gist.github.com/f9685b9736033a486371.js"> </script></p> <h3 id="CUDAOpenMPI-プログラムのコンパイルと実行結果">"CUDA+OpenMPI" プログラムの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>と実行結果</h3> <pre class="code" data-lang="" data-unlink>$ nvcc -ccbin=/opt/intel/bin/icc mpi4cuda.cu -o mpi4cuda --compiler-options=&#34;-Wall -xHOST -O3 -no-prec-div -parallel&#34; -arch=&#34;sm_13&#34; -I /opt/openmpi/include -L /opt/openmpi/lib/ -lmpi nvcc warning : The &#39;compute_11&#39;, &#39;compute_12&#39;, &#39;compute_13&#39;, &#39;sm_11&#39;, &#39;sm_12&#39;, and &#39;sm_13&#39; architectures are deprecated, and may be removed in a future release. $ $ mpirun -n 3 -host calc0,calc1,calc2 ./mpi4cuda name=calc0, rank/size=0/2, my_sum=131072256000 name=calc1, rank/size=1/2, my_sum=393216256000 sum = 524288512000 $ </pre> <h2 id="結論">結論</h2> <p>"CUDA+OpenMPI" プログラムを実行できる環境が整いました。</p> <p>以上。</p> maijou2501 CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その4: CUDA-aware 対応のため OpenMPI のコンパイル ) hatenablog://entry/8454420450094742971 2015-05-17T23:00:59+09:00 2016-09-08T23:36:02+09:00 2ホスト間でGPGPUを行うことを目的として "CUDA-aware 対応のため OpenMPI のコンパイル" を行います。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20150517/20150517223757.png" title="Open_MPI_logo.png" alt="Open_MPI_logo.png" /><br/> <span style="font-size: 80%">By <a href="http://www.open-mpi.org">Open MPI</a> [<a href="http://opensource.org/licenses/bsd-license.php">BSD</a> or Attribution], <a href="https://commons.wikimedia.org/wiki/File%3AOpen_MPI_logo.png">via Wikimedia Commons</a></span></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#OpenMPI-のコンパイル">OpenMPI のコンパイル</a></li> <li><a href="#mpirun-実行時の-CUDA-aware-support-is-disabled-エラー出力">mpirun 実行時の "CUDA-aware support is disabled" エラー出力</a></li> </ul> </li> <li><a href="#結果">結果</a></li> </ul> <h2 id="目的">目的</h2> <p>以前、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ubuntu">ubuntu</a>(12.04) 4台で <a class="keyword" href="http://d.hatena.ne.jp/keyword/NFS">NFS</a> にてファイル共有を行い、OpenMPI でホスト間通信させることで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境を構築しました。<br/> そしてこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境の2ホスト上にCUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>を追加し、2ホスト間で<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPGPU">GPGPU</a>を行うことを目的として<br/> CUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>配置と、前エントリでは対応する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>ドライバと CUDA Toolkit のインストールを行いました。</p> <p>今回は表題の通り"CUDA-aware 対応のため OpenMPI の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>" を行います。</p> <p>実は "CUDA-aware" は同一ホスト上で複数<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>を利用する場合に、 "Unified Virtual Memory" を利用するために設定するもので、<br/> 本環境の<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>をそれぞれ積んだ複数ホスト間で<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPGPU">GPGPU</a>する場合は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>間で "Remote Direct Memory <a class="keyword" href="http://d.hatena.ne.jp/keyword/Access">Access</a>" できるはずがないので不要なのですが、<br/> 当時その意味を知らずに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>を行いトラブルシュートした経緯があるので、その知見を記録するという目的で記事を残します。</p> <h2 id="方法">方法</h2> <p>下記の OpenMPI の FAQ を参考にした。</p> <p><a href="https://www.open-mpi.org/faq/?category=buildcuda">FAQ: Building CUDA-aware Open MPI</a></p> <h3 id="OpenMPI-のコンパイル">OpenMPI の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a></h3> <p>自分の環境特有の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>オプションは下記です。</p> <ul> <li>mpicc のバックエンドには /opt 以下にある <a class="keyword" href="http://d.hatena.ne.jp/keyword/intel">intel</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>を使う</li> <li>/opt 配下に openmpi をインストールする</li> <li>ジョブ管理に "sun grid engine" を使う</li> <li>OpenMPI の "CUDA-aware" を有効にする</li> </ul> <p>管理者権限で下記を実行します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>wget http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.2.tar.bz2 tar xjf openmpi-1.8.2.tar.bz2 <span class="synStatement">cd</span> openmpi-1.8.2 <span class="synStatement">source</span> /opt/intel/bin/compilervars.sh intel64 ./configure <span class="synIdentifier">CC</span>=icc <span class="synIdentifier">CFLAGS</span>=-m64 <span class="synIdentifier">CXX</span>=icpc <span class="synIdentifier">CXXFLAGS</span>=-m64 <span class="synIdentifier">LDFLAGS</span>=<span class="synStatement">&quot;</span><span class="synConstant">-shared-intel</span><span class="synStatement">&quot;</span> <span class="synSpecial">--prefix=/opt/openmpi</span> <span class="synSpecial">--with-sge</span> <span class="synSpecial">--enable-mpi-thread-multiple</span> <span class="synSpecial">--enable-mpirun-prefix-by-default</span> <span class="synSpecial">--enable-mpi-interface-warning</span> <span class="synSpecial">--with-wrapper-cflags=-m64</span> <span class="synSpecial">--with-wrapper-cxxflags=-m64</span> <span class="synSpecial">--with-cuda</span> <span class="synSpecial">--disable-mpi-fortran</span> make <span class="synSpecial">-j</span> <span class="synConstant">4</span> make install </pre> <p>インストール後のコマンド実行も大丈夫そうです。</p> <pre class="code" data-lang="" data-unlink>$ mpicc -v icc バージョン 14.0.1 (gcc バージョン 4.6.0 互換) </pre> <h3 id="mpirun-実行時の-CUDA-aware-support-is-disabled-エラー出力">mpirun 実行時の "CUDA-aware support is disabled" エラー出力</h3> <p>各ノード間の CUDA Card 情報を収集して表示するプログラムを、下記サイトからコピーし利用しました。</p> <p><a href="https://service.clustervision.com/content/example-mpi-c-cuda-device-query-program">Example MPI C / CUDA device query program | ClusterVision Service Portal</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>後、下記のように実行するとエラー出力がありました。</p> <pre class="code" data-lang="" data-unlink>$ mpirun -n 3 -host calc0,calc1,calc2 ./mpi4cuda.out -------------------------------------------------------------------------- The library attempted to open the following supporting CUDA libraries, but each of them failed. CUDA-aware support is disabled. libcuda.so.1: cannot open shared object file: No such file or directory libcuda.so.1: cannot open shared object file: No such file or directory -------------------------------------------------------------------------- We have 3 processors Spawning from calc0 CUDA MPI Probing nodes... Node Psid CUDA Cards (devID) ----------- ----- ---- ---------- + calc1 1 1 Tesla C1060 (0) + calc2 2 1 Quadro 4000 (0) [calc1:02049] 2 more processes have sent help message help-mpi-common-cuda.txt / dlopen failed [calc1:02049] Set MCA parameter &#34;orte_base_help_aggregate&#34; to 0 to see all help / error messages</pre> <p>これは下記サイトを見ると、64-bit 用の libcuda.so.1 を見つけられないからのようで、<br/> 次のコマンド実行で解決しました。</p> <p><a href="http://www.open-mpi.org/community/lists/users/2015/03/26543.php">http://www.open-mpi.org/community/lists/users/2015/03/26543.php</a></p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo <span class="synStatement">rm</span> /usr/lib/i386-linux-gnu/libcuda.so.1 sudo ln <span class="synSpecial">-s</span> /usr/lib/x86_64-linux-gnu/libcuda.so.346.46 /usr/lib/i386-linux-gnu/libcuda.so.1 </pre> <h2 id="結果">結果</h2> <p>"CUDA-aware" 対応の "OpenMPI" <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>も成功し、利用時のエラー対応も行うことができた。</p> <p>以上。</p> maijou2501 CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その3:Quadro 4000 ドライバと CUDA Toolkit のインストール ) hatenablog://entry/8454420450094647839 2015-05-17T03:08:48+09:00 2016-09-08T23:17:11+09:00 2ホスト間でGPGPUを行うことを目的として、Quadro 4000 ビデオカードドライバと CUDA Toolkit のインストールを行った。 <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/maijou2501/20160209/20160209114707.jpg" title="nvidia-1201074_640.jpg" alt="nvidia-1201074_640.jpg" /></p> <p><b></b><span style="font-size: 130%"><b>目次</b></span></p> <ul class="table-of-contents"> <li><a href="#目的">目的</a></li> <li><a href="#方法">方法</a><ul> <li><a href="#NVIDIA-Quadro-4000">NVIDIA® Quadro® 4000</a><ul> <li><a href="#CUDA-が使えるグラボを認識しているか調べる">CUDA が使えるグラボを認識しているか調べる</a></li> <li><a href="#CUDA-がサポートしているOSかどうか調べる">CUDA がサポートしているOSかどうか調べる</a></li> <li><a href="#gcc-のバージョン確認">gcc のバージョン確認</a></li> <li><a href="#ドライバCUDA-のインストール">ドライバ・CUDA のインストール</a></li> <li><a href="#インストール後に設定するべき項目と再起動実行後の確認事項">インストール後に設定するべき項目と、再起動実行後の確認事項</a></li> <li><a href="#サンプル実行">サンプル実行</a></li> </ul> </li> </ul> </li> <li><a href="#補足--ビデオカード性能-">補足 ( ビデオカード性能 )</a></li> </ul> <h2 id="目的">目的</h2> <p>以前、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ubuntu">ubuntu</a>(12.04) 4台で <a class="keyword" href="http://d.hatena.ne.jp/keyword/NFS">NFS</a> にてファイル共有を行い、OpenMPI でホスト間通信させることで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境を構築しました。</p> <p>そして、この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>環境の2ホスト上にCUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>を追加し、2ホスト間で<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPGPU">GPGPU</a>を行うことを目的として、その前段階としてCUDA対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>配置を行いました。</p> <p>前エントリでは、Tesla C1060 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>ドライバと CUDA Toolkit のインストールを行いましたが、<br/> 本エントリでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Quadro">Quadro</a> 4000 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>ドライバと CUDA Toolkit のインストールを行う。</p> <h2 id="方法">方法</h2> <p>CUDA developer ページを参考にした。</p> <p><a href="http://developer.download.nvidia.com/compute/cuda/6_5/rel/docs/CUDA_Getting_Started_Linux.pdf">http://developer.download.nvidia.com/compute/cuda/6_5/rel/docs/CUDA_Getting_Started_Linux.pdf</a></p> <h3 id="NVIDIA-Quadro-4000"><a class="keyword" href="http://d.hatena.ne.jp/keyword/NVIDIA">NVIDIA</a>® <a class="keyword" href="http://d.hatena.ne.jp/keyword/Quadro">Quadro</a>® 4000</h3> <h4 id="CUDA-が使えるグラボを認識しているか調べる">CUDA が使えるグラボを認識しているか調べる</h4> <pre class="code" data-lang="" data-unlink>ito@calc2:~$ lspci | grep -i nvidia 01:00.0 VGA compatible controller: NVIDIA Corporation GF100GL [Quadro 4000] (rev a3) 01:00.1 Audio device: NVIDIA Corporation GF100 High Definition Audio Controller (rev a1)</pre> <p>グラボの認識は大丈夫そうです。</p> <h4 id="CUDA-がサポートしているOSかどうか調べる">CUDA がサポートしているOSかどうか調べる</h4> <pre class="code" data-lang="" data-unlink>ito@calc2:~$ uname -m &amp;&amp; cat /etc/*release x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION=&#34;Ubuntu 12.04.4 LTS&#34; NAME=&#34;Ubuntu&#34; VERSION=&#34;12.04.4 LTS, Precise Pangolin&#34; ID=ubuntu ID_LIKE=debian PRETTY_NAME=&#34;Ubuntu precise (12.04.4 LTS)&#34; VERSION_ID=&#34;12.04&#34;</pre> <p>ubuntu12.04 は "DEPRECATED " バージョンですが、良しとします。</p> <h4 id="gcc-のバージョン確認"><a class="keyword" href="http://d.hatena.ne.jp/keyword/gcc">gcc</a> のバージョン確認</h4> <pre class="code" data-lang="" data-unlink>ito@calc2:~$ gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ito@calc2:~$ ito@calc2:~$ icc --version icc (ICC) 14.0.1 20131008 (C) 1985-2013 Intel Corporation. 無断での引用、転載を禁じます。</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/gcc">gcc</a> は 4.6以上ですし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/icc">icc</a> は14.01なので、対象バージョンです。</p> <h4 id="ドライバCUDA-のインストール">ドライバ・CUDA のインストール</h4> <p>管理者権限で下記を実行します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1204/x86_64/cuda-repo-ubuntu1204_6.5-14_amd64.deb dpkg <span class="synSpecial">-i</span> cuda-repo-ubuntu1204_6.5-14_amd64.deb apt-get update apt-get install <span class="synSpecial">-y</span> cuda<span class="synConstant">-6-5</span> </pre> <p>Tesla C1060 の CUDA バージョン 6.5 に合わせました。 前エントリの Tesal C1060 の場合と違って、問題もなく簡単にインストールは終わりました。</p> <h4 id="インストール後に設定するべき項目と再起動実行後の確認事項">インストール後に設定するべき項目と、再起動実行後の確認事項</h4> <p>".bashrc" に下記設定を追加した。</p> <pre class="code" data-lang="" data-unlink>export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH</pre> <p>インストール後の出力に「再起動後に module のロードが行われる」と記載がありましたので、このタイミングで再起動を行います。<br/> その後下記を実行し、CUDA Toolkit のコマンドが使えるか確認します。</p> <pre class="code" data-lang="" data-unlink>ito@calc2:~$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2014 NVIDIA Corporation Built on Thu_Jul_17_21:41:27_CDT_2014 Cuda compilation tools, release 6.5, V6.5.12</pre> <p>パスも通っており、コマンドも無事使えました。</p> <h4 id="サンプル実行">サンプル実行</h4> <p>サンプルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>を行い、サンプル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4">バイ</a>ナリを実行します。</p> <pre class="code" data-lang="" data-unlink>./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: &#34;Quadro 4000&#34; CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 2.0 Total amount of global memory: 2048 MBytes (2147155968 bytes) ( 8) Multiprocessors, ( 32) CUDA Cores/MP: 256 CUDA Cores GPU Clock rate: 950 MHz (0.95 GHz) Memory Clock rate: 1404 Mhz Memory Bus Width: 256-bit L2 Cache Size: 524288 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 32768 Warp size: 32 Maximum number of threads per multiprocessor: 1536 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (65535, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device PCI Bus ID / PCI location ID: 1 / 0 Compute Mode: &lt; Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) &gt; deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = Quadro 4000 Result = PASS</pre> <pre class="code" data-lang="" data-unlink>[CUDA Bandwidth Test] - Starting... Running on... Device 0: Quadro 4000 Quick Mode Host to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 5188.3 Device to Host Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 6252.3 Device to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 74148.9 Result = PASS</pre> <p>サンプルプログラムの実行も大丈夫でした。</p> <p>"deviceQuery" と同様の情報はネットでも取得できるとは思いますが、出力結果の一部の値は<br/> CUDAプログラムの最適化の際に利用しますので、実行結果を手元に控えておくことをお勧めいたします。</p> <h2 id="補足--ビデオカード性能-">補足 ( <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C7%A5%AA%A5%AB%A1%BC%A5%C9">ビデオカード</a>性能 )</h2> <p>今回 <a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenGL">OpenGL</a> も使ってみたかったので、Tesla だけでなく <a class="keyword" href="http://d.hatena.ne.jp/keyword/Quadro">Quadro</a> を混ぜた環境にしたのですが、<br/> どうせなら <a class="keyword" href="http://d.hatena.ne.jp/keyword/Quadro">Quadro</a> 4000 で Steam などもやりたいと思い、どの程度の動画描画性能があるのか調べてみました。</p> <p>lspci の結果からも分かるように GF100コアを用いているの、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GeForce">GeForce</a> GTX 470/465 の性能と同じ位だと想像できます。<br/> そうすると下記のサイトの結果では "3D Mark Vantage スコア8553" (<a class="keyword" href="http://d.hatena.ne.jp/keyword/DirectX">DirectX</a> 10のベンチ) 位の性能みたいです。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.dospara.co.jp%2F5shopping%2Fshare.php%3Fcontents%3Dvga_def_parts" title="グラフィックカード性能比較ベンチマークテスト|ドスパラ公式通販サイト" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://www.dospara.co.jp/5shopping/share.php?contents=vga_def_parts">www.dospara.co.jp</a></cite></p> <p>また、下記動画の "ワンズちゃんねる!#105 「ELSA特集第2弾」<a class="keyword" href="http://d.hatena.ne.jp/keyword/Quadro">Quadro</a>について紹介!" では、<br/> 性能は "GTX670" 相当との話が出ています。</p> <p><iframe width="480" height="270" src="https://www.youtube.com/embed/pA0hEdVl554?feature=oembed" frameborder="0" allowfullscreen></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=pA0hEdVl554">www.youtube.com</a></cite></p> <p>そうすると性能は "3D Mark 11 スコア3015" (<a class="keyword" href="http://d.hatena.ne.jp/keyword/DirectX">DirectX</a> 11のベンチ) ということになります。</p> <p>試しに Steam の "The Talos Principle" デモ版を実行してみましたが、カクカクすることなく実行はできていました。<br/> (グラボに詳しくないので今はこれ以上は調査できないですが、他にもゲームをやってみましたら<br/> 実行フレームレートなど追記したいと思います。)</p> <p><a href="http://store.steampowered.com/app/257510/?l=japanese">http://store.steampowered.com/app/257510/?l=japanese</a></p> <p>以上。</p> maijou2501