List of Environment - text.Baldanders.info
tag:text.Baldanders.info,2024-01-02:/tags
2024-01-02T20:37:34+09:00
帰ってきた「しっぽのさきっちょ」
https://text.baldanders.info/images/avatar.jpg
https://text.baldanders.info/images/avatar.jpg
「令和6年能登半島地震」
tag:text.Baldanders.info,2024-01-02:/remark/2024/01/01-earthquake-and-tsunami/
2024-01-02T11:37:34+00:00
2024-01-08T06:59:50+00:00
地震・津波に遭われた地域の方々にはお見舞い申し上げます。
Spiegel
https://baldanders.info/profile/
<p>地震・津波に遭われた地域の方々にはお見舞い申し上げます。</p>
<ul>
<li><a href="https://www.jma.go.jp/jma/press/2401/01a/202401011810.html">令和6年1月1日16時10分頃の石川県能登地方の地震について</a></li>
<li><a href="https://www.jma.go.jp/jma/press/2401/01b/202401011810_2.html">令和6年1月1日16時10分頃の石川県能登地方の地震について(第2報)</a></li>
<li><a href="https://www.jma.go.jp/jma/press/2401/01c/202401012130.html">「令和6年能登半島地震」について(第3報)</a></li>
<li><a href="https://www.jma.go.jp/jma/press/2401/02b/202401020145.html">「令和6年能登半島地震」について(第4報)</a></li>
<li><a href="https://www.jma.go.jp/jma/press/2401/02c/202401021015.html">「令和6年能登半島地震」について(第5報)</a></li>
</ul>
<p>私が最初に知ったのは市の防災無線放送だったのよ。
いきなり津波注意報が云々とか言い始めるので何かと思った。
私はテレビなんか見ない(持ってない)し,やっぱ田舎は防災無線放送が最強だな。</p>
<p>Mastodon では NERV の緊急地震速報(<a href="https://unnerv.jp/@EEW">@EEW@unnerv.jp</a>)を購読しているのだが,常に見ているわけじゃないからなぁ。
しかも余震が頻発しているので,その後の TL が地震速報で埋め尽くされる事態に。
今は島根県の情報(<a href="https://unnerv.jp/@Shimane">@Shimane@unnerv.jp</a>)のみに絞り込んでいる。
この辺の柔軟さが NERV の利点かな。
お世話になっています <abbr class="emoji-chars" title="ペコン">🙇</abbr></p>
<p>被災地を支援したい気持ちは私にも分かるが,手の届く範囲で。
<a href="https://baldanders.info/blog/000513/" title="震災お見舞い申し上げます">災害躁病</a>にハマって無茶して周囲を振り回す状態になるとお互い不幸だからね。</p>
<p>寄付をするなら赤十字がおすすめ(税控除の対象になる)。
2024-01-04 から義援金の受付が始まっている。</p>
<ul>
<li><a href="https://www.jrc.or.jp/domestic_rescue/2024notoearthquake.html">【第1報】令和6年能登半島地震にかかる日本赤十字社の対応等について|災害救護速報(国内)|おしらせ・最新情報|日本赤十字社</a></li>
<li><a href="https://www.jrc.or.jp/contribute/help/20240104/">令和6年能登半島地震災害義援金|国内災害義援金・海外救援金へのご寄付|寄付する|日本赤十字社</a></li>
<li><a href="https://www.jrc.or.jp/contribute/help/">国内災害義援金・海外救援金へのご寄付|寄付する|日本赤十字社</a></li>
</ul>
<p>寄付は「消費」ではない。
明確な社会参加である。</p>
<ul>
<li><a href="http://shinta.tea-nifty.com/nikki/2005/01/donation.html">寄付する前に立ち止まれ: R30::マーケティング社会時評</a></li>
</ul>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://www.itmedia.co.jp/news/articles/2401/01/news051.html">NERV防災「X(旧Twitter)のAPI上限で自動投稿できない」 石川県能登の地震で【追記あり】 - ITmedia NEWS</a>
<ul>
<li><a href="https://www.bbc.com/japanese/features-and-analysis-67900433">数百万人に地震速報を届ける、社員13人の日本企業 「NERV防災アプリ」の石森社長に聞く - BBCニュース</a></li>
</ul>
</li>
<li><a href="https://nlab.itmedia.co.jp/nl/articles/2401/04/news034.html">石川県、能登半島地震に対する義援物資の受け付けを「企業・団体」のみに限定すると発表 個人での支援は義援金などで(1/2 ページ) - ねとらぼ</a></li>
<li><a href="https://piyolog.hatenadiary.jp/entry/2024/01/06/020106">令和6年能登半島地震の偽情報関連の報道についてまとめてみた - piyolog</a></li>
</ul>
Go 言語の環境変数管理
tag:text.Baldanders.info,2019-09-01:/golang/go-env/
2019-09-01T06:31:18+00:00
2021-12-04T02:40:05+00:00
Go 1.13 からは go env コマンドに -w オプションを付けて環境変数を設定できる。
Spiegel
https://baldanders.info/profile/
<p><a href="https://go.dev/">Go</a> 1.13 より環境変数の管理の仕方が変わった。</p>
<h2>環境変数の設定・削除</h2>
<p>まずは <code>go env</code> コマンドで <a href="https://golang.org/" title="The Go Programming Language">Go 言語</a>関連の環境変数を表示してみる(一部だけね)。
ちなみに私の作業環境は Linux/<a href="https://www.ubuntu.com/" title="The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu">Ubuntu</a> である。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go env
</span></span><span class="line"><span class="cl">GO111MODULE=""
</span></span><span class="line"><span class="cl">GOARCH="amd64"
</span></span><span class="line"><span class="cl">GOBIN=""
</span></span><span class="line"><span class="cl">GOCACHE="/home/username/.cache/go-build"
</span></span><span class="line"><span class="cl">GOENV="/home/username/.config/go/env"
</span></span><span class="line"><span class="cl">GOEXE=""
</span></span><span class="line"><span class="cl">GOFLAGS=""
</span></span><span class="line"><span class="cl">GOHOSTARCH="amd64"
</span></span><span class="line"><span class="cl">GOHOSTOS="linux"
</span></span><span class="line"><span class="cl">GONOPROXY=""
</span></span><span class="line"><span class="cl">GONOSUMDB=""
</span></span><span class="line"><span class="cl">GOOS="linux"
</span></span><span class="line"><span class="cl">GOPATH="/home/username/go"
</span></span><span class="line"><span class="cl">GOPRIVATE=""
</span></span><span class="line"><span class="cl">GOPROXY="https://proxy.golang.org,direct"
</span></span><span class="line"><span class="cl">GOROOT="/usr/local/go"
</span></span><span class="line"><span class="cl">GOSUMDB="sum.golang.org"
</span></span><span class="line"><span class="cl">GOTMPDIR=""
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p>たとえば <code>GO111MODULE</code> の値を <code>on</code> にしたければ</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ export GO111MODULE=on
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env GO111MODULE
</span></span><span class="line"><span class="cl">on
</span></span></code></pre></div><p>などとする。
<a href="https://go.dev/">Go</a> 1.12 まではこれで OK。</p>
<p><a href="https://go.dev/">Go</a> 1.13 からは <code>go env</code> コマンドに <code>-w</code> オプションを付けて環境変数を設定できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ export -n GO111MODULE
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env -w GO111MODULE=auto
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env GO111MODULE
</span></span><span class="line"><span class="cl">auto
</span></span></code></pre></div><p>また <code>-u</code> オプションで設定を削除できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go env -u GO111MODULE
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env | grep GO111MODULE
</span></span><span class="line"><span class="cl">GO111MODULE=""
</span></span></code></pre></div><p>ちなみに shell で設定している環境変数と <code>go env -w</code> コマンドで設定する環境変数が被る場合</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ export GO111MODULE=on
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env -w GO111MODULE=auto
</span></span><span class="line"><span class="cl">warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ go env | grep GO111MODULE
</span></span><span class="line"><span class="cl">GO111MODULE="on"
</span></span></code></pre></div><p>となり shell 側の設定のほうが優先されるようだ。
一時的な変更の場合は shell 側の環境変数を使えということやね。</p>
<h2>環境変数設定の置き場所</h2>
<p><code>go env -w</code> コマンドで設定した環境変数の値は <code>GOENV</code> で指示されるファイルに格納される。
<code>GOENV</code> の既定値は以下の通り(Linux/<a href="https://www.ubuntu.com/" title="The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu">Ubuntu</a> の場合)。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go env GOENV
</span></span><span class="line"><span class="cl">/home/username/.config/go/env
</span></span></code></pre></div><p>ちなみに <code>$HOME/.config/</code> ディレクトリは <a href="https://standards.freedesktop.org/basedir-spec/latest/" title="XDG Base Directory Specification">XDG Base Directory</a> でユーザごとにアプリケーション設定を格納するディレクトリとして規定されている。
また <code>XDG_CONFIG_HOME</code> 環境変数が定義されている場合は,こちらの値が設定ディレクトリとして優先される。</p>
<p><a href="https://go.dev/">Go</a> 1.13 からは <a href="https://golang.org/pkg/os/" title="os - The Go Programming Language"><code>os</code></a><code>.UserConfigDir()</code> 関数で <a href="https://standards.freedesktop.org/basedir-spec/latest/" title="XDG Base Directory Specification">XDG Base Directory</a> に対応した設定ディレクトリを取得できる。
<a href="https://golang.org/pkg/os/" title="os - The Go Programming Language"><code>os</code></a><code>.UserConfigDir()</code> 関数は他のプラットフォームにも対応していて,プラットフォームごとに適切なパスを返すようだ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// UserConfigDir returns the default root directory to use for user-specific
</span></span></span><span class="line"><span class="cl"><span class="c1">// configuration data. Users should create their own application-specific
</span></span></span><span class="line"><span class="cl"><span class="c1">// subdirectory within this one and use that.
</span></span></span><span class="line"><span class="cl"><span class="c1">//
</span></span></span><span class="line"><span class="cl"><span class="c1">// On Unix systems, it returns $XDG_CONFIG_HOME as specified by
</span></span></span><span class="line"><span class="cl"><span class="c1">// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html if
</span></span></span><span class="line"><span class="cl"><span class="c1">// non-empty, else $HOME/.config.
</span></span></span><span class="line"><span class="cl"><span class="c1">// On Darwin, it returns $HOME/Library/Application Support.
</span></span></span><span class="line"><span class="cl"><span class="c1">// On Windows, it returns %AppData%.
</span></span></span><span class="line"><span class="cl"><span class="c1">// On Plan 9, it returns $home/lib.
</span></span></span><span class="line"><span class="cl"><span class="c1">//
</span></span></span><span class="line"><span class="cl"><span class="c1">// If the location cannot be determined (for example, $HOME is not defined),
</span></span></span><span class="line"><span class="cl"><span class="c1">// then it will return an error.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">UserConfigDir</span><span class="p">()</span> <span class="p">(</span><span class="kt">string</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">dir</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">switch</span> <span class="nx">runtime</span><span class="p">.</span><span class="nx">GOOS</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">case</span> <span class="s">"windows"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="p">=</span> <span class="nf">Getenv</span><span class="p">(</span><span class="s">"AppData"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dir</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">"%AppData% is not defined"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">case</span> <span class="s">"darwin"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="p">=</span> <span class="nf">Getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dir</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">"$HOME is not defined"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="o">+=</span> <span class="s">"/Library/Application Support"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">case</span> <span class="s">"plan9"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="p">=</span> <span class="nf">Getenv</span><span class="p">(</span><span class="s">"home"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dir</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">"$home is not defined"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="o">+=</span> <span class="s">"/lib"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">default</span><span class="p">:</span> <span class="c1">// Unix
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">dir</span> <span class="p">=</span> <span class="nf">Getenv</span><span class="p">(</span><span class="s">"XDG_CONFIG_HOME"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dir</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="p">=</span> <span class="nf">Getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dir</span> <span class="o">==</span> <span class="s">""</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="s">""</span><span class="p">,</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">"neither $XDG_CONFIG_HOME nor $HOME are defined"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">dir</span> <span class="o">+=</span> <span class="s">"/.config"</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">dir</span><span class="p">,</span> <span class="kc">nil</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>以前から <a href="https://golang.org/pkg/os/" title="os - The Go Programming Language"><code>os</code></a><code>.UserCacheDir()</code> 関数で <a href="https://standards.freedesktop.org/basedir-spec/latest/" title="XDG Base Directory Specification">XDG Base Directory</a> 対応のキャッシュ・ディレクトリは取得可能だったが,これでまたひとつ対応が進んだわけだ。</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://zenn.dev/tennashi/articles/3b87a8d924bc9c43573e">GOPATH に(可能な限り)依存しない Go 開発環境(Go 1.15 版) | Zenn</a></li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/416Stewy0NS._SL160_.jpg" width="123" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B099928SJD?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">プログラミング言語Go</a></dt>
<dd>アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)</dd>
<dd>丸善出版 2016-06-20 (Release 2021-07-13)</dd>
<dd>Kindle版</dd>
<dd>B099928SJD (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想は<a href="https://text.baldanders.info/remark/2016/07/go-programming-language/" >こちら</a>。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2021-05-22">2021-05-22</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- プログラミング言語Go -->
週末スペシャル: 2016年熊本地震
tag:text.Baldanders.info,2016-04-17:/remark/2016/04/17-stories/
2016-04-17T06:38:38+00:00
2024-01-02T11:40:36+00:00
2016年熊本地震 / 三半規管に異常あり / ATOM 1.7 と Visual Studio Code 1.0 が登場 / Windows 版 QuickTime がようやく終了 / その他の気になる記事
Spiegel
https://baldanders.info/profile/
<p>疲れが溜まってるのか,ここのところ自宅帰って飯食ったらそのまま寝落ちしていることが多い。
妙に怒りっぽくなってるし(路面電車で隣に人が座っただけでイラッとする)気をつけないとなぁ。</p>
<ol>
<li><a href="#eq">2016年熊本地震</a></li>
<li><a href="#astro">三半規管に異常あり</a></li>
<li><a href="#edit">ATOM 1.7 と Visual Studio Code 1.0 が登場</a></li>
<li><a href="#qt">Windows 版 QuickTime がようやく終了</a></li>
<li><a href="#other">その他の気になる記事</a></li>
</ol>
<h2 id="eq">2016年熊本地震</h2>
<p>まずは被災された方々にはお見舞い申し上げます。
地震関連 tweets をチェックしてたけど直下型のせいか M4, M5 クラスの余震でも震度5とか結構あって,これはちょっとキツいよね。
特に夜中の地震はトラウマで不眠症になったりするのでホンマに大変だと思います。
私自身は今は自分のことで手一杯なので何もできないのですが,まずは事態が落ち着いてくれることを祈ります。</p>
<p>大きな災害なので流石にテレビ報道も見たんだけど,やっぱテレビはクズだね。
ヘリで上空から中継してる映像とかあるんだけど,あれ地上から「ウザい」と思われてるの知っててやってるのかね。
様々な映像を見るだに「日本のマスコミはクソ」としか言いようがない。</p>
<p>でも国土地理院の <a href="http://psgsv2.gsi.go.jp/koukyou/public/uav/">UAV (Unmanned Aerial Vehicle)</a> で空撮した映像はいいね。</p>
<ul>
<li><a href="http://www.gsi.go.jp/BOUSAI/H27-kumamoto-earthquake-index.html">平成28年熊本地震に関する情報|国土地理院</a></li>
</ul>
<figure style='margin:0 auto;text-align:center;'>
<div style="position: relative; margin: 0 2rem; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;">
<iframe class="youtube-player" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" allowfullscreen frameborder="0" src="https://www.youtube-nocookie.com/embed/DXTAAvVB2M8" allowfullscreen></iframe>
</div>
<figcaption><div><a href="https://www.youtube.com/watch?v=DXTAAvVB2M8">【国土地理院】 南阿蘇村河陽周辺の断層 - YouTube</a></div></figcaption>
</figure>
<p>人が容易に入れないようなところでも drone なら入れるし,軽い荷物なら配送できる drone とかもあると聞くので,もっとこういう技術を活用したらいいと思うよ。</p>
<p>危機状態に求められるリーダーと平時のリーダーとでは要件が異なる。
「政治判断」しかできない官僚・政治家や官僚的体質の企業・組織は危機状態に機能しないどころか障害になる。
彼らをバイパスして必要な情報や判断を必要な人に行き渡らせ有機的に連携できるか。
Crisis Management って結局はそういうことなんだよね。</p>
<p>小川一水さんの『復活の地』でも読んで勉強しなはれ(笑)</p>
<figure style='margin:0 auto;text-align:center;'>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">【拡散希望】『阪神大震災被災者からのお願い』 嬉しいんです!嬉しいんですけどその援助、もうちょっとだけ待って下さい! <a href="https://t.co/2BgwW00mRx">pic.twitter.com/2BgwW00mRx</a></p>— 澤田 圭 キャラクターデザイナー (@keisawada) <a href="https://twitter.com/keisawada/status/721306607389253632">2016年4月16日</a></blockquote>
</figure>
<h3>関連ブックマーク(随時追記予定)</h3>
<ul>
<li><a href="http://www.eri.u-tokyo.ac.jp/?page_id=183&id=12595">平成28年(2016年)熊本地震(M6.5)の地学的背景と布田川断層帯・日奈久断層帯について</a></li>
<li><span><a href="http://www.mext.go.jp/component/a_menu/other/detail/__icsFiles/afieldfile/2016/04/17/1369832_002.pdf">2016年4月17日地震調査委員会評価文(熊本地方地震) <sup><i class="far fa-file-pdf"></i></sup></a></span></li>
<li><span><a href="http://www.mext.go.jp/component/a_menu/other/detail/__icsFiles/afieldfile/2016/04/17/1369832_003.pdf">平成28 年4 月17日地震調査委員会図表(熊本地方地震) <sup><i class="far fa-file-pdf"></i></sup></a></span></li>
<li><a href="http://kumamoto-jishin.info/map.html">避難所、給水、配給、空いているスーパーなどについてgooglemapまとめ | 熊本地震 情報掲示板</a></li>
<li><a href="http://qzss.go.jp/news/archive/gsi_kumamoto_160418.html">熊本地震で観測した電子基準点の変位を、国土地理院がいち早く公表|ニュース/アーカイブ|準天頂衛星システム(QZSS)公式サイト - 内閣府</a></li>
<li><a href="http://www.hiroshima-u.ac.jp/news/show/id/25510">広島大学 熊本県熊本地方を震源とする地震に関する記者説明会を開催しました</a></li>
<li><a href="http://scienceportal.jst.go.jp/news/newsflash_review/newsflash/2016/04/20160415_01.html">2016年4月15日ニュース「熊本の大地震は横ずれ断層型 震源浅く揺れ大きく」 | SciencePortal</a></li>
<li><a href="http://scienceportal.jst.go.jp/news/newsflash_review/newsflash/2016/04/20160418_01.html">2016年4月18日ニュース「本震と余震は別の断層帯で発生 地震調査委と気象庁が見解」 | SciencePortal</a></li>
<li><a href="http://scienceportal.jst.go.jp/news/newsflash_review/newsflash/2016/04/20160418_02.html">2016年4月18日ニュース「被害状況を動画で公開 国土地理院がドローンで調査」 | SciencePortal</a></li>
<li><a href="http://www.pref.kumamoto.jp/kiji_15425.html?type=top">平成28年熊本地震に伴う被災地救援等のために使用する車両の取り扱いについて / 熊本県</a></li>
<li><a href="http://qzss.go.jp/usage/userreport/hinanpass_160420.html">オープンデータで避難所地図を表示する「ヒナンパス」が、熊本地震に暫定対応|利用者向け情報|準天頂衛星システム(QZSS)公式サイト - 内閣府</a></li>
<li><a href="http://qzss.go.jp/news/archive/its-jp_160419.html">熊本地震で、ITSJapanが乗用車・トラックの通行実績情報を提供|ニュース/アーカイブ|準天頂衛星システム(QZSS)公式サイト - 内閣府</a></li>
<li><a href="https://openstreetmap.jp/node/779">熊本地震への対応について | OpenStreetMap Japan</a></li>
<li><a href="http://www.city.kumamoto.jp/hpkiji/pub/detail.aspx?c_id=5&type=top&id=12541">災害ボランティアの受入について / 熊本市ホームページ</a></li>
<li><a href="https://www.pref.hiroshima.lg.jp/soshiki/4/kumamoto-kiki02.html">平成28年熊本地震に伴う被災地救援などのために使用する車両の取扱について - 広島県ホームページ</a></li>
</ul>
<h2 id="astro">三半規管に異常あり</h2>
<ul>
<li><span><a href="http://fanfun.jaxa.jp/jaxatv/files/20160415_hitomi.pdf">X線天文衛星「ひとみ」(ASTRO-H)の状況について <sup><i class="far fa-file-pdf"></i></sup></a></span></li>
<li><a href="http://sorae.jp/space/2016_04_15_asrtoh.html">X線天文衛星「ひとみ」、2重のトラブルで「自分で回った」と推定 | Sorae.jp : 宇宙(そら)へのポータルサイト</a></li>
<li><a href="http://www.jaxa.jp/press/2016/04/20160419_hitomi_j.html">JAXA | X線天文衛星「ひとみ」(ASTRO-H)の状況について</a></li>
<li><a href="http://scienceportal.jst.go.jp/news/newsflash_review/newsflash/2016/04/20160420_01.html">2016年4月20日ニュース「姿勢制御装置が誤作動 通信途絶えた天文衛星『ひとみ』」 | SciencePortal</a></li>
<li><a href="http://sorae.jp/02/2016_04_26_astroh.html">X線天文衛星「ひとみ」、浮かび上がった3つの問題点 | sorae.jp : 宇宙(そら)へのポータルサイト</a></li>
</ul>
<p>小天体かデブリにでもぶち当たったのかと思ったが,擬人化するなら三半規管の異常で「ピヨった」状態らしい。
太陽電池パネルの一部が千切れるほどの高速回転って相当だと思うけど。</p>
<p>JAXA は通信が回復する可能性を期待して受信体制を続けるようだが,これは難しいんじゃないかなぁ。
宇宙じゃ「ちょいと行ってきて直す」とかできないからねぇ<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p>
<h2 id="edit">ATOM 1.7 と Visual Studio Code 1.0 が登場</h2>
<ul>
<li><a href="http://www.forest.impress.co.jp/docs/news/20160414_753303.html">GitHub、オープンソースのテキストエディター「Atom」の最新正式版v1.7を公開 - 窓の杜</a></li>
<li><a href="http://www.forest.impress.co.jp/docs/news/20160415_753468.html">Microsoft製の無償コードエディター「Visual Studio Code」がv1.0.0に - 窓の杜</a></li>
<li><a href="http://www.publickey1.jp/blog/16/visual_studio_code10.html">オープンソースの開発ツール「Visual Studio Code」が正式版となるバージョン1.0に到達 - Publickey</a></li>
<li><a href="http://qiita.com/74th/items/12521790a1c680af934c">1.0になったVisualStudioCodeの強みと弱点 - Qiita</a></li>
</ul>
<p>私は Windows 版の <a href="https://atom.io/" title="Atom">ATOM</a> を使ってるんだけど, tree view からのファイル削除をしくじるんだよなぁ(<a href="https://atom.io/" title="Atom">ATOM</a> というより <a href="https://atom.io/" title="Atom">ATOM</a> にインストールしているパッケージのせいかもしれんけど)。
多分あれって Windows のファイルシステムのせいだよなぁ。</p>
<ul>
<li><a href="http://mattn.kaoriya.net/software/why-i-use-cmd-on-windows.htm">Big Sky :: Windows ユーザは cmd.exe で生きるべき。</a></li>
</ul>
<p><a href="https://code.visualstudio.com/" title="Visual Studio Code - Code Editing. Redefined">Visual Studio Code</a> はいい製品に育ったねぇ。
私は既に <a href="https://atom.io/" title="Atom">ATOM</a> をメインに使ってるけど,これは「ちょっと使ってみようかな」と思わせる製品になった。</p>
<p>最近の Microsoft は .NET Core と <a href="https://code.visualstudio.com/" title="Visual Studio Code - Code Editing. Redefined">Visual Studio Code</a> がいい感じである。
逆に Windows 10 は過剰なコントロールでどんどんダメな OS になっていく。
もう Microsoft も Windows は事実上見捨ててるのだろう。</p>
<h2 id="qt">Windows 版 QuickTime がようやく終了</h2>
<ul>
<li><a href="https://www.us-cert.gov/ncas/alerts/TA16-105A">Apple Ends Support for QuickTime for Windows; New Vulnerabilities Announced</a></li>
<li><a href="http://jvn.jp/ta/JVNTA92371676/">JVNTA#92371676: QuickTime for Windows に複数のヒープバッファオーバフローの脆弱性</a></li>
</ul>
<p>Mac 版とかはどうか知らないが, Windows 版の QuickTime は最初からクソッタレな実装だった。
しかも当時は iTunes と抱き合わせでインストールされるので容易に捨てられず往生した覚えがある。</p>
<p>CVSSv3 基本値は 6.3 なので「要注意」レベルだが,サポートされない製品を入れておく理由はない。
危険物はとっとと捨てましょう。</p>
<h2 id="other">その他の気になる記事</h2>
<ul>
<li><a href="https://torrentfreak.com/linking-to-pirated-content-is-not-copyright-infringement-160407/">Linking to Pirated Content Is Not Copyright Infringement, Says EU Court Adviser - TorrentFreak</a></li>
<li><a href="http://japan.cnet.com/news/service/35081244/">カナダ警察、「BlackBerry」のマスター暗号化キーを入手していた–メッセージの解読に利用 - CNET Japan</a></li>
<li><a href="https://www.eff.org/deeplinks/2016/04/white-house-source-code-policy-big-win-open-government">White House Source Code Policy a Big Win for Open Government | Electronic Frontier Foundation</a></li>
<li><a href="http://www.ipa.go.jp/security/topics/alert280413.html">【注意喚起】ランサムウェア感染を狙った攻撃に注意:IPA 独立行政法人 情報処理推進機構</a></li>
<li><a href="https://www.w3.org/blog/2016/04/working-on-html5-1/">Working on HTML5.1 | W3C Blog</a>
<ul>
<li><a href="https://github.com/w3c/html">w3c/html: Working Draft of the HTML specification</a></li>
<li><a href="http://www.publickey1.jp/blog/16/w3chtml519github.html">W3C、「HTML5.1」を今年9月に勧告とする計画。仕様はGitHubで公開 - Publickey</a></li>
</ul>
</li>
<li><a href="https://jp.globalvoices.org/2016/04/13/40418/">中国は「オーウェル風ディストピア」?「社会信用制度」とは · Global Voices 日本語</a></li>
<li><a href="https://blog.creativecommons.org/2016/04/14/japanese-beatmaking-event-producers-create-cc-remixes-just-four-hours/">At Japanese Beatmaking Event, Producers Create CC Remixes in Just Four Hours - Creative Commons blog - Creative Commons</a> : 日本のイベントに本家 CC が反応していることに驚いた。昨年のソウルのイベントでは CCjp はほぼ無視してたのにね</li>
<li><a href="https://lists.gnupg.org/pipermail/gnupg-announce/2016q2/000386.html">[Announce] Libgcrypt 1.7.0 released</a> : SHA-3 や ChaCha など新しいアルゴリズムが登場</li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B00GJOESS6?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51ymtvyHUmL._SL160_.jpg" width="108" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B00GJOESS6?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">復活の地1</a></dt>
<dd>小川一水 (著)</dd>
<dd>早川書房 2012-09-15 (Release 2013-11-15)</dd>
<dd>Kindle版</dd>
<dd>B00GJOESS6 (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="4"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="far fa-star"></i></abbr></dd>
</dl>
<p class="description">コミカライズ版もある。てか,コミカライズ版を最初に読んだ(笑) 大きな災害がある度にこの作品を思い出す。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2016-04-17">2016-04-17</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 復活の地 -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>ハッブル望遠鏡の時はスペースシャトルが運用されていた時代なので,望遠鏡のところまで行って修理したけど。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
週末スペシャル: 公開鍵暗号の研究者がチューリング賞を受賞
tag:text.Baldanders.info,2016-03-06:/remark/2016/03/06-stories/
2016-03-06T09:20:23+00:00
2022-05-04T00:31:44+00:00
公開鍵暗号の研究者がチューリング賞を受賞 / 出版社(者)としての青空文庫と aozorahack / 避難訓練と 3.11 / ユーザが EC に求めること / その他の気になる記事
Spiegel
https://baldanders.info/profile/
<p>2月は逃げました。
3月ですよ。
年度末ですよ。</p>
<ol>
<li><a href="#dh">公開鍵暗号の研究者がチューリング賞を受賞</a></li>
<li><a href="#aozora">出版社(者)としての青空文庫と aozorahack</a></li>
<li><a href="#risk">避難訓練と 3.11</a></li>
<li><a href="#ec">ユーザが EC に求めること</a></li>
<li><a href="#other">その他の気になる記事</a></li>
</ol>
<h2 id="dh">公開鍵暗号の研究者がチューリング賞を受賞</h2>
<ul>
<li><a href="http://www.gizmodo.jp/2016/03/Turing_Award_for_public_key_encryption.html">コンピューティング分野のノーベル賞ことチューリング賞、公開鍵暗号の研究者に与えられる : ギズモード・ジャパン</a></li>
</ul>
<p>「チューリング賞(ACM A. M. Turing Award)」はコンピュータ科学の分野での最高権威の賞と言われている。
この賞に(両氏の名を冠した) “Diffie-Hellman” 暗号方式の発明者である Whitfield Diffie, Martin E. Hellman 両氏が今まで受賞されていなかったことのほうが驚きだが,公開鍵暗号といえば RSA のほうが真っ先に浮かんでしまうからだろうか。
今ごろ受賞というのも政治臭プンプンだが,功績が認められるということはいいことである。</p>
<p>具体的な論文はこちら。</p>
<ul>
<li><span><a href="https://www-ee.stanford.edu/~hellman/publications/24.pdf">New Directions in Cryptography <sup><i class="far fa-file-pdf"></i></sup></a></span></li>
</ul>
<p>20世紀後半は暗号の暗黒時代とも言われている。
もともと暗号技術は軍事技術の一種として使われることが多かったが,第2次世界大戦の前後から重要性が高まり,国家による統制が激しくなった。
これを変えるきっかけとなったもののひとつが公開鍵暗号である。</p>
<p>詳しくは Steven Levy さんの『<a href="https://www.amazon.co.jp/exec/obidos/ASIN/4314009071/baldandersinf-22/">暗号化 プライバシーを救った反乱者たち</a>』をどうぞ。</p>
<h2 id="aozora">出版社(者)としての青空文庫と aozorahack</h2>
<p><a href="http://www.ospn.jp/osc2016-spring/" title="オープンソースカンファレンス2016 Tokyo/Spring - オープンソースの文化祭!">OSC Tokyo 2016/Spring</a> のときの発表資料だそうな。</p>
<figure style='margin:0 auto;text-align:center;'>
<div style="position: relative; margin: 0 2rem; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;">
<iframe src="//www.slideshare.net/slideshow/embed_code/key/itRRJPdUruVE52" frameborder="0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" allowfullscreen></iframe>
</div>
<figcaption><div><a href="http://www.slideshare.net/takahashim/osc-2016-tokyospring-aozorahack">aozorahackと青空文庫の現状とこれから (OSC 2016 Tokyo/Spring)</a></div></figcaption>
</figure>
<p>この中で青空文庫の出版社(者)的な機能に注目している。
つまり著作権の切れた書籍に対して入力・校正・公開を行うプロセスは出版(publishing)そのものではないかという指摘である。
で,青空文庫の「図書館」機能と「出版」機能を分離することでより多くの人を巻き込むことができるのではないかという提案のようだ。</p>
<p>具体的には管理用の DB から公開可能なサブセットを公開 DB として使えるようにしたいらしい。</p>
<figure style='margin:0 auto;text-align:center;'><a href="http://www.slideshare.net/takahashim/osc-2016-tokyospring-aozorahack"><img src="https://photo.baldanders.info/flickr/image/24920649843_m.png" srcset="https://photo.baldanders.info/flickr/image/24920649843_m.png 500w" sizes="(min-width:600px) 500px, 80vw" alt="「aozorahackと青空文庫の現状とこれから (OSC 2016 Tokyo/Spring)」" loading="lazy"></a><figcaption><div><a href="http://www.slideshare.net/takahashim/osc-2016-tokyospring-aozorahack">「aozorahackと青空文庫の現状とこれから (OSC 2016 Tokyo/Spring)」</a></div></figcaption>
</figure>
<p>多分ファイルも公開可能なものを別にして切り出したほうがいいのだろう(公開していない校正中の作品にはまだ著作権が切れていないものもあるので)。
公開 DB およびファイルにアクセスする API を作れば様々な人が様々なシーンで公有作品を利用できる。
また翻訳作品以外の Free Culture Licenses<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> の作品も多く含めることができれば青空文庫の幅が広がるかもしれない。</p>
<h2 id="risk">避難訓練と 3.11</h2>
<ul>
<li><a href="http://311walk.jp/">3.11WALK - 3.11は、歩いて帰ろう。</a></li>
</ul>
<p>大規模災害は滅多に起こらない。
だから,いざ起きた時,つまり「事後」にどう備えるか。
ただ単に情緒的に 3.11 を思い出すのではなく,これから起きる未来を想定して「避難訓練」をしていくことはとても重要だと思う。</p>
<p>「想定外を想定する」のは結構難しいが必要なことである。
何事もね。</p>
<h2 id="ec">ユーザが EC に求めること</h2>
<ul>
<li><a href="http://japan.zdnet.com/article/35078917/">PayPalとJECCICAが「EC戦略白書」発表、EC企業と顧客の認識差が浮き彫り - ZDNet Japan</a></li>
</ul>
<figure>
<blockquote>
<q>ユーザーが中小ECサイトを利用しない理由として、(1)存在が知られていない(44.5%)、(2)会員登録が面倒(34.4%)、(3)商品数の少なさ(25.6%)、(4)セキュリティ面の不安(17.5%)--の順で回答が多かった。商品の少なさやセキュリティよりも、「会員登録が面倒」という理由の方が強いことは注目に値する。</q>
</blockquote>
<figcaption><div><q><a href="http://japan.zdnet.com/article/35078917/">PayPalとJECCICAが「EC戦略白書」発表、EC企業と顧客の認識差が浮き彫り</a></q>より</div></figcaption>
</figure>
<p>「会員登録が面倒」というのはよく分かる。
ユーザは「一見客」として来ているのに会員登録を要求されるのはウザいことこの上ない。
問題は,そういうユーザの心理をサービス・プロバイダ側が認識していなかったということだろう。
ユーザを囲い込むことに躍起になって,ユーザのことを全く考えていないという証拠でもある。</p>
<figure>
<blockquote>
<q>この調査結果を踏まえて川連氏は、中小EC企業はユーザーの「囲い込み戦略」を止めるべきだと断言した。国内ECサイトの売上トップ100社のうち会員登録を必須とするサイトは7割。それに対して、米国のECサイト売上トップ100社で会員登録が必須なのは2割程度だ。さらにトップ25社に絞ると、国内21社に対して米国は2社となる。「すでに、グローバルトレンドはゲスト購入に移行しつつある」(川連氏)。</q>
</blockquote>
<figcaption><div><q><a href="http://japan.zdnet.com/article/35078917/">PayPalとJECCICAが「EC戦略白書」発表、EC企業と顧客の認識差が浮き彫り</a></q>より</div></figcaption>
</figure>
<p>似たような発想は実際の店舗でもあって</p>
<ul>
<li><a href="https://jp.techcrunch.com/2016/03/01/toreta-pos/">飲食店の「常連作り」支援に向け、予約台帳のトレタがPOSシステム5社と連携へ | TechCrunch Japan</a></li>
</ul>
<p>もう「常連」を囲い込みの道具としか見なしていないことがミエミエの最低マーケティングである。</p>
<p>POS などのシステムはユーザを「スマート・モブ(smart mob)」と見なし行動追跡しながら保険統計学的に評価する。
近年はやりの「ビッグ・データ(big data)」も同じである。
これはこれで大事な分析だが,そのような視点から「常連」が生まれることはない。</p>
<p>「固定客」と「常連客」は全くベクトルが違う。
足繁く通っているからといって客側が自身を常連とは認識してないこともあるし(毎朝マックでコーヒーを飲んでるからといって自分がその店の常連だとは思ってないだろう),逆に数年に1度しか来ない「常連客」だっているのだ<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。</p>
<p>かつての「クーポン」戦略が失敗したのは,ユーザを囲い込んでいるつもりで実は「クーポン」という土俵ですべての店舗が相対評価されてしまっている点である。
ユーザは数多ある「クーポン」の中から一番お得なものを都度選択しているだけで,お店に対する愛着も敬意もない。
ただ「クーポンを使えばお得」という感想が残るだけだ。</p>
<p>EC も同じこと。
ユーザから見てその店舗に惹きつけられる何かがあれば囲い込む必要はないし,そこで勝負していかなければ結局は「EC」という括りの中で相対評価されるだけで「固定客」にも「常連客」にもならない。</p>
<h2 id="other">その他の気になる記事</h2>
<p>あとで個別に記事にするかもしれないが,とりあえずブックマークのみ。</p>
<ul>
<li><a href="https://magazine-k.jp/2016/03/02/little-bookstore-in-northern-street/">北海道のシャッター通りに本屋をつくる « マガジン航[kɔː]</a></li>
<li><a href="https://www.schneier.com/blog/archives/2016/02/the_importance_.html">The Importance of Strong Encryption to Security - Schneier on Security</a></li>
<li><a href="http://www.forest.impress.co.jp/docs/news/20160229_745961.html">「Ruby」をWindows環境へ簡単導入できる「Rumix 2」が更新。「Ruby 2.2」に対応 - 窓の杜</a></li>
<li><a href="http://internet.watch.impress.co.jp/docs/news/20160301_746190.html">「丸善&ジュンク堂ネットストア」がネット書店「honto」に統合、hontoでも店舗取り置きサービスが利用可能に -INTERNET Watch</a></li>
<li><a href="http://qiita.com/TakahikoKawasaki/items/f2a0d25a4f05790b3baa">OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る - Qiita</a></li>
<li><a href="http://qiita.com/TakahikoKawasaki/items/30fbd546935cea914e4f">【第二弾】OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る - Qiita</a></li>
<li><a href="http://qiita.com/A-I/items/49bcb56ed977b4fb36ff">GoTTY 良さそう - Qiita</a>
<ul>
<li><a href="http://qiita.com/kooshin/items/8c7dbfc9c5e8a88d1705">GoTTYでブラウザからルータを操作してみた - Qiita</a></li>
</ul>
</li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51ZRZ62WKCL._SL160_.jpg" width="108" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">暗号化 プライバシーを救った反乱者たち</a></dt>
<dd>スティーブン・レビー (著), 斉藤 隆央 (翻訳)</dd>
<dd>紀伊國屋書店 2002-02-16</dd>
<dd>単行本</dd>
<dd>4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2015-03-09">2015-03-09</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 暗号化 プライバシーを救った反乱者たち -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://creativecommons.org/publicdomain/zero/1.0/deed.ja">CC0</a>, <a href="https://creativecommons.org/licenses/by/4.0/deed.ja">by</a>, <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.ja">by-sa</a> を合わせて Free Culture Licenses と呼ぶ。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p>広島市は「支店都市」なのでだいたい数年単位で人が入れ替わる。故にわざわざ遠方から来る「滅多に来ない常連客」だっているのである。でも「滅多に来ない常連客」がいるというのは,その店が長く続いている証でもある。繁華街では「2年保てば上出来,3年保てば老舗」と言われるくらいお店の入れ替わりも激しい。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
GOPATH 汚染問題
tag:text.Baldanders.info,2015-09-29:/golang/gopath-pollution/
2015-09-29T14:40:59+00:00
2020-01-03T06:05:57+00:00
go get コマンドは外部パッケージの revision 等をコントロールできず,常に repository の最新コードを取ってこようとする。GOPATH 内に複数のプロジェクトが同居している場合は同じ外部パッケージでもプロジェクトごとに異なるリビジョンを要求する場合があり,管理が煩雑になってしまう。
Spiegel
https://baldanders.info/profile/
<div class="box"><strong>【注意 2018-09-26】</strong>
この問題はバージョン 1.11 からサポートされる「モジュール」機能によって解消可能です。
もはやこの記事の内容は古いものであり「こんな時代もあったね」と生暖かい気持ちで読んでいただければ幸いです。</div>
<p>(初出: <a href="http://qiita.com/spiegel-im-spiegel/items/73ebc684b5807277b7e2">そろそろ真面目に Golang 開発環境について考える — GOPATH 汚染問題 - Qiita</a>,<a href="http://qiita.com/spiegel-im-spiegel/items/baa3671c7e1b8a6594a9">そろそろ真面目に Golang 開発環境について考える — Internal Packages と Vendoring - Qiita</a>)</p>
<p><code>go get</code> コマンドはとても強力な機能で,私のように Windows と UNIX 系環境の間を渡り歩いてる身としては, make などの tool chain に大きく依存することなく, <code>go get</code> コマンドだけで repository の fetch からビルド・インストールまで出来てしまうのは非常にありがたい<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p>
<p>しかし, <code>go get</code> コマンドは外部パッケージの revision 等をコントロールできず,常に repository の最新コードを取ってこようとする。
ひとつの環境でひとつのプロジェクトを管理していくのならこれでも何とかならないこともないが, <code>GOPATH</code> 内に複数のプロジェクトが同居している場合は同じ外部パッケージでもプロジェクトごとに異なるリビジョンを要求する可能性があり,管理が煩雑になってしまう。</p>
<p>しかも困ったことに <code>GOPATH</code> 環境変数は複数のプロジェクト管理を想定していないため,全てのパッケージをひとつのフォルダに入れようとする<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>。</p>
<h2>【対策1】 プロジェクトごとに GOPATH を設定し直す</h2>
<p>この問題に対する一番安直な答えは「プロジェクトごとに <code>GOPATH</code> を設定し直す」である。例えば<a href="https://text.baldanders.info/golang/project-based-development/" title="プロジェクト・ベースの開発環境をつくる">前回</a>紹介した <a href="http://getgb.io/" title="gb - A project based build tool for Go">gb</a> をビルドする場合は以下のようにする。</p>
<pre tabindex="0"><code>C:>mkdir C:\workspace\gb
C:>SET GOPATH=C:\workspace\gb
C:>go get -v github.com/constabulary/gb/...
github.com/constabulary/gb (download)
github.com/constabulary/gb/log
github.com/constabulary/gb
github.com/constabulary/gb/vendor
github.com/constabulary/gb/cmd
github.com/constabulary/gb/cmd/gb
github.com/constabulary/gb/cmd/gb-vendor
</code></pre><p>あとは <code>GOPATH</code> 直下の <code>bin</code> フォルダにパスを通すか,パスの通ってるフォルダに実行ファイルをコピーすればよい。
実行履歴はバッチファイル(UNIX 系なら shell スクリプト)に保存しておけばいつでも復元できる。</p>
<p>毎回環境をセットアップしないといけないのは面倒だが,プロジェクト管理のためのツールも必要なく, Go コンパイラの標準機能のみで管理できる。
標準機能のみで管理できるというのは結構重要で,たとえば CI ツールを使っている場合は,設定を単純にできるので管理しやすいといえる。</p>
<p>UNIX 系の環境であれば <a href="http://direnv.net/" title="direnv - unclutter your .profile">direnv</a> を使う手もある<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>。
<a href="http://direnv.net/" title="direnv - unclutter your .profile">direnv</a> は <code>cd</code> をフックし,ディレクトリごとに環境変数を書き換えることができる。
この機能を使ってプロジェクト・フォルダごとに <code>GOPATH</code> を設定できる。</p>
<h2>【対策2】 プロジェクト・ベースの管理ツールを使う</h2>
<p>もうひとつは <a href="http://getgb.io/" title="gb - A project based build tool for Go">gb</a> のようなプロジェクト・ベースでコード管理のできるツールを使う方法である。
<a href="http://getgb.io/" title="gb - A project based build tool for Go">gb</a> については<a href="https://text.baldanders.info/golang/project-based-development/" title="プロジェクト・ベースの開発環境をつくる">前回</a>紹介したので,そちらを参照のこと。</p>
<p><a href="http://getgb.io/" title="gb - A project based build tool for Go">gb</a> で作った開発環境はフォルダ構成を丸ごと開発メンバに配布・同期することが可能になるため,複数人で環境を合わせることが容易になる。</p>
<h2>【対策3】 Go 1.5 の Vendoring 機能を使う</h2>
<p><a href="https://golang.org/" title="The Go Programming Language">Go 言語</a>のバージョン 1.5 から Vendoring 機能が使えるようになった。</p>
<p>Vendoring 機能を使うと,外部パッケージを <code>GOPATH</code> とは独立に管理できるようになる。
この機能を使うには環境変数 <code>GO15VENDOREXPERIMENT</code> に 1 をセットする。</p>
<p>(<strong>追記</strong> 当初の予告通り Vendoring 機能は 1.6 から既定の機能になった。環境変数 <code>GO15VENDOREXPERIMENT</code> をセットしなくても有効になる)</p>
<ul>
<li><a href="https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit">Go 1.5 Vendor Experiment</a></li>
</ul>
<p>Vendoring 機能が有効な状態では <code>vendor</code> フォルダが特別な意味を持つ。
たとえば <code>mypackage</code> パッケージに対して <code>mypackage/vendor/vpackage</code> と配置した場合, <code>import "vpackage"</code> と記述すれば <code>mypackage/vendor</code> フォルダ以下の <code>vpackage</code> も探してくれる。</p>
<p>では,<a href="https://text.baldanders.info/golang/project-based-development/" title="プロジェクト・ベースの開発環境をつくる">前回</a>作ったコードを流用して確かめてみる。</p>
<pre tabindex="0"><code>C:\workspace\vdemo>SET GOPATH=C:\workspace\vdemo
C:\workspace\vdemo>SET GO15VENDOREXPERIMENT=1
C:\workspace\vdemo>tree /f .
C:\WORKSPACE\VDEMO
└─src
└─julian-day
julian-day.go
C:\workspace\vdemo>go build ./...
src\julian-day\julian-day.go:10:2: cannot find package "github.com/spiegel-im-spiegel/astrocalc/modjulian" in any of:
C:\Go\src\github.com\spiegel-im-spiegel\astrocalc\modjulian (from $GOROOT)
C:\workspace\vdemo\src\github.com\spiegel-im-spiegel\astrocalc\modjulian (from $GOPATH)
C:\workspace\vdemo>mkdir src\julian-day\vendor
C:\workspace\vdemo>tree /f .
C:\WORKSPACE\VDEMO
└─src
└─julian-day
│ julian-day.go
│
└─vendor
C:\workspace\vdemo>go build ./...
src\julian-day\julian-day.go:10:2: cannot find package "github.com/spiegel-im-spiegel/astrocalc/modjulian" in any of:
C:\workspace\vdemo\src\julian-day\vendor\github.com\spiegel-im-spiegel\astrocalc\modjulian (vendor tree)
C:\Go\src\github.com\spiegel-im-spiegel\astrocalc\modjulian (from $GOROOT)
C:\workspace\vdemo\src\github.com\spiegel-im-spiegel\astrocalc\modjulian (from $GOPATH)
</code></pre><p><code>vendor</code> フォルダを追加したことで Go コンパイラの挙動が変わったことがお分かりだろうか。
目的のパッケージを vendor tree → <code>GOROOT</code> → <code>GOPATH</code> の順で捜索している。</p>
<p>では <code>vendor</code> フォルダに外部パッケージを導入してビルドしてみよう。</p>
<pre tabindex="0"><code>C:\workspace\vdemo>pushd src\julian-day\vendor
C:\workspace\vdemo\src\julian-day\vendor>git clone https://github.com/spiegel-im-spiegel/astrocalc.git github.com/spiegel-im-spiegel/astrocalc
Cloning into 'github.com/spiegel-im-spiegel/astrocalc'...
remote: Counting objects: 43, done.
remote: Total 43 (delta 0), reused 0 (delta 0), pack-reused 43
Unpacking objects: 100% (43/43), done.
Checking connectivity... done.
C:\workspace\vdemo\src\julian-day\vendor>popd
C:\workspace\vdemo>tree /f .
C:\WORKSPACE\VDEMO
└─src
└─julian-day
│ julian-day.go
│
└─vendor
└─github.com
└─spiegel-im-spiegel
└─astrocalc
│ .editorconfig
│ .gitignore
│ .travis.yml
│ LICENSE
│ README.md
│
└─modjulian
example_test.go
LICENSE
modjulian.go
modjulian_test.go
C:\workspace\vdemo>go install -v ./...
julian-day/vendor/github.com/spiegel-im-spiegel/astrocalc/modjulian
julian-day
C:\workspace\vdemo>tree /f .
C:\WORKSPACE\VDEMO
├─bin
│ julian-day.exe
│
├─pkg
│ └─windows_amd64
│ └─julian-day
│ └─vendor
│ └─github.com
│ └─spiegel-im-spiegel
│ └─astrocalc
│ modjulian.a
│
└─src
└─julian-day
│ julian-day.go
│
└─vendor
└─github.com
└─spiegel-im-spiegel
└─astrocalc
│ .editorconfig
│ .gitignore
│ .travis.yml
│ LICENSE
│ README.md
│
└─modjulian
example_test.go
LICENSE
modjulian.go
modjulian_test.go
C:\workspace\vdemo>bin\julian-day.exe 2015 1 1
2015-01-01 00:00:00 +0000 UTC
MJD = 57023日
</code></pre><p><code>vendor</code> フォルダ以下にパッケージがフルパスで入ってしまうため階層が深くなりがちなのが「玉に瑕」だが,それ以外は特に問題はない。
あるいは <code>vendor</code> フォルダ以下のパッケージは <code>go get</code> の制約から外れているので,呼び出し側を</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s">"flag"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"fmt"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"os"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"strconv"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"time"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="s">"astrocalc/modjulian"</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>として以下のフォルダ構成にする手もある<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>。</p>
<pre tabindex="0"><code>C:\workspace\vdemo>tree /f .
C:\WORKSPACE\VDEMO
└─src
└─julian-day
│ julian-day.go
│
└─vendor
└─astrocalc
│ .editorconfig
│ .gitignore
│ .travis.yml
│ LICENSE
│ README.md
│
└─modjulian
example_test.go
LICENSE
modjulian.go
modjulian_test.go
C:\workspace\vdemo>go install -v ./...
julian-day/vendor/astrocalc/modjulian
julian-day
C:\workspace\vdemo>bin\julian-day.exe 2015 1 1
2015-01-01 00:00:00 +0000 UTC
MJD = 57023日
</code></pre><p>注意が必要なのは, <code>go get</code> は git の submodule を上手く扱えないため, <code>vendor</code> フォルダ以下のパッケージを submodule として配置している場合はビルドに失敗することだ。
この場合は <code>-d</code> オプションで <code>go get</code> がビルドまで行わないようにし,手動で submodule の <code>init</code> と <code>update</code> を行う必要がある。</p>
<pre tabindex="0"><code>C:>go get -d project/...
C:>git submodule init
C:>git submodule update
C:>go install ./...
</code></pre><p>(「<a href="https://text.baldanders.info/golang/vendoring-with-glide/">Glide で Vendoring</a>」に続く)</p>
<h2>ブックマーク</h2>
<ul>
<li>
<p><a href="http://deeeet.com/writing/2015/06/26/golang-dependency-vendoring/">Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5 | SOTA</a></p>
</li>
<li>
<p><a href="http://doloopwhile.hatenablog.com/entry/2014/06/18/010449">direnvで解決するGOPATHの3つの問題点 - None is None is None</a></p>
</li>
<li>
<p><a href="http://blog.hde.co.jp/entry/2015/02/27/182117">改めて、direnvを使いましょう! - HDE BLOG</a></p>
</li>
<li>
<p><a href="http://qiita.com/aminamid/items/5a0e9461385c80d0c8a6">さくら - homeにgolang, direnv とvirtualenvを入れて動かす - Qiita</a></p>
</li>
<li>
<p><a href="https://text.baldanders.info/release/2018/09/go-1_11-ise-released/">Go 1.11 のリリースと「モジュール」機能の実験的サポート</a></p>
</li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>それでも git などのコード管理ツールへの依存はどうしても残るのだけれど。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p>具体的には <code>GOPATH</code> で列挙されるパスのリストのうち先頭のパスにインストールされる。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3">
<p><a href="https://golang.org/" title="The Go Programming Language">Go 言語</a>の開発・管理主体は Google だが,こんな構成で Google は困らないのかと思ったのだが,実は Google は全てのコードを単一の repository で管理しているらしい。(参考: <a href="http://www.publickey1.jp/blog/15/2045000google.html">20億行のコードを保存し、毎日4万5000回のコミットを発行しているGoogleが、単一のリポジトリで全社のソースコードを管理している理由</a>) <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:4">
<p><a href="http://direnv.net/" title="direnv - unclutter your .profile">direnv</a> は <a href="https://golang.org/" title="The Go Programming Language">Go 言語</a>で組まれている。 <a href="#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:5">
<p>パッケージのパスが変わるとテストが通らなくなる場合があるので注意。 <a href="#fnref:5" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>