Spinach Forest

August, 2019

/ 実践 Backyard Grilling   / Career Development Talk   / Fragment #20   / Personal Wiki (No More)   / Backyard Grilling の謎   / 仕事日記 2019-08-25: Towards W Release   / 高速化日記 (4) - Tracing   / 砂糖戦争日記 (1)   / Spoilage   / 時間予算日記 (13)   / 時間予算日記 (Backlog)   / Fragment #19   / Book: The Case Against Sugar   / 日記: 2019-08-17   / 日記: 2019-08-14   / Huawei officially reveals Harmony OS, its first party operating system   / Fragment #18   / 仕事のやる気   / Work Journal: 2019-08-11   / Podcast 負荷低減に向けて   / Fragment #17   / 高速化日記 (3) - Pinning   / ... 

実践 Backyard Grilling

|

Backyard Grilling の謎 のつづき。

持ち歩ける小型グリルおよび周辺機器を買い、家の patio で BBQ をしてみた。なおうちは二階建てアパートの一階で、表は駐車場と柿畑。

結論: 自宅で BBQ は無理。煙ですぎ。序盤の火を起こすところを乗り切れば何とかなるかとおもったけれど、肉汁や油が焦げるなど定常的にモクモクしまくる。タバコどころじゃない。ご近所ごめんなさいと胃が痛くなってそそくさと終わらせた。

それ以外はまあまあ楽しいし炭火で焼くと何でもおいしいので場所をみつけてやっていきたい。アパートにもいちおう BBQ エリアはあるので、そこに食材および火鉢を持ち込んでやるのが現実的かな。

焼いたものたち:

  • 市販の冷凍バーガーパティ。チーズのせて溶かし、バンズも軽く焦がし、適当にはっぱなどを挟んでバーガーする。ふつうにうまい。
  • ソーセージ。うまい。しかも失敗しにくい。Hotdog どうでもいい食い物だとおもってたけど BBQ の世界では上級市民だった。
  • 野菜: ズッキーニ、ナス、ポテト。スライスし油を塗って焼き、塩胡椒。どれもうまい。
  • 肉: Skirt Steak 1lb くらいをりんごと玉ねぎなどで適当につくったタレに漬け込み焼いた。味は良いが焼きすぎて固かった。火加減をちゃんとできる気がしない。

周辺機器

  • Chimney starter. 簡単に火をつけられてよかった。
  • 炭は近所の supermarket で適当に買ったもの。
  • 点火用ブロックは Amazon で適当なのをかったが近所でも普通にうってた。
  • ライターは必要。自宅にあったものを使った
  • Tongue, Spatula セット. Tongue は炭をいじったりなんだりに必要。
  • 網を掃除するブラシ。必要といえば必要だけど、Grill 用ではなく普通のタワシでよかった気がする。ムダな買い物だった。
  • Foil. イモを包んで焼こうとしたけど面倒で使わなかった。次回は使いたい。
  • 温度計。心の余裕がなくて使わなかった。肉を overdone してしまったので次回は使いたい。

消耗品

  • 使い捨ての皿
  • ゴミ袋
  • 点火ブロック、炭。

追加で欲しかったもの

  • バケツ。事後の消火および網洗いに。なぜかじょうろがあったのでそれで代用。
  • 軍手、あるいはもっと厚手の手袋。網を着脱したりとか。

次回意向にやきたい食材

  • 違う種類の potatoes および yam.
  • Squash
  • Corn
  • Pork および chicken
  • Shrimp

感想

  • 火をつけるのは(道具を用意したおかげで)簡単だった。
  • 火加減の調整はできる気せず。
  • にもかかわらず、だいたいなんでも焼くと美味い。
  • 炭を敷かない弱火ゾーンをつくるという tips は役に立った。
  • 極度乾燥しなさい地域なので火災が心配。やはり裏庭は厳しい。
  • 一人でやってると火が心配だし食べるヒマがないので他人の協力が必要。

クリスマス前の誰もいない、かつ誰も窓を開けない時期なら自宅前で煙をおこしても大丈夫かなあ。まあ、しばらくは安全かつ角の立たない場所で練習します。

Career Development Talk

|

そんなタイトルのメールが上司から来たのでクビを覚悟したがそういうものではなく、career development についてできることがないか話し合おうじゃないか、という manager best practice 的なものの実践だったらしい。 1:1 とかの仲間か。

いま検索さんに "career development t" と入力したら "career development talk with manager" と suggest されたので割と一般的なものの模様。ざっと眺めた感じあまりやばい発言はせずに乗り切った気がして胸をなでおろす。幸い自分は本音と建前がさほど乖離せずに済んでいるので、基本的には考えたことを話せば済んだ。

はー給料据え置きで AI 人材になりたいなーみたいなファンタジーはあるわけだが、これは本音とかいう以前になんの現実味もないし上司にできることもないと思うので、もうちょっと現実的かつ生産的なキャリアについて考える。

自分は今のチームにはもう 2-3 年いてもいい気がしている。3 年はちょっと怪しいがたぶん 2 年ならいける。電話機部門が underdog として勝負をしているかぎりいまのチームの持ち物は重要製品のはず。そして飽きっぽい勤務先といえどもあと 2-3 年くらいは諦めずに電話機づくりを続けるだろうと踏んでいる。時間がかかるのはわかっているし、その前提で高い掛け金を積んでいるからね。

そしてスポンサーである会社のやる気は製品への期待値となり、結果それなりに色々やるべき仕事が生まれる。それに便乗してできることを探せばよい。仕事の製品があきらめムードだったり迷走してたりすると会社員として仕事を探すのは厳しい。しかし諦めおよび迷走は現実にはよくある。だから現勤務先内の職としてそれがなさそうなのは良い。

UI とか新機能とかは締め切りも一層厳しいからやりたくない。となると引き続き性能仕事でいいかなと思う。ただ「性能」といったときに面倒を見られる範囲は広げていきたい。あと自分のチームのコードに閉じずチーム外のコードも理解してフルスタックぽく仕事ができるとよい。他のチームの人に直してもらうよう頼んで待つだけとか嬉しくない。(今日も一つやった。)あとそういうのを頼むミーティングとかしたくない。基本的にミーティングとか他人の世話とかしたくないんでクオートアンクオート TL は遠慮させていただきたい。隣の TLM がそういうの得意なんであの人に頼っていいですか。あと性能バグを直し続けるのは sustainable な感じがしないので全体のデザインを見直して性能劣化しにくいアーキテクチャに直していくことにも時間を使いたい。バグ直し続けるの疲れた。ただ妻子あるんでそんなにガツガツは働けません。

というようなことを話す。(TLしたくない、あたりは会社員として意識が低すぎる自覚はあるのであまり強調してない。)

上司のフィードバックとしては

  • 他のチームにフルスタックでやるなら会いに行って話を聴くと良いよ。どの隣接チームも喜んで教えてくれるよ。
  • 性能バグはチームの他のメンバーを訓練して負荷分散できるようにするといいよ、そうやって時間をつくってまとまった仕事をするのが大事だよ。
  • デザインの変更は提案をまとめてチームにプレゼンするといいよ。
  • 家庭優先重要。まえバーンアウトしちゃったひとがいてね・・・

などであった。そっすね・・・まっとうなフィードバックであることよ・・・。

最後のやつをのぞくすべてのフィードバックが他人と/他人になんかしろ、というものである点に苦手意識があぶり出されている。とりあえず人と話すのいまだに英語苦手なんでもし時間をつくれたら英会話行くかもしれないんでそのときは助成金つかうけどよろしくおねがいしますね、と伝える。全額出してもらえる転勤直後にもうちょっと頑張っとくんだった・・・。

自分はフルスタックの理解は人から教わるのでなく自分でコードを読み解く intellectual challenge を重視しているが、まあそれはそれとして全体像を当事者に聴くのは良いかもしれない気はしてきた。ただ単に聞きに行っても時間の無駄になりそうなので準備してインタビューしたい・・・とかいってるといつまでたっても進まなそう。

バグを他人にたらいまわすのもあまり好きではない。みんな忙しいじゃん。開発者が裁かなければいけないバグの絶対量の多さが問題なので、それをシステマティックになんとかしてくれ・・・というのが願いなわけだが、そういう目星はないので他人にたらいまわすのが少なくとも短期的には妥当なのかもしれない。訓練しろと言われてもなあとは思う。

デザインをプレゼンしろ・・・とかいわれてもなー。ただ締め切りのある世界で皆がいじる大きなコードベースを書き換えるのだとしたら、さすがに完全に exploration based ですすめるのが厳しいのはわかる。妥協は必要。一方で自分は design doc の review meeting とか API の deck presentation とかにまったく価値を感じていないので、もうちょっと自分の納得いく方法を考えたい。

など、仕事について考えるいい機会になった。フィードバックも、素直にいうことを聞くことはないにせよ自分の stubbornness と会社員としての期待値のギャップを知らせてくれる点で価値あるものだった。A career development talk with manager, あったらあったでいいものかもしれない。上司への評価がちょっと高まった。

具体的な action item を決めて prioritize するにはもうちょっと考える必要あり。

 

 

Fragment #20

|

日曜日

  • 歯を磨いていたら子が五時前に起きてきて終了。
  • 砂浜。混んでいた。今日は前回より気温が高く、人々は普通に水に入って遊んでいた。
  • Beach BBQ に関する学び:
    • Santa Cruz は Beach BBQ (炭火)を禁止している。しかし:
    • Beach 併設の BBQ エリアでは可能である。そして bbq だいたいついてる。
    • ルールを守らず浜で火を炊く人々も一定数いる。

土曜日

  • 06:02 at Starbucks. 睡眠不足を補っていたらこの時間。寝坊など存在しない、あるのは夜ふかしだけだ・・・。
    • お手紙発送業。
    • 仕事日記。
  • Samsung Galaxy Note10, Note10+, & Note10+ 5G vs Note9 - Compare Phone Features | Samsung US
    • 10+: WQHD+, 256/512GB storage, 12GB RAM, Snapdragon 855.
    • $1200 とかアホみたいな値段なわけだが、spec をながめるとそのへんのラップトップより高性能なのでぼったくりではない感。(必要かどうかはまた別。)
    • メモリも, たとえば 4GB だと割と心細いのでスマホヘビーユーザーなら贅沢として 8GB くらい欲しい気持ちはわかる。12GB は・・・どうなのかね。
  • 高機能スマホが PC と比べて不幸なのは、ハイスペック(特にメモリ)を必要とするアプリがあまりないことだね。PC だと Adobe 製品なりワークステーション寄りのツールなりが高機能を justify してくれたが、それがない。カメラ・・・はともかく Lightroom 的なやつはハイスペック前提ですごい何かを提供してほしいもんです。iPad 向けには色々あるっぽいけれど。
  • Samsung’s new Galaxy Book S is a Qualcomm-powered laptop with 23 hours of battery life - The Verge
    • Snapdragon Laptop ついにきた!Chromebook も作ってくれ!とおもったが $1000. 高い。それこそ Galaxy Note10 みたいなチップセットとかなので当たり前か。

金曜日

  • 04:45
    • Note writing.
    • 早く起きたはいいが眠い。夜に家事をもっていってからダラダラ夜ふかししがち。疲れてると寝るのさえかったるくなってしまう。
  • いくつか読んだおかげで ConvNet への理解がちょっと深まった気がする。Composability ないと書いたけれど、ConvNet で feature map をつくるところが共有されていれば現実的にはまあまあ目的を達成してるんじゃないか。
  • [1704.04861] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
    • この depthwise separable convolution って imaging に出てくる separable filter だよな。
  • 奥様の友人が家を買い、その物件が不動産屋のサイトで紹介記事になったというのを見せてもらう。はーすごいなー・・・。
  • Facebook scans system libraries on Android and uploads them to their server | Hacker News
    • スレでは勘違いされているがアップロードしているのはファイル名と hash. しかしなんでそんなのいるのかね. デバイスの種別と OS のバージョンがわかればそれ以上の何かは必要ない気がする. 好奇心でやったことが backfire した事例。余計なデータを集めてはいけない・・・。
  • Project Zero: A very deep dive into iOS Exploit chains found in the wild
    • きびしい・・・。iOS がやられてるのだとしたら普通にかんがえて Android もやられてるよなあ。入り口が Web で、Android もブラウザだけは他よりセキュアな可能性はあるが。
    • Exploit して何をするかといえば個人情報の収集、のみならず、E2E で encrypt しているチャットアプリのログも集めている。どっかの政府の仕業としかおもえない・・・。Apple は最近 bounty の賞金を引き上げていたけれど、こういう発見をうけてだったのかもしれない。

木曜日

  • 05:15.
    • Paper reading.
  • [1512.02325] SSD: Single Shot MultiBox Detector
    • YOLO よりも Faster RCNN よりも速くて精度も良い。というが、scaling factor とか細かい所がいまいちよくわからないなあ。
  • models/research/object_detection at master · tensorflow/models
    • こういうのを読めれば良いのだろうが・・・。さっぱりわからん。
    • PyTorch では NVIDIA が実装したのがあるらしい
    • アプリ側から CV 方面に首つっこむならせめてこういうのの TF 版を理解できるようになるのは必要そう。むー。しかしこういう TF1.x 資産ほんとに 2.0 にくるの?量多すぎてムリじゃね?Researcher とかそんな移植するようなマメさがあるとは思えない・・・
  • VGG って元ネタ読んだこと無いな、と探してみる: [1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition
    • 全く図がない・・・。そのへんの blog でいいかな、という気分。
  • 最近肉眼で 60fps miss を検知できるようになっており、こういう成長もあるのか・・・と複雑な気分。
  • 社内政治の噂を小耳に挟むが、争いあっているのが計算資源なのがテック企業であることよ。計算資源はユーザのために・・・とかいうと曖昧なので金稼げるものに使ってほしいもんです。
  • ひさしぶりにしょぼい python を書いて満足する。gRPC の前身 Stubby は API もダサいし特に gRPC と比べて良いことはない(という事実はいいことである)が、コマンドラインから雑に呼び出してテストできるユーティリティがあるのは便利。grpc_cli call がだいたいおなじっぽい。

水曜日

  • 06:10. 夜ふかしとほほ。
    • Note writing.
  • 日本語プログラマソーシャルメディアがコードレビューでクソコードというのがどうという話題で盛り上がっていたのを見かけたが、一体どういう場面で他人に向かってクソコードと言う機会があるのか謎。暴力が空気になってる組織というのはあるので、そういう世界の人による発言が出処なのだろうけれど、周辺で盛り上がる理由がわからん・・・。自分が知らないだけで世の中はけっこう暴力に満ちてるのかもしれず、会社選ぶときは気をつけないとなあ。平和な世界の人々もあまり暴力の存在を normalize しない方が良いね。でないとアメリカの政治みたいになっちゃうで。

火曜日

  • 05:55. 寝坊 + ダラダラ。とほほ。
  • 奥様、娘をだっこしようとした拍子にぎっくり。書類仕事もたまってることだし今日は家事補助しつつ WFH だな。
  • 近隣チームのひとがリサーチに異動をきめており impressed. 今のチームに来るにあたっては自分も映像系リサーチとかかっこいいなとおもっているし今もかっこよさは感じているが、一方で映像そのものへの致命的な興味の無さから自分のキャリアにできる気はしていない。悲しい。
  • その人をみていてもう一つおもうのは、仕事の中で連続性をもってキャリアを変えていきたいのだとしたら、新しいキャリアへの志向ははっきりとと示していく必要があるなということ。彼は隣のチームにいるときからリサーチ部門と近い仕事をしていた。たとえばリサーチ製のライブラリを使うとか。彼と特に仲がいいわけでもない自分がそれを知っているのだから、かなり explicit だったと言える。
  • たとえば自分が OS 側の性能チーム周辺に異動する、と決めたらそれは自然に見えるだろうし、ある意味で自然だろう。でも・・・やだな・・・。性能は自分のスキルセットで相対的に成果を出せるからやっている面が大きいので、新しいなにかに舵を切りたいならそう振る舞わないとだめだろう。
  • NoInstagram’s Morelatest Cheapassault on Snapchat is a Shippingmessaging forapp Chinesecalled SellersThreads |- HackerThe NewsVerge
    • 本題はさておき Amazonが Discourse を使っている!すごい!
  • Instagram’s latest assault on Snapchat is a messaging app called Threads - The Verge
    • 時代は private messaging だと発表したのちに実際に private messaging のアプリを出してくる。これに限らず Facebook はこう、トップのいうこととやってることの整合性がとれていて、製品戦略がいちいちすごく makes sense だなと applinks のあたりから思っていた。一方でそうした試みはどれも特に成功せず、うまくいってるのは買収とパクリだったりする。こういうのを見るとトップダウンにカリスマがなんか決めたり賢い VP がなんか決めたりしても大していいことないな・・・みたいな気になる。しかし Amazon とかは色々うまくいってるものもある気がするので、トップダウンが機能しないのはトップの賢さが十分でないだけなのかもしれない。

月曜日

  • 05:45. 気が散っている。
  • https://capture.chat/
    • じぶんたち以外の .chat はじめてみた・・・。
  • OS のリリースブランチ、まじ複雑すぎる上に命名も making no sense でいやがらせとしか思えない・・・。OS の中の人をやってみることを時折考えるが、こういう様々な理不尽をみせつけられるたび人生を危険に晒しすぎるなと踏みとどまる。標準アプリぐらいでいいですわ・・・。
  • なんか NNPI の HAL, 初期化時に temporal なプロセスを作っている気がするのだがなんなの・・・やめて・・・。
  • NNAPI って TF Lite 以外に使えるのだろうかと Caffe2 をみると、いちおうコードはあるっぽい。しかし使っているというオンライン体験談は見当たらない。Android 8.1 なんて微妙な代物は誰も相手にしてくれないだろうから Android の中の人が手伝ってあげるしかないんじゃねえの。
  • Baidu overtakes Google in global smart speaker market - The Verge
    • どっかで買えないのかなー。かわいげがあってよい。

Personal Wiki (No More)

|

ふと Wiki でも使えばいいのでは、と思い立つ定期 note taking 迷走活動。

なぜ Wiki かというと自分が Linux で暮らしている手前デスクトップアプリにまったく期待できず、そんなら Web native のものが良いのではと思ったから。Notion のような Web-based note taking app や Kibela のようなグループウェアは今回は無視しておく。一方で Heroku なり AWS に hosting するくらいならやってもいいと思っている。

WikiMatrix というサイトが現在でも手に入る Wiki をまとめている。眺めた結果、やはり気のせいという結論。

DocuWiki, Instiki, Oddmuse などいくつか老舗の実装はほそぼそと生きており、それは relieving だった。ただこの時の止まってしまった感じがつらい。老舗勢で一番元気な DocuWiki が PHP であるあたりに PHP という存在の生命力を感じる。

唯一時のとまってない新しい Wiki 実装には Wiki.js というのがあった。いま Web でなんかやろうとするのは JS 勢なのだろう。ただこれは personal note taking tool というよりは CMS で、それが Wiki というジャンルの行き着いた先なのだろうね。そして現行バージョンが 2.0 beta, というあたりに JS らしさをかんじる。不吉な情報として MoinMoin という昔からある Wiki の 2.0 は 10 年前に宣言されたまま風化している。

皮肉なことに一番速いのは Oddmuse. やっぱクライアントサイドレンダリングはないわ。

なお Wiki.js のひとは 2.0 のリリースにあわせホスティング業を始める思惑らしい。がんばってほしい気もするので、いちおう blog は sub しておく。

Backyard Grilling の謎

|

近所の公園とかで家族 BBQ をしたい気がする。しかしいきなり公園に突撃しても火の付け方もわからないし失敗して飢えた子どもの不機嫌で休日を ruin するのもいやだから家の patio に小型の bbq 火鉢を買って実験できないかと考える。しかしこれもまた衝動的物欲のような気もするのでとりあえず BBQ 入門的なものを読んでみよう、とオンラインを冷やかしたのち Weber's New Real Grilling というレシピ本を買って眺めていると・・・よくわからなくなってきた。

この本は、一戸建居住者が自宅の裏庭に火鉢、というような生易しいものではなくこういうやつ、を置いてつくる BBQ 料理を主に想定している。そしてこれがアメリカ BBQ の基本っぽい。公園とかキャンプはこの延長にある特殊系という位置づけ。

しかしこうした grill は oven より便利なのか?便利か不便かはおいとくとしても(どうみても不便だから)grill でしかできない料理、grill の方がはっきりとおいしくできる料理というのはどのくらいあるのだろうか。先の本のレシピを見ていると、それ oven でよくね、というものばかり。

しかも、けっこうなレシピが焼いた後の加工(たとえば他の具材と和えるなど)や大きめの grill 固有のテクニック(たとえば indirect heat: 直火ではなく火種からズラして肉を置き遠火で焼く) に依存している。自分としては公園でもできるレシピを期待していたので、こういうやつらは役に立たない。

しかも世の中には charcoal の grill の他に gas の grill があるのだけれども、この本では大差ないから趣味の問題、毎日使いたいなら gas だしのんびりやりたいなら charcoal だよね、とか言ってる。毎日使わねーよ!そしてほんとに大差ないの?そしたらますます oven / gas stove でよくね?


Ovens にはできないが grills にできる芸当の一つに smoking がある。これはまあわかる。しかも公園の grill ではできないので自分用 grill を買う動機になる。自分も興味はゼロではないけれど、入門者がやることでもないように思える。

自分の期待していた grill 固有の利点である公園等の野外 bbq 可能な料理は自宅 grill 料理のうちごく単純なものだけを含む小さなサブセットであり、したがってアウトドア用途にレシピ本とかはほぼムダ、という可能性もある。まあムダというといいすぎだけれども、アウトドアに転用できるレシピは全体から見ると少ないのではないか。これは事実なら受け入れるけれども、盛り上がらないなあ。

家の火種が coil なため gas stove のないアメリカ人は割といるので、そういう人が gas stove の代替として grill を使っている面はある。そういう人には意味のあるレシピに思える。でもうちは gas stove あるのだよ!ふつうに Wok でチャーハンとか野菜炒めしてるよ!Wok on Grill のレシピなんていかにも charcoal の利点がなさそう。

自分的としては炭火で焼いたら旨いものというのが色々あると grill をがんばる動機になる。世の中にそういう食べ物はあるはず(サンマとか)だが、先のレシピは炭火とガスを区別してないので炭火の良さは伝わってこない。自分の目的に向けて気分を高めるには、アウトドア向け bbq レシピあるいは charcoal レシピみたいのを読まないといけないのかもしれない。


こういう苦情は空気を読まない nitpick であり grill や bbq は概ね文化的シンボルにすぎないのだから深く考えず勢いと雰囲気にまかせたほうがいいのだろうとは薄々思っている。土鍋で水炊きしてる日本人に「手鍋でいいですよね?」と水を差すみたいな話で。いや土鍋冷めにくいから好きですよ。使ってますよ。でも和食鍋料理をしてみたいアメリカ人がいたら別に手鍋で何も困らないよね、たぶん。

やはり細かいことを言わない方がどう考えても粋。でも脳が nitpick mode になってしまったので自分を説得できるまでもうちょっと調べてみたい所存。ひっこして来たばかりの頃に勢いでやってしまえばよかったのだろうけれど、当時は全然興味なかったのだった。

仕事日記 2019-08-25: Towards W Release

|

先週。

  • 細々としたクリーンアップ
  • なんとなく Smarts 追放を頑張りたい誘惑があるが、これは Procrastination な気がする。
  • Portrait mode 問題をよく考えたい。
  • 解決方法は大枠ではわかっている。
    • Execution Gating を拡張してモードスイッチ時に suspend できるようにする。
  • 定量的にとりくむ良い方法がない。ベンチマークを書けない。
    • Systrace レベルでの確認はできるが・・・。
  • 自動する。方法:
    • キーイベントを送りまくる like monkey?
    • インターンプロジェクトを間借りできないか?
    • インテント越しにキーをキューを詰められるようにする w/ フラグの裏に隠す。
  • 自動化をして、ローカルでベンチマークを動かせるようにする。CI 化はまた今度としてバグをファイルする。
  • 計測する指標は? Mod switch が遅いことがわかっているのだから、これを測れば良いはず。
  • 自動化をするのにやはり latency test をいじりたいなあ。

TODO:

  • バグ(ツリー)をファイルする。
  • 計画を docs... に書くのはかったるいのでバグに書くかな。
  • あと scoped systrace について会話をはじめたい: 性能日記(4) – Defrequent Draft

高速化日記 (4) - Tracing

|

ちょっとした API が binder call 2つ向こうのプロセスでがっつり CPU と I/O を食いつぶしているのを見つけてしまう。これを今まで見過ごしていたとはと後悔の念が募る。

Systrace はだいたい Dapper みたいなものというなんとなくの評価をしていたが、この問題を見逃したのは Systrace が Dapper みたい「ではない」からだと思い至った。ダメなところがいくつかある。

ひとつ目かつ最大の不足は、前にも書いたように binder のフローを可視化できないところ。これはもうダメとしかいいようがない。RPC/IPC を可視化できない分散トレーシングとかトレースしてないじゃん。アホか。

ふたつ目は、これはひとつ目の原因の一つとみなすことができるが、トレースにスコープの概念がないこと。

Dapper のような分散トレーシングにおいては、ブラウザやアプリからの API request が届いた瞬間がスコープのはじまりで、response を返した瞬間がスコープの終わりである。そしてスコープの起点となったリクエストのコンテクストに紐付いたバックエンドのリクエストだけがトレーシングの対象である。

一方の Systrace は、atrace なり perfetto なりのコマンドを起動した瞬間がはじまりで、ログのバッファがいっぱいになった時点がおわりである。そしてシステム全体の活動がすべて記録、表示される。一方、アプリケーション開発者つまり自分の関心のスコープは、アプリのプロセスの起動・・・というかもっといえば Intent の発行から、最初の画像が画面に表示されるまでである。そしてアプリの画面表示に必要となった(つまり自分のアプリが起点となった)システムの活動だけに関心がある。

自分の関心に対し Systrace の表示は不必要な情報が多すぎる。つまり noisy である。現状ですら十分にノイジーなので、そこに binder の flow を(バグなしに)表示できたとしても画面がぐちゃぐちゃでわけがわからくなってしまい、有用性が低い。

Systrace はもともとシステム全体の性能をみる performance team の人や、システムの定常状態での描画パイプラインのもたつきを調べたい graphics team の人が使うツールだった。こういう人たちはアプリのレイヤでできない system global な挙動や stochastic な挙動が知りたいので、スコープのないシステム全体の view を見ることにも意味があるかもしれない。でもアプリ開発者は自分のアプリに関係ある挙動だけが知りたいのだよ。Dapper よこせ!

もちろんアプリのスコープの外でおきたロードがアプリを遅くすることがある。たとえば GPS シグナルを要求したらなぜか geofencing のブロードキャストで寝ているアプリを起こしてしまうとか、裏で Play がアプリをアップデートしてましたとか Wifi シグナルの変化で起きるアプリがいましたとか(ぼちぼちある)、LMK 起きまくってましたとか(よくある)、LMK どころか trimMemory でいらんアプリが目を覚まし page が大混雑でしたとか、つらい。がしかし、そういうのは総体としてはマイナーな話だし、アプリ開発者にできることはあまり無い。クラウドで同じハードウェアに同居してる別の VM が悪さしてもできることないのと同じ。(影響はずっとでかいけど・・・)

なお Android には reportFullyDrawn() という API が「興味のあるスコープ」をシステムと communicate する方法として推奨されている。しかしアプリにしてみるとログが一行でるだけなので普通にログを書くのと大差ない。OS の中の人が標準アプリのベンチマーク自動化などで使っているらしいが・・・知るかよってかんじ。もうちょっと使えるもんよこせと言いたい。

というかもうちょっと使えるもんくださいと頼まないとな・・・いま仕事ふやしたくないので締め切りおわったらね・・・とかいってるといつまでたってもなにもできないな・・・そしてこういう話するのに適切なフォーラムどこかな社内・・・はー。

砂糖戦争日記 (1)

|

娘のプレスクールのおやつに持たせるためと奥様がバーを買ってきた。これは・・・と成分表を見ると本体 19g に対し sugar 4g. 反砂糖帝国レジスタンスとしてこれは受け入れられないのでチーズやクラッカーなどにしてもらえませんかと頼む。以前はシリアルで似たようなお願いをした。

バーにしろシリアルにしろ、広告やパッケージングの力を感じずにおれない。これらの食品が「健康的である」というのは(反砂糖的価値基準に照らすと)どう考えてもでたらめなわけだが、なんとなく健康的っぽい雰囲気を形成するのには成功している。まあシリアルはさすがに demystify され基本的に砂糖の塊だという常識を形成した感があるが(気のせい?)、バーはまだファンタジーを維持している。プロテインですよ、ファイバーですよ、みたいな。でもさ、sugar だろ? な?

子供向けスナック類はより凶悪で、ほぼ確実に sugar に汚染されている。なぜなら子供は甘いものが好きで、これらのスナックはその味覚を直撃するようデザインされているから。いくらパッケージが fruits の写真でも中身は sugar なのだよ。というか fruits が想起する sensation に応えようとするなら大量の sugar をぶちこまざるをえない。嘘を砂糖で塗り固めている。

こういう偽装砂糖食品と比べると、アイスクリームやジャムのような直球はむしろ好ましく思えてくる。こいつらは主役が sugar であることが明らか。今日は特別な日だから celebration として drag party しましょうという非日常性がある。日常に染み出してくることがない・・・というといいすぎだけれど「特別なもの」にとどめておきやすい。

 

Spoilage

|

一つ前に育児をさぼると子どもの問題を見過ごすかもしれない、というニュアンスのことを書いたが、問題というのはちょっと違うなと思う。まあ実際に問題があるケースもないではないが、どちらかというと「変化を見逃す」というのが近い。変化の多くはポジティブなものである。有り体にいうと成長する。

変化を見逃すと、子どもは成長しているのに赤ちゃん扱いしてしまう結果になることが多い。やらせればできることを親がやってしまう。あるいは、まだできないけれど練習すればできる場面で、練習させてあげない。つまり「甘やかして」しまう。

甘やかしの原因について、以前は「子どもの struggle につきあうのが面倒なので自分でやってしまう」というサボりだけを想像していたけれど、実際はその手前、子どもが「がんばればできる」フェーズになっているのに気づかないケースもあると思い至った。Ignorance of ignorance. こわい。

こうした meta-ignorance をどうすれば避けられるかと考える。注意深く見守る、というのはあるけれども、それと並列して子どもの能力がどう成長していくかの期待値に関する知識もいるなと思う。発達段階の milestones みたいのを表面的に把握するのは簡単だけれども、自分がどこにどう involve して encourage すべきか、みたいのはもうちょっと踏み込んで勉強しないとわからない。

結局、親としての能力も他の能力と同じで実践と知識の両輪をバランス良く進めていく必要がある。どちらもだいぶさぼってしまったが取り返していかねばなあ・・・。

時間予算日記 (13)

|

連番は適当です。過去

今日から娘のプレスクールが始まる。同時にデイケアはしばらく休むことにした。というかもうデイケアに復帰することはなかろう。

娘の通っていたデイケアは家族経営のこじんまりとしたいいところだったのだが、ボスが病気になって業務から抜けてしまった。間が悪い事に No.2 も自分の子ができて育休に入ってしまった。ケア業務は残されたスタッフが回しており、当然のように色々と細かい問題がおきてきた。病気じゃしかたないな・・・などと思っていたものの段々と不満が重なり、子の potty training への対応で親(我々)の許容範囲を超えた。もともとはプレスクールとデイケアに2日づつ通わせようと思っていたが、デイケアは中断してゆこっぷ(奥様)が家で面倒を見ることになった。

これまでデイケアには週に三日通っていたのが週二回のプレスクールになる。したがって奥様の可処分時間がすくなくとも一日分(八時間)減る。プレスクールはデイケアより早く終るので実際には週に 12 時間くらい子の預け時間が減る。これを二人で分担すると一人六時間。実際には奥様に見てもらう割合が多いとはいえ、昼間に家事に使える時間がへるぶん自分が子の就寝後および早朝などで引き取らないといけない。

同時に、これは another wake-up call だとも思う。

去年は病欠から評価減に伴う雇用の危機感の高まりにともない奥様にフルタイム勤務を諦めてもらい家庭を立て直した。しかしそうしてうまれた時間を自分はしょうもない余暇活動、すなわち podcast に使ってしまい仕事はともかく親としての仕事をだいぶさぼってしまった。肉体労働などの routine はやってきたが、頭を使うのをさぼった。結果としてデイケアの不備への対応の遅れにかぎらず色々と育児が後手にまわっている。たとえば potty training はもっと早めに始めるべきだと思っていたが procrastinate してしまったし、具体的には書く気にならない似たようなさぼりが他にもある。これは親としてだいぶダメ。

Podcast は締め切りの力が本来の優先度を invert しがちで、それが意図しない威力をもっていた。元々の期待としては締め切りの力で procrastination を押しのけ論文を読みたい願望があり、その点では機能した。ただ家事育児のようなより高い priorities まで押しのけてしまった。

家事育児のうち単純な labor はやることがはっきりしていて成果も見えやすいので単にやればいいのだが、子や家庭からの subtle signals を読み取りやるべきことを考えて対処する、という抽象度が高くて成果が見えにくく、多くの知的資源を必要とするもの・・・いわゆる緊急度が低く重要度が高いもの・・・はさぼられがち。そして問題が顕著化してから手を打とうとすると時間も選択肢も限らてしまう。

こうした高位の家事育児をちゃんとやるには、何らかの気配や違和感を感じたときに、これは何がおきているのだろうと時間をとって考える必要があり、そのためには精神的余裕が必要。あと自分の attention budget を家事育児に傾斜分配するのも重要。締め切りはこれらを阻害してしまう。自分には仕事という避けがたい締め切り源があるのだから、そこに余暇での締め切りを上乗せするのは良くなかった。

要するに遊んでないで家事育児しましょうね、という話。


可処分時間の更なる減少にともない毎週 podcast をやるのは選択の余地なくムリとして、上のような理由から締め切り源としての podcast も望ましくないことがはっきりした。

やめてしまうのが一番簡単。ただ寂しさはある。当初は頻度を減らせばいいかと思っていたけれど、それでも締め切りのプレッシャーは残る。なんとかしたい。

少し長めに、たとえば半年くらいの休みをとって、その間の余暇活動で読める範囲の論文を読む。もし紹介したいものが集まったら、それを消化する 4 回くらいの短いシーズンをやる、くらいのリズムがいいかなあ。つまり締め切りなしでネタをあつめ、集まったら放出する。あつまらなかったら残念でした、とパスする。

この「話すことができたらやる」路線はふつうにやるとまあり機能しなそうだが、ロジスティクス側の工夫によっては workable かもしれない。あとなんとかしてホストを増やし、コミュニティとして存続することができたらいい気はする。でもそれは人を探すのが大変だな。

まあとりあえず一旦休みにして、そのあいだに考えよう。

 

時間予算日記 (Backlog)

|

時間ないのをどうするか、という話は定期的にしていていちいちタイトルを考えるのがかったるくなってきたのでシリーズものとする。

過去の記録:

最初の一年は今思えば時間はあったな。子どもが生命体として極めて脆弱なので生存の心配から気疲れはしたが、なにしろ歩かないし寝てばかりなので扱いやすかった。あと 2017 は最後に大病をしたせいで時間の節約とかいってる余裕がなかった。2018 中盤以降は気を取り直したが取り直しすぎて podcast をはじめてしまい、しかし一方で時間がジリジリと削られるなかコンパクションを繰り返して今日に至っている。

2018 のヒマさを感じるのは書いている blog の量。これでもゴミみたいのを削って公開しており、ずいぶんと沢山書いている。いまはそんな時間すらない。Fragment は時間がないなか一行二行書き捨てることができるのでよかった。

2018 の後半で朝方化したのはブレイクスルーで、その後しばらくは精神衛生を回復できた。しかし最近はこの時間を家事にあてる必要がじりじりと生じており厳しい。時間は、あればあるだけ失われる。なければないで家庭の平安が失われる。しかしこうした過剰な一般化の裏をついてカスのような時間をかき集めるのが妻子ある会社員の人生なのである。残業とかしてるひと、どうして可能なのか謎。いや理屈としてはわかるが想像するのがむずかしい。

 

Fragment #19

|

日曜日

  • 05:30 @ Starbucks.
    • お手紙発送業。
    • 仕事日記
      • 一週間の仕事のなかで一番生産的な 15 分くらいな気がする。これもうちょっと仕事時間でできないかなほんと・・・。
    • 高速化日記(4)
    • Career talk ついて多少なんか準備せんとあかん・・・。
  • LinkedIn からおすすめされた仕事をながめる現実逃避

土曜日

金曜日

  • 5:00. Paper reading.
    • [1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
    • 結局この Region Proposal Network というのが一番おもしろいところかなということで。
    • しかし 3x3 の feature map でなんでその外側まで含めた bounding box が判定できるのか割と謎。convolution layers によってそういうマスク外の情報が織り込まれるからなのだろうけれど。
    • Bounding box の regression というのが survey 読んでるとまったくわからなかったが、アンカーからのズレ具合を調整していくということか。やはり YOLO も読んで見る必要がある気がする・・・。
    • そして Fast R-CNN も読まないといかんのか・・・。めんどい・・・。
    • そして Faster R-CNN は convnet の重みはシェアするが joint ではないのか!なんだよー。しかしこれ(と後継の Mask RCNN?) が joint のモデルに勝っている、というのは面白いような面白くないようなかんじ。joint のモデルが全てをやっつける、という展開にはなってないの?
    • RCNN が Berkeley, Fast と Faster が MSR, Mask が FB. しかし中の人はみなおなじ. AI 人材のやりたい放題ぶりが伺える. そしてシアトルに住んでいる。MS から人を引き抜くにはシアトルオフィスが必要。
    • Ross Girshick - Google Scholar Citations 一方 Mask 以降は comparable なヒット作はナシ。これはこれでアーティスト的なプレッシャーありそう。
    • スターといえば Goodfellow 先生 Apple で元気にやってるかな・・が論文的には今のところ音信不通。しかしすごいヒット作をひっさけげて帰ってくると信じている自分がいるのだった。LinkedIn によれば "special project group". どう見ても秘密プロジェクトやってるとしか思えない。
    • うっかり LinkedIn を眺めてヒマをつぶしてしまった・・・。
    • Fast RCNN は k classes の bbox regression をするの?大変だね。Faster は Fast のネットワークを使っていると書いてあるけど、この部分はないんだよね?こういう時にコードを見て確認できる TF/PyTorch 技能がない悲しさ。
    • Fast RCNN の RoI pooling, SPPNet を見ろと済まされている・・・もうやだ・・・。
    • Grid にわけてそれを max pool するつまり max() でマージするの?ほんとに?
    • 読むか・・・ [1406.4729] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition てか MSR かよ・・・身内かよ・・・ただし China なのか。隣の部屋とかではなかった。
    • 夜。ちょっとだけつづき。
    • SPPNet 真面目に読む気がおきないが  max pooling は要するにスケールダウンだというのを思い出したので・・・画像サイズを (feature map 上で) 調整のうえ classifier および regresser の fc layer につっこむ、ということですね。はい。
  • 上司から "career chat" という calendar の invitation がきておりすわこんだけ頑張って働いてるのに PIP かよ学費どうするよ・・・とおもったがどうもそうではなくある種の management practice らしい。Phew.
  • Google Doesn’t Want Staff Debating Politics at Work Anymore - Bloomberg
    • 自分が前にいたチームは買収で入ってきた人が中心で、買収した会社の土地柄、割と Republican な人がいた。同時に自分のような外国人もおり、更には oppressed authoritarian/dictatorship の国から来ている人もいた。にもかかわらず、ランチとかでもぼちぼち政治の話をすることもあった。このひとたち飯くいながら政治の話とかするんだ・・・と感心した記憶がある。しかしそうした議論が uncivil になることはなかった。
    • なぜなら、たぶん face to face だからだよね。もちろん radicalized activists とランチでもしようものならケンカになるだろうけれど、そういう f2f の険悪さはスケールしない。しかしオンラインのケンカはどこまでも延焼してしまう。
    • やはりオンライン、しかも一定以上の audience がいる場所で nuanced な話題について生産的な議論をするのはダメなんじゃないか。これに disappoint する人もいるかもしれないけれど、むしろオンラインで生産的な議論をするための platform について真面目に考える良い機会なのではないかなあ。
    • 会社員という意味だと、我々が自治に失敗した結果として上の方から介入されてしまったということで、まあ残念でしたとは思う。ただ治安が悪いのは確かだったので個人としてトータルでの働きやすさは増すと予想。
  • Home | Rockset
    • DynamoDB に SQL を書かせてくれる会社。こういうの夢があってよいねー AWS に買収される以外生きる術が無いもするが・・・。
  • Every productivity thought I've ever had, as concisely as possible - Alexey Guzey
    • 参考になる、というよりはこう、励みになるというか、お互い頑張ろうなみたいなきもち。
  • トイレの水が流れない(タンクに水が溜まらない)、なぜか plumber を呼んだのに治らない。はー・・・とおもいつつ適当にタンクの中の管をつつくと一時的に直るのでほっといたが、明日客人がくるのを思い出し適当に対症療法で対処。こういうのをエンジョイできた方がベイエリア生活楽しいんだろうけど、個人的に maker 精神ゼロなのでかったるいだけ。持ち家でなくてよかったと思う瞬間ではある。
  • NYT うんざり路線にはいってきたので WSJ でも購読するか・・・と思いかけていたが unsub が NYT と同じく電話必須でかったるいと知り保留。なお NYT Parenting は気に入ってる。もうちょっとアプリでの扱いをよくしてほしいもんです・・・Parneting だけはウェブの方がマシ。
    • というか、ニュースとかどうせ記事は WebView なんだしアプリは捨ててウェブをオフラインできるまで本気で真面目にやってほしいなあ。ニュースサイトとか、アプリいらないものの筆頭じゃん。しかしそこで頑張ってもらえないのがウェブの現在なのだった。誰が悪いかというと個人的には JS プログラマが夢見すぎなのがよくない、という意見。叶わない夢をみせてるプラットホーム業者もあれではある。
  • 夜ふかししてしまった・・・。

木曜日

  • 04:40.
    • 今週は podcast 無理と早々に諦め。おまけノートでも書くか・・・。
    • おまけノートでおわってしまった・・・
  • 「こどもチャレンジ」購読。なんとなく好みでなくて渋っていたが、そういう無駄なアンチメインストリーム脊髄反射を子に押し付けてはいけないと思い直した。送料がちょう高い。
  • 娘, preschool 初日。なんとなく心配で drop-off についていったが、名残を惜しむ様子もなく砂場に駆けていった。事前の見学日にエンジョイさせておいた甲斐があったか。問題なければ今後数年は通うわけで、気にいると良いなあ。英語わからんのに英語の学校に入れるとか容赦ない気もするが、いつかは超えなければ行けない壁なのであった。(お前は超えてねーだろという点はさておき。)
  • Why so many Chinese students can’t understand the Hong Kong protests | Hacker News
    • このスレは「俺はバングラディシュから来たが・・・」「エジプトでは・・・」とか色々いて面白い。しかし「俺の彼女も・・・」とかいってる人は苦労しててお疲れ様です。
  • VMware acquires Carbon Black for $2.1B and Pivotal for $2.7 billion | TechCrunch
    • Pivotal もともと子会社だったのでは?とおもったが EMC との合弁会社だったのを買い取ったということなのかな?とおもったがそういえば去年くらいに上場したんだっけ。そして Kubernetes company という位置づけなのか。
    • Kubernetes, 技術的には面白そうで興味あるけど界隈としてはどんどん近づきたくないかんじになってんなー・・・Serverless がこのへん皆殺しにしてくれるのを待つばかりであるよ。
  • 娘、プレスクール(面倒なので「学校」と呼ぶことにした)は楽しかったらしい。頼もしきことよ。週二回よりたくさん行かせてあげたいが、現段階では週二と週五以外のオプションはないのだった。

水曜日

  • 夫婦会談が深夜まで及んだため早起きは無し。
  • 一日休み、かつその休みが他のことで忙しかった場合は完全に仕事記憶およびやる気が page out するな・・・。
  • 三ヶ月くらい見過ごしていた dogfooder のバグを発見してしまった・・・すまねえ・・・。
  • Deterministic GC が恋しいときもあるけれど私は元気です (adb shell dumpsys meminfo を眺めながら)
  • バグというのはやがてなくなる(マシになる)という希望があれば triage する気にもなるがそれがないとほんと苦痛。リリースされてないプロジェクトとかだとこういう苦痛はないが、それはそれで雇用が不安だし美味しい話はないもんだぜ。
  • Introducing Cloud Run Button: Click-to-deploy your git repos to Google Cloud | Google Cloud Blog
    • あんまし嬉しくない... Heroku は PostgreSQL とかも標準でついてるし add-on  もあるからいいが、cloud run じゃ stateless なもんしかつくれなくね?なんか実用的なことできるんだろうか・・・。
  • うおーすごい遅いやつの原因に気づいてしまった!しかし帰る時間。

火曜日

  • 04:50. 論文印刷したのにおいてきてしまった...
    • RCNN を読む・・・が結局 region proposal がなんなのかわからん (既存の方法をつかっている)...
  • On-disk format robustness requirements for new filesystems [LWN.net]
    • Read-only でマウントする (Android の system partition のような) にはその前提を活かした fs をつくる、という HUAWEI 発のファイルシステム。やるな。
    • コメント欄にトロルがいるね・・・。
  • 向井さんのエピソードからのリンクで久しぶりに chromium-dev を見たが・・・。めんどくさそうで近づきたくない気分が高まった。もうオープンソースとかできない気がする。Linux の次くらいにめんどくさいのでは、というのは言い過ぎか。必ずしも殺伐してはいないのだが。
  • プレスクール準備等のため一日休み。

月曜日

  • 04:34. 昨日は宴会に呼ばれた都合で風呂に入りそびれた...
    • 何読むかな。決めてたのがあるがいまいち気が乗らない。
    • Mask-RCNN を読むがまったくわからない。
  • お手紙配信にあわせてこれを読み直していたが、自分のやってる podcast の personality という点で寄与しているのは自分自身ではなく向井さんだな。自分は根が俗悪的なのを向井さんの niceness がキャンセルしてくれている。
  • 去年の日記を読んでいるとバグや組織圧に苦しめられている様子が生々しい。今年も相変わらず苦しめられているが、あしらいに習熟はしてきている感じがある。これはプログラマとしての汎用的スキルには一切寄与していないが今のチームで税金を払う訳には立っており、それがトータルでの負担減に繋がってはいるので全く無駄でもない気がしてきた。こうやって小さな余裕を少しずつ買い戻し、それを他のことに使っていきたいもんです。
  • 前回の Go の話の人気をうけ Podcast 視聴者数を Apple のサイトで見てみる。だいたい月に 900-1000 デバイスで安定しており、これは一年前から変わっていない。 特に時間とともに増えるというものではない模様。
    • リンクが回覧されて聞く人が増えるとそのうちの何パーセントかは定着して総体としてはじりじり数が増えるのかなと思っていたが、そういうものではなかった。あるいはそうやって聴き始める人と飽きるなどで聴かなくなる人の拮抗しているのか。そもそもリンクが回覧されてないのでは、という話はある。
    • 微分がゼロなのは盛り上がらない気がする一方、1000 人も聴いてくれてるなら十分なのではとはとも思う。
  • Bug tracker の TODO 用 label を一旦 bankrupt して start from scratch する。ぼんやりしているうちに崩壊していた。チームでこれやると一時大事だけど個人レベルだと適当な頻度で scrap and plan した方が良い気がするな。
  • Encarta was part of my first job out of university. I worked in Microsoft's Mult... | Hacker News
    • いい HN コメントコレクションに追加。
  • TPM 前に輪をかけて優秀だが burn すべき問題が多すぎ、対処できる能力がありそうなだけに burnout しないか心配。ちょっと鈍感なくらいが健康の秘訣のような。

Book: The Case Against Sugar

|

The Case Against Sugar: Gary Taubes

The Obesity Code つながりで読んだというか聴いた。砂糖ってタバコみたいなもんですよね、依存性があって有害な精製物ですよね、成人病はじめ万病のもとですよね、科学的に調査できないくらい昔からあって文化に溶け込みすぎてるから断定できないけど間接証拠いっぱいありますよね、利害関係者は金の力で目くらまししてますよね、という話。かなりアグレッシブな主張だが、一方でヒステリックになりすぎず証拠集めをがんばっているので割と説得力ある。

砂糖業界が全力で責任逃避をしてきた歴史は面白い。まずは脂肪に責任をおしつけ、つぎにカロリーすなわち食べすぎに責任を押し付け、人工甘味料に責任を押し付け・・・。特にカロリーに責任を押し付けたのはイノベーティブな責任転嫁だと思う。つまり砂糖は "empty calory", 他の栄養がないカロリーだけの代物, という言説を受け入れることでインシュリン耐性というより大きな害から視線をそらす。肉を切らせて骨を断つ。砂糖だしな。

砂糖業界の陰謀だけでなく歴史の偶然みたいのもある。第二次大戦後の食料政策で大量につくるようになってしまった corn の体のいい使いみちとして corn syrup が発明され、あらゆる食品につっこまれるようになってしまったのは、悪意よりは成行きに思える。そしてなにより砂糖が大量につくれるようになったのは産業革命のおかげ、テクノロジの力でもある。

レビューおよび著者インタビュー:


個人的には(近似として)sugar は麻薬であるという事実を受け入れる気になった。自分の人生からは refined sugar および関連食品を駆逐していきたい。会社の free snack の恩恵が減る残念といえば残念だが、麻薬の力で労働者を酷使しているのだと思えば腑に落ちる。

勤務先の名誉のために言っておくと、最近は甘いものは棚に隠すなど目隠しをするようになった。しかし砂糖つきドライフルーツは可視状態になってるぞ!それもしまえ!というのは完全に entitled jerk による言いがかりだと理解しております。むしろブラック企業はもっと積極的に sugar を従業員につっこんでくといいのではないか。合法だし、あらゆるドラッグより安いし、簡単にテンションあがるし、医療コストは保険会社と社会に転嫁できるし、酷使ツールとしていいことだらけじゃん。

家族というか奥様を説得するのは難しいと感じる。あまり強く push しても家庭不和になりそうなので、自分の commitment を disclose してその理由を繰り返し伝えていくくらいであろう。あなたたちがアイス食べてても私は食べません。チョコレートもけっこうです。パンにジャムは塗りません。焼いてくれたマフィンもパスさせてください。そう決めたからです。という。こう書いてみると home bakery を断るところが一番ハードル高い。これが文化の力。


Sugar とインターネットの類似性も指摘せずにはおれない。依存性はありそうだが生活に組み込まれているので断定はできず、関連産業もその可能性をはぐらかしつづけている。なんらかの形で軟着陸してくれるといいのだけれど、答えが出るのはずっと先の話でしょう。

日記: 2019-08-17

|

今週

  • バグとりとかで捗らず。あと単純に集中力を失っている。
  • 集中力については考える必要がある。なぜ気が散っているのか?
    • Podcast, だけではないよなあ.
  • Portrait mode 高速化についてはメモをちゃんと書く。
    • Docs はやはりおもすぎるなあ・・・。
    • ローカル環境つくりなおすか。
    • Wiki とかでもいいのだが・・・
    • 時間を溶かしそうなのでとりあえず Docs でがんばる。保留。
  • 来週は V のバグをあしらいつつ gating に focus. これはどのみち必要なので。

日記: 2019-08-14

|

  • 巨大な SO をマージしたい。どのみち同じタイミングでロードしている。
    • これは簡単なのでささっとやるべし。
  • 朝の時間の使い方を見直したい. "Writing Process" book の影響。
  • Portrait 遅い問題について考える。カメラの close をスキップできるならしたい。

Huawei officially reveals Harmony OS, its first party operating system

|

via Huawei officially reveals Harmony OS, its first party operating system

Fragment から移動

Fragment #18

|

日曜日

  • 05:30. 昨日夜ふかししてしまった・・・。
    • 編集。
    • Silence Truncation を適用してみる。向井さんのターンが 29 min -> 26 min, 自分のターンが 33min -> 30min でどちらも 3 分近く縮んだ。一割?そんな縮めちゃって大丈夫なのかな。とサンプルして聴いてみると割と大丈夫そうな雰囲気。Truncate ではなく縮める、という謎の設定があったので (デフォルトの) 0.5 秒以上の空白を (デフォルトより強気の) 30% まで縮める。切れ目はわからなくもないが、それは前からそうなのでいいです。
    • というわけで現状のフローは
      1. Auphonic を通す
      2. ノイズ除去する
      3. 空白除去する
      4. 音量調整する
      5. 圧縮

土曜日

  • 05:10 at Starbucks
    • Blog の量も減っているがそれ以上に個人的な braindump が減っているので意識的に吐き出していかねば。ということで仕事日記を Starbucks 活動の routine に戻す。
    • Podcast おまけ書き終了。だいたい 1h くらいかかる。ほんと note の編集画面は出来がわるくてイライラするわ・・・。
  • 夏だねえ
  • Hermes: A new open source JavaScript engine optimized for mobile apps
    • 人余りとみるとか React の勢いと見るか。
  • Perfetto という Systrace の後釜が Q からはいったので詳しくなりたいのだが人々あまり注目してないしエコシステムも枯れてなくて厳しい。特にビューアが小奇麗なばかりで必要な機能が揃っておらずはー・・・というかんじ。しかし procrastinate しててもはじまらないのでドキュメント読まないとなあ。
  • 娘につきあってパプリカという NHK のオリンピックテーマ曲(?)の振りを練習しているがむずかしい・・・。

金曜日

  • 05:15. Note writing. またギリギリ...
  • Q の gesture navigation, いまいち思い通りに動かずイライラするのだが、一方であとから P にもどるとそれはそれでイライラするという人間の慣れの恐ろしさよ.
  • Nvidia CEO: Google is the only customer with silicon at scale
    • データセンター減収. まじで? しかし TPU すくなくとも今の関係なくね? NVIDIA に影響できるくらいいっぱい数とはおもえないのだが...
  • またどこか遠くのコミットがツリーを壊した・・・。こういうときほっといても誰かがなんとかしてくれるのが大きいチームだが、中規模以下だと自分で出ていってお願いしないといけないのだった。
  • SIGGRAPH 2019 Papers あとでにらむ

木曜日

  • 4:50. Note writing.
  • Onsite Haircuts ためしてみる。$38, 所要時間 30 分, 前日にオンラインで予約して待ち時間なし。いいのでは。散髪だけのために休暇をとるのもアホらしいので、仕事を 30 分ずらせばそれで済むのは便利。引っ越してきたときはこの床屋を使う日は来るまいと思っていたけれど。
  • 仕事モニタをアップグレードして 4K にしてみる。文字小さすぎを心配していたが、自分が仕事で使うアプリは限られているのでそいつらの設定をいじれば済むだけだった。ウィンドウの装飾が画面に占める割合が減って快適。なお自宅の 15 inch laptop も 4k だが、こっちは HDPI で使っている。
    • Systrace がちょう見やすくなった!
  • 東京オフィス、ばんばん採用する予定だから refer してくれよな、という趣旨のメール。景気いいな。 建物がでかくなるから人をとるという論理だと理解しておりそれはどうかと思う一方、会社全体でみるとどのみち狂った勢いで採用を続けているので東京だけがどうこういうものでもないとは思う。
    • 東京は at will とかじゃない気がするので雇用の安定性は相対的に高い・・・のだろうか・・・?なぞ。外資系はどのみちリストラするときはしているようにも見えるが。
    • 求人を眺めると ML/AI そしてなによりクラウド。どれも縁遠い。
  • ある種のプラットフォーム業者である勤務先で働くにつけ、むかし持っていた devrel, evangelist, customer engineer, solution architect ついでに tpm など製品開発でないプログラマ職への偏見はなくなったが、かといって自分ができるというものでもない。そして日本で働くならそういう仕事の方が米資企業の職が多く稼ぎやすそうな気もする。
  • こうした職種が製品開発本体とくらべてイマイチなのは影響がスケールしないことなわけだが、スケールする仕事をしているプログラマが良いプログラマとも限らない、そしてスケールする仕事の方が楽しいとも限らない、のが現実。クラウドとかどう考えても中の人より使う側の方が楽しい。
  • 久しぶりに dogfooder から trace をもらう。このときのために普段からちゃんと接客してる。バグ接客業。On-device trace はいつ見てもなんど見ても fascinating だなー。Fuchsia Documentation  |  Fuchsia ふと見ると・・・無駄に整備されている謎。
  • 隣人が「クーラー買ったけどいる?$40 よ。息子がぶっ壊すだろうと思って余計に買ったの」という。相変わらず豪快である。「熱帯の日本で鍛えたので大丈夫です」と辞退。
  • 娘が隣人を「おとなりさん」と呼ぶようになってしまったのでおもむろにファーストネームで呼ぶよう誘導中。大人の言葉遣いに気をつけなければ。しかしどのみち「さん」づけなあたりが日本人。

水曜日

  •  04:36. 割とおきられた。寝る前にメラトニンを飲んでみたのが効いたかな。
    • Note writing.
  • 会社での立ち振る舞い研修をうけるたびに思うのはマネージャの大変さ。自分は management というものには mixed feeling だけれども、この手の組織の面倒を見る責任を負わされている点は評価しているというか、大変だけどがんばってねと思う。無理。
  • Micro-affirmations & Micro-inequities (PDF)
    • Micro-affirmation というのは aspiring な概念で、一考に値する: プログラマにありがちな micro-affirmation / micro-inequities / micro-aggression はなにか。プログラマに固有の micro-x にはどんなものがあろうだろうか・・・。
  • Paged Out!
    • イチ記事1ページというコンセプトが良い。ラムダノートというのとある意味正逆。どちらがよいという話ではなく色々あると良いという話ね。
  • どうも人々は下の方の挙動を理解せず C++ 使ってるフシがあるなあ。画像処理 DSL としての C++ みたいな。しかしそういう人々のコードがクラッシュすると大変困るのだった(当人たちが)。

火曜日

  • 05:31. 起きられなくなってんなー...
    • Paper reading.
  • リリース関係のリグレッションを調べていて気づいたが、アプリのリリースプロセスのうちかったりーやりたくねーやらされる人かわいそう・・・とおもっていた作業を TPM 氏が謎の python スクリプトで自動化していた。やるな!TPM 業, SQL とシェル以外のコードもかけると圧倒的に生産性あがりそう。てか TPM は T というだけあって一般論としてコードは書ける場合が多いのだが、社内インフラ複雑過ぎ問題のため役に立つコードがかけるケースはやや下がる印象だった。しかしこの人はかける。やるぜ。もと SWE だけある。
  • The tech employee backlash, Whole Foods edition - MIT Technology Review
    • Palantir が AWS を使っているというだけで文句いわれてニュースになるとはとばっちりにもほどがあるのでは・・・。
  • Three Years of Misery Inside Google, the Happiest Company in Tech | WIRED
    • ここ数年はほんとにひどいが読んでると思い出してうんざりしてきたのでそっとじ。キャリアの厳しいタイミングで子どもをもったのは厳しいとおもうときもあるけれど、子どものことなどに気を取られて会社のいざこざが相対的にどうでもよくなっているのはよかった。2012 年くらいの無駄にヒマでナイーブだった時期にこういうことあったらほんと鬱になりそう。まあ辞めてたのでしょという話はある。
    • そういう意味で電話機の仕事はきほん underdog だから世間への影響力とかあんましないのがよい。うんざりすることもおおむねテクニカルで、政治的な話題は少なめな気がするし。

月曜日

  • 05:45. 寝る前のダラダラが戻ってきてしまってるなー...
    • そして子が早起きしてきて何もできないまま終了...
  • Uber, losing billions, freezes engineering hires | Ars Technica
    • リクルーターからばんばんメールくるのでこいつら赤字なのに大丈夫なんか、とおもったが大丈夫じゃなかったらしい。
    • ところで "uber hiring freeze" で検索したら Blind という陰口サイトが検索上位に。まだあったんか。ちらっと眺めると以前より login なしで読めるコンテンツが増えているが、治安の悪さは相変わらず。おまえらは thelyoffs でもいっとけ...
    • 一方アジア発でこんなに流行ってるサイトをみたことないので、その点だけは評価できる。

仕事のやる気

|

真面目に仕事する活動をはじめて一年以上たち、だいぶ仕事への engagement を取り戻してきた感じがある。色々とやりたいことがある。主にひどいコードをなんとかするのとしょうもない遅さをなんとかする話でクールな機能とかではないけれど。

リファクタリングについては、コードベースへの理解が進んで現状がどうなのかわかってきたのと、チームダイナミクス的な点で何が問題なのかわかってきたので前よりは見通しが立ってきた。

自分はユーザにインパクトのある成果を無視してリファクタリングばかりやっていた過去があるため、ここ 3-4 年くらいは反動でリファクタリングに時間をつかわないようにしてきたけれど、今のコードベースはちょっとなんとかしてあげないと死んでしまうあやうさを感じる。前のチームのコードベースはもう死んでしまっていたのでこういう悩みはなかったが、このチームはまだ救える見込みがあるだけに少しはがんばりたい。

もうひとつリファクタリングとかコードデザインに口を挟みたくないのは、デザインにこだわりのあるチームメンバーと衝突するのがかったるいからだが、今のチーム、というと範囲が広すぎるけれど自分の見ているあたりのつまり UI コードは意見のあるひと不在で崩壊しかかっている。これはフネヤマに登りがちな今の勤務先では割と珍しい現象な気がするが、そういうこともある。昔はそれなりに気にしていた人がいたっぽく、というか今の TL だが、ベースのデザインは古いなりにまとも。ただその  TL が他のことに忙しくなって UI まわりを放置しているせいで窓が割れ放題になってしまった雰囲気がある。こういうのを直すのは年寄りの仕事に思える。

というか、コードがひどすぎて本業である性能改善に支障がでている。それらのひどいコードは同時に遅さの問題も抱えているのに、直すために必要な精神力予算が多すぎ。ある程度は息を止め防塵マスクと安全靴で乗り切りつつ、環境保全もしていけないと sustain できない。


それとは直行した話として、英語。過去になくよく他人と話をしている。仕事をしている相手がだいたい同じオフィスにいるのと、性能関係は他人のコードをいじることが多い都合だろうか。

が引っ越してきた直後に英語を使う機会このくらいあったらすごいやる気をもって勉強できたと思う。当時は仕事がリモートだったり一人プレイだったりで機会が少なく、やる気を絞り出していた・・・は言い過ぎだけど訓練と実践のループが回しにくかった。結果として語彙ばかり増やし無駄に新聞を読む速度は速くなったが仕事のお役立ちがいまいち。今は発音とかを練習し実際の人間相手に喋ってみるにはもってこいの環境なのだがそういう練習をする時間も気力もない。悲しい。

なお英語練習によく言われる同僚とのランチはあまり行っていない。業務で機会があり、九時五時縛りがあり、Podcast の論文読むとかの優先度によってこぼれ落ちている。これは英語云々とは関係なく team building 的にあまりよくないから週一回くらいはやらないとなあ。しかしランチをサンドイッチとかで済ますと生まれる希少な時間に目が眩みがち。


性能とコード品質の話に戻ると、これをやれば良くなると思えるアイデアがいくつもあるのにまったく時間が足らず全然すすまない。去年の時間のなさは割り振られたバグが多すぎるペーパーワークの辛さだったが、今感じているフラストレーションは相対的には前向きで、それはよい。一方ペーパーワークは別にやりたくないから九時五時縛りを appreciate していたが、自分でやりたいことがあるのに時間がなくてできないのはやや残念。

そして締め切りの厳しさはコード品質など大局的な改善の難しさに輪をかける。締め切りの厳しさが人生の書き換えを強いてこない(cf. 戦うプログラマ)のはいいが、かわりに自分にとっての「正しい仕事の仕方」を選べない残念さはある。反対側からみると、自分が正しい仕事をできないのは締め切りだけでなく九時五時のためでもある。

仕事日記のようなかたちでやんわりと業務外の時間を傾けるのは、割に合う範囲でやらないとなあ。夏休み明けのここ一ヶ月くらいさぼっていたせいで滞りがち。

もうひとつの代替案は自分にとっての「正しさ」を放棄・・・定義しなおして getting things done だけに集中することだが、それは一年やって疲れた。しかも自分が向こう側の価値観にまったく説得されていない。モバイルの世界で負債つき経営が許されたのは五年くらい前までで、もう技術的借金できる身分ではないと思う。いま無茶したいなら AI とかやらないとね。成熟産業なのだよ。

Work Journal: 2019-08-11

|

仕事やっていること:

  • Bootstrap 部分の高速化。基本的にはケチくさい話だが効き目はありそう
    • Architecture にインパクトのない形ではじめたい気持ちがある。
    • ForFrontend の変更を入れ、次にそのスレッドを Dagger の外から注入する。
    • このスレッドに早い段階で重いタスクを投げるようにする。
  • 次に必要なのは Readiness のバグを直すやつ。これ優先しないと厳しいのでやる。
    • この修正と ForForeground が入ると、タイミングの問題だけでなく throttling の問題も部分的に解決できる。やるべき。
    • 原因はなんだったかというと... FirstFrame のコールバックがすぐにこないことだった。CameraAppUi いじるのなんとなくイヤな気がしていたが、これをやってさっさと直すべきに思えてきた。
    • CameraAppUi の問題は CameraActivityController との区別がないことだが、これは現段階でなおすのは無理。CameaAppUi の細部に固執しても時間かかるだけでよい答えは出ない気がする。
  • CameraAppUi と CameraActivityController の区別の "refactor" については API を睨んで望ましい姿を考え直す。これは pure code health 系。
  • あとは遅い UI なんとかする系。OptionsBar の異常な遅さを見直したい。
    • クリーンアップ!
    • View の lazy 化
    • Controller の謎の遅さの理由を調べる。(profiling)
      • Off thread する?
      • Lazy する?
      • デザインを見直す?

Podcast 負荷低減に向けて

|

Podcast 準備後始末に日常が圧迫されている問題の解決に向けてどうするかの braindump です。

方策1: 頻度を下げる。収録を隔週にする。月一回にする。シーズンオフを延ばす。すっぱりやめる。

どれかはやる。間隔を開けるのが聞き手としてはリーズナブルだろうが、頭の片隅に常に次回のことがある、というストレスはある。一方でシーズンオフを延ばすと存在を忘れられがち。あと自分たちも忘れがち。いまの一ヶ月くらいは、ちょうどいい気はする。他の podcast を眺めるに我ながら定期的にシーズンオフを挟むアイデアは良かったと思っている。

方策 2: 時間を短くする。これは Linear Digression がうまくやっているところ。聞き手には短い方が気楽でいい。編集の負担は時間比例なので間違いなくラクになる。一方、短い時間で意味のあることを話せるのかという疑問はある。Linear Digression はその点で妥協しているのと、あとは Katie が専門家なので話題の肝をズバッと俯瞰できるのと、ちゃんと興味深い話題を選んでこれるので機能している。たとえば Reality Engine の要点を興味深い形でズバっと 15 分にまとめるとか可能なのだろうか・・・準備はラクにならなそう。

方策 3: シリーズものを増やす。これは読むものを考える負担を下げる効果と、普段より時間をかけて一つの話題に踏み込める読み手としての満足感を両立できる利点がある。一方で最初に複数回かけるテーマを決めるのはやや大変で、かつ最初の一本を読んでみないと時間をかけるに値するのかわからない欠点もある。ついでに頻度を下げるのとセットになると聞いてる方はstimulation Tateno Culture不足で満足度下がるだろうなとは思う。

個人的にはシリーズまるまる redbook から読んだりなんらかのサーベイ論文からリンクをたどったり、というのをやりたいんだけどねえ。ある程度幅がないと聞く方はかなり飽きるであろうことよ。まあいいんだけど。

方策 4: 編集しない。3-4 時間の節約になりはするが・・・。一回やってみて人々の反応を見ようかな。どもったりマイクぶつけたりえーとかあーとか言い直しとか色々気になるので削りたいが、聴衆は当人たちほど気にしてはいないかもしれない。

方策 5: 準備で手を抜く。これは編集しないより抵抗あるなー・・・。一年くらい前から構成を変えてノートも真面目に準備するようになった。じっさい 13, 15 あたりの notes とここ 69, 71 の notes を比べると長さが倍くらいになっている。これは内容をマシにしたと信じている。準備にかける時間を人為的に cap することはできるだろうが、それは嬉しいのか? note の準備は話す内容を考えるのに時間を使うということで、それは読んで咀嚼して自分の中に素朴なメンタルモデルを作る作業、理解する作業でもある。理解するのをさぼるとか娯楽として論文読む意味なくね?


一歩さがり、逆の見方をしてみる: つっこんだ時間で自分の得たいものを得られるようにする。本来やりたい・やる必要があることと、コンテンツ作成を近づける。

これはたとえば Kaggle なり GitHub をやる (GitHub をやるとかすごい言葉だ)のに必要だった作業をコンテンツ化する。これは・・・・世のトップランナーがやると良いコンテンツになる可能性を秘めているが時代遅れな人がやっても退屈なだけではないかなあ。そしてトップランナーのフリをすることはできない。なんにせよ「必要な作業」というのはしばしば大抵 boring なものである。

論文じゃなくて本やウェブを読みたい気分もあるので、本を読んできて感想を話すという手もありうる。月一回、年 10 冊くらい?悪くないのではなかろうか。ただ相変わらず手を動かす助けにはなってない。

手を動かす行為がもつコンテンツとしての boredom を乗り切るための妥協はありうるか。たとえば・・・毎週気になるフレームワークやライブラリや言語やツールを触ってきて紹介する、という構成はどうか。ちょう表面的だが、それいったら論文読むのも表面的なわけで。コードをさわって試せるだけ良いかもしれない。しかし向井さんを巻き込むところに芸の強要みたいな無理っぽさがある。

逆に一切の妥協をやめるとどんなコンテンツがありうるか。たとえば: 毎週なり隔週なりで課外プロジェクトの進捗を報告し、ついでにちょっと雑談する。これは今とくらべると随分と世俗的なものになりそうだしボンクラ boredom 問題はあるが、ボンクラなりに reality show 的面白さはあるかもしれない。ただ二人だといまいち盛り上がらなそうだね。三人くらいいると良さそう。


ほかには・・・とかいくつかアイデアがあるわけだが、むしろそういうことは自分じゃなくてヒマな若者がやれ!なんで rebuild 出来損ないみたいな対談構成ばっかりなんだ!ドヤ顔はもうたくさん!もっと芸人としてあたまつかってコンテンツ考えろ!

ごめん言いがかりすぎた。これは完全に体力のない中年の八つ当たりなのでスルーしていただきたく。自分にとっての Podcast の問題はやることのなさではなく時間のなさなので、世の中に時間はあるけどアイデアがない人がいるのはそれはそれで仕方ない。誰もが自分自身の問題を抱えて生きている。

どうすっかなー。

 

Fragment #17

|

日曜日

土曜日

  • 前日夜ふかし気味だったせいで起きられず。
  • 子の昼寝中。編集するなり。しかし今週は細かい編集はせず録って出してみる実験。
    • あっという間におわる!ちょうラク!すげえ!
    • 編集なしにしたのを聞いた感じとしては、なんかゆっくりに聞こえるね。噛むのはおもったほど気にならない・・・気もする。空白除去を自動化できればいいのかな・・・としらべるとAudacity にもある模様。来週は使ってみよう。
  • 隣人とのおすそわけ交流、gluten free しばりがあると学び困った・・・と調べるに、世の中だいたいなんでも gluten free 代替品あるんだね。パン粉すらあるじゃん。揚げ物が禁じられると厳しいので、これは朗報。

金曜日

std::function foo = nullptr;

木曜日

  • 04:50
    • note writing.
  • プレスクール準備などがたてこみがち。
  • The Lonely Work of Moderating Hacker News | The New Yorker
    • スタートアップに失敗した若者が YC に雇われてモデレートしてる、というだけでもういい話。人間による moderation を first citizen どころかサイト運用の主要業務にするコミュニティは応援したいが、5M MAU はさすがにでかすぎて厳しい。

水曜日

  • 深夜家族会議などに押され寝坊。
  • Sandra | Gimlet  昨晩家事のお供に聞き始めたら面白い。AI スピーカー業者に入社したらユーザの相手をする仕事だった、というベタ設定だが、ベタだけに細かいギミックがいい。上司のちょっと狂った感じもいい味だしてる。こういうラジオドラマっぽい podcast は夜の疲れたときに聴くにはいいかもしんない。
  • JetBrains Research — About Research とかあったんか、のみならずでかい!すげーな。
  • Java はそろそろ get(). の alias として -> を導入してほしい・・・とおもったが Kotlin に乗り換えて lazy を使えればそれでだいたい解決なのを思い出した・・・。

火曜日

  • 04:40
  • Object Design: Roles, Responsibilities, and Collaborations: Rebecca Wirfs-Brock, Alan McKean: 9780201379433: Amazon.com: Books
    • すごいいい本だった、という思い出だけがあり時々読み返したい衝動に駈られるが 2002 年版。もうちょっとモダンなやつないもんか。
    • しかし DDD すら 2003 年なので OO という存在はこの時代の残滓なのかもしれない。というと現代 OO してる人におこられそう。青春だったということにしとこう。
    • 関連図書を眺めると Growing OO というやつが 2009. これも有名だった気がするだが 10 年前かー。
    • Elegant Objects (Volume 1):  2016. なんか妙に評判いい。
    • しかしこれらの本の目次などを見て沸き起こる OO とかやってる場合じゃないという衝動はいかんともしがたいものがある・・・一方でソフトウェアデザインの本を読んでああーっという気持ちになりたい。ああ・・・。
  • 近所の公園の一部を民間の非営利団体が改築する提案、まだ募金が足りないらしい。自分たちですらちょっと募金したというのにおまえら。
    • このへんのテック住人は長居しない前提の人が多いのだろうな。借家だし。
    • それはさておき「近所に公園がほしい」という極めて利己的な目的の募金が非課税という事実、そりゃ地域格差も生まれるわ。ちなみに同じ団体が Palo Alto に作った公園には Larry Page がバーンと募金した事実が記されている。
  • Lemonade Home & Renters Insurance | Protect The Stuff You Love
    • 最近家財保険のサイトにアクセスしたら今日この広告がでてきた。次回更新近くに見直す(覚えてたら)。
  • Democrats have told Google to make its contractors permanent employees - MIT Technology Review
  • 娘 preschool に書いた質問のメールであやうく Morrita と書きそうになり危うい。オンラインの残滓が日常に影響をあたえるインターネット出身者。
  • 年末は例年のハカソンあるからお楽しみにね、といわれ今年は若干やりたいことある気がするなと思ったが、何ヶ月先やねん。

月曜日

  • 05:45
    • せめて編集だけはおわらせないと。
    • おわった。今週はみじかくてよかった。長いのは編集する人も聴く人も不幸なので 30 分に収めたいと思いつついつも 45 分くらいになってしまう問題。15 分くらいにするつもりで話せばいいのだろうか。
  • Podcast 負荷低減に向けて
  • チームのチャットに毎週末ドライブした先で取ってきた写真をシェアして論評する人がおり、こういう風だと仕事すごい楽しいだろうなーと思う。Dogfooding に限ると、自分は電子書籍の方がヘビーユースしてたな。
  • Amazon.com: The One Device: The Secret History of the iPhone (9780316546164): Brian Merchant: Books
    • あんましレビューよくないが・・・
  • A new report outlines Facebook’s struggles to develop its own hardware - The Verge
  • 検索会社のソーシャルをめぐるごたごたと似たようなことがソーシャル会社のハードウェアをめぐり起きていたのは興味深いというか何処も同じ隣の芝であることよ。検索会社ハードウェア部門は作ってるハードウェアはそれなりに秘密とはいえこういう秘密主義的な問題がないのは、Chromecast や Nexus や Pixel Laptop あたりの部門別草の根的ハードウェア(狂った響き)から発展的に出来た部門だからだろうか。やはりトップダウンはダメだなと biased confirmation をしてしまう。
  • Opinion | ‘Trump’s Going to Get Re-elected, Isn’t He?’ - The New York Times
    • 大荒れ。5000 コメントとかはじめてみた気がする。Friedman 自らコメ欄に降臨しているのにはある意味感心。そして 2020 再選、個人的にもそんな予感をしている。
  • またしてもコードの messy なとこに踏み込みつつある・・・。
  • 疲れて頭はたらかず。かえる。
  • Pouch | The Better Bean Bag Chair | Tuft & Needle
    • Tuft and Needle が bean bag を出していた!よさそう!しかしでかすぎ。無念。

高速化日記 (3) - Pinning

|

ここ半年くらい断続的にアプリの "pinning" の面倒を見ている。

Android には pinning という仕組みがあり、一部アプリの APK および dex が常にメモリ上に "pin" される。つまり mlock() される。これのおかげで pin されたアプリはいつも最小の I/O で起動できる。カメラも pin されるアプリのひとつである。(なお実際にカメラが pin されるかどうかは電話機ベンダの設定次第。あとデバイス付属のアプリじゃなくてもデフォルトカメラに設定すれば pin される。)

mlock() は荒々しい特権システムコールで、下手に使うと仮想メモリを使い切りシステムを壊してしまう。なので pin される APK のサイズにはアプリあたり 80 MB の上限がある。カメラはあるときからこの上限に達している。そうした巨大 APK への処置として、アプリは APK のどの部分を pin するかアドレスのレンジを指定できる。pinlist.meta というファイルを使う。この仕組は去年くらいにはいったっぽい

この pinlist.meta は offset と size の列をバイナリで並べた低レベルなフォーマット。アプリ開発者は pin したい候補ファイルのパスを設定ファイルに列挙しておき、ビルドシステムがそれを pinlist.meta にコンバートする。ぶっちゃけこの仕組はカメラのために入ったものである、と思う。なぜなら他のアプリの APK はもうちょっと常識的なサイズなので range based pinning は必要ないからである。

あるとき「Systrace が I/O 待ちで真っ赤じゃん、ほんとに pinning 効いてるのか調べてくれ」と頼まれた。いろいろつつきまわったところ、大きな I/O の要因たる共有ライブラリ (.so ファイル) が pinning されていないことがわかった。なぜなら .so ファイルは dlopen() するために APK からファイルシステムに展開され、pinning の対象から外れるためである。

ただこれを避ける裏技(ではなく推奨設定)があり、その設定を使うと .so を APK から直接ロードできる。(bionic がサポートしている。) .so を pin するにはこの設定を有効にして APK 内に .so を留めておく必要があるのだが、 自分たちのアプリは設定が間違っていた。

というわけで設定を直したのが最初の仕事。


設定を直したところ .so が pinning されるのはいいのだが、それらのライブラリが巨大すぎて 80MB の pinning budget を使い切ってしまった。自分たちのアプリの APK はでかいので無理もないのだが、一方で予算がたらず必要なファイルを pin できていない懸念もある。pin するファイルの候補リストは適切なファイルを適切な優先順位で列挙しているのだろうか。

というか、いくら APK がでかいとはいえほんとにアプリの起動に APK のコンテンツを 80MB も使うの?アプリの起動時に実際に読まれてる APK のサイズわかってないじゃん?

などの疑問に答えられないかと調べて知ったのが mincore() というシステムコール。これはある仮想メモリのアドレスが実際にメモリの上にあるのかを教えてくれる。

つまり APK を mmap() してそれを mincore() で probe すれば APK のどこがメモリの上にあるかわかる。具体的にはまずアプリの pinning を無効化し、page cache をクリアし、アプリを起動し、それからこの mincore probe をすればアプリの起動時にアクセスされる APK コンテンツのサブセットを特定できる。このアドレスを APK (zip) ファイルのレイアウトと照合すれば、起動にアクセスされた APK 内のファイル名がわかる。

というわけでそんなスクリプトを書いてファイルを列挙してみた。だいたい期待したとおり動いているっぽい。実際は 4kb の page size より小さいファイルもいっぱいあるので若干ヘンなファイルも紛れ込んでいるが、すくなくとも巨大な so たちはそれっぽいかんじで列挙される。のでこれらの手順を適当に自動化し、pin するファイルの候補リストを生成できるようにした。結果としてリストからアクセスされていない .so を除去し、ひっそり使われている .so や協業しているチームがつっこんだ ML のモデルファイルなどを取り込むことができた。


これで「pin されるべきだしできるのにしてないファイル」はなくなったが、相変わらず 80MB の予算は使い切っている。Mincore probe によると実際にアクセスされる APK コンテンツは 50-60MB くらい。実行プロファイルに基づいてファイルを選んでいるなら予算が溢れるのはおかしい。

結論からいうと原因は .so ファイルへのアクセスが sparse なことだった。つまり pin した巨大な .so のコンテンツのうち起動時にアクセスされるのはごく一部で、pinner は使われないコンテンツもロードしてしまっている。その無駄領域が予算を浪費していた。

Platform は APK 内のアドレスに基づいてコンテンツを pin できる。問題はファイル名ベースの候補リストである。だから理論上は候補リストからの生成をバイパスし mincore probe の結果アドレスをそのまま pinlist.meta にすればよい。

が、この方法は運用がきびしい。APK のコンテンツをちょっといじるだけで結果が無効になってしまうし、結果を常に最新に保とうとするならビルドプロセスにアプリのプロファイリングを織り込まないといけない。PGO みたいなもん。しかも自分たちのアプリはエミュレータで動かないため実機が必要。大仕事すぎる。

はー下手にやってファイル更新係とかになるのもイヤだし無理だわー・・・。重要なファイルは pin されたからまあいいいや。このプロジェクトは切り上げ、他の仕事をやることにした。


しかし最近になってどうも OS の消費メモリ多すぎが問題になったらしく、おまえらその 80MB 全部使うなよ、と苦情がきた。自分としては起動が遅くなっても困るので適当にはぐらかしていたのだが、よほど困っているらしく偉い人から助っ人プログラマが派遣されてきた。現状を教えてくれというので上のようなノートを書いて渡す。

しばらくするとパッチがやってきた。最初のパッチは自分の書いた自動化スクリプトの修正だった。Zip のレイアウト計算にバグがあり、コンテンツのアドレスに Zip ヘッダが含まれていた。.so ファイルはコンテンツが page aligned なため、ヘッダを含めると余計なページがカウントされてしまう。影響は軽微だが、よくみつけたなと感心した。

けれど本当にびっくりしたのはその後に続いた変更だった。このひとスパースな .so アクセスによる無駄の問題を解決したである。具体的には .so ファイルのうちコードでない部分を除外する仕組みが追加された。

この変更、まずビルドプロセスの中から readelf コマンドを使い .so を読んで不要セクションのアドレスを特定する。そしてファイル名から APK のアドレスをつくるビルドシステムのステップを拡張して不要セクションの情報を最終的な pinlist.meta に反映する。これならビルド時にアプリを起動するみたいな大掛かりなことをしなくてもスパースアクセス問題を解決できる。結果として pin size は予算を大幅に下回り、OS は使えるメモリが増えてハッピーエンドとなった。

このアプローチの圧倒的な正しさ。それに自分は readelf なんて知らなかったしビルドシステムをいじろうと考えもしなかった。ひさしぶりに優秀なプログラマの素晴らしい仕事ぶりを目にして心が洗われた。

このひと社員名簿をみたかんじでは別に OS や最適化の専門家というわけではなさそうなのだけれど、わざわざ刺客として送り込まれてきたくらいだからなんかあるんだろうな。なんにしてもすごい。あとで peer bonus おくってちゃんと appreciate せねば。


追記

「神の仕事でしたわ」と西海岸風に賞賛を書いた peer bonus 送信完了。なお前回 peer bonus したのは N 年前だった。もっと活用せねばならぬと反省。