標高+1m

Don't be rational.

人間が計算資源になる日

US291464337 Fig. 1
US291464337 Fig. 1

マイクロソフトの特許部門がPCT出願した特許PCT/US2019/038084に、WIPOのWO/2020/060606と言う公開番号が付いた。*1
暗号通貨のマイニングに、ユーザーの生体活動データ(e.g. 体温、脳波)を利用するシステムに付いての特許だ。
この公開番号がWorld Order(新世界秩序)2020(年)666(獣の数字)だと言う話が回ってきた。
獣の数字666と言うのはヨハネの黙示録13章8節に記されたもので*2、16~18節を抜粋すると、

16 また、小さき者にも、大いなる者にも、富める者にも、貧しき者にも、自由人にも、奴隷にも、すべての人々に、その右の手あるいは額に刻印を押させ、
17 この刻印のない者はみな、物を買うことも売ることもできないようにした。この刻印は、その獣の名、または、その名の数字のことである。
18 ここに、知恵が必要である。思慮のある者は、獣の数字を解くがよい。その数字とは、人間をさすものである。そして、その数字は六百六十六である。

特許の内容と、番号と、聖書の記述の間に連想が成立すること、加えて、弱毒化されたコロナウイルスに関する特許*3を申請した研究所に出資していたなどの一連の疑惑で取り沙汰されるビル・ゲイツが起こしたマイクロソフトによる出願と言うことで、体調を崩し気味でやられやすくなっている僕はかなりダメージを受けた。

陰謀論と言って笑うのも簡単だけれど、陰謀論と言う言葉を発明したのはCIAだとか、その情報も陰謀論だとか、色々あるし、911とか相当怪しいことが起きる世界であることも事実だし、陰謀と言う事象の存在は否定できない(e.g. ポイボス・カルテル*4 )。

しかし近年のWebは、出所不明のテキストや悪意を持った偽情報が命を持って、検証もされずにリミックスされ拡散されて、SNSの中核に巣食う頭の悪い"AI"によって配信されてくるディストピアと化してしまった。努力して一次ソースに当たって、生体脳で情報を処理することに慣れる必要があると思う。

公開番号について、
WIPO(世界知的所有権機関)は国連の専門機関*5で、PCT条約に加盟した国でPCT出願(いわゆる国際特許出願)をすると、WIPOで公開され、出願から二年半の間、加盟国それぞれで出願したのと同じ効果を得ることができる。 PCT出願のWIPOの公開番号の頭にはWOが付く。2020は公開された年。060606はシリアル番号。

このシリアル番号を意図的に取得するために動きがあったかは知る由もないけれど、考えづらいと感じる。しかし、眼に映る全てのものはメッセージだし、道(tao)はいつも不思議な現れ方をするので、この発明についてちゃんと扱ってみよう。

WIPOの方は図と説明の対応が取れていないので、元になったUS20200097951*6を見ていく。筆者は一言一句読み込んだわけではなく、気になる箇所の拾い読みをしただけであることに注意。

概要

Human body activity associated with a task provided to a user may be used in a mining process of a cryptocurrency system.
A server may provide a task to a device of a user which is communicatively coupled to the server.
A sensor communicatively coupled to or comprised in the device of the user may sense body activity of the user.
Body activity data may be generated based on the sensed body activity of the user.
The cryptocurrency system communicatively coupled to the device of the user may verify if the body activity data satisfies one or more conditions set by the cryptocurrency system, and award cryptocurrency to the user whose body activity data is verified.

最近は機械翻訳の精度が向上したので、英語が苦手な人は機械翻訳で読んでください。

気になるのは、ユーザのデバイスに送られて、ユーザが行うタスクとはどんなものか、そして、生体活動データがどのように暗号通貨のマイニングに使われるのか。

説明の抜粋

US291464337 Fig.3
US291464337 Fig. 3

これは図だとFIG 3. 説明もFIG3についての部分から下がわかりやすい。

The tasks include, for example, but not limited to, watching or listening information (e.g. advertisement) for a certain time, using services (e.g. search engine, chat bot, e-mail, social media/networking service and any internet or web service), uploading or sending information/data to a website, a server or a network (e.g. content sharing website, and cloud network or server), or any other information or service which may produce effects on users. In the blockchain, the task(s) may be included as a transaction in the public ledger 230.

(簡易訳) タスクは、一定時間広告を見たり聞いたり、サービス(search engine, chat bot, e-mail, social media/networking service and any internet or web service)を使用したり、情報をアップロードしたり、その他ユーザーに効果を与える情報やサービスを含み、これに限定しない。

At operation 320, when or after user 145 performs the task(s) provided by task server 110, sensor 140 may sense the body activity of user 145 that is a body response related to the task provided by task server 110, and then transmit the sensed body activity of user 145 to user device 130.

(簡易訳) ユーザーがタスクを遂行中、またはその後に、センサーがユーザーの生体活動を感知し、デバイスに送る。

The body activity may include, for example, but not limited to, radiation emitted from human body, brain activities, body fluid flow (e.g. blood flow), organ activity or movement, body movement, and any other activities that can be sensed and represented by images, waves, signals, texts, numbers, degrees, or any other form of information or data. Examples of body radiation emitted from human body may include radiant heat of the body, pulse rate, or brain wave. Brain waves may comprise, for example, but not limited to, (i) gamma waves, involved in learning or memory tasks, (ii) beta waves, involved in logical thinking and/or conscious thought, (iii) alpha waves, which may be related to subconscious thoughts, (iv) theta waves, which may be related to thoughts involving deep and raw emotions, (v) delta waves, which may be involved in sleep or deep relaxation, or (vi) electroencephalogram (EEG), which may be measurement used to evaluate the electrical activity in the brain, such as deep concentration. Examples of the body movement may include eye movement, facial movement or any other muscular movements. Furthermore, brain activity can be sensed using the fMRI. The fMRI measures brain activity by detecting changes associated with blood flow. This technique relies on the fact that cerebral blood flow and neuronal activation are coupled. When an area of the brain is in use, blood flow to that region also increases.

(簡易訳) 生体活動は人体からの放射、脳活動、体液流(例:血流)、臓器活動、体の動き、その他を含み、これに限定しない。以下略

At operation 330, user device 130 generates body activity data based on the body activity sensed by sensor 140. Operation 330 may be part of a mining process which is a process for solving a computationally difficult problem.
...
At operation 410, the body activity sensed by sensor 140 may be codified in symbolic forms, such as letter(s), numeral(s), symbol(s), and a string comprising sequence of characters.

(簡易訳) デバイスはセンサーが感知した生体活動を基に生体活動データを生成する。これは計算が難しいマイニングプロセスの一部であり得る。生体活動は記号表現に変換される。

At operation 420, the codified body activity may be converted into an encrypted output by using an encryption algorithm, such as a hash algorithm or function.
...
However, operation 420 is optional. In certain embodiments, user device 130, without encrypting or hashing the codified body activity, may transmit the codified body activity generated at operation 410 to cryptocurrency system 150.

(簡易訳) 生体活動の記号表現はハッシュ関数などで暗号化するかもしれないし、平文のまま暗号通貨システムに送信するかもしれない。

Referring back to FIG. 3, at operation 340, cryptocurrency system 150 verifies if the body activity data of user 145 generated by user device 130 satisfies one or more conditions set by an algorithm of cryptocurrency system 150. The conditions may be set by simulating human body activity across all of body activities that can constitute hashes. Machine learning algorithms may be used to simulate body activities and set the conditions for valid body activities, for example, but not limited to, using generative adversarial networks.

(簡易訳) 生体活動データが暗号通貨システムのアルゴリズムにより、条件を満たすか照会される。条件はハッシュを生成し得る全生体活動を機械学習アルゴリズム(例:GAN)などを利用してシミュレートすることで決定し得る。

他の照会方法も記述されているが省略。

At operation 350, when the body activity data transmitted from user device 130 satisfies one or more conditions set by cryptocurrency system 150, cryptocurrency system 150 awards cryptocurrency to user 145.
...
Additionally, cryptocurrency system 150 may award cryptocurrency to an owner or operator of task server 110 as a reward for providing services, such as, search engines, chatbots, applications or websites, offering users access for free to paid contents (e.g. video and audio streaming or electric books), or sharing information or data with users.

(簡易訳) 生体活動データが暗号通貨システムが設定する条件を満たした時、暗号通貨システムはユーザーに暗号通貨を付与する。

暗号通貨システムは、各種サービスの提供や、有料コンテンツをユーザに無料で提供する対価として、タスクサーバーのオーナーにも暗号通貨を付与し得る。

ここまで読めば十分だろう。マイニングの詳細についてもう少し触れられているが、ちゃんとアルゴリズムがわかるようにはなっていない。

筆者の解釈と見解

要するに、暗号通貨をマイニングするための計算資源として、生きた人間の脳と生体活動を使用するシステム。

計算の課程に自然現象を利用するナチュラルコンピューティングと言う研究分野があって、アリのコロニーを使ったり粘菌を使ったり色々するわけだが、人間が一番扱いやすくて能力が高いのは人間自身の脳なので、この発想が出るのは当然。Human-based Computationと言う言葉もある*7

計算資源として人間を使うと言うのは全然新しいことではなくて、例えばAmazonのサジェストだって、利益なりクリック率なりを評価関数として、何を表示するか学習するのに人間の行動を使っているわけだし、Facebookのフィルタもそうだし、Googleの広告も、他にも多くのWeb企業がやっているこういうことは全部、見方を変えれば、企業の利益のために人間を計算資源として使っていると言える。

この発明はその流れを推し進めて、もう直接お金を作るために人間の生体活動を使って計算をします。お小遣いあげるからねという、どこまでも低俗な発明であって、マイクロソフトの体質はハロウィーン文書*8の頃から何も変わっていないんだなと感じるものだった。

広告の視聴と、それによって生じる生体活動を使うと言うのも不気味な話だ。

こういう発明や類似の発明は、えてして倫理的な議論の場もないまま、曖昧な仕組みの説明でマーケティングされて社会実装されるので、注意しないといけない。要は、ある日いつの間にかスマホアプリの広告がこういうものになっちゃってても気づかない。

例えば動画を見るだけでお金が稼げますって言うのは夢の技術と言う側面もあるかもしれないけれど、それによって何を売り渡すことになるのか。バビロンでは魂すら取引されるらしい。「地獄への道は善意で舗装されている」とも言う。

技術の取捨選択は今もこれからも本当に大事だ。

まとめ

特許と言う公開された情報なので、陰謀とは言わないと思うけど、これに獣の数字が付いて、反応があったおかげで調べる気になったので、普段陰謀論と言われがちな情報ソースも、一蹴して済ますわけには行かないのかもしれない。

ただ鵜呑みにするのは精神的にもっと危険なので、一次情報に当たって、調べる癖をつけようと思った。

『なぜ全ては崩壊するのか』翻訳 『Why everything will collapse』Japanese translation

去年11月に観た動画『Why everything will collapse 』
その頃は絶望しか感じられなかったけど、COVID-19による緊急事態宣言下の今なら、響く人がいるかもしれないと思って、昨晩翻訳した。
YouTubeのCCで今レビューの申請中。
鼻水垂らしながら勢いで翻訳を仕上げてから、機械翻訳を見てみたらほぼ完璧に訳されていてなんだよと思ってしまった。
でもせっかくなので、訳注をつけて全文をブログにあげる事にした。
文章になっている方が良いことがあるかもしれない。

動画はこれ。

youtu.be

以下翻訳全文。

なぜ全てが崩壊するのか - Julien Woz

これは私達を何が待ち受けるのか知りたい人に向けたものだ。
私は私達が困難のただ中にあると述べるだけではなく、
代わりに、気候変動について私が知っていることの要約と、
それが私達全員にどう影響するかを説明しよう。
説明の多くはそれが絶対に不可避であることに割かれることになる。
私達が生物多様性の崩壊のただ中にあることは既に知っているだろう。
私達は六回目の大絶滅期を経験している。
それも、恐竜達が消え去った時よりも早い速度で。
50年間で陸上生物の50%を消し去ったら、 何かしらの反響がある。

海について

90%の鯨類とサメ類を失うことは、
植物プランクトンにこれまでにない影響を与える。
クジラは植物プランクトンとオキアミの繁栄の一翼を担っている。
サメは海全体の食物連鎖を統制する頂点捕食者だ。
彼らがいなければ、食物連鎖は基礎から崩れる。
基礎は、植物プランクトンだ。

植物プランクトン二酸化炭素を吸収し、酸素を生産する微生物だ。
地球上の約50%の酸素は海が起源と見積もられている。
もう一つの問題は、植物プランクトンの減少は二酸化炭素の吸収量の減少を意味することだ。
大気汚染が深刻化する世界で、海が空気を浄化できない。

クジラとサメの損失は、植物プランクトンに対する脅威の全てではない。
プラスチックゴミ、酸性化、デッドゾーン原油流出、
音響汚染は哺乳類の視力を奪い、生殖を阻む。
そして、残りの海洋生命については、
近年の研究により超楽観的であると示唆される試算によると、
私達の海は2048年までに空っぽになる。
もしこうなれば、もしくはこれに近づけば、
私達はおしまいだ。

サンゴ礁について語って締めくくろう。
サンゴ礁は南から北へ移動していて、熱帯域では大規模な白化が起こっている。
地域的な生物多様性にとっての大災厄だ。
熱帯サンゴは温帯気候への適応力が低く、
温帯の生物多様性のエンジンに巨大なレンチを投げ込むのが関の山だ。
暖流と寒流による海水の交換プロセスも、
氷河の溶解がもたらす海流への影響によって激しい速度で変わっている。
幾人かの科学者達は氷河の溶解の直接的な影響として、
メキシコ湾流が止まると考えており、
温帯全域への影響が予想されている。
熱の減少は、蒸発、 雲、そして降雨の減少をもたらす。

陸上生物

海だけではなく、陸上の生物多様性もある。
それは今、苦しみ悶えている。
農業についてだけ見ても、
過去60年間で、95%近くの土壌生命が失われた。
その要因は、生産性ベースのアプローチによって正当化された、
農薬、殺菌剤、除草剤の使用にある。
これらは根本的に土壌の生命を踏みにじるものだ。
結果は、病気の野菜。
農薬に耐えるようデザインされているが、
遺伝的多様性を欠き、適応力に劣る。

陸上哺乳類は、私達の彼らの生息域への侵入によって
生存に苦戦しているか、
人間の近くで暮らすことを余儀なくされている。
狼がよい例だ。
私達は狼はそれぞれ広大なテリトリーを必要とすることを知っているが、
彼らに残す空間はとても少ない。
そして彼らが羊を襲うのはなぜか不思議がる。
私達はその対策に、狼たちに土地を認めるか?
冗談じゃない
殺すだけだ。
フランスだけで、年間40頭の狼が殺されている。
生息数は300だ。
素晴らしい。

エネルギー

人間の貪欲に膨れ上がるエネルギーの渇望に話を移そう。
私達の社会は末期的なエネルギー依存に陥っている。
そして政治的、経済的な判断は、
私達のエネルギー資源はなぜか無限だという
誤解に基づいてなされる。
さあ、エネルギーについてだ。

私達は主に、石油、石炭、ガスを用いてエネルギーを生産している。
この3つが世界のエネルギー生産の92%を構成する。
残りの8%は
+ 原子力発電が4%
+ ダムが3%
+ 1%は私達が再生可能エネルギーと呼んでいるものだ。

私達は最後の3つに文字通り"畑を賭けて"いるが、
地球全体で見ると、バケツの中の一滴に過ぎない。
そして再生可能エネルギーも聖杯とは言い切れない。
エネルギーの産生自体は排気を出さないが、
貯蓄の際に仇を討ってくる。
バッテリー(蓄電池 ).
あなたが太陽光発電した電灯を真昼間に点けて、
日が暮れたら消そうというのでない限り、
バッテリーに蓄電する必要がある。
(訳注) バッテリーの問題の一部は後述のレアアース、金属採掘について。

炭素排出量がもっとも少ないエネルギーは、
原子力発電と水力発電ダムだが、
これらは他に大きな問題を抱えている。
原発放射性廃棄物メルトダウンのリスク、
ダムは環境破壊と生態系破壊だ。
簡潔に言えば、
クリーンな大量エネルギー生産は存在しない。

石油生産について、
油井への投資は、 落ち込みから素早く回復している。
石油生産は、抽出した石油の量と、抽出に使用した石油の量の比率によって評価される。
1920年代には、比率は 100:1 だった。
今日では 10:1 に近い。
ひどい場合には 4:1 のこともある。
簡単に言って、
私達は、より多くの石油を使って、
より少ない石油を掘っているんだ 。
石油がこれほど非効率だったことはない。
実際、あなたが散々耳にした"ピークオイル"は2006年だった。
それ以降、産出量がこれを上回ったことはない。
専門家は、この傾向が2020年まで続き、
その後は着実に衰退すると予測している。

ところで、"ピークガス"もある。
それは2010年だった。
"ピークコール(石炭)"の予測は2020年。
それまでに、再生可能エネルギーに切り替えるだけの
リソースがあると私には思えない。

さらに、金属の生産も永続できるわけではない。
日を経るごとに、金属の需要は高まっている。
電子機器が大きな比率を占めるが、
全ての産業が関わっている。
問題は、ほとんどの金属はリサイクル不能なことだ。
スマートフォンに使われるレアメタルのうち、
リサイクルされるのは1%に満たない。
例として、
チタンの95%は金属の形ではなく
白色塗料として使われている。
だから、全てのチタン白塗料に含まれているってことだ。
チタンをリサイクルするために壁をヤスるようになると思う?
いや、それは失われる。
同じことが車のドアに使われる3%のタングステンにも当てはまる。
これがリサイクルされて純粋なタングステンに戻ることはない。

これは金属だけの話ではない。
金属は理論的に何度でもリサイクルできる。
プラスチックは最大7回しかリサイクルできない。
その後は性質が失われるんだ 。
はっきり言って、循環型経済は夢物語だ。
レアメタルの問題 。
鉱山にはミネラルが少ししか残っていない。
だから同じ量を得るためにより深く掘る必要がある。
ここでも、投資に対して減少する成果しか得られていない。
ここで全金属の"ピーク"を列挙はしないが、
間違いなく言えるのは
金属不足はやってくる。

状況から考えると、
他のエネルギー資源をオフセットするために、
金属やレアアース を使ってソーラーパネルや発電機を作るのは見当違いだ。
だけど、経済学者は違うことを言うだろうさ。
夢に追いつく日が来るかもしれないってね。

次は、畜産について。
動物の育種と給餌は、大量の食料と水を消費する。
この資源を、私達自身が食べるために使ったり、
飼育場への依存度合を下げるために使うことだってできるのに。
家畜はまた、メタンを排出する。
メタンには二酸化炭素の30倍の温室効果があると考えられている。
家畜は天文学的な量の水を消費し、
アマゾンの森林破壊に貢献する。
魚の副産物が豚の餌に使われるので、
魚類の乱獲を引き起こす。
屠殺場の倫理については、述べるまでもないだろう。

エネルギー生産、金属採掘、輸送、畜産、
これらはすべて汚染し、
地球温暖化に寄与する。
たとえ全ての国がCOP21(パリ協定)に参加して、
約束を守ったとしても、
(訳注)2019年にアメリカが脱退
2100年までに地球の温度は3.5℃ 上昇する予測となっている。
3.5℃はそんなに大きく見えないかもしれない。
でも破滅的なんだ。
座っているかい?
この数字が意味するところを教えよう。
南極は溶け去る。
海は拡がり、海面は上昇する。
フロリダはなくなる。
マイアミとニューヨークも消える。
バングラディッシュと太平洋の島々も消え去る。
チベットの氷河は溶けて、
次の夏、ガンジス川を含むアジアの3大大河が干上がる。
人口密集地域では数々の大問題が持ち上がる。
上海は砂漠の入り口に位置する。
地中海盆地で降雨が稀になり
作物の収穫量は減る。
何百万人もが北への移住を余儀なくされるが、
爆発的に増加する人口を養える資源はない。

「大丈夫、2100年はまだ先じゃないか」と言う人へ、
2099年の12月31日までは全て順調に行くと本気で思うのかい?
多くの人によって楽観的だと指摘されている
3.5℃上昇のシナリオが 起こるなら、
マイアミとニューヨークは2050年までになくなるだろう。
他のシナリオのうち、10%の確率で起こると言われているのが、
6℃の気温上昇が起こるとするものだ。
この場合、全人類の絶滅が予期される。
もし10%なら大丈夫と思うなら、
10%の確率で墜落する飛行機に乗ってみたらどうか?
多分考え直すだろう。
2℃の上昇ならどうだろう?
私達はすでに気温を1.25℃上昇させるだけの炭素を放出しているから、
0.75℃の余地しか残されていないわけだ。
手短に言おう。
気温上昇を2℃に抑えるためには、
私達は今すぐに生活水準を1/6まで落とさなければいけない 。
私達はそうしていないし、どこの政府のプランにもない。

非物質的だが、全身的な崩壊に大きく関わる問題に話を移そう。
人類
これについて、私達の経済システムについての議論よりも適した話題はあるだろうか?
2008年の危機で私達は、
少数の銀行によるリスキーな賭けが、
地球規模の経済危機を引き起こすのに十分だったと学んだ。
要因は、社会の絡み合った性質にある。
ウォール・ストリートでの無謀な計算ミスが
スペインで失業者を産む。
経済学者は皆、次の経済危機が5年以内に来ることに合意している。
私のこの分野についての限られた知識は私を不安にさせる。
すでに経済格差に苦しむ人々が、
これまでになく危機にさらされている。
経済格差はより明白で、更に拡大する予測しかない。
これでは反乱のリスクを高める。
これまでに説明した全てを考慮すると、
大規模な社会不安は、事態を超複雑化するだろう。
私はこれから目にするであろう全身的なリスクの概観を説明してきた。
今、なぜか説明しよう。
状況的に、グローバルな崩壊は絶対に避けられないだろう。

理由は以下。
人間は、こうした危機を本物と捉えずに、
仮説的で、自分から遠く離れたものと考える。
そして、危機に備えることや、
大災害を避けるために必要な変更を拒否する。
そして、私達の政府が取る行動は、
本当に削減を目指したものではなく、
私達をゆっくり、しかし着実に殺しつつあるシステムを 保守し、成長させるものだ。
大きな変化はボトムアップでは起きない。
地球規模での協調が不足しているからだ。

例を挙げよう
誰かが環境的なジェスチャーとして、飛行機に乗るのを避けたとする。
彼の友達はミニマリストになり、
彼の妹はビーガンになり、
彼女のいとこはオーガニック商品しか買わない事に決めた。
よし。
ジェスチャーは個人的には意味があるが、
集団的には、重要性が失われる。
ビーガンの妹は肉を食べなくても、他の人は食べる。
行動は功を奏さなかった。
いとこは暖房を切り詰めるが、他の人は全開だ。
ジェスチャーがなくなった。
効果を得るためには、全員にチェンジが適用されなくてはならない。
更に、友達のグループでは行動を協調することができるかもしれないが、 地球的に、自己管理でそれはできないだろう。
下からの改革は私の考えでは、起こり得ないだろう。
さて、ちょっと考えてみてほしい。
もし政府が、崩壊の高さを抑えるために、
劇的な政策を打ち出したとしたら、
怒れる民衆によって迎えられ、
次の選挙で落選させられるだろう。
人々は生活水準を1/6に切り詰める事に同意などしない
大多数の人々は、彼らの快適な生活を手放さないだろうし、
西洋人が基本的快適さと呼ぶものを持たない人々は、
数にも入っていない。
水道もない彼らがもし生活水準の切り詰めを要求されたら、
どんな反応をするだろう。
COP21の開催前、インドの首相は言った。
「西洋人たちと、その優しい言葉たち、 私の人民が、あなたたちの生活水準を満喫するようになった時、 地球温暖化を考慮しよう。」

不平等との戦いは喫緊の課題だ。
例を示すのは、富める国々の責任だ。
悲しい事に、彼らはしないだろう。
何も駆り立てるものがないから。
彼らは生活水準をどうやって1/6に切り詰めたら良いかも分からないだろう。
政治的なレベルでも、正論は意味をなさない。
どこの政府内にも力のある環境アドバイザーはいない
彼らは組織の中で動かねばならず、
組織の気まぐれの前に折れるしかない。
私達の社会を映す政府は、計画を立てる際、
エコロジーについて気にする事はない。
だからこっちの方向もだめだ。
下からの変化は高望み。
ポリシーの変更はほぼ不可能。
これは解決策のないデッドロックだ。
だから、崩壊は避けられない。

じゃあどうすればいいんだ?
私達は生き続ける。
至高のの単純さに向けて、
ゼロウェイスト、ゴミ削減、リユースを目指し、
周囲に与える損害を最小化して、
地域のものを育み、
自分で食べる野菜を育て、
新しいスキルを学び、
共有精神、独立性、適応力を持つコミュニティを作り、
そして何より大事な事は、
私達は、お互いを愛することを忘れてはならない。

(訳注) 2019年11月22日に中華人民共和国湖北省武漢市で初めて検出されたCOVID-19新型コロナウイルスによって、世界中の多くの国が国境を閉ざし、ジェット旅客機は本数を大幅に減らし、工場や鉱山の操業が停止した。
日本でも4月16日に全国を対象に非常事態が宣言された。4/26現在、対応は主に民間に委ねられている。

Sentinel-5P ESA 2020-04-26
Sentinel-5P ESA 2020-04-26 スクリーンショット

ESA 欧州宇宙機関により、2017に打ち上げられた、対流圏の大気化学研究のため、大気混合および大気質を監視するSentinel-5P人工衛星の観測データが公開されている。
ESA - Sentinel-5P

Resources:

resources resources-cont

biwascheme call/cc 非同期処理と大域脱出

引き続きbiwaschemeで呪文を唱えております。

;;treasure hunt
(let ((data (<o> 'data (fetch-json "treasure-map.json"))))
  (begin 
    (listen-click "button")
    (console-log (<o> 'treasure (fetch-json (<o> 'treasure-url data))))))

#0: 宝探し

call/ccで非同期処理を書くと、あらゆるところから処理が湧き出して流れていく、不思議なコードが書ける。 書けるのは良いが、実行すると、最初にcall/cc自体の値が継続の流れの中で引っかかってしまう。

(define (fetch-json%% url)
  (call/cc (lambda (k)
    (ajaxy-fetchy-thing (lambda (data) (k data)))))

(define (listen-click%% sel)
  (call/cc (lambda (k) (add-handler! sel "click" k))))

#1: 疑似コード

つまり、非同期リクエストのレスポンスを流したい川に、
まず最初に(call/cc (lambda (k) ...))自体の評価値(i.e. lambdaの値)が流れて行ってしまう。

そこで、lambdaの評価時はコールスタックを吹き飛ばしてしまって、継続をスキップしよう。

(define (fetch-json% url)
  (call/cc (lambda (k)
    (ajaxy-fetchy-thing (lambda (data) (k data)))
    (raise "Let's blow away that bustard stack frame")))

(define (listen-click% sel)
  (call/cc (lambda (k) 
    (add-handler! sel "click" k)
    (raise "Let's blow away that bustard stack frame"))))

#2: 例外による大域脱出

うまく動くがこれでは少し荒っぽすぎるし、うるさい。

継続がない継続を使えば、例外を起こさず安全にスタックを消し去れる。 こういうのを大域脱出という。

(define idle #f)

(call/cc (lambda (k) (set! idle k)))

(define (fetch-json url)
  (call/cc 
    (lambda (k)
      (ajaxy-fetchy-thing (lambda (data) (k data)))
      (idle)))

(define (listen-click sel)
  (call/cc 
    (lambda (k) 
      (add-handler! sel "click" k)
      (idle))))

#3: 継続による大域脱出

なるほど。さすがはcall/cc、制御フローのスイスアーミーナイフ。

コード中の主要な未定義関数はこちら: https://gist.github.com/ympbyc/dfc0c72956f1cecc32cd643486017a71

集中用設定

thinkpad x201 in concentration mode

X設定

画面に琥珀色のティントをかける。

xrandr --output LVDS1 --gamma 1:0.7:0.1

--output は xrandr -q で探す.

Firefox設定

about:config

動画を無効化

media.mp4.enabled = false
media.webm.enabled = false

サードパーティ画像をブロック

permissions.default.image = 3

Dark Modeアドオン

https://addons.mozilla.org/ja/firefox/addon/dark-mode-webextension/

call/ccの合成の解

compose-c/cc

やりたかったのはこういうことでした。

たまに便利なことがあると思う。

(define (compose-c/cc . fs)
  (letrec ((vals (list->vector
                  (map (^ (f i)
                          (f (lambda (res)
                               (vector-set! vals i res)
                               (when cont (cont)))))
                             fs
                             (iota (length fs)))))
           (cont #f))
    (call/cc (lambda (k) (set! cont k)))
    (vector->list vals)))

(console-log (apply string-append
                 (compose-c/cc (^ (k) (timer (^ () (k "good")) 3)
                                  "hello ")
                               (^ (k) (timer (^ () (k "bye")) 2)
                                  "world")
                               (^ (k) (timer (^ () (k " :)")) 5)
                                  "!"))))

アップデート Update:

This is better.

(define (compose-c/cc . fs)
  (let* ((is   (iota (length fs)))
         (vals (list->vector (map (^ (x) #f) is)))
         (cont #f))
    (list->vector
     (map (^ (f i)
         (let1 v (call/cc f)
           (vector-set! vals i v)
           (biwa-log vals)
           (when cont (cont))))
      fs is))
    (call/cc (lambda (k) (set! cont k)))
    (vector->list vals)))

call/ccの合成の訂正

前回の記事で色々と誤りがあったので訂正

biwaschemeのcall/ccの挙動に怪しいところがあるというのは間違いで、僕の理解が怪しかったのと、jsとのinterop周りで挙動がおかしくなっていた。 biwaschemeの継続の実装は問題ない様子。失礼しました。

もう一点、

call/ccを適用した関数内でUIに対するハンドラを書いて合成するパターンは、いろんな継続がいろんなタイミングで呼ばれてぐちゃぐちゃになるので、もう少し深く考える必要がある。

うまいやり方を発見したらまた書きます。

call/ccの合成

もうjsが書けない体になってしまったのでbiwaschemeでcall/ccとマクロを使いまくっている。 yharaさんありがとう。

www.biwascheme.org

biwaのcall/ccの挙動には怪しいところがある気がするけど細かいことは気にせずボヤっと動けば良い。

いくつかテクニックをメモ。

call/ccを非同期処理に使う

非同期IOをブロッキングしているかのように書ける。(これは昔記事にした。)

(cdr (assoc 'data (call/cc (fetch "https://???.json"))))

call/ccの合成

call/ccを複数合成できる。魔法のよう。

(define (listen-change selector)
 (w/js-cont k      ;;see gist
    (add-handler! selector "change" 
      (lambda (e) (js-call k (.. e 'target 'value))))
    ;;デフォルト値
    (js-call k (.. (qsel selector) 'value))))

(define (execute-search name address date)
  ;; ...?name=<>&address=<>&date=<>
  ;; search)

;;説明のため冗長に書いた
(execute-search 
  (call/cc (listen-change "#name"))
  (call/cc (listen-change "#address"))
  (call/cc (listen-change "#date")))

↑ リアクティブに複数のinput要素の入力を繋げて検索を投げる例

biwaschemeはjsとのinteropに落とし穴がいくつかあるのでそれを避けるクラッジをいくつかこのgistに放り込んでおいた。
BiwaScheme glue functions · GitHub

ブラウザにemacsから繋ぐと便利。 Biwascheme from Emacs (with repl) · GitHub

※いろんな継続が呼ばれてぐちゃぐちゃになることがある。