2019-09-22

江添ボドゲ会@9月29日

自宅ボドゲ会を下記の要領で開催します。

江添ボドゲ会@9月29日 - connpass

2019-09-20

江添亮のC++入門の出版記念の勉強会告知

江添亮のC++入門の出版を記念した勉強会を開催します。参加登録は以下から。

https://kbkz.connpass.com/event/148247/

勉強会の内容としては、江添亮のC++入門の執筆について軽く話した後、その場で書籍の販売をしつつ、交流会をする。特に発表者はつのらない。というのも勉強会の価値は交流にあると考えているためだ。

2019-09-19

MSVCのSTLがGitHubで公開

https://github.com/microsoft/STL

MSVCのSTLがGitHubで公開された。ライセンスはLLVM例外条項付きのApache 2.0。更に興味深いことに、今後のSTLの開発はGitHubに移行する予定だそうだ。マイクロソフトも変わったものだ。

C++のテンプレートの都合上、STLのソースコードはMSVCに付属していて、読むことは誰にでもできた。理論的には、MSのEULAに縛られない読み方もできたはずだ。例えばEULAに同意せずにMSVCを入手し、インストラーを実行せずに手動でアーカイブを展開すればソースコードを読むことはできたはずだ。もちろん、わざわざそんな手間をかけてまで不自由ソフトウェアのソースコードを読みたいとは思わないし、民事上のリスクも背負いたくない。

そのため、私がC++を教育するときは、MSVCの存在は単に無視していた。libstdc++とlibc++は自由ソフトウェアであるので、その実装も含めて教育することができるが、MSVCは不自由なので、リスク回避のためにソースコードを読むこともできずにいた。MSVCを無視するなという声に対しては、不自由ソフトウェアに時間を浪費したくはないし、仮に私が教えたいにしても 、マイクロソフトは教えたがらないようだという都合のいい言い訳が成り立っていた。しかし、今後はそういう言い訳は通用しないようだ。

江添亮のC++入門が出版された

江添亮のC++入門が出版された。もうすでに一部書店では店頭に並べているところもあるようだ。

この本はタイトル通り入門書だ。C++のソースコードのコンパイル方法から初めて、GNU Makeによるビルドシステムを少し触り、基本的な文法を解説し、一部のライブラリの仕組みまで解説する。

この本の執筆にあたっては、知識のブートストラップを意識した。私は一から物を教えるという性質の本で、まだその本では説明をしていない知識を何の説明もなしにいきなり出す本を読んだことがある。巷では絶賛されている本ではあるが、著者自らもうその本で教育をしないと宣言した本だ。そのため、すでに説明した知識のみを使って次の知識を説明するようにした。

ただ、これは思いの外大変だった。入門書を書いている間、なぜ変えたいの知れないよくわからないもどかしさに包まれながら解説を書いていた。そしてとうとうポインターを解説した後、あらゆることの説明がとても簡単になっていることに気がついた。なぜならポインターの知識を前提にしてよいからだ。つまり、ポインターが知識の依存関係の割と根本的なところに存在するらしい。なぜポインターの解説がこんなに送れたかというと、現代のC++は生のポインターを直接使わずして実用的なコードが書けるからだ。

今回の本の表紙には私の写真が印刷されている。これは今まで2冊の本を出した際に、なぜ著者の写真がないのだ、ぜひ載せるべきだと言われていたので、3冊めとなる今回は、では載せてみようということで実現した。いまのところ、Twitter上での言及が今までの2冊に比べて多いようで、宣伝効果はあるようだl.写真の撮影は古くからの友人でプロのカメラマンの三浦大に依頼した。

Photographer - Masaru Miura

私の本のライセンスはGPLv3だが、写真はライセンスされない。写真の著作権は撮影者のもので、撮影者がGPLv3に同意しなかったためだ。撮影者は芸術家気質なので自分の作品を改変されたくないという気持ちは理解できる。

EzoeRyou/cpp-intro: Beginner's guide for C++

この入門書を読み終えたならば、少し古いが「C++11/14コア言語」や、未だに大多数の現場では使われていない最新の「江添亮の詳説C++17」も読むとよい。紙書籍、電子書籍で出版されている他、GitHubで公開されている。

EzoeRyou/cpp-book: C++11 textbook
EzoeRyou/cpp17book: textbook for C++17

数年後も同じ仕事を続けているのであれば、おそらく「江添亮のC++20」のようなタイトルの本が出るだろう。

近いうちに前の本でもやったように、本の出版記念の勉強会でも開きたいところだ。

2019-09-17

CADDi C++勉強会5回目

CADDi C++勉強会の5回目が9月25日に開催されます。

C++勉強会 #5 - connpass

今回はオーバーロード解決とテンプレートの実引数推定について解説する。

2019-09-11

CADDi C++勉強会、11日に延期

CADDiのC++勉強会が、台風の影響による電車の劣悪な運行状況から、11日に延期された。

https://caddi.connpass.com/event/146851/

当日はみんなの疑問に答える形で規格上の用語を解説していく。

2019-09-03

CADDi C++勉強会4回目

C++勉強会 #3 - connpass

今回は式と文の違いといった、C++の用語の解説をする。

今回の勉強会の動機は、CADDi社員がうっかり未評価式の文脈でラムダ式を使ってしまったところ、つまり

using type = decltype([]{}) ;

のようなコードを-std=c++17でコンパイルしたところ、「未評価の文脈でラムダ式は使えない」というそのままのコンパイルエラーメッセージが出力されたが、はて、未評価とは?という疑問でこのエラーメッセージの意味するところを理解するのに相当苦労した経験をしたことが元となっている。なぜC++コンパイラーがこのようなエラーメッセージを出すかというと、未評価という言葉は規格上の用語なのだ。ちなみに、Clangのほうがエラーメッセージは親切で、「未評価オペランドの中のラムダ式」としている。これは規格そのままの表現だ。GCCの表現は規格どおりの表現ではないが、規格に沿った表現であることに変わりはない。C++コンパイラー開発者は当然C++規格を参照しているのでC++規格に沿った表現を使う。そのために、コンパイラーのエラーメッセージを解釈するには、規格の用語の知識が必要になる。今回はそのような知っていると役に立つかも知れない規格の用語を解説していこうと思う。

2019-08-27

CaddiのC++勉強会3回目

Caddiによる3回目のC++勉強会が8月30日に開催される。

C++勉強会 #3 - connpass

今回はメタプログラミング。Boost.Hanaを解説する。

最近、私自身はメタプログラミングをしていない。というのも、C++のメタプログラミングは本来計算に使うはずではなかった言語機能を無理やり計算に使っているので、いろいろと無理がある。メタプログラミング機能はコア言語に入るべきだ。C++20ではrequires式がはいる。後は静的リフレクションがはいればBoost.Hanaなど用済みになる。静的リフレクションはC++23かC++26には入るはずなので、あと5年ぐらい待てばいいと思うのだが、そこを待てないのが悩みどころだ。D&Eにも書いてある通り、今使える技術が重要なのであって、来年使える技術には価値がない。

勉強会の内容としては、Boost.Hanaのユーザーマニュアルがよくかけているので、これに沿って解説していくことになる。

2019-08-16

江添ボドゲ会8月25日

以下の要領で自宅ボドゲ会を開催します。

江添ボドゲ会@8月25日 - connpass

2019-08-13

P++: 静的型付けをめざすPHP

PHP: pplusplus:faq

PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる。P++はPHPとの下位互換性を削りながら除々にPHPを静的型付け言語にする試みだ。

PHP開発者の中には2つの流派がある。PHPの源流であり現在の形である動的型付け言語としてのPHPを良しとする流派と、PHPをより強い静的型付け言語へと発展させたい流派だ。良い悪いの問題ではない。どちらの流派も正当な理由がある。しかし、ゆるふわな動的型付け言語とガチガチの静的片付け言語は同じ一つの言語として同居できない。

そこで、コードネームP++として、PHPを静的型付け言語に発展させる新しい言語の開発が提案された。P++はforkではなく、PHPと同じコードベースを共有する。PHP 8のバイナリはPHPとP++を同時に実装する。言語の切り替えは何らかの宣言によって指定する。

P++はPHPの厳格な下位互換性を諦め、少しずつ下位互換性を切り捨てつつ、PHPを静的片付け言語にしていく。

これはPerl 5/6やPython 2/3という過去の失敗に学んだのだろう。

PHPとP++は同じコードベースであり、ほとんどのコードは共有するので、PHPの開発リソースが2倍必要になることはない。

PHP 7.4をLTSにしてPHP 8から介護感性を切り捨てるのは良いアイディアではない。言語を分断させてしまう。Python 2/3がすでに犯した失敗だ。

PHP 8はPHPとP++を含むので、PHP 8をインストールするとP++もついてくる。同じコードベースでPHPとP++を共存させることもできる。

PHPの開発が止まるわけではない。ただし静的型付け機能はPHPには入らずP++に入る。PHPは下位互換性を重視する。

Hackとはどう違うのか。Hackは一企業による開発であり、コミュニティの意見によって設計されなかった。またHackは流通や知名度の問題で難がある。P++はPHPと共存するので、PHP 8をインストールしたならばもれなくP++もついてくる。

PHPに静的型付けは必要か? 現在、PHPを仕事で使っているプログラマーの中には、本来ならば静的型付け言語を好むが、仕事なのでPHPを使っている人もいる。PHPが静的型付けを提供する意義はある。

2019-08-07

キャディC++勉強会8月21日、テンプレート基礎

C++勉強会 #2 - connpass

8月21日に株式会社キャディでC++勉強会が行われる。今回はテンプレート基礎だ。参加登録は上記connpassから行える。

前回はポインターと、時間が余ったので即興でリファレンスについて学んだ。今回は初歩的なテンプレートの使い方を学んでいく。

テンプレートといえば、昔はクラスと関数だけだったのだが、今では変数、エイリアス宣言もテンプレートにできる上に、C++20ではコンセプトも追加される。今回の勉強会では初歩的なテンプレートの使い方を一通り学んだ上で、時間があれば未来か過去の話をしようと思う。未来の話はコンセプトやメタクラス。過去の話はテンプレートの歴史だ。初歩を学ぶという点では過去の話をしたほうが良いと思う。

2019-07-19

キャディ株式会社のテクニカルアドバイザーになった

C++勉強会 #1 - connpass

Ta-da:ドワンゴは辞めていない。キャディでテクニカルアドバイザーとしてC++教育もすることになった。7月30日に最初の勉強会をする。

周りで転職が頻発しているので、私もにわかに転職熱をだし、自分の転職市場における価値を確かめるためにも、いくつか企業に話を聞いてみた。その結果としては、私を給料据え置きで雇いC++の仕事をさせたいという企業はあった。しかし、教育一辺倒というわけでもないし年収も現状維持、そしてドワンゴでまだやりたい仕事も残っているときている。転職も興味ぶかい人生の選択ではあるが、しばらくはドワンゴにとどまろうという判断を今回はした。

その話を聞いた企業の一つがキャディ株式会社だ。奇しくもちょうど1年前、もうC++17を現場で使っている企業があるというので話を聞きに行ってブログに書いたことがある。

C++17をすでに現場で使っているというキャディ株式会社に話を聞いてきた

キャディは板金加工の受注生産をしている会社だ。板金加工というのは一枚の金属板を切断したり曲げたり削ったりと様々な加工をして、顧客の望む形状の金属製品を作り上げる仕事だ。従来、板金加工の依頼をするとなると、板金加工業者と話をして、望む形状を伝え、熟練の職人が長年の経験と勘で必要な加工を決定していた。これは時間のかかる作業であり、価格の見積もりだけでも長時間かかるものであった。

キャディは見積もりを自動化することを目指している。顧客がキャディのWebサイトに生産したい形状の3Dモデルデータをアップロードすると、それをソフトウェアで処理し、あたかも折り紙を展開するように、1枚の板から目的の形状を作り出すための加工を決定する。必要な板金加工が自動的に決定できるのであれば、価格の見積もりもできる。従来の板金加工業者が、何日や何週間もかけてようやく見積もりを出していた作業が、自動化をすることによって一瞬で見積価格を顧客に提示することができる。これがキャディの目標だそうだ。

板金加工の見積もりを自動化する。こう書いてしまうととても簡単に読める。しかし似たような計算である折り紙の展開というのは数学的に難しい問題である。自動化の実現には、数学力とアルゴリズム力とコーディング力が必要だ。キャディは自動化の要となる処理の実装について、最新のC++を選択した。古いC++で生産性を下げている余裕はない。問題は、最新のC++を知っているプログラマーは労働者市場では希少だということだ。

しかも、単にC++を知っているだけではダメで、数学力とアルゴリズム力も問われる。しかし、これについては朗報がある。AtCoderのような競技プログラミングコンテストを定期的に開催しているWebサイトの興隆で、今や競技プログラミングは盛んに行われている。高レートを維持している優秀な競技プログラマーは本物の数学力とアルゴリズム力を持っているので、数学力とアルゴリズム力を持ったプログラマーは労働者市場に多数供給されている。

AtCoder:競技プログラミングコンテストを開催する国内最大のサイト

好都合なことに、競技プログラミングではC++が使われることが多い。問題は、単に競技プログラミングで好成績を出すためだけであれば、C++を理解する必要はないということだ。一部の突出した競技プログラマーは、プログラマーというよりはもはや数学者に近く、彼らにとってC++というのはプログラミング言語ではなく、都合のいい計算機でしかない。そのため、必要な数学力とアルゴリズム力とC++力を兼ね備えた人材は労働者市場に極めて稀にしか存在しない。労働者市場に即戦力がいないのであれば教育するしかないが、最新のC++がわかるプログラマーに数学を教えるのと、競技プログラマーに最新のC++を教えるのはどちらがマシかというと、確実に後者だ。そもそも、労働者の人口としてもC++プログラマーより競技プログラマーの方が多い。

キャディは最新のC++を現場で使う興味深い企業であるので、強い興味を持ちながらも、ドワンゴの環境も捨てがたく、結局転職はしなかったのだが、つい先日、技術顧問として月2回ぐらいキャディの社員向けにC++教育をしてくれないかという話がきた。キャディ社内には私と同等以上にC++に詳しい人間がいる。ただし彼には数学力もあるので教育よりは現場の開発に労力を費やしてほしい。単発の勉強会で30分ぐらい話してくれというのであればともかく、定期的に月2回も社員向け教育をしてくれというのは流石に無償では引き受けられない。では報酬も支払うという話になった。

ところで、今私が雇用されているドワンゴでは兼業申請が通れば兼業をしてもよいということになっている。兼業申請が認められるための条件はいくつかあるが、特に重要な条件に、ドワンゴと競合関係にないという条件がある。ドワンゴが板金加工事業をしているという話は聞いたことがないし、その他の条件も問題はないだろうと考え、兼業申請を出してみたところ承認された。

そしてこのたび、キャディ株式会社のテクニカルアドバイザーとなった。

当面の予定としては、月2回、勉強会を開くことになっている。勉強会でキャディの社内情報がかかわらない内容については、聞きたい人がいれば社外から少し人が聞きに来てもいいだろうということで、connpassで勉強会の告知を行うことになった。

C++勉強会 #1 - connpass

勉強会の内容としては、さしあたって、テンプレート、メタプログラミング、ムーブセマンティクスを理解できるようにする目的だが、記念すべき第一回目では、ポインターについて話すことになった。

なぜポインターなのか。私はちょうどC++入門書を書いている。この入門書ではC++知識のブートストラップを試みた。参考書ではすでに教えた知識だけを使って、次の知識を教えるようにした。このような入門書を書くのは初めてなので手探りで牡蠣進めていった結果、ポインターを教えるまではなんともいいがたい教えにくいという違和感があったのだが、ポインターを説明してからは、ポインターの知識を前提にできるので圧倒的に教えやすくなった。そのため、もしポインターが理解できていないのであれば、まずポインターを理解するべきであると考えた。そのため、今回はポインターだ。

https://github.com/EzoeRyou/cpp-intro

ポインターの難しさは複合的な要因がある。アドレスや関節参照という概念の難しさ。C++の型システムの難しさ。C++の文法の難しさがある。この3つを意識しながら7月30日は2時間、ポインターについて話をする。

江添自宅ボドゲ回@7月28日

7月28日に自宅ボドゲ回を下記の要領で開催します。

江添ボドゲ回@7月28日 - connpass

2019-07-15

標準C++規格が3年おきに制定される理由

現在、C++の標準規格は3年おきに制定されている。このスケジュールはC++14から厳しく守られていて、C++20は2020年に制定される予定だ。

なぜなのかを議長のHerb Sutterが解説している。

Draft FAQ: Why does the C++ standard ship every three years? – Sutter’s Mill

まず現状認識として、C++の標準規格は3年おきに制定される。ドラフトにバグがあるので遅らせるべきではないのか。ダメだ。そのために2年間の機能追加と1年間の機能フリーズとバグ修正の期間が儲けられている。

しかし、ある「機能」はあと数回の会議を経たならば完全に合意できて入れられる状態になっている。この「機能」のためにC++20を少しだけ遅らせられないのか? ダメだ。期限までにC++20に入れられない「機能」はC++23に回される。

このスケジュールは厳しすぎる。なぜ3年という固定の期間で物事が進むようになったのか。なぜならば、プロジェクト管理をする方法は2つしかない。長年の経験により、この方法が別の方法よりマシだとわかったからだ。

プロジェクト管理をする2つの方法とはなにか? 完成品をリリースするタイミングを決定する方法で、2つある。一つは機能に合わせること。もう一つは期間に合わせること。どちらか一つしか選ぶことはできず、一報を選んだならば他方を選ぶことはできない。

リリースを機能に合わせる場合、機能が完成しなければリリースできない。そのため、リリース期間を決めることはできない。結果としてリリース期間が際限なく遅延する。

リリースを期間に合わせる場合、期間に間に合わなかった機能は今回のリリースには含まれない。

リリースを機能に合わせる場合というのは、C++98とC++11だった。C++98規格は本来1994年までに制定されるはずだった。Bjarne Stroustrupは1994年までに制定できなければ失敗だとまで言った。結果、1998年になった。C++11は200x年までに制定されるはずだった。結果として2009年にすら2年間に合わなかった。

ある機能が、あと数ヶ月で完成するという時、それは数ヶ月で完成しないし1年でも完成しない。にもかかわらず、あと数ヶ月で完成するからという言い訳でリリースを延々と引き伸ばすと、当初の予定より大幅にリリースが遅れてしまう。

C++の規格制定が遅れると、C++コンパイラーの実装も遅れる。C++コンパイラーベンダーとしては、せっかく実装した機能が、規格の変更によって変わってしまうということを考えると、まだ変更されているうちはわざわざ労力を費やして積極的に実装する理由がない。規格を制定することでようやく実装にかかることができる。

C++98とC++11でこのような失敗をしたのは、我々は経験不足だったからだ。経験を得た我々は、プロジェクト管理に厳格な期間を定めることによって、スケジュール通りに規格を制定するようになった。3年の期間に間に合わなかった機能は次回以降の規格に回す。

2019-07-14

AMDのZen 2でRDRANDが-1を返すので最近のGNU/Linuxがブートできない問題

AMDのZen 2アーキテクチャの新製品が発売されて沸き立っているが悲しいお知らせがある。最近のGNU/Linuxディストロはブートしない。例えばUbuntu 19.04はブートしない。

理由は、ハードウェア乱数を返す命令、RDRANDに不具合があり、常に-1を返すのだという。このため、rdrandを直接使っているsystemdが失敗し、結果としてブートできなくなる。

AMDによればこの問題はBIOSアップデートで修正可能であるという。しかしこれはとても怪しい陰謀論を考えたくなる。なぜRDRANDが常に-1を返すような不具合が未然に発覚せずに製品リリースまでこぎつけてしまったのか。なぜファームウェアのアップデートで修正可能なのか。まさかバックドアなのではないか。

陰謀論はともかくとして、もう一つの問題は、なぜsystemdはRDRANDを直接使っているのかということだ。Linuxカーネルの提供する/dev/urandomではなぜだめなのか。

その理由は他ならぬsystemdのソースコードにコメントとして記載されている。

https://github.com/systemd/systemd/blob/f90bcf8679e8708788290519dc09371e60c6fc82/src/basic/random-util.c#L34

Linuxカーネルのブートの直後では、十分なエントロピープールが溜まっておらず、/dev/urandomへのアクセスすらかなり長い時間ストールする可能性がある。特に組み込みやVMといった環境では問題になる。このため、systemdはブート直後かつ、UUIDとハッシュテーブルのシードの生成のみにrdrandの値を直接使っている。

UUIDはユニーク性さえあればよく、セキュアなRNGは必要がない。

ハッシュテーブルは攻撃者が恣意的な値を多数登録することで、オーダーをO(1)ではなくすることができてしまう。そのためにハッシュ計算のシードに乱数値をつかている。

当初はsystemdはRDRANDを直接使うなんて馬鹿げたことをするものだと思っていたが、どうもこの状況を考えるに使いたくなる気持ちもわかる。systemdはRDRANDがない環境もサポートしているため、フォールバック実装はあるのだが、rdrandがあるが壊れている環境ではどうしようもない。

現在、systemdにworkaroundがコミットされているほか、ファームウェアアップデートが予定されているそうだが、問題はマザーボードベンダーがアップデートを提供するには時間がかかるため、しばらくはこの問題に悩まされそうだ。

結論としてはAMDが悪い。

2019-07-12

GPLv3でライセンスされた自由な技術書の電子書籍を買う理由

江添亮の詳説C++17の電子書籍の売上に対する印税の通知書がアスキードワンゴから送られてきた。額としては微々たるもので、9ヶ月かけて執筆した労働力に対する収入としては圧倒的に少ない。私がドワンゴに雇用されていて安定した給与所得があるのでなければ割に合わない。回らない寿司が何度か食べられる程度の額だ。

アマゾンで江添亮の詳説C++17を購入:https://www.amazon.co.jp/dp/4048930605

ところで、この本はGPLv3でライセンスされた自由な本だ。当然ソースコードが公開されている。

https://github.com/EzoeRyou/cpp17book

にもかかわらず電子書籍に金を払う理由はなぜだろう。しかも、その電子書籍の中にはAmazonのKindleのような不自由な本も含まれているのだ。

AmazonのKindleで多くの本を読んでいるので、不自由ではあるが同じデバイスで本を読みたいという人はいるだろう。

販売している電子書籍はプロの編集者によって組版されている。ここに価値を見出しているのかもしれない。

あるいは単に筆者に対するお布施かもしれない。

気になったのでTwitterで聞いてみた。

どうやらお布施目的が多いようだ。

技術書の出版が商業的に成立するにはお布施目的だけでは成り立たない。難しいものだ。

それはそうと、私の書いたC++入門書の出版作業をいましている。近いうちにアスキードワンゴから出版できる見込みだ。

https://github.com/EzoeRyou/cpp-intro

今回は、古くからの友人のプロのカメラマンである三浦大に依頼して、著者近影を撮影した。

http://www.masarumiura.jp/

著者近影の写真の著作権は撮影したカメラマンのものだが、それ以外の本はGPLv3だ。

また、C++と並列処理について書かれたAnthony WilliamsのC++ Concurrency in Actionの翻訳もアスキードワンゴから出版される予定だ。こちらは私が査読をする。

2019-07-09

C++20 Deprecate implicit lambda capture of this

C++20 deprecated the implicit lambda capture of this. What does it mean and how can we keep up with the change?

As of now, you probably don't need to do anything. Because it's just the deprecation, not the removal. But in the future, it will eventually be removed so be prepared.

So what is "implicit lambda capture of this" anyway? The following code relies on that behavior.

struct S
{
    int x ;
    void f()
    {
        // C++17: Well-formed
        // C++20: Deprecated.
        [=]{ std::cout << x ; }
    }
} ;

So above code use the variable x. this name x is a data member of class S. So "x" in this context means "this->x". Above code works because lambda capture implicitly capture this pointer. That's why we can use "x" inside the lambda expression.

You may not realize it but this "x" is not captured by copy. In fact, "x" is not captured at all. What lambda capture instead is this pointer. So we can use "x" via the this pointer. So "x" is effectively captured by reference. We can change the value of x.


void f()
[
    auto change_x = [=]( auto value ) { x = value ; } ;
    change_x(123) ;
}

This behavior breaks novice's assumption that lambda capture clause "[=]" means capture by value. People may write code like this:

struct S
{
    int x ;
    auto get_closure()
    {
        return [=]{ return x ; } ;
    }
} ;

int main()
{
    std::function<int()> f ;
    {
        S s{123} ;
        f = s.get_closure() ;
        // s's lifetime ends here
    }
    int result = f() ;
}

Assuming that it's safe because of captured by value and get caught by Undefined Behavior.

C++17 partially fixed this by introducing the explicit capture of this.


struct S
{
    int x ;
    void f()
    {
        // capture this pointer by value, x is reference
        [this]{ x ; } ;
        // catpure *this by value, x means x is value
        [*this] { x ; } ;
    }
} ;

"[*this]" copy the this pointer which means x is accessed through this pointer. "[*this}" copy the *this, that is the value of class object S. Since it copy the class object, x is copied too.

C++17 retained the implicit capture of this.

In C++20, it is decided that the standard deprecate the implicit capture of this via [=].


struct S
{
    int x ;
    void f()
    {
        // C++17: well-formed, it means [=, this]
        // C++20: deprecated, it still means [=, this]
        // C++??: if removed, ill-formed.
        [=] { x ; } ;
    }
} ;

The behavior of "[&]" doesn't change. It still implicitly capture this pointer by value. So the data members are effectively captured by reference. There should be no confusion on this.

2019-06-18

江添ボドゲ会6月30日

以下の要領で6月30日に自宅ボドゲ会を開催します。

江添ボドゲ会@6月30日 - connpass

2019-05-26

ダンスを学び始めて一ヶ月がたった

超会議でダンスを見て、にわかにダンスを学びたいと思ったものの、体が一切動かないので、ダンススクールに通い始めて早一ヶ月、未だに踊れるようにはなっていない。

向上を実感したことはある。まず拍子が認識できるようになった。裏拍もおぼろげながら認識できるようになった。

レッスン中のルーチンの振り付けを覚えられるようになった。始めた当初は、眼の前でインストラクターが実演する8拍や16拍程度の動きが全然覚えられなかった。今はある程度覚えられるようになっている。

ただ、拍子が認識でき、振り付けを覚えられるようになったからといって、体が動くわけではない。手足で表裏を交互に取るような動きは未だに難しい。ヒザで表を取りクラップで裏を取る動作だけは練習して少し体を慣らしたが、汎用的ではない。また、表と裏を交互に切り替えていくような動きも苦手だ。

手と足を同時に動かすことができない。足を正しく動かそうとすると手が動かなくなり、手を正しく動かそうとすると足が動かなくなる。そして、手と足が連動して動いてしまう。例えば歩くように右足と左手、左足と右手を交互にあげていく動きは、右足と右手が同時にあがるナンバ歩きのような動きになってしまう。

BPMが早いと拍子に体がついていかない。全力で無理やり体を動かしてもまだ拍子が速すぎるように感じ、それでも無理やり体を動かそうとすると、途中の動きを1拍飛ばしてしまい、拍子を追い越してしまう。

すでに練習した動作が出てきた場合は、少しはマシに動くことができるので、結局どこでもでてくるような有名な動作は一通り練習して慣れるしかないのだろう。

柔軟は一向によくならない。昔からあぐらをかけないほど股関節が硬かったが、毎日柔軟しても全く変らない。また肩の関節も硬いので、背中で手を組むことができない。しかし、よくわからないことに前屈はできる。なぜここまで体が硬いのに前屈だけはできるのかがよくわからない。

ここ数年は習慣的に運動していたことも幸いして、連日でダンススクールに行けるほどの体力はある。ただし、一週間ほど連日でレッスンを受けると、関節が痛むので、休まなければならない。連日レッスンを受けると、筋肉は問題ないが、関節が限界になるようだ。関節は一度痛めてしまうと回復に時間がかかる。ボルダリングも週に何度もしたいのだが、関節に負荷がかかるために、今は週1にとどめている。

自分の体について考える時、常に体質について意識させられる。どうも自分の体は筋肥大しやすい体であるようだ。単関節の単純な筋トレは自分でも驚くほど短期的に向上するし、見た目にわかるほど筋肥大する。問題は、運動神経が伴っていないということだ。昔から多関節を使う複雑な運動が苦手だった。

筋肉とは名前の付けられた筋肉であっても、すべての筋繊維が一斉に動くわけではない。筋繊維が数十本、数百本と集まった運動単位で動く。筋力を出した質の高い運動をするには、単に筋肥大をするだけではなく、多くの運動単位を一斉に動かす必要がある。そして多関節の運動では、適切な運動単位の一連の動きが必要になる。どうも自分は俗に運動神経と呼ばれている筋肉の動かし方が下手なのではないかと思う。

ダンスのジャンルだが、ダンスを学びはじめる前は、非人間的な動きがしたいのでPOPに興味があった。今通っているダンススクールでもPOPのレッスンはあるのだが、まだあまりにも踊れないので特定のジャンルを銘打たないリズムトレーニングのレッスンしか受けていない。リズムトレーニングのルーチンの動きはだいたいとても簡単で基礎的なものばかりなのだが、一人だけ毎回LOCKでルーチンをするインストラクターがいる。結果的に今は特定のジャンルで言うとLOCKだけを少し練習した状態になっている。

ダンスを学ぶ前に各ジャンルのダンスの動画をひと通り見たのだが、LOCKは地味で良さがわからないという印象を持った。ところが、LOCKをわずかにかじった今、同じ動画を見返してみると、以前は地味に見えたはずのダンサーはとてつもない技量を持っていることがわかり、しかもかっこいいと感じるようになった。

どうもこれは私だけではないらしく、動画サイトで素晴らしいLOCKダンスにも、ダンス未経験者から「地味」とか「同じ動きを繰り返していて単調」みたいなコメントが付けられている。

というわけでダンスを学び始めて一ヶ月だったが、まだ踊れるレベルには達していない。向上が実感できる部分もあるが、まだ時間がかかりそうだ

さしあたってはダンスの経過観察のための動画撮影用にカメラを買いたいが、今の所他の運動でも使い回すことができるので、GoProを買おうと思っている。ただ、今年の秋頃に出るはずの次の製品を待つつもりだ。

2019-05-20

江添自宅ボドゲ会@5月26日

5月26日に下記の要領で自宅ボドゲ会をします。

江添ボドゲ会@5月26日 - connpass

2019-05-18

Epicストア、根回しなしにセールをしてゲーム取り下げが発生しカオスな状況

ゲーム流通プラットフォームであるEpic Storeは、Epic Mega Saleと称して、とても大規模な一時的な値下げを行った。これはほとんどのゲームタイトルを一律10ドル値下げするというもので、値下げ分はEpicがゲームパブリッシャーに補填する。

しかし、一律10ドル値下げというのが問題に鳴っている。50ドルのゲームが40ドルになるならいいとしても、15ドルのゲームは5ドルに、11ドルのゲームは1ドルになってしまう。値下げ分は補填されるとは言え、これは長期的にはとても問題になる。

何故か。ゲームはリリース直後が最も価格が高く、時間が立つに連れて昔のゲームとなるので安くなっていく。これは当然の話で、リリースされたばかりのゲームは最新のスペックで動く最新の技術を使った旬なゲームなので、当然値段を高くして開発費用を回収して利益を出す。しかし、10年前のゲームは10年前のスペック向けの10年前の技術を使った、今となっては見劣りするゲームだ。したがってその価値は低く、値段を安くしないと売れない。

またゲームは、一時的な値下げをして短期的な売上を上げる戦略が行われている。期間限定で値下がりをしているなら、値段が下がっているうちに買おうという心理が働くためだ。

しかし、そのような慣習と戦略が続いた結果、購入者の方でもゲームを購入する戦略ができている。ゲームは待てば必ず値段が下がる。ということは数年前の安くなったゲームを、さらに一時的な期間限定の値下げを狙って変えば、とても安く購入できる。そして、購入するならば市場最安値と同等以下の値段で買いたい。

あまりに需要があるためか、世の中には様々なゲームの値下げをトラッキングしているWebサイトまで存在する。

Deals - IsThereAnyDeal

そのような状況で、Epicの値下げは問題になる。よほど興味のあるゲーム以外は、底値でしか買おうとしない雰囲気が燻蒸されている業界で、一時的にせよ数ドル程度に値下げされたという歴史を持ってしまうと、今後そのゲームは数ドルでしか売れなくなってしまう。その歴史が着くことを嫌ったゲームパブリッシャーが、Epic Storeから次々にゲームを一時的に販売取り下げに走っている。中にはEpic独占販売のゲームや、Epic独占かつプリオーダー状態のゲームですら取り下げられている。これらのゲームはセールが始まってから取り下げられたことを考えると、Epicは事前の根回しなしに急に今回のEpic Mega Saleを始めたことが伺える。

そんな中興味深いのがUbisoftだ。Ubisofthは都合がいいことに、Epic Mega Saleの始まる1週間前から、「Uplayの不具合」という理由で、Epic Storeから全ゲームを一時的に販売取り下げしている。ゲームの販売を一時的に中止しなければならないほどの不具合にもかかわらず、またセール期間中というとても重要な時期にもかかわらず、未だにUbisoftは「Uplayの不具合」を都合のいいことに「修正」できていない。これではまるで、Ubisoftは根回しか内通かスパイなど何らかの方法で事前にEpic側の動向を知っていたのではないかと疑ってしまうほどの都合のよさだ。もちろん、Ubisoftの表向きの理由は未だに「不具合」だ。

なぜEpicがこんな暴挙に出たかと言うと、競合相手のValveのSteamのセールが近づいているので、対抗したかったのだろう。それにしても無計画でカオスだ。長らくSteam一強だったゲーム流通プラットフォームシェアは、果たして揺らぐだろうか。しかし、顧客からするとゲームが急に販売取り下げられたりするのは利便性を上げたりしない。

2019-05-16

ダンスを学び始めたが裏拍が取れない

超会議で見たダンスに感銘を受けてより、ダンスを学ぶことを決意した。さっそくその時見たダンスの振り付け動画を見て体を動かそうとするも、全く動かない。そこでダンススクールに通うことにしたのだが、やはり絶望的に何もできない。それでも頑張って2週間通い続けたところ、音楽を聞くと拍を認識できるようになっていた。今まで私にとって音楽とは、拍も音程もなく、よくわからない雑音に混じって歌詞が流れていくるものという認識でしかなかったのだが、規則正しい拍に合わせているということが認識できるようになった。ダンスの動きも拍に合わせる。なので拍を認識できるようになったというのはいいことだ。

と満足していたところ、ダンススクールのレッスンで、裏拍に合わせて手拍子をするという訓練が行われた。しかし、これができなかった。さらには、ヒザで表拍を取りながら手で裏拍を取れという訓練になり、致命的にできなかった。

裏拍がなんであるかについては理解しているつもりだ。拍には速度というか周期があり、例えばアナログ時計の秒針であれば60BPM(Beats Per Minutes)だ。秒針の音が表拍だ。裏拍とは表拍と次の表拍の中間、秒針の場合、表泊が鳴ってから0.5秒後に存在する拍だ。つまり裏拍は、表拍と表拍の中間とか、あるいは倍のBPMにして、表拍ではない拍などと考えればいいはずだ。

理解はともかく、裏拍が手拍子で取れない。気がつくと表拍に合わせてしまっている。さらに、ヒザで表泊を取りながら手で裏拍を取るのは、ヒザに釣られて手も表になってしまう。拍が認識できない問題と、体が動かない問題の両方があるのだろう。

困った。体を鍛えて動くようになればダンスはできると思っていたが、拍が認識できないのではいくら体がうごいてもダンスができない。

ちなみに、いまだに体も動かない。ダンスレッスンでは100を超えるようなBPMでルーチン振り付けを訓練するのだが、そんな速さで体を動かすことができない。また、手と足を同時に動かすことができず、足を動かそうとすると手が動かず、手を動かそうとすると足は止まる。また、両手でアシンメトリーな動きをすることもできない。つま先と足首で16ビートを取りながらヒザで8ビートを取りステップしろという訓練もできなかった。

ところで、裏拍について調べると、どうも日本語と英語の対応がが混乱してくる。表拍がdownbeatで、裏拍がupbeatのようだ。また、on-beatとoff-beatという言い方もするらしい。あるいはback-beatなる言葉もあり、これは裏拍にあたるらしい。また日本語でも強拍/弱拍があり、これは表拍を強く、裏拍を弱くするといい感じのリズムになるので表拍が強拍、裏拍が弱拍の代わりに使われている文脈もあるらしく、一層混乱する。

また、Twitterに「裏拍が取れない」と愚痴を書き込んだところ、面識のないアカウントからも大量に「そもそも裏拍とはなにか」という解説から始まり、「僕の考えた最強の裏拍のとり方」という指南まで多数のリプライが飛んできた。これは一体どういうことだろう。今のTwitterでは、昔と違い、面識のない人間へのリプライはなかなか行われないのだが、珍しく大量の面識のないアカウントからのリプライがやってくる。世の中には裏拍がわからない人間には裏拍を解説しなければならないという強い思いがあるのだろうか。あるいは、裏拍を認識できない人間というのは、呼吸の仕方がわからないと主張する人間と同じように常識外れであるから、自転車小屋議論になったのだろうか。

どうも世間的には裏拍を認識できない人間のほうが少数派のようで、周りの身近な人間に裏拍が取れないと愚痴をこぼしても、皆、裏拍が認識できないという自体が理解できない様子で、共感してくれる人はまれであった。

唯一得られた共感は、「あー、難しいですよね、ドラムで(両手両足で4つの別のリズムを取るときの一本の)足のスネアを裏拍で取らないといけないのが、なかなかできないんですよー」というものだったが、これは明らかに違う。

2019-05-12

ダンススクールに通って2週間がたった

ダンスを始めたくなったが、全く体が動かないのでダンススクールに連日のように通い始めて2週間たった。

劇的な変化として、音楽から拍子を認識できるようになった。いままで、私は音楽の拍子も音程もほとんど認識できず、したがって全ての音楽は無秩序な雑音にしか聞こえなかったのだが、どういうわけか急に拍子が認識できていることに気がついた。そして認識した表紙に合わせて体を揺らすことができるようになった。

その場で見た振り付けを覚える能力が上がった。ダンススクールではインストラクターが振り付けを数回実演し、その後はその振り付けを繰り返すことになるのだが、これが最初、まったく覚えられなかった。2週間たった今、この振り付けを短時間で覚える能力が上がった。まだ十分ではないが、少なくともだいぶ向上した。

レッスンでは必ず柔軟が行われるが、股関節の硬さについてはまだなんの向上もない。現状では、私はあぐらが書けないほど股関節が硬いのだ。周りの受講者と比較しても、ここまで股関節が硬い人間はそういない。

レッスンでは腹筋やプランクのような筋トレも行われるが、これについては日常的にボルダリングをしているためか、問題なくこなすことができる。基礎的な筋力がすでについているというのは恵まれている。私にとってプランク姿勢を3分間維持するのはそれほどのことでもないのだが、どうも平均的には3分間維持できない人のほうが多いようだ。

アイソレーションについては、首の左右が難しい。また個別の動きはできるものの、つなげて円を描くように動かす動作を速くすると、動きが雑になってしまう。

肝心の振り付けはいまだに体がまったく動かない。振り付けを覚える能力が向上したために、なおさら目標の振り付けと自分の実際の体の動きの乖離を強く認識するようになった。ゆっくりと確実に動かしていくならばできるのだが、音楽の拍子に合わせて動かすと、あまりにも動きが早すぎるために、体がついていかない。

日頃から運動しているおかげか、ダンススクールのレッスン単体では筋肉痛にならないのだが、この2週間、ほぼ連日でレッスンを受けたために、徐々に疲労が蓄積している感じがする。軽い筋肉の張りを感じるので、もったいないがここは数日ほど休んで体の回復を待つべきだろう。

2019-05-07

マイクロソフト、無駄な抵抗を辞めてWSLに本物のLinuxカーネルを同梱する

Announcing WSL 2 | Windows Command Line Tools For Developers

「自分らはLinuxカーネルだ。防衛を解除して投降せよ。自分らの技術上の差異は自分らのものとする。自分らの文化は自分らの益とする。抵抗は無意味だ。」

マイクロソフトはWSL 2で本物のLinuxカーネルを同梱して利用すると発表した。

最初のWSLは、マイクロソフトによるLinuxカーネルのシステムコールの互換実装であった。これは様々な互換性とパフォーマンスの問題を抱えていた。互換性は果てしなく低く、パフォーマンスは主にファイルシステム周りがとてつもなく遅かった。

新しい実装であるWSL 2では、本物のLinuxカーネルを使い、完全なシステムコール互換性を実現する。このLinuxカーネルはマイクロソフトによってビルドされている。最初のバージョンはLinux 4.19となる。WSL 2用に変更を加えていて、これは「オープンソース」となる(RMSがまなじりをことごとく割き、怒髪冠を貫く勢いで激怒しそうな誤用でここは自由ソフトウェアというべきである)

本物のLinuxカーネルを使うことにより、WSL 2では圧倒的なLinuxシステムコール互換とパフォーマンスの向上が行われる。

パフォーマンスでいうと、初期テストではtarballの展開が20倍、git clone, npm install, cmakeなどの操作が2-5倍、パフォーマンスが向上する。

互換性という点では、Linux版のDockerが実行できるようになる。また、LinuxカーネルのFUSEを使えるようになる。

FUSEのサポートは興味深い。

2019年の6月末にWindows Insider Programで配布開始されるそうだ。

2019-05-05

CloudflareのDNSからArchive.isが解決できない問題について

Tell HN: Archive.is inaccessible via Cloudflare DNS (1.1.1.1) | Hacker News

あの有名な1.1.1.1であるCloudflareのDNSから、Archive.isが解決できない。なぜかCloudflareはローカルホストを返す。というHacker News上での質問について、Cloudflareの創業者の一人であるMatthew Princeが回答している。

We don’t block archive.is or *any other domain* via 1.1.1.1. Doing so, we believ... | Hacker News

1.1.1.1ではarchive.isも含むすべてのドメインを検閲していない。検閲は我々がサービスを立ち上げたときにユーザーに約束したDNSの正当性とプライバシーとセキュリティを損なう。

archive.isの権威DNSサーバーは我々のクエリーに対し、1.1.1.1に対して間違った結果を返す。私はClouldflare側での修正を担当部署に提案したが、そのような変更も、我々がサービス立ち上げ時にユーザーに約束したDNSの正当性とプライバシーとセキュリティを損なうものであると、正しく、指摘された。

archive.isのオーナーの説明では、間違った結果を返すのは、我々がEDNSサブネット情報を渡さないからであるという。この情報は名前解決を要求するユーザーのIP情報をリークし、それによって、ユーザーのプライバシーが犠牲になる。我々がより一層のDNSトラフィックの暗号化を推し進めるにあたってこれは問題になる。というのも、リソルバーから権威DNSへの通信はたいてい平分だからだ。国家の諜報機関がEDNSサブネット情報を監視して個人を特定している状況が現実に起こっている。この現状が1.1.1.1のプライバシーとセキュリティポリシーの理由にもなっている。

EDNS IPサブセットはDNSベースのロードバランスをするサービスに、地理情報に応じたレスポンスを返すのに使われている。しかし、1.1.1.1はCloudflareの現在180都市に展開している全ネットワークで提供している。Cloudflareは、Cloudlfareがクエリーする場所の地理情報を渡している。これにより、Cloudflareよりも密度の低いネットワークであれば、適切なDNS結果を返すことができるだろう。archive.isのような小規模な運営であれば、EDNS IPサブネットの代わりにCloudflare PoPを使っても、地理ロードバランスが妨げられることはない

Cloudflareよりも密度を持つネットワークやISPであるごく一部(例えば、Netflix, Facebook, Google/YouTube)については、EDNS IPサブネットに変わる、プライバシーとセキュリティーを損なうことなく地理情報に応じた対応ができる機能を協力して策定中である。これらの議論はまだ進行中だ。archive.isがこの枠組みで提案があるのであれば、我々は考慮する。

なるほど。ユーザーの地理に応じてDNSロードバランスで最適なIPアドレスを返す場合、EDNSサブネット情報を使うが、これは、ユーザーの位置情報(EDNSサブネット情報)が、ユーザーの利用するDNSサーバー(この場合Cloudflare)から権威サーバー(archive.is)に渡ってしまう。Cloudflareは大規模に世界各地にDNSサーバーを設置し、ユーザーのEDNSサブネット情報は渡さず、CloudflareのDNSサーバーの位置情報を渡す。これによってユーザーの具体的な位置ではなく、CloudflareのDNSのサーバー単位の位置情報になるので、ユーザーのプライバシーがやや保たれる。

興味深い。

2019-05-02

奇妙な乗り物、SBykeを購入した

SBykeという奇妙な乗り物がある。言葉で説明するより、動画を見たほうが早いだろう。

SBykeに最も近い形状の乗り物はキックスクーターだ。ペダルもハンドクランクもない軽車両で、地面を蹴って人力で進むという点ではキックスクーターに近い。ただし、キックスクーターとはだいぶ異なる乗り心地になる。

SBykeは前輪にBMXの大きなエアタイヤがついている。前輪はボードに固定されていて曲がらない。取っ手はステアリングではなく単なる取っ手だ。ターンは後輪で行う。スケートボードのように、リーンすると後輪が曲がるようにできている。前輪には自転車によくあるブレーキもついている。

SBykeは2012年にリリースされた割と新しい製品だ。ホイール径の大きなエアタイヤのキックスクーターを探していて発見した。そのあまりにも奇抜すぎる仕組みが気になって即座に購入してしまった。

無事に自宅に届いたが、まず組み立てなければならない。組み立ては付属の六角レンチだけでできるのだが、いろいろと不親切だった。まずトップデッキの上からネジを貫通させるのだが、トップデッキには穴が空いていなかった。そして、ネジが一本、どうやっても回りきらず浮いてしまう。浮いてはいるものの、このネジ一本だけでも固定されているので、固定はされているものと考えて残りのネジも締めた。そして、タイヤの空気が入っていないことに気がついた。SBykeはアメリカの会社の製品なので、タイヤチューブのバルブは米式であった。しかたなく英米仏3方式に対応した空気圧ゲージもついている空気入れを注文して、数日を無駄に過ごした。

空気入れは届いたが、あいにくとその日は雨が降っていて乗ることができない。今日、ようやく初めて乗ることができた。

SBykeはとても乗りづらい乗り物であった。そもそもリーンしないと曲がれない上に、リーンしすぎると曲がりすぎてしまう。しかし、浅くリーンした状態を維持することは難しい。果たしてこの乗り物に問題なく乗れる日は来るのだろうか。

2019-05-01

ダンスを学びたかったのでダンススクールに行ってみたが教育ではなかった

超会議2019でとても切れのあるダンスに感銘を受けたので、にわかにダンスを学びたくなった。ちょうどスノーボードもシーズンが終わり、新しい有酸素運動を欲していたところだ。ダンスは丁度いい運動になるのではないか。しかし、ダンスはどうやって学べばいいのだろう。私はボルダリングとスノーボードとキックスクーターをしている。したがって私は日頃からある程度運動をしている状態にある。しかし、体の動かし方がわからない。スノーボードではインストラクターがとても役に立ったので、ダンスでもインストラクターから学べばいいのではないかと思い立った。幸い、ダンススクールは都内にたくさんある。ゴールデンウィークを幸いに、インターネット上で検索して自宅からも職場からも近い、通いやすいダンススクールに行ってみた。しかし、期待していた教育ではなかった。

天才は教育で作ることができる。天才を科学的に研究している研究者の著書、Peak: Secrets from the New Science of Expertiseによれば、様々な人間の才能は教育で作ることができる。例えばランダムな数字桁の暗記、絶対音感、バイオリンの演奏といった技能は、教育することができる。これらは先人がすでに効率的で効果的な教育方法を確立させているからだ。

私は、ダンススクールに教育を期待していた。ダンスを構成する動きを1挙動ずつ区切り、そのときの荷重や跋重、重心の位置、遠心力などを力学的に解説し、適切な体の動かし方を学ぶ教育を期待していた。スノーボードではそのような教育が確立しているらしく、プロのインストラクターにかかれば未経験者が2時間でトゥエッジのサイドスリップができるようになり、4時間でターンができるようになり、6時間で連続ターンができるようになる。

私が行ったダンススクールにおける「レッスン」は以下の通りであった。

鏡張りのフロアで爆音で音楽を流し、音楽に合わせてインストラクターが演技をするので、各自その動きをマネる。まず体操をし、続いて筋トレをし、短い振り付けを反復練習し、時間が来たので終わるという形であった。インストラクターの動きはすばらしかったが、インストラクターはほとんど助言をしなかった。ただ手本となる演技をするだけだ。

これは教育だろうか。私には、学ぶための環境と見本を用意しただけにしか見えない。教育はしていない。環境はよい。仕切りのない広い部屋で、床は硬いながらもやや衝撃を吸収するようにできており、壁は鏡張りだ。建物は防音されているので、激しく踊っても近所迷惑にはならない。見本もよい。インストラクターの動きは私をしてダンスを学びたいと感銘を受けたあの名前も知らぬ踊り手同様によい。しかし、ほとんど指導はなく見て模倣して覚えるしかない。

設備も気になる。なぜあんなに耳が痛くなるほど爆音で音楽を流さなければならないのか。部屋は防音されていて中から外に音が漏れることはないし、外の音は聞こえない。しかもレッスン中の受講者は私語せず黙々とインストラクターの動きを真似るだけ。音量が過剰だとしか思えない。あまりに耳が痛く不快なので音に合わせることができない。爆音のなる中でインストラクターはごく稀に指導らしきことをつぶやいているのだが、爆音にかき消されて全然聞こえない。なぜマイクが用意されていないのか。そもそも爆音である必要はない。そして、インストラクターは音楽を操作する必要があるごとに装置の前まで移動する。なぜ遠隔操作できるようになっていないのか。

立地はよいし、月謝はそれほど高くなかったので、とりあえず一ヶ月行き放題の契約をしてみたが、これでダンスが学べる人間は、別にスクールに頼らなくても学べる気がする。

ところで、私がダンスを学ぶ上で障害がひとつある。私は騒音が苦手なのだ。そして、私にとって大抵の音は騒音として認識される。

理由はよくわからない。医師ではない他人からは聴覚過敏の可能性を指摘されているのだが、正式に診断を受けたことがないのでわからない。それに、自分でも不快だと感じる音が一貫していない。例えば、今この文章を書いている間に外から車の音と雨の音がしているが、これはさほど不快ではない。また、私はこの文章を書くのにCherryMXの青軸を使っていて打鍵のたびにカチカチというクリック音がなるのだが、これも不快ではない。むしろしっかりと打鍵したことが認識できるので快適ですらある。私の妻は家で常に謳っていたり踊っていたりしているのだが、これもさほど不快ではない。あるいはスピーカーから出る音が苦手なのだろうかと考えたこともある。妻がスピーカーから音楽を鳴らしているのは極めて不快だ。しかし私がビデオゲームをしている時は操作に応じて効果音がフィードバックとして流れてほしい。ゲームの効果音は不快ではないし、ゲームが面白い場合、その音楽もたいてい不快ではない。駅のホームのスピーカーで流れているアナウンスもさほど不快ではない。

そもそも音楽を聞くことは好きではない。たまに無性に音楽を聞くこともあるのだが、純粋に音楽を聞くのではなく、その音楽に付随する文脈が面白いから聞いているのだ。例えば気に入ったアニメやゲームの音楽であるとかだ。

興味深いので一度医師の意見を聞きに行ってみたいとはつねづね思っているものの、健康診断の聴力テストで問題になったことはないし、人の声が聞き取りづらいと感じたこともないし、集中して作業する時はそもそも静かな環境を好むのは他人と変わらず、したがって日常生活でさほど不便を感じていないので、なかなか病院に行って医師の意見を求めるほど切実な問題にはなっていない。ストレスや疲労によって音の不快度が変わったりはしないので精神的なものでもないだろうし、特に何か治療できるものだとも思われない。しかし、今回は困った。ただ、単純に音量が大きすぎるだけではあると思うのだが。

ただ、今回レッスンを受けた限りでは、インストラクターはほとんど指導らしい指導を発声しないので、workaroundとして爆音の音楽をリズムが取れる程度の音量にまで軽減するために、耳栓をしても変わりはない気がする。

ところで、肝心の手本であるが、体操は体が硬いために一部の動きができず、筋トレは変則的な体側を起こす片手腕立て伏せ書く10回、各種腹筋合計2桁回、プランク数十秒程度のものであったので問題なくこなすことができ、振り付けは圧倒的なリズム感のなさと耳をつんざくほどの不快な爆音音楽のせいでタイミングがあわず、まるでできなかった。そもそも手本を見ながら数回ゆっくり流しただけであとは反復練習しろというのはダンス未経験者にはつらすぎる。

以上のようなことを知り合いの踊り手に相談したところ、大抵のダンススクールとはそういうところだ。そもそも体ができてなくて動かない人間にいくら力学的なことを教えても意味がない。ダンスなんて自分で学べ。本当に基礎からやりたいならひたすら柔軟とか、1時間クソつまらないな動きを繰り返すことになる。それがやりたいならバレエの基礎をやるべきだ。ただしすでに言ったようにクソつまらないので根気がなければ続かない。ダンスをなめるな。とボロクソに言われた。

結局、Peak: Secrets from the New Science of Expertiseに書いてあったように、先人が効率的な教育方法を確立させている歴史のあるものを学んだほうがよいということか。

2019-04-18

CoinHive裁判の控訴審費用の寄付をした

Coinhive事件裁判費用の寄付のお願い - 一般社団法人日本ハッカー協会

私はCoinHiveは実行しても安全なプログラムであり不正指令電磁的記録にあたるとは考えていないので少額ながら控訴費用の寄付をした。

プログラムは魔法ではない。

2019-04-10

IIJに対してマルウェア対策のDNSブロッキングについての質問の回答

私の使っているISPであるIIJmioひかりはマルウェア対策のDNS検閲を開始すると宣言した。

IIJのセキュリティに関する取り組み | インターネットイニシアティブ(IIJ)

IIJの説明を読むと、IIJの提供するDNSサーバーは、マルウェアが指令や通信をするのに使うことが知られているC&Cサーバーのドメイン名の解決を行わないのだという。彼らはこれをDNSフィルタリングと読んでいるが、私はDNS検閲と呼ぶことにする。あるいは少し前に話題になったDNSブロッキングと呼ぶのもよい。

IIJによると、DNS検閲はデフォルトで有効であり、オプトアウトするためには、IIJが用意したDNS検閲を行わないDNSサーバーを使う必要があるという。

しかし、このDNS検閲の実装方法や、マルウェアの定義が疑問なので、IIJに対して質問することにした。

質問「DNSフィルタリングを行うDNSサーバーは、ユーザーを契約単位あるいは何らかのフィンガープリントで識別し、特定のユーザーに対して個別にDNS問い合わせの結果を変える機能を持っていますか?」

この質問はとても重要だ。もしDNSサーバーがこのような機能を持つ場合、きわめて深刻な悪用ができるからだ。

以下のような回答が得られた。

・弊社のDNSサーバでは特定のお客様のみに異なる結果を返す機能は
 設けておりません。
・今回の弊社DNSフィルタリングの仕組みは、弊社側でDNSフィルタリングを
 適用するDNSサーバと適用しないDNSサーバの両方のDNSサーバを用意し、
 お客様の判断で選択(オプトアウト)を可能としています。
・また、フィルタリングが適用されたDNSサーバにおいては、その通信先が
 レピュテーションデータに該当した場合、IIJが別途用意するサーバの
 IPアドレスに宛先を置き換えることで、本来の宛先へアクセスしないように
 しています。
・尚、オプトアウトの方法については、下記弊社ホームページにてお伝えして
 います。https://www.iij.ad.jp/sec-statement/

そのような機能はないという。ただ、興味深いことに、マルウェアが利用するドメインに対しては、IIJが管理するIPアドレスを返すという。情報収集のためのハニーポットかもしれない。しかしこれはよくよく気をつけないと、ミイラ取りがミイラになりかねない。IIJの用意するハニーポットがパーサーを使って通信を解析している場合、マルウェアのふりをして通信し、そのマルウェアからは想定しないデータを送りつけ、パーサーの実装の不備を着くことが可能になるかも知れない。

次の質問は、マルウェアの定義についてだ。

Winnyのような通信はマルウェアではない。利用者の意図通りの動作をしているからだ。たとえその通信の内容が、著作権侵害、薬物取引、マネーロンダリング、児童ポルノ、違法素数などの違法な内容であったとしても、マルウェアのみの対策と宣伝する以上、マルウェア対策以外のことは行うべきではない。

CoinhiveのJavaScriptコードを提供するドメインと、計算結果を受け取るドメインはどうか。兵庫県警はマルウェアだと主張するかも知れないが、私の意見ではマルウェアではないし、C&Cサーバーでもない。

Tor relay/exitノードや、似たようなプロクシー機能を提供するものについてはどうか。これは私の意見ではマルウェアではないし、C&Cサーバーでもない。

pastebin.comのようなユーザーからの任意のテキストをホストするようなサービスは、マルウェアのC&Cサーバーとして使われうる。しかし、pastebin.comは今の所、マルウェアのC&Cサーバーとして利用されているという情を知った時点で迅速な対応を行っている。マルウェアのC&Cサーバーとして使われうる機能を提供しているのと、意図をもってC&Cサーバーとなっているのは別だ。私はpastebin.comのようなサービスは検閲されるべきではないと考えている。これはどうか。

単なるフィッシングサイトでマルウェアのC&Cサーバーとしては使われていないものはどうだろうか。マルウェア対策のDNS検閲という以上、単なるフィッシングサイトは検閲しないはずだ。

そのような考えから以下の質問を送ったところ、回答が得られた。

・IIJmioひかりがDNSフィルタリングを実施する対象に該当すると判断
    するものをお答えください。
 ・Coinhive風のサービスにおいて!JavaScriptプログラムをホストし
    または計算結果を受け取るサーバー
  ・Winny等のファイル共有プロトコルで通信するサーバー
  ・Tor relay/exitノードまたは似たようなプロクシー機能を提供するサーバー
 ・pastebin.com風のサービスを提供するサーバーで、マルウェアが
  指令の受信や情報の伝達に用いるものであって、
  サービスの管理者はマルウェアによって悪用された場合の対応を迅速
    に行う体制を整えているもの
 ・単なるフィッシングサイトであって、マルウェアとは関わりがないもの
----------------------------------------------------------------------
(ご回答2)
・今回ご指摘いただきました対象に関しては、現在、弊社のフィルタリング
 対象に該当するものはございません。しかしながら、複数の条件が重なる
 などして、悪意あるマルウェアの通信先と判断された場合は、フィルタリン
 グ対象となる場合がございます。
 そのような場合には再度分析を行い、対象の見直しを実施いたしますので、
 正常な通信先がフィルタリングによって遮断されている可能性がある場合は、
 弊社窓口 support@iijmio.jp までお問い合わせください。

この回答をみるかぎり、IIJと私はマルウェアについて互換性のある定義を持ち合わせているようだ。

この結果を考えて、私はIIJのDNS検閲をオプトアウトするかどうかを考えなければならない。オプトアウトは簡単だ。IIJが別途用意した自称DNSフィルタリングを行わないと主張しているDNSサーバーを使うようにすればよい。これはルーターにDNSサーバーのIPアドレスを手動で設定するだけでいい。これができないような人間はDNS検閲されていたほうがインターネット全体のためにも安全だ。

ただし問題は、オプトアウトをする人間は圧倒的少数であろうということだ。インターネットにおけるプライバシーを考えるにあたって、少数派はその分余計なフィンガープリントを抱えることになり、目立つのだ。ましてや、国家の諜報機関は、意図的にDNS検閲のオプトアウトをした人間を怪しいとみなし、重点的に秘密裏に通信内容を傍受して捜査するかも知れない。私が国家の諜報機関(緊急避難と称して捜査令状も取らずに秘密裏に違法に捜査する機関を想定している)ならばそうする。

今のところ私はマルウェアを研究しているわけではないので、IIJが回答どおりの運用をするのであれば、今のところはオプトアウトをしなくてもいいかも知れない。悩ましい問題だ。あらゆる検閲は悪であるので当然オプトアウトすべきだが、オプトアウトすると目立って通信を傍受される可能性が高まるので、気軽にオプトアウトすることもできない。

2019-04-08

引越し祝い江添ボドゲ会@4月14日

引越しが完了したので4月14日に自宅ボドゲ会をします。

江添引越し祝ボドゲ会@4月14日 - connpass

同じ住所を複数の建物が共有しているので、正確な住所は経度緯度を指定した以下のGoogle Mapsで確認してください。

https://goo.gl/maps/cRYmRtqo7gR2

前の家と70メートルしか離れていません。前の住所に来たことがある人は、コンビニを通り過ぎ、弁当屋の前の角で曲がり、2軒め。道路に面しているドアは裏口で、玄関は左脇を入って裏。

気が付かず技術書展とかぶってしまった。