Spinach Forest

October, 2019

/ Indistractable   / Fragments #29   / 高速化日記 (6) - Overload   / 高速化日記 (5) - JNI   / 技術的な意思決定   / 技術的免責   / The Complexity of a UI   / MVI   / Fragments #28   / The Tales of Two Firsts   / Antisocial   / Skipping The Tech Conference   / 出荷を見届ける - 2019   / PyTorch Mobile   / Fragments #27   / Organizing The Bookmarks   / アメリカの騒音   / Another Goliath   / Open Domain-Specific Architecture   / Fragments #26   / GPUs On The Cloud   / How It's Been Ending (7) - The Ecosystems   / How It's Been Ending (6) - Me   / Attention Industry Complex   / 技術の古典化   / Fragments #25   / ... 

Indistractable

|

Growth 指向の product design 本 Hooked の著者が書いた、気を散らせずにやることやるための自己啓発本。

断線リテラシーを高めるために読んだ。基本的にはライフハック集。だいたい聞いたことがあるような話。著者は Cal Newport のような反テクノロジー業界原理主義者でないせいか、テクノロジーからの割り込みと戦う話だけでなくそのそのほか様々な割り込みや誘惑との戦いにもページを割いている。要するに The Willpower Instinct みたいな方向性も織り込まれている。

ライフハック集としては悪くないが、態度の煮えきらなさはある。全体としてテクノロジーは悪くないといいつつ、ゲームやアプリといったコンテンツは注意力を奪う専門家が作っているから気をつけろと言ってテクノロジーブロッキングのためのライフハックを紹介したり、子供がゲームやインターネットにハマるのはテクノロジのせいではなく親の問題といいつつ最終的には "feature phone からはじめるといいよ" といってみたり、ライフハック以外の文脈では TED 的 inspirational-but-not-actionable な「自分を信じろ」的議論をしてみたり、盛り上がらない。自分はなんだかんだで Cal Newport ファンだと思い知らされた。

一方でもともとテックで一山あてた人間が反テクノロジーの流行りに乗っていく軽薄さに鼻白む思いをしていた自分としては、2019 年の今日「いやテクノロジは悪くないですから。付き合い方の問題ですから」と言い張る著者にある種の誠実さを感じないでもない。

Self-Determination Theory という学派(本もある)の主張を引き、子供がスクリーンに引き寄せられてしまうのは basic psychological needs が満たされていないからと主張しているのは面白かった。この本は冷やかしてみたい気もする。

Fragments #29

|

2019-11-03 (Sun)

  • 朝いつものスタバにいくと「設備故障中につきしばらく休業」との張り紙。別のスタバにいくと今度は何の断りもなくただ開店しておらず、店の前で二人の男が開店を待つように立ち尽くしてる。三軒目でようやく開いてたけどもう 6 時。とほほ。
  • 久しぶりに人様の podcast に出させてもらう。しかし金曜の夜に連絡をもらって今日が録音、しかも今朝のスタバトラブルもあってろくに準備できず、やや残念な出来。特に自分の podcast では一週間かけて準備しているのと比べると生煮え感は拭えない。いちおうこのブログに書いたことをそのまま話したので完全に丸腰ではなかったけれど。そのほかの感想:
    • リアルタイムに Twitter で反応をみるのはよくない。「ライブで聞きながら twitter で反応をして人」という偏りがありかつノイジーな聴衆の反応に気分を引きずられてしまう。ライブなしに慣れた身からなおさらそう思う。
    • いつもやっちゃうんだけど、二時間は長すぎ。疲れて滑舌がどんどん悪くなっていく。話すことを準備する段階で絞っておかないとだめだね。
    • 自分の Podcast とおなじ感じで準備してしまい、一人でしゃべりすぎた。そういう番組じゃないはず。一方で、雑談とか話すことねーな、という気分も強い。雑談力というのは人生の余裕の関数なので、余裕ない人生してる身に話せることはないのだよ。
  • ついったの反応見るのよくないとはいえ、自分の「CPU 速くなってないって当たり前だけど妙にびっくりだよなー」という驚きはあまりに個人的なものすぎて他人には響かなかったぽい感じはする。そういうのは基本的には知ったこっちゃないとはいえ、メインストリーム向けの podcast に呼んでもらって話すことにはそれなりの期待値があり、そのラインは満たせなかった感じがする。自分の興味と世の中の興味が一致しない仕方なさはあれど、それでもやはり一週間くらい準備して話を練る時間があった方がよいな。次回呼んでもらう機会があったら待ってもらう。Podcast としては早くとって早く出したいだろうけれど、それでわけわかんない話しちゃってもねえ。
  • 宮川さんの仕事の話をちょっときけたのは毎度ながらよかった。宮川さんは海岸地区の先人としても職業プログラマとしても手放しで尊敬しているので、その働きぶりの片鱗を感じられるのは良い。個人的にはせっかくだからもっと普段から仕事とかプログラミングの話をしてくれればいいと思う一方、いくらでも説得力を持たせられる立場にありながらあえてドヤ顔説教 podcast などをやらずゆるっとしたガジェット雑談をしているというのは、それはそれでミラクルな感じもあり、きっといいことなのでしょう。そういう人相手に自分のような下っ端ぺーぺーが仕事の話するのは若干気後れあるけど。
  • 雑談といえば、宮川さんが三日にわたる fast 経験者だったのにびっくり。さすがやで・・・。
  • まあ、また一年後ということで。

2019-11-01 (Fri)

  • Google to acquire Fitbit - Versa 2 で Alexa 統合した途端にこれか・・・。Wear OS と Fitbit OS のどっちを残すのかねえ。Wear OS に絶望したのち Versa Lite にまあまあ満足している身としては Fitbit OS に存続してほしい。アプリはゴミなので書き直しでいいとおもうけど・・・。なんかちょっと前に別の時計業者を買った気がしていたが、この記事によると時計とはちょっと違ったのかな?なぞ。

2019-10-31 (Thu)

  • 「Halloween なので早く帰ります」とメールしたところ、「俺も」「俺も俺も」とスレが育った。平和である。
  • 奥様ママ友(日本人)のおうちがある Palo Alt で Trick-n-Treat.  アメリカで子供が最もクルマにひかれる日らしいが、さもありなん。子供の横を普通 15mph くらいで通過していく。5mph くらいにしてくれ・・・。そして砂糖の心配はするなというが choking は心配なのだった。Jawbreaker とか配らないでくれ・・・。
  • Pixel 4 night sight benchmark day といった塩梅。去年よりはだいぶ良くなっていて月日の力を感じる。気づいたこと: Double-tap で zoom ratio の x1-x2 を往復できる。
    • ただずいぶん Janky だな。要調査・・・。
  • iPhone の exact scale zoom ボタンが羨ましかったが、こんなわかりにくいところで実現されていたとは。ただし一旦気付けばすごい便利。
  • あと動く子供は night sight の長時間露光だと厳しい。普通の Photo mode との往復をもうちょっとなんとかしてほしい気もする。

2019-10-30 (Wed)

  • PyTorch のチュートリアルをやってみたが、あまり捗らず。Colab の Gist にセーブできる機能は便利。

2019-10-29 (Tue)

  • 必要なものが揃ったので Dell laptop の排熱 mod を試してみる。ファンが動き出すまでの時間が多少は改善した気もするが、たぶんプラシボ。YouTube で動画を見るとすぐ回りだす。まだ試してないけど AS とかも期待できん。ファンの音は、最初は前よりちょっと静かだけど基本的には大差なし。以下フタを開けてみてわかったこと:
    • Mod している人々はみな NVIDIA の GPU をつけている。自分は Intel CPU のみ。相対的には熱くないはず。じっさい「熱いから thermal pad を貼って排熱だ!」というでっぱりが自分のラップトップには見当たらない。
    • この「基盤に CPU なり GPU なりを貼り付け、スロットにメモリを差す」みたいな世界じゃラップトップが小さくならないのも仕方ない感ある。Open standard の対価を改めて感じる。対価という意味では、この時代にフタをあけて掃除したりできる Dell laptop はちゃんと openness をユーザに還元していて偉い。じっさい少し猫の毛やホコリが入り込んでいたので軽く拭いて掃除した。そしてメモリスロットの空きを確認した。いつか AI 人材になったら RAM を 32GB に増やすんだ・・・。
  • それにしても i5 4 core ラップトップで Youtube 動画見るだけで 30-40% も CPU つかっちゃうってどうなの Linux Chrome... Mac とか ChromeOS はマシなのだろうか。まあ Linux で動画は見るなということかな。(じっさい普段は見ない。)

2019-10-28 (Mon)

  • 朝の課外活動が滞っている。起きるのが遅くなりがちだし、起きられてもインターネットをしたり猫を撫でたりなどで時間を溶かす。Podcast の締切の力は偉大であった。この朝の時間が滞るとなんとなく人生が停滞した気分になってしまう。あるいは人生の停滞感が朝のやる気の無さに繋がっているのかもしれない。
  • A better example would be: - Apple: https://developer.apple.com/documentation/c... | Hacker News
    • このコメントが made my day すぎだった。Android のドキュメントは iOS に輪をかけてザルだと思うが、だからどうと思うこともない。コアのコンセプトはまあまあ説明されているし、細かい所はコードもあるし。iOS も上の方のレイヤはコード出してしまうのがいいんじゃないのかね。SwiftUI とかオープンソースにしてもほんとに誰も困らなそうだけれど。
    • 一方で自分が document rich な環境のプログラマより生産的なのかと言われると、言葉を濁さざるをえないのだった。そういえば Android は言語のライブラリが Java / Kotlin の開発元におまかせなので、それはラクできている。

高速化日記 (6) - Overload

|

去年は色々なものを並列化して速くしようとしたわけだが、実環境での trace をみるとしばしば CPU のロードが満杯になっている。つまり並列化しても速くならない。手元で実験しているときはデバイスの状態が clean なので、この実環境の現実は忘れがちである。

CPU のロードは自分たちのアプリや関連サブシステムだけでなく、あんまし関係ないアプリおよび OS のロードに使われている。下の方のレイヤだとたとえば LMK や OS の paging, SystemServer がなんかしてるなど。もうちょっと上だと Play Services がランダムになんかしていたり、システムからの broadcast に応じて寝ていたアプリが起きたり、色々ある。

OS 性能班の人がでてくるとこういうのを直してくれたりしなかったりするが、自分にシステムの大局的な挙動はいじれないのでアプリでできることを探す。

CPU がオーバーロードすると何が問題なのか。たとえば、並列化して追い出したつもりのタスクがサイクルを使いクリティカルパスを遅くする。同じことが投機的実行についても起こる。いわゆる prefetch みたいなコードがサイクルをうばう。そうした non-critical path コードが CPU だけでなく何らかの専有的資源 (I/O とか) をブロックするとさらに遅くなる。

クリティカルパスのコードはそれなりに高い thread priority を持っているが、Linux の scheduler というのは realtime ではないので優先度の低い thread もそれなりにターンが回ってくる。そして low priority threads がいっぱいあると集団として high priority threads を overwhelm してしまう。

一部の HAL は realtime thread を使っているのでこういう問題が起きにくいが, HAL の中に限ってもクリティカルパス全てが realtime に保護されているわけではない。たとえば最近みたやつだと realtime なスレッドから間接的にリクエストを受け取った gralloc HAL での共有メモリ (ION) のアロケータが realtime でないせいで滞り、結果として realtime HAL も詰まらせていた。知らんがな・・・(buffer を preallocate すれば問題を回避できることは確認したが、対価となるメモリ消費量がそれなりなので判断は保留して詳しい人に引き渡した。)

そうした事情から、今年はアプリ起動時の高速化方針を変えた。つまり、色々なものを並列化して eager に初期化するのではなく様々な初期化をなるべく lazy に直して最低限の機能が動くまで先送りし、ベースラインの準備ができたあとで投機的な初期化のタスクを動かすことにした。まあまあの成果。


高負荷状態を手元で再現するのは難しく、まだできてない。単純に CPU やメモリのロードを増やすのは簡単なのだが、それだと SystemServer のようにクリティカルパスをブロックしがちな platform のコンポーネントを stress することができない。もうちょっと platform を exercise するような load generator が必要。OS の中の人はそういうテストをしてるらしいけど、関心は systems としての throughput や stability なので、アプリ単位での latency みたいのは当事者(自分)がなんとかしないといけない。

いまのところ、たまにヒープを baloon するプロセスを動かしつつ CPU コアを半分くらいとめて trace を眺めるといったローテクかつアドホックでいまいちな方法を使い、ふーん・・・とかいってる。それでも先の gralloc のレイテンシは再現できた。しかしもうちょっとなんとかしたい、しかし自動化やってるとあっという間に月日が流れてしまいがちなので誰かにやってほしい、というかやってくれることになっているので気長に待ってる。

高速化日記 (5) - JNI

|

カメラは画像処理とかの性質上 C++ のコードを使いがちなのだが、各チームどころか各個人がアドホックに使うものだから .so ファイルの数が大変なことになっていた。社内のグループで "そうはいってもネイティブライブラリ減らすのって大変ですよね。我々も N 個から N-1 になかなかできずに苦労してます" というコメントがあったが「いや我々 M (>>>超えられない壁>>> N ) 個くらいあるのでとりあえず low hunging fruits からやっつけますわ」などと会話をしたら、M の大きさに相手は戦慄していた。

そんなん Blaze (Bazel) のせいで俺のせいじゃねーーー。とおもって放置していたのだが、全社的に性能問題への締め付けが厳しくなった結果 OS の中の人からチクチク言われることが増え、仕方ない尻拭いするか・・・と直したら色々速くなった。あ、ごめん・・・。みたいな気分。


以下ではロードする .so の数が多いと何が問題なのかという世の中の大半の人にとっては極めてどうでもいい話をします。

まず前提としてこれらの .so は必要な依存関係を全て含んだ自己完結 SO である。OS 付属のライブラリを除くとぜんぶ必要なコードが入っており、ある SO が他の SO のシンボルを参照したりはしない。(一つの理由としては、そういうのが苦手なビルドシステムを使っているため。) 結果としてけっこうコードが重複している。コードの重複はヒープを圧迫することはあれ必ずしも性能低下につながるとは限らないが、こいつらは傾向として雑に書かれた C++ のため、static initializer がけっこうある。ABSL みたいな共有コードの initializer は何度も走る。まあ、無駄。

また SO をロードする bionic のローダは global lock を持っている。symbol table を保護する必要があるので割と仕方がないとは思うが、たとえば Dagger の object graph provisioning が複数のスレッド上で並行しておこると lock contention になる。そして初期化のコードはがんばって CPU を使うべく並列化してあるので、実際ばんばん衝突する。しかもライブラリを読むとかいうのはしばしばファイルアクセスが伴うのですごい待たされる。厳しい。

JNI メソッドの symbol lookup は、それなりにコストがある。 ベストプラクティスは RegisterNatives という JNI の API を使った early binding だが、export するシンボル名を convention に揃えることで Java runtime に late binding させることもできる。その方がコードを書くのはラクなので、雑なコードはしばしば late binding になっている。

がしかし!その late binding は当然 symbol lookup が伴うので潜在的に lock contention の可能性がある。というか dogfooding 上司のよこした on device trace をみるとめっちゃ競合してる。厳しい。しかし知るかよーーさぼんじゃねーーー!

しかもしかも、JNI の symbol 名は SO 単位でテーブルが作られ、lookup はそのテーブルのリストを順にスキャンしていくのである! (参考: FindNativeMethodInternal()) そうですよねー常識的に考えて O(M*log(S)) ですよねー・・・つらし・・・俺のせいじゃねー・・・。

手抜き C++ プログラマたちのせいで OS の人から突き上げられるのにいいかげんイライラが限度に達し, 半月かけてチーム内の SO をマージした。レビューをたとむと「え、それが遅いって証拠あるの?」とかいってくる子もいて心底うんざりしたが、「OS 方面からのお達しですので」と言い張り心を無にして完遂。組織の壁を超えた連結は諦めつつ、そっちはそっちでまとめてね、と協業チームに頼んでくっつけてもらうくらいはした。なお GCAM の皆さんとは仲良しかつ自分がファンなのでこっちでやってあげた。ははは。そういうもんです。

なお Chrome のようにスパルタネイティブ集団がつくるアプリにはこうした問題は一切ない。謎の tooling で自動的にこうした問題が解決されている。すばらしい。(と一瞬思ったが、あるときじっとコードを眺めていたら .java のコードを C preprocessor に通しているのを発見して目が覚めた。ガラケーアプリかいな。)


こうした問題がおこるのは、基本的には C++ を画像処理 DSL だとおもっている(間違ってないけど)困った人たちのせいなのだが、その雑さを許してしまう Blaze/Bazel というビルドシステムのせいでもある。

Gradle と違い、Bazel で JNI のコードを書くのはすごいラク。Bazel はクロス言語のビルドシステムという顔をしているが、現実的には C++ と Java のビルドシステムである。だからこの二つの言語を混ぜるのは超得意。ただ混ぜるのが簡単すぎるので、ピンポイントでちょこっと C++ で NDK の API を叩きたい誘惑に屈しがち。結果として細かい SO が大量にできることがある。

いや出来ないよね普通。おかしいよね。ほんとに。

なお最近の Bazel は cc_libraryandrod_binary の依存関係のどこかに入れておくとそれをかき集めていいかんじに単一の SO を作ってくれる。しかしこれは割と最近の機能なので、自分たちのように歴史あるコードベースは従来の suboptimal な方法に従っているのだった。まあ実際に遅延ロードしたいネイティブコードもあるので、問答無用で一つにまとめられるのはそれはそれで困る。

まあどうでもいいです。人々は油断するとすぐ新しい SO をつくってくるので本当に腹が立つ。たぶん linter なり presubmit check なりで取り締まる必要があるのだろうな。そんなタスクを登録したまま忘れてた。来週気が向いたらやろう。

高速化の達成度と自分の達成感が噛み合わない mixed feeling な仕事だった。

技術的な意思決定

|

テクニカルな理解が低いと良い意思決定ができない。でもそういうのが必要な場面はしばしばあって辛い。という話。

去年の今頃、テストやベンチマークの自動化を強化するプロジェクトをはじめた。そのときは隣に QA チームがいたのでおすすめの自動化フレームワークを聞いたところ、彼らの作っているツールを勧められた。QA チームが保守しているベンチマークを自分たちの都合良いように書き直したい思惑もあったし、彼らはこのツールでテストを書き直すというし、他によい当てもなかったのでそのツールで自動化に着手した。

のだが・・・とにかく使いにくい。やばいレベルで使いにくい。ほんとにこれでテストとか書き直せるの?無理じゃね?どうしてこんなものが存在してるの?と思ったものの、専門家であるはずの人々がそれでいくというのでがんばって使い続けた。しかし全く捗らない。ツールを自分に勧めてきた A 氏は席を外していることが多かったので、その隣にいた同じ QA チームの B 氏に、ほんとにこれでいくの?どういう予定なの?などとたびたび質問した。しかし B 氏の反応もいまいち煮え切らない。

自動化にあわせてアプリ本体のコードに入っている計測のフレームワークも整理する必要があり、自動化作業自体はしばらく保留して製品側のコードをいじっていた。そのころチームに新しい TLM の X 氏が入ってきて、彼らの自動化業のためのスタックを評価しはじめた。件の QA 部門推薦フレームワークも評価し、これは全然ダメだからやめた方がよくね?というドキュメントを書いてチームに回覧した。あ、それ言っちゃうの?という外交的配慮と、まったくその通りだよ、という安堵が同時に頭をよぎる。なお自分も少し前に似たような評価のドキュメントを書いて「こいつは若干いまいちだが隣の QA の人たちからのサポートもありそうだし足並みそろえた方がいいのでこれにしましょう」という結論を書いていた。

一方、別のオフィスにいる比較的最近はいってきた別のプログラマ Y 氏が、また別の目的で自動化作業をはじめていた。 TLM の X が書いたドキュメントから実際の自動化コードがリンクされていたので見てみると・・・よさそうじゃん。(自分が作業をはじめた頃はまだ計画だけでコードは見当たらなかった。)

自分は隣接 QA 部門との間でスタックを断片化したくないのでいまいちなツールを使い続ける気だったが、同じチームの Y は既に別の(よさそうな)ツールを使い始めている。つまりどのみち断片化してる。そして自分が保守したくないとおもっていた自動化インフラの boilerplate なども Y がぜんぶ片付けてくれている。この船に乗るしか無いとそれまでに書いたいまいちバージョンのベンチマークを捨て Y の選んだフレームワークで書き直した。これまでの苦労はなんだったのかというくらい色々なものがあっさり解決し、そのいまいちツール対応のためにアプリ側に入れたワークアラウンドも削除することができた。その前の 1-2 ヶ月の苦労は何だったのか・・・。

ベンチマークは今でも動き続け、たまにリグレッションをみつけたりしている。

自分に自作ツールを勧めてきた QA チームの A は、気がつくといなくなっていた。他の部門に異動したらしい。隣でツールへの評価に口を濁していたテストエンジニア B も、しばらくするといなくなった。たぶん機能不全なチームだったのだろう。


この事件のあと、自分はなぜ正しい決断ができなかったのだろうと考えていた。ツール自体への評価(出来の悪さ)は明らかだった。新しくやってきた TPM の X は早々にダメだしをした。別のオフィスにいた SWE の Y はダメツールには(たぶん)一瞥もせずマシなフレームワークで作業をはじめた。なぜじぶんは嫌な予感を押し切ってダメツールを選んだのか。

最初に考えたのは「政治的意向で技術的判断をするのがよくなかった」という反省。つまり QA チームと足並みを揃えたいという気遣いが判断を曇らせたというもの。これは一理あるが、一方で純粋に政治的判断というわけでもない。同じツールを使えばインフラの保守を相手に任せられるという潜在的な利点がある。

じっさい出来のよい自動化フレームワークを使うためのインフラのセットアップはけっこう大変で、Y がやってくれたからよかったけれど自分でやりきれた自信はない。一方で保守をしてくれるはずだった A と B は QA チームからいなくなってしまったので、彼らのインフラに載ったとしても人の入れ替わりに際して自分が尻拭いをする必要にせまられた可能性もある。

次に考えたのは「人を見る目がなかった」というもの。出来の悪い自作ツールをピッチしてきた QA エンジニアの A は信じるに足る相手だったのか?謎のオレオレ再発明が跋扈する厳しい社会を生きるには信頼できる相手を見抜く目が必要なのでは?この論点にも理がないではないが、一方でテクノロジを評価するのに人を見る目を養うというアイデアは自分の価値観に合致しない。そういうのは VC のひととかががんばることだと思う。

最終的に自分の腑に落ちた結論は、自分の会社員モバイルエンジニアとしての実力不足とコミットメント不足だったというもの。

たとえばダメだし文書を書いた X はその前にまともなでかいチームで働いていて、なんらかのマシな自動化インフラがあることを(自ら作業した経験がないにせよ)なんとなく知っていた。

出来の良い自動化フレームワークを導入した Y は、その後チームの自動化担当としてほぼ専任でインフラの面倒をみている。そのインフラはよく壊れる(当人の問題ではなく組織の問題)ため、保守は大仕事。じっさい彼のいるオフィスはテストやベンチマークなどのインフラを一手に引き受けるサブチームへと発展していった。

判断を下した時点で、自分にはより良い答えがある確信も、インフラの保守ふくめ全部自分の正しいことをやり切って引き取る覚悟もなかった。(後者は今もない。)ただしい判断を下すには X のような「正しい環境で働いた経験」か、 Y のような「ぜんぶ自分でやる覚悟」のどちらかが必要だった。どちらも自分にはなかった。

今は覚悟を決めた Y およびその周辺の人々のおかげでインフラが整備され、自分は「正しい環境」を知ることができた。チームを異動して似た仕事をする機会があったら正しい判断を下せるだろう。つぎはもうモバイルやりたくないけど。


この会社員的な視点から一歩下がって考えると、一人前の Android プログラマとして知識が足りてなかったように思える。もうちょっと勉強しとけや、というのがより一般的な教訓かもしれない。

でも実機でベンチマークを自動化する環境づくりとか、仕事じゃないとやらない気がするね。趣味で mobly を使える気がしない。なんかもうちょっと普通に使える host driven な E2E のモバイル向けベンチマークツールないのだろうか・・・。

技術的免責

|

技術的負債ってときどき返さなくていいときあるよね、という話。

わかりやすい例: いわゆる MVP として雑になにかをつくり製品としての手応えを確かめた結果ダメそうという結論になったとき。その試作的コードは捨てられておしまいとなる。

OS バグなどのワークアラウンドをベタっと埋め込んだ時: OS のバージョンがあがってそのワーウアラウンドをまるごとばっさり消せる。同様に CPU の遅さを回避すべくグチャっと非同期なコードを書いた時: CPU がはやくなってそのワークアラウンドをまるごと消せる。PM が締め切り前に無茶な機能をつっこむよう求めていたのでやっつけ仕事をしたが、その思いつきは結果が出なかったので巻き戻すとき: これは冒頭の MVP の例と一緒か・・・。

無駄に一般化するなら: 目の前にある複雑な問題と戦う抽象を生み出すことができずベタっとゴミを投げつけ目をつぶっていたら、いつの間にか複雑な問題自体がなくなってしまうことがある。そういうときは技術的負債、借金を踏み倒せる。

これは単に「そういうこともたまにあるんだな」という発見を紹介しているだけであって、だから負債しても OK とかどういう負債は免責されやすいとか、役に立つ洞察は特に無い。しいていえば一種の YAGNI を示唆していると解釈できるかもしれない。つまり、過剰な一般化をしてしまうと問題が消えた時に巻き戻しにくいので、相手をしている複雑さが居座るとわかるまではベタって書いておいた方がよい、かもしれない。

なおゴミコードを書いたあと異動なり転職なりをするという踏み倒しもありうるが、人間関係の負債にすり替わりがちなので waiver できたとは言えない気がする。

The Complexity of a UI

|

つづき

Redux の one-way data flow というアイデアは正しいので取り入れたいが、UI 全体を一つの状態で表現するのは自分の目的にはエクストリームすぎるし変更がでかすぎるので仕事で使うことはなかろう。Reducer 使おうとか人々を説得できないわ。

そして Redux にせよ MVx にせよ自分の面している主要な問題を解決してはくれないことに気がついた。それはおそらく、相手にしている問題が典型的な JSON からリストを表示するお仕事ではないせいに思える。

"App Architecture" の皆様が暗に共有している前提がある: 沢山の種類のデータがあって、それを表示するために沢山の画面を素早くつくらないといけない。そして画面の作り方はなるべく標準化されていてほしい。この Airbnb チームの記事は彼らのライブラリ MvRx で 100 screens 作ったよと誇っており、この要件を鮮やかに伝えている。

自分たちのアプリは大きな activity が二つしかなく、そのうち一つは設定 activity。自分の関心はもうひとつのメインの activity だけである。しかしこの画面が割と複雑でなんとかしたい。

カメラアプリには複数の「モード」がある(例: 写真、ビデオ)。しかしこれらのモードは同じ画面、同じ UI を共有している。この「モード」は言ってみれば reactive な data source / model. 常識的に考えると個々のモードごとに別の画面にするのがラクなわけだが、シームレスさなどの都合でそうはなっていない。

モード間で UI がまったく同じならまだ話は簡単なのだが、当然そうはいかない。shutter button の色がモードごとに変わったりする・・・のはまだいいとして、たとえばビデオだと録画時間を表示するだとか、長時間露光モードではプログレスを表示するだとか、そういうのがコード上には全部つっこまれている。

つまり一つの UI を複数種類の "model" が共有しており、そのときアクティブな mode / model が UI を専有する。当然ユーザとのインタラクションもモード次第。

そんなら各モードが勝手に UI を使えばいいじゃない、というとまあまあそうなのだけれど、現実には大量のコピペが発生する。なぜならモード間で共通の挙動も沢山あるから。そいつらをなんとか factor out してあげたい。しかし各モードは違う人々によって実装されているので、そういう cross-cutting concerns は見逃されがちである。

モード固有の UI にも問題が多い。あるモードが新しい UI を足すと、他のモード固有の UI に干渉したりする。なぜなら画面の real estate が限らているから。モードの切替時に飛ぶ鳥後を濁さないようにしてほしいのだが、モードの切り替えは mess になりがちである。

そしてモードの切り替え、およびアプリの起動はなるべく速くしたい。多くのアプリでは UI の初期化なんてネットワークリクエストの遅延でマスクできたりするのだけれど、カメラの HAL の初期化はそれなりに速い場合もあるのでデバイスの性能によっては UI の初期化がクリティカルパスになる。全てのモードの UI を非表示の状態で雑につっこんでおく、とかやられるとどんどん遅くなってしまう。Lazy に初期化しないといけない。しかしそうした laziness を後から足すのはわりかし骨が折れる作業である。その UI 部品が複数のモードから共有されていると特に。

そして様々なデータソースがガチで reactive というか realtime stream である (例: autofocusの位置.) UI も immersive なので drag みたいな操作が頻出する (例: ズーム). ViewPager にまかせとけばいい、というわけにはいかない。

そして画面の回転をシームレスにするためのロジックがこれら全てをじんわりと複雑にしている。

とか色々問題がある割に UI は割と頻繁にかわる。なぜならコンシューマ製品には見た目の新鮮さが欠かせず、しかし製品の性格上「画面の背景色」などがあまり存在しないので色とアイコンのような theme をいじってごまかす手が使えないからである。

めんどくせー。


大げさにいうと、カメラの UI は「モード」というプラグインを差し込むためのプラットフォームである。モードに必要な拡張性、カスタマイズ性を提供しつつ、挙動の一貫性やモード間の隔離や性能を保証することが期待されている。しかしそういう複雑さと戦う準備がまったくできておらず現状の mess に繋がっている。UI は detail とかいったひと、こっちきて clean architecture とやらで手伝ってくれや・・・。

この "UI は detail" の態度は自分たちのチームにも若干あり、それは比較的 junior なプログラマが UI 共通部を担当している事実から伺える。皮肉なことに、モードとかがそんなに沢山なかった製品開発の初期には割と実力のあるプログラマが色々作り込んでいた形跡がある。現状の UI の扱いにはそうした人々が move on した "保守フェーズ" という暗黙の想定を感じる。

でも QA cycle を消費しているのはそうした UI の mess に起因するしょぼいバグたちであり、UI のコード品質がチームの velocity 下げてますよね? OS の HAL や画像処理アルゴリズムのネイティブコードのクラッシュや AI 的機能の concurrency にまつわる微妙な deadlock や性能のオーバーロードによる瞬間的なコマ落ちなどは「難しい問題」でシニアな人々が沢山でてきて頑張って相手をしている一方でしょうもない UI のバグを相対的にシニアでないプログラマが直したりしているけれども、消費されている関心ではなく単純に出荷 delay でのインパクトだけを見たら「しょうもない UI バグ」の影響はなかなかのものなんじゃない?

もっともこれを "UI は detail" という態度の帰結だというのはあまりフェアではないかもしれない。どちらかというと "UI は壊れやすいもの" という諦めの帰結という方が近い気がする。どちらにせよ個人的にこれは受け入れがたい結論である。我々の UI は (競争的優位ではないかもしれないけれど) チームの生産性にとって瑣末なものではないし、それは良いコードによって改善できる問題である、はず。

というわけで今年の残りと来年は UI なんとかするぞ!その「難しいバグ」はお願いだからこっちくんな!という心意気になった今日この頃。ただ上の方の人にそういう認識がないので、肩身が狭いのだよなあ。「難しい問題」の呪いを感じる。

MVI

|

仕事の UI コードをなんとかするアイデアを得るべく Android Weekly のアーカイブを眺ながら "Application Architecture" 的な話題を探す。

MVVM, MVP あたりまではフォローしていたが MVI (Model-View-Intent)というのが何なのか気になっていた。結論としては MVI = Redux/Flux だった。MVI をウェブで探しても canonical な資料が上の方にでてこないのは、そもそも MVI という用語自体が冗長だからだったのか。発明なしにラベルだけつけ直すとか、ほんとに Android プログラマコミュニティはしょぼいな・・・。

なんとなく Redux は React.js のような Virtual DOM を前提としている気がしたが、MVI の人々は気にしていない。MVVM の ViewModel を functional につくり、Presenter がその ViewModel を View に適用する。要するに ViewModel の POJO Data object なり ORM のオブジェクトなりが React の component の役割を果たす。たしかにそれで概ね問題ない気がする。

React が virtual DOM を必要としているのは,  ウェブフレームワークの伝統として結果を "render" する ... すなわち HTML を生成する... というメタファをそのまま持ち込みたかったからだ、と自分は解釈している。ウェブ以外の UI プログラマからすると "render" としてHTML を生成するのは完全に狂っておりわけがわからない。しかしその狂った伝統を貫き通すため React は virtual DOM (以下 VD) という mad science を必要とした。

一方で伝統的な UI ... というと広すぎるので Android に限った話 ... では、render のように HTML というか View の XML を動的に生成するみたいなナンセンスは存在しないし、そもそも API の ergonomics が頻繁な View 構造の作り直しを促さない。基本的には最初に一回つくっておしまい。状態の反映は既に作られた view hierarchy の property を更新して実現する。Android で Redux をベタにやると property update が雑になるなので副作用を最小化する工夫が必要といえば必要だが、特に難しくはない。というか View の実装は大半の property が既に副作用最小化のガードを実装している。雑な propety update の副作用で性能が落ちるのは、別に Redux に限った問題ではないからね。

VD で特別難しいのはたとえばリストのスクロールなどで View の構造が dynamic に変わりうる場面。だけれど Android だとそういう動的な View 構造の変更は RecyclerView なり ViewPager(2) なりが実装している。そしてこいつらがやっていることは大局的には VD の delta application  とおなじ。RecyclerView の adapter を Redux 的に実装するのは・・・やったことないけどそんな難しくはない、気がする。結局, RecyclerView というのはそれを使うプログラマと協力して View を recycle する・・・すなわち古い View に delta を apply して使いまわす・・・というものなわけだから。

大企業による Android Redux 的なものの紹介記事などをリンクしておく:

なおこいつらは誰も MVI という単語をつかわない。やはり MVI はダメだな。スルーでよし。一体誰が言い出したんだろうね・・・・。軽く調べるとこのへんらしい:

ケチつけてばかりいるのもどうかとおもうので、いちおうあとで読んでみよう・・・。


なお Android なら VD とか要らなくね、という自分の見立てとは裏腹に Android の中の人は Jetpack Compose という Kotlin React みたいのを実装しているらしい。Apple も SwiftUI とかいってるし、時代の流れなのだろね。

冷やかしでかるくコードを眺めると・・・これとか delta application ですかね。とりあえず引き続きスルーでよさそうなのが確認できてよかった。しょうじき使う日はこなそうだが、頭の体操にひやかすのは悪くないかもしれない。そのうち。

Fragments #28

|

2019-10-26 (Sat)

  • 若者・・・と書くとアレだけれども less senior な同僚との働き方について考える。
  • 上司の期待値としては、UI の仕事、特に code health や performance は自分が "lead" して若者に作業を delegate してほしい。そして若者に promotion に値する成果を挙げさせてほしい。自分としては若者に成果をあげてもらうのはまったくやぶさかではない。しかし lead するとかいわれてもな・・・という気持ちがある。
  • 性能仕事を任せるのは、ある意味ではわかりやすい。ほらここ遅いから速くした方がいいでしょ、たとえばこれをこのスレッドのこのへんのタイミングに持っていけたらいいよね、これ遅いけどたぶんプロファイルとればなんでかわかるから直せばいいんじゃない、というような話をすればよい。
  • Code health はややこしい。Code health 問題あるでしょ、というのは割と主観的なので性能と比べて主張しづらい。話し相手の書いたコードに自分がケチつけてるみたいにならないか心配。ある程度は方向性を示唆するだけで済む範囲はあるが、一方で自分は重要なプリミティブが足りてないのでそれを導入する必要があると考えており (具体的には Observable みたいなやつ) そういうのがあれば綺麗になるでしょ、だから使ってこうな、みたいなのはうまく伝わる自信がない。というか reactive style みたいな宗教を他人に pitch するの大変じゃん。自分の負担を下げるために delegate したいのに、そういう evangelism を発揮する必要があるのは本末転倒。これは言語バリアなのだろうが・・・。
  • しかしこれは今後の色々なものの blocker になるので pitch する必要を感じる。できれば reactive style みたいな話を関心の中心にしたくなかったが、UI 担当者たちにおけるこのリテラシーの欠落が自分のあらゆる code health 仕事を block しているの。そこを "lead' したいなら腹をくくってやるしかない気がしてきた。
  • 自分でぜんぶ書いちゃうのがいちばんラクだし楽しいし満足もできるのだけれど。来年の電話機にむけて色々速くする仕事もやらないといけないのだった。すべて締め切りが悪い。

2019-10-25 (Fri)

  • E-scooter が欲しいな、などとオンラインレビューを眺めて時間を無駄にする。自転車よりコンパクトなので狭いアパートでも家の中にしまえるのが良い。前に持っていた自転車はアパートの自転車置き場から盗まれてしまったから・・・。運動できなくなるのは悲しいが、どのみち自転車だけでは運動不足なので他で補う必要を感じ、そんなら通勤は電動でもいいんじゃないかと思うなり。
    • 試し乗りしたい。欲しいやつの類似機種は shared scooter 業者が使っているぽいので San Jose まで行けば乗れそうだが、ヒマがない・・・。
    • まずは non-e kick scooter からはじめてみてもいいかもなあ。
  • FB の feed を整理。奥様、友達の奥様二名のみをのこし全員 unfollow. (これまでも知り合いはほぼ unfollow していたが billg など一部 celebrities をフォローしていた.) なんとなく入っていた groups および pages も脱退。すごいすっきり。育児ソーシャルメディアとしての FB はそんなに悪くない。
  • そんな折 FB messenger に卒業大学のシリコンバレーグループつくったから来てね、と知らない人からメッセージ。まったく恨みはないがまったく興味もないのでスルー。まあ我々ぱっとしない私立大学の卒業生がこうして異国で活躍してるのはいい話ではあるよ。
  • California Emerged From Drought and Is Still Catching Fire - The New York Times
    • 今年ももう燃えてるらしい。厳しい・・・。
  • Google CEO Sundar Pichai acknowledges employee trust issues in closed-door meeting - The Washington Post
    • またリークしたのか・・・自分はもう TGIF は参加もしないしライブも録画も見なくなって久しい。それが心の平穏にいちばんよい。
  • Windows 10X leak: Modern File Explorer and clamshell laptop plans - The Verge
    • Micorosoft は tablet を取りに行くことにしたのだろうか。Kindle と PDF がいいかんじで読めるなら悪くないかもね。

2019-10-24 (Thu)

  • Arrogance について。チームや仕事に慣れてくると段々と態度がでかくなる傾向が自分の中にある。コードレビューでの発言が強気になったりとか、バグ上での発言がちょっと攻撃的になったりとか。自分のように ESL で空気を読む能力が低い人間はコミュニケーションにマージンが必要。過剰に丁寧なくらいにしておく方がよい。幸いコミュニケーションのオーバーヘッドが問題になるような身分ではないので、妙に腰の低い人として行きていきたい。特にオンライン。こうした自分の態度をモニタリングする良い仕組みがあればいいのだが。自分の全ての発言を串刺しで一覧するツールが欲しい気もする。
  • 午前, Preschool Teacher-Parent meeting. 先日の dads day の印象よりは多少ちゃんとやってるぽい。友達と遊ぶことはなく、それは age appropriate だというが、日本語デイケアでは友達と楽しくやってるので言語のせいで quiet introvert になってしまうのがやはり気の毒である。
  • 夕方, Preschool のハロウィン迷路設置手伝い。黙々と肉体労働に従事。言語バリアといいたいところだが日本語でも別に雑談とかしなそうな気もして、我が子に introvert どうこう言える身分ではないことを思い出す。
  • Simpler, cleaner, faster. Coda 2.0 is ready for your team.
    • 案内がきた。Docs と Spreadsheet を足したようなアプリ。この手の modern office productivity apps はどれも素敵っぽいが単品だと力不足。一方で組み合わせて使うのは pricing も integration も厳しい。が、どうなんだろうな。Google Apps にしても Office 365 にしても一通りあるという事実が個々の mediocre さを補っている感はある。Dropbox が Vision Fund にカネ借りて全部買収してしまえばいいのに。
    • ぱっと思い出せる範囲だと単品 Modern Office としては他に Airtable, Woven などがある。 あとなにがあったっけ?

2019-10-23 (Wed)

  • Amazon で Sold by Amazon.com の品物を三つ注文。Prime 柄の袋が届いたものの、一つ見当たらない品がある。サポートにチャットし、それだけ送り直してもらう。さっき再送されたとおぼしき Prime 袋が届いたので開けてみると・・・カラだった。え?え??なにもはいってないよ???人間にはあり得ないミスに思える。出荷がフル自動化されて、そのバグとかだろうか。パクられたとは考えにくい。なぜなら注文したのはこれだから・・・。代替品を探すのも大変なので、Amazon.com でない seller に Amazon から注文。こんだけしくじっても Amazon で書い直すあたりが我ながらロイヤル顧客だけれど、徐々にnon-Amazon shopping も探求しておかないとなあ。ウェブ検索を non-G にしたいなら DDG なり Bing なりをつかっておけばいいのに対して Amazon のかわりをさがすめんどくささたるや、圧倒的 moat 感. まあ Amazon 以外で買ってもモノが届かないとか日常茶飯事だからね。カラの封筒が届いたことはないが・・・。
  • 人事考課の季節。引き続き 3/5. UI なおしたいんですけどねーみたいな話をしたら、そういうのは若いのにやらせといてもっとガツンと速くする方法を考えようや、というフィードバック。そうですかい・・・。あらためて遅いデバイスで trace をとりなおすといつの間にか UI thread はクリティカルパスから外れていた。そういえば先月先々月あたり気まぐれでそのへん速くした気もする。なんかガツンとした方法考えるか。はー・・・。
  • Kent Beck - Productive Irritant - Gusto | LinkedIn
    • FB は去年やめてた。それで Medium に書いていたのか。Medium いまいち気に入らないが自分でホストするとかかったるいのでたぶんこのままだわと発言。わかるわ・・・。
  • Polynote | The polyglot Scala notebook
    • Netflix, Jupyter ぽいのを Scala で書き直したってよ。かっこいいけど流行らんだろうなあ。

2019-10-22 (Tue)

  • 奥様の知人が近所に来ているということで社食観光を提供。ひさしぶりに会社グッズ売り場に言ったら観光地としての覚悟を決めたっぽい品揃え。以前よりマシになっていた。なお数年前からロゴ/アイコンは G か A か Y だけになり、そのた些末な製品のアイコンは姿を消した。Chrome のロゴを模したクッションや Gopher のトートバッグとかはもはやレアアイテム... とおもって調べたら Gopher グッズは色々あるっぽい。権利関係がゆるいのだろうか。あるいはこの redbubble というサイトがザルなのか。なんとなく後者っぽい雰囲気を感じる。Etsy も強い。そういえば前にそんなコメントみたな。
  • ふと pinboard の stats を見ると自分の bookmark は (delicious からの移行分を含め) 8000 くらいあるらしい。
  • Mark Zuckerberg - Live from our weekly internal Q&A | Facebook
    • リークに対抗してライブで流したらしいよ、と教わったので見る。ザック氏、色々言われているし言われて然るべきだが、やはり創業から(Sean Parker 期をのぞき)社長をやりつづけてきた貫禄はある。
  • Announcing Ghost 3.0 – The story behind raising $5m
    • Ghost, まえに一瞬手元で試したときは大層速く、WordPress から移行したいと思ったものじゃよ・・・。コンテンツを Hugo などに export できる headless mode というのができたので手元のラップトップで CMS として動かしつつ結果だけ GH Pages とかに push すればいいのでは・・・というコメントをみかけたが、やんねー。
    • 課金モードを強化してブログで小遣い稼ぎしたい勢にアピールをしている。自分の中のインターネット芸人もそうしたほのかな憧れを抱いているが、書くものもなければコミットメントもないのだった。
  • Opinion | Are We Ready for the Breastfeeding Father? - The New York Times
    • 子の生後一年くらい読んでいたの著者が「自分も母乳が出れば・・・と思いながら搾乳機をつけていたら妻にみつかった」という話を書いていたのを思い出す。

The Tales of Two Firsts

|

Eric Schmidt が最初に mobile first と言ったのは 2010 年らしい。興味深いことにリンク先のインタビューには Android が一言も出てこない。Sundar Pichai が AI first と言ったのは, 探した範囲だと 2016 年が最初。これらは自分の記憶ともだいたい一致している。

Mobile first がなんなのか、最初は誰もわかっていなかった。モバイルウェブをがんばれという話にも思えたし、アプリをつくれという解釈もあった。数年のちようやく「モバイルのアプリとしてサービスインする前提で製品をデザインする」のが mobile first だと人々は理解するに至ったが、新製品とかそんなにないので、まずは既存サービスのアプリをちゃんとするのが現実的な行動となった。アプリはみな最初はなんとなく Android 版をがんばっていたものの、世界の半分は iPhone であるという現実に目覚め iOS もがんばるようになった。新機能も、だんだんと(本来の意味で)mobile first なものが増えていった気がする。

自分はモバイルと一番縁遠いウェブブラウザの世界からモバイル OS 部門の周辺アプリというモバイルの内側に異動したせいで、いちばん興味深い「ウェブ出身だけどモバイル化していったサービス」を間近でみていない。だから上のような表面的な変化の裏で実際にどんな苦労があったのかは知る由もない。でも "mobile first" だなんて、大企業の戦略にしては随分と雑な代物だったとは思う。現場は混乱したことだろう。

Mobile first の成功は製品によってまちまちというのが自分の主観的評価。Mobile に倒すのが向いているサービスは mobile first によって飛躍したし、あまり mobile に向いてないサービスは苦労の割に価値を引き上げられていない気がする。

ただ、総体として mobile first はまあまあ成功した。まったく新しい大ヒット製品を生むことはなかったにせよ、デスクトップとウェブの時代の成果はまあまあモバイルに持ち越されたし、地図のようにモバイルでこそ本領を発揮したものもある。今日ではたくさんの人々がそれらウェブ出身サービスをスマホ経由で使っている。"Mobile first" という掛け声の雑さを考えると驚くべき成功だと個人的には思う。


AI first の成否は、自分にはまだ見えない。AI first が何を意味するのかも、しょうじきはっきりとはわからない。人々は大きく分けて三つの方向性を見出しているように見える。

一つ目は "ヒューリスティクスを捨てて learn しなさいね" という ML first とでもいうべき路線。適当に計算したスコアを足し合わせてなんらかの判断を下す労働集約的なアルゴリズムは data から learn する方法にとって変わられ、もともと ML だった人々も representation を learn する deep な方向を目指す。個人的にはこれがいちばんまともな AI first の解釈だと感じる。

二つ目は有り物の NN モデルをもってきてなんかする路線。NN first とでもいおうか。わかりやすい例だと segmentation を使った写真の疑似ボケだとかマンガの吹き出しアニメーションだとか。あるいは活字おこし対応音声レコーダとか。棘のある言い方をすると PM による AI first とでも言おうか。よりがんばる例としては画像検索があり、そこまでいくと段々と ML first に近づいていく。

三つ目は AI first を Assistant first と解釈し、Alexa Skills 的な音声コマンドに対応する路線。個人的にはこれを AI と呼ぶのに抵抗があるが、pop culture 的 AI の解釈に一番近いようにも思える。

どれも一理あるといえばある。しかし互いにだいぶ違うものである。解釈のブレ幅に AI first という掛け声の雑さを見ることができる。だいじょうぶなのか不安。


Mobile first はなぜそれなりにうまくいったのだろう。たぶん mobile first にはたまたま「ユーザのいるところに行け」という圧倒的正しさの含意があり、それがコンシューマ向け製品にとして良い結果につながったのではないか。

同じ含意を持つ AI first の解釈は assistant first. 自分の直感とは裏腹だけれど、voice devices には新しいユーザがいる、あるいは従来のユーザと新しい接点を持つことができるのは確か。

煮えきらなさを説明するのは mobile と voice devices の現状のマーケット規模の違いだろうか。Alexa built-in デバイスは 100M くらい出ているという。現状のスマホの MAU すなわち約 Android 2.5B + iOS 1.5B = 4B の 2-3% くらいの数しかない(しかも MAU と sales figure を比べるのは雑すぎ)。だいぶ投機的といえる。ついでにモバイルで iOS を真面目にやる程度に Alexa も真面目に相手した方がよいのでは・・・とも思う。余計なお世話ですが。

AI first の別解釈たる ML first は堅実に成果を出している気がする一方でプログラマからすると世の中 ML と縁遠い仕事も多く(たとえばウェブやアプリなどの frontend 開発)、若干ニッチに思える。そして ML first する要素を持たない人々が苦し紛れに AI first をすると NN first になってしまい、ちぐはぐさが生まれる。

そんなわけで自分は ML first 以外の AI first には懐疑的。ただ自分の予測がはずれ AI first で勤務先が潤ってくれればその方が嬉しい。悲観が外れ, 何らかの形で "AI first まあまあ正しかったね" と思える日を待っている。

まあそれはさておき企業の標語で XX First は雑すぎだよ。次はどうすんだ。Quantum First か。

Antisocial

|

Antisocial: Online Extremists, Techno-Utopians, and the Hijacking of the American Conversation

Alt-right や white supremacy と呼ばれる人種差別的インターネットトロルがソーシャルメディアなどを駆使しいかにオンラインの言論を制圧したかを書いた本。

よく取材しており、自分のように alt-right とかそういうめんどくさいものは目にもしたくないし目にする機会もない外国人にとっては現状を追体験できる優れた読み物だった。オンラインのメディアを熟読のうえ色々引用してくれるだけでも(話題の性質上)臨場感があるが、それだけでなく Alt-right 方面のブロガーに密着取材(本人の許可を得たうえであちこちに同行する。ホワイトハウスにまでいく。)してみたり、そのカルトを抜け出してきたインサイダーにインタビューをしたり、Reddit の CEO にも取材をし、同社が利用規約変更の日の社内 war room に入り込んでレポートをしたりで、始終読ませる。

著者は The New Yorker という伝統的左メディアの人間で、ソーシャルメディアみたいなテックの連中は disrupt とかいって従来の gatekeeper を駆逐したけど、それでいいんですかね?やっぱり何らかの gatekeeper 必要だったんじゃないんですかね?とたびたび問う。自分は著者の批判する techno-utopian の末席におり、この主張にはほぼ脊髄反射のレベルで鼻白んでしまう。ただ social media は逆戻りのできない社会実験の失敗だったいう確信は深まった。社会として有害なものが歴史の成り行きで消えない傷になる例は過去にも色々あるので(タバコとか)、それ自体は仕方ない。ただ社会としては失敗に合意のうえ move on してほしい。時間はかかるだろうけれど。

著者はトーマス・クーンを引きながら paradigm shift の話をする。そして alt-right のメディア戦略の根底にあるアイデアとして paradigm shift のインクリメンタル・バージョン Overton Window が繰り返し言及される。Alt-right による window-shifting に著者はしつこく警鐘をならす。

自分はアメリカの思想的シフトよりソーシャルメディアの先行きの方に気をとられている浅はかな techno-utopian なので、同じ文脈で social media という社会実験の精算について思いを馳せてしまう。つまり social media が有害であるというアイデアは新しい paradigm として世代が進むにつれ常識となり、まともな現代人の大半がタバコを吸わないようにまともな大人の大半がソーシャルメディアをやらない時代がくる、という形で実現される・・・と予言できる確信はまったくないけれども、実現されるべきだと思う。トーマス・クーンがパラダイムシフトのドライバを世代交代で説明したように。


なお自分はブログがソーシャルメディアと比べて本質的にマシだとは思っていない。ブログはインターネットにおけるブロードキャストのシステムがソーシャルメディアに向かう未完成な通過点で、その未完成さゆえに致命傷を逃れた・・・というかダメージがちょっとマシだった。(それでも致命傷には至っているかもしれない。)

インターネットをつかい friction free で voice を broadcast するというアイデアが根本的なヤバさを孕んでいる。人々が private messaging のような non-broadcasting media に流れているのはその煙からの避難なのだろう。逃げた先がマシかは誰にもわからないが、ここが燃えているのは誰の目にも明らかだから。

Zuckerberg とかは明らかにこうした時流を理解しており、だからこそ private messaging へのシフトを急いでいる。一方で Antisocial の著者が激しく批判する free speech の擁護を改めて打ち出してくる。Zuckerberg の中指的態度は Ukraine での密談を突き上げられ開き直った大統領の態度とどこか共時性がある。

NYTimes は 大統領を reckless, Zuckerberg を defiant と評しており、ほんとにそう思う。そして reckless なほうはともかく defiance にはちょっとだけときめいてしまう自分もいる。このときめきこそが alt-right のような social media mastery の狙う精神的脆弱性であり、日本語ではそれを中二病というのだった。

自分の中の techno-utopian で libertarian でしかし communist という矛盾は失敗した社会実験の一コマとして時代をうねる paradigm shift の波の狭間に消えてゆくのだろう。いいよ、消し去ってくれよ。

Skipping The Tech Conference

|

今日は The @Scale Conference 2019 なのだがまったく見に行く気が起きず、ふつうに仕事をすることにした。この「見に行く気が起きない」事実が悲しいので気分を書き出して気を済ませたい。

行く気の起きなさ、一つにはこのカンファレンス固有の事情。去年なんとなくさびしい気分になった記憶が億劫さを助長している。他人事感、自分のぼんくら具合をリマインドされる憂鬱さ。

もう一つはコンテンツの浅さ。浅いというと完全にアンフェアではあるものの、この 10 月の @Scale はテーマを絞らない総花的なイベントである。夏の Performance @Scale みたいにテーマが絞られていればいいんだけれど。

今年はトラックが AI, Data Infra, Privary, Security. 盛り上がらない。AI はテーマとしては興味あるけどこの手のカンファレンスは運用とかスタックの話が中心になりがちで、しかし自分はそれより理論やハンズオンを先に理解したいと思っているため噛み合わない。NN フレームワークを hello world したくらいの身の自分が MLOps とか言われてももねえ・・・という虚しさ。

あと @Scale はどうしても宣伝っぽさが強くなりがち。企業主催のテックカンファレンスは本質的に自慢大会なので仕方ないし文句を言う筋もない。Facebook の話とかまさに sponsor session なわけだが、Recruiting 目的ならともかく最近は PyTorch を売り込みたいみたいな下心が透けすぎていて辛かった。なお一昨年は TensorFlow を売り込みたい会社のセッション、去年は GPU を売りたい会社のセッションがだいたい似た雰囲気だったので Facebook を特別責める気はない。

そういえば東京にいたこともたとえば「デブサミ」みたいな総花的なイベントはあまり興味なかったな、と思い出す。東京なら知り合いに会える期待が背中を押してくれたが、ここではそれもないし。@Scale, 最初の頃は FBHQ 開催でもうすこし小規模だったのもあるし、自分もシリコンバレーヒャッホイ、みたいなテンションが多少はあったから盛り上がれたが、今はそういうのが全然ない。自分の中で旬が過ぎたのだろう。

申し込んだのに行かないのは悪いなとは思う。せっかくがんばって準備してくれてるのに、ごめんね。


テックカンファレンス全体への参加意欲も下がっている。貴重な有給をカンファレンスセンターで人の話聞いておわりにしちゃうの?みたいな。どうせ仕事休むならコーヒー屋で考え事しながらブログ書いたり本や論文よんだりした方がよくない?ビデオみるにしても積読テックトーク消化した方が割がよくない?みたいな気持ち。

テックカンファレンスは、そういうケチくささを押しのけ時間の無駄を承知で参加し、ある種の selendipity や inspiration を期待する性質のものだとはわかっている。でも今の自分はそういう無駄を afford できないね。別の言い方をすると、テックカンファレンスは時間を持てるものがその暇資産を投機的に使うための機会だとも言える。羨ましいことですが真似する気にはなれない。

一方でビデオでしかアクセスできないコンテンツというのはある。イベントに足を運ばないにせよビデオを見る行為はもうちょっと日常に織り込んでいかないとなあ。さいきん全然見てない。

出荷を見届ける - 2019

|

去年

寝ている妻子を背に家を出る。東海岸の 10 時は西海岸の 7 時。まだ暗い。ライブストリーム鑑賞会の会議室にいくと PM がドーナッツの箱を持ってきた。有難くいただく。アプリのチームからは自分しか来ていない。HAL の人が一人か二人、そして今日は Marc Levoy が出てきて喋ると聞きつけたリサーチ部門の人々が数名。

歴史上最も発売前にリークした電話機の座を獲得してしまっただけあり、発表会はバーンとした雰囲気が微塵もない地味なものだった。意図せぬ形で退屈な電話機の方向に向かっている、のだろうか。地味で売れるのかは謎だが。高いし。

今年は二年目だけあって、活躍とは言えないまでもいちおう何らかの仕事はした気がする。ハードウェアのメモリも増えることだし去年ほど大変ではないかと思っていたが、よく考えるとアプリは引き続き古いハードウェアで動かす必要があるし、アルゴリズム部門のやつらをはじめ人々はガンガン機能をつっこんでくるのでそれなりに仕事はあった。

もともとクライアントサイド AI/ML の舞台という淡い期待をもって異動してきたチームだけれど、アプリというのはそういうファンシーな話以前に「いつもちゃんと動く」という暗黙の期待を満たす必要があり、カメラは用途の都合から特に期待値が高い。さっと起動してぱっと写真をとれないと、たとえば子供がファニーな踊りを披露した瞬間を逃してしまう。「ちゃんと動く」という観点から見ると巨大で複雑で計算資源を hog し UI も増える AI 機能たちは邪魔にしかならない。

自分は「ちゃんと動く」を維持するのが主要な仕事なので、それを邪魔しがちな割に特別素晴らしい何かを実現してくれるわけでもない AI  というものへの評価は自分の中で下がり続けている。フェアな評価ではないかもしれないが、目の前でおきていることは認知への影響が大きいのだよ。たとえば今年のカメラアプリで自分が一番評価している新機能は「カメラモードでシャッターボタンを長押しするとビデオを撮れる」というものだが(たまたま iPhone 11 にも同じ機能が実装され、人々は先を越されて悔しがっていた。) ここには微塵も AI の姿はない。

まあ Live HDR+ は ML based な上に実際インパクトのある機能なので ML/AI がぜんぜん意味ないとはいわないけれど。AWB もついにぜんぶ learning based になったらしいし。なお Pixel Neural Core はすげえ使ってるよ。すくなくともカメラでは。Pixel Visual Core も無理やり NN のバックエンドになってたけど、専用の回路の方がきっといいのでしょう。

電話機の発表会に話を戻すと、今年はどういうわけか以前ほど強く "AI" を全面に押し出さなくなっていた気がして、そこは自分の価値観との align という点でよかった(これについては別に書きたい。)まあアシスタントとか文字起こしつきボイスレコーダーとか、いわゆる "AI 機能" なわけだけれど、その二文字のアルファベットを連呼しないだけでも前進といえる。我ながらなんてえらそうなコメントなんだ。


発表会がおわったあとは自席に戻り, 開発に使っていた Pixel 4 XL を dogfood 用にセットアップ。出荷は来週らしいけど、もう持ち歩いてもいいでしょう。(というか本当は発売前に使ってバグ報告などをしなければいけなかったんだけどね。)以下感想:

  • CPU (Snapdragon 855) はいちおう速くなっている。ベンチマークだけでなく、さわってもわかる。
  • Pixel 3 と比べるとやはりでかくて重い。カメラとして使うにしても小さい方がホールドしやすくて好き。なお Max な iPhone はもっと重いらしい。ハイエンド電話機の重量化。
  • 顔認証、別に遅くはないが自分はデバイス背後での指認証が好きだったので落ち着かない。慣れるだろうか。この議論は iPhone および Galaxy ユーザが繰り返したものなので、ことさら追加で書くことはない。
  • カメラ。光学ズームあるのはいいもんです。他社製品は二年くらい前からふつうにみんなレンズ2つなところにようやく追いついた・・・というと語弊があり、最近のハイエンドはレンズ3つが主流。一周遅れ。
  • ケースは以前より布っぽさが薄れ、硬い手触りになった気がする。そのうち熟れるかしら。
  • 手をひらひらする機能は使いみちがわからない。

今日から使って参ります。

 

PyTorch Mobile

|

PyTorch Mobile

PyTorch 1.3 の一部。Caffe2 の名前が変わったのかと思ったら、ほんとに PyTorch の一部らしい。ということで久しぶりにサイトなどを冷やかす。以下わかったこと:

PyTorch は 1.0 あたりで TorchScript なるものが追加された。TorchScript は Python のサブセットを C++ で実装したバイトコードインタプリタみたいなもの。コード表現 (IR) は直列化もできる。Python と違って GIL もないし機能も少ないので速いしスケーラブルだと主張している。

TorchScript のコードを作る方法は2つある。一つ目は "tracing". モデルの実行をフックすることで、どんな計算を実行するのかを記録する。Autograd 用に計算を追跡する仕組みはすでにあるので、その横でついでに tracing  すればよい(割とひどいコードになっている)。ここには関数呼び出しみたいな概念がない。計算はぜんぶ「インライン化」される、つまり分岐もなにもない計算だけの IR が生成される。

IR をつくる2つ目の方法は Python AST からの変換。Python の AST を TorchScript の AST に変換し、それを IR に落とす。Python AST から変換すると関数呼び出しやループや分岐といった情報の保存された IR ができる。

Tracing と AST の住み分けはよくわからないが、Python 上のモデルがサポートされている AST のサブセットに収まらない場合は tracing を使うのだろうか?そんなんでいいのかよくあわからないけど。

Python サブセットのテキストをパースして TorchScript の AST を作る仕組みもあるという。エンドユーザには関係ないが、内部的に python の build-in を実装するのに使っているらしい。これかな?この規模ならパーサ書かなくても C++ の DSL でやればいいのでは、・・・。

PyTorch Mobile の実体はこの TorchScript である。AI 人材が Tracing なり AST 変換なりで TorchScript の IR をつくり、直列化して保存する。アプリ開発者は PyTorch Mobile の API でその IR をロードし、外からデータを渡して実行する。TorchScript (IR の実行部分) は C++ なので Python が要らない。ちなみに直列化フォーマットは Python pickle (のサブセット) で直列化した IR が zip (のサブセット) でパッケージされている。ぜんぶ C++ で書いてあるのにこれとは、さすが Python first を名乗るだけあるな・・・(なお最初は JSON をつかっていたらしく "LEGACY" とマークされた JSON ロード用のコードが残っている。

TorchScript と並行して CuPy にあたるレイヤも書き直しているっぽい。まえは ATen とかいうやつを使っていたが c10 というプロジェクトに置き換えようとしている、らしい。

あと  TorchScript はいちおう different-i-able ではある模様。ただどのくらいちゃんと動くのかは不明。inference だけなら backward path はいらないし。


以下感想とか。

TF との比較でいうと、TorchScript は PyTorch として AST/Graph を一級市民にするという意味で TF 的といえなくもない。ただ SavedModel と比べてふつうの言語っぽい IR を全面に押し出しているところが違うといえば違う。TF だと XLA とか MLIR みたいな IR のレイヤは SavedModel の下にある。

PyTorch の一族には Glow という中間表現およびコンパイラがいた。こいつがどうなったのかと覗いてみると、特殊な ML ハードウェア向けコンパイラインフラという TorchScript より一段下の位置づけになった模様。じっさい Glow のツリーには TorchScript IR をロードするフロントエンドみたいなコードがある。TorchScript 自体はネイティブコードへのコンパイルとかできないインタプリタなので、CPU でも E2E のネイティブコード生成をしたいなら Glow がやるのかもしれない。

PyTorch Mobile が TorchScript ベースだとすると少なくともモバイルの Caffe2 はさよならなのかな。モバイルにかぎらずプロダクションは Caffe2 を捨て TorchScript に移行する見通しなのだろう。そして Caffe2 がいらないならモデルの可搬性が必要なくなるから ONNX もいらないね。Glow も TorchScript IR を直接ロードしているし。

リサーチ志向の PyTorch が苦手なプロダクションの穴を埋めようと ONNX 連合に参加した他の ML フレームワークにしてみたらひどい話だけれど、これが大企業同士の戦争というものなのでしょう。

ふたたび TF との比較に戻ると、PyTorch は一つの TorchScript 実装でプロダクションをサーバからモバイルまでカバーしようとしているように見える。一方 TF はモバイル用に TF Lite を作った。TF Lite は自己完結したシンプルなインタプリタで、カーネルとかもぜんぶ TF とは独立して再実装している。TF はもともと C++ 中心で TFX Serving とかも Python なしに動かせるんだから、モバイルもそれでよかったのではという気がしないでもない。少なくともある時期までは Non-Lite な TF をモバイルで使っていたはずだから不可能ではないはずだけれど、どうして再実装したんだろうね。でかすぎたのかな?

TF Lite はモデルのフォーマットも flatbuffer で TF 本体と互換性がなく、toco というツールで SavedModel を変換しないといけない。Python 上の PyTorch から .pt ファイルを保存してそれを直接モバイルにロードできる PyTorch スタックと比べ moving parts が多く cumbersome に見える.


TF は単一開発元で E2E で全部もってるのが売りだったけれど、フルスタックな割に中身がバラバラ(特にモバイル)。PyTorch は Caffe2 だの ONNX だの Glow だのとバラバラだったのが、1.0 過ぎたあたりから統合が進み部品も揃ってきた。

そして朝に 1-2 時間くらいパラパラとコードをドキュメントを眺めただけでここに書いたような理解ができるくらいドキュメントも揃ってるしコードもコンパクト。実際どうなのかはさわってみないとわからないけど、触ってみたくなる空気はある。

Fragments #27

|

2019/10/20 (Sun)

  • Skipping The Tech Conference
  • Podcast 終了にともない今後やることを整理しなければとおもいつつ全体的に気が散っている。起床も遅れているし、夜もなんとなくダラダラインターネットをして無駄にしている。立て直しについて考える。
    • 夜はダラダラしたくなった瞬間に手元にスマホしかないせいでインターネットしてしまう。せめて日記を書きたい。ダラダラしたい瞬間はだいたい(皿洗いなどがおわった)台所なので、台所に Chromebook を移動。
    • 朝おきられない原因の一つは発光目覚ましを妻子に貸し出してしまったためなので、おとなしくもう一台買おう。(安い類似品ないかなと探してみたところ、逆にたくさんありすぎて選べる気がしない Amazon's China Problem が発生していたので諦めて Philips 買います。)
    • Timeline (週ごとの日記エントリ)の冒頭に今週やることを書く。
    • 中期的にやりたいことをリストに書き出す。
    • 起床時間を記録する。かつどこかにレポートしたいので、来週から snippet train に復帰することを目標にする。
  • 見るべきビデオのリストを作ろうと Paper にドキュメントを作りかけ、ふと YouTube の watch later を眺め直す。むかしこれをブックマークにしようとしたときはソートができずに諦めたのだが、いつの間にかソートに対応している!ウェブでもアプリでもソートできるじゃん!これでいいかな。FB の @Scale だけは YT にないのでなんとかする必要があるけれど。一瞬 FB から YT にアップロードしなおせば、といった考えが頭をよぎるがそれは違法です。でもサムネイルとリンクをアップロードするだけなら・・・とか頭をよぎるが、おとなしく別のリストをもちますわ。

2019-10-19 (Sat)

  • 奥様が Joann でランダムなボタンの詰め合わせを買ってきて以来、子とボタン遊びが捗る。しかし黒いボタンを白いボタンと茶色のボタンを色別にわけようねこの薄い色は白かな茶色かなー・・・とかやっていると racial implication がありすぎるので赤とか青とか ethinically safe な色のボタンが欲しい。
  • 今週も夜に朝に調理などするものなり。Audiobook listening が捗る。

2019-10-18 (Fri)

  • 会社の社員旅行。建前としては team building event のはずだが、子連れでいくと子供の世話が overwhelmed すぎて同僚と会話する暇などなく単に会社の金でホテルに一泊するイベントと化する。ありがたいことだが、いいのか・・・という気分。それでも夜に子を奥様にまかせて 1-2 時間雑談に参加できたのはよかった。
  • ドライブ中にとおりがかった Catroville, the world center of artichoke を名乗り deep fried artichoke を推していたので食べてみたら、唐揚げだった。

2019-10-16 (Wed)

  • ストレス高すぎだったらしく、頭痛。
  • Flushot done. 同僚がチームカレンダーに会社主催の注射大会を登録しておいてくれたくれたので思い出せた。
  • 子に文章・・・というか複数のひらがな・・・を反対側から読むことを教えたら楽しいらしくいろいろやっている。

2019-10-15 (Tue)

  • 出荷を見届ける / 2019
  • シュガーの力で締め切りを乗り切ったりしていたら、すっかり体重がリバウンド。
  • 最近、子にオムレツのための卵を割らせようとしている。しかしさすがに難しい模様。猫の餌と水も子にやらせようとしている。やらせたいことは色々あるけど、朝も夜も時間がない。人生こんな時間なかったっけ?我々親の時間がないのはさておき、子の時間がないとは一体。
  • 天気予報機すなわち Google Home, 和英 lookup にはけっこうつかえることが判明。子に英単語を教えるのによい。

Organizing The Bookmarks

|

突然やりたくなって時間を無駄にするもの。部屋の掃除、ノートアプリの物色、カメラのウィンドウショッピング、ブラウザの設定。今日はブックマークを整理します。なぜ。

なおここでいうブックマークは「読んだ」と記録するソーシャルブックマーク的なものではなく、普段 navitational に使うもの。

仕事では Github Pages 的なやつにリンクを集約している。同じドキュメントには頻繁に使うが覚えられない CLI のスニペットなども書いてある。素晴らしいアプローチとは言えないが、いちおう機能しているし、保守もできている。その前は仕事ログの Google Docs 冒頭に同じ情報を書いていたが、仕事ログを書くとき目障りだったので Docs からは追い出した。Docs は開くのが遅いし二回クリックしないとリンクを辿れないし、どのみちブックマークには向いてない。

個人のブックマークもどこかのページに集約しようかと思ったが、ふと思い立ってブラウザのブックマークを使ってみることにした。ブラウザのブックマーク, Omnibox (アドレスバー) で履歴を検索するのが Chrome Way だと思っていたし sync で壊れがちな印象があったので使っていなかったが、サイトにブックマークをまとめようとしている時点で履歴検索は敗北してる。再評価しようではないか。ということで整理。工夫したこと:

  • ブックマークは bookmarklet 含め常に Omnibar 経由で使うよう練習する。
  • Omniにbar 検索で一意に絞りこめるようタイトルを必要に応じ編集する。
  • ぜんぶブックマークバーに置く。Bookmark Manager は使わない。
  • フォルダ名に絵文字を入れる。認知性があがるし、見た目もファンシー(重要)。
  • Omnibar から使うので理論的にはどこに置こうがどうフォルダ分けしようが関係無いわけだが、片付けの成果が目につくところにあるとメンテを続けるする気になりやすい、気がする。
  • Sync 壊れは気づいたら直す。(主に重複や索条項目の復活が観測されている。)

まあ、ふつうに便利。

今までブックマークをちゃんと整理していなかったのが不思議に思えてくるが、social bookmark を使ってあげたい青春があったり、履歴検索に正義を見出していた時期があったり、ゼロ年代世代にありがちなこじらせだったね・・・と時代のせいにしておく。

アメリカの騒音

|

via Why Is the World So Loud? - The Atlantic

Arizona に住む男が近隣を覆いはじめた謎の騒音に苛立ち、正体を追いかけたらデータセンターだった、なんとかしたかったが行政とかは全然助けてくれなかった、という話。2つの点で興味深かった。

まずアメリカってなんだか妙に色々音がデカイなとは引っ越してきてからずっと思っており、その印象を裏付けてくれた面があること (aka. the confirmation bias.)

家の外は電車、車、芝刈り機に枯葉掃除機、謎の排熱施設など。屋内も掃除機、洗濯機、食洗機、冷蔵庫、空調までなにかと音がデカイ。まあアメリカは主語でかすぎで a suburban cheap  apartment dweller perspective である点は disclaimer すべきだけれども、音でかいよね。なにかと。日本は無駄な音楽やアナウンスを流すスピーカーからの音害がしばしば非難されるが、それ以外は割と全て静かじゃん。スイスとかフランスとかそれすらなく完全に静かで素晴らしかったなそういえば・・・。

二点目として、データセンターと石油の比喩的な近接。巨大資本の富の源泉である点には以前から親しさを感じていたが、赤くて貧しい州の規制の弱さにつけこんで環境を犠牲に資源を吸い出している点にも類似性がある。データセンターは建物がでかく排熱がある点である程度は環境負荷があると誰もが感じているだろうけれど、個体差はあるとはいえまさか騒音が届くような近所に人が住んでいるとは思わなかった。

データセンターの騒音は、他の環境問題にくらべると技術的にはまだいくらでも改善の余地があるように思える。防音の施策は色々ありうるし、立地だって妥協できる。一方、問題の相対的な subtle さと巨大資本のアグレッシブさを照らし合わせると対策がなされる期待も薄い。記事も漂う悲しさ、無力感を伝えようとしている。資本と地域コミュニティの一方的な戦い。

こうしてみるとデータセンターの騒音ってすごいアメリカ的な現象だね。そしてふと思い出すに、大手町のデータセンターはすごく日本的というか東京的な存在だった。金融オフィス街のビルの一つがさりげなくデータセンターであるカオス感というか詰め込み感というか。クラウド以前の牧歌的な存在だったとも言えるが。シンガポールのデータセンター群はどういう立地なのだろう。


なおリンク先の記事は無駄に長い上にデータセンターの騒音問題自体はあまりちゃんと取材していないので、がんばって読む価値は薄め。

Another Goliath

|

The State of Machine Learning Frameworks in 2019

ML 再入門するにあたって TF2 やるか・・・しかしやりたくない・・・という気持ちを察したかのような記事で、やはり PyTorch の方が良さそうと背中を押された。

TF2 の PyTorch に対する敗北には色々感じ入るものがある。基本的には Facebook の中の人ががんばった、えらかった、でおしまいなのだけれども、負け方に既視感を感じる。

最初に思ったのは、これは MapReduce (Hadoop でもいいよ) の Spark に対する敗北に似ているな、ということ。MR は Mapper と Reducer (ついでに Partitioner と Combiner だっけ?) というわりかし剥き出しのプリミティブをプログラマに強いることで堅牢な並列計算を実現したが、より親しみ深い抽象と対話的実行を備えた Spark にやられた。その後 MapReduce には Flume (Beam)なり Hive なりといったマシな抽象が与えられはしたものの、安い計算資源をバッチで使う根本のところは変えられず対話性はないままだったし、どのみち遅きに失し今日に至っている。

TF1 はデータフローのグラフというわりかし剥き出しのプリミティブをプログラマに強いることで並列実行やら最適化やらのコンパイラテクノロジを ML フレームワークに持ち込むことができた。しかし Python の親しみ深さを活かしつつ tape-based すなわち operator overloading で計算トラックすればいいでしょと対話的実行を後押しする PyTorch にやられた。TF2 は対話的実行デフォルトに方針を切り替えたけれど、相変わらず複雑なデータフローのグラフすなわち SavedModel が canonical representation である重苦しさは拭えない。

難しい問題を解くため最低限の抽象を頼りに剥き出しの複雑さと向き合う Jeff Dean 的アプローチにはハイテク企業らしさがあって、自分はけっこう好きだ。けれどコミュニティとかエコシステムみたいなものを相手にする必要があると、そういう荒削りさが足を引っ張る。プログラマへの優しさが計算資源への優しさを打ち負かす。そして競争に勝ってマインドシェアを獲得すると、計算機への優しさは事後的に解決されたりする。

もうすこし自分に身近な例で考えると、これは Mozilla (Gecko) の WebKit に対する敗北とも似たところがある。Gecko は XPCOM や XUL などクロス環境かつクロス言語でアプリケーションを作れる仕組みを目指したが、MacOS べったりで C++/Objective-C から HTML をかけるだけの WebKit に敗北した。


これらを「古くて巨大で複雑なテクノロジが新しくて小さく気の利いたテクノロジに負けた」ストーリーとして解釈するのは近似としてはあっている。でもそういう雑でメタな話は Malcolm Gladwell と Clayton Christensen にまかせ、ソフトウェア開発の文脈で考えてみたい。

自分は MapReduce や TF の複雑さが不必要なものだったとは思わない。最終的にはいらないものになったかもしれないけれど、登場した時点で目の前の難しい問題と戦うためには必要だったと思うし、そこにある種のかっこよさがある。Gecko の複雑さが必要なものだった、という主張は生理的に受け入れがたいし実際ゴミも混じっていると思うが、とはいえ 「Windows をやっつけたい」という当時の時代背景を考えると同情はできる。実際、なんらかの価値があったからこそ一度は勝利を収めたわけじゃん。

自分は複雑なテクノロジでフロンティアを切り開く Jeff Dean 的世界観が好きだしすべてのソフトウェアはリファクタリング可能と信じたい宗派なのでどうすればこれらのレガシー巨人が小粋な後発と戦えただろうと考えがち。でもそれよりは、後発はどうすればレガシー巨人の弱みに付け込めるかを考える方が健全に思える。それは結局 Christensen なのではと言われるとそうなのだけれど。

・・・などと与太話を続けようかと思ったが、せめてもうちょっと TF2 なり PyTorch なりに詳しくなってから書くべき話に思えてきた。終了。

 

Open Domain-Specific Architecture

|

OCP のサイトをみていたらこんなアナウンスがあった:

関連 PDF:

OCP は言ってみればデータセンターで使うハードウェア CPU とかの「入れ物」を標準化、公開するプロジェクトだった。たとえばラックであったりシャーシであったり、あるいはもうちょっと踏み込んでネットワークスイッチであったり。加えて NIC のようなわりかしコモディティ化しがちなハードウェアの設計も提供している。こいつらは組み合わせて使えることが期待されている。(OCP ベースの製品一覧。)

ODSA はその SoC 版といえる。従来の OCP は、たとえば CPU や GPU のような知財は普通に Intel なり NVIDIA から買ってきていた。OSDA も SoC の個々のコンポーネントは世間で売られているものなり自社開発したものを使う。ただしそれをパッケージングするための標準を決めたい。

キーとなる意思決定が Chiplet の利用. Snapdragon のような SoC は複数のコンポーネントを一つの ASIC にギュっと詰め込んで、一つのプロセスで彫り出す。一方、OSDA では個々の機能単位を "Chiplet" として独立に製造し、それを multi-chip module としてインテグレートする。Monolithic Service に対する Microservices みたいなもん。なので先に SoC と書いたけど違う気がする。System-on-Chip じゃない。

Chiplet はコンポーネント毎に異なる製造プロセスを使えるしそもそも違うベンダーから買えるし、ダイを切り出す単位が小さくなるので歩留まりもよくなる。一方で Chiplet 間をつなぐのは大変だし電力も多くなりがち。なのでその欠点を小さくするようなデザインを標準化して、標準にのっかった Chiplet ならぱぱっと組み合わせられるようにしましょうね、そうすれば Domain Specific Architecture のチップを作って売り買いしやすくなるでしょと主張する。


言われてみると DSA のチップを作っても単品では使い物にならないので SoC を作ってる人々に売り込むなり自分でフル機能の SoC を作る必要があるわけで、なかなか大変。コアのビジネスに集中するために周辺は標準化のうえコモディティ化したい。

じっさい OSDA を提案しているのは Netronome という NIC を売っている会社のひと。eBPF を実行できる DSA をつくったりしているらしい。こういうのを NIC なりサーバの中なりに配備する際、OSDA のような標準があると嬉しいのだろう。そこに NN accelerator を OCP でつくりたい Facebook などが乗っかってきたという構図。

いまは掛け声ドキュメントしかないので、2-3 年たったころにまた冷やかしてみたい所存。


掛け声ドキュメント自体は DSA に限らず従来の accelerator の現状をざっくり説明していて面白かった。たとえば cyrptcurrency とか冗談ではなくほんとに ASIC でやってるのだなとか、アカデミアでは Near Memory Computing というのがはやってるらしいとか (1, 2). たまに普段と毛色の違うものを読むと発見が多くて良い。


2019/11 追記

Chiplet は 2018 年に AMD が採用したことで話題になっていた

Fragments #26

|

2019/10/13 (Sun)

  • ブログに書きたいことのヘッドラインを記録した "Drafts" という Paper doc を pinned tab にしている。いまみたら 50 以上の項目がある。こいつを burn down する休暇が欲しい気がする一方、たぶん同じ日に長い時間文章を書き続ける体力はないのでこれが消化される日はないのだろうなとおも思う。そういえばむかし "あとで書く" という本文のブログを書いてる人がいたな・・・。ちなみにリストを FIFO で消化する律儀さはなく、思いついたどうでもいいことをグチャっと書くこともよくあるすなわち: Organizing The Bookmarks, アメリカの騒音
  • 記事にするまでもなく、ここにぐちゃっと書き出してしまえばいい話題も多い気がしてきた。ぼちぼちやっていきたい。

2019/10/10 (Thu)

  • Preschool dads day aka 父兄参観。子供同士話が通じないのは現状実害ないけど、teachers の指示がわからないのは厳しいなあと思う。これが週二回じゃ英語できるようになりそうもないというのは理解した。一方で英語がわからない状態に慣れる、という段階も 5 歳くらいで突然英語環境にぶちこまれるよりはマシではあろう・・・。
  • そんな中、子が「かんばー」を覚えてきた・・・が、我々と話すうち「かむばーっく」になった・・・。Pumpukin にしろ Comebaku にしろ、よっぽど存在しない母音を発音してしまってるのだなーほんとごめんね・・・。
  • Links:
    • How to Get Your XPS 15 Running Cold : Dell XPS は排熱 mod が盛ん。ファンノイズがかなり煩わしいので自分もやろうかな・・・。これがいちばんがんばってたやつ。
    • 2019/09/01 - 〜生活と消費〜 #世界一周 元 CTO いつの間にか FIRE してた。CTO までいけば上がれるというのは夢があってよいような気もする。そして人生に困ったら雇ってもらいたい知り合いが FIRE してしまうリスクに気づく。
    • LinkedIn Economic Graph LinkedIn からの求人メールで彼らのおもしろプロジェクトとしてリンクされていた。LinkedIn データによる US 内労働市場分析。TX が色々と活発だけど、これは単に人口が多いからなのだろうか。
    • Me and My Whistle-Blower - The New York Times ドイツ銀行の whistle blower は自殺した幹部のヤク中息子だった、というストーリー。よい。
    • Elided Branches: Are you out of alignment? やりたい仕事と求められてる仕事がずれてくると出世できなくなるよね、色んな人と沢山話して求められてるやりたい仕事を探そうね、という話 by The Manager's Path 著者。人と話すのは常にボトルネックである。しかし内向的とはそういうものでしょう。
    • My Time at Snap | Hacker News Snap の悪口と思いきやひどい上司にあたった、という話。コメ欄もひどい上司ストーリーで盛り上がっておりよい。

2019/10/09 (Wed)

  • 子が風邪。奥様も若干風邪のもよう。夜が寒かったね。自分はだいたい直った。
  • ストレスレベルが高く集中力が低い。締め切りが近いのによく原因のわからない再現もしない性能バグがあり、各人が勝手なことを言って議論が混乱している。内製のバグトラッカーのできの悪さでもあるし、たらいまわしカルチャーの帰結でもあるし、アームチェアデバッグしたがる一部登場人物の持ち込む非生産性でもある。人々の(精度の低い)コメントをもとにコメントだけしないで、ちゃんと手元で動かしてトレースなりダンプなり解析したうえで情報を集めて分析して、それからなんかいってくれ・・・。
  • こういう不確定な状況では自分がたてている仮説とその根拠と仮説を証明する・しないためのアクションを書き出して一歩一歩進めないとぼんやりログを眺めることになりがちだ、とわかっていながらなかなか一歩を踏み出せない procrastination で半日くらいつぶす。 我ながら姿勢がなってない
  • というを書いたあとに思うこととしては、正しい姿勢をとれないとき procrastination を生み出す原因についてちらっと考えてみるのも割と効き目がある気がする。苦手なことをしているせいな場合もあるが、間違っていることをしていると暗に感じているケースもある。今回のバグでいうと、簡単にできるが効き目が怪しい変更の可能性が目の前にあり、それをやれば仕事をしているような顔はできるが効き目ないだろうな・・・というモラル上の葛藤がある。それを直すのは tech debt とかではないからやればいいんだけど、その時間に他のことができるのではという迷いがあり、一方で「本当の原因」を追いかけているうちに締め切りがきてしまうのでは、という焦りもある。すべて締め切りが悪い。

2019/10/08 (Tue)

  • 来週隣人と San Diego 出張のはずだったが締め切り直前性能バグの調査で準備ができなそうなため自分はパス、と申し出たら隣人たちもふくめ出張延期となった。ごめんね。国内出張は融通が利きやすくて助かる。翌週の切符をまだ買ってなかったのは我ながらどうかと思うが・・・。
  • 妻子ある身分における出張の圧倒的めんどくささについて。ワンオペになるけどおねがいね、と奥様にたのむ気の重さ、所要カルマポイントの量が大きすぎてなるべく行きたくないバイアスが働いてしまう。残業もそうだけど、みんなよくやるよねほんと・・・。もっといえば仕事関係でルーチンから外れることすべてが億劫に感じる。これは間違いなくキャリアの prospect を損ねているが、その事実に意外さは無い。残念さはあるが不満もない。ああ、こういうかんじで何もできなくなるのかという納得があるだけで。
  • 仕事の都合で家族に負担をかけられるひとは、おそらくその負担分を何らかの形で「返済」できる、償えると感じているのだろう。自分はそういう見通しを持てないので、赤字に踏み込めない、ような気がする。出張なり残業をしたら関係が少し損なわれて、時間とともにある程度は回復するけれど完全には戻りきらず、それを繰り返すとやがてみな失われる、というのが自分のメンタルモデル。
  • 我ながら絵に描いたような反 Learned Optimism 思考であることよ。読み直そうかな。

GPUs On The Cloud

|

クラウドに抱いていた素朴な疑問を素人的に読み解いていくシリーズ。

ぎもん: クラウドの GPU って自由に数を選べるけど、どうやってハードウェアをラックにぶらさげてるの?ロボットアームみたいのがガチャンと GPU を抜き差しするの?それはなさそうだが、実はロボットがやってますと言われても驚かない程度には無知。

秘密主義のクラウド業者に対する嫌がらせ勢である OCP が何かやってないかと探してみると、まず Facebook が Big Basin (および v2) という GPU ノードみたいのを発表していた。

同時期に Microsoft と NVIDIA が HGX-1 および HGX-2 という似たようなラック刺し GPU クラスタを発表している。

どちらも GPU 同士は "NVLink" というオンボードのバスで繋がっている。CPU はない。CPU を持つ "head node" すなわちふつうのサーバーノードに PCIe のケーブルでつなぐらしい。PCIe, ケーブルとかあるのか。

つまり、少なくともラックの中で GPU はサーバと別のシャーシには入っている。ではこいつを複数の "head node" から共有できるのか? HGX-1 はできると書いてある。PCIe のポートが外側に 4 つあって、それぞれ別の箱をつなぐことができる。CPU のある head node と繋いでもいいし、もう一つ HGX-1 とつないで倍の GPU を一つの head node に見せてもいい。柔軟。(文中にはでてこないけれど、世間では Multi-Root IO Virtualization というらしい。)

なお HGX-2 は Open Compute ではないらしく NVIDIA のハッタリドキュメントしか見当たらない。こいつらは一個の head node にどれだけ大量の GPU をぶら下げるかにしか興味がなさそうで自分の疑問には答えてくれない。


当初の疑問にもどり、GPU はどうやってラックや他のサーバにぶらさがっているのか:

  • GPU だけを 8 個なり 16 個なり詰めこんだシャーシを作り、ラックに刺す。
  • そのシャーシからは 1-4 個の PCIe ポート(!)が出ている。このポートを介して CPU のはいったふつうのサーバ "head node" にぶら下げる。
  • 複数のサーバにぶらさげるケースは強調されていないので、現実には需要ないのかもしれない。それよりはいかに大量の GPU を詰め込めるかを各社とも強調している。

彼らは CPU と GPU を disaggregate できたぞというけれど、仮想化して切り売りする段階ではすくなくとも head node の CPU とは抱き合わせて売る必要があるため bin-packing の制限はあるはず。そこは allocation algorithm のがんばりで足りるのだろうか。


Resource allocation どうすんのかなと K8N を覗いてみると... limits というセクションに GPU の数を指定するらしい。Limits というセクションはたとえば CPU の速度やネットワークカードの帯域などを細かく指定するのに使う。それとおなじように GPU の種別などを指定し、クラスタマネージャはそれに従ってハードウェアを切り売れば良い。

なんとなく CPU を売り切ってしまい GPU が余って困ったりしないのか疑問だったけれど、それは GPU に限らずリソース全般に入れることなので GPU 固有の難しさというのは (自分が理解できるような範囲では) ないのかもしれない。

といったところでだいたい謎はとけたので満足した。ウンチクとして以外に一ミリも価値のない知識だけれど、雑学というのはそういうもんです。

 

How It's Been Ending (7) - The Ecosystems

|

業界どうなんのかな、という雑な印象論。

モバイルだと、垂直統合の Apple はいい位置にいるなと思う。チップセットから OS, アプリまで全部持っているので、dark silicon の使い方を自社内に閉じたまま探求できる。自分の勤務先を含む水平統合の競合陣営は会社を跨いて協業するオーバーヘッドが大きい気がする。たとえば Snapdragon 855 の DSP セクションを見ると 845 とくらべ色々記述が増えているけれど、どれがリアルで、世間のデバイスはそのうちどれだけを使っているのだろうか。

クラウドはよくわからない。GPU はすっかり普及したけれど、FPGA クラドみたいのは一般的になるのだろうか。クラウド業者の中は色々なものが commoditized され software defined になるというのが 10 年前くらいの見立てだったけれど、また段々と専用のチップに戻っていくのだろうとは思う。まあクラウド業者の中身は自分にはあまり関係ないなので、がんばってくださいというかんじ。なお詳しい人に AWS はじっさいアクセラレータを頑張っていると教わった。

FPGA はともかく GPU はどのくらい存在感が増すのだろね。NN/ML で必須になったのはさておき、その必須化に伴いクラウドで GPU が使いやすくなった結果他の用途でも利用が広まることはあるのだろうか。Facebook とか近傍検索に GPU を使ってるらしいけれどこの手の話題は増えるのかな。自分で CUDA を書くことはないにせよ、デプロイの制約とかは変わってくるよね。

モバイルに話を戻して、アプリ。アプリは現状 CPU 以外だと GPU くらいしか使えない。NNAPI などを介すると TPU 的なものは使えるようになるんだろうけれど、GPGPU の自由度に比べだいぶ制限されている気がする。まあ GP-GPU ももともとは general purpose じゃないものを無理やりハックするところからはじまったので GP-TPU みたいのも出てくるのかもしれない。サーバサイドだと MLIR がそれなのかもしれない。こういうのがモバイルに降りてくる日は来るのかねえ・・・。

あるいは、モバイルは CPU の停滞とともに沈み、Alexa つきデバイス みたいにチップと一緒にソフトウェアを開発するビジネスが流行るのかもしれない。あまり信じられないけれど、モバイルに強くバイアスされている自分の判断はあてにならない。

そういえば Nest Mini は Edge TPU 的な何かが載っていると宣伝していた。こういうデバイスでプログラミングしたいならモバイル以外の仕事した方がよいのかもしんない。しかし結局 TF Lite つかっておしまいとかいうオチか・・・。

モバイルもクラウドもボイスデバイスも、今はでかい会社が覇権と領土を巡って小競り合いをしている時代という印象。でも Innovation Happens Elesewhere を信じて育った世代としては垂直統合のフェーズはさっさとおわらせてまたモジュラーな世界に帰ってきてほしいもんです。シリコンの上の計算資源、大企業だけで囲い込まず市井の開発者にも還元してくれ。

10 年くらい待ったらそうなってるのかね。その頃には引退したい気もする・・・。


といったところでこのシリーズはおしまい。

How It's Been Ending (6) - Me

|

身近な性能問題もだんだんと CPU と OS だけ詳しくてもダメな場面が増えており、不安。

たとえば GPU. かつては GPU を同時に使うタスクは一つか二つ(すなわちアプリ画面の描画と、場合によってはスクリーンの合成)くらいだったのでその描画のコードを書いている人ががんばって速くすればよかった。しかし NN なり画像処理なりで GPU を使う人が増えてくると、複数の GPU タスクを同時実行したくなる。結果として GPU の overload がおこる。

複数タスクによる overload を解決するには個々のタスクを実装した人ではなく複数タスクのタイミングとかを仲裁するひと、たとえば自分とか OS の人、とかが問題を分析してタイミングを小細工したり (自分) スケジューラをいじったり (OS の人) する。

しかし Systrace にしろ vmstat にしろ top にしろ GPU のロードはまったく見えない。GPU のタスクを post したり同期を待ったりする CPU 側のカーネルスレッドのアノテーションは見えるから、それで間接的に GPU がなにかしていると理解するしかない。しかしこうした GPU 情報の粒度や正確さはカーネルの提供する CPU の observability とくらべカスみたいなものであまり役に立たない。

世の中には Snapdragon Profiler というのがあり、これが最後の希望。しかしめちゃめちゃ使いにくい。昔使おうとして挫折した。しかもオープンソース側のツールにまったくインテグレートされていない。不便すぎる。その使いにくい GUI に割く開発資源があったら performance counter なりカーネルドライバの API なりを文書化して upstream のツールから見えるようにしてくれ!カーネルはオープンソースにしなくていいから!ARM はしてるけど(野良だった。) なお ARM は ARM で Mobile Studio という似たような GUI ツールを作っているらしい。はー・・・。

GPU はまだツールがあるだけマシで、これが ISP とかになると完全にお手上げ。ましてヘンな DSP たちときたら。

あるとき仕事のアプリで誰かが何らかの新機能を flag flip したところ、どうも ISP を酷使しすぎで熱の問題があるらしいとバグの報告がありフラグは再びオフに、という出来事があった。しかし Systrace をみても全然違いがわからない。

熱の問題は電力消費が原因なので Monsoon で電力をモニタリングすればデバッグできることはできる。そうした電力 sensitive な機能を開発する人や一部の CI インフラはこれをつかってるのだけれど・・・リアルな電力を測るしか性能問題のデバッグをする方法がないとか荒々しすぎませんかね・・・電力読める sysfs の endpoint なんでないの・・・。(2017 年の LWN の記事から同じ不満を訴えるスライドがリンクされいた。)

一方で OS の中の人からやってくる advisory は相変わらず Systrace と、あとはせいぜい I/O を睨んだ理解にもとづくコメントばかり。アプリの起動みたいに CPU と I/O だけで説明できる問題を追いかけているうちはそれでいいけど、起動したあとはもうだいぶブラックボックスだよ?アプリの中の人がヘマして電話熱くなってもお手上げじゃない?だいじょうぶなの?

自分は Linux カーネルに詳しくないので、OS の中の人とまともに話ができるくらいは詳しくなりたいという希望がある。一方で、カーネルや CPU の外に熱や性能のボトルネックが生まれつつある。一方で GPU にしても ISP にしても結局アプリとの間にはカーネルが挟まっているので、その理解をさぼると E2E で問題を理解できない。きびしい。


といった動向から身の振り方を考えるに・・・

短期的には、Snapdragon Profiler はどれだけ出来が悪くてウンザリでも触れたほうが良さそう。こういう残念なツールへの習熟は仕事のための税金として受け入れよう。

長期的には、それでもいちおう Linux にはもうちょっと詳しくならないとダメだなと思う。古典として。サーバ側でも意味のある知識だし、潰しは効くでしょう。

長期的な課題そのにとして、Out-of-CPU への理解を深める上で今更ながら CUDA を実際に触って見る必要もあるかもしれない。これももはや古典。ほんとはモバイルの GPGPU をさわるほうが身近なんだけど Android の GPGPU は mess すぎ。OpenCL を SDK に入れなかった罪を反省してほしい。TF Lite も Caffe も OpenGL ES とかマジかいなと思う。Vulkan Compute とか冷やかしてみたほうがいいのかなあ・・・。

より投機的には Cloud の FPGA みたいな方向性もあるけど、自分はそんな最先端じゃなくていいです。

Attention Industry Complex

|

こどもちゃれんじに対する自分の抵抗をもうすこし長々と言語化してみる。気を済ますためであって、世間の親たちにケチをつけたいわけではない。

じぶんのこどもちゃれんじへの懸念は、Attention Resistance 勢すなわち Digital Minimalism, The Attention Merchants, Irresistible などを真に受けている人々の延長にある: この手のエンゲージメント強化型幼児教材は当初の目的(学力などの獲得)のためにユーザ(子供)の attention/engagement を exploit しすぎている。

一部の attention resistance はここに企業の悪意を見出しているが、個人的にはインセンティブのフレームワークみたいなものすなわち The System の帰結だと考えている。

ユーザーの Engagement すなわち DAU や MAU や似たような指標というのは、長いこと純粋な善だと考えられてきた。結果としてこれを the north star とする製品開発チームは多かった。たとえば例の OKR の本では YouTube がユーザの総視聴時間を the north star とした事例を OKR のケーススタディーとして紹介している。エンゲージメント駆動のわかりやすさはスケーラブルな問題として多くのインターネット企業の推進力となった。

が、今は Tristan Harris あたりからはじまった批判が高まって Screen Time(iOS)Digital Wellbeing (Android) といったスマホ機能ができたり、ソーシャルメディアについてもしばらっくれきることはできず、最近は Like を隠すかもとまで言い出した。

そういうインターネットの動向を踏まえ子供向け教材コンテンツを見直すと、こいつらも似たようなものなのではないかという疑問が頭をよぎるのは自然でしょ。

類似性について考えるため、インセンティブの構造に目を向ける。

教材コンテンツを評価するのは子供(ユーザ)である。一方、金を払うクライアントは親である。親は基本的に子供の学力(思考力でもいいよ)を高めたいとコンテンツに金を払っている。しかしそれだけではない。まず、子供がコンテンツを好きになったなら、よほどのことがない限り取り上げたくはない。子の喜ぶことをしてあげたい親心がある。そして、子供が「一人で遊ぶ」コンテンツを重宝する親もいる。なぜなら子が一人でコンテンツを消化している時間は親が自由に使えるから。子供の相手で疲弊している専業主婦にとって、これが特に重視されがちであることはオンラインのレビューなどからもうかがえる。(こどもちゃんれじのサイトでもその効能を示唆している。)

このユーザ-クライアントの不一致にはインターネット企業との相似を見ることができなくもない。親と子の関係は、広告主とユーザの関係とはだいぶ違うけれど。

教材であるという建前を無視すると、教材コンテンツは「アンパンマン」のビデオを見せるのと大差ない。タッチペンは対話性があるぶんより没入度が高い可能性すらある。アンパンマンは没入度、中毒性の高さが広く知られており、子供を一時的にほっておきたい親たちに広く支持されている。同時にアンチスクリーン派には警戒されている(とおもう。)別の言い方をすれば、アンパンマンは「厳しい親」が伝統的に警戒しているアニメというメディアの枠にいることで、よくも悪くもゾーニングされている。

エンゲージ系教材は「学力」を隠れ蓑にしてエンゲージメント、没入を売っている面がある。この二重性に自分は強い反感を感じる。「健康」のラベルで砂糖の塊を売るシリアルとも通じているし、「メリット」を盾にその「コスト」を押し付けているという digital minimalism のソーシャルメディア批判と同じ構造でもある。

というわけでやめとくかという判断に至った。


この議論が孕むいくつかの居心地悪さについても記録しておく。

まず、そうはいっても世の中のメディアは教材に限らずエンゲージメントとアテンションで回っているんだからいつまでも逃げられはしないんじゃないの?解禁したときの反動とか心配ないの?という懸念。これはもっともではあるが、基本的に年齢が低いほど心身が無防備で没入系コンテンツの副作用が大きいというのが(副作用を信じる人たちの間での)共通見解なので、先送りは総合的にはマシな判断だと思うことにしている。待ってる間に時代の風向きが変わるかもしれないし。

つぎ、個人的といっても他の親のやってることの批判になってますよね、でもほんとに時間がない親だっているんですよ仕方ないでしょ!みたいな意見。親の時間のために子供をほっとく場面が必要なのはよくわかる。世の中にはベストではないが妥協として受け入れていることは色々ある。自分だって特別 pround でない選択は人に言わないだけで色々している。人によって priority は色々なので、他人の意見にいちいち腹をたてずお互い自分の価値観を信じてやってまいりましょう。

そのさん、おまえは attention にやられてるんじゃないの?それで子供に教育とかできんの?みたいな心の声。自分たちの親の世代が子供にピアノをやらせたかったように、自分たちの親の親の世代が子供を大学にやりたかったように、自分は子供に集中力をあげたいのだよ。なぜなら、それが今の時代には大切だと思うし、自分にはそれがなくて苦労しているから。こうした親の「希望を背負わせる」滑稽さは自覚しているけれど、笑ってもらっていいです。そういうもんです。

さいご、そんな神経質になんなくても大丈夫じゃないの?という話。まあそうかもしんない。ただ attention との付き合い方は自分の人生にとって重要な課題となっているので、無視はできない。他の人にとってどうでもいい話題なのはわかってるのでそっとしといてください。

技術の古典化

|

世の中には「終わってしまった技術」というのがあって、そういう技術相手にはなるべく時間を使いたくない。ただ「終わってしまった」にもバリエーションがあり、完全には無視できないこともあるなと思う。

無視してよいものについて先に考えると「死んでしまった技術」はもう放っておいて良い。わかりやすいところだと WebOS とか、要素技術でいうと prototype.js とか。厳密には死んでしまったわけではないが行き止まりになった技術もある。仕事はどこかにはあるだろうし何かしら変化はしているだろうが、いま縁がないならこの先も無視してよいようなもの。たとえば COBOL のようなメインフレーム技術や、多くの人にとっては Windows アプリ開発も「行き止まり技術」だろう。

一方で、終わってしまったが死んでもいなければ行き止まりになってもいない技術もある。

筆頭は UNIX.  終わったとか言うと怒られそうだけど、ユーザとして最新動向を気にする必要性は感じない。一方でコマンドラインでなんかするとかファイルシステムの構造とかルート権限がどうとかの典型的な使い方と基本的な概念は知っていないと不自由する。

Web も似たところがある。アプリケーションプラットフォームの Web というアイデアの落とし所はだいたい見えて、今や Web 標準の動向を真面目に追いかける必要は感じない。フレームワークの流行り廃りも、Web 開発者でない限りは無視して良い気がする。一方で、たとえばデータサイエンティストが Web を scrape するにしろ無名の若者が売名ブログを書くにしろ HTTP(S) と HTML と CSS くらいは軽く理解していた方がよいし、簡単なウェブアプリも作れる方がプログラマとして小回りがきく。

UNIX や Web は古典、あるいは教養になったと言ってもいい。

従来、情報産業の古典や教養はいわゆる CS の教科書みたいなもので賄われていた。UNIX や Web はあまり computer "science" というかんじじゃない。でも実務者にとっては同じくらい重要だし、割と長い歴史を持ってもいる。自分が学生だった 20 年前は Windows が花盛りだったせいもあって UNIX はそれほど foundamental という印象はなかったし、Web は目新しいものだった。

Unix や Web が真の古典としての普遍性を持っている気は(まだ)しないけれども、他の技術にくらべ長生きだし安定しているし他のものの基盤になっている点は評価されてよい。特に新しい技術がその上に積み重ねられている点は、他の「終わってしまった技術」にはない強さに思える。いまこれらを「教養」と感じるのは産業の成熟なのか、自分の老化なのか、どっちだろうね。


自分が学ぶべき「終わってしまった技術」あるいは「古典」はなんだろうと考える。

ぱっと頭にうかぶのは信号処理と確率。これは従来の意味での「古典」だけれども、たとえば Matlab ... はともかく NumPy や SciPy でさっと画像処理とかできたら守備範囲も広がるのにと思うことはある。同じく確率を真面目にやれば NN も Bayasien も今より恐怖を感じずにすむかもしれないという淡い期待がある。

あとは RDB と SQL ... を終わってしまった技術よわばりするのは若干抵抗があるけど、クールファクターがないという意味で終わってはいる。しかしもうちょっと触れたらいい気はしている。

自分がこうした古典を勉強して穴埋めする日は永遠に来ないかもしれない。残念なことだが、致命傷とも思わない。これは「古典」についてあまり語られない事実を物語ってもいる。つまり、古典は知っているに越したことはないが、すごく重要とは限らない。古典を学ぶ豊かさは尊いけれど、知らないなら知らないなりの人生がある。

Fragments #25

|

2019-10-05 (Sat)

  • だるいが週末の予定はしばしば仕事以上に融通が効かない。五時に起きて groccery shopping して弁当のおかず不足分を作るなど。きびしい。
  • かぼちゃ狩り。子が奇妙な形のかぼちゃをみつけて「これパンケンっていうんだよ」という。プレスクールで見たらしい。しかしその後の会話でこれが「かぼちゃ・パンプキン」であることに気づいてしまい、パンケンと呼ばなくなってしまった。Pumpkin, どう考えてもパンケンの方が正しいのだが日本語発音を押し付けてしまった。泣きたい。あなたの発音の方が正しいし、我々親に遠慮しなくていいんだよ・・・・。プレスクールで家で触れている以外の名詞と一つでも学んでいるという事実にはかすかな希望を感じないでもない。道のりは長いが・・・。
  • 子、学校楽しくないと一日に一回くらいは口にする。気の毒だが頑張ってもらうほかない。学校とか保育園ってそもそも楽しかったっけな・・・などと記憶をたどるが覚えていない。まあ小学校は楽しくなかったな。いじめられてたので。言葉が通じないんじゃあ友達もできないし、学校の楽しくなさはある程度仕方がないものなのだろうか。親としての悲しみに変わりはないが。
  • 少し前に売れ筋っぽいバイリンガル子育ての本を冷やかしたのだが、著者の子は両親が日英(母親が日本人、著者である父親が米国人)で日本に住んでいる、そして現地語である日本語ばっかりになるのが嫌なので自分の母語たる英語も教えたいという設定。外国人両親がなんとかして現地語を教えたい我々の参考になりそうな感じはなかった。せめて英語に興味を持ってほしいが、プレスクールという楽しく「ない」体験とセットになってしまっているのが心配。そして自分のアクションがそのネガティブな印象を reinforce していないか不安。
  • だるい、喉が痛い、以外の症状は収まったというか、他の症状が出るほどまでの悪化は阻止できた。喉はどうせ二週間くらいは完治しない。だるいのは困るが、どうしょうもない。幸い今日明日は気温が高いらしく、今日も暖かかったので回復はしている。気温重要。

2019-10-03 (Thu)