public/index.rdf in tdiary-5.0.0 vs public/index.rdf in tdiary-5.0.1

- old
+ new

@@ -1,749 +1,385 @@ <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="rss.css" type="text/css"?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja-JP"> - <channel rdf:about="http://localhost:9292/index.rdf"> - <title>まちゅダイアリー</title> - <link>http://localhost:9292/</link> - <xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/" /> - <description>RubyやLinuxなど、技術的に興味のあることについて。</description> - <dc:creator>kmachu</dc:creator> - <dc:rights>Copyright 2015 kmachu, copyright of comments by respective authors</dc:rights> - <image rdf:resource="http://friendfeed-api.com/v2/picture/kmachu" /> + <channel rdf:about="http://tdtds.lab.local:9393/index.rdf"> + <title>dev test</title> + <link>http://tdtds.lab.local:9393/</link> + <xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/" /> + <description></description> + <dc:creator>ただただし</dc:creator> + <dc:rights>Copyright 2016 ただただし &lt;t@tdtds.jp&gt;, copyright of comments by respective authors</dc:rights> + <image rdf:resource="http://sho.tdiary.net/images/banner.png" /> <items><rdf:Seq> -<rdf:li rdf:resource="http://localhost:9292/20151115.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20151004.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150520.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150516.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150508.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150505.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150420.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150412.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150330.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150329.html#p01"/> -<rdf:li rdf:resource="http://localhost:9292/20150328.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160415.html#p02"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160415.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160415.html#p03"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160310.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160119.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160119.html#p02"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20160126.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20151119.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20151119.html#c08"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20151119.html#c07"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20151119.html#c01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20150606.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20150514.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20150411.html#p01"/> +<rdf:li rdf:resource="http://tdtds.lab.local:9393/20150328.html#p01"/> </rdf:Seq></items> </channel> -<image rdf:about="http://friendfeed-api.com/v2/picture/kmachu"> - <title>まちゅダイアリー</title> - <url>http://friendfeed-api.com/v2/picture/kmachu</url> - <link>http://localhost:9292/</link> +<image rdf:about="http://sho.tdiary.net/images/banner.png"> + <title>dev test</title> + <url>http://sho.tdiary.net/images/banner.png</url> + <link>http://tdtds.lab.local:9393/</link> </image> - <item rdf:about="http://localhost:9292/20151115.html#p01"> -<link>http://localhost:9292/20151115.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20151115.html#p01" /> -<dc:date>2015-11-15T12:40:07+00:00</dc:date> -<title>new relicとmackerel.ioでサーバを監視するようにした</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>server</dc:subject> -<description>この日記はさくらのVPS上にCoreOS+docker環境で動かしている。同じホスト上で動かしているProduct Advertising API用リバースプロキシがたまに落ちることがある。いつもはdocker側で再起動するように設定しているけど、こないだは再起動せずにサ..</description> -<content:encoded><![CDATA[<h3>new relicとmackerel.ioでサーバを監視するようにした</h3></h3><p>この日記はさくらのVPS上にCoreOS+docker環境で動かしている。同じホスト上で動かしている<a href="http://rpaproxy.tdiary.org">Product Advertising API用リバースプロキシ</a>がたまに落ちることがある。いつもはdocker側で再起動するように設定しているけど、こないだは再起動せずにサービスが止まったままになっていた。</p> - -<p>そのせいで、<a href="http://sho.tdiary.net/20151109.html#p01">ただのにっきを落としてしまっていた</a>ので、これはまずいとサーバを監視するようにした(本当は落ちないように原因を調べないと…)。</p> - -<p>new relicは導入済みだったので、URL to monitorを設定して繋がらないときはアラートメールを送るようにした。試しにrpaproxyのdockerコンテナを停止してみて、ちゃんとアラートが上がることを確認した。</p> - -<p>合わせて、 @<a class="tweet-url username" href="https://twitter.com/tdtds" rel="nofollow">tdtds</a> から勧められた <a href="https://mackerel.io/">https://mackerel.io/</a> も導入した。docker環境なので、 mackerel のエージェントもdockerコンテナとしてインストールしている。手順は<a href="http://help-ja.mackerel.io/entry/advanced/docker">公式サイト</a>を参照。何も設定していなくても、ちゃんとdockerコンテナごとのCPUとメモリ使用量をカウントしてくれるのはとても便利。コンテナが落ちたときにアラートを上げられるといいのだけど、それはのちのちに。</p> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20151004.html#p01"> -<link>http://localhost:9292/20151004.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20151004.html#p01" /> -<dc:date>2015-10-04T14:03:24+00:00</dc:date> -<title>El Capitanにアップデートした</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>mac</dc:subject> -<description>サブ機ではEl Capitanのベータ版を試用していたけど、正式に公開されたのでメインのマシンもアップデートしてみた。App Storeからインストーラをダウンロードしてきて、..</description> -<content:encoded><![CDATA[<h3>El Capitanにアップデートした</h3></h3><p>サブ機ではEl Capitanのベータ版を試用していたけど、正式に公開されたのでメインのマシンもアップデートしてみた。App Storeからインストーラをダウンロードしてきて、特になにもなく更新完了。案の定homebrewが動かなくなっていたので、<a href="http://www.bunkei-programmer.net/entry/2015/10/02/000317">OS X El Capitanインストール後のエラー諸々の解決</a>を参考にして対処した。</p> - + <item rdf:about="http://tdtds.lab.local:9393/20160415.html#p02"> +<link>http://tdtds.lab.local:9393/20160415.html#p02</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160415.html#p02" /> +<dc:date>2016-04-22T20:52:35+09:00</dc:date> +<title>10年後のtDiaryStart Slideshow &gt;&gt;</title> +<dc:creator>ただただし</dc:creator> +<description>ただただし 10年先がどうなっているか 歳をとると未来のことが気にかかる 「この日記、おれが死んだらどうなるんだろう?」 IT業界で10年後の話をするヤツは 相当のアホか すごい天才のどちらか 最近あった日記がらみのできごと ループは人の業、再帰は神の業 結城さんとの出会い 古い話がちゃんと残って、つながっている!! 『 火星の人』読みました? 日誌(log) + 感情(emotion) = 日記(diary) 『火星の人』の面白さは「日記」の面白さ 10年後、Web日記を読むのは誰か 主な日記読者は人工知能 AlphaGo──人類が理解できない知性 人工知能は人類に興味を抱いてくれるかな? 人工知能に日記を読ませたい ポイントは「感情」 「人類」を知る手がかりとしての日記 10年、20年先でも読める日記を 日記永続化のハードル ストレージ ホスティング 名前解決 ストレージ インターネットの「すきま」を使う Dropbox、Google Drive、One Drive… つなぎあわせて冗長性のあるファイルシステムに見せる ホスティング / 名前解決 ..</description> +<content:encoded><![CDATA[<h3>10年後のtDiary<button class="slideshow">Start Slideshow &gt;&gt;</button></h3><p>ただただし</p> +<h4>10年先がどうなっているか</h4> <ul> -<li>最新版のcommand line toolsをインストール</li> -<li>/usr/localのパーミッションを変更</li> +<li>歳をとると未来のことが気にかかる</li> +<li>「この日記、おれが死んだらどうなるんだろう?」</li> +<li>IT業界で10年後の話をするヤツは<ul> +<li>相当のアホか</li> +<li>すごい天才のどちらか</li> +</ul></li> </ul> - -<p>メイン機ではEl CapitanでもGoogle IMEを使うつもり。新しい日本語入力は面白いけどどうも慣れなかった。Misson Controlは昔のように全部のウインドウが表示されるようになって、使いやすくなった。rubyも動いているし、特に支障なく移行できそう。</p> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150520.html#p01"> -<link>http://localhost:9292/20150520.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150520.html#p01" /> -<dc:date>2015-06-08T13:50:30+00:00</dc:date> -<title>さくらVPSでdocker環境 (2) 遠隔操作の落とし穴</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>sakura</dc:subject> -<dc:subject>docker</dc:subject> -<dc:subject>coreos</dc:subject> -<description>さくらVPSサーバにCoreOSをインストールできたので、いよいよ docker を使ってコンテナを立てていく。 dockerをどこから操作するか コンテナ上でアプリを動かすためには、以下のステップを経る。 GitHubなどからアプリのソースコードとDockerfileを入手する (git clone) ソースコードからdockerイメージを作る (docker build) dockerイメージを実行する (docker run) このうち、1と2のdockerイメージを作るところはDockerHubやQuay.ioなどのリポジトリサービスを使って自動化できる。とはいえ、自動化するためのDockerfileを作るまでは、何度もDockerfileを編集してbuildのサイクルを繰り返すことになる。 普通にやると、さくらVPSサーバにsshでログインし、ターミナル上でDockerfileを編集したりdockerコマンドを実行したりすることになる。でも、さくらVPSサーバにインストールしたCoreOSは軽量OSなので、ホスト側には最小限のパッケージしか入っていない。やっ..</description> -<content:encoded><![CDATA[<h3>さくらVPSでdocker環境 (2) 遠隔操作の落とし穴</h3></h3><p>さくらVPSサーバに<a href="http://localhost:9292/20150516.html#p01">CoreOSをインストールできた</a>ので、いよいよ docker を使ってコンテナを立てていく。</p> - -<h4>dockerをどこから操作するか</h4> - -<p>コンテナ上でアプリを動かすためには、以下のステップを経る。</p> - -<ol> -<li>GitHubなどからアプリのソースコードとDockerfileを入手する (git clone)</li> -<li>ソースコードからdockerイメージを作る (docker build)</li> -<li>dockerイメージを実行する (docker run)</li> -</ol> - -<p>このうち、1と2のdockerイメージを作るところはDockerHubやQuay.ioなどのリポジトリサービスを使って自動化できる。とはいえ、自動化するためのDockerfileを作るまでは、何度もDockerfileを編集してbuildのサイクルを繰り返すことになる。</p> - -<p>普通にやると、さくらVPSサーバにsshでログインし、ターミナル上でDockerfileを編集したりdockerコマンドを実行したりすることになる。でも、さくらVPSサーバにインストールしたCoreOSは軽量OSなので、ホスト側には最小限のパッケージしか入っていない。やっぱり慣れた環境から操作したいよね、ということでさくらVPSサーバ上のdockerを手元のMacから操作したくなる。幸い、dockerには遠隔から操作するための<a href="http://docs.docker.com/reference/api/docker_remote_api/">リモートAPI</a>が用意されているので、これを使えるようにする。ざっくり言うと、herokuコマンドを実行するようにdockerコマンドを実行したいということ。</p> - -<h4>落とし穴その1: 認証</h4> - -<p>ざっとググってみると、以下のような情報が見つかる。</p> - +<h4>最近あった日記がらみのできごと</h4> <ul> -<li><a href="https://coreos.com/docs/launching-containers/building/customizing-docker/#enable-the-remote-api-on-a-new-socket">Customizing docker</a></li> -<li><a href="http://knowledge.sakura.ad.jp/tech/2401/">boot2dockerを使わない。「Remote API」でローカルからクラウドのDockerを実行 - さくらのナレッジ</a></li> -<li><a href="http://nobusue.hatenablog.com/entry/2014/12/03/024226">Docker Remote APIを使ってみる #apijp - nobusueの日記</a></li> +<li><a href="http://msakai.jp/d/20070117.html#p01">ループは人の業、再帰は神の業</a></li> +<li><a href="https://twitter.com/hyuki/status/663929258138447875">結城さんとの出会い</a></li> +<li>古い話がちゃんと残って、つながっている!!</li> </ul> - -<p>まずはCoreOSの公式ドキュメントを参考に、 <code>/etc/systemd/system/docker-tcp.socket</code> を作成する。新たにTCP 2375ポートでサービスを待ち受けるための設定となる。</p> - -<pre><code>[Unit] -Description=Docker Socket for the API - -[Socket] -ListenStream=2375 -BindIPv6Only=both -Service=docker.service - -[Install] -WantedBy=sockets.target -</code></pre> - -<p>これはdockerがポート2375を直接bindするのではなく、systemdのsocket activationという仕組みを使っている。xinetdのようなもので、systemdを経由してdockerを呼び出している。そのため、systemctlコマンドを使ってこの設定を有効にする。</p> - -<pre><code># systemctl enable docker-tcp.socket -# systemctl stop docker -# systemctl start docker-tcp.socket -# systemctl start docker -</code></pre> - -<p>さくらVPSサーバ上からtcp経由でdockerに接続すると、ちゃんと応答が返ってくる。</p> - -<pre><code>$ docker -H 127.0.0.1:2375 ps -q -c1c5882fd47b -f0aa9b77616e -8a7cfde533d5 -</code></pre> - -<p>次に手元のMac環境からさくらVPS上のdockerに接続すると、同じように応答が返ってくる。</p> - -<pre><code>$ docker -H 160.16.81.168:2375 ps -q -c1c5882fd47b -f0aa9b77616e -8a7cfde533d5 -</code></pre> - -<p>これでめでたしめでたし、とはならない。dockerコマンドが実行できるということは、任意のイメージを作ったり、そのイメージを動かしたりできるということ。つまり、root権限をフリーで与えていることと同じになる。僕以外の誰かが勝手にイメージを立てて、Bitcoinの採掘やサーバの踏み台に使われかねないということだ。</p> - -<p>dockerデーモンを実行するときにも、ちゃんとTLSを使えと警告がでる。</p> - -<pre><code># docker -d -H tcp://0.0.0.0:2376 -INFO[0000] +job init_networkdriver() -INFO[0000] +job serveapi(tcp://0.0.0.0:2376) -INFO[0000] Listening for HTTP on tcp (0.0.0.0:2376) -INFO[0000] /!\ DON&#39;T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON&#39;T KNOW WHAT YOU&#39;RE DOING /!\ -INFO[0000] -job init_networkdriver() = OK (0) -</code></pre> - -<p><a href="http://docs.docker.com/reference/commandline/cli/#daemon-socket-option">Docker command line - Docker Documentation</a>にも、認証しないことの危険性について書かれている。</p> - -<blockquote> -<p>If you need to access the Docker daemon remotely, you need to enable the tcp Socket. Beware that the default setup provides un-encrypted and un-authenticated direct access to the Docker daemon - and should be secured either using the built in HTTPS encrypted socket, or by putting a secure web proxy in front of it.</p> -</blockquote> - -<p>ということで、ローカルの仮想化環境や、信頼できるネットワーク環境で動かすのでない限り、dockerを遠隔操作するときはTLSでクライアント認証は必須となる。ちなみに、boot2dockerはローカル環境にも関わらず、ちゃんとTLS認証を使うように設定されている。えらい。</p> - -<pre><code>$ boot2docker shellinit -Writing /Users/machu/.boot2docker/certs/boot2docker-vm/ca.pem -Writing /Users/machu/.boot2docker/certs/boot2docker-vm/cert.pem -Writing /Users/machu/.boot2docker/certs/boot2docker-vm/key.pem - export DOCKER_HOST=tcp://192.168.59.103:2376 - export DOCKER_CERT_PATH=/Users/machu/.boot2docker/certs/boot2docker-vm - export DOCKER_TLS_VERIFY=1 -</code></pre> - -<h4>落とし穴その2: systemdのsocket activation経由ではTLSが使えない</h4> - -<p>TLSクライアント認証の手順は、やっぱりdockerの公式ドキュメントが参考になる。</p> - -<p><a href="http://docs.docker.com/articles/https/">Running Docker with HTTPS - Docker Documentation</a></p> - -<p>やっていることはシンプル。</p> - -<ol> -<li>オレオレ認証局を作る</li> -<li>サーバ証明書を発行する</li> -<li>クライアント証明書を発行する</li> -</ol> - -<p>もちろん、サーバ証明書はサーバ側に、クライアント証明書はクライアント側に配置する。オレオレ認証局だけど、自分しか使わないので問題ない。</p> - -<p>TLSを使う設定は、コマンドラインからだとこう。 <code>--tldverify</code> などのオプションをつけている。</p> - -<pre><code>$ docker -d --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem \ - -H=0.0.0.0:2376 -</code></pre> - -<p>CoreOSなので、まずは2376ポートを待ち受けるように先ほど作った <code>docker-tcp.socket</code> ファイルを修正する。ListenStreamを2375から2376へ書き換えた。</p> - -<pre><code>[Unit] -Description=Docker Socket for the API - -[Socket] -ListenStream=2376 -BindIPv6Only=both -Service=docker.service - -[Install] -WantedBy=sockets.target -</code></pre> - -<p>docker起動時に <code>--tlsverify</code> などをオプションで渡せるようにするために、 <code>/etc/systemd/system/docker.service.d/tls.conf</code> ファイルを新たに作る。</p> - -<pre><code>[Service] -Environment=&#39;DOCKER_OPTS=--tlsverify --tlscacert=/home/core/tls/ca.pem --tlscert=/home/core/tls/server-cert.pem --tlskey=/home/core/tls/server-key.pem&#39; -</code></pre> - -<p>さっきと同じように設定ファイルの再読み込みとdockerサービスの再起動を実行。ちゃんとTLSオプション付きでdockerが実行されている。</p> - -<pre><code>$ ps aux | grep docker -root 29146 0.3 0.9 205164 18628 ? Ssl 00:16 0:00 docker --daemon --host=fd:// --tlsverify --tlscacert=/home/core/tls/ca.pem --tlscert=/home/core/tls/server-cert.pem --tlskey=/home/core/tls/server-key.pem -</code></pre> - -<p>ところが、TLSを有効にしているはずなのに、クライアントからは接続できない。<code>tls: oversized record received</code> というエラーメッセージが出ている。</p> - -<pre><code>$ env | grep DOCKER -DOCKER_HOST=tcp://160.16.81.168:2376 -DOCKER_TLS_VERIFY=1 -$ docker ps -a -FATA[0001] An error occurred trying to connect: Get https://160.16.81.168:2376/v1.18/containers/json?all=1: tls: oversized record received with length 20527 -</code></pre> - -<p>しかもTLSを使わないと、接続できてしまう。</p> - -<pre><code>$ unset DOCKER_TLS_VERIFY -$ env | grep DOCKER -DOCKER_HOST=tcp://160.16.81.168:2376 -$ docker ps -q -c1c5882fd47b -f0aa9b77616e -8a7cfde533d5 -</code></pre> - -<p>オプションの指定が間違っているのだろうか、とここでかなり悩んだ。</p> - -<h5>問題の切り分け</h5> - -<p>boot2docker環境を参考にして、systemdを使わずにdockerを起動した場合と比べてみる。</p> - +<h4>『<a href="http://www.amazon.co.jp/%E7%81%AB%E6%98%9F%E3%81%AE%E4%BA%BA-%E3%82%A2%E3%83%B3%E3%83%87%E3%82%A3-%E3%82%A6%E3%82%A3%E3%82%A2%E3%83%BC-ebook/dp/B00O1VJZLO%3FSubscriptionId%3D1ZYN93KGC2KDTSNXKHG2%26tag%3Dcshs-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00O1VJZLO"><img class="amazon" src="https://images-na.ssl-images-amazon.com/images/I/51DLzSbrC9L.jpg" +height="500" width="335" alt=""> +火星の人</a>』読みました?</h4> <ul> -<li>systemdのsocket activationを使った場合 (<code>--host=fd://</code>) - +<li>日誌(log) + 感情(emotion) = 日記(diary)</li> +<li>『火星の人』の面白さは「日記」の面白さ</li> +</ul> +<h4>10年後、Web日記を読むのは誰か</h4> <ul> -<li>TLSを使わない … 接続できる</li> -<li>TLSを使う … 接続できない</li> -</ul></li> -<li>dockerデーモンを直接起動した場合 (<code>--host=tcp://0.0.0.0:2376</code>) - +<li>主な日記読者は人工知能</li> +<li>AlphaGo──人類が理解できない知性</li> +<li>人工知能は人類に興味を抱いてくれるかな?</li> +</ul> +<h4>人工知能に日記を読ませたい</h4> <ul> -<li>TLSを使わない … 接続できる</li> -<li>TLSを使う … 接続できる</li> -</ul></li> +<li>ポイントは「感情」</li> +<li>「人類」を知る手がかりとしての日記</li> +<li>10年、20年先でも読める日記を</li> </ul> - -<p>どうも、systemdのsocket activation経由の場合だけ、TLSが有効にならないようだ。</p> - -<h5>socket activation経由ではTLSが有効にならない理由</h5> - -<p>試行錯誤した挙句、ふと気がついた。 systemdを経由してdockerを起動する場合、docker側は <code>fd://</code> というプロトコルで待ち受けている。ローカル接続でのUNIX domain socketや遠隔接続でのTCPソケットはsystemd側が受け付けてdockerに渡す仕組み。図にするとこうなる。</p> - -<pre><code> systemd - +-------------------+ -docker client &lt;- (unix domain socket) -&gt; | docker.socket | - | | &lt;- (fd://) -&gt; docker server -docker client &lt;- (tcp port 4376) -&gt; | docket-tcp.socket | - +-------------------+ -</code></pre> - -<p>一方、systemdを経由せずにdockerを起動する場合は、こうなる。</p> - -<pre><code> docker server - +---------------------------+ -docker client &lt;- (unix domain socket) -&gt; | --host=fd:// | - | | -docker client &lt;- (tcp port 4376) -&gt; | --host=tcp://0.0.0.0:2376 | - +---------------------------+ -</code></pre> - -<p>TLSが有効になるのは、遠隔接続するTCPソケットの場合のみ。UNIXドメインソケットを使うローカル接続ではTLSは使わない。dockerデーモンになったつもりで考えてみると、systemdから <code>fd://</code> 経由で接続を受け取ると、その接続がUNIXドメインソケットからきたのか、それともTCPソケットから来たのか分からないのではないか。分からないから、TLSが有効にならないのではないか。</p> - -<p><a href="https://github.com/docker/docker/blob/d9ed3165228b60cb89c31d0d66b99e01ab83eb3e/api/server/server_linux.go">dockerのソースコード (server_linux.go)</a>を読むと、プロトコルごとに分岐していて、tcpソケットの場合のみtlsverifyの警告をだしている。</p> - -<div class="highlight"><pre> <span class="k">switch</span> <span class="nx">proto</span> <span class="p">{</span> - <span class="k">case</span> <span class="s">&quot;fd&quot;</span><span class="p">:</span> - <span class="nx">ls</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">systemd</span><span class="p">.</span><span class="nx">ListenFD</span><span class="p">(</span><span class="nx">addr</span><span class="p">)</span> - <span class="c1">// 中略</span> - <span class="k">case</span> <span class="s">&quot;tcp&quot;</span><span class="p">:</span> - <span class="k">if</span> <span class="p">!</span><span class="nx">s</span><span class="p">.</span><span class="nx">cfg</span><span class="p">.</span><span class="nx">TlsVerify</span> <span class="p">{</span> - <span class="nx">logrus</span><span class="p">.</span><span class="nx">Warn</span><span class="p">(</span><span class="s">&quot;/!\\ DON&#39;T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON&#39;T KNOW WHAT YOU&#39;RE DOING /!\\&quot;</span><span class="p">)</span> - <span class="p">}</span> - <span class="k">if</span> <span class="nx">l</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">NewTcpSocket</span><span class="p">(</span><span class="nx">addr</span><span class="p">,</span> <span class="nx">tlsConfigFromServerConfig</span><span class="p">(</span><span class="nx">s</span><span class="p">.</span><span class="nx">cfg</span><span class="p">),</span> <span class="nx">s</span><span class="p">.</span><span class="nx">start</span><span class="p">);</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">err</span> - <span class="p">}</span> - <span class="c1">// 中略</span> - <span class="k">case</span> <span class="s">&quot;unix&quot;</span><span class="p">:</span> - <span class="k">if</span> <span class="nx">l</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">NewUnixSocket</span><span class="p">(</span><span class="nx">addr</span><span class="p">,</span> <span class="nx">s</span><span class="p">.</span><span class="nx">cfg</span><span class="p">.</span><span class="nx">SocketGroup</span><span class="p">,</span> <span class="nx">s</span><span class="p">.</span><span class="nx">start</span><span class="p">);</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">err</span> - <span class="p">}</span> - <span class="k">default</span><span class="p">:</span> - <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Errorf</span><span class="p">(</span><span class="s">&quot;Invalid protocol format: %q&quot;</span><span class="p">,</span> <span class="nx">proto</span><span class="p">)</span> - <span class="p">}</span> -</pre></div> -<h5>CoreOS上でdockerを遠隔操作するための設定</h5> - -<p>話が長くなった。systemdを経由するとTLSが使えないのが分かったので、TCPソケットはdockerが直接待ち受けるようにすればいい。</p> - -<p>まず、 <code>docker-tcp.socket</code> は無効化し、ファイルも削除する。</p> - -<pre><code># docker disable docker-tcp.socket -# rm /etc/systemd/system/docker-tcp.socket -</code></pre> - -<p>次に、 <code>/etc/systemd/system/docker.service.d/tls.conf</code> を編集し、起動オプションに <code>--host=tcp://0.0.0.0:2376</code> を追加する。</p> - -<pre><code>[Service] -Environment=&#39;DOCKER_OPTS=--host=tcp://0.0.0.0:2376 --tlsverify --tlscacert=/home/core/tls/ca.pem --tlscert=/home/core/tls/server-cert.pem --tlskey=/home/core/tls/server-key.pem&#39; -</code></pre> - -<p>dockerデーモンを再起動して、TCPソケットでの待ち受けが有効になっている (--host=tcp://) ことを確認する。</p> - -<pre><code># systemctl daemon-reload -# systemctl stop docker -# systemctl start docker -# systemctl status docker -● docker.service - Docker Application Container Engine - Loaded: loaded (/usr/lib64/systemd/system/docker.service; enabled; vendor preset: disabled) - Drop-In: /etc/systemd/system/docker.service.d - └─tls.conf - Active: active (running) since Mon 2015-06-08 09:13:50 JST; 1min 44s ago - Docs: http://docs.docker.com - Main PID: 14729 (docker) - Memory: 17.1M - CGroup: /system.slice/docker.service - ├─14729 docker --daemon --host=fd:// --host=tcp://0.0.0.0:2376 --tlsverify --tlscacert=/home/core/tls/ca.pem ... - └─14768 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.2 -container-port 80 -</code></pre> - -<p>これで手元のMac環境からもTLS接続でさくらVPSサーバ上のdockerに接続できるようになった。もちろん、クライアント証明書がない環境からは繋がらない。</p> - -<pre><code>$ env | grep DOCKER -DOCKER_HOST=tcp://160.16.81.168:2376 -DOCKER_TLS_VERIFY=1 -$ docker ps -q -c1c5882fd47b -f0aa9b77616e -8a7cfde533d5 -</code></pre> - -<p>dockerデーモンは常時起動しているので、systemdを経由して起動するメリットはあまりない…はず。</p> - -<h4>まとめ</h4> - -<p>長くなったけど、CoreOS上でdockerを遠隔操作する場合は、以下2点に気をつけなければいけない。</p> - -<ol> -<li>必ずTLSを有効にすること (<a href="https://coreos.com/docs/launching-containers/building/customizing-docker/#enable-the-remote-api-on-a-new-socket">CoreOSサイトのサンプル</a>は参考にしない)</li> -<li>TCP接続はsystemdを経由せず、docker側で待ち受ける</li> -</ol> - -<p>つまり、以下の内容の <code>/etc/systemd/system/docker.service.d/tls.conf</code> を作ればいい。まとめちゃうと簡単だね。</p> - -<pre><code>[Service] -Environment=&#39;DOCKER_OPTS=--host=tcp://0.0.0.0:2376 --tlsverify --tlscacert=/home/core/tls/ca.pem --tlscert=/home/core/tls/server-cert.pem --tlskey=/home/core/tls/server-key.pem&#39; - -</code></pre> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150516.html#p01"> -<link>http://localhost:9292/20150516.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150516.html#p01" /> -<dc:date>2015-06-06T02:59:51+00:00</dc:date> -<title>さくらVPSでdocker環境 (1) CoreOSをインストール</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>sakura</dc:subject> -<dc:subject>docker</dc:subject> -<dc:subject>coreos</dc:subject> -<description>前の日記に書いたとおり、引越し後のサーバはdocker環境で動かしたい。boot2dockerを使って docker にも慣れてきたので、引越し先の環境を準備する。 引越し先を選ぶ (VPS vs クラウドIaaS) まずはサーバをどこで動かすか。このままさくらのVPSを使い続けてもいいし、AWSやDigitalOceanなどのクラウドIaaSを使う選択肢もある。ここは、趣味開発のためのVPS/クラウド活用術 // Speaker Deckが参考になった。 サーバ環境を頻繁に変更するなら、セットアップが楽で従量課金のAWSやDigitalOceanを使うのが良さそう。一方で、常に動かしておくなら、さくらのVPSがコストパフォーマンスが良い(今は円安なので特に価格差ある)。今回はdocker環境を作ろうとしているので、さくらVPS + dockerで複数コンテナを動かすのがいいと判断した。ということで、さくらVPSの2GB + SSD 50GBのプランを選択した。コストは17,380円/年(税抜)。 OSを選ぶ (定番OS vs 軽量OS) 環境が決まったので、次はOSを選..</description> -<content:encoded><![CDATA[<h3>さくらVPSでdocker環境 (1) CoreOSをインストール</h3></h3><p><a href="http://localhost:9292/20150505.html#p01">前の日記</a>に書いたとおり、引越し後のサーバはdocker環境で動かしたい。boot2dockerを使って docker にも慣れてきたので、引越し先の環境を準備する。</p> - -<h4>引越し先を選ぶ (VPS vs クラウドIaaS)</h4> - -<p>まずはサーバをどこで動かすか。このままさくらのVPSを使い続けてもいいし、AWSやDigitalOceanなどのクラウドIaaSを使う選択肢もある。ここは、<a href="https://speakerdeck.com/mackee/kuraudohuo-yong-shu">趣味開発のためのVPS/クラウド活用術 // Speaker Deck</a>が参考になった。</p> - -<p>サーバ環境を頻繁に変更するなら、セットアップが楽で従量課金のAWSやDigitalOceanを使うのが良さそう。一方で、常に動かしておくなら、さくらのVPSがコストパフォーマンスが良い(今は円安なので特に価格差ある)。今回はdocker環境を作ろうとしているので、さくらVPS + dockerで複数コンテナを動かすのがいいと判断した。ということで、さくらVPSの2GB + SSD 50GBのプランを選択した。コストは17,380円/年(税抜)。</p> - -<h4>OSを選ぶ (定番OS vs 軽量OS)</h4> - -<p>環境が決まったので、次はOSを選ぶ。これまでは Ubuntu 14.04 LTS を使っていた。選択肢としては Ubuntu や CentOS のような定番OSを使うか、 CoreOS のような軽量OSを使うか。</p> - +<h4>日記永続化のハードル</h4> <ul> -<li>VPS + コンテナ環境で動かすのでメモリ貴重</li> -<li>個人サーバなので運用を楽にしたい</li> -<li>個人サーバーなので新しいモノを試してみたい</li> +<li>ストレージ</li> +<li>ホスティング</li> +<li>名前解決</li> </ul> - -<p>という理由から、軽量OSを使ってみることにする。最初はUbuntuつながりで<a href="https://developer.ubuntu.com/en/snappy/">Snappy Ubuntu</a>を試してみた。ところが、思った以上に自由度がなく、これはどうも苦労しそう。定番のCoreOSは分散環境を前提としているのが気になったけど、etcd や fleet などの分散技術を使わずにシングルホストで運用してみることにした。</p> - -<p>軽量OSの選定では、<a href="http://thinkit.co.jp/story/2015/03/06/5672">Docker向けの軽量Linux OS 主要3種を比較する | Think IT(シンクイット)</a>が参考になった。</p> - -<h4>さくらのVPSにCoreOSをインストール</h4> - -<p>さくらのVPSにCoreOSをするためには、2つ気をつけなければいけないポイントがある。</p> - +<h4>ストレージ</h4> <ul> -<li><a href="http://vps.sakura.ad.jp/specification/#target_os">公式から提供されるカスタムOS</a>にCoreOSがない</li> -<li>CoreOSはGUIインストーラがない (cloud-configファイルにインストール設定を記述する)</li> +<li>インターネットの「すきま」を使う</li> +<li>Dropbox、Google Drive、One Drive…</li> +<li>つなぎあわせて冗長性のあるファイルシステムに見せる</li> </ul> - -<p>そこで、インストール手順はこうなる。</p> - -<ol> -<li><a href="https://help.sakura.ad.jp/app/answers/detail/a_id/2405">ISOイメージインストール</a>機能を使ってCoreOSのインストールイメージをアップデート</li> -<li>インストーラを起動し、VNCコンソール経由で接続(ネットワーク設定が終わっていないのでsshでは繋がらない)</li> -<li>インストール設定を記述したcloud-configファイルを作成し、CoreOSをインストールする</li> -</ol> - -<p>ところが、VNCコンソールではキーボードが英字配列だったり、コピペができなかったりと、cloud-configファイルを作るのが大変。そこで、2のインストーラを起動した時点でVNCコンソールからネットワーク設定を手動で追加する。coreアカウントにパスワードを設定して、一時的にパスワードでログインできるようにしている。</p> - -<pre><code>$ sudo ifconfig eth0 160.16.81.168 netmask 255.255.254.0 -$ sudo route add default gw 160.16.80.1 -$ sudo vim /etc/resolv.conf -$ sudo passwd core -</code></pre> - -<p>サーバへ繋がるようになったら、ローカル環境で作ったcloud-configファイルをサーバ側へアップロードし、インストーラを起動する。以下のコマンドは手元のMacBook Proから実行している。</p> - -<pre><code>$ scp cloud-config.yml core@160.16.81.168: -$ ssh core@160.16.81.168 -$ sudo coreos-install -d /dev/vda -c cloud-config.yml -C Stable -</code></pre> - -<p>cloud-configファイルの中身はこれ。static.networkというネットワーク設定が書かれたunitsの作成と、ssh接続のための公開鍵の登録を指示している。</p> - -<pre><code>#cloud-config - -coreos: - units: - - name: static.network - content: | - [Match] - Name=eth0 - - [Network] - Address=160.16.81.168/23 - Gateway=160.16.80.1 - DNS=210.188.224.10 - DNS=210.188.224.11 - -ssh_authorized_keys: - - ssh-dss AAAAB3NzaC1kc3MAAACBAJdjSrRt+g7qk6McucfUo9IYGkQ1eMnli5qyT3GjYwxw1DxL8MrbgDtjbL5PLSa0n+c9IAiWbnh3hsRpQd7xU6mqAFhjfTzNS5tFF/dq4o6Pz1OxiBoqwq0UJL4qzgAvjMzTflNCtwml3X4ObJMgRWRuARa1F2+ukRJapBKjOR3pAAAAFQCp99SugvMxgXo4w9QlXCboBUPqcwAAAIAPbmr1TLsyaicjEAE18vYrytxJ+GQjztv3LDXBIdb6CZMO1o8UyuiodXfT3kGk6m84gPwJzf/dQdFBsrfI3fhRxL5cQ46c47jIbtp3YBUyzhaTmiSOX+kh05sXeJPdCapjmMnWJxZAbHkPvkM0gaNt2W1HG6qIYf76mFl5qHZ8EwAAAIBZpbYWbSUa0RM3Tic9YrzF2ANK7KeYjZpkPgZG7SNEyojiFWUQxJCipRq51rLPtuCN2m8zHt+0QaHBv+OldevIRIEAc1eARM3gqlzBGFEyY1qFnzbtkNHCyQWlYP3crsv0ZTa2FWPmgzP/K5+0moTZ+XzK3lz9JGEv8yAWHgM6BA== kohei@machu.jp -</code></pre> - -<p>ちなみにunitsはsystemdの機能の一部。ここの設定は、インストール後には <code>/etc/systemd/network/static.network</code> となる。この辺の設定は、CoreOSとcloud-initとsystemdの仕組みが混在していて、慣れるまでは混乱しちゃう。</p> - +<h4>ホスティング / 名前解決</h4> <ul> -<li><a href="http://www.freedesktop.org/software/systemd/man/systemd.network.html">systemd.network — Network configuration</a></li> -<li><a href="https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/">Customize with Cloud-Config</a></li> +<li>基金による運用?</li> +<li>Internet Archiveなどが参考になりそう</li> </ul> +<p><a href="http://tdtds.lab.local:9393/20160415.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160415.html#p01"> +<link>http://tdtds.lab.local:9393/20160415.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160415.html#p01" /> +<dc:date>2016-04-22T17:30:58+09:00</dc:date> +<title>よけいなセクション(1)</title> +<dc:creator>ただただし</dc:creator> +<description>前方に余分なセクションがあってもslideshowが動くことを確認する。</description> +<content:encoded><![CDATA[<h3>よけいなセクション(1)</h3><p>前方に余分なセクションがあってもslideshowが動くことを確認する。</p> +<p><a href="http://tdtds.lab.local:9393/20160415.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160415.html#p03"> +<link>http://tdtds.lab.local:9393/20160415.html#p03</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160415.html#p03" /> +<dc:date>2016-04-22T17:30:58+09:00</dc:date> +<title>よけいなセクション(2)</title> +<dc:creator>ただただし</dc:creator> +<description>後方に余分なセクションがあってもslideshowが動くことを確認する。</description> +<content:encoded><![CDATA[<h3>よけいなセクション(2)</h3><p>後方に余分なセクションがあってもslideshowが動くことを確認する。</p> +<p><a href="http://tdtds.lab.local:9393/20160415.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160310.html#p01"> +<link>http://tdtds.lab.local:9393/20160310.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160310.html#p01" /> +<dc:date>2016-03-10T16:44:39+09:00</dc:date> +<title>test section</title> +<dc:creator>ただただし</dc:creator> +<dc:subject>test</dc:subject> +<description>hoge*1.</description> +<content:encoded><![CDATA[<h3>test section</h3><p>hoge<span class="footnote">*1</span>.</p><div class="footnote"> + <p class="footnote">*1&#160;fuga!!</p> +</div> -<p>インストール処理が完了したらサーバを再起動。再起動後にちゃんとsshできればインストール成功。</p> - -<p>さくらVPSへのインストール手順は、以下のサイトが参考になった。</p> - +<p><a href="http://tdtds.lab.local:9393/20160310.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160119.html#p01"> +<link>http://tdtds.lab.local:9393/20160119.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160119.html#p01" /> +<dc:date>2016-01-26T17:36:59+09:00</dc:date> +<title>RUBY_VERSION</title> +<dc:creator>ただただし</dc:creator> +<description>2.3.1</description> +<content:encoded><![CDATA[<h3>RUBY_VERSION</h3><p>2.3.1</p> +<p><a href="http://tdtds.lab.local:9393/20160119.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160119.html#p02"> +<link>http://tdtds.lab.local:9393/20160119.html#p02</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160119.html#p02" /> +<dc:date>2016-01-26T17:36:59+09:00</dc:date> +<title>$LOAD_PATH</title> +<dc:creator>ただただし</dc:creator> +<description>/home/sho/src/tdiary/core/lib/../misc/lib /home/sho/src/tdiary/core/lib /home/sho/src/tdiary/io/mongodb/lib /home/sho/src/tdiary/contrib/lib /home/sho/.rbenv/rbenv.d/exec/gem-rehash /home/sho/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/bundler-1.12.4/lib /home/sho/src/tdiary/core/vendor/bundle/gems/test-unit-3.1.9/lib /home/sho/src/tdiary/core/vendor/bundle/gems/tdiary-style-gfm-0.3.0/lib /home/sho/src/tdiary/core/vendor/bundle/gems/twitter-text-1.13.4/lib /home/sho/src/tdiary/core/vendor/b..</description> +<content:encoded><![CDATA[<h3>$LOAD_PATH</h3><p><pre> +/home/sho/src/tdiary/core/lib/../misc/lib +/home/sho/src/tdiary/core/lib +/home/sho/src/tdiary/io/mongodb/lib +/home/sho/src/tdiary/contrib/lib +/home/sho/.rbenv/rbenv.d/exec/gem-rehash +/home/sho/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/bundler-1.12.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/test-unit-3.1.9/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/tdiary-style-gfm-0.3.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/twitter-text-1.13.4/lib +/home/sho/src/tdiary/core/vendor/bundle/bundler/gems/tdiary-cache-null-7d8f4a508a20/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/tdiary-5.0.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/sqlite3-1.3.11/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/sqlite3-1.3.11 +/home/sho/src/tdiary/core/vendor/bundle/gems/sprockets-3.6.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/sequel-4.34.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/selenium-webdriver-2.53.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/websocket-1.2.3/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rubyzip-1.2.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/ruby-pushbullet-0.1.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rspec-3.4.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rspec-mocks-3.4.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rspec-expectations-3.4.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rspec-core-3.4.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rspec-support-3.4.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rouge-1.10.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/redcarpet-3.3.4/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/redcarpet-3.3.4 +/home/sho/src/tdiary/core/vendor/bundle/gems/racksh-1.0.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/puma-3.4.0/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/puma-3.4.0 +/home/sho/src/tdiary/core/vendor/bundle/gems/power_assert-0.3.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/pit-0.0.7/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/mongoid-5.1.3/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/origin-2.2.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/mongo-2.2.5/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/mail-2.6.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/launchy-2.4.3/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/jasmine-2.4.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/phantomjs-2.1.1.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/jasmine-core-2.4.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/hikidoc-0.1.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/github-markdown-0.6.9/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/github-markdown-0.6.9 +/home/sho/src/tdiary/core/vendor/bundle/gems/fastimage-2.0.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/emot-0.0.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/diff-lcs-1.2.5/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/coveralls-0.7.12/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/thor-0.19.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/term-ansicolor-1.3.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/tins-1.10.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/simplecov-0.9.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/simplecov-html-0.9.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/docile-1.1.5/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rest-client-1.8.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/netrc-0.11.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/http-cookie-1.0.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/domain_name-0.5.20160310/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/unf-0.1.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/unf_ext-0.0.7.2/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/unf_ext-0.0.7.2 +/home/sho/src/tdiary/core/vendor/bundle/gems/multi_json-1.12.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/concurrent-ruby-1.0.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/childprocess-0.5.9/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/ffi-1.9.10/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/ffi-1.9.10 +/home/sho/src/tdiary/core/vendor/bundle/gems/capybara-2.7.1/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/xpath-2.0.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rack-test-0.6.3/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rack-1.6.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/nokogiri-1.6.7.2/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/nokogiri-1.6.7.2 +/home/sho/src/tdiary/core/vendor/bundle/gems/mini_portile2-2.0.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/mime-types-2.99.2/lib +/home/sho/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/bundler-1.12.4/lib/gems/bundler-1.12.4/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/bson-4.1.1/lib +/home/sho/src/tdiary/core/vendor/bundle/extensions/x86_64-linux/2.3.0-static/bson-4.1.1 +/home/sho/src/tdiary/core/vendor/bundle/gems/addressable-2.4.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/activemodel-4.2.6/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/builder-3.2.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/activesupport-4.2.6/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/tzinfo-1.2.2/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/thread_safe-0.3.5/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/minitest-5.9.0/lib +/home/sho/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/json-1.8.3/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/i18n-0.7.0/lib +/home/sho/src/tdiary/core/vendor/bundle/gems/rake-11.1.2/lib +/home/sho/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0 +/home/sho/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0/x86_64-linux +/home/sho/.rbenv/versions/2.3.1/lib/ruby/site_ruby +/home/sho/.rbenv/versions/2.3.1/lib/ruby/vendor_ruby/2.3.0 +/home/sho/.rbenv/versions/2.3.1/lib/ruby/vendor_ruby/2.3.0/x86_64-linux +/home/sho/.rbenv/versions/2.3.1/lib/ruby/vendor_ruby +/home/sho/.rbenv/versions/2.3.1/lib/ruby/2.3.0 +/home/sho/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-linux +</pre></p> +<p><a href="http://tdtds.lab.local:9393/20160119.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20160126.html#p01"> +<link>http://tdtds.lab.local:9393/20160126.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20160126.html#p01" /> +<dc:date>2016-01-26T17:27:55+09:00</dc:date> +<title>サブタイトルのないスタイルだとtit..</title> +<dc:creator>ただただし</dc:creator> +<description>サブタイトルのないスタイルだとtitle_tagプラグインの動作がおかしい。これはなんとかしなくては。 とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな?</description> +<content:encoded><![CDATA[<p>サブタイトルのないスタイルだとtitle_tagプラグインの動作がおかしい。これはなんとかしなくては。</p> +<p>とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? とりあえず、サブタイトルが空だったら連結しないようにすればいいかな? </p> +<p><a href="http://tdtds.lab.local:9393/20160126.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20151119.html#p01"> +<link>http://tdtds.lab.local:9393/20151119.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20151119.html#p01" /> +<dc:date>2015-12-18T18:08:38+09:00</dc:date> +<title>rss feed test</title> +<dc:creator>ただただし</dc:creator> +<dc:subject>test1</dc:subject> +<description>ああああ いいいいい</description> +<content:encoded><![CDATA[<h3>rss feed test</h3><p>ああああ</p> +<p>いいいいい</p> +<p><a href="http://tdtds.lab.local:9393/20151119.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20151119.html#c08"> +<link>http://tdtds.lab.local:9393/20151119.html#c08</link> +<dc:date>2015-11-19T16:29:43+09:00</dc:date> +<title>2015-11-19のツッコミ[8] (ただただし)</title> +<dc:creator>ただただし</dc:creator> +<description>test8</description> +<content:encoded><![CDATA[test8]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20151119.html#c07"> +<link>http://tdtds.lab.local:9393/20151119.html#c07</link> +<dc:date>2015-11-19T16:29:10+09:00</dc:date> +<title>2015-11-19のツッコミ[7] (ただただし)</title> +<dc:creator>ただただし</dc:creator> +<description>test7</description> +<content:encoded><![CDATA[test7]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20151119.html#c01"> +<link>http://tdtds.lab.local:9393/20151119.html#c01</link> +<dc:date>2015-11-19T15:44:25+09:00</dc:date> +<title>2015-11-19のツッコミ[1] (ただただし)</title> +<dc:creator>ただただし</dc:creator> +<description>test1</description> +<content:encoded><![CDATA[test1]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20150606.html#p01"> +<link>http://tdtds.lab.local:9393/20150606.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20150606.html#p01" /> +<dc:date>2015-06-11T01:40:03+00:00</dc:date> +<title>「巧妙な標的型攻撃メールの例」は間違い探しクイズではない</title> +<dc:creator>ただただし</dc:creator> +<dc:subject>security</dc:subject> +<description>ここしばらく日本年金機構からの個人情報流出で大騒ぎだけど、そのさなかに上原哲太郎さんがTwitterに投下した「標的型攻撃メールの例」に対して、例によって「こんなのひっかかる方が悪い」的なレスがついてるのを眺めて苦笑いをしたり。 怪しいメール開く方がアホだろ見たいな話が出回っているようなので、7年ほど前に私が受け取ったメールを晒しておきますね(一部隠してます)。これを「怪しい」って判断できる人は大したもんだと思います。今はもっと巧妙だし。 pic.twitter.com/SwKNkH4t9s 上原 哲太郎 (@tetsutalow) 2015, 6月 2 でも今日、この話題をかみさんと話して、そもそも前提条件が共有されていないのが原因らしいね、ということになった。140文字制限のTwitterではよくある話ではある*1。なるほどなるほど。 こういう情報を提示されると、人は「自分の観察力に対する挑戦」だと認識して対峙する。クイズにチャレンジする感じで。でもこれ、 自分が標的になっているわけではない あらかじめ「これは偽物ですよ」という正解が与えられている というかなりぬる~い条..</description> +<content:encoded><![CDATA[<h3>「巧妙な標的型攻撃メールの例」は間違い探しクイズではない</h3><p>ここしばらく日本年金機構からの個人情報流出で大騒ぎだけど、そのさなかに上原哲太郎さんがTwitterに投下した「標的型攻撃メールの例」に対して、例によって「こんなのひっかかる方が悪い」的なレスがついてるのを眺めて苦笑いをしたり。</p> +<p><blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">怪しいメール開く方がアホだろ見たいな話が出回っているようなので、7年ほど前に私が受け取ったメールを晒しておきますね(一部隠してます)。これを「怪しい」って判断できる人は大したもんだと思います。今はもっと巧妙だし。 <a href="http://t.co/SwKNkH4t9s">pic.twitter.com/SwKNkH4t9s</a></p>&#8212; 上原 哲太郎 (@tetsutalow) <a href="https://twitter.com/tetsutalow/status/605864385265819648">2015, 6月 2</a></blockquote> +<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p> +<p>でも今日、この話題をかみさんと話して、そもそも前提条件が共有されていないのが原因らしいね、ということになった。140文字制限のTwitterではよくある話ではある<span class="footnote">*1</span>。なるほどなるほど。</p> +<p>こういう情報を提示されると、人は「自分の観察力に対する挑戦」だと認識して対峙する。クイズにチャレンジする感じで。でもこれ、</p> <ul> -<li><a href="http://qiita.com/yujiod/items/dc154120c4df2e938111">さくらのVPSにCoreOSをインストールしてDocker専用機にする - Qiita</a></li> -<li><a href="http://qiita.com/inTheRye/items/fea3c595cbc4f6f482b2">CoreOSをさくらVPSサーバに入れようとして嵌ったのでメモ - Qiita</a></li> -<li><a href="http://mix3.github.io/blog/2015/05/01/20150501/">そうだ docker触れる環境を作ろう - 萌えキャラとは何だったのか</a></li> +<li>自分が標的になっているわけではない</li> +<li>あらかじめ「これは偽物ですよ」という正解が与えられている</li> </ul> - -<h4>タイムゾーンの設定</h4> - -<p>CoreOSのタイムゾーンはUTCに設定されている。タイムゾーンを変えるのは推奨されていない(複数ホストで動かした時にタイムゾーンが違うとトラブルの元になるらしい)ようだけど、変えるのであれば以下のコマンドを実行する。</p> - -<pre><code>$ sudo timedatectl set-timezone Asia/Tokyo -$ date -Sat May 16 23:04:17 JST 2015 -</code></pre> - -<h4>更新チャネルの変更</h4> - -<p>CoreOSのStable版をインストールしたら、dockerのバージョンが古かったのでα版を使うように変更した。更新チャネルの変更は、以下のサイトの手順を参考にした。</p> - +<p>というかなりぬる~い条件下の話なんだよね。解けて当然の低難易度クイズなので、わかったからといってドヤ顔されても困る。実際の標的型攻撃はこの逆で、</p> <ul> -<li><a href="http://qiita.com/spesnova/items/38239b2faee209009b09">CoreOS の自動アップデートを理解する</a></li> -<li><a href="http://qiita.com/spesnova/items/ef6adcae6c63cee18637">CoreOS を手動でアップデートする</a></li> -<li><a href="https://coreos.com/docs/cluster-management/setup/switching-channels/">Switching Release Channels</a></li> +<li>自分(の所属する組織)が標的になっている</li> +<li>これが正規のメールか攻撃メールかはわからない<span class="footnote">*2</span></li> </ul> +<p>という状況下で発生するのだ。条件や文脈がぜんぜん違うし、だいたいクイズ気取りでみている人は<strong>自分が見破ったからといって組織の全員が見破れるとは限らない</strong>という点を見過ごしがちだ。「見ればわかる」と言ったところで、うっかり開いてしまう人はゼロにはならないし(ならないんですよ)、そういう人が萎縮して報告しないような空気になる方がよほど怖い(という話の続きは<a href="http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2015:0603_01">年金機構の情報流出を見てちょっと思ったこと</a>を読むとよい)。</p> +<p>なので、セキュリティ関係各位は標的型攻撃の例として「ちょっと隙のあるメール」を見せるの、やめた方がいいんじゃないかと思う。実際はほぼ隙のない巧妙極まりないメールが使われてるんだし<span class="footnote">*3</span>、どうせ見せるなら「自分はぜったいだまされない」という根拠のない自信を打ち砕くくらい本当に見破れないクラスのヤツを出すべきなのではないかなぁ。</p><div class="footnote"> + <p class="footnote">*1&#160;とはいえ「7年ほど前」とか「今はもっと巧妙」のようなちゃんと書かれていることも無視されがちなのだけど、まぁこれもTwitterらしいといえばらしい。人は読みたい部分しか読まないのだ。</p> + <p class="footnote">*2&#160;情報リテラシーの低い人が「正規だけど怪しさ満点のメール」を送ってくることは普通にあるからね。</p> + <p class="footnote">*3&#160;年金機構に届いたのは隙だらけだったようですけどね……</p> +</div> -<h4>使ってみる</h4> - -<p>CoreOSはsystemdを採用している。サービスの起動やログの表示などの方法がだいぶ違うので、まずはsystemdの使い方に慣れるのが良い。サービスの起動・停止は <code>systemctl</code> コマンドを使い、ログの表示は <code>journalctl</code> コマンドを使う。ディストリビューション違うけど、<a href="https://access.redhat.com/ja/node/1361323">Red Hat Enterprise Linux 7 の systemd コマンドチートシート - Red Hat Customer Portal</a>を印刷しておくといいんじゃないかな。</p> - -<p>基本的な使い方に慣れたら、次はいよいよdockerを使ってサービスを動かしていく。</p> -]]></content:encoded> +<p><a href="http://tdtds.lab.local:9393/20150606.html#c">ツッコミを入れる</a></p>]]></content:encoded> </item> -<item rdf:about="http://localhost:9292/20150508.html#p01"> -<link>http://localhost:9292/20150508.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150508.html#p01" /> -<dc:date>2015-05-09T03:45:10+09:00</dc:date> -<title>一眼レフの写真をLightroomとPhotosでいい感じに管理</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>mac</dc:subject> -<dc:subject>lightroom</dc:subject> -<dc:subject>photos</dc:subject> -<description>一眼レフで撮った写真はこれまでWindows8 + Picasaで管理していた。でも、Windowsをほとんど使わなくなったので、写真の管理もMacに移行したい。1年くらい試行錯誤して、ようやくいい感じに管理できるようになった。 基本的な仕組みはこう。写真はSDカード経由でLightroomに読み込んで管理し、選別した写真をPhotos *1 に書き出す。PhotosからはiCloudフォトライブラリを経由して、iPhoneやiPadで写真を見られるようにした。 SDカードをMacBook Proのスロットに挿すと、Lightroomが起動して写真を読み込み Lightroom上で写真を選別(xボタンで不要な写真に除外フラグをつけて一括で削除) 残った写真を選択してフォルダに書き出し、Photosへインポート Photosへインポートされた写真は自動的にiCloudフォトライブラリへアップロードされる iPhoneやiPadの写真アプリで一眼レフの写真が見られる! AirPlayを使ってAppleTV経由でテレビでも一眼レフの写真が見られる! iPhoneユーザ..</description> -<content:encoded><![CDATA[<h3>一眼レフの写真をLightroomとPhotosでいい感じに管理</h3></h3><p>一眼レフで撮った写真はこれまで<a href="http://localhost:9292/20130105.html#p01">Windows8 + Picasa</a>で管理していた。でも、Windowsをほとんど使わなくなったので、写真の管理もMacに移行したい。1年くらい試行錯誤して、ようやくいい感じに管理できるようになった。</p> - -<p>基本的な仕組みはこう。写真はSDカード経由でLightroomに読み込んで管理し、選別した写真をPhotos <span class="footnote">*1</span> に書き出す。PhotosからはiCloudフォトライブラリを経由して、iPhoneやiPadで写真を見られるようにした。</p> - -<p><a href="https://www.flickr.com/photos/machu/17239069678/" class="flickr"><img title="Managing photos with LightRoom and Photos.app" alt="Managing photos with LightRoom and Photos.app" src="https://farm9.staticflickr.com/8721/17239069678_4e621e728d_z.jpg" class="flickr photo"></a></p> - -<ol> -<li>SDカードをMacBook Proのスロットに挿すと、Lightroomが起動して写真を読み込み</li> -<li>Lightroom上で写真を選別(xボタンで不要な写真に除外フラグをつけて一括で削除)</li> -<li>残った写真を選択してフォルダに書き出し、Photosへインポート</li> -<li>Photosへインポートされた写真は自動的にiCloudフォトライブラリへアップロードされる</li> -<li>iPhoneやiPadの写真アプリで一眼レフの写真が見られる!</li> -<li>AirPlayを使ってAppleTV経由でテレビでも一眼レフの写真が見られる!</li> -</ol> - -<p>iPhoneユーザーなのでPhotosとiCloudフォトライブラリを使っているけど、4以降はGoogleフォトでもFlickrでも応用が効くはず。また、ここでのポイントは3番の書き出しのところ。LightroomはFlickrやFacebookへの書き出しプラグインはあるけど、Photosへの書き出しプラグインはない。そこで、<a href="http://hk11419.com/mac/lr-to-iphoto/">Adobe LightroomからiPhotoへワンクリックで出力して共有する方法</a>を参考に、Photosへもワンクリックで出力できるようにした。その設定がこちら。</p> - -<p><a href="https://www.flickr.com/photos/machu/17243612909/" class="flickr"><img title="Lightroom photos export settings" alt="Lightroom photos export settings" src="https://farm8.staticflickr.com/7693/17243612909_1363acfb84_c.jpg" class="flickr photo"></a></p> - -<ol> -<li>書き出し場所は適当なフォルダでOK。</li> -<li>写真をフルサイズで書きだすとあっという間にiCloudの容量 (5GB) がいっぱいになるので、見たい端末の解像度に合わせて写真を縮小する。僕はiPad Retinaを使うので2048ピクセルにした。これならファイルサイズは大きくても1MB/枚なので、数千枚まではiCloudに保存できる。いっぱいになったら20GBの有料プランにするか、古い写真を削除するか、その時に考える。</li> -<li>必要に応じて写真から位置情報を削除する。外部に公開せずに自分と家族だけで使うならそのままでも良い。</li> -<li>書きだしたあとに自動的にPhotosアプリを起動する設定。</li> -</ol> - -<p>あとはこの設定を「Photosへの書き出し」などの名前でプリセット登録しておけばよい。書き出しが終わるとPhotosが起動して、いま書きだした写真がそのまま読み込めるようになっている。</p> - -<p><a href="https://www.flickr.com/photos/machu/17429219822/" class="flickr"><img title="写真の自動読み込み" alt="写真の自動読み込み" src="https://farm8.staticflickr.com/7714/17429219822_7905291d23_z.jpg" class="flickr photo"></a></p> - -<p>これでMacでの写真管理のワークフローはひと通り整ったよ。普段なかなかPCに向かう時間が取れないので、こうやってスマホやタブレット、それにテレビで家族と一緒に写真が見られるのはとても満足度が高い。このためにずっとiOS7だったiPad(第3世代)もiOS8にアップデートしちゃったよ。</p> - -<p>iCloudフォトライブラリの代わりにFlickrを使う場合は、手順3で書きだしたフォルダを<a href="https://www.flickr.com/tools/">Flickr Uploader</a>の監視対象に指定すれば良い。Flickrは無料ユーザでも1TBまで使えるし、フォルダ内のファイルは自動でアップロードしてくれるので便利。ただ、iPhone用のアプリが日本のApp Storeで公開されていないのが欠点。</p> - -<p>Lightroomは6が発売された。僕は5のパッケージ版を使っているけど、本格的に使うなら定額制のCC版を使うのもいいかも。</p> - -<p> <a class="amazon-detail" href="http://www.amazon.co.jp/Adobe-Photoshop-Lightroom-Windows-Macintosh%E7%89%88/dp/B00SSULPNA%3Fpsc%3D1%26SubscriptionId%3D1PE38HKS6CPYCN0NM382%26tag%3Dmachu-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00SSULPNA"><span class="amazon-detail"> - <img class="amazon-detail left" src="http://ecx.images-amazon.com/images/I/513ZAPlqdpL._SL75_.jpg" - height="75" width="54" +<item rdf:about="http://tdtds.lab.local:9393/20150514.html#p01"> +<link>http://tdtds.lab.local:9393/20150514.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20150514.html#p01" /> +<dc:date>2015-05-15T08:20:17+00:00</dc:date> +<title>アイマス10thライブのチケットが大量に当選するわさます</title> +<dc:creator>ただただし</dc:creator> +<description>今日は7月の10thライブの先行抽選の発表日。LTH09/10、MA3 01/02/03、AP07それぞれにシリアルがついてるので、だいたいみんな4~6口くらい応募している(といっても住所で名寄せされるので何口応募しても当たるのは最大1口分)。1口で2日通し券を4枚申し込めるから(手数料込みで8万円くらいになる……ひぃぃ)、必要数の4倍くらいの座席数を申し込んだことになるのだが。 蓋をあけてみるとほとんどの人が当選してしまい、16枚必要なところに42枚もある始末。余りすぎだ……。Twitterをみているとぜんぜん当たらなかった人もいるようなので、不要分は知人を通してわけあったり、キャンセルすることで再流通させられるものの、そもそもドームを満席にできるのか不安になってきたなぁ。とくに1日目は出演者が少ないのでつらそう……。</description> +<content:encoded><![CDATA[<h3>アイマス10thライブのチケットが大量に当選するわさます</h3><p>今日は7月の10thライブの先行抽選の発表日。LTH09/10、MA3 01/02/03、AP07それぞれにシリアルがついてるので、だいたいみんな4~6口くらい応募している(といっても住所で名寄せされるので何口応募しても当たるのは最大1口分)。1口で2日通し券を4枚申し込めるから(手数料込みで8万円くらいになる……ひぃぃ)、必要数の4倍くらいの座席数を申し込んだことになるのだが。</p> +<p>蓋をあけてみるとほとんどの人が当選してしまい、16枚必要なところに42枚もある始末。余りすぎだ……。Twitterをみているとぜんぜん当たらなかった人もいるようなので、不要分は知人を通してわけあったり、キャンセルすることで再流通させられるものの、そもそもドームを満席にできるのか不安になってきたなぁ。とくに1日目は出演者が少ないのでつらそう……。</p> +<p><a href="http://tdtds.lab.local:9393/20150514.html#c">ツッコミを入れる</a></p>]]></content:encoded> +</item> +<item rdf:about="http://tdtds.lab.local:9393/20150411.html#p01"> +<link>http://tdtds.lab.local:9393/20150411.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20150411.html#p01" /> +<dc:date>2015-04-14T09:07:14+00:00</dc:date> +<title>アニメ「シンデレラガールズ」の1stシーズン最終回が素晴らしすぎて3ヶ月も待てない</title> +<dc:creator>ただただし</dc:creator> +<dc:subject>idolm@ster</dc:subject> +<description>アニメ「アイドルマスター シンデレラガールズ」、2クール前半の最終話が放送されて、リアルタイムで観ていたのだけど、そのあとバンダイチャンネルで48時間無料配信という太っ腹もあって、暇さえあれば見返してる*1。初見より、2度3度と観たときの方がぐっとくる。SHIROBAKOといいシンデレラガールズといい、今季は本当にすごい作品に出会えて、満足だ。2ndシーズンは3ヶ月後ということだけど、早くも待ちきれない。 とはいえ、原画どころか第二原画にまで監督自身の名前がクレジットされていることから、after SHIROBAKOな世界に生きるわれわれには現場で何が起きているのかをうかがい知れてしまうわけで(その後の情報でそもそも地方局への納品が間に合ってなかったなんて話もあってバンチャの措置はこのためか)、せめてこの3ヶ月で英気を養って欲しいとも思う……とはいえ円盤向け修正なんかでそれどころじゃないんだろうけど。 じっさい作画はときおり「?」なことがあったけど、シナリオがしっかりしてたのは本当に救いだ。最悪絵はあとで直せるけど、シナリオは直せないもんなぁ*2。今季は、作画はがんばってるのにシナ..</description> +<content:encoded><![CDATA[<h3>アニメ「シンデレラガールズ」の1stシーズン最終回が素晴らしすぎて3ヶ月も待てない</h3><p><img title="[スクリーンショット] プロデューサーも入った記念写真" alt="[スクリーンショット] プロデューサーも入った記念写真" src="https://lh5.googleusercontent.com/-IH2bF7TbtFM/VSsleLQ1OMI/AAAAAAABej4/6FnTFX19J4c/s512/%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%252588%2525202015-04-13%25252011.09.54.png" class="photo picasa"></p> +<p>アニメ「アイドルマスター シンデレラガールズ」、2クール前半の最終話が放送されて、リアルタイムで観ていたのだけど、そのあとバンダイチャンネルで48時間無料配信という太っ腹もあって、暇さえあれば見返してる<span class="footnote">*1</span>。初見より、2度3度と観たときの方がぐっとくる。SHIROBAKOといいシンデレラガールズといい、今季は本当にすごい作品に出会えて、満足だ。2ndシーズンは3ヶ月後ということだけど、早くも待ちきれない。</p> +<p>とはいえ、原画どころか第二原画にまで監督自身の名前がクレジットされていることから、after SHIROBAKOな世界に生きるわれわれには現場で何が起きているのかをうかがい知れてしまうわけで(その後の情報で<a href="http://ch.nicovideo.jp/ririsuzuki/blomaga/ar769836">そもそも地方局への納品が間に合ってなかった</a>なんて話もあってバンチャの措置はこのためか)、せめてこの3ヶ月で英気を養って欲しいとも思う……とはいえ円盤向け修正なんかでそれどころじゃないんだろうけど。</p> +<p>じっさい作画はときおり「?」なことがあったけど、シナリオがしっかりしてたのは本当に救いだ。最悪絵はあとで直せるけど、シナリオは直せないもんなぁ<span class="footnote">*2</span>。今季は、作画はがんばってるのにシナリオがグダグダで、話数が進むにつれて怨嗟の声しか聞こえなくなっていった某大型タイトルを横目でみつつだっただけに、よけいにシナリオの重要性が身に染みる。あらゆるシーンに意味があり、その前には納得のいく伏線がさりげなく張られているという緻密さ。「お約束」に頼らず、それでいて説明過多にならないさじ加減。散りばめられた暗喩の数々……。</p> +<p>1話冒頭シーンみたいなわかりやすいのを始め、OP「Star!!」で蘭子が美波とアーニャの間にいる謎の解決(なんと11話ごしの伏線回収)、そもそも制作発表直後に公開されたキービジュアルの「素足」まで自然なかたちでみせてくれた。そうそう、春から夏にかけての話なのにお約束の水着回すらない。入浴シーンは1カットだけあったけど肩までしっかり湯に浸かってるし。監督が女性だからかどうかはわからないけど、「おまえらこういうのが好きなんだろ」みたいな安易な萌えの押し売りがなく、それでいてフェティシズムへの理解は随所にたっぷりあって(笑)、シナリオだけでなく演出も含め、正しく大人向け作品だった。</p> +<p>素足といえば、ラスト近くで凛が背伸びをするシーン。アニメ的にはあそこで透明なガラスのハイヒールをオーバーレイさせるような安直なファンタジー描写をやりがちだけど、この作品ではハッとした顔のプロデューサーのカットで済ます。もちろん彼には、あそこにシンデレラになった凛の姿が見えているのだけど、あえて映像にしない。もちろんここに至る過程でプロデューサーと凛の関係性をじっくりじっくり描いてきたからこその表現だ。こういう抑制の効いた演出のおかげで、深夜アニメにありがちな安っぽさがぜんぜんなかった。でもこれだってアニメでしかできない表現なのだ。</p> +<p><img title="[スクリーンショット] 素足の凛の背伸び" alt="[スクリーンショット] 素足の凛の背伸び" src="https://lh6.googleusercontent.com/-5EPMiXgRziM/VSslUFCWLCI/AAAAAAABejw/keNwU33q-X8/s512/%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%252588%2525202015-04-13%25252011.07.57.png" class="photo picasa"></p> +<p>とりあえず円盤買って気を紛らすか……って、それすら2ヶ月後か!! 世間は厳しい……。</p> +<p> <a class="amazon-detail" href="http://www.amazon.co.jp/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E3%82%BA-1%E3%80%90%E5%AE%8C%E5%85%A8%E7%94%9F%E7%94%A3%E9%99%90%E5%AE%9A%E7%89%88%E3%80%91-CINDERELLA-2015%E3%80%8F%E3%83%81%E3%82%B1%E3%83%83%E3%83%88%E8%B3%BC%E5%85%A5%E7%94%B3%E8%BE%BC%EF%BC%88%E6%8A%BD%E9%81%B8%EF%BC%89%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC%E5%B0%81%E5%85%A5/dp/B00SMGILSC%3FSubscriptionId%3D1PE38HKS6CPYCN0NM382%26tag%3Dcshs-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00SMGILSC"><span class="amazon-detail"> + <img class="amazon-detail left" src="https://images-na.ssl-images-amazon.com/images/I/31B%2BoI-AFaL._SL75_.jpg" + height="50" width="75" alt=""> <span class="amazon-detail-desc"> - <span class="amazon-title">Adobe Photoshop Lightroom 6 日本語版 Windows/Macintosh版</span><br> + <span class="amazon-title">アイドルマスター シンデレラガールズ 1【完全生産限定版】(『THE IDOLM@STER CINDERELLA GIRLS SUMMER FESTIV@L 2015』チケット購入申込(抽選)シリアルナンバー封入) [Blu-ray]</span><br> <span class="amazon-author"></span><br> - <span class="amazon-label">アドビシステムズ</span><br> - <span class="amazon-price">¥ 14,472</span> + <span class="amazon-label">アニプレックス</span><br> + <span class="amazon-price">¥ 4,580</span> </span><br style="clear: left"> </span></a> -</p> - -<h4>参考</h4> - -<p>このワークフローに至るまでの経緯(自分用メモ)</p> - -<ul> -<li>Eye-fiでの自動アップデートは使わなくなった。ただのSDカードとして使っている。動画の同期に時間がかかるのと、Picasaよりもフォルダの自動読み込みに制約があった(年月日ごとのサブフォルダを作れない)ことが理由。</li> -<li>LightroomとApertureで迷ってApertureを購入したのに、数カ月後にApertureのサポート終了が発表されてLightroomを買い直した…</li> -<li>Photosだけで管理しないのは、写真の元ファイルを外付けHDDにそのまま保存したいから(PhotosはiPhotoと同じように独自形式で保存される)</li> -<li>iPhoneで撮った写真はLightroomを使わずにiCloudフォトライブラリでそのまま管理することにした。写真をバックアップしたいときはDropBoxなどの使うことにする。</li> -</ul> -<div class="footnote"> - <p class="footnote">*1&#160;正式名称は「写真」だけど紛らわしいのでここではPhotosに統一する</p> +</p><div class="footnote"> + <p class="footnote">*1&#160;今月のパケットすごいことになりそう。10GBに拡大してくれたIIJありがとう。</p> + <p class="footnote">*2&#160;コーディングバグは直せるけど仕様バグは直せないみたいな話だ。</p> </div> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150505.html#p01"> -<link>http://localhost:9292/20150505.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150505.html#p01" /> -<dc:date>2015-05-05T19:32:46+09:00</dc:date> -<title>tDiary を docker で動かす</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>docker</dc:subject> -<dc:subject>tdiary</dc:subject> -<description>この日記のサーバ移転に向けて、新しい環境をどうするか考えている。いままで通り、普通に nginx と unicorn で動かしても面白くないので、何か新しくしたい。いままで運用しての悩みは、日記サーバはたまにしかログオンしないので、すぐに環境がどうなっていたか分からなくなってしまうこと。chefやantibleやitamaeなどの構成管理ツールを入れるのはオーバースペック。 そこで、いっそ docker で動かしてみようと思う。dockerは1年ほど前に少し動かした程度で、その時はまだ運用で使うにはハードルが高かった。あれから1年が経ち、1コンテナ1プロセスなどの運用パターンも確立しつつあるようなので、いい時期かもしれない。当時はmonitを使って複数プロセスを起動しようとしていたっけ。dockerは公式ドキュメントがよく出来ているので、 blog や qiita などの情報を探すよりも、まずは公式ドキュメントをじっくり読むのがよい。 Macでのdocker環境構築 いずれ、Linuxサーバ上で動かすことになるから、最初は vagrant を使って ubuntu core を..</description> -<content:encoded><![CDATA[<h3>tDiary を docker で動かす</h3></h3><p>この日記のサーバ移転に向けて、新しい環境をどうするか考えている。いままで通り、普通に nginx と unicorn で動かしても面白くないので、何か新しくしたい。いままで運用しての悩みは、日記サーバはたまにしかログオンしないので、すぐに環境がどうなっていたか分からなくなってしまうこと。chefやantibleやitamaeなどの構成管理ツールを入れるのはオーバースペック。</p> -<p>そこで、いっそ docker で動かしてみようと思う。dockerは1年ほど前に少し動かした程度で、その時はまだ運用で使うにはハードルが高かった。あれから1年が経ち、1コンテナ1プロセスなどの運用パターンも確立しつつあるようなので、いい時期かもしれない。当時はmonitを使って複数プロセスを起動しようとしていたっけ。dockerは公式ドキュメントがよく出来ているので、 blog や qiita などの情報を探すよりも、まずは<a href="https://docs.docker.com/">公式ドキュメント</a>をじっくり読むのがよい。</p> - -<h4>Macでのdocker環境構築</h4> - -<p>いずれ、Linuxサーバ上で動かすことになるから、最初は vagrant を使って <a href="http://www.ubuntu.com/cloud/tools/snappy">ubuntu core</a> を入れてみた。 vagrant ssh で ubuntu core にログインして docker コマンドを動かしているうちは、これで良かった。でも、 Mac から Web ブラウザで接続しようとすると、ネットワークの設定が面倒になっちゃう(特に ubuntu core は vagrant 側のネットワーク設定が自動的に反映されない)。 docker の使い方を覚えたいのに、他のところで時間を使うのはもったいない。</p> - -<p>という訳で、<a href="https://docs.docker.com/installation/mac/">Install Docker on Mac OS X</a>で紹介されている boot2docker を使うことにした。 brew install boot2docker でインストールする。 VirtualBox を使って仮想化した Linux 上で docker を動かすので仕組みは vagrant + Linux + docker と同じだけど、いい感じにネットワーク設定されていたり、 boot2docker ip でIPアドレスを調べられたり、 Mac 側から docker コマンドが使えたり、 Mac と docker コンテナでファイルを共有できたりと、かゆいところに手が届いて便利。 VirtualBox の GUI を開けばどのようなネットワーク設定になっているか(NATとホストオンリーアダプタの二枚構成)も分かるので、いずれ vagrant + Linux + docker 構成に移すときの参考にもなる。</p> - -<h4>docker の使い方</h4> - -<p>さっきも書いたとおり、公式の <a href="https://docs.docker.com/userguide/">The Docker User Guide - Docker Documentation</a> がよくできているので、最初はこれをひと通りやって基本的な使い方を覚える。 docker は本体だけでなく周辺のエコシステムが熱いけど、まずは docker 本体の仕組みに慣れるのが良い。</p> - -<h4>tDiary を docker で動かす</h4> - -<p>docker の使い方に慣れてきたので、いよいよ tDiary を docker 上で動かしてみる。最初に悩むのは、ベースとなるイメージをどれにするか。最近は、公式の言語スタックが公開されているので、これを使うのが良さそう。公式の言語スタックについては、<a href="http://deeeet.com/writing/2014/09/25/dockerhub-official-language-stacks/">DockerHub公式の言語Stack | SOTA</a>が参考になった。いや、この記事に限らずここのブログは参考になる情報ばかり。</p> - -<p>もちろん<a href="https://registry.hub.docker.com/u/library/ruby/">Rubyの公式イメージ</a>も用意されている。公式イメージを使うにしても、どのような環境なのか分からないと使えない。<a href="https://github.com/docker-library/ruby/blob/4ccabb5557ce2001aa1ae2a5f719340eb33c0383/2.2/Dockerfile">latest(2.2.2)のDockerfile</a>でRubyがどのようにインストールされているかを調べて、さらに<a href="https://github.com/docker-library/ruby/blob/4ccabb5557ce2001aa1ae2a5f719340eb33c0383/2.2/onbuild/Dockerfile">onbuildのDockerfile</a>を読んでイメージの作り方を調べる。</p> - -<p>だいたい分かったので、 <a href="https://registry.hub.docker.com/u/machu/tdiary/">tDiary の最小構成での docker イメージ</a>を作ってみた。まずは1つの docker イメージで動くよう、 unicorn も memcached も mongodb も使わずにしている。コンテナは揮発性の環境にするために、データディレクトリはVOLUMEを使ってホスト側と共有している。Dockerfileを用意したら、イメージをビルドする。</p> - -<pre><code>$ docker build -t machu/tdiary . -</code></pre> - -<p>ruby-2.2.0イメージからスタートして、 tdiary new コマンドと bundler で必要な環境をセットアップし、 tdiary イメージの完成。次に作成したイメージから docker run コマンドでコンテナを起動する。</p> - -<pre><code>docker run -v &quot;$(pwd)/data&quot;:/usr/src/app/data --rm -p 8080:9292 machu/tdiary -</code></pre> - -<p>ホスト側のカレントディレクトリに日記用の data ディレクトリをマウントしている。 Linux のホストOSを意識せずに、普通にMac側とdocker側でディレクトリが共有される。このへんはboot2dockerが頑張っているみたい。詳しくは<a href="http://deeeet.com/writing/2014/10/08/boot2docker-guest-additions/">boot2dockerでのVolume問題が解決しそう | SOTA</a>を参照。</p> - -<p>イメージからコンテナを生成してブラウザでアクセスすると、ちゃんと日記が表示される。 tDiary を終了するとコンテナも削除される。コンテナが削除されても、日記データは Mac 側の data ディレクトリに残っている。毎回まっさらな環境から tDiary アプリが動くので、環境が担保されている安心感がある。揮発性の環境 (immutable infrastructure) の良さを少し実感した。</p> - -<p>認証やログや Web サーバの連携や tDiary アップデートへの追従などはこれから。イメージを作りなおせば、最新の tDiary を使うようになっているけど、<a href="http://sho.tdiary.net/20150207.html#p01">tDiary update</a>ボタンのように簡単にアップデートできるようにしたい。docker composeも使うことになるだろう。</p> - -<h4>Dockerの使いどころ</h4> - -<p>すべてをコンテナで動かす!ようにはたぶんならなくて、僕は tDiary の開発も今までどおり Mac 上で rbenv を使うだろう。 docker は軽量とはいえ、イメージの作成とコンテナの起動が必要なので、書いてすぐに動く気軽さはなくなる。代わりに、コンテナが隔離&揮発性のおかげで、環境が綺麗であるのはメリット。 tDiary の開発でも、たまたまとある gem が入っていたので動いていた…というのも、たまにあったので。ローカルでは普通にコードを書いて、テストを通してGitHubにコミット後にコンテナ環境を作成、その後に日記サーバへコンテナをデプロイという流れで、日記サーバの環境を手元と同一にするところに使うのが良さそう。</p> - -<h4>参考にした情報</h4> - -<ul> -<li><a href="http://docs.docker.com/">Docker Documentation</a></li> -<li><a href="http://deeeet.com/">SOTA | SOTA</a></li> -<li><a href="http://gihyo.jp/magazine/SD/archive/2014/201412">Software Design 2014年12月号</a>のdocker特集 </li> -</ul> - -<p>まだ読んでいないけど、<a href="http://gihyo.jp/magazine/wdpress/archive/2015/vol86">WEB+DB PRESS Vol.86|技術評論社</a>でもDocker特集をやっているみたい。</p> -]]></content:encoded> +<p><a href="http://tdtds.lab.local:9393/20150411.html#c">ツッコミを入れる</a></p>]]></content:encoded> </item> -<item rdf:about="http://localhost:9292/20150420.html#p01"> -<link>http://localhost:9292/20150420.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150420.html#p01" /> -<dc:date>2015-04-20T22:50:34+09:00</dc:date> -<title>さくらのVPSを解約した</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>sakura</dc:subject> -<description>さくらのVPSは年間契約していて、5月末が更新日となる。前月の20日(つまり今日)が解約期限だったので、さくらのVPSの解約手続きをした。といっても、やめちゃうのではなく、新しいVPSプランに乗り..</description> -<content:encoded><![CDATA[<h3>さくらのVPSを解約した</h3></h3><p>さくらのVPSは年間契約していて、5月末が更新日となる。前月の20日(つまり今日)が解約期限だったので、さくらのVPSの解約手続きをした。といっても、やめちゃうのではなく、<a href="http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=996">新しいVPSプラン</a>に乗り換えるのが目的。今はメモリ1GBのHDDモデルを使っていて、次はSSDモデルにするつもり。メモリは1GBか2GBで迷ってる。</p> +<item rdf:about="http://tdtds.lab.local:9393/20150328.html#p01"> +<link>http://tdtds.lab.local:9393/20150328.html#p01</link> +<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://tdtds.lab.local:9393/20150328.html#p01" /> +<dc:date>2015-03-30T05:06:43+00:00</dc:date> +<title>(またしても)Kindle Personal Documentsの不具合</title> +<dc:creator>ただただし</dc:creator> +<description>2、3日前からKindle Personal Documents(KPD)に送ったファイルがKindle Voyageに落ちてこない(そもそもKPDに届いてない)という症状がまた発生して、例によってサポートとメールのやりとりをしている。前回はたしか2012年でした。日記に書いてないのも含めて同様のトラブルは3、4回目だと思う。 ちなみに前回までは「お使いのKindleはサポートの対象ではありません」という返答をもって打ち切られたのだが(どうみてもサーバ側の問題なのに端末のせいにするのもひどい話だ)、今回はこっちの手元にあるのは正式に日本で買った最新にして現行機種のVoyageだからな、ちゃんと原因究明するまで逃さねぇ。 例によって端末のログを取れだの、送ったファイルのサイズと日時を教えろだの、症状とはなんの関係もなさそうな手続きを踏まされて、最初に戻ってきた返答が「添付されているファイルサイズが5MB以上の場合、ダウンロードすることができません」ときたもんだ。公式文書にあるとおり、KPDに送れるファイルの最大サイズは50MBであって5MBではない。さすがにキレるわ。ほんとAma..</description> +<content:encoded><![CDATA[<h3>(またしても)Kindle Personal Documentsの不具合</h3></h3><p>2、3日前からKindle Personal Documents(KPD)に送ったファイルがKindle Voyageに落ちてこない(そもそもKPDに届いてない)という症状がまた発生して、例によってサポートとメールのやりとりをしている。前回はたしか2012年でした。日記に書いてないのも含めて同様のトラブルは3、4回目だと思う。</p> -<p>過去の日記を読み返してみたら、これでさくらVPSは3代目になるのね。毎回、手順を残していたので参考になる。</p> +<p>ちなみに前回までは「お使いのKindleはサポートの対象ではありません」という返答をもって打ち切られたのだが(どうみてもサーバ側の問題なのに端末のせいにするのもひどい話だ)、今回はこっちの手元にあるのは正式に日本で買った最新にして現行機種のVoyageだからな、ちゃんと原因究明するまで逃さねぇ。</p> -<ul> -<li><a href="http://www.machu.jp/diary/20100901.html#p01">さくらのVPSを契約した - まちゅダイアリー(2010-09-01)</a> … メモリ512MB, Ubuntu 10.04.1 LTS</li> -<li><a href="http://www.machu.jp/diary/20120503.html#p01">tDiaryを Nginx + Unicorn + さくらVPSで動かした - まちゅダイアリー(2012-05-03)</a> … メモリ1GB, Ubuntu 10.04.1 LTS → 12.04 → 14.04へアップデート</li> -</ul> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150412.html#p01"> -<link>http://localhost:9292/20150412.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150412.html#p01" /> -<dc:date>2015-04-18T16:36:07+09:00</dc:date> -<title>nasne が不調 → 外付けHDDのディスク検査で復旧</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>Life</dc:subject> -<description>TV番組の録画に使っているnasneが、ここしばらく調子が悪くなっていた。PS3のtorneから見ようとすると、番組のサムネイルが表示されなかったり、再生できない番組があったり、そのうちnasne本体がtorneから認識されなくなったり。PS3のTVチューナー(旧torne)に録画した番組は見えるので、PS3側の問題じゃなさそう。nasneを買ってから2年半、ついにこの日が来たか。 nasneそのものが見えなくなるのはnasne本体が故障しているのか、ネットワークの問題なのか。時間をとれずにしばらく放..</description> -<content:encoded><![CDATA[<h3>nasne が不調 → 外付けHDDのディスク検査で復旧</h3></h3><p>TV番組の録画に使っているnasneが、ここしばらく調子が悪くなっていた。PS3のtorneから見ようとすると、番組のサムネイルが表示されなかったり、再生できない番組があったり、そのうちnasne本体がtorneから認識されなくなったり。PS3のTVチューナー(旧torne)に録画した番組は見えるので、PS3側の問題じゃなさそう。<a href="http://localhost:9292/20120902.html#p01">nasneを買ってから2年半</a>、ついにこの日が来たか。</p> +<p>例によって端末のログを取れだの、送ったファイルのサイズと日時を教えろだの、症状とはなんの関係もなさそうな手続きを踏まされて、最初に戻ってきた返答が「添付されているファイルサイズが5MB以上の場合、ダウンロードすることができません」ときたもんだ。公式文書にあるとおり、KPDに送れるファイルの最大サイズは50MBであって5MBではない。さすがにキレるわ。ほんとAmazonサポートの無能さったら……。</p> -<p><a href="https://www.flickr.com/photos/machu/17184217501/" class="flickr"><img title="nasne" alt="nasne" src="https://farm6.staticflickr.com/5449/17184217501_1cbcda948d.jpg" class="flickr photo"></a></p> +<p>というわけで、かなりキレ気味の返事を送って、対応待ち。そろそろ、原因究明もできない無能なKDP担当者をすげかえて欲しいんだけどなぁ。いやもう、KPDの低品質にはかなり本気で怒ってるんだが。有償化してもいいから品質あげてほしいよ。ちょうどCloud Driveの有償化が発表されたタイミングだし、ストレージは共有してるんだから有償サービスにしちゃっていいと思うんだけど。</p> -<p>nasneそのものが見えなくなるのはnasne本体が故障しているのか、ネットワークの問題なのか。時間をとれずにしばらく放置していたけど、ようやく時間ができたのでちゃんと切り分けしてみた。まず、Macからnasneのファイル共有は普通に見えているので、本体が完全に壊れているわけではなさそう。ところが、特定のファイルを開こうとすると、ファイルサーバから応答がなくなりMacのfinderがレインボーカーソル状態になった。次に、nasneから外付けHDDを切断すると、nasneの内蔵HDDに録画されている番組はちゃんと再生できる。</p> - -<p>これはどうもnasneの外付けHDDが怪しい。torneからnasneが見えなくなるのも、nasneが外付けHDDの特定領域を読み込もうとした時に、外付けHDDから応答が返ってこずに待ち状態になってしまっているのではないか。そこで外付けHDDをMacに接続する。Macから外付けHDD内のデータはちゃんと見える。残念ながら外付けHDDの診断情報 (S.M.A.R.T.) は見えないので、詳細は不明。ディスクユーティリティを起動して「ディスクを検証」を実行すると、エラーコード8で検証に失敗する。続けて「ディスクを修復」を実行するも、このディスクは修復できませんとのつれないメッセージが。次に外付けHDDをWindows8に接続してディスクのチェック(内部的にはchkdsk?)を実行したところ、無事に修復できたとのメッセージが表示された。おおっ、いい感じ。</p> - -<p>これで外付けHDDをnasneに接続しなおしたところ、ちゃんとtorneからも見えるようになった。番組のサムネイルもバッチリ。ディスクの修復により不整合のあるファイルが削除されてしまうこともなかった。よかったよかった。</p> - -<p>nasneに録画した番組はいつか消えても仕方ないと思っている(バックアップも取れないしHDDの移行もできない仕組みになってる)けど、今回は無事でよかった。</p> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150330.html#p01"> -<link>http://localhost:9292/20150330.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150330.html#p01" /> -<dc:date>2015-03-30T22:00:49+09:00</dc:date> -<title>Ruby2.2.1 + tDiary4.1.2へアップデート</title> -<dc:creator>kmachu</dc:creator> -<dc:subject>tDiary</dc:subject> -<description>という訳で、この日記も最新の環境にアップデートした。gitで管理しているので、いつもどおり git pull を実行。2つのファイルが衝突した。 $ git pull origin master error: Your local changes to the following files would be overwritten by merge: ..</description> -<content:encoded><![CDATA[<h3>Ruby2.2.1 + tDiary4.1.2へアップデート</h3></h3><p>という訳で、この日記も最新の環境にアップデートした。gitで管理しているので、いつもどおり git pull を実行。2つのファイルが衝突した。</p> - -<pre><code>$ git pull origin master -error: Your local changes to the following files would be overwritten by merge: - Gemfile.lock - config.ru -Please, commit your changes or stash them before you can merge. -</code></pre> - -<p>Gemfile.lockはGemfile.local分が反映されているので衝突。これはいったん本体側に合わせればいい。</p> - -<pre><code>$ git checkout -- Gemfile.lock -</code></pre> - -<p>config.ruはbase_urlを設定しているので衝突。これは本体側に合わせたあとに、もう一回base_urlを設定しなおした。</p> - -<pre><code>$ git checkout -- config.ru -$ git pull origin master -$ vim config.ru -(base_urlを書き換え) -</code></pre> - -<p>Rubyはrbenvを使って最新版を入れた。最後にunicornを再起動してアップデート完了。特に問題なし。</p> - -<pre><code>$ kill -TERM `cat unicorn.pid ` -$ bundle exec unicorn -c unicorn.conf -E production -D -</code></pre> - -<p>毎回config.ruのbase_urlを指定するのは面倒なので、ここはtdiary.confに書けるようにしたいな。</p> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150329.html#p01"> -<link>http://localhost:9292/20150329.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150329.html#p01" /> -<dc:date>2015-03-30T21:54:47+09:00</dc:date> -<title>tDiary 4.1.2リリース</title> -<dc:creator>kmachu</dc:creator> -<description>3ヶ月ごとの定期リリース。今回の目玉はリリースノートにもあるようにDeploy to Herokuボタンへの対応。僕はパッケージ版のサイズを削減したり、Twitter以..</description> -<content:encoded><![CDATA[<h3>tDiary 4.1.2リリース</h3></h3><p>3ヶ月ごとの<a href="http://www.tdiary.org/20150329.html">定期リリース</a>。今回の目玉はリリースノートにもあるようにDeploy to Herokuボタンへの対応。僕は<a href="https://github.com/tdiary/tdiary-core/pull/469">パッケージ版のサイズを削減</a>したり、<a href="https://github.com/tdiary/tdiary-core/pull/490">Twitter以外の外部認証(Facebook, Google, GitHub)を追加</a>したりしていた。最近はパスワードリスト攻撃の脅威も増えているし、個人で動かすサービスの認証は自前で頑張るよりも、他要素認証やリスクベース認証が使える外部サービス認証に任せたほうが楽だね。</p> - -<p>外部サービス認証の使い方は<a href="https://github.com/tdiary/tdiary-core/blob/master/doc/HOWTO-authenticate-in-rack.md">ドキュメント</a>に書いた。以前はconfig.ruを書き換える必要があったけど、今はGemfile.localにgemを追加するだけで使えるようになっている。</p> - -<p>(主に僕が)長く安心して日記を書けるように、これからもメンテしていこう。</p> -]]></content:encoded> -</item> -<item rdf:about="http://localhost:9292/20150328.html#p01"> -<link>http://localhost:9292/20150328.html#p01</link> -<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://localhost:9292/20150328.html#p01" /> -<dc:date>2015-03-30T21:41:27+09:00</dc:date> -<title>Rails寺子屋 第6回</title> -<dc:creator>kmachu</dc:creator> -<description>Rails寺子屋に師範として参加した。前回の第5回は行けなかったので前々回から10ヶ月ぶり。会場は恵比寿に移転したクックバッドさんのところ。景色も良くてオシャレ〜。 コンテンツは常設のRailsGirlsマテリアル、Ruby/Rails講義出張所、プルリク道場の3つ。講義出張所の受講者はそれなりにプログラミングの経験があるとのことだったので、..</description> -<content:encoded><![CDATA[<h3>Rails寺子屋 第6回</h3></h3><p><a href="http://rails.terakoya.io/">Rails寺子屋</a>に師範として参加した。前回の第5回は行けなかったので<a href="http://www.machu.jp/diary/20140524.html#p01">前々回</a>から10ヶ月ぶり。会場は恵比寿に移転した<a href="https://info.cookpad.com/location/">クックバッドさん</a>のところ。景色も良くてオシャレ〜。</p> - -<p>コンテンツは常設のRailsGirlsマテリアル、Ruby/Rails講義出張所、プルリク道場の3つ。講義出張所の受講者はそれなりにプログラミングの経験があるとのことだったので、僕のRuby講義は割愛して五十嵐さんのRails講義となった。五十嵐さんの資料はKeynoteベースから<a href="http://igarashikuniaki.net/rails_textbook/">Railsの教科書</a>というテキストベースにパワーアップしていた。Railsチュートリアルの次の一歩として、route, controller, viewの仕組みから、モデル、CRUDと盛りだくさんの内容でレベル高かった。</p> - -<p>Railsに限らず、WebアプリはRubyだけでなくHTML, HTTP, データベースと幅広い知識が必要になるなぁ…と改めて思ったよ。</p> - -<p><a href="https://www.flickr.com/photos/machu/16976436781/" class="flickr"><img title="Rails寺子屋" alt="Rails寺子屋" src="https://farm8.staticflickr.com/7641/16976436781_57a259596d_z.jpg" class="flickr photo"></a></p> - -<p>その後は師範と参加者さんでペアプロをやった。お題は特に決まっておらず、ペアごとにやりたいことを決める方法。僕のペアは普段からRailsでコードを書いている方だった。いつもはMySQLを使っていてMongoDBを使ってみたいとのことだったので、<a href="http://www.cl.ecei.tohoku.ac.jp/nlp100/#ch7">言語100本ノックのデータベース</a>のお題をMongoDBでやってみた。少しアドバイスするだけでどんどん進んでいくので、師範と生徒というより、普通にペアな感じだった。</p> - -<p>久しぶりにRuby成分をたっぷり浴びて、いい刺激になった。</p> - -<h4>参考リンク</h4> - -<p><a href="http://igarashikuniaki.net/diary/20150328.html#p01">Rails寺子屋x高専カンファレンス 第6回 - igaiga diary(2015-03-28)</a></p> -]]></content:encoded> +<p><a href="http://tdtds.lab.local:9393/20150328.html#c">ツッコミを入れる</a></p>]]></content:encoded> </item> </rdf:RDF>