Spinach Forest

May, 2019

/ Fragment #7   / Less Relevant: Blocking vs Non-Blocking   / Intermittent Fasting   / Fragment #6   / The Pragmatic Programmer 一通り眺めた   / 棚卸し   / 歩きの効能とノート   / 技術書への不満という濡れ衣   / Fragment #5   / Cloud Build と Serverless   / Pragprog 20 周年版(Beta)読み始め   / Did Docker Win?   / Fragment #4   / Python Async/Await のいまいちさ   / Podcast Clip-Sharing   / 高速化日記 (2) - Colab   / ... 

Fragment #7

|

日曜日

  • 妻子より風邪をうつされ終日ダウン。奥様の協力により寝ていられたのでだいぶ回復。

土曜日

  • 03:52. Podcast 編集.
    • 一本目終了. 二本目やるかどうすっかな...(長さが倍ある)
  • Watsonville で Strawberry U-pick. なかなかよかった。

金曜日

  • 04:20. Podcast 準備. 今日録るのに準備がおわってない不覚...
  • 子の朝食: 昨朝 peas を用意したが案の定食べなかったため、残りを food processor で crush のち flour で batter して omelette. 食べた. いつも salt しわすれてオタオタする. batter の 前に taste しておく必要あり.
    • Omelette 最強で頼ってしまうが eggs 以外の mixing base が欲しい. 卵摂りすぎ. Pancakes  はやるとして, そろそろひき肉すなわちハンバーグ/つくね/meatballs を学ぶ必要があるか...
  • Meeting notes が届いて昨日なんらかのミーティングをぶっちぎったと気付く。
  • 気の迷いと仕事からの逃避でうっかり社内のフォーラムに目を通してしまい、空気の悪さにげんなり。黙って働くのが一番。
  • Undervalued Engineering Skills: Writing Well | Hacker News
    • 何か言いたいことがある気もするが、まあ言いたいことはわかるよとも思う。何事もバランス。

木曜日

  • 04:48. Podcast 準備
  • 子の朝食: Omelette のバリエーションとして egg に shredded cabbage と flour batter を mix して気付く: これはお好み焼きなのでは...(食べた)
    • Cabbages は fiber を入れられるのが良いけど、若干青臭さがある。Leeks の方が良い気がする。
  • 奥様風邪につき子供の drop-off および pick-up が必要な日。
  • Making our Android Studio Apps Reactive with UI Components & Redux
    • Redux がエラいのか Kotlin がエライのか Netflix がエライのかはわからんが、MVx の仲間の中では割と許容範囲に見える。やっぱ Compose いらなくね?こうやって上のレイヤでやれば済むのでは。
  • 段々とある種の moral ground が下がってくる感覚がある. 同じ現象は他人にも観測されているので自分だけではなかろう. 一方で環境に負けず moral high ground にとどまれている人々が製品を支えているのも事実で, そこには尊敬がある.
  • Third Bit: Software Engineering Revisited
    • 自分はこの人の意見には必ずしも賛成できない一方、影響も受けている。リンクされているこの教科書は怖いもの見たさに冷やかしてみたい気もする。
  • How Qualcomm shook down the cell phone industry for almost 20 years | Ars Technica
    • 件の lawsuite は Apple じゃなくて FTC が訴えていたのか!
  • A crash bug をまったく再現できない・・・(同僚は再現できる)。なぜ・・・。バグったソフトウェアを使いこなす才能というやつか。

水曜日

  • 04:16. cosleep は就寝が早い上に眠りが浅いので、朝は起きやすいかもしれない。昼間への影響が若干心配ではある.
    • 若干家事。そのあと Elixir ドキュメントへ。
  • Introducing Lightning Web Components Open Source | Developer Force Blog
    • Salesforce 使ってるんか。
  • Angular v8.0 | Hacker News
    • 意外とディスられてなかった。人々はディスり飽きてきたか。仕事サイドプロジェクト用にどこかでさわらないととおもいつつ月日は流れ。
  • 遅いぞ、というバグレポートの顔をした苦情のお便りに、ごめんね、がんばるね、と返事を書きつつ閉じる作業。Dogfood user が撮れなかった瞬間の鬱憤を晴らす役に立っているなら良いが、自分の精神衛生にはそんなによくない。20 人に 1 人くらい現れる on device trace してくれる熱心な dogfooder を獲得するための patience-heavy task.
  • 昼飯食べすぎた。PB&J の誘惑に負けた。
    • 加えて別のオフィスに引っ越す同僚の farewell で sugar 摂取. そういう日もある.
  • Amazon.com: Star LabTop 13.3-inch Ultrabook Laptop (480GB OP SSD Storage, Ubuntu 18.04): Computers & Accessories
    • 割と良さそう。解像度頑張れ。
  • When algorithms mess up, the nearest human gets the blame - MIT Technology Review
    • 組織の malfunction 厳しい・・・と知りながら組織の malfunction を突きつけてきた相手(したっぱ)を blame/hate してはいかんな・・・。
  • Grandparent scams - Fraud.org
    • オレオレ詐欺を英語でこういうらしい。

火曜日

  • 04:20. 昨晩は久しぶりに川の字で cosleep したが Fitbit alarm のおかげで時間どおり起床できた。めでたい。
    • Elixir の本つづき。
    • 退屈すぎるので本家のドキュメントにスイッチ。
    • 子の起きる声がするので終了。06:20.
  • YouTube の incognito mode ができたというので試してみるとトップページに出てくるコンテンツのやばさにビビる。Facebook の Watch ページも相当なゴミだと退いたが、こっちもなかなか。レコメンデーションは偉大。
  • ARM
  • 家の用事で遅れた日の仕事のやる気のおきなさ問題・・・。
  • いよいよやなかんじのバグがやってきはじめた。こういうのを退けるために色々準備してきたわけだが、塞いでくれと頼み続け無視され続けた穴を見事にすり抜けて来る。
  • Crunch time というものにまったく何の干渉もなくただ hate だけある。締め切り向いてない。

月曜日

  • Sacramento より帰宅。ほどよく都会でまあまあいいとこだった。SF の問題は町中に機能している highway がないことだと学ぶ。101 と 1 がちゃんと highway として動いていたら SF ももうちょっと行きやすい都市になるだろうにな。Sacramento の 5 は市内にズバっと入ってくるのですごい便利。

Less Relevant: Blocking vs Non-Blocking

|

ブロッキングかノンブロッキングかという議論、10-20 年前と比べるとだいぶどうでもよくなった。これは全ての二項対立に言えることだが、理論的な良さ・悪さは個別の実装のがんばりによっていくらでもひっくり返る。

ブロッキング API と大量のスレッドが嫌われた理由の一つは OS スレッドのオーバーヘッドだった。スタックとかのためにアロケートされるメモリや、スケジューラへの負担。

スケジューリングを自分で持つような言語処理系だと、たいがいスレッドはずっと軽量になる。その筆頭は Go や Erlang だろう。Java Project Loom の Fiber も似たようなものになりそうな雰囲気がある。OS に fiber 的な仕組みを突っ込むこともできることはできて、先の Project Loom の資料は Google が C++ fiber のため Linux kernel を改変している事例に触れている。根本的なレベルで言語(C++)の可搬性を損なうそういう変更はちょっと勘弁してほしいもんだけれども。

ランタイムによる軽量スレッドの反対にいるのがコンパイラによる非同期の隠蔽で、Haskell の do syntax にはじまり C# を経て async/await 構文は多くのメインストリーム言語が備えるに至った。Async/await はたしかにシステムの負担は少ないが、yield 時にコンテクストを heap に避難する必要があるためコンパイラの optimizer から見えるコードは分断されるし停止再開もキューへの出入りがあるし、真にまっすぐなコードのように速くはならない。システムへの負担がコンパイラとライブラリに皺寄せられている。

Fiber によってランタイムの負担を減らすアプローチと、非同期構文でコンパイラがランタイムの負担を引き取るアプローチ、どちらが良いかは結局実装次第。

そしてアプリケーションプログラマからすると、どちらを使うかは性能を意識して選ぶというよりエコシステムとの親和性で半自動的に決まるものになった。この話題で喧嘩できるのはレガシー言語のユーザーと真にヒマな troll だけではなかろうか。(そしてこれらは大部分が重複している。)どちらでもない人は完全にほっといてよい。


レガシー言語のユーザである自分はもともとノンブロッキング寄りの派閥だったけれど、Android の仕事をはじめてからはブロッキングでスレッド作りまくるのにも一定の理はあると考えるようになった。

OS スレッド、オーバーヘッドがでかいだけあって OS やランタイムの支援が手厚い。たとえば OS スレッドは止めてダンプできる。Thread dump はデッドロックのデバッグになくてはならない。ノンブロッキングの世界は一見 deadlock が無いように見えるけれど、結局依存関係が循環したり待つべきものを待ちそびれると dead lock 相当の問題は起こり、しかも多くのノンブロックシステムはそのデバッグ手段を提供していない。

同様に OS スレッドは Systrace やプロファイラのようなツールで実行フローを可視化することができる。ついでにロックの競合もランタイムが教えてくれる。これがコンパイラベースの非同期になると OS からは実行フローも依存関係も見えなくなり、性能解析が辛くなる。

などデバッグや性能分析のしさすさという点で OS スレッドとブロッキングには非同期構文にない良さがあり、自分の仕事にとってそれはすごく重要。もちろん Android で非同期を捨てタスク毎にスレッドを作りまくるのはそれはそれで非現実的だけれども、一方で GCD のある世界ほど非同期を強く推す必要もない気がする。Android にも GCD 的なものがあれば事情も違うかもだが。がんばれ(TODO: あとで観る)! Java の Executor とか 10 年以上進歩してないじゃんか・・・やる気出せよ・・・。

話がそれた。ノンブロッキングな世界にある性能解析やデバッグのやりづらさも、言語処理系のコード生成やランタイムががんばって色々実装すれば解決する問題かもしれない。OS には皆が使う故に大量のエンジニアリング支援をつっこめる強みがある一方、言語処理系がコードを annotation すると簡単に解決できるはずのことはたくさんあるし、ツールも誰かがやる気をだして作り込めばよいといえばよい。たとえば Chrome には一時期 Promise Debugger というのがあったらしい

非同期構文を持つ言語はどのくらい性能分析やデバッグを助けてくれるのか。自分からは今の所あまり助けてくれていないように見えるけれども、不勉強なせいで自分が知らないだけかもしれないし、今はなくても言語の成熟にあわせて整ってくるかもしれない。

なのでどうしても二項対立で口論したいならせめて具体的な実装2つを戦わせてほしいし、そもそも喧嘩するヒマがあったら自分の使っている言語や OS が良いものになるよう足りてないものを議論したり作ったりで応援してほしいもんです。

つまり JVM や ART は Executor や VM や ftrace と実行フローをコミュニケートするための API を足して Systrace やプロファイラの可視化をなんとかしろ!

Intermittent Fasting

|

増えすぎた体重を減らそうと減量を初めたのが 2 月。三ヶ月で 73.4kg から 62.6kg まで減らし、無事目標の 63kg を突破した。めでたさを記録しておく。手元の記録によると引っ越し直後の 5 年前には 65kg くらいだったらしい。胃潰瘍でやせ細っていた時代の名残。5 年間で +/-10kg を往復してしまった・・・。

最初は軽く食事を減らしてみたものの体重が変わらず、もうちょっと攻めた方法にと intermittent fasting / IF すなわちプチ断食を試した。自分は The Obesity Code というダイエット本を参考にしたが、Reddit の WikiWeFa.st という IF 愛好団体のサイトでだいたい必要なことはわかると思う。WeFa.st は Jack Dorsey も IF してるという新聞の記事で存在を知り、こんなシリコンバレー系無駄に意識高いアホなやつらと同じことをしていたとは・・・と残念な気持ちになってしまった。同じバカっぽさなら Reddit の肩を持ちたい。どうでもいいけど。

IF はその名の通り断続的に食事を抜くことで体重を減らす。食事を抜く頻度はキツさと体重を減らしたい度合いによって色々。自分は「週 2 回食事を食べない日を設ける、ただしその断食日も 400kcal は摂取して良い」というルール (ジャーゴンでは 5:2 と呼ぶ) からはじめ、次に 400kcal の部分をやめて完全食事レスに切り替え、最終的には「週二日食事レス+週一日晩飯のみ」に落ち着いた。月曜金曜は食事をとらず、水曜は晩飯だけ食べる。

細かいコツとかは上のリンク先を参照のこと。IF 信者は色々効能を説いており、インターネットでも検索すると体験談がでてくる(この文章もそうした体験談の一つである)が、信者以外の共通見解は:減量効果は他の減量メソッドと同程度、ただし挫折しやすいのが欠点、というくらいらしい

個人的には「一切食べない」というわかりやすさが良いと思った。もうちょっとだけ・・・みたいな誘惑と戦う余地がなく諦めがつきやすいし、制限しない日は普通に食べられるから気がラク。なお普通に食べると言っても snack と sugar はやめている。

体脂肪がある限り食事を抜いても腹減り感があるだけで倒れたり意識が遠くなったりすることはまったくなく、従って体重が増えたらしばらく食事を抜けば良いと身を持って学べたのは良かった。肥満への恐怖が薄らいだ。


目標を達成したこのあとはどうしたものかなあ。

信者になったことだし IF 自体は何らかの形で継続したい気がしている。リバウンドの懸念があるだけでなく、休肝日ならぬ休胃腸日があるの、体を休めてる感じでよい。あと食事がないと腹は減るけど食事の時間は浮くし、食後の胃の重さや眠さもなくなりその点では快適。

体重がどこまで下がるか見届けたい好奇心がある一方、週三日は若干きついのも事実。キツいのを続けてなんとなく破綻させ失敗した気持ちになり次に体重が増えた時に IF する気がおきない、というのは避けたい。

まず週二日にして、しばらく様子見としよう。体重は測り続けて経緯をみたい所存。やめたくなったらやめます。

Fragment #6

|

日曜日

  • 05:01. 今日は朝から Sacramento まで一泊ドライブ。準備します。

土曜日

金曜日

  • 05:02. Programming Elixir 引き続き。Reading device が欲しい・・・。
    • 眠い。昨日の就寝が若干遅かったか・・・。
    • 退屈な Part 1 が終わったところで今朝ははおしまい. 06:45.
    • さすがに pattern match はちゃんとしてる。ただしだいたい Erlang とおなじ。Pipeline は面白い。List comprehension は Python とちがいちゃんとしててよい. lambda は Scala くらいにはコンパクトにかけて、これも良い。
  • Opinion | America’s Cities Are Unlivable. Blame Wealthy Liberals. - The New York Times
    • 東京もマンション建てるのに地元の反対がどうこうみたいな話が昔よくあった気がするがなぜタワマンとかボコボコたてられているのか謎。
  • Huawei P30 Pro camera review - DxOMark
    • Tele が 5x optical zoom, 8M pixels, vs primary は 40M pixel. やばい。40M と比べると 8MB 少なく感じるけど 40M が異常とも言える. そんなにピクセル増やすより per-pixel の光量を増やしてほしい人も多そう. ストレージが厳しいから... しかし 512GB オプションがあり、しかも nanoSD が挿せるのだった. 512GB SSD って自分のこのラップトップと同じじゃん. 電話の外のストレージがボトルネックになる時代.
  • Pinterest が Elixir を使っているというので求人をひやかしてみたが特にそれらしいのものはなし。ちなみにモバイルの求人もなし。上場して金ができたら変わるだろうか。
    • Elixir を使っているという事実はチームが勝手にできる可能性を示してはいる.
    • Discord の求人は Elixir に言及しているものがある. こういうリアルタイム系には良いのだろう.
  • 2日続けて前日の最後の一時間くらいで書いたコードを捨てて書き直している。これは: 1. 疲れてる時間なのでコード書かずに考え事でも舌方が良い or 2. 理解を得るための exploration だった のどちらだろうな。コードを書いて見て捨てるのは頻繁にやってよいし昔よりはできるようになったと思う一方、まだ改善の余地を大きく感じる。
  • ここ一ヶ月くらい TGIF の録画を見てない。仕事忙しすぎというか心の余裕なさすぎ。しかし雑念が入らず精神衛生にはよい気も。
  • Fasting の主要なストレス源は徒歩十秒の microkitchen にある気がする。
  • Michael F. Cohen receives Steven A. Coons Award for Outstanding Creative Contributions to Computer Graphics - Facebook Research
  • MobileLab: Prevent mobile performance regressions - Facebook Code
    • 色々とよくかけている。CPU clock の固定方法とか AOSP のツリー物色しなくてもこうやってまとめられているならこれパクってといえば良い。
    • "adb reverse" なー... Chrome  の DevTool はこれだった気がする。TCP ではなく named socket だったけれど。自分も使いみちを研究すると芸風が広がるかもしれぬ。

木曜日

水曜日

  • 05:53. 機能早寝しすぎたので四時前に目が覚めどうでもいい話を書いていたらこんな時間。論文読みます。
    • よみおわって資料整理はじめたあたりで今朝は終了. 7:00
  • 昨日の昼飯を食べすぎたせいでいまだに空腹感がない。朝飯スキップか・・・。
  • 偉い人に出す資料つくるので書いたドキュメントのリンクくれる?とかいわれてはあ・・・となる。
  • 昔はマネジメントなどのダメさを失敗の言い訳にしがちだったが、最近は上がどうであろうと自分は結果を出さないとダメだという事実を認めるに至った。なぜならまわりの人々は割と結果を出しているからである。
  • ランチ、そばの席に Jeff Dean が座っていた。I/O のときは気づかなかったけど白髪増えたね。髪にかぎらずなんか全体に白っぽくてガンダルフみたい。とか思いながら飯を食い、ふと顔を上げると姿が消えていた。やはりガンダルフっぽい。

火曜日

  • 04:58. 論文つづき (A history of Erlang). ちょろいやつを選んだはずだし実際ちょろいが、思ったより長い。
  • 気を取り直し Microsoft Teams 再挑戦。OneNote にログインしてから Teams にアクセスすると行けた。何らかの consumer oriented なサービスを使ってフラグを立てる必要があるのだろう。
    • Teams に入れたは良いが相変わらず OneNote 動かんし Wiki は不審なエラー。ほんと Teams みんな使ってんのねえ?ほんとに?新規ユーザがデータをロードできないって使いにくいとか言う以前の問題じゃん。MS 製品こんなにダメという事実がいまいち信じられないのだがぼく何か悪いことした・・・?してる: Windows もってない。信仰が足りてないタダ乗り野郎なのがバレてる。きっと Windows 10 の IE からさわれば動くのでしょう。それは遠慮させていただきます。
  • 子の朝食: ブロッコリを入れたオムレツは食べた。ゆこっぷが人参パンケーキを焼き、それも食べていた。湯剥きしたプチトマトには抵抗していた。
  • Millennials, Gen Z Pessimistic on Life, Deloitte Survey Shows - Bloomberg
    • 一方で他の国より全然いいじゃん。日本も相当なものだと思っていたが、ヨーロッパ全般に負けてる(勝ってる?less pessimistic) なのは意外。自分の上に年寄りがいっぱいいると悲観的になるの、驚きはない。
  • 比較的日が浅くかつ remote な人のレビューリクエストを見逃していたごめんね・・・。Ping してくれ!おねがい!だいじょうぶだから!ほんとに!とコメント。
  • The struggles of an open source maintainer -
    • Redis の作者の文章はいつも良いな。一番好きなやつの一つはこれ。同意するかしないかではなく、態度が良い。
  • Inside Google's Civil War | Fortune
    • 色々なレベルで Sigh. この手のは読まないほうが良いと再確認。
  • Apple introduces 8-core MacBook Pro | Hacker News
    • へー 8 コアいいじゃん、と思いつつコメみたら荒れてる。自分と同じ 5530+Ubuntu ユーザが息巻いてるが、Linux で生きてくには信仰心が必要という事実を隠すのはどうか。Mac ユーザが Ubuntu で生きてけるわけない。
    • しかしこの時期に spec bump ということは WWDC での新製品を期待してる勢はがっかりしてそう。
    • Apple スレでしれっと勤務差先をディスるDell社員とは。
  • Lyft から高いステーキ屋で飯食うイベントやるよというリクルートメール。上場して入ってきた金はこうしたところに使われている。
  • 減量目標達成翌日さっそく食べ過ぎる。反省。
  • Industry-scale Knowledge Graphs: Lessons and Challenges - ACM Queue
    • KG というものがおおっぴらに語られているのはいいが、企業がデータを溜め込んでるだけなのはいまいち。Public API 欲しい。
  • OpenTelemetry: The Merger of OpenCensus and OpenTracing | Google Open Source Blog
    • ついでにもうちょっと idiomatic になるとよいのだが。
  • スレッド詰め合わせ作業をしていると別にプロファイラ要らない気がしてくるが UI スレッドをチマチマ詰めているとプロファイラが欲しくなり、チマチマに漏れがある気がしてくるとやはり sampling ではなく Nanoscope みたいのが欲しくなる。ART がんばれ。
  • Huawei: ARM memo tells staff to stop working with China’s tech giant - BBC News
    • これで中国が RISC-V 先進国になったら相当面白い。

月曜日

  • 05:02. 昨晩寝る前に雑念してしまったため若干寝不足. やれやれ. 論文読みます.
    • 試しに Pixelbook で PDF を読んでいるが、まあまあ良い。二段組だと 12 inch screen でも Portrait だとやや厳しいが、Landscape なら読める。そして Landscape にするとスタンド状にして卓上に置く converetible laptop の機能が生きてくる。軽くて片手で持てれば 12 inch + Portrait でも読めそうだけれど。
  • Google pulls Huawei’s Android license - The Verge
    • うげーキナ臭くなってきたなあおい。戦争になると外国人いろいろ不自由なので平和を望んでいるが、引っ越してきてからというもの平和は遠のくばかり。8割くらい大統領のせいだがそれだけでもないというか、あの大統領も時代の空気の一部というか。
    • OnePlus が心配。
  • Tech Jobs Lead to the Middle Class. Just Not for the Masses. - The New York Times
    • 二流私大出身者からすると「CS 別に学位いらないですよね?」と言われると「あ、バレた?」という気分なわけだが、US 的価値観に染まってくるとなんとなく自分の学位が大事なものに思えてくるのは我ながら不思議。
    • 大学進学が不当に大変な国では学位要件撤廃が movement になる一方、大学教育の commodity 化にまあまあ成功した国では学位差別が空気のようになっている事実は mixed feeling.
  • ここ一週間くらい突然子供が野菜をまったく食べなくなり途方にくれている。食卓に野菜を出してもまったく手付かずで帰ってきて捨てる、を繰り返していると賽の河原のような無力感と環境を浪費する罪悪感で朝からすごく暗い気持ちになってしまう。世間の親たちのように、他の食材に紛れ込ませるなど何らかの方法で食べさせるクリエイティビティを発揮すべきなのだろう。はあ。
  • ひどいコードを書いた人が自分よりエライ問題。コードをレビューした下々はレビューで断るべきだったが、そうできない気持ちもわかるのでやはり偉い人の書くゴミは殊更有害である。しかし幸い遅さの原因なので口実を持って直せるのだった。やれやれ。
  • なんとかして Microsoft Teams 使おうと再挑戦。新しいメールアドレスを適当につくり、Micorosoft Account をつくり、Teams へのリンクをたどると・・・なぜか Sign Up しろといわれる。仕方ないので signup を試みるが "[ドメイン]  isn't in our system" という謎のエラーに拒まれ signup できない。完全に意味不明(というのは嘘でなんとなく想像はつくがそんな都合は知らん)。評判を聞きつけてやってきた新しいユーザが製品を試せないとか大丈夫なのかきみたち。根本的に異なる価値観の文化圏の存在だという結論に達さざるを得ない。失望。こんなのにやられてしまっている G Suite もそれはそれで大丈夫か心配になるが、もう知らん。
  • それはそれとして家庭内 IT 刷新が進まず悲しい。全て Hangouts が悪い。

 

 

The Pragmatic Programmer 一通り眺めた

|

Pragprog 20 周年版(Beta)読み始め のフォローアップ。

時代が内容に即してない、という印象は間違っていた。コードの部分はそれなりに書き換わっており, Ruby のみならず JS, Clojure, Elixir, Python までサンプルコードがいろんな言語をいったいきたりしていた。特に Elixir はさすがに本をだしているだけあって強く推されており、actor-based concurrency を含め Elixir の推し機能を他言語の類似機能と比較しながら軽く紹介していた。動的型言語界隈の流行りを全然追いかけていなかった身には目新しく、Elixir の本は読んで見る気になった。一年に一つ新しい言語をやろうと勧めてきただけのことはある(なお序盤にあるその自己投資に関するセクションはまるまる残っている。)

そんなかんじでテクノロジ回りはまあまあ書き換わっており、日本語の改訂版を読んだ時に感じたこりゃねーわ感はだいぶ薄れていた。たとえば MVC や Wizard の話などは姿を消し、かわりに ReactiveX のセクションが増えている。プレインテキストどうこうの話はまだあるが、コード生成の話は消えてかわりに ebook もビルドしようぜ、みたいな話に姿を変えていた。あんたら出版社だもんな。

テストの話も「20年前はテストしやすいコードだとか単体テストしろと説得する必要があったけど、もうそういう時代じゃないよね」とはじまり、TDD いいよ、でも原理主義になりがちだから気をつけてなどと話し時代を回顧する。そのあと Python の Hypothesis というツールをつかった property based testing を紹介し、セキュリティの話に進む流れ。Hypoethesis いいじゃん。今度ためそう。

説教セクションは小さな改定として日々の仕事記録 (engineering daybooks) の話が追加されており、やはりみんなやってるね、などと思う。

要素技術のでてこないセクションは旧版と同じ内容も多く、それらに新味は感じない。ただ当たり前の話をしているように感じるのは、たぶんいいことなんだろうね。


合意できない話もそこそこある。それは古臭さより立場の違いから来ているように感じる。

Dave Thomas と Andy Hunt はもともとが自営業コンサルで、その後電子書籍出版で起業し small business で食ってきた人たち。仕事では好きな動的言語をテキストエディタで書いてる。自分は各種零細で C++ を書いたあと感じの悪い大企業の末端として Java のスマホアプリを IDE で書いてる。プログラマのキャリアとしてある意味で反対側に振れている。彼らの価値観に自分が共感できないのは、まあ仕方ない。

自分は彼らの定義する pragmatism に同意できない。流行りには乗らず人の入れ替わりが少ない安定した小さいチームで顧客やエンドユーザと話しながらフィードバックループで物事を良くしてこうな、みたいのは、Basecamp 勢の自己啓発書に感じるどうでもよさに通じるものがある。そういうライフスタイルはきっと素敵だろうけれど、我々そういうんじゃないんで・・・という他人事感。

自分は流行りものに乗れるものなら乗りたいし、チームは適当に人が出入りして規模も大きくなっていく方が景気がよくて好きだし、フィードバックとかいわれてもエンドユーザ多すぎだし (チームとして UX study とかはしてるわけだが、それは「顧客との対話」みたいのとは違うでしょう)、物事はしばしばインクリメンタルに進まずバーンと変わって阿鼻叫喚になるものだし。まあ最後のやつは特段好きではないけれど世の倣いと受け入れている。

結局自分の関心は問題解決とかよりソフトウェアテクノロジの進歩を見届ける方に寄っているので, The Pragmatic Programmer の想定する地味に人々の役に立とうとする craftmanship な皆さんとはいまいち反りが合わない。ただそれに文句をいう筋合いはなかろう。

逆にいうと自分の価値観の偏りによって分かり合えなくなってしまった相手というのが世の中には結構いるということで、それはプログラマについて何か書くとき気をつけたほうが良いのだろう。

棚卸し

|

過去に読んだり挫けたりした技術書を思い出せる範囲でリストしてみた (草稿注: 本のリストは面倒が多くなりがちなので公開時はリンクしないかもしれない。)

数えると、読んだと言えるのは 170 冊くらい。すごく少なくはないが、学生バイト時代もいれて 20 年プログラマしていることを考えると年間十冊以下で、多くもない。技術書好きは名乗れないことに気づいてしまった。特に 2010 年からの数年、つまり今の会社に入って東京で働いていた頃は全然読んでない。この時期は読書に限らず色々さぼっていて、自分のキャリアの足を引っ張っている。

技術書を読むのはいいことなのだろうか。もちろん時間が無限にあるなら読んで損はないし、時間が無限になくても読書ならではの良さはある。けれど他の career progression activities との兼ね合いは昔信じていたほど自明でない。一方で技術書とはいえ読書には楽しみの面もあり、それを享受しきってこなかった後悔も少しはある。そして同じ本を読むにも上手い下手はある。

総体として、自分はまあまあ読んでいるけれどもうちょっと読めばよかったし、せっかく読むならもっと良い読み方もあったね。

リストづくりを通じて技術書読みへの意見が少しは整理されたので、稿をわけていくつか書きたい。自分は本を読む本やその recommendation list にある本の著者らのようなハードコア読者ではないけれど、カジュアル読者の意見にも何らかの意味はあるでしょう。書いたらここでリンクします。

歩きの効能とノート

|

Digital Minimalism の話のつづき。

歩きながら考え事するのは意味があると Cal Newport は主張する。自分も合意するが、一方で歩きながらの考え事には難しさもある。

自分にとって一番の困難は、考えを積み重ねるのが難しいこと。考えを積み重ねるには、考えが脳の容量を超える前にスナップショットを書き出し形を与える必要がある。自分はこの容量があまり大きくないのでこまめな snapshoting を必要としているが、歩きながらはそれが難しい。結果として同じ事をぐるぐると考えてしまう問題がある。

同じ考えをぐるぐるする問題に自分は苦しめられがち。世間ではこれを自動思考と呼ぶ。自動思考も書き出すことで対処できる。従って考え事をするにあたっては何か書くものがあったほうが良い。

書き出しメディアとしてためしに持ち歩き用の紙のノートを買ってみた。徒歩通勤で持ち歩き、podcast や audiobook を聴く時間を減らして考え事をする。そして snapshot を書き出す。割と良い。以下雑感:

  • ハードカバーのノートがよい。膝の上などで書きやすい。カバンには入れず手に持っておくと friction が下がってよい。
  • しかしさすがにどこでもノートをとれるわけではない。基本的には公園などいくつかのチェックポイントで書いている。たまにほんとに立ち止まって書くこともある(田舎なので可)。
  • 仕事後の帰路が特に捗る。積み残した仕事を振り返り、明日なにしようなどと考える。仕事日記のかわりになる。
  • 歩き出し 10 分で考えがまとまり、書き出すと気が済むこともしばしばある。気が済んだら考え事は切り上げて podcast や audiobook を聴く。
  • スマホではダメなのだろうか?自分はスマホを the source of distraction  だと考える Cal Newport 派なので紙だけど、スマホで良い人もいるとは思う。あと音声でメモできたらかっこいいかもなとも思う。

夏のあいだはいいけれど、冬はどうかな。

技術書への不満という濡れ衣

|

最近はプログラマ向けの技術書を読んでもムカついたりがっかりしたりばかりで、読みたい技術書を探すにも良い技術書評家はいないし、もうプログラマ向け技術書というジャンルは終わってしまったのだろうか。それはなぜか。

・・・というような不満をもっていたが、考えているうちにこれは概ね濡れ衣に思えてきた。端的にいうと、一線を退いた元おたくが「最近のアニメ(などの得意だったおたく分野)はつまらん」というのと同じ現象が自分に起きているだけな気がする。

キャリアの停滞

まずマンネリ化。自分はキャリア初期のたくさん学ぶことのある時期は終わってしまった。これは雇用という点では良いことだが、学びのある本に出会う確率を下げてはいる。多くの人が「これは必要」と思う話題ほどたくさんの本が書かれる。中身はどれも似通ってくる。新しい読者が必要なものに出会う確率はあがるが、必要なものを読み終えた読者は同じものの繰り返し、すなわちマンネリ化にがっかりしがち。マンネリ化を打破したいならキャリアを大きく舵切りする必要があるが、それは雇用と収入を危険に晒すので困る。

キャリアの方向転換をしなくても順当な出世路線を進んでいれば新しく学ぶことはありつづけるように見える。この話を書くにあたり InfoQ の Book Review セクションを見ていたらリーダーシップや経営の話の多いこと。こうした upper management への aspiration があれば世の中の(広義の)技術書で読み物に困ることは少なそう。いわゆる「ビジネス書」は技術書に限らず人気ジャンルである。自分もビジネス書は嫌いではないけれど、根本的には他人事なので純粋な技術書ほどの熱意はない。

コンテンツ消化のサボり

自分は 10 年前くらいに技術書は英語でしか読まないと決めてから大きく読書量が減った。外資系会社員になるにあたり立てた意識高い系の目標だったが、完全に裏目に出た。純粋に読速を落としただけでなく、その副作用で意欲が削がれてしまった。この問題は数年前からようやく解決しはじめたけれど、今度は子どもができて時間の絶対量が減ってしまった。

自分のコンテンツ消化不良には2つの症状がある。1 つめはコンテンツ選びの偏食化。プログラミングというものへの自分の意見の先鋭化もあり、意見の合わない主張の本は腹が立って読めなくなる。自分の意見は(すくなくとも自分にとっては)正しいと思っているので反りが合わないこと自体に問題は感じていないが、コンテンツ消費者としては反りの合わないものも幅広く摂取して視座を広く保つ方が良いのではないか。A grumpy old reader は望ましい姿ではない。時間のなさ自体、偏食に輪をかける。本を読まない理由をがんばって探すようになる。この態度も良い読者とはいえない。

もう一つの症状は新刊感度の低下。読むべき本を探すのに時間をかけなくなった。自分の行動範囲から書店が消えたせいもあって、向こうから面白い本がやってくることがなくなった。読む本を必要に応じて探すようになった。効率という点でこれは必ずしも悪いことではない。けれど無駄の生む serendipity がないと読書という行為全体の楽しさは薄れる。

要するに「本を探す、本を読む」という行為にかける時間の絶対量が減ってケチ臭くなった。その結果見返りが少なくなり、楽しみが削がれた。

ジャンルとメディアの変遷

「綺麗なコードを書くこと」が関心の中心にある時代があった・・・と思う。「オブジェクト指向」がホットな話題だった。アジャイルの一環である TDD もリファクタリングも DI も、広義ではコードの綺麗さすなわち変更に強く保守しやすいこと、をめぐる話題だ。今は、少なくとも昔ほど「コードの書き方」それ自体が注目を集めていない気がする。

自分はコードの綺麗さを長いこと追求していた。ある時期から行き過ぎを反省し意図的に気にするのをやめて、今は割とどうでもよくなった。一方で、「オブジェクト指向」(関数型でもいいよ)や「リファクタリング」のようなコードの書き方に関する大きなブレークスルーがやってくるんじゃないかと心のどこかではいつも期待していて、それはきっと書籍という形で届くという期待もあって、でもその期待は裏切られ続けているように感じていて、失望がある。

最近までそこそこ盛り上がっていたアジャイルの思想的後継に Microservices や Devops がある。これらの話題は広く語られ、本も割と売れているようだ。けれど Microservices にしろ Devops にしろ「オブジェクト指向/関数型」のような狭義の「コードの書き方」つまりソースコードの textual representation に関する話題ではない。ソフトウェアのフレームワークやアーキテクチャやリリースプロセスの側に重点がある。

コードの世界のイノベーションは、ふつうに続いている。わかりやすいところだと Flux とかは DI に匹敵するインパクトがあると思うし、Event SourcingService Mesh みたいのもデザインパターンの後継と言える。Rx から async/await の流れを数えてもいい。メインストリーム言語も格好良いのがふえた。ただこいつらは本ではなく (Redux, Kafka/Samza, Istio, Rx, Kotlin のような) 実装として世に登場している。書籍は二次情報にすぎない。そして書籍に存在感のある Microservices にしたって主要な情報源はオンラインにある。

そしてどのみちサーバサイドをやってない自分にこれらの大半は縁遠く感じる。モバイルもホットな話題は年一回の開発者会議なりオープンソースプロジェクトなりが中心で、書籍はおいてきぼり。ついでに「コードの綺麗さ」においてモバイルは出遅れがちである。(反論はご自由に。)

結果として、自分が身近に感じられるソフトウェア開発の新しくてかっこいい話題を学ぶ感動や興奮は書籍から得るのが難しくなったように感じる。


いちおう確認しておくとこれは完全に言いがかりであって出版社や著者を責めていない。ただ昔の体験が自分の期待値を決めているので勝手に失望してしまう。

キャリアの停滞も時間のなさも時代性からの乖離も自覚していたが、それが技術書体験の不満に繋がっているとは気づいていなかった。考えてみてよかった。

そこまで技術書にこだわらなくてもいいのではと思うかもしれない。でも自分はもともと本を読むのが好きで、技術書は活字というホビーとソフトウェア開発というキャリアの両方まとめて面倒をみてくれる人生のキラーコンテンツだったので、それを楽しめない失望は大きいのだよ。

自分は技術書とどう向かい合うべきなのだろうか。もっというと、キャリアが停滞し時間もなく時代遅れの自分はどうやって様々なプログラマ向けコンテンツと向かい合うべきなのか・・・は、稿をわけて考えたい。

Fragment #5

|

日曜日

  • 04:55. Pragprog 放置しておくと喉に刺さった魚の骨なのでざっと読んでしまおう
  • 昨日は夜のおでかけがあり就寝が遅かったため妻子まだ起きてこなそう。そして雨。
  • 窓際で雨漏り。外壁に duct tape したらとりあえず止まった。安普請であることよ・・・。

土曜日

  • 05:15 at Starbucks. 先週は Jim よわばりにフリーズしてしまったので反省し今週は proactive に good morning しておく。
    • 草稿送りつけ活動、もうちょっと広く配布していい気がしているが、送りつけたい相手のメールアドレスがわからない、相手を選んで送りつける行為の本質的な横柄さなどから二の足。もうちょっとマシな方法はないものか。
  • Google Gmail tracks purchase history — how to delete it こんな便利機能があったとは。むしろ Gmail の UI から発見可能にしておくてくれ・・・。時系列のソートが壊れているし 2011 年より前に遡れないし、いまいち。
  • python/black: The uncompromising Python code formatter 仕事のツールチェインに入れてほしい...
  • Hangout 終了にともなう夫婦チャットの移行先探し。FB Messenger でいいといえばいいがどうせなら productivity tool ついてるやつも評価してみようと Microsoft Teams (Free) を試す。良さそう・・・だがなぜか OneNote がエラーで動かない。Wiki も不安げなエラーメッセージを表示している。自分の Microsoft account が messed up なせいの可能性が高いが、一方で自分にとって動かないものは動かないので諦め。Teams は良いと評判なのに残念・・・。
  • インディー応援的な気持ちとしては色々なものを Basecamp 3 に集めたいが、こいつらは文書ツールがしょぼすぎて話にならない。逃げ口としての Google Docs / Dropbox Paper インテグレーションもやる気ゼロ。必要なものを全て持ってるのは Microsoft だけ。がんばれ、というか自分のアカウント直してくれーサポートの入り口がわかんねー。

金曜日

  • 05:03. 仮想書架列挙業、だいたいおわったので wrap up する。
    • とおもったがずるずる出てくるなー。しかしようやくおわったはずだぞ。
    • 棚卸し
  • Pragprog 20 を読み進めていたら, ベータ版の読者への質問として 「tracer bullet ってこの銃社会の sensitive な時期に無神経な命名かなあ変えたほうがいいと思う? 」的な質問があったので、解答フォームに「とりあえず日本人は誰も気にしてないし特定の国の政治の問題だから個人的にはそのままでいいと思うよ」と書いて投稿。アメリカろくでもなくてかわいそう。日本でいうと「ひきこもり」みたいな単語を何らかのメタファにつかってしまったかんじだろうか・・・わからん。
  • 午前中はおうちの用事につき午後から出社。だがなんか今日は眠いな・・・。
  • 「すばらしいバグレポートですがこれは Q では直ってるらしいですよ Q つかってくださいおねがい!」みたいな励ましのコメントを残しつつバグを閉じる作業。みんな Q つかってくれ、といいたいが自分が使ってないというね・・・。はー二台持ちするかなあ。続かないんだよなあ。
  • Dogfood 本格化に伴いトリアージの負担が増えそう。
  • In San Francisco, Tech Money Doesn’t Buy Happiness | The New Yorker
    • 三ヶ月に一回くらい書かれる内容。NY の人々はこれ読んで溜飲下げるのだろうか。自分も長居する場所じゃないなと思っているが、アメリカ人と違って地元に帰るのも大変。
  • Huawei launches AI-backed database to target enterprise customers | TechCrunch
    • 圧倒的景気よさ。
  • Play Books ユーザのわたくし諸事情から数年ぶりに Kindle for Android さわったらすごい良くなっててびびる。そうだよなー Fire Tablet あるもんなー。Bookshelf/Store は相変わらずだが reading experimence が素晴らしい。速いし Bookerly font もいい感じだし左右のマージンは減らせるし(縦長電話機画面では重要)。勢いで Kindle the device が欲しくなってしまった。

木曜日

  • 05:15. 引き続き仮想書架列挙業。なぜ。
  • 今日も今日とて triage.
  • ひどいコードをみつけてしまったが心を無にして直す。Legacy old stuff から Shiny-new への移行、やってる当人たちは shiny-new を早く実践投入したいので積極的に cutting corner しがちで、当事者以外は移行が終わるまで何の恩恵もないのでその cutting corner をことさら迷惑に感じがち。そして一見 cutting corner する方が大変そうな変更も、コードを読むコストを想像すると理解できたりする。でも読んでちょ。おまえらのコードだろそれ・・・。
  • The Trade Secret: Firms That Promised High-Tech Ransomware Solutions Almost Always Just Pay the Hackers
    • 世界最初の randomware は人類学者発だったというトリビアがよい。
  • 気温の変化か欠勤が目立つ。お大事に。今日は最高気温 60F らしい。寒い。
  • 仕事中に Disney medley 的なのを聴いている。Cultural fit でクビになりそう- この HN のコメントは最高すぎて made my yesterday.
  • Android memory management [LWN.net]
    • プロセスは雑に殺してもカーネルがリソースの回収にある程度 CPU cycle を必要とするため LMK が遅くてどうしましょうね、という話。自分が見てる範囲だと LMK が動いているときってたいがい kswapped が猛烈にうごいており、たしかにこいつらは干渉しそう。困る。
  • 頭の回転が早くて滑舌がよい結果ミーティングに引っ張りだこになり実務がはかどらない TL 的な人々をみると、ぼさっとして英語ができず実務しかすることのない外国人中年でよかったなとたまに思う。偉くなれず稼ぎも増えないのは大きな欠点だけれど。きほん overwork 以外にこの問題を解決する方法がなさそうで気の毒。たまにミーティングをぶっちぎる手をとっている様子もありそれは好ましい。
  • 引っ越してきた頃はおやつ置き場のリンゴを見てこれを皮ごとかじるとか絶対やらないわー野蛮だわーと思っていたが最近は家でも会社でもふつうにガリガリ齧っており、カリフォルニア適応が進んでいる。

水曜日

  • 04:45. 昨日ふと思い立って過去に読んだり読みかけたりした技術書を列挙する、という作業をはじめたがまったく終わる気配がない。
    • 唐突に子が早起きしてきて終了。
  • Things you're probably not using in Python 3 - but should - Data, what now? turns
    • F-string と enum はすぐに使えそう。
  • 東京の子育て厳しいストーリーを読むたび子供が小さいうちはなんとかしてクビをつながねばと思う。
  • GitHub - google/zetasql: ZetaSQL - Analyzer Framework for SQL
    • 社内共通 SQL 実装がオープンソースになったらしい。誰得。そして Bison かいな。コピペ資産ゆえ Dremel 方言を使いがちだがなるべく標準に近いこっちを使いたい。FLATTEN がないのが主に辛い。
  • ロンドンと VC、距離とアクセントの組み合わせが色々辛い。向こうも同じことを思っているであろう。
  • 今日はひたすらバグを triage する日でやるきゼロだが音楽のちからでのりきるべし。
  • eBPF can't count?! うげーこのレイヤで壊れるのは厳しいなあ。

火曜日

  • 05:05. ひきつづき考え事など。
  • 最近途中まで読んでこりゃねーわ・・・と大きく失望した本に A Philosophy of Software Design というのがあるのだが、レビューいいね。やはり自分は技術書読めない体になってしまったのではないか。
  • Open source Mali GPU drivers merged | Hacker News
    • GL のコードを上から下まで全部読めるということ?すごい時代。いつか読んでみたいものであることよ。
  • OnePlus 7 Pro review: an amazing screen meets a good enough camera - The Verge
    • $650 で全部入り。相変わらずすごいね OnePlus. 一昔前までは画面解像度をサボっていたけれどこのモデルはそれもナシ。Selfie とらない人にうれしい notch-less + popup front cam. OS のバージョンもちゃんと上げてくれるし, Samsung / Huawei より人気ないのは不思議。一方でむかしは $400 くらいだった気がするので、値上げ競争に巻き込まれているのも確か。
    • 個人的には OnePlus が tablet を出したら瞬時に買うと思うが、その様子はなし。OS がついてくる Android Tablet の不在が悲しい。
  • OnePlus 7 Pro camera review - DxOMark
    • Portrait Mode の写真をみるとすかさずズームして粗探ししてしまう。
    • スマホカメラの性能、普通にとるは十分に良いので暗い、ズーム、ボケとかでがんばらないと差別化大変そう。他人事ではないが。
  • はー PDF と ebook 読む tablet 欲しいなーとか考え出すと一時間くらいふつうに無駄にできるのでやめて仕事する。
  • ブランチ切られる日を間違えていたためおもむろに作業を切り上げバグの triage へ・・・。
  • Google is about to have a lot more ads on phones - The Verge
    • おやまあ。Discovery にしろ YouTube Home にしろ暇つぶしスペースで普段目ににすることはないが、広告が増えるという発表を一つのイベントでまとめてやると感じの悪さが際立ってしまうね。Discovery ページは広告があろうがなかろうがノイズでしかないので自分の電話機では無効にしている。
  • この fragments は Twitter したい衝動をほぼ完全に解消したのでめでたし。

月曜日

Cloud Build と Serverless

|

GCP Cloud Build は AWS CodePipeline にくらべるとだいぶしょぼいが、意外な良さもある。

Cloud Build は stateless である。動かしたい Docker Image の URL と引数のリストを API に投げると、どこかでコンテナが実行されてログがどこかに保存される。必要な情報はぜんぶ API に渡す。コマンドラインだと YAML に書く。なので、割と汎用的になんでも動かせる。ビルドである必要はないし、レポジトリに紐付ける必要もない。(逆にいうと git clone もユーザが明示的にやらねばならず。CI としては面倒。)

これ、自分が前からほしかった「任意のコードを一回だけ実行できる serverless のサービス」そのものじゃん。たとえば Jupyter Notebook を評価して、結果をどこかに置くとかもできる。これを Cloud Function 経由で定期実行すれば Jupyter のダッシュボードが作れる。など夢が広がる。

ただ現状単なるビルド環境なので計算機資源の量とかは選べない。それも指定できるようになると非分散ジョブ実行系として使えるものになりそう。

Pragprog 20 周年版(Beta)読み始め

|

The Pragmatic Programmer, 20th Anniversary Edition: your journey to mastery by David Thomas, Andrew Hunt | The Pragmatic Bookshelf

正式版を読み終えてから感想を書くのが筋だが読み終えられるか自信がないのでベータ版たるいまの目次と冒頭一割くらいを眺めた感想を書いておく。

むかし Rebuild.fm に出してもらった時に自分の pragprog への感想を話した。その印象は改版によっても大して変わっていない。つまり、内容が時代に即していないように思える。ただ振り返るに当時の意見はフェアでもなかったなと思う。

まずこの本は自分のような一定程度キャリアを積んだおっさん向けには書かれていない。キャリアの序盤に読む本である。そのタイミングで読む本として適切なのかに疑問はあるが、自分は junior な人々の教育について考えることに時間を使っていないので特に意見がない。

ついでにいうと、DT/AH の想定していると思われる職業プログラマのジャンルは伝統的エンタープライズだが、自分はインターネット会社でコンシューマ製品の仕事をしている。この違いも大きいと思う。たとえば仕様の話とか全然噛み合わない。新版では旧版の "Great Expectation" という節がなくなり "Delight Your Users" に置き換わっている。コンシューマ製品だとこれがほぼ全て。

なおこの節は冒頭で "Our goal as developers is to delight users. That’s why we’re here. Not to mine them for their data, or count their eyeballs or empty their wallets." と勤務先含む一部テック企業に喧嘩を売っており、ほんと読む気なくすわ。

つまり自分は対象読者ではないし、対象読者について想像もできない。

二点目。一度書かれた書籍の構成を大きく変えるのは難しい。章や節を足したり引いたりすることはできるし細かい書き直しもできるが、アーキテクチャは変わらない。Refactoring や Reservability を語る本がそうなのは皮肉といえば皮肉だが、現実というのはそういうもんであろう。もとの本とぜんぜん違う内容になったら改版するより別の本として売ったほうが良かろうし。

三点目。著者はどちらも 60 前後で人生後半をエンジョイしており、前線で戦ってる感じじゃない。これに文句を言う筋合いはない。自分も 60 になったら前線にいたくない。 Dave Thomas は三年前に出版から足を洗って Elixir を書いているAndy Hunt は逆に本気の作家として SF を書いている。Elixir が前線じゃないというと怒られそうだし新版に concurrency の章が追加されているあたりにフィードバックを感じるが、いずれにせよガツガツ働いてガツガツ稼ぐぞ!というフェーズの人たちではない。ガツガツ本を書いてくれと頼む相手でもなかろう。

やはりいま現役でガツガツ働いてる人がちょっとイキった勢いで書いた新しい一冊が求められている気がする。The Passionate Programmer はその点いい仕事をしたが、これにしたって 10-15 年前。

四点目。ソフトウェア産業の成熟。新版は新しく追加された冒頭の "It's Your Life" という節で「プログラマは引く手あまたの稼げる仕事なんだから、それを活かして人生をコントロールしような」と話す。プログラマは稼げる仕事になった。20年前はそんなでもなかった[要出典]。職能の成熟にともない期待されるレベルもあがったと思う。一冊読んですごく色々わかった気になれる時代は終わったんじゃないか。

いちおう義理でもう少し読みます。


追記: The Pragmatic Programmer 一通り眺めた

Did Docker Win?

|

Cloud Build は随分と Docker 中心の製品である。 まずデフォルトのビルド成果物は Docker イメージという前提がある。そしてビルドに使うツールも Docker イメージとして提供されており、ユーザも自分のイメージを使ってビルドステップを足すことができる。

Cloud Functions は特に Docker は出てこないが Cloud Run や App Engine Flex は Docker である。そして言うまでもなく K8S/GKE は Docker イメージを動かす環境である。

など、GCP はなにかと Docker を要求してくる。GCP はコンテナ推しクラウドなのでややバイアスはあるが、とはいえ自分がボンヤリしている間に世の中の Docker 必須な雰囲気はずいぶん広まっていた。

4-5 年前, Docker の浸透度はここまでではなかった気がする。細々と競合っぽいやつが現れたり現れなかったり、どうなるのかと思っていた記憶がある。しかし気がつけば世の中のコンテナは Docker 一色。企業としての Docker のもうだめっぽい雰囲気との対照がすごい。

雑に調べた自分の理解によれば・・・

  • あるとき Docker が OCI という標準化団体をつくって container image のフォーマットを標準化するといいだし、そこに競合および同業者を巻き込むことに成功した。結果としてコンテナ業界にあった Docker ロックインへの不安が和らぎ adoption が進んだ。これは K8S が CNCF を作ったのと似たようなものである。
  • ついでに主要な競合であった CoreOS は RedHat に買収され, RedHat は IBM に買収され、現在の IBM はデファクトスタンダードに楯突いたりしない会社なので、結果として Docker やっつけるぞみたいなギラギラした人々がいなくなった。
  • クラスタ管理分野での K8S の勝利も Docker 普及の助けとなった。

というかんじで現代に至ったらしい。あってる?

しかし K8S が Docker に依存するとか俄には信じがたい・・・と思って調べると、彼らは Docker と自分の間に cri-o / CRI というレイヤを挟んでコンテナのバリエーションを吸収している。そして GKE は実際に Docker でないランタイムを使うオプションがある。しかし開発者はふつうに Docker でイメージを作って push できる。なぜなら GKE のランタイムは Docker がつくったイメージ、おそらくだいたい OCI 準拠、を実行できるから、ということらしい。あってる?

自分はそんなに Docker 好きじゃないし特に使いみちもなかったのでいつもコピペと SO だのみでだましだまし使ってきた。でもイメージフォーマットは定着したようだし開発者が手元で使うツールとしての docker コマンドも特に良い代替品が出て来る見込みは薄い。もうちょっと流暢に使えるよう労を割いてよさそう。

Docker 社が Microsoft か IBM あたりに買収されればもっと心穏やかになれるのだが。


追記

などと書いた矢先に社長が変わった: Steve Singh stepping down as Docker CEO | TechCrunch

Fragment #4

|

日曜日

  • 昨晩は来客のため就寝が遅くなり、今日は母の日の備えが必要なため、なにもなし。

土曜日

  • 04:57. GitHub に CI をつなぎます。
    • GitHub Apps - Google Cloud Build
    • これは・・・微妙だな。全てのコミットに対してデプロイが走ってしまう。しかし条件つきでビルドを促す方法はない。テストだけにしておくのが無難だが、一方で gcloud への依存こそローカルから手放したい。どうしたものか。
    • push をトリガーする github repo を別枠で用意し、そっちにデプロイ用の cloudbuild.yaml を置く? プロジェクト毎に git repo が2つできる。かったるい。
    • GitHub app を使う標準のインテグレーションは捨て, WebHooks を受け取ってビルドを開始する Cloud Function を書く?たぶん仕事ならこの路線が正解だが、仕事じゃないのである。保守がかったるい。
    • 一方、仕事じゃないのでどのみちそんなにコミットしないのではとも思う。当面は適当に squash しつつ現状の設定を維持、Cloud Build がもうちょっとがんばってくれるのを待つとしよう。ついでに来週バグをファイルしよう。いち利用者としてフィードバックする口が見当たらないのはどうなんだと思うが・・・。
    • つぎ。インポータの CF も CI します。
    • gcloud functions deploy するには roles/iam.serviceAccountUser が必要らしい。権限まわりはいつも謎。
    • うごいた。ここまで。

金曜日

  • 昨晩は I/O にきているひとたちの接待(?)宴会に参加したため朝起きられず。
    • 大量の肉を食べたせいか翌日の昼まったく空腹感がない。肉おそるべし。
  • 自分のチームが興味のない数字をどこか(「インフラ」)の人々が勝手に図り、勝手に数字が下がったと文句を言い P1 バグをファイルしてきて、しかし regression range は一ヶ月以上。そんな bureaucratic の季節が来た。しかし今はチームの計測インフラが強化されたのでそのどうでもいい数字の計測も CI に追加してやんよ、と心の余裕が持てて良い。しかし BS である.
  • わけもなく仕事のやる気が出ないときはとりあえず音楽をかけると良い。
  • ふと昔使っていた耳栓型イヤホンが欲しくなる: ER4XR Extended Response Earphone $300. 高い...  ER3SE Studio Edition Earphone 廉価版も $150 か。また今度。
  • I/O のビデオを見る時間を作らないと。一日一本、仕事しながら見る?
  • Youtube の watchlater リストがいまいち使いにくいので, YT 専用の watch later アプリが欲しい。
  • Pragprog を読むうちに、自分が過去に読んだ技術書をリストアップして振り返りたい気がしてくる。しかし良いツールがないな。Amazon の wishlist でも使えば良いのか。
  • 同僚と話していると自分はまあまあアプリのアーキテクチャに詳しいと気づく。しかしきみらそれ知らずに機能開発できてるのか。それはそれでエライ。
  • 割と生産的な一日だった。

 

木曜日

  • 05:15. 寝入りに Pragmatic Programmer 新版を読んでいたらイライラして眠りが浅くなってしまった・・・
  • GCP の bill, 高いな色々遊んでるせいか?とおもったらむかーしつくった VM のディスクが高く付いていた! 削除. $100 くらい無駄にしてしまった OMG...
  • 今日は仕事がおおい. こういう雑用やって成果を上げた気にならない用に気をつけたいが, それはさておき片付けないといけない。
  • 仕事の Python コード、けっこうアグレッシブに list comprehension から generator への書き換えを勧められる。そしてたしかに良くなる。まだ generator が板についていない自分。

水曜日

  • 04:46. 雑用のち CI つづき.
    • Cloud build で GitHub repo を git clone したのち gcloud app deploy する。
      • git clone の credential は、gcloud kms で暗号化した token の base64 を deployment.yaml にハードコードしたのち gcloud builder step で復号化し、結果のファイルを git builder から使う、という方針でがんばってみた。このくらいで許してくれ。
    • Cloud build でテストを動かしたい。
      • とりあえずテストのステップを足し、credential がなくてテストが失敗するところまで動かそうではないか。-> 動いた。
      • さて GCP の credential だが...
        • gcloud step から IAM で service account key を発行する?  cloud build がそんな強力な権限を持ってしまってはダメ。
        • テスト実行用に service account をつくり、その credentials を KMS で暗号化してコミット、それを を gcloud step で復号化する。
    • Firestore の IAM role がわからん!で時間切れ。
  • ART のひとがとことこやってきて、おまえのベンチマークちゃんとネイティブコードにコンパイルされてる?というので調べてもらったらされてなかったうげー・・・。まあボトルネックはだいたい OS の中とか C++  の中なので全体像にはインパクトないと思うけど shame であることよ。お前はこのトークを見ろと言われる。明日じゃんか。
  • ふとちょろいウェブアプリを作れる JS フレームワークないかなと Vue の blog を呼んでいたら 3.0 作ってるよ非互換だよ的ポストが目に入ってうんざり。やっぱ Web やりたくない。
  • 今日は割り込みの相手をしていたら終わってしまったうんざり・・・しかしいくつか重大な発見があったのでよしとする。たまには社交(?)も必要。
  • The Pragmatic Programmer, 20th Anniversary Edition: your journey to mastery by David Thomas, Andrew Hunt | The Pragmatic Bookshelf
    • 義理で購入したが、Pragprog サイトの古臭さがなにかを物語っており寂しい。まえがきは 1/3 が新しい内容だと主張している。さて。

火曜日

  • 04:43. CI つづき
    • まず GAE をクラウドで gcloud app deploy してみましょう。このへん参照
    • Github  から clone... するのに key を設定に書かないといけない?ドキュメントによれば... めんどくせー。とりあえず今は前に進むために personal access tokens をハードコードして動かす。
    • つぎ。テストを動かすにせよ GitHub のトークンを隠すにせよ、なんらかのキーなりなんなりを取り出す手段が必要。やれやれ・・・。こういう時は専用の CI-aaS の方がちょろっと環境変数を保存できたりして便利な傾向。しかしそういう投げやりなショートカットを用意してるのが本来 AWS に対する GCP の良さではなかったか。
    • 子が起きてきたので唐突に終了。
  • 朝飯を若干たべすぎる。Sugar の引力に弱い。
  • I/O
    • Search with AR. どうでもいい...
    • レストランで Lens なー...
    • Google Go, $35 の電話で動く....のは $35 の電話の存在がすごい。
    • サーチに予約 Bot が付いた! 便利かもしらんがこの仕事はやりたくないなー。
    • Assistant が Always on になったの、デモはすごい。どうやってインテグレートするんだろうか。
    • プライバシーまわり、昔会社がすごい真面目だった頃に溜め込んだものが dividend を払ってるようでありがたい。今日の我々は未来のために何を積み立てているのだろうか・・・。
    • Android の "focus mode" はちょっといいかも。
    • Beta3 やるデバイスの多さは Treble の成果か。世の中はちょっとずつ進んでいる。
    • Pixel 3a, OnePlus でよくね...と思っていたが OnePlus より安い。頑張ったな。
    • おわり。特に面白いものはなかったな。午後に期待。
    • 午後は、特に exciting ではないが Android Studio が真面目にバグをとったのはいい話。
  • Google Pixel 3A Review: The $400 Smartphone You’ve Been Waiting For - The New York Times
    • メディアのレビューは概ね好意的。やはり安いのは大事。Snapdragon 670 は Big 2, Small 6 というコア構成で単に遅いのみならず割と性能特性が違うため、がんばってチューンしていきたい所存。
  • 昼飯もたべすぎた・・・。
  • チームの人が "onDraw() ではアロケーションを減らそうな" みたいなプレゼンをしていてウッとなる。このへんの溝はなかなか埋まらなそう。

月曜日

    • 04:56 CI つけたい。あとそろそろ wrap up の方針を固めないとな。
      • CI はとりあえず Cloud Build を使ってみる。
      • Python GAE 用 Docker image というのがあったのでこいつでビルド(というかテスト)を動かせないか手元で評価しているが、むしろ普段の作業も pyenv でがんばるより Docker に統一した方が良い気がしてきた。あとでやる。
      • Credential の置き場がないという当初の懸念までたどり着いた。GCP 的な正解は KMS を使えらしいが個人プロジェクトには大げさすぎ。Service Account の JSON をどこかから持ってきたいだけ。
        • Git にチェックインしてしまう -> 人としてどうだろう。
        • GCS に置いて pull する。これも微妙だが GitHub のパスワードではなく GCP の credential の裏にあるだけマシと言える。
        • GCloud のコマンドでなんとかできそうなものだがわかんね。
        • テスト動かすのはあとでやるとして、 git clone のち gcloud app deploy するところまでやろう。
      • しかし GAE と Cloud Function のコードが同じ git repo に入ってると都合悪いので分離しなければ。Yak shaving は続く。
      • Git repo を分離したところで今日はおしまい。
    • Microsoft Build 2019 // Vision Keynote + Imagine Cup World Championship - YouTube
      • キーノート 0830 からですか。早いな。
      • 自分のデータを食わせた言語モデルに基いて音声認識できる!これはすごいよさそう。
      • Microsoft Graph がなんなのかまったくわからないので調べる。Office 365 の API をかっこいいかんじに統合し、その上に色々付加的なサービスを乗っけたものらしい。いいじゃん。O365 つかってないので使いみちがないが、G Suite / G Apps の API がこういう風だったら使いたいことは色々ありそう。
      • Edge, IE モードにシームレスに切り替わる... これほど unsexy かつ一部の人には超実用的な機能はない。そして ad blocker. これを tracker blocking と呼ぶことにしたのは発明。
      • Case Study の多さに景気を感じる。そして Windows 全然でてこなくてすごい。明日以降なのかもしれないが。
      • 良さそうという気持ちと根本的な無関心。Microsoft ecosystem と自分は距離がありすぎる。興味を持つにはもうちょっと接点が必要。どこかに Windows インストールしたい。
    • Inside Microsoft’s surprise decision to work with Google on its Edge browser - The Verge
      • いまいちやる気はないがユーザはいっぱいいる Windows 版を専門家が良くしてくれるのは Chromium 的に何一つ問題ない気がするが、他の会社のもってるコードベースさわるのはなんだかんだで面倒。がんばれ。
    • 仕事でも家でも Python を書いている結果、少し習熟度が上がってきて楽しい。なにかが上達するこの感覚、ふだんは中々味わえない。

Python Async/Await のいまいちさ

|

Python の async/await について調べもの。

主な興味として generator を async / await ベースで書けるか知りたい。本文に yield のある関数が自動的に generator になる辛い仕様のない世界は(書き手が気をつければ)実現できるのか。

PEP 492 -- Coroutines with async and await syntaxPEP 525 -- Asynchronous Generators を眺めた結論としては、できなそう。むしろ "async generator" というものが登場してより複雑になった感がある。PEP 492 は冒頭で自分の不満を async/await の動機のひとつとして上げているにもかかわらずそれを解決していない。ひどくね?

翻って Kotlin を見るに, async/await と yield はどちらも suspending function である、というかどちらも coroutine 言語機能の上に書かれたライブラリ関数である。型チェックの助けもあり、Python にあった複雑さは存在しない。Python ももうちょっとレイヤリングをがんばって async/await を generator の延長に実装し、その上で yield の紛らわしさを解消する構文を足してほしかった・・・

以前 Flask の一味 Armin Ronacher が Python の coroutine わからんという記事を書いていた。彼の不満はランタイム API の話が中心だったけど、その複雑さは文法にも染み出している。つらい。

Python の async/await が自分に必要となる場面はそれほど想像できないので、なかったものとしておくのが良いかもしれない。

Podcast Clip-Sharing

|

Marco Arment のつくっている Podcast アプリ Overcastclip sharing 機能が追加された。(ATP のエピソードも参照。) Podcast のエピソードから一分以内の音声を切り出し、Podcast のロゴがついたビデオとしてソーシャルメディアなどにシェアできるという。これまでソーシャルメディアとの距離があった podcast が、ついにバズる機会を得たのかもしれない。なかなかうまいものを考えたと感心する。アプリの宣伝にもなるので Overcast 以外の podcast アプリが追従する可能性も高い。

一方で podcast をやっている身としては嫌なものが開発されたと胃が痛む。Podcast はソーシャルメディアで buzz らないからこそ気楽にできるのであって、文脈から切り離された言葉尻を clip sharing されたりするとその気楽さは失われる。ソーシャルメディアで buzz らせる断片を探しながら podcast を聴く attention-addicted listener やソーシャルメディアでの buzz を狙ったコンテンツも現れるかもしれない。イヤすぎ。

若干 podcast への意欲が削がれた。Marco Arment はファンだけど、こればかりは流行らないでほしいなあ。

高速化日記 (2) - Colab

|

一つ前の作業で Executor をフックすると既存のコードへの変更を小さく大局的な挙動をいじれるとわかったので、当初考えていた高速化を Executor 中心で実装してみる。Handler のようなゴミを直接使わずほぼすべての場所に Executor を配備仕切った序盤のプログラマは偉かった。しかし platform の API が Handler を要求してきて殺意。

いちおう design doc を書いて流し、大きな push back が無いことを確認。実際にコードを書いて試してみると・・・まあまあ速くなった。めでたい。コードを整理してレビューに出す。

レビューを待ちつつ次の手を考える。色々やりたいことはあるが、当面は UI Thread の高速化に注力しよう。複数の device / build flavor の組み合わせで Systrace のダンプを集める・・・のをいいかげん少しは自動化したいので Colab で適当なコードを書く。Systrace 開始、アプリ起動、Systrace 終了待ち、アプリ終了。ファイルを HTTP reachable な場所にコピーしてリンクを返す。これでブラウザから一撃で Systrace を取って表示されたリンクをクリックして結果が見られる。これよくね?100 年前から colab 化しておくべきだった・・・。

ダンプを眺めていると、当初の予定に反し UI Thread の外側にひどいコードをみつけてしまう。これなぜ自分のベンチマークは検出してくれなかったのだろうか・・・というと、レビュー中の自分の変更が入る前はスレッドの隙間に隠れていたのが暴かれてしまったのだろう。逆にいうと自分の高速化の効果はこの最近の変更のせいで目減りしてしる可能性がある。許すまじ。

一方、問題の変更はまだ Release flavor では有効になっていないので、自分の変更 (フラグなし) をさっさとコミットしたうえで あれらが Release flavor に来るのを待ち、flag flip のタイミングでベンチマークが検出するまで知らん顔しておくのも手かもしれない。どうしたものか。まあ自分の変更が入ってから考えよう。

Dev flavor と Release flavor の結果もやや違う。ベンチマークの結果も違うので当たり前ではあるが、Dev ばかり見てるのはよくない。

そしてデバイス間の差も大きい。やはり場当たり的なチューニングはもう限界で、なんらかのヒントに基づきコード自身がスケジューリングを最適化してくれないと厳しい。しかし今年の締め切り内にそれは無理げ。ほんとに?真の優先度はどうあるべきか・・・。

それはさておきどうも UI Thread に注力はまだ若干早そうな雰囲気。

といった見通しを得るにあたり colab は必須だったので、やはり 100 年前から使うべき。