Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

June 13 2019

新しい OpenPGP 鍵サーバが Launch したらしい

OpenPGP のメーリングリストより。

  • Fast and reliable. No wait times, no downtimes, no inconsistencies.
  • Precise. Searches return only a single key, which allows for easy key discovery.
  • Validating. Identities are only published with consent, while non-identity information is freely distributed.
  • Deletable. Users can delete personal information with a simple e-mail confirmation.
  • Built on Rust, powered by Sequoia PGP - free and open source, running AGPLv3.
via Launching a new keyserver!

ほほう。 Rust ベースなのか。 面白いな。

現行の OpenPGP 鍵サーバ同士は peer-to-peer で同期しているが,新しい keys.openpgp.org はこれらとは別のネットワークを形成するようだ。

We created keys.openpgp.org to provide an alternative to the SKS Keyserver pool, which is the default in many applications today. This distributed network of keyservers has been struggling with abuse, performance, as well as privacy issues, and more recently also GDPR compliance questions. Kristian Fiskerstrand has done a stellar job maintaining the pool for more than ten years, but at this point development activity seems to have mostly ceased.
We thought it time to consider a fresh approach to solve these problems.
via Launching a new keyserver!

さらに

The keys.openpgp.org keysever will receive first-party support in upcoming releases of Enigmail for Thunderbird, as well as OpenKeychain on Android. This means users of those implementations will benefit from the faster response times, and improved key discovery by e-mail address. We hope that this will also give us some momentum to build this project into a bigger community effort.
via Launching a new keyserver!

ということで EnigmailOpenKeychain と連携するのであれば期待できそうな感じである。 ただし,いまのところ GnuPG との相性がイマイチのようなので,もう少し様子を見たいところではある。

これで思い出すのが,かつての OpenPKSD だが,日本主導でフル Ruby で組まれていて割と期待してたんだが,世界的にはあまり注目されないまま閉鎖されたんだよなぁ。 今回の keys.openpgp.org がそうならないことを祈るばかりである。

参考図書

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩
SBクリエイティブ 2015-08-25 (Release 2015-09-17)
eBooks Kindle版
ASIN: B015643CPE
評価     

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by amazon-item v0.2.0)

搾取と狂狷

最近,東京大学の研究者による面白い論文が発表されたらしい。

これをもう少し噛み砕いて説明した記事が MIT Technology Review によるこれ。

この記事からちょっと多めに引用してみよう。

もう1つ未解決の問題は、搾取が社会でいかに発展してきたかだ。社会的生物の間で、どのようにして個人が他者を利用して自分の利益を増やすようになったのだろうか。
明白な答えの1つは、力のある人はその力を使って力の弱い人を利用できるということだ。この答えは同時に、力が拮抗する個人間では搾取的行動が起こりえないことを示唆する。それでもなお、広い規模で頻繁に搾取が見られる現状は、搾取は起こるべくして起こっているということを示唆している。搾取は一体どのように起こるのだろうか。
via なぜ搾取は起きるのか?東大研究者が「囚人のジレンマ」で解明

もともと「繰り返しゲームとしての囚人のジレンマ」では

これが起こり得る具体的な状況は、アリスが以前のゲームから学習するのに対し、ボブは学習せず同じ戦略を使うときだ。その場合、アリスはボブを利用して、徐々に自分にとってより良い結果を確保できるようになる
via なぜ搾取は起きるのか?東大研究者が「囚人のジレンマ」で解明

ことは知られていた。 しかし今回「東京大学の大学院生である藤本悠雅と金子邦彦教授」は

両方のプレイヤーが以前の経験から学び、それに応じて自分の戦略を適応させる繰り返しゲームとしての囚人のジレンマを研究した。そして、このような状況においても、1人のプレイヤーが他のプレイヤーを利用してより良い結果を得られるという画期的な結果を出したのだ。
via なぜ搾取は起きるのか?東大研究者が「囚人のジレンマ」で解明

内容はこうだ。

答えは、ゲームの初期条件にある。アリスがボブの戦略を知った場合に、ボブの行動を利用し、アリス自身の結果をより良くできることを、藤本と金子教授は示している。
しかし、この戦略がボブにとってより良い結果を約束するとアリスが保証すれば、アリスはボブの協力を確実なものにできる。たとえばある状況では、両方のプレイヤーが裏切る場合の結果よりも、ボブが犠牲になった方がボブにとって良い結果になるとアリスが保証できるのだ。
このため、たとえアリスがより有利になったとしても、ボブには搾取を受け入れる動機がある。
via なぜ搾取は起きるのか?東大研究者が「囚人のジレンマ」で解明

これってさ。 GAFA に象徴される「監視資本主義」そのものぢゃん。 論文の著者はむしろ「監視資本主義」の構造から今回の着想を得たのではないかとさえ思ってしまう(本当のところは知らない)。

「監視資本主義」の本質が「合意の上の搾取」にあるのだとしたら,これに抗うのはかなり難しそうである。 と,ここまで考えて思い浮かんだのは「狂狷の徒」というフレーズである。

以前にも紹介したが, 「狂狷 (きょうけん) 」というのは論語の中に出てくる言葉らしい。

孔子様はこう言っとる。「人間というものは中庸を得たものが一番よろしい」と。まあいわゆる聖人ですわな。しかし、「現実にはそんな中庸の人間がおるものではない」と。
それでは中庸の人の次にどういう人がいいかというと、孔子は「狂狷の徒がよろしい」と言うておる。「狂狷は進みて取る」、進取の気性です。世間を変えるには「狂」がなければならない。
そして「狷者は為さざるところあるなり」と。たとえ一億円の金を積まれても、わしは嫌じゃということは断じてせんという、それが「狷」です。
via 学び続ける「狂狷(きょうけん)の徒」たれ : 超健康が夢 院長日記

「監視資本主義」による「合意の上の搾取」に抗いたいのなら狂狷の徒たるべきなのだろう。 自由に生きるというのは本当に大変である。

ブックマーク

参考図書

photo
もうすぐ絶滅するという開かれたウェブについて 続・情報共有の未来
yomoyomo
達人出版会 2017-12-25
評価 

WirelessWire News 連載の書籍化。感想はこちら

reviewed by Spiegel on 2018-12-31

June 12 2019

Go 1.12.6 がリリースされた

Go 1.12.6 がリリースされた。 セキュリティ・アップデートはなし。

go1.12.6 (released 2019/06/11) includes fixes to the compiler, the linker, the go command, and the crypto/x509, net/http, and os packages. See the Go 1.12.6 milestone on our issue tracker for details.
via Release History - The Go Programming Language

Ubuntu の場合は(APT で提供される Go コンパイラは古すぎるので)ダウンロードページから go1.12.6.linux-amd64.tar.gz を取ってきて任意の場所に手動で展開するほうがお勧めである。

たとえば,こんな感じ。

$ cd /usr/local/src
$ sudo curl https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz -O
$ cd ..
$ sudo unlink go # 以前の Go が入っている場合
$ sudo tar xvf src/go1.12.6.linux-amd64.tar.gz
$ sudo mv go go1.12.6
$ sudo ln -s go1.12.6 go
$ ./go/bin/go version
go version go1.12.6 linux/amd64

アップデートは計画的に。

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan, Brian W. Kernighan
柴田 芳樹 (翻訳)
丸善出版 2016-06-20
Book 単行本(ソフトカバー)
ASIN: 4621300253, EAN: 9784621300251
評価     

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。

reviewed by Spiegel on 2018-10-20 (powered by amazon-item v0.2.0)

June 10 2019

Ubuntu で音楽 CD のリッピング

いやぁ,ひーさしぶりに音楽 CD 買ったですよ。 最近はストリーミング・サービスか MP3 で買うかだったもんねぇ。

ちうわけで Ubuntu でリッピング・ツールを探したら Asunder というのがいいらしい。 インストールは APT でできる。

$ sudo apt install asunder lame

lame は MP3 エンコーディングを扱うのに必要らしい。

起動したらちゃんと日本語で表示できてた。 えらいえらい!

CDDB のプロキシ・サーバに freedbtest.dyndns.org:80 を指定すれば日本の CD 情報もちゃんと取れるようだ。

Windows のときは文字エンコーディングで苦労したからねぇ。 UNIX 系は楽でいいわ(笑)

ブックマーク

参考図書

photo
アルティメット☆MAGIC *CD
エイベックス・ピクチャーズ株式会社(Music) 2019-05-21 (Release 2019-05-22)
Music CD
ASIN: B07PBB8W1X, EAN: 4562475295115
評価     

アニメ「賢者の孫」の OP 曲を収録。 CD 版で購入したのだが MP3 版もあった orz 通勤時に聴くと気合が入る(笑)

reviewed by Spiegel on 2019-06-10 (powered by amazon-item 0.2.1)

photo
魔法の天使 クリィミーマミ 公式トリビュート・アルバム
Various artists (メインアーティスト)
P-VINE (Release 2012-04-01)
Digital Music Album MP3 ダウンロード
ASIN: B007EEGL58
評価     

往年のクリィミーマミ・ファンが泣いて喜ぶアルバム。 CD 版もあるが MP3 でも買える。

reviewed by Spiegel on 2019-06-10 (powered by amazon-item 0.2.1)

June 09 2019

TeX Live 2018 から 2019 へのアップグレード

そろそろ2019年版のアナウンスが出てるかなぁ,と思って TeX Live のサイトへ見に行ったら

Current release: TeX Live 2019 is available over the Internet and on DVD. It was released on 29 April 2019, and ongoing updates are available.
via TeX Live - TeX Users Group

とか書いてくさるですよ。

はっ? 私が2018年版をインストールしたのって4月末なんだけど。

試しに tlmgr update してみたら

$ sudo tlmgr update --self --all

tlmgr: Remote repository is newer than local (2018 < 2019)
Cross release updates are only supported with
  update-tlmgr-latest(.sh/.exe) --update
Please see https://tug.org/texlive/upgrade.html for details.

とか言われた。 以前と表示が変わっている。 タッチの差でアップグレードされたということか orz

しょうがない。 アップグレードを行おう。 以前に Windows で2018年版にアップグレードしたが,やり方はだいたい同じ。

そうそう。 今回のアップグレードは APT を使わず install-tl でインストールされていることが前提ね。

前準備

まず TeX Live のインストール先ディレクトリを /usr/local/texlive として話を進める(普通にインストールすればそうなってる筈)。 このディレクトリの中身はこんな感じになっているだろう。

$ ls -F /usr/local/texlive
2018/  texmf-local/

最初に 2018/ ディレクトリをコピーしよう。

$ cd /usr/local/texlive
$ sudo cp -a 2018 2019
$ sudo rm 2019/tlpkg/backups/*

このあと update-tlmgr を使ってアップグレードを行うのだが,権限のコントロールが上手くないみたいなので 2019/ フォルダ以下のオーナーを一時的に自ユーザに書き換えておく。

$ sudo chown -R username:username 2019

次にパス設定の削除を行う。 tlmgr path add コマンドでパス設定をしている場合は

$ sudo tlmgr path remove

で設定を消しておく。

環境変数 PATHMANPATH 等を設定している場合はその設定を変更しておく。 たとえば /etc/profile.d/ ディレクトリに以下の内容を書いたファイル texlive-paths.sh を置いている場合

# shellcheck shell=sh

# Expand $PATH to include the directory where TeX Live applications go.
texlive_path="/usr/local/texlive/2018"
texlive_bin_path="${texlive_path}/bin/x86_64-linux"
if [ -n "${PATH##*${texlive_bin_path}}" -a -n "${PATH##*${texlive_bin_path}:*}" ]; then
    export MANPATH=${MANPATH}:${texlive_path}/texmf-dist/doc/man
    export INFOPATH=${INFOPATH}:${texlive_path}/texmf-dist/doc/info
    export PATH=${PATH}:${texlive_bin_path}
fi

2018 の部分を 2019 に置き換える。

# shellcheck shell=sh

# Expand $PATH to include the directory where TeX Live applications go.
texlive_path="/usr/local/texlive/2019"
texlive_bin_path="${texlive_path}/bin/x86_64-linux"
if [ -n "${PATH##*${texlive_bin_path}}" -a -n "${PATH##*${texlive_bin_path}:* }" ]; then
    export MANPATH=${MANPATH}:${texlive_path}/texmf-dist/doc/man
    export INFOPATH=${INFOPATH}:${texlive_path}/texmf-dist/doc/info
    export PATH=${PATH}:${texlive_bin_path}
fi

最後に ~/.texlive2018/ ディレクトリがあれば ~/.texlive2019/ にコピーすればいいかな。

% cd ~
$ cp -a .texlive2018 .texlive2019

2019年版へのアップグレード

ほいじゃまぁ,アップグレードしますかね。

まずは update-tlmgr による tlmgr のアップグレードから

$ cd /usr/local/texlive/2019
$ wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
$ sh update-tlmgr-latest.sh -- --upgrade

tlmgr の動作確認をしておこう。

$ tlmgr version
tlmgr revision 51217 (2019-05-24 23:47:41 +0200)
tlmgr using installation: /usr/local/texlive/2019
TeX Live (http://tug.org/texlive) version 2019

よしよし。

次はアップグレードした tlmgr でアップデートを行う。

$ tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet
tlmgr: setting default package repository to http://mirror.ctan.org/systems/texlive/tlnet

$ tlmgr update --self --all
tlmgr: package repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet (verified)
tlmgr: saving backups to /usr/local/texlive/2019/tlpkg/backups
...

手元の環境では520個ほど更新された。

$\mathrm{Lua\TeX}$ を使う場合はフォントキャッシュのアップデートも忘れずに。

$ luaotfload-tool -fu

最後に /usr/local/texlive/2019 ディレクトリ以下のオーナーを root に戻す。

$ cd /usr/local/texlive
$ sudo chown -R root:root 2019

更にパス設定(/usr/local/bin/ 等へシンボリック・リンクを張る)を行うなら

$ sudo /usr/local/texlive/2019/bin/x86_64-linux/tlmgr path add

とする。

動作確認

ちょろんと動作確認しておこう。 $\mathrm{Lua\LaTeX}$ でね。

$ lualatex -v
This is LuaTeX, Version 1.10.0 (TeX Live 2019)

Execute  'luatex --credits'  for credits and version details.

There is NO warranty. Redistribution of this software is covered by
the terms of the GNU General Public License, version 2 or (at your option)
any later version. For more information about these matters, see the file
named COPYING and the LuaTeX source.

LuaTeX is Copyright 2019 Taco Hoekwater and the LuaTeX Team.

以下のタイプセットも試してみる。

結果はこんな感じ。

よーし,うむうむ,よーし。

ブックマーク

参考図書

photo
[改訂第7版]LaTeX2ε美文書作成入門
奥村 晴彦, 黒木 裕介
技術評論社 2017-01-24
Book 大型本
ASIN: 4774187054, EAN: 9784774187051
評価     

ついに第7版が登場。紙の本で買って常に側に置いておくのが吉。

reviewed by Spiegel on 2017-09-27 (powered by amazon-item v0.2.0)

2019-06-09 のブックマーク

リリース情報

バベルのインターネット

セキュリティ&プライバシー関連

天文関連

知財関連

Linux または Ubuntu に関する話題

その他

「新暦七夕」なるものは存在しない

そろそろ七夕について言及される季節ですかねぇ。

この記事を見て「新暦七夕」なる単語が気になった。 きっと「伝統的七夕」の対義語として考えた造語だろうが「なんだかなぁ」というセンスである。

いわゆる「五節句(人日 (じんじつ) ,上巳 (じょうし) ,端午 (たんご) ,七夕 (しちせき) ,重陽 (ちょうよう) )」は江戸幕府によって定められたそうだが「明治の改暦」で廃止された。 なので現行暦には七夕を含む五節句は,公式には,存在しない

ただし,盂蘭盆と同じく五節句も民間信仰として深く浸透していたため改暦後も廃れることなく残っている。 もっとも現行暦に無理やり日付を合わせて祝ったり「月遅れ」で祝ったりと地域によって差異があるが1

ちなみに私は田舎の子なので,正月の「人日(七草)」以外は月遅れで祝っていた。 今はメディアの発達のせいか田舎のそういった風習は塗り潰されてしまっているらしく「月遅れ」はなくなっているっぽい。

七夕に関して言うと現行暦の7月7日は日本の多くの地域で梅雨 (雨期) まっ盛りだったりするので,いわゆる「織姫・彦星伝説」にそぐわない天候である。 そこで国立天文台では夏(休み)にもっと星に親しんでもらうため「伝統的七夕」を定義した。 内容は以下の通り。

二十四節気の処暑(しょしょ=太陽黄経が150度になる瞬間)を含む日かそれよりも前で、処暑に最も近い朔(さく=新月)の瞬間を含む日から数えて7日目が「伝統的七夕」の日です。
via 質問3-10)伝統的七夕について教えて | 国立天文台(NAOJ)

この定義は,なるべく明治の改暦以前の暦(太陰太陽暦)の七夕に近い日が伝統的七夕となるよう調整されている2。 たとえば2019年の処暑は8月23日で「処暑に最も近い朔」は8月1日なので伝統的七夕は8月7日ということになる3

なお伝統的七夕とは別に毎年8月最初の1週間は「スター・ウィーク」として日本各地で星に関するイベントが行われている。 2019年のキャッチフレーズは

好きな星を 見つけませんか

だそうだ。 上手い具合に日程が伝統的七夕と被るので,併せて楽しんでいただければと思う。 スター・ウィークの後はペルセウス座流星群が待ってるぞ!

photo
天文年鑑 2019年版
天文年鑑編集委員会 (編集)
誠文堂新光社 2018-11-21
Book 単行本
ASIN: 4416718020, EAN: 9784416718025
評価     

天文ファン必携。2019年版。

reviewed by Spiegel on 2018-11-23 (powered by amazon-item 0.2.1)

photo
猫暦
ねこしみず美濃
Collections Kindle版
ASIN: B07BNZQSZZ
評価     

「寛政の改暦」のころの伊能勘解由(忠敬)とその妻とされる「おえい」の物語。感想はこちら

reviewed by Spiegel on 2019-01-07 (powered by amazon-item v0.2.0)

photo
7月7日、晴れ
DREAMS COME TRUE (メインアーティスト)
Sony Music Labels Inc. 1996-04-01 (Release 2014-04-01)
Digital Music Track MP3 ダウンロード
ASIN: B00FXUQGN2
評価     

ドリカムで唯一持ってる楽曲。大きな声では言えないが,個人的には失恋ソングである(笑)

reviewed by Spiegel on 2019-06-09 (powered by amazon-item 0.2.1)


  1. 明治の改暦以前は民間歴を含めて様々な暦が乱立していたそうなので,この程度の差異は差異に入らないかもしれないが(笑) [return]
  2. 現在「旧暦」と呼ばれているものは江戸時代の「天保暦」がベースになっていると言われているが,当時と今では天文観測基準が異なるため,厳密には「天保暦」を再現できているとは言えない。実際の「旧暦」の運用は現行暦の暦象(朔望月や二十四節気等)を元に「天保暦」のルールを当てはめて運用しているらしい。なので「旧暦2033年問題」みたいなことも起こったりする。 [return]
  3. 日本では国立天文台が毎年2月1日に翌年の暦要項を公表する。なお伝統的七夕は雑節にも入らないので暦要項には載っていない。キャンペーン・イベントみたいなものだからね。 [return]

June 07 2019

Map は連想配列ではなく連想配列への「参照」である

今回は小ネタで。 つか,だいぶフワッとした話になるので,その辺は割引いて読んでいただけるとありがたい。

いやね。

の「事例その1」で

type hogehoge map[string]string

func (h *hogehoge) Seter(p string) {
    h = &hogehoge{
        "key": p,
    }
}

func main() {
    var f hogehoge
    f.Seter("ddd")

    fmt.Println(f) // <- nil
}

というコードを書いておられて,言わんとすることは分かるけど事例に map を使うのは混乱を助長しないかなぁ,と思ってしまったのだ。 そこでこの記事では主に map の振る舞いにピントを合わせて説明していこう。

Map は連想配列ではなく連想配列への「参照」である

のっけからぶっちゃけるが,要するにそういうことである。 もう少し厳密に言うと「Map は連想配列への「参照」のように振る舞う」といったところか。

これを端的に表すコードがこれ。

package main

import "fmt"

type KeyValues map[string]string

func main() {
	kv := KeyValues{"foo": "bar"}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

これを実行する

0x40c128: 0x43e260: map[foo:bar]

などと表示される。

最初の値がインスタンス kv のポインタ値,次の値が kv が参照する連想配列のポインタ値,最後が kv の内容と考えれば分かりやすいだろう。

Go 言語において関数の引数は「値渡し」なので...

KeyValues にひとつ関数を追加してみよう。

package main

import "fmt"

type KeyValues map[string]string

func (kv KeyValues) Set(k, v string) {
	kv[k] = v
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

func main() {
	kv := KeyValues{}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
	kv.Set("foo", "bar")
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

これを実行する

0x40c128: 0x43e260: map[]
0x40c138: 0x43e260: map[foo:bar]
0x40c128: 0x43e260: map[foo:bar]

となる。

ポイントは2行目で main() 関数内のインスタンス kvKeyValues.Set() 関数のメソッド・レシーバの kv は異なるポインタ値になっているので異なるインスタンスだと分かるが,参照している連想配列(へのポインタ)は同一である。

もっと簡単なコードで示そうか。

package main

import "fmt"

type KeyValues map[string]string

func main() {
	kv := KeyValues{"foo": "bar"}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
	cpy := KeyValues{}
	fmt.Printf("%p: %p: %v\n", &cpy, cpy, cpy)
	cpy = kv
	fmt.Printf("%p: %p: %v\n", &cpy, cpy, cpy)
}

これを実行する

0x40c128: 0x43e260: map[foo:bar]
0x40c148: 0x43e2a0: map[]
0x40c148: 0x43e260: map[foo:bar]

となる。 つまり map は連想配列への参照なので,連想配列そのものは宣言構文(:=)や代入構文(=)では複製できない,ということである1

それでもポインタは「参照」ではない

じゃあ,先ほどの KeyValues.Set() 関数のメソッド・レシーバをポインタ型にするとどうなるか,やってみよう。

package main

import "fmt"

type KeyValues map[string]string

func (kv *KeyValues) Set(k, v string) {
	(*kv)[k] = v
	fmt.Printf("%p: %p: %v\n", kv, *kv, *kv)
}

func main() {
	kv := KeyValues{}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
	kv.Set("foo", "bar")
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

これを実行する

0x40c128: 0x43e260: map[]
0x40c128: 0x43e260: map[foo:bar]
0x40c128: 0x43e260: map[foo:bar]

となる。

main() 内のインスタンス kv はポインタ型ではないが KeyValues.Set() 関数呼び出し時に暗黙的な変換が行われる。 このため KeyValues.Set() 関数のメソッド・レシーバの kvmain() 内のインスタンス kv と同一のインスタンスになるわけだ。

では調子に乗ってこんな関数を作ってみよう。

func (kv *KeyValues) Initialize(k, v string) {
	kv = &KeyValues{k: v}
}

KeyValues.Initialize() 関数のメソッド・レシーバは呼び出し元のインスタンスと同一なんだから,これで初期化できるんじゃね? というわけだ。

プログラム全体はこんな感じ。 これでようやく最初に紹介したコードにほぼ近い形になっただろう。

package main

import "fmt"

type KeyValues map[string]string

func (kv *KeyValues) Initialize(k, v string) {
	kv = &KeyValues{k: v}
	fmt.Printf("%p: %p: %v\n", kv, *kv, *kv)
}

func main() {
	kv := KeyValues{}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
	kv.Initialize("foo", "bar")
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

まぁ動かしてみよう(笑)

0x40c128: 0x43e260: map[]
0x40c138: 0x43e2a0: map[foo:bar]
0x40c128: 0x43e260: map[]

ちょっと考えれば分かるのだが, KeyValues.Initialize() 関数のメソッド・レシーバに渡されるのはポインタ「値」なので,それを関数内で上書きしたところで呼び出し元の main() 関数には全く影響ないのである。

これが「Go 言語に『参照』は存在しない」ということの意味である。 いかに参照っぽく振る舞っていようとも Go 言語でやり取りできるのはあくまでも「値」であり,その「値」が何を指しているかを考えながらコードを書いていく必要がある。

たとえば先ほどの KeyValues.Initialize() 関数を以下のように書き換えればまた挙動が変わる。

package main

import "fmt"

type KeyValues map[string]string

func (kv * KeyValues) Initialize(k, v string) {
	* kv = KeyValues{k: v}
	fmt.Printf("%p: %p: %v\n", kv, * kv, * kv)
}

func main() {
	kv := KeyValues{}
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
	kv.Initialize("foo", "bar")
	fmt.Printf("%p: %p: %v\n", &kv, kv, kv)
}

これを実行する

0x40c128: 0x43e260: map[]
0x40c128: 0x43e2a0: map[foo:bar]
0x40c128: 0x43e2a0: map[foo:bar]

となる。 なにがどう違うのか考えてみよう。 ここまでくれば簡単だよね(笑)

ブックマーク

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan, Brian W. Kernighan
柴田 芳樹 (翻訳)
丸善出版 2016-06-20
Book 単行本(ソフトカバー)
ASIN: 4621300253, EAN: 9784621300251
評価     

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。

reviewed by Spiegel on 2018-10-20 (powered by amazon-item v0.2.0)


  1. Go 言語においては宣言や代入は式(expression)ではなく構文(statement)であり :== は演算子ではなく構文を構成する(var とかと同じ)トークンに過ぎない。ちなみに ++-- も演算子ではなく代入構文のトークンである。 [return]

June 05 2019

「のぼる ほし」

日本の年金制度は「積立貯金」ではない。 そして「児童世代」「就労世代」「高齢者(リタイア)世代」がバランスよく構成される,詳しく言うと「合計特殊出生率が人口置換水準付近で長期安定している」ことが制度を維持する大前提である。 もちろん今は合計特殊出生率が人口置換水準を大きく下回っている状態で,今から頑張ってもおそらく数十年単位で人口置換水準まで復帰することはないだろう。 つまり年金制度の破綻は(制度設計を全く別のものに入れ替えない限り)確定事項なのだ。

そういう意味で「人生100年時代」は(語られる内容の是非はともかく)めがっさリアルな話であり,それを受け入れられないというのならこの国から逃げるしかない。 できれば就労世代に達する前に。

とまぁ暗い話ばかりしていても仕方ないので,ポジティブ思考に切り替えよう。

この記事の最後の方を引用するのはネタバレちっくで気が引けるが,でもやはり重要な部分なので引用してしまおう。

君もいずれ突入する「人生100年時代」に生涯現役であるということは、つまり100歳まで若くあること、学ぶことをやめない者であることだ。それを働き方にあてはめれば、学びをやめても食べていける100年雇用を得ることより、学びなおしを続けられる100年人材であることのを目指すことなんじゃないかな。
via 転職1年目の僕から、就職1年目の君へ

この記事を読んで思い出したのは,最近読んだ『ヒトラーと哲学者』である。 といっても本編ではなく「訳者あとがき」に書かれていた以下のフレーズだ。

〈本を読んだ〉とは〈本を読むのをやめた〉と同義である
via 『ヒトラーと哲学者』訳者あとがき

「本を読む」を「理解する」とか「学ぶ」とかに置き換えて読むと最初の引用とよく似ていることが分かるだろう。 これに結城浩さんの『数学ガール』に出てくるあの名台詞

僕たちは好きで学んでいる。
先生を待つ必要はない。授業を待つ必要はない。
本を探せばいい。本を読めばいい。
広く、深く、ずっと先まで勉強すればいい
via 数学ガール

を組み合わせれば最強の呪文になる(笑)

しかし私達が持ち合わせている時間は有限で,しかもその多くは「日常生活」に塗り潰されている。

それでもそういう願いだけは持っているんだ
なぜなら
そういう思いまで失くしてしまったら
その子の人生が否定されてしまうと考えるからだ
via 『That's! イズミコ』 4 「のぼる ほし」

だから,周りが変わっても自分が変わっても,学ぶこと理解を進めることをやめてはいけない。

参考図書

photo
ヒトラーと哲学者: 哲学はナチズムとどう関わったか
イヴォンヌ シェラット
三ッ木 道夫 (翻訳), 大久保 友博 (翻訳)
白水社 2015-01-22
Book 単行本
ASIN: 4560084122, EAN: 9784560084120
評価     

ナチス・ドイツ時代の哲学史物語という感じ。哲学(者)がヒトラーおよびナチス・ドイツにどのような影響を与えたか,またヒトラーおよびナチス・ドイツが哲学(者)にどのような影響を与えたかを物語風に編み上げていく。

reviewed by Spiegel on 2019-06-05 (powered by amazon-item 0.2.1)

photo
数学ガール
結城 浩
SBクリエイティブ 2007-06-26 (Release 2014-03-12)
eBooks Kindle版
ASIN: B00EYXMA9I
評価     

ミルカさんとの衝撃の encounter。数学ガールがワルツを踊る。

reviewed by Spiegel on 2018-10-20 (powered by amazon-item v0.2.0)

photo
That's! イズミコ ベスト (Fukkan.com)
大野安之
復刊ドットコム 2013-06-18
Book コミック
ASIN: 4835449517, EAN: 9784835449517
評価     

これには「バイ・ポーラー」は収録されてないんだよなぁ。でも「のぼる ほし」とか「CONFUSION」とか好きな作品も入ってるので無問題。

reviewed by Spiegel on 2014-12-01 (powered by amazon-item 0.2.1)

photo
少年の夢は生きている’89
ダブリューイーエー・ジャパン (Release 1992-04-25)
Music CD
ASIN: B00005HFJQ, EAN: 4988014706469
評価     

お気に入りのアルバムのひとつ。残念ながら引っ越しで処分しちゃったけど。

reviewed by Spiegel on 2019-06-05 (powered by amazon-item 0.2.1)

June 02 2019

そろそろ Vuls を唱えるか

Ubuntu 関連の脆弱性情報は以下のサイトで収集できる。

これらのサイトの脆弱性情報はとても有用なのだが,パッケージ単位の情報なのでパッケージ間の依存関係が分かってないと何がどう影響するか分かりにくい。 更に上のサイトを見ただけでは深刻度が分からない(CVE 番号から調べることは可能)。 更に更に言うと Ubuntu の各パッケージは古いバージョンに対してバックポートティングをかけて脆弱性を手当している場合もあり,パッケージのバージョン番号を見ただけでは分かりにくかったりする。

つまり CVE や OVAL や各ディストリビューションが提供する情報を統合管理する必要があるのだが,手動でこれをやるのは骨が折れる。 今回は個人のデスクトップ PC だけだから管理も比較的楽だけど,複数のサーバ(クラウド環境も併せて)を管理するとか気が遠くなる。 つか,もはや手動で管理とかあり得ないだろう。

というわけで,そろそろ Vuls を唱えてみるか。

Vuls とは

Vuls は脆弱性の検知を行うツールで,ほぼ Go 言語で組まれているのが特徴である。 複数のサーバに対して脆弱性の有無を一括スキャンすることが可能という実にサーバ管理者に優しいつくりになっている。

future-architect/vuls: Agent-less vulnerability scanner for Linux/FreeBSD/WordPress/Programming language libraries/Network devices future-architect/vuls: Agent-less vulnerability scanner for Linux/FreeBSD/WordPress/Programming language libraries/Network devices

Vuls 本体はシングル・バイナリだが CVE や OVAL などの脆弱性情報を収集するツール群と組み合わせて使うことを前提としている。 また最近では Vuls を含むツール群を SaaS 化した FutureVuls なる商用サービスも登場している。

今回は Vuls の基本機能でローカル PC の脆弱性管理を行ってみたいと思う。

【前準備】 ディレクトリの作成

まず前準備として Vuls を含むツール群が出力するデータベースを置くディレクトリ ~/vuls を作成しておく。

$ mkdir ~/vuls

次に各ツールが吐き出すログの出力先ディレクトリを作っておく。

$ sudo mkdir /var/log/vuls
$ sudo chown username:username /var/log/vuls
$ sudo chmod 700 /var/log/vuls
$ sudo mkdir /var/log/gost
$ sudo chown username:username /var/log/gost
$ sudo chmod 700 /var/log/gost
$ sudo mkdir /var/log/go-exploitdb
$ sudo chown username:username /var/log/go-exploitdb
$ sudo chmod 700 /var/log/go-exploitdb

CVE 情報の収集

CVE 情報の収集には go-cve-dictionary を使う。

go-cve-dictionary のセットアップ

ソースコードからのインストール方法については色々説明があるが,最近のバージョンはバイナリも提供しているようである。

これをありがたく使わせてもらおう。 いやぁ Go 言語のツールは取り回しが楽でいいね。

go-cve-dictionary による CVE 情報の収集

たとえば2002年以降の CVE 情報を収集し SQLite のデータベースファイル ~/vuls/cve.sqlite3 へ格納するには以下の一行スクリプトを実行する。

$ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -dbpath ~/vuls/cve.sqlite3 -years $i; done

ものごっつ時間がかかるので,ここらでお茶の時間にしよう。

OVAL 情報の収集

OVAL 情報の収集には goval-dictionary を使う。

goval-dictionary のセットアップ

goval-dictionary もバイナリがリリースされているのだが,バイナリ・リリースされているバージョンでは Ubuntu 19 に対応していないようなので,最新ソースを取ってきてビルドする必要がある。

$ cd $GOPATH/src/github.com/kotakanbe
$ git clone https://github.com/kotakanbe/goval-dictionary.git
$ cd gost/
$ make install

実行モジュールは $GOPATH/bin ディレクトリにインストールされる。

goval-dictionary による OVAL 情報の収集

ディストリビューションおよびそのバージョンごとに OVAL 情報を収集する。 たとえば Ubuntu なら

$ goval-dictionary fetch-ubuntu -dbpath ~/vuls/oval.sqlite3 12 14 16 18 19

などとする。 他にも fetch-alpine, fetch-amazon, fetch-debian, fetch-oracle, fetch-redhat, fetch-suse といったディストリビューションに対応している。

ディストリビューション別セキュリティ情報の収集

ディストリビューション毎のセキュリティ情報の収集には gost (go-security-tracker) を使う。

gost のセットアップ

gost はソースコードのみのリリースなのでビルドを行う。

$ cd $GOPATH/src/github.com/knqyf263
$ git clone https://github.com/knqyf263/gost.git
$ cd gost/
$ make install

実行モジュールは GOPATH/bin ディレクトリにインストールされる。

gost によるセキュリティ情報の収集

gost では redhat, debian, microsoft のセキュリティ情報の収集を行う。

$ gost fetch debian --dbpath ~/vuls/gost.sqlite3

Ubuntu のセキュリティ情報収集については TODO 扱いになっているようだ。 今後に期待しよう。

Exploit 情報の収集

Exploit 情報の収集には go-exploitdb を使う。

go-exploitdb のセットアップ

go-exploitdb はソースコードのみのリリースなのでビルドを行う。

$ cd $GOPATH/src/github.com/mozqnet
$ git clone https://github.com/mozqnet/go-exploitdb.git
$ cd go-exploitdb/
$ make install

実行モジュールは GOPATH/bin ディレクトリにインストールされる。

go-exploitdb によるセキュリティ情報の収集

go-exploitdb では awesomepoc, exploitdb, githubrepos を対象に Exploit 情報の収集を行う。

$ go-exploitdb fetch exploitdb --dbpath ~/vuls/go-exploitdb.sqlite3

Vuls でローカル PC をスキャンする

さて,いよいよ Vuls を唱えるときが来た(笑)

Vuls のセットアップ

Vuls はバイナリがリリースされている。

ありがたや。

次にスキャン対象のマシンへのアクセスを定義する ~/vuls/config.toml 設定ファイルを作成する。 今回はローカル PC のみのスキャンなので以下のような記述にする。

[servers]

[servers.localhost]
host = "localhost"
port = "local"

スキャン対象は複数指定可能で,たとえば対象に ssh 接続する場合は以下のような内容になるようだ。

[servers.remotehost]
host         = "remotehost"
port        = "22"
user        = "username"
keyPath     = "/home/username/.ssh/id_rsa"

設定が正しいかどうかチェックしておこう。

$ cd ~/vuls
$ vuls configtest
[Jun  2 18:07:05]  INFO [localhost] Validating config...
[Jun  2 18:07:05]  INFO [localhost] Detecting Server/Container OS... 
[Jun  2 18:07:05]  INFO [localhost] Detecting OS of servers... 
[Jun  2 18:07:05]  INFO [localhost] (1/1) Detected: localhost: ubuntu 19.04
[Jun  2 18:07:05]  INFO [localhost] Detecting OS of containers... 
[Jun  2 18:07:05]  INFO [localhost] Checking Scan Modes...
[Jun  2 18:07:05]  INFO [localhost] Checking dependencies...
[Jun  2 18:07:05]  INFO [localhost] Dependencies... Pass
[Jun  2 18:07:05]  INFO [localhost] Checking sudo settings...
[Jun  2 18:07:05]  INFO [localhost] sudo ... No need
[Jun  2 18:07:05]  INFO [localhost] It can be scanned with fast scan mode even if warn or err messages are displayed due to lack of dependent packages or sudo settings in fast-root or deep scan mode
[Jun  2 18:07:05]  INFO [localhost] Scannable servers are below...
localhost 

んー,エラーにはなっていないみたいだし,こんな感じでいいのかな。

Vuls でローカル PC をスキャンする

configtest も問題なさそうだし,実際にスキャンをかけてみよう。

$ cd ~/vuls
$ vuls scan
[Jun  2 20:24:26]  INFO [localhost] Start scanning
[Jun  2 20:24:26]  INFO [localhost] config: /home/username/vuls/config.toml
[Jun  2 20:24:26]  INFO [localhost] Validating config...
[Jun  2 20:24:26]  INFO [localhost] Detecting Server/Container OS... 
[Jun  2 20:24:26]  INFO [localhost] Detecting OS of servers... 
[Jun  2 20:24:26]  INFO [localhost] (1/1) Detected: localhost: ubuntu 19.04
[Jun  2 20:24:26]  INFO [localhost] Detecting OS of containers... 
[Jun  2 20:24:26]  INFO [localhost] Checking Scan Modes... 
[Jun  2 20:24:26]  INFO [localhost] Detecting Platforms... 
[Jun  2 20:24:27]  INFO [localhost] (1/1) localhost is running on other
[Jun  2 20:24:27]  INFO [localhost] Scanning vulnerabilities... 
[Jun  2 20:24:27]  INFO [localhost] Scanning vulnerable OS packages...
[Jun  2 20:24:27]  INFO [localhost] Scanning in fast mode


One Line Summary
================
localhost	ubuntu19.04	2173 installed




To view the detail, vuls tui is useful.
To send a report, run vuls report -h.

よしよし。 うまく行ったようである。

スキャン結果を簡易表示してみよう。

$ cd ~/vuls
$ vuls report -format-one-line-text
[Jun  2 20:30:18]  INFO [localhost] Validating config...
[Jun  2 20:30:18]  INFO [localhost] Loaded: /home/username/vuls/results/2019-06-02T20:30:15+09:00
[Jun  2 20:30:18]  INFO [localhost] Validating db config...
INFO[0000] -cvedb-type: sqlite3, -cvedb-url: , -cvedb-path: /home/username/vuls/cve.sqlite3 
INFO[0000] -ovaldb-type: sqlite3, -ovaldb-url: , -ovaldb-path: /home/username/vuls/oval.sqlite3 
INFO[0000] -gostdb-type: sqlite3, -gostdb-url: , -gostdb-path: /home/username/vuls/gost.sqlite3 
INFO[0000] -exploitdb-type: sqlite3, -exploitdb-url: , -exploitdb-path: /home/username/vuls/go-exploitdb.sqlite3 
INFO[06-02|20:30:18] Opening DB.                              db=sqlite3
INFO[06-02|20:30:18] Migrating DB.                            db=sqlite3
INFO[06-02|20:30:18] Opening Database.                        db=sqlite3
INFO[06-02|20:30:18] Migrating DB.                            db=sqlite3
[Jun  2 20:30:18]  INFO [localhost] OVAL is fresh: ubuntu 19.04 
[Jun  2 20:30:26]  INFO [localhost] localhost: 220 CVEs are detected with OVAL
[Jun  2 20:30:26]  INFO [localhost] localhost: 0 CVEs are detected with CPE
[Jun  2 20:30:26]  INFO [localhost] localhost: 0 CVEs are detected with GitHub Security Alerts
[Jun  2 20:30:26]  INFO [localhost] localhost: 0 unfixed CVEs are detected with gost
[Jun  2 20:30:26]  INFO [localhost] Fill CVE detailed information with CVE-DB
[Jun  2 20:30:27]  INFO [localhost] Fill exploit information with Exploit-DB
[Jun  2 20:30:27]  INFO [localhost] localhost: 13 exploits are detected
[Jun  2 20:30:27]  INFO [localhost] localhost: en: 0, ja: 0 alerts are detected


One Line Summary
================
localhost	Total: 220 (High:26 Medium:172 Low:22 ?:0)	0/220 Fixed	2173 installed	13 exploits	en: 0, ja: 0 alerts

ありゃりゃ。 最新状態にしているにも関わらず220もひっかかるとか。

もう少し詳細に見るには TUI モードにするとよい1

$ cd ~/vuls
$ vuls tui

うーむ。 どうも report がまともに機能してないっぽい? これってやっぱ gostUbuntu に対応してないせいなのかな(状態のほぼ全てが unfixed になっている)。

このままではちょっと使えないなぁ。 しょうがない。 少しずつ調べてみるか。

今回はここまで。

ブックマーク


  1. TUI モードを終了するには ctrl+c を入力すれば良い。 [return]

2019-06-02 のブックマーク

リリース情報

セキュリティ&プライバシー関連

天文関連

知財関連

Linux または Ubuntu に関する話題

その他

June 01 2019

メール・サービスを立てずにコマンドラインでメールを送信する

cron で回したプロセスの実行結果をメールで送信することを考える。

Ubuntu はインストール直後の既定状態ではメール・サービスは入ってない。 したがって cron の実行結果(標準出力等に吐き出されるもの)は何処にも通知されない。 これはこれで合理的な設計なのだが( cron の実行結果でメールボックスが溢れたりすることもないし),やはり結果をメールで通知したいこともある。 かといって,そのためにわざわざデスクトップ・パソコンにメール・サービスを入れるのはナンセンスであろう。

自前でメール・サービスを立てずに外部のメール・サーバにメールを流す送信専用の簡易 MUA があれば便利である。 そこで調べてみたら msmtp なるツールが良さげである1。 今回は msmtp を構成してコマンドラインでメールを送信してみる。

msmtp のインストール

msmtp は APT で導入可能である。

$ apt show msmtp
Package: msmtp
Version: 1.8.3-1
Priority: extra
Section: universe/mail
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Emmanuel Bouthenot <kolter@debian.org>
...

なので早速インストールする。

$ sudo apt install msmtp msmtp-mta

msmtp-mta パッケージは cron から msmtp を利用するのに必要なので併せてインストールしておく。 一応,操作確認しておこう。

$ msmtp --version
msmtp version 1.8.3
Platform: x86_64-pc-linux-gnu
TLS/SSL library: GnuTLS
Authentication library: GNU SASL
Supported authentication methods:
plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm 
IDN support: enabled
NLS: enabled, LOCALEDIR is /usr/share/locale
Keyring support: none
System configuration file name: /etc/msmtprc
User configuration file name: /home/username/.msmtprc

Copyright (C) 2019 Martin Lambers and others.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

よしよし。

msmtp の設定

まずは ~/.msmtprc ファイルを作成して外部のメール・サーバを定義する。 ~/.msmtprc の雛形ファイルは以下にあるので参考になるだろう。

  • /usr/share/doc/msmtp/examples/msmtprc-user.example

このファイルを元にして Gmail のメール・サーバにアクセスする設定を記述してみる。 こんな感じ2

# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# Gmail service
account gmail

# Host name of the SMTP server
host smtp.gmail.com

# Envelope-from address
from username@gmail.com

# Authentication. The password is given using one of five methods, see below.
auth on
user username@gmail.com

# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
#passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg

# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
password password_string

# Set a default account
account default : gmail

~/.msmtprc ファイルの権限を変更するのも忘れずに。

$ chmod 0600 ~/.msmtprc

これで準備 OK。 試しにコマンドラインでメールを送信してみよう。

$ echo "hello there." | msmtp -a gmail username@gmail.com

これで username@gmail.com 宛に “hello there.” という内容でメールが届けば成功である。 ちなみに -a オプションは省略できる。 この場合 account default で指定されたアカウント情報で送信される。

cron との連携

では cron との連携を試してみよう。

まずはパソコンのユーザ・アカウントとメールアドレスを連携させるために /etc/aliases ファイルを作成する。 内容はこんな感じ。

username: username@gmail.com
root: username@gmail.com
default: username@gmail.com

さらに ~/.msmtprc ファイルに以下の記述を追加する。

# aliases file
aliases /etc/aliases

これで msmtp 側の準備は完了。

テスト用のプロセスを crontab で定義する。

$ crontab -e

内容は例えばこんな感じ。

*/5 * * * * MAILTO=username ls

これで username のメールアドレス宛に5分おきに ls コマンドの実行結果をメール送信する。 かなりウザいので動作確認できたらソッコーで削除しないと(笑)

うまくいかない場合は /var/log/syslog を見てみるとヒントになるかもしれない。

$ cat /var/log/syslog | grep sendmail

パウワード情報の暗号化

外部メール・サーバへ送信する際に認証を行う場合は ~/.msmtprc ファイルに認証用のパスワードを設定する必要があるが,平文で保存されるため,いかにも不用心である。 そこでパスワード情報を暗号化することを考える。

具体的には ~/.msmtprc ファイルの password 項目を以下の記述で置き換える。

#passwordeval gpg --no-tty -q -d ~/.msmtp-password.gpg

~/.msmtp-password.gpg が暗号化されたパスワード情報を格納するファイルで GnuPG で暗号化されている。 ~/.msmtp-password.gpg ファイルを作成するには以下のコマンドラインを実行する。

gpg --encrypt -o ~/.msmtp-gmail.gpg -r <user>@gmail.com -

最後のハイフン(-)を忘れずに。 これで標準入力からパスワードを入力し改行コードを入力した後 ctrl-d で処理を抜ければ完了である。

メール送信時には復号のために GnuPG がパスフレーズを要求するのでご注意を3

ブックマーク


  1. ググってみると sSMTP に関する記事が頻出したが,残念なことに sSMTP はもはやメンテナンスされていないようである。 [return]
  2. password の項目にはパスワードを記述するが, Google サインイン用のパスワードではなく「アプリ・パスワード」をセットする(Googleへのサインインに2要素認証を使っていることが前提)。アプリ・パスワードは「Google アカウント」のページで設定できる。アプリやプラットフォームごとに異なるアプリ・パスワードを設定するのがコツである。 [return]
  3. GnuPG の鍵を作成する際にパスフレーズの入力を省略すれば復号処理を自動化できるが秘密鍵の中身が丸見えになってしまうので取り扱いには注意が必要である。パスワード暗号化用の専用鍵を作って運用するのが無難だろう。 [return]
久しぶり! 微妙にたっぷりじゃないけど野菜たっぷりちゃんめん おっと ちゃんぽん
フードコートにあった。こりゃ気が付かんわ。

May 31 2019

Go モジュールのミラーリングとインデックス化

Go モジュールのミラーリングとインデックス化を行うためのサービスがベータ・リリースされたようだ。

これは “Go Modules in 2019” で予告されていたものだ。

We are planning to launch a mirror service for publicly-available modules in 2019.
via Go Modules in 2019

モジュールのミラー・サービスは各所で公開されているモジュールのミラーリングを行うためのプロキシ・サーバの一種で,現在ベータ版である Go 1.13 では既定で有効になっているそうだ。 それ以前のバージョン(1.12 ?)では環境変数 GOPROXYhttps://proxy.golang.org をセットすることで有効になるらしい(試してない)。

更に,モジュールのインデックス・サービスも開始される。

クエリに対して JSON データを返す仕様なのかな。

更に更に,モジュールのチェックサム値をデータベース化してモジュールの検証に使えるようにするようだ。

チェックサム値をデータベースとして保持っておくことでモジュールの完全性を担保し,コードの改竄を検知しやすくする目的があると思われる1。 チェックサム・データベースの利用については gosumcheck というツールが提供されている。

$ go get golang.org/x/exp/sumdb/gosumcheck
$ gosumcheck /path/to/go.sum

これらのサービスのプライバシー・ポリシーについては proxy.golang.org/privacy を参照しろとあるが,この URL を叩くと Google のプライバシー・ポリシーのページに飛ばされる。 まぁ Google のサービスなんだから当然だろうけど,プライバシーに敵対的な企業のサービスだと思うとあまり利用したくない気分2

モジュールのミラーリングやインデックス化はそれぞれ単体のサービスではなく,モジュールを中心とした生態系(module ecosystem)を構築するための部品と考えるのがいいだろう。 Go 1.13 以降からはモジュール周りが更に大きく変わりそうである。

ブックマーク

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan, Brian W. Kernighan
柴田 芳樹 (翻訳)
丸善出版 2016-06-20
Book 単行本(ソフトカバー)
ASIN: 4621300253, EAN: 9784621300251
評価     

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。

reviewed by Spiegel on 2018-10-20 (powered by amazon-item v0.2.0)

photo
[まとめ買い] 超人ロック ミラーリング(コミックフラッパー)
聖 悠紀
Ebook Bundle Kindle版
ASIN: B013URFRLQ
評価     

「エレナ」続編。分散 AI といえばこれだよね。

reviewed by Spiegel on 2017-12-28 (powered by amazon-item 0.2.1)


  1. 本当に完全性を担保したいなら電子署名と組み合わせるべきだと思うけどね。まぁ,そこまで厳密な管理は(今のところ)要らないと考えているのだろう。今や GnuPG と OpenSSH と Git はワンセットなので(OpenSSH の鍵は GnuPG で管理可能) OpenPGP で電子署名すればいいじゃない,と思うのだが。 [return]
  2. Go 言語にしろ(最近ブームが再燃している) Dart 言語にしろ,言語系のプロダクトやサービスは Google から切り離してほしいよなぁ。 Alphabet の傘下から外れろとまでは言わないから。 [return]

May 30 2019

「ヒト」こそがセキュリティの最強点

今夜はリリースされたばかりの『賢者の弟子を名乗る賢者 11』でも読んでのんびり過ごそうと思っていたのだが,面白そうな話が上がっているので便乗してみる。

さすが piyolog さんは早いなぁ。

この記事を見かけたのが朝の忙しい時間帯だったこともあり,タイトルだけを見て「やらかしてら」くらいの感想しかなかったのだが,どうも「ヤマダ電機はクレカのセキュリティ・コードまで保持っていて丸ごとそれらを抜かれたらしい」という噂になっていたようだ。

が,実際にはこれはマスメディアの報道からくる誤解らしい。

例によってマスメディアの中途半端で杜撰な報道をネットメディア(Twitter 等を含む)が増幅しフェイク化するといういつもの展開なわけだが,語るのも面倒なので,こちらは無視する。

問題はヤマダ電機側がインシデントを認知してから実際にクレカ運用を止めるまでに10日かかっていること,そこから警察に届けるまで(例の10連休を挟んで)10日,そこからユーザに告知するまでに20日以上もかかっていることだ。

日時 出来事 2019年3月18日までに ヤマダウェブコム・ヤマダモールが不正アクセスを受け、ペイメントアプリケーションが改ざんされる。 : カード情報流出の可能性がある対象期間 2019年4月16日 クレジットカード会社より情報流出の疑義について連絡 同日 ヤマダ電機が情報漏えいの可能性を把握。 : カード情報流出の可能性がある対象期間 2019年4月26日 ヤマダウェブコム・ヤマダモールでシステムメンテナンス。カード登録を休止する措置。 同日 ヤマダ電機がP.C.F.FRONTEOへ不正アクセスの調査を依頼。 2019年5月7日 ヤマダ電機が警察へ被害相談。 2019年5月20日 P.C.F.FRONTEOによる調査が完了。 2019年5月22日 ヤマダ電機が警察へ被害届を提出。 2019年5月28日 ヤマダ電機が個人情報保護委員会へ不正アクセス被害を報告。 2019年5月29日 ヤマダ電機が不正アクセス被害とクレジットカード情報流出の可能性を発表。
via ヤマダ電機通販サイトの不正アクセスについてまとめてみた

いやいやいや。 あり得ない愚鈍さである。 今時こんなテキトーなインシデント・レスポンスをかます企業があるとは思わざりき。

上のタイムラインを見れば分かるが,情報漏洩の可能性を認知した4月16日の時点でサービスを止めユーザに告知した上で警察と調査会社との三者で事に当たれば被害(の可能性)を抑え少なくとも10連休前には解決できただろう。 しかも10連休直前にえんやらやっと調査を依頼して自分たちは10連休を楽しんだ後に警察へ通報かい? 安倍政権の中の人たち,あなた達の進める「働き方改革」は順調なようですよ(笑)

「ヒトはセキュリティの最弱点である」とはよく言われることだが,まさに今回のケースはヤマダ電機側の怠慢による「人災」だろう(もちろんクレカ情報を盗んだ犯罪者が一番悪いのは言うまでもないが)。

しかし本当は「ヒトはセキュリティの最強点になり得る」のである(「である」ではなく「なり得る」のがポイント)。 何故なら,予期しないイレギュラーが起きた時,危機的状況に見舞われた時,そういったときにこそ「ヒト」の真価が問われるからだ。

こんな15年くらい前の腐ったセキュリティ事例を目の当たりにできるとは思わなかったが,「他山の石」とでも思って今後の私達の活動に活かしていきたいものである。

参考図書

photo
セキュリティはなぜやぶられたのか
ブルース・シュナイアー
井口 耕二 (翻訳)
日経BP社 2007-02-15
Book 単行本
ASIN: 4822283100, EAN: 9784822283100
評価     

原書のタイトルが “Beyond Fear: Thinking Sensibly About Security in an Uncertain World” なのに対して日本語タイトルがどうしようもなくヘボいが中身は名著。とりあえず読んどきなはれ。ゼロ年代当時 9.11 およびその後の米国のセキュリティ政策と深く関連している内容なので,そのへんを加味して読むとよい。

reviewed by Spiegel on 2019-02-11 (powered by amazon-item 0.2.1)

photo
復活の地1
小川一水
早川書房 2012-09-15 (Release 2013-11-15)
eBooks Kindle版
ASIN: B00GJOESS6
評価     

コミカライズ版もある。てか,コミカライズ版を最初に読んだ(笑) 大きな災害がある度にこの作品を思い出す。

reviewed by Spiegel on 2016-04-17 (powered by amazon-item 0.2.1)

photo
ソーシャルシフト これからの企業にとって一番大切なこと
斉藤 徹
日本経済新聞出版社 2011-11-11 (Release 2012-10-18)
eBooks Kindle版
ASIN: B009S7CDP6
評価     

随分前に出版された本だが,企業がソーシャル・メディアと付き合うための基本的な事柄が載っている。これ読んで出直してきなはれ。ちなみに巻末の spesial thanks に私の名前が載っているのは密かな自慢である(笑)

reviewed by Spiegel on 2019-05-30 (powered by amazon-item 0.2.1)

photo
賢者の弟子を名乗る賢者 11 (GCノベルズ)
りゅうせんひろつぐ, 藤ちょこ
マイクロマガジン社 2019-05-30 (Release 2019-05-30)
eBooks Kindle版
ASIN: B07RWSCKKG
評価     

ソウルハウル編のクライマックス。今度はレイドボスだ!

reviewed by Spiegel on 2019-05-30 (powered by amazon-item 0.2.1)

May 29 2019

GnuPG 2.2.16 がリリースされた

GnuPG 2.2.16 がリリースされた。

今回もセキュリティ・アップデートはなし。 主な機能追加・修正点は以下の通り。

  • gpg,gpgsm: Fix deadlock on Windows due to a keybox sharing violation. [#4505]
  • gpg: Allow deletion of subkeys with --delete-key. This finally makes the bang-suffix work as expected for that command. [#4457]
  • gpg: Replace SHA-1 by SHA-256 in self-signatures when updating them with --quick-set-expire or --quick-set-primary-uid. [#4508]
  • gpg: Improve the photo image viewer selection. [#4334]
  • gpg: Fix decryption with --use-embedded-filename. [#4500]
  • gpg: Remove hints on using the --keyserver option. [#4512]
  • gpg: Fix export of certain secret keys with comments. [#4490]
  • gpg: Reject too long user-ids in --quick-gen-key. [#4532]
  • gpg: Fix a double free in the best key selection code. [#4462]
  • gpg: Fix the key generation dialog for switching back from EdDSA to ECDSA.
  • gpg: Use AES-192 with SHA-384 to comply with RFC-6637.
  • gpg: Use only the addrspec from the Signer's UID subpacket to mitigate a problem with another implementation.
  • gpg: Skip invalid packets during a keyring listing and sync diagnostics with the output.
  • gpgsm: Avoid confusing diagnostic when signing with the default key. [#4535]
  • agent: Do not delete any secret key in --dry-run mode.
  • agent: Fix failures on 64 bit big-endian boxes related to URIs in a keyfile. [#4501]
  • agent: Stop scdaemon after a reload with disable-scdaemon newly configured. [#4326]
  • dirmngr: Improve caching algorithm for WKD domains.
  • dirmngr: Support other hash algorithms than SHA-1 for OCSP. [#3966]
  • gpgconf: Make --homedir work for --launch. [#4496]
  • gpgconf: Before --launch check for a valid config file. [#4497]
  • wkd: Do not import more than 5 keys from one WKD address.
  • wkd: Accept keys which are stored in armored format in the directory.
  • The installer for Windows now comes with signed binaries.

Release-info: https://dev.gnupg.org/T4509

via GnuPG 2.2.16 released

着々と SHA-1 からの置き換えが進んでる感じだねぇ。

Ubuntu で最新版バイナリを入手する方法を考えないと。 やっぱ自前でビルドするしかないのかなぁ。

アップデートは計画的に。

ブックマーク

参考図書

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩
SBクリエイティブ 2015-08-25 (Release 2015-09-17)
eBooks Kindle版
ASIN: B015643CPE
評価     

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by amazon-item v0.2.0)

May 28 2019

Ubuntu でも Kindle 本が読みたい

まぁマンガやラノベを読む程度なら Kindle 端末でも十分だし一部のマンガ等は Kindle Cloud Reader を利用する手もあるのだが,やはり Ubuntu のデスクトップ上でも読みたいのである。

ただ Linux プラットフォームで動くネイティブな Kindle アプリケーションはないようで,今のところ Wine 上で Windows 用の Kindle for PC を起動するしかない。

まぁ Wine はそのうち試してみる予定だったので,このさい試してみるとしよう。

Wine のインストール

Wine は APT で導入可能である。

$ apt show wine
Package: wine
Version: 4.0-1
Built-Using: khronos-api (= 4.6+git20180514-1), unicode-data (= 11.0.0-1)
Priority: optional
Section: universe/otherosfs
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Wine Party <debian-wine@lists.debian.org>
...

ちなみに wine-stable だと v3 系, wine-development だと v4.2 がインストールされるようだ(2019-05 時点)。 ここは素直に wine をインストールしておこう。

$ sudo apt install wine

一応,動作確認しておく。

$ wine --version
wine-4.0 (Ubuntu 4.0-1)

よしよし。

日本語フォントのインストール

当然ながら素の Wine には Windows アプリケーション用の日本語フォントが入っていない。 日本語フォントを入れるに Winetricks をインストールする。

$ sudo apt install winetricks

Ubuntu のメニューに Winetricks のアイコンが追加されるのでクリックして起動する。 すると以下の画面が起動する。

ここで “Select the default wineprefix” を選択して [OK] を押すと以下の画面に遷移する。

更にここで “Install a font” を選択して [OK] を押してフォントの選択画面に遷移する。

“cjkfonts” にチェックを付けて [OK] を押せばフォントのインストールが開始される。

Winetricks ではワーニングやエラーのプロンプトが出まくるが全部無視しても問題ない(なんだかなぁ)。

Kindle for PC のインストール

あとは Kindle for PC のインストーラを取ってきて Wine 上で起動すればいいのだが,どうやら Amazon にある最新版の Kindle for PC はうまく動かないっぽい。

しょうがないので v1.17 の Kindle for PC のインストーラを使う。

こんなん使って大丈夫なのか不安になるが,どの解説ページでもこれを使えって言ってくるんだよなぁ。 頻繁に使うもんじゃないし,いっかぁ(投げやり)。

インストーラの起動は以下の通り1

$ wine kindle-for-pc-1-17-44183.exe

これでインストールが行われて Kindle for PC が起動する。 Ubuntu のメニューに Kindle アイコンが登録されるので,他のアプリケーションと同じようにアイコンのクリックでいつでも起動できる。

Wine 内のアプリケーションの削除

Wine 内のアプリケーションを削除するには以下のコマンドを起動する。

$ wine uninstaller &

ブックマーク

photo
Kindle Paperwhite 電子書籍リーダー 防水機能搭載 Wi-Fi 32GB
Amazon (Release 2018-11-07)
Amazon Ereaders エレクトロニクス
ASIN: B07HCSL6BN, EAN: 0841667162539
評価     

ストレージ32GBの「マンガ・モデル」。マンガ単行本を大量に読む人はこれじゃないとちょっと厳しい。画質は(白黒である以外は)特に問題なし。

reviewed by Spiegel on 2019-05-28 (powered by amazon-item 0.2.1)


  1. 古いインストーラを使うせいかもしれないが Wine 内の Windows バージョンを “Windows 10” にするとインストーラがうまく動かないらしい。 Wine 内の Windows バージョンを設定するには winecfg コマンドで設定ダイアログを起動する。 [return]

May 26 2019

さくらのレンタルサーバの Git が「使える!」ようになっていた

自宅マシンの OS 換装も一段落ついたので,そろそろ本家サイトのリニューアルの準備を進めようと思うのだが,その前にホストである「さくらのレンタルサーバ」がどうなったか確認しておかないと。

さくらのレンタルサーバ」は今年(2019年)に入ってから大規模な OS アップグレードを行っている。

私が利用しているサーバは4月にアップグレードが完了していて,ログインすると以下のバージョン表記になった。

FreeBSD 11.2-RELEASE-p9 (GENERIC) #0: Tue Feb  5 15:30:36 UTC 2019

嬉しいのは git

$ git version
git version 2.19.2

と,かなりまともになった。 アップグレード前は 2.7 とか巫山戯たバージョンで git-submodule も使えない状態だったのでかなりの進歩と言えよう。

これでようやく「さくらのレンタルサーバ」に(自前でビルドせずとも)ベア・リポジトリを置いてコンテンツのバージョン管理や自動デプロイができるようになったよ。 スタンダード・プランですらストレージが100GBもあって持て余してたんだよねぇ。

そして Go コンパイラが導入された。

$ go version
go version go1.11.1 freebsd/amd64

かなり古くてセキュリティ脆弱性とかちゃんと始末してるのか不安なところもあるが,このバージョンならモジュール・モードも(一応)使えるし,まぁいいか。 バックエンド側の処理を Go で書くこともできるだろう。

とりあえず photo.Baldanders.info を使って Hugo + Git の組み合わせで git-push から自動デプロイができるところまでは確認済みなので,この構成でのんびりリニューアル作業を行うとしよう。

2019-05-26 のブックマーク

リリース情報

セキュリティ&プライバシー関連

知財関連

Linux または Ubuntu に関する話題

その他

Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.

Don't be the product, buy the product!

Schweinderl