Spinach Forest

#LETTERS

/ Revisiting Writing   / Office   / HP C1030 Chromebook   / Alder Lake and The End Of Linux Laptop   / Cycle   / Laptops   / Parties   / Anime Night   / 出荷を見届ける 2021   / Paul Debevec   / 出勤   / Getting A Phone   / Chat With Ducks   / Impossibility Of Remote (Contd)   / Hierarchy   / Stressors   / Supernatural First Day   / Fasting Again   / Scudo Allocator   / 朝型化に復帰   / 縦書日記   / Juggling   / Links, July 30   / Neeva   / 新聞   / 電子タバコ   / RubberDuckEng   / 残業   / Links, 07/03/2021   / 日記   / 会話の無さ   / Possibility and Impossibility of Remote   / Links 2020-05-23   / Mentorship   / Nudge Bot Stack   / Staff Engineer   / Teacher Appreciation Week   / 最近聴いた本   / Revisiting Caffeine   / In HN   / 雑談用メディアについて考える   / Project, Feb. 2021   / Scala 3 Disappointment   / Project, Jan. 2021   / Book: Software Engineering At Google   / Write Code Every Day At Work   / On Misreading Chat   / Wordpress Isn't For Blog Anymore   / Direction 2021   / Having Fun on The Dead Carrier   / Being At Home 2020   / Looking Back 2020   / Another Update   / 時間はなく、忙しくもない   / Towards (A Bit) More Procrastination   / Wishlist   / Office After This   / WFH Week 7 くらい   / Tech After This   / 書く気力のなさ   / 炊事日記 #1   / Big Blurry Picture   / WFH Week 3   / 疎開について考える   / WFH Week 1   / Peer Reviews   / WFH Day 1   / 歌を覚える   / WA 2020 #7: Wrapping Up Before The End.   / WA 2020 #6: Procrastination Paralysis   / WA 2020 #5: Running Fast Enough   / Book: Whilstleblower   / WA 2020 #4: A Secret of Perfect Taste   / WA 2020 #3: Conway's Law of Thread Pools   / WA 2020 #2: Doc Appointment   / WA 2020 #1: Figure Things Out   / WA 2020 #0: Ten Days, That's The Goal   / 貸しの無さ   / Asthma and Fear   / Shopping List を探す旅   / Vega-Lite: A Grammar of Interactive Graphics   / Book: Friendfluence   / Revisiting FTrace   / Revisiting Altair   / 高速化日記 (10) - The Deprecated Way   / 高速化日記 (9) - Processing Traces   / 高速化日記 (8) - Load Average and Jiffies   / 高速化日記 (7) - Removing Code   / Book: Women's Work   / Book: Zero To One / The Startup Way   / Link: Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer   / Picture Taking Practice, A Month Later.   / 時間予算日記 (18)   / A Short Reflection 2019   / (Audio)books 2019   / Book: Why We Sleep   / Learning at work is work, and we must make space for it | Hacker News   / Publishing 2019   / A Long Reflection 2019 (7) – Not Looking Forward   / A Long Reflection 2019 (6) - The Failure   / A Long Reflection 2019 (5) - Extracurriculars   / A Long Reflection 2019 (4) - Attention and Citizenship   / A Long Reflection 2019 (3) - Bigness   / A Long Reflection 2019 (2) - Grit and Expectation   / A Long Reflection 2019 (1) - Timeline   / A Long Reflection 2019 (0) - Looking Back   / Book: Competing with Unicorns   / 感謝祭の夜に   / 紙読み日記: Spatial Transformer Networks   / PT 日記 (3)   / 朝型化一年   / 時間予算日記 (17)   / Picture Taking Practice   / PT 日記 (2)   / Revert First   / 時間予算日記 (16)   / 紙読み日記 (1)   / PT 日記 (1)   / 時間予算日記 (15)   / 1st Day of Kick Scooter Commute   / 誰が力を持つのか   / Indistractable   / 高速化日記 (6) - Overload   / 高速化日記 (5) - JNI   / 技術的な意思決定   / 技術的免責   / The Complexity of a UI   / MVI   / The Tales of Two Firsts   / Antisocial   / Skipping The Tech Conference   / 出荷を見届ける - 2019   / PyTorch Mobile   / Organizing The Bookmarks   / アメリカの騒音   / Another Goliath   / Open Domain-Specific Architecture   / GPUs On The Cloud   / How It's Been Ending (7) - The Ecosystems   / How It's Been Ending (6) - Me   / Attention Industry Complex   / 技術の古典化   / 音の鳴るおもちゃとはてなくん   / 画面の不透明さ   / How It's Been Ending (5) - Software Development   / Link: What is Developmentally Appropriate Practice (DAP)? | NAEYC   / 過保護の本   / 時間予算日記 (14)   / How It's Been Ending (4) - Dennard Scaling   / 教える対価   / モダン根性論と才能   / The Writer's Process   / A Book On Potty Training   / How It's Been Ending (3) - Downsizing   / An Update on Fragments   / How It's Been Ending (2) - CPU   / How It's Been Ending (1)   / 平日と休日の交換   / バグを弔う技術   / Upstreamed   / Link: Blow to 10,000-hour rule as study finds practice doesn't always make perfect | Science | The Guardian   / 教えない対価   / Dogfooding Fear   / 実践 Backyard Grilling   / Career Development Talk   / Personal Wiki (No More)   / Backyard Grilling の謎   / 高速化日記 (4) - Tracing   / 砂糖戦争日記 (1)   / Spoilage   / 時間予算日記 (13)   / 時間予算日記 (Backlog)   / Book: The Case Against Sugar   / Huawei officially reveals Harmony OS, its first party operating system   / 仕事のやる気   / Podcast 負荷低減に向けて   / 高速化日記 (3) - Pinning   / Another Reduction   / Casey   / Pricing, Medium vs. note   / 隣の TLM   / The First (Failed) Attempt To note   / On note   / Link: ニューヨーク・タイムズは日本を「独裁政権」と呼んだのか、気炎を吐いても息さわやか - ネットロアをめぐる冒険   / 退屈な電話機と仕事の物欲   / Toiletry Bag   / On Hybrid Research   / More On 20-Percent   / Stepping Out From The Mess   / Composability   / 手段の為替レート   / Diplomatic Coding   / Less Relevant: Blocking vs Non-Blocking   / Intermittent Fasting   / The Pragmatic Programmer 一通り眺めた   / 棚卸し   / 歩きの効能とノート   / 技術書への不満という濡れ衣   / Cloud Build と Serverless   / Pragprog 20 周年版(Beta)読み始め   / Did Docker Win?   / Python Async/Await のいまいちさ   / Podcast Clip-Sharing   / 高速化日記 (2) - Colab   / 無印のプログラマという夢   / 伝統的サラリーマンの謎   / 嫌いなものに美点を見出す   / 高速化日記 (1) - Flow Visualization   / Letters   / I Don't Like The Focus   / Spring   / Community Exposure   / The First Regression   / Home Alone 2019 (1)   / Beyond BOLD   / Quora   / Accessible Podcast   / Urge Of Side Projects At Work   / Stressed Out   / Snippet Train At Work   / Listening Backnumbers   / Link: Antitrust 3: Big Tech : Planet Money : NPR   / Link: Block ads in apps on Android (including video ads) - unlike kinds   / You probably don't need a single-page app | Hacker News   / Deep Dive   / Memory Allocation onDraw()   / Extra Curricular And Distraction   / google/mobly: E2E test framework for tests with complex environment requirements.   / Your Responsibility, My Problem   / Book: The Age of Surveillance Capitalism   / Book: The Curse of Bigness   / Software Design, Process and Documentation   / You Are What You Say (And Not Say)   / Link: Androidにおけるパフォーマンスチューニング実践 - Speaker Deck   / Freshing Out Before Starting   / Colab and Exploratory Benchmarking   / Better At Detaching   / Unconscious Bias   / Web Stack Today   / Sentiment Amplifier   / The Lack Of The Focus   / WebRender   / Link: Profilo · An Android performance library   / Agile And Micromanagement   / Reviewer Being Nice   / Bad Parts of Performance Work   / Link: I interviewed at six top companies in Silicon Valley in six days | Hacker News   / Thinking Like Talking   / It's Not For Your Favorite   / Link: amakanサービス終了の経緯 | r7kamura on Patreon   / 先送り   / What To Give Up   / My "Things I Don’t Know"   / Comments and Commit Logs in English   / 来年以降のキャリアをぼんやり考える   / 家でも非同期コミュニケーション   / Review 2018 / Work   / Mercari IR   / プログラミング言語の習熟   / 2018 Review   / (Audio)books 2018   / 職場における自分個人の進行管理   / TabCopy   / Playing With Firefox   / Skimming OpenCV   / 給与改定の季節   / Link: The Friendship That Made Google Huge | The New Yorker   / Retiring   / 煙に追われ南へ   / Book: Building Evolutionary Architectures   / 空気清浄機   / logd   / Understanding Android Surface   / 朝型化を考える   / 関心過剰   / ステロイド   / コーディング面接   / 人事考課の季節   / 何を仕事に数えるか   / Pick Your Battles   / 卵と壁と窓   / 出荷を見届ける   / 長続きするコツ   / Unlearning The Dream Job   / 割れ窓理論再考   / Bugs are Eating (My) World   / 景気のいい日本の会社   / Performance Team, SRE and Android as Distributed Systems   / 帯状疱   / 書きたい、書ける気がしない   / 要リハビリ   / 作らない、作れない   / Moving Target   / Bugrepot and Thread Dump   / Podcast の集客   / Updating Baseline   / Tateno Culture   / 草の根ツール   / コードサーチの力   / エピソード構成見直し   / Thread Priorities   / Evicted   / Less Free Time, 2018   / Gralloc, Treble and ION   / My Note Taking 2018   / Owning The Speed   / 贅沢してる   / 締め切りの力   / You Need A Budget   / Santa Cruz Mountains   / 季節性のある仕事   / Impulsively Toxed   / 性能仕事の退屈さ   / Dogfooding   / バグを眺める   / Book: So Good They Can't Ignore You   / Book: The Manager's Path   / モダン根性論   / On40: Health   / On40: Mediocrity   / Fortieth   / Book: Crucial Conversations   / On Being Left   / Podcast Busy-ness   / On 20-Percent   / Multi-threading   / On Device Tracing   / 伸ばした背筋の記憶   / 仕事日記   / Cold Start and Busy Start on Android   / Turning English Mode On   / 週末に会社で一服の気まずさ   / 表面的な話   / Re-Reading GAN   / Home Alone (6)   / Book: The Essential Drucker   / Real ID   / Home Alone (5)   / Mindfulness   / Assumption   / Boundaries   / Home Alone (4)   / GitBook Pivot   / README 表示という発明   / Proxy Child   / 平社員技能   / 評価減   / Thinking and Listening   / Altair   / Home Alone (3)   / Home Alone (2)   / Home Alone   / Data Expert   / Leave Me Alone   / Hyperthyroidism   / Cold: A Postmortem   / HTML Imports の死   / 2017 Review   / A Sense of Ending Career   / Reflection   / Moving   / ... 

Revisiting Writing

|

今年のはじめに自分の書き物について検討した。そのアップデート。主にツール関係。

Blog

つまりこれ。WP 新エディタのイマイチさは未だに払拭できない。

あと Fragments のように日々の細かいことを書く場所は、やはり欲しいなあと思ってしまう。これは欲しかったり止めてみたりしているのでたぶん結論は出ない類のものなのだろうけれど。

あと、最近はもう年一回 publish じゃなくてリアルタイムに出しても良いかな、という気もしている。なぜなら数年の撤退を経て自分のブログのコンテンツとしての価値は無事(?)ほぼゼロになったからである。ただ RSS はインターネット中毒者にフィードしてしまうので、無い方がいいかなと思う。読んでほしい人には今のようにメールすればよい。もし広く読んでほしいなら tweet でもすればいいし。

Wiki

色々試した結果 Confluence を使いはじめた。

良いところ: まあ、なんかメモしておく場所があるのは良いね。どうでもいい細かいコマンドとか Linux の設定とかさ。そういうやつ。

悪いところ: とにかくクソ遅い。どうにもならないレベルで遅い。編集が遅いのは百歩譲って許すとして、閲覧も遅いのはどうなんだ。

その他の発見: 書いてみると、自分のメモはコンテンツとしての価値は特にないが別に秘匿する必要がないものが大半だった。プライベートなメモはないではないが、そういうのはあまり書いていない。あと Wiki 的な hypelink は目次くらいにしか使っていないので、blog.kyanny.me 的に blog に書いても良い気はしている。特に人に読んでもらう気のない自分のような身にとってはね。

試したが板につかなかったツール:

  • Notion: 複雑すぎるのとアプリ感が強すぎブラウザで閲覧するのが Confluence 以上に向いていないので諦めた。
  • Obsidian: ウェブでないので Chromebook で仕事している身には厳しかった。あとコンテンツが URL を持ってないのもいまいち。

日記, Braindump

Docs につけていた日記は、結局書かなくなった。読み直してみると書いたほうがいいなと思うが、なんかいたに付かないのだよね。早寝するようになったせいかもしれないし、単に根気がないのかもしれない。まあ後者だろうな。というわけで未解決問題。

DuckDB 活動の記録をつける縦書日記は割と書いていて、満足している。ただ Github Issues で書く必要は、たぶん無い。

日記のバリエーションである Braindump は Confluence に書いているが、やはり遅いのがいまいち。まだ WP の方がマシ。ただこの letters をつけている WP は若干 messed up されている。WP を各種 writing の backend に使うというアイデアは、結果としてはイマイチだったね。なぜかは上手く説明できないけど。

Writing Platform

書く場所が WP / Confluence / Docs に散らばっており、かつどちらも遅い (Docs は編集は遅くないけど閲覧が弱い) のは、イマイチだなと思う。「考え事はここに書く」と決めて置けないのは、サッと書く意欲を下げている。

あと仕事や Message Passing で markdown を書いていると、まあ色々なものを md で書くのはもう受け入れてもいいかなという気がしてきた。WYSIWIG 環境である WP/Confluence/Docs のイマイチさのせいもある。

その点で GitHub Codespaces のようなブラウザ内 vscode で色々なものを書く実験をしてもいいのかもしれない。ブラウザ内 vscode は GH Codespaces に限らず色々イノベーションがおきており、Emacs 脱退以来諦めていた「なんでも書く場所」候補に期待できる。

仕事で試していた foam と組み合わせて public な書き物は vscode / markdown/ netlify に統一するのもアリかなという気がしており、仕事がヒマなうちに調査したいところ。

Office

|

週一通勤を初めて一ヶ月くらい。

同僚、あまり来てない。2割くらいだろうか。若者も来てない。若者は寂しいから会社にきたがるとか、幻想だったね。まあ来ても対して人がないから鶏と卵ではあるけれど。

対人コミュニケーションがどうとかいうけど、自分にとってのオフィスの良さはハードだよな。空間の広さ、ネットワークの速さ。割り込みの無さ(これは今だけだが)、無限メシ、無限スナック。今も会社の中庭のソファでスマホからブログしてる。こういう空間は、自宅にはない。

オフィスの最大のピュアなネガティブは、オフィスそのものではなく通勤である。完全な無駄で、しかも割とでかい。自分とか通勤インパクトを最小化してるけどそれでもやなので、車で往復2時間とかだとちょうイヤに違いない。

もう一つのネガティブは居場所を制約されるという事実だが、これは自宅で働いていても寝室に制約されているので大差ない。

こういうネガティブの総和がポジティブに勝たないと、会社来たくないよな。

対面コミュニケーションがどうとか周りからの割り込みがどうとかいうのは、今振り返ってみると相対的にはどうでもいい、とは言わないけれどより nuanced だったなと思う。VC そんなに悪くないし、たぶんリモートにコミットして環境改善に投資すればもっと良くなる。(リモートに振るなら VC じゃなくて非同期にしてほしいがそれはさておく。)割り込みは、家でもある。そして自分は割り込みがどうであれどのみち割と気が散っている。

組織はともかく個人のレベルでは、リモートライフが長引けば長引くほど適応が進んで、オフィスに行く意欲は薄れるだろう。一年前、半年前と比べたら、戻りたい人どんどん減ってるんじゃないか。そんな中オフィスを開けても、全然盛り上がらなそうだよね。ホントに来年初頭に開けるんだろうか。開けるんだろうなあ。全然現実感が無い。

HP C1030 Chromebook

|

会社の Chromebook を四年目の Pixelbook から HP C1030 というやつに乗り換える。4k の Chromebook というのは現存しないらしく、これも 1920x1280. ねえわーと思ったが、Pixelbook からハードウェア的な不調を感じるのでやむなく乗り換え。

画面が 4k でない以外は悪くはない。CPU もだいぶ速くなったらしく、スクロール、タブ切り替えなど色々と速やかになった。指紋認証もついている。

"HD" モニタは残念で、ダウンスケールして画面の情報量を増やすと普通に字が滲む。仕事で使うときは外部モニタに出すか VC するかなので許容できるけど、自分で買うのはナシだなあ。

VC といえば、ビデオ(カメラ)の品質は前より悪い。

Pixelbook は Slate がよほど大失敗だったのか後続機種が続かず、そういうことしてるからブランドの信頼度を築けないんだよ・・・と残念。さっさと新しいの出してくれー。

Alder Lake and The End Of Linux Laptop

|

ラップトップ探しをしていたら Intel がもうすぐ次の世代の CPU (Alder Lake) を出すというニュースを見かける。しかも Big / Little っぽい構成になるらしい。まじで。

ついに EAS 的なのが Linux の mainline に入るのだろうか・・・と更にニュースを眺めると、この asymmetry 構成にあわせ CPU がスケジューラのために色々なカウンタとかを提供する Thread Director というのが入るらしい。ではどんなシグナルが読めるようになるのかとワクワクしながら資料を探すが・・・。どこにも全然書いてない!"Hardware Feedback Interface" という機能の一部であることまでは文章化されているが、具体的なシグナルがマニュアルにまったく載っていない。まじか。

そんでは Intel の人が Linux にパッチ書いたりしてないかなとマニュアルに出てきた定数名などを頼りに検索すると、影も形もナシ。ほんとに?しかしよく考えると Intel にとって(というか世間の大多数の人にとって) Linux というのはデータセンターなり組み込み機器なりの OS であり、そいつら的に big-little 的な構成はあんまし意味ない。(データセンター向け CPU も同構成になるのだろうか?ならない気がするが、よくわからない。)

では誰がこの Thread Director を使ってくれるのかと言うと、Windows 11 らしい。つまり 12 世代の Intel CPU は Windows じゃないとちゃんと動かないじゃん!ええー・・・。今の所公には文書化されていない Hardware Feedback Interface の詳細も Microsoft には Intel から提供されているのだろうね。まあそうだよね。

このままドキュメントも現れず誰も Linux の Intel-Big-Little 対応をやらないままだと、Linux laptop / desktop はほんとに終了のお知らせという感じがする。まあ現状すでに終わっている(というか始まってもいない)わけだけど、バッテリーが全然もたないとはいえ少なくとも CPU 性能はちゃんと出た。しかし今後はそれも怪しくなる・・・とまではいかなくて、たぶん常に big core が優先的にタスクを受け取るのでスループットは大丈夫な気がするけど、バッテリーは今まで以上に持たなくなるであろう。

Mac OS が Intel CPU を真面目にサポートしてた頃は Darin/XNU 経由で実装の細部が漏れ出し、それを Linux が真似すればよかったかもしれない。が、それももうおこらない。

はー次の laptop は Windows か Mac かー・・・ Windows 11 使ってみたかったけどあまりに評判悪すぎだし Mac かな。いずれにせよかったりーなー・・・。


ところでふと気づいたけど Chromebook すごい困りそうじゃないこれ。Chromebook 人材が Linux をなんとかしてくれる、というのが個人的には夢展開だけど、それよりは Android の資産を持ってきて ARM に降る方が常識的だよな。どうするのかね。

Cycle

|

人事考課の季節。特に変化なし。まあ下がらないならいいです。というか一段階くらいなら下がってもいいです。

マネージャがかわり、評価の自然言語が変わった。なぜ +1 の評価ではないのか、なぜ -1 の評価ではないのか、というサブセクションが追加されている。こういうテンプレが推奨されているのだろうか。個人的には何も考えず全員に 3 (of 5) を配っているマネージャが一番ラクでいいんだけど、今のチームのマネージャはみな真面目に評価してくるねえ。やっぱ 10 人くらいぶらさげて雑にしたほうがよくね?

そういえば少し前に勤務先関係者の退職エントリHN を賑わせていたが、入社直後のチームのマネージャが 25 人も抱えていてキツかった、というネガティブな評価をしており興味深かった。いいじゃん。同時に PM が超絶 micromanage なのがキツかったと書いており、マネージャがどうこうよりそれが主要な問題なのではなかろうか。ここで書かれている入社時のチームは地獄プロジェクト感があり、よく辞めずに生き延びたね、よかったね・・・と思いました。


ダメな PM とかダメな隣接チームなどから身を守るためにマネージャの権力と外交リソースが必要になり、マネジメントが厚くなることはあるだろうか。

たとえば、モバイル部門のマネジメントが厚いのは、そういう組織の歪みのシグナルなのだろうか。そういう面はありそうだね。別に激しい権力闘争とかがあるとは特に思わないが、プロセスのありえないレベルのダサさの皺寄せはある。

逆に言うと、組織がフラットでいいと主張するのはそうした組織の歪みがないことを暗に売り込んでいるのかもしれない。売り込むというと語弊があるが、マネージメントの薄さは組織の歪みのない健全さの一つのシグナルとして機能している。

因果関係はあるのだろうか。つまり、マネージメントの厚さは組織を不健全にするのだろうか。直感的というか心情としては真だけれど、まあ、どうかね。

Laptops

|

Macbook Pro の新しいやつが良さそうで羨ましい。自分の laptop はまだ買い替え時ではないが、現実逃避に今ならどれがほしいかなと眺める。

最近、事情により朝の課外活動を bedroom でなく living room でやることが増えたため、デスクトップを買ってでかい画面を使う野望は叶わなくなってきた。やはり次かうなら画面がでかくて速い laptop が良い気がするなあ。

個人的には XPS 17 がほしいと思っていたが、XPS のお約束で Linux で問題が多いらしい。Dell が並列して売っている企業向けモデルの Precision は大丈夫なことが多い。しかしなんと最新のラインからは 4K ディスプレイが姿を消していた!正気か?なんのための 17 inch なんだ・・・がっかりすぎ・・・。

Linux laptop という制限は厳しすぎると割り切り、Linux mini PC を買ってそこに non-Linux の laptop をリモートで使うくらいが良いのかもしれない。どんな Laptop が欲しいかは知らないが、別にすぐ買うわけでもないので市況を見ておく必要もあるまい。まあこの調べ物からして完全に不要な現実逃避なのだが。

はー XPS 17 系列に全力で速い CPU を載せて終了にできるのが一番ラクなんだけどなあ。残念。次の Ubuntu LTS までに誰かがなんとかしてくれると信じておく。世の中的には ThinkPad とかも人気あるけど、個人的にはあんまし興味もないしどうせでかい画面もないのでスコープ外。


なんでこんなことに時間を溶かしているのか自分でも不可思議だけど、まあほしいコンピュータがあるといのは自分のようなパソコン世代のおっさんには生きる希望、というと大げさだけど、ある種の楽しみなのだろうねえ。

Parties

|

衆院選があるというので各党の政策などを冷やかす。しかし日頃の無関心がたたって良くわからん。

野党は連立で政策を揃えている、というが、そんなことできるん?なんとなく維新の会が保守で、それ以外はだいたいリベラルっぽいことを言っているように見えるが、それがあってるのだろうか。

あとアメリカの Dem に一番近いのは日本共産党のように見えるが、なんか間違える?日本は socialism の国だとなんとなく思っていたが、政策だけ見ると別にそんなことない気がするなあ。

自民党は保守だと思っていたが、Republican 的な意味で保守なのかと言われると、よくわからない。古臭いというか、現状維持っぽい主張が多いのは事実ではある(現状の政権なんだから当たり前だけど。)

野党共通政策は減税するが支出は色々増やしたそうで、財源をどうしたいのかナゾ。累進課税を強めて金持ちから巻き上げるのは別にいいんだけど、足りんのかね。よくわからん。

維新の会は色々と節約するという話を前面に持ってきており、そこには意思を感じる。でも議員の減俸とか茶番だよね。そんな数百人しかいない人の給料いじっても全然インパクトないんだから、むしろきっちり貰って汚職モチベーションを減らしてくれやと思ってし合う。

政策の PDF はどこも箇条書きみたいのばっかりでいまいち説得力というか実現可能性がよくわからんねえ。どっかに予実をどうするかの見通しみたいのも書いておいてほしいが、カネの話をする割に実際の金額があまり出てこない・・・。政策提言とか公約とか、いちおう実績について議論できる自民党はそのへんは強みがあるよな。新聞社には fact check をしてほしいが、そういうのどっかにないのかねえ・・・。

などなど、日本の政治はよくわかんないね。自分が日本の政治を理解するために使っている資源はニアゼロなのであまり偉そうなことは言えないけれど、アメリカの赤青分断は、アホにでもわかる(というか、side を決められる)というわかりやすさはあるよな。

特にオチはない。

Anime Night

|

添い寝の終わりに向け週に三回子供が一人で寝る日を導入しはじめたので、夫婦で Movie Night でもするかと金曜の夜は映画を見ることにする(自宅)。

何が見たいかなと考えるが、映像メディアから距離を置いて暮らす時間が長すぎたせいで特に見たいものが思いつかない。うーむ・・・と Google TV app をつついていたらアニメが出てきて、そうえば最近アニメとかマンガとかゼロだな、自分の日々に足りてないのはそういうどうでもいいおたくメディアなのではないか奥様と一緒には見れないけど・・・と recommendation を surf して trailer を眺めつつ watch list を構築する。

というわけで記念すべき一本目は Ride Your Wave (2019). サーファーの女の子がイケメンの消防士に恋をするがイケメンが死んでしまい、しかし主人公があまりに自立心がなく心配すぎてイケメンは成仏できず、最終的になんとか成仏してもらう、というような話。限りなくどうでもいい少女漫画映画化的ストーリーだったが、こういうどうでも良さを求めていた気もする。いま調べたら漫画原作ではないのだね。そして評判悪いね。そんな期待値の高いアニメだったのか?かなりどうでもよかったよ?

うはーどうでもいいーーーという気持ちとエキゾチックな日本の風景に心が洗われてだいぶストレス解消にはなった。なお寝ながらスマホでみる閲覧方式を試している。あまりにどうでもよすぎて奥様にはチラリとも見せたくない。

マンガを読むのに比べると(rental が多いので)費用は控えめだし、ダラダラと読み直して時間を溶かす恐れもないのが安心。一方、こんなどうでもいいことでガンと二時間も無くなってしまうと課外活動に差し支えるなあと思う。週に一本見るとしたら、Movie Night とわせて 4 時間。課外活動の上限が 2x7 = 14 時間であることを考えると、塊がでかすぎる。そういう意味では隙間時間で消化できるマンガの方がいいのかもしれない。たが買うのが面倒くさいね。同様にテレビシリーズの方が小さい時間単位で扱いやすい気がする一方、さすがに時間を溶かしすぎる恐れがあるのでパス。週に一回が多すぎるだけで、隔週くらいでいいのかもしれない。いくら 10 年分のバックログがあるとはいえ、北米で閲覧可能というバーもあるし年間 40 本も見たいものがあるとは思えない。(watchlist をみたら 25 本くらいだった。)

というわけで次回は再来週。

出荷を見届ける 2021

|

2019. 2020 はなかった。パンデミックで参っており、それどころではなかったらしい。

なんとなく会社に行ってみたら、やはり人は少なかったがいちおう部屋が押さえられており、cupcake が振る舞われていた。相変わらずリークしまくりで、発表会も muted だし store は相変わらずよく落ちるしで雑、だが、それは全体としての「品質」とは整合しているので個人的にはそういうもんだろうという感想。完成度が高い flashy なのが欲しい人は隣町の電話を買えば良いし、買ってるだろうから。

自社製の SoC, といってもどこかの参照実装を改造したものだと思うけれど、に乗り換えるというのは会社的には big deal で、電話機部門としてはまあまあ historic な出荷となった。SoC とか作る人員を抱えた以上会社としての社運賭けちゃってる度も増したはずで、そういう意味ではもうちょっとなんとかしたら・・・と思わなくもない。

SoC が自社製になるの、戦略的にはフルスタックでコントロールできるのがよいという話だと理解している。ソフトウェア的には、SoC と自分のコードの間にわけのわからない SoC メーカーのコードが挟まらないのが良い。

SoC というのはハードウェアと一緒に SDK とかドライバみたいのがついてくる。そのコードは Android 無関係にかかれたナゾの独自ワールドで書かれた部分が多くアブストラクションとかに無駄が多く、ソースがないバイナリだけの部分もあり、ソースがあってもライセンスの縛りで限られた人員にしか読めない部分もあり(たとえば自分はカメラの ISP にアクセスするコードは読めない)、読めるコードも毎年 SoC と一緒にバーンと降ってくるので毎年インテグレートし直さねばならず、upstream もままならないのでバーンと降ってくるたびに同じバグがあったりして、こいう hoops をくぐるだけで仕事が終わってしまい価値のある仕事をする時間がない・・・とレイヤが下の方の人はいつも文句を言っていた。それを今は自分たちで書いたコードで置き換え「毎年降ってくる」ようなものはなくなったため、ハードウェアの bring-up が終わればすぐに価値を生む仕事ができる。ので下の方 (HAL, kernel) の人たちは張り切っている。

HAL のコードというのはソフトウェアエンジニアリング的にみると本当にヤバい。チップセットごとに完全にツリーがわかれていて、コードが全然共有されていない(共有する部分は基本的には OS の側に入っている。) 新しいチップセットが来ると前の世代のコードをコピーして、それをいじる。チップセットごとにディレクトリがわかれている。だから新しい世代でハードウェアに関係ないバグを直しても古い世代のバグは (cherrypick しない限り) 直らない。地獄。電話機メーカーもそれが地獄なのはわかっているので、HAL であっても世代間で再利用できるコードはなるべく世代非依存なモジュールに押し出して共有したりするが、なにせ自分でコントロールできない部分も多いので、限度がある。だから古い電話機の HAL は、出荷されたらもう良くならないのが基本。

自社でぜんぶソフトウェアを書くとこういう狂ったしきたりから決別できる。決別するのかは知らないが、常識的に考えるとすると思う。そうなると、出荷された電話機も OS の上の方と同じように出荷後もコードが進化していく、かもしれない。さすがに kernel のバージョンを上げたりはしないだろうけれど。

というわけで、ソフトウェアのチーム的にも SoC 獲得は big deal で、worth a デスマーチだと解釈されている。が、こういう苦労とその解放は HAL から下の話で、アプリのように OS 提供の API の上で暮らしている身には関係ない。なので、自分の実感としての感慨はない。近隣の人たちへ労いの気持ちはある。

アプリの速度担当としてみると、細かいトラブルはあったものの CPU/GPU は速くなっているし HAL のレイヤもそんなかんじで人々が張り切っており性能についても初期から専属で見る人々がいたので過去のような問題はなく、拍子抜けだった。自分の担当範囲外では色々大変なこともあったようだけれど、自分に火の粉は来なかった。

思い返すと、なんとなく Blink が WebKit を fork したときにちょっと似てるかもしれない。自分で全部コントロール出来るぞヤッホイみたいな excitement がある。


そういう組織・製品としての盛り上がりに自分を同期できるとよかったが、個人的にはそういうのとは関係ない様々にミクロな理由で、限りなく意欲の低い年だった。電話機の仕事を終わりにしたい気分が強い。それはなかなか叶わない願いなので、気分を盛り上げていく方が良いのはわかっているんだけど、なかなかね。

Paul Debevec

|

Netflix Hires Paul Debevec: USC Researcher to Lead AI, Graphics R&D - Variety

あら、いなくなっちゃったのか・・・。グラフィクスまわりのスーパースターがどんどんいなくなるねえ。

近年はヒット作がないのでやになっちゃったのかな?

出勤

|

物理的なアイテムの引き渡しが必要になったため、一年半ぶりくらいに出社。

  • Procrastinate していた自転車購入を決行。片道 20-25 分くらいの模様。
  • せっかくなので東京仲間を呼びつけて雑談ランチ。メシ食いながら雑談できるのいいよな。
  • メシがあるぞ!と食べすぎる。おやつがあるぞ!と食べすぎる。炭酸水があるぞ!と飲みすぎる。
  • Workstation の電源がつけっぱなしだった。何百ドルの電気代を浪費したのだろうか・・・。
  • Laptop をでかい画面につなごうとしたが USB-HDMI ケーブルがない。次回は家で余ってるのを持っていくべし。
  • 同僚は 3 人くらい来ていた。人と話すために来ているというよりは逆で、家での割り込みを避けるために来ていたり、ミーティングが多い人は会議室で VC をするために来ていたりする。確かにラップトップの画面よりはソファとテレビで VC する方がラク。つまり remote 人材になるには書斎だけでなく VC 部屋・・・までいかなくても VC 用のテレビとソファみたいのはあったほうが潤うだろうね・・・田舎で空間が許すなら。
  • オフィスは広くて、天井も高くて、あちこち座るところがあって良いねえ。まあ出勤している人が少ない今だけかもしれないけれど。
  • 会社きてたとき、そういえばそんなに働いてなかったなと思い出す。ラップトップ持ってウロウロしたり、おやつ食べたりコーヒー飲んだりしてばっかりで。トイレにいくだけでも 5 分くらいかかるし。家で働くのが生産的とは思わないが、会社も別に・・・というかんじ。環境よりは自分の問題。

などなど。

久しぶりの出勤は、割と楽しかった。週に一回くらいなら割と喜んで出勤する気がする。二回も別にいい。でも三回はちょっとな・・・。来年1月にむけて少しは出社というものに体を慣らしたほうが良い気がするので、来週から週に一回は出社してみる予定。

あと通勤片道 25 分、往復 50 分の時間が消える。この時間は家事子守に充てられているわけだが、それを奥様に押し付けることになり、厳しい。加えて今は一日子が家にいる日があり、その日に出勤されるのは負担らしい。そんなこと言われてもな・・・というかんじだけれど、当分その日の出勤は止めておく。個人的にはその日が一番割り込み多いので脱出したいんだけど。

WFH 終了に伴う家事負担の変化、に伴う家庭内/夫婦間での摩擦を想像するとかなり憂鬱な気分になる。が、考えてもストレスばかりあって無駄なので今は思考に蓋しておくべし。

Getting A Phone

|

私物の Pixel 2 XL には Android 12 が来ないのでどうしようかなあと思っていたら新しい電話機を dogfood するなら一台あげるよ、というのでもらうことに(貸与ね)。Pro じゃない方。まだ出てない電話機なので感想は差し控えますが Pixel 2 XL よりはだいぶ速いね。当たり前ですね。

ではこのブログはなんなのかというとインストール忘備録です。なお Dogfood = 開発中 OS が降ってくるので、それとは別に lifelife アプリを入れて会社アカウントは紐付けないデバイスも持ち歩く、というかこの新しい電話機は発売されるまでは持ち歩かない。(しかも設定の途中で間違えて Fi の data sim を無効化してしまったのでどのみち外では使えなくなってしまった・・・。) そっちもやはり会社貸与の Pixel 4a. ほんとはこれも dogfood しないといけないんだけど、会社アカウントに紐付いてない安定版 OS の電話機がないと精神衛生に差し支えるのですみませんが私用させていただきます。今のチーム辞めるときは返さないといけないわけだが、まあそういう先の話はその時に考えるべし。

でインストール記録。いちおう dogfood 用途なのでストイックにはせずぼちぼち色々入れてあげる。

  • デフォルトのものども (Gmail, Calendar, Chrome, Google, Camera, Photos, Fi, Home, GPay, Drive, YT, etc.)
    • Play Movies はガチで使わないので無効化. ちなみに無効化すると update が降ってこなくなるのでディスク容量を節約できるよ。
  • Docs, YT Music, Keep, Podcast は抱き合わせで降ってきたので一応残してあげる。というか Docs と YT Music は普通に使ってる。Keep もたまに使う.
  • その他の G
    • Play Books
    • Google Find My Device
    • Google Voice
    • Google Fit
    • Fitbit - きみたち合体しないの? 別にいいけど。
  • ツール、細かいアプリ
    • OTP App - だいたい YubiKey に移行したが一個だけのこっている :-(
    • Password Manager
    • WeightFit
    • Medito
  • チャット
    • Discord
    • Messenger Lite
  • インターネット閲覧
    • Pocket Casts
    • Instapaper ... は Android 12 に対応してないないらしく出てこない。正気か。
  • Web のガワ
    • Todoist
    • Dropbox Paper
    • GitHub - 別に出来よくないので Web でいい気もするけど。
  • メディア
    • Audible
    • NY Times
    • NYT Cooking なんてのあるのか。ついでに入れてみる。
    • Disney+
    • O'Reilly
  • 商業系
    • Hello Fresh
    • Jack-In-The-Box
    • Wells Fargo

なんかもうちょっと活用してあげたい気もすれど、アプリを入れないよう行動を訓練してしまったので必要性を感じないのだった。

Chat With Ducks

|

DuckDB の中の人から「おめえなかなかいいコード書くな。ちょっと話しようぜ」という誘いがあったので Zoom. 見る目があるじゃんか (うそです)。T-shrits を送ってくれるというのでありがたく頂くことにする。

なんか助けになることある?というので、Checks は常時 green にしてちょうだい、古くていらないバグは閉じてちょうだい、などとお願いする。しかし我ながら大企業病なお願いであるなと思ったので、 ちょっと breaucratic かもしれないね、などと言い訳する。

割と良い人々であった。オープンソース、中の人の気が良いというのは、パッチを送る側としてはけっこう重要な要素だよね。コードが良くてもジャークな人を相手に議論とかしたくないから。

Duckdb へのコード書きは自分の日々の潤いになっているので、ぼちぼちやっていきたいものです。今はぼちぼちとかいうレベルじゃなくて自分の余暇をぜんぶ突っ込んでるけど、それでも高々一日二時間とかなわけで、切ないもんだわ。

HTTPFS を引き取ってほしそうな雰囲気だったが、どうかねえ。そういう重要機能をうかつに own してしまうと仕事っぽさが増してしまう気がする。まあ、いずれにせよ特定のなにかにコミットする段階ではないね。パッチ修行優先。

Impossibility Of Remote (Contd)

|

前の続き。

社内求人で「リモート可」という検索ができるようになったので眺めているが・・・よくわからん。そして数が少ない。リモートに限ると、ただでさえ少ない(自分にできる)職の選択肢が更に狭まってしまう。

あと冷静になって考えるに、リモートで新しいチームに入るってすごい難しそうじゃない?チームの側も remote で onboarding する体制ができてないといけないし、自分にしてもがんばって顔を売らないといけない。東京の頃はそういう "visibility" 対策を色々考えないといけない雰囲気があった。せっかく引っ越してそういうくだらいことをしなくてよくなったのに、やりたくないだよ。

たぶん現状の勤務先の remote というのは、チームでの tenure の長い人が同じチームにいる前提でやるものなのだろうな。ある種の「上がり」ステータスで、キャリアを前に進めていきたい人がやるものではない。別に自分はキャリアを「前に」進めたいわけではないが、なんか違うことをしたいわけで、結局は同じ問題がある。

むしろキャリアを「前に」進めたい人は、同じチームではなくてもそれなりに縁のある近接チームに移りがちで(たとえば OS の中の人が OS の他の部門にいくなど) 、そういう距離の近い異動だと onboarding も少しはラクだろう。でも全然違う組織にいくのは大変。

その点で OS, 検索, ブラウザのような巨大製品は壁の内側で動き回れる範囲が広くて少し羨ましい。カメラはチームの大きさが不十分。そのうえ仕事もニッチで専門的なもの(画質の改善とか CV とか)が多く、自分のスキルセットでできることがあまりない。

チームを移るなら、来年早々に子がワクチンを打ち、オフィスの再開が確定したありでやるのが良いのだろうね。それまでは heads down. 別にほんとにオフィスがあくまでまたなくてもいいと思うけど、最初数ヶ月ずっとリモートとかだとキツそう。

Hierarchy

|

ちょっと前に manager にならないまま出世した同僚が・・・TLM になってしまった!なんでやねん!いやいいんだけどさ、やりたいのほんとに・・・?ふとその人のマネージャ、つまり自分のマネージャのマネージャをみると、もはやほとんど IC がぶらさがっておらず「マネージャのマネージャ」になっている。しかしそのマネージャたち、だいたい部下が 3-4 人とかしかいない。この余分な階層いらなくね?

最近感じている仕事のイヤさ、息苦しさは、直接的には今の TLM がイヤなわけだが、TLM というのはどうしても micromanage がちになると思うんだよね。部下が少ないと尚更。なので 3-4 人が下についた TLM ばかりのチームは micromanage 地獄となる可能性が高い。

その TLM がある意味真面目に仕事をして laser-focused なビジョンとかを決めてしまうのもイヤで、すごい狭い範囲の仕事しかできなくなってしまう。なんかもうちょっと広い範囲からやることを探せないと解空間狭すぎ。息苦しさの一つはここにある。もともともアプリとかってのはそれだけでずいぶんスコープが狭いんだから、その中くらい自由に動かせてちょ・・・。

自分が会社に入って最初の五年くらいは、東京でも MV でもマネージャは 20 人くらい reports がぶらさがっていた。前のチームでもマネージャの下は 10+ 人はいたはず。これだと、たとえば細かい問題への対処とかは遅れがちだったり、キャリアの相談にのってくれないとかいう問題は起きうるが、かわりに micromanage にはなり得なかった。個人的には、トレードオフとしては全然この方が良い。

マネージャのマネージャ仕事さぼりすぎじゃね?とか文句もいいたくなるが、必ずしもそうとは言えない。バグをたらい回したりつついたり、それ以外にもやたら他のチームとのミーティングとかをしていて、渉外が多いように見える。これなんか受託開発の管理職が事実上マネージメントしてなくて渉外やってる昔々の記憶にあるマネージャの姿に近いのでは。

などと思いつつふと旧チームメイトなど面識のある社員たちの組織をランダムに冷やかすと・・・ 10 人以上 direct report のいるマネージャって随分少ないね。前からそうだったのか、最近こうなったのか客観的な証拠はないが、傾向としてはツリーの幅が狭くなっている気がする。自分のマネージャのマネージャだって二年くらい前はもうちょっと下にぶら下げていたわけだし。ツリーの深さが増えるのは会社の規模拡大のせいだと思っていたが、それだけでもなかくツリーの形が変わっていた。なんなのだろうね。下っ端的にはいいことなし。TLM もそんなにいいことないとおもうんだけどね。M 大変じゃん。TL でよくね?


はーどうしたものか。まあ他のチームにいくのが正解なのだろうが、いちおうそれ以外の選択肢も列挙してみる。

偉くなる。偉くなるほどツリーの上の方にぶら下げられがちなので。しかし TLM にならないまま偉くなる難しさが顕になってしまった今、ますます出世は期待できない。出世はどのみち諦めたのでこの選択肢はないが、偉くなって得られるものの一つに TLM を避ける魔除けの力があることを理解した。

マネージャのマネージャにゴネてみる。これは可能かもしれないが、貸しができてしまうし、現在のマネージャとの関係も微妙になってしまうなあ。引き続き一緒に仕事をする必要があるわけで、あまり摩擦を生みたくない。そこまでして続けたい仕事ではないからね。それらしい口実を捏造すればいいのかもしれないあ。

我慢しておく。これは・・・特にいいことないな。ただタイミングを選ぶ上である程度の我慢は必要。

はー他にうつるにしても、今までとは違う考え方をしないとなあ。

まず今議論したように、人数少ない TLM の下につくような仕事は避け TL じゃない report の多そうな M の下につけるチームを探す方が良い、これは案外難しい。なぜなら hiring は新しくマネージャになった人の下につける誰かを探しているケースが多く、そういうマネージャは report が少ないからである。求人情報から不完全に推測するしかない。

あとはオフィスの場所ね。遠くに引っ越す予定のチームは避けたい。ただこれと↑だとオフィスの場所は妥協が必要かもしれないねえ。

リモートフレンドリさ。なるべく隣接チームが地理的に散らばってるところを狙う。優先度としては nice to have である。

現在の仕事との近接度。カメラ部門の他のチーム。となると HAL だろうけれど、あの人たちはガチで締切がきつそうなのでやだな・・・。同様に OS 部門もイヤ。OS はバグのスループットも高いから尚更イヤ度高し。モバイルをやるなら何らかのめんどくさくなさそうなアプリがいいなあ。ただモバイルだと OS 部門が一番職が多いので、あまり贅沢は言えないかもしれない。モバイル以外。新 OS? Dart はやだな・・・。出戻りでブラウザ?は今更やりたくない。景気でいうとクラウドなんだろうけど、できる仕事なさそー。電子書籍?は頼りにしていたマネージャが亡くなってしまったので不安。求人があるのか知らんし。

まあ、なんらかのアプリ仕事で、なるべく規模の小さいやつを中心に探すのが妥当なのだろうね。もうモバイルやりたくないけど、脱出がゴールなので贅沢は言うまい。


タイミング。別に harassment とかの強いストレスがあるわけでないので、急ぐ必要はない。電話機の締切が過ぎたら仕事のイヤさレベルの低い時期になるし。今のチームにはそれなりに恩があることだから、overdue になっている地味な自動化とかの仕事をきちんと終わらせつつ行き先について考えるのが良いのだろうね。

とはいえ良さそうな求人は応募しないとすぐ消えてしまう問題もある。いまから求人を眺めはじめ、しかし応募はしないというのはそれはそれでストレスそうなので、異動先探し自体も電話機のあとだな。今は heads down の時期なり。

人は会社ではなく上司を見限るというのはよく言ったものである。


Stressors

|

仕事のストレスの出どころについて考える。

と、やはり最大のストレスはバグだよなあ。自分が書いたのとはしばしば無関係な、しかもぜんぜん再現しないバグを、アサインされる。この hot potato をなんとかしないといけない。あるいは、やはり再現しない、そして再現しても直せるわけではない「遅い」苦情バグを、アサインされる。

「遅い」バグについては分析プロセスを自動化するスクリプトを書くことである程度は心的負担を減らせる見込みがある(これは去年くらいからやっておくべきだったが、late is better than never.)が、前者についてはどうしょうもない。自分なんてもうバグの相手ばかりであんましコード書いてないのに、なんかたらい回されてくる。そして問題は、しばしば platform なり HAL なり下の方のレイヤーのせいだったりする。そういう時は担当者を探してきてアサインしたり、場合によってはしつこく nudge したりで直してもらわないといけない。前はこういうのも自分で直そうとしていたが、本業がまったく進まなくなるので諦めた。この他人にたらい回す仕事がまず嫌。

しかもこういうバグは大半は再現できないのでログをひとしきり眺めた後「再現できませんでした。似たような報告が他にないか目を配っておくね」とかいって閉じることも多い。この「ログを眺めてごめんと言う」プロセスもまた、心が消耗する。バグの notification がメールで来るたびに、胃のあたりがチクリとする。心が休まらない。

このイヤさは時間とともに軽減されるかと思ったが、慣れによる減少をチームでの seniority に伴うバグ流量の増加が打ち負かしていて、楽になってない。むしろ仕事で裏方的な本体コード以外の割合が増えるにつれ、俺のバグじゃねーストレスが募るばかり。

ふと見ると三年前にほぼ同じこと書いてるな。三年前との違い:

  • 自分にとっての「シニアなチームメイト」というのはもはや存在しない。自分が担当者を見つけてたらい回さないといけない。
  • ロギングが改善され、広い時間軸をカバーするようになった。

まあなんていうか、進歩してないね。たらい回しスキルは上がったかな。クソスキルすぎてうんざり。これを改善しない限り自分のしごとの QoL は低いままで、しかし改善する気はしないので、なんとかしたいなら他にいくのが妥当なのだろうなあ・・・。

Supernatural First Day

|

AQ が悪くてもできる運動という口実で Oculus Quest 2 を購入。Supernatural に sign up する。

Oculus Quest 2 は、さすがによく出来ている。メガネが邪魔なので外してやってみたが、さすがにないと厳しい。光学的に補正してくれればいいのにと思わないでもない。あとスマホアプリとの pairing が若干かったるい。アプリいらないじゃん。あんた中身 Android でしょ・・・。

Supernatural の sign up flow などは会費がすげえ高い割に全然よく出来ておらず、アカウントも課金も独自で、なぜかアプリ内で pairing も求められ、かったるい。Oculus は in-app purchase の縛りとかないのだろうか・・・。

想定していたより広い場所が必要で、リビングルームの子の遊び場がギリギリ(というかちょっと足りない)くらいだった。アパート一人暮らしで Oculus とか可能なのだろうか。NYT Columnist の Kevin Roose は裏庭でやってると書いているが、Wifi はいんねえよ。というか、それは色々厳しいだろう・・・(厳しいががんばってると書いている)。あと音漏れすると奥様に怒られたのでイヤホンは必須。

プレイ中の awkwardness は相当のもので、家族が寝ている早朝にしかできない。こんなものに有り金全部つっこんでいる FB 大丈夫なのか。ぜんぜん people を closer にできる感じしないというか、視界遮って他人を隔離してませんかこれ・・・。

運動としての Supernatural は、activity level をあげようとすると難しいステージをプレイせねばならず、してみると、難しい。熟達が必要。熟達の必要なく汗のかける筋トレとかジョギングとか素晴らしいね・・・。トレーナーがずーっとしゃべっていて、うっとおしい・・・かと思いきや普通に励まされて良い。この in-app trainer がコンテンツの価値の 1/3 くらいだと思うので、I18N できないね。国外で売らないのわかるわ。なお風光明媚なパノラマビデオが 1/3, 有名楽曲が 1/3 くらいとおもわれる。有名楽曲イラネーとかおもっていたが、曲にあわせて棒を振り回すので割と重要だった。

$20/m の価値は自分にはなさそうだけど無料体験が一ヶ月あるので、しばらくプレイしてみます。

なお本日は珍しく素晴らしい AQ で、Supernatural やるより外で走るほうが良かった。

Fasting Again

|

気がつくと体重が 6kg 増えている。やばい。去年は WFH なら食事もスナックも有限だし心配ないわとか思っていたが、欲深さに負けた模様。

前回の記録を読み直す。攻めてんな・・・。

子がいると「食事しない」は色々都合が悪いので、前回のように攻めることはできない。ではどうするか。

  • 朝食はパンは食べず、野菜とプロテインのみ。
  • 昼飯はナシ。
  • 夕食は普通にたべる。おかわりはナシ。
  • 週末外出時は普通にたべる。
  • 当然間食はナシ。

この空腹感、ひさしぶりだなー。最初の一ヶ月で 3kg 減らせるとして、だんだん減速するから 3 ヶ月くらいかかるかなねえ。長い。

Scudo Allocator

|

アロケーション直後のメモリアクセスで page fault が起こるため超遅い(俺のせいじゃねー)のをなんとかしたい。

素朴なアイデア: 事前に巨大なメモリを確保し、そいつを pre-fault し、その後リリースすれば、そのメモリが再利用されてめでたしめでたしじゃね?

が、これはダメっぽい。

まず pre-fault だが、madvise にはそういうオプションがない。mmap() には MAP_POPULATE があるのに!MADV_POPULATE を入れたいぞ、というパッチがあるが今年のはじめとかで、どう考えても Android には入っていない。そもそも merge されているのだろうか。(されてはいるらしい。)まあこれは最悪 page を traverse すれば良い(ほんとに?)。

問題はアロケータ。Android は少し前から scudo というアロケータを使っている。

が、こいつのコードをみると・・・

  • でかいメモリブロックはキャッシュされない!
  • キャッシュされるときも releasePagesToOs という関数が madvise(...MADV_DONTNEED) してしまう!世知辛いねえ完全に正しいが・・・。

ところでメモリアロケータってなんとなく連続領域を確保してそいつからメモリを切り売りする、足りなくなったら brk() で伸ばす、みたいなメンタルモデルだったけど、全然違うね。普通に mmap() でインクリメンタルにページ/ブロックを確保していく。使い終わったら unmap() で返す。まあこれが正しいよなあ。

自分の冒頭の素朴なアイデアは完全に 20 世紀のメモリアロケータに依存していたと反省。


冒頭の問題を解決するにはアロケータ差し替えとかが必要な気がするが、それは現実的にはぜんぜん無理なのでなんとか scudo に抜け穴を作って欲しいが、上流が llvm じゃあそれも難しそうだなあ・・・。なんかパラメタいじって乗り切るとかする必要があるのかもしれない・・・。

朝型化に復帰

|

また早寝早起きをするようにしている。二年前はやっていたのだが、よく覚えてないけど WFH 移行とかのタイミングで中断したのだろうか。あるいはやってる作業がつまらなくなって途絶えたのかもしれない。上の日記にも PyTorch のチュートリアルが面白くないとか書いてあるし。

今は 20-21 時に寝て 4 時に起きており、これだとまったく睡眠不足はない。が、WFH 移行は朝にジョギングしているので、6 時過ぎくらいには切り上げないといけず、そうすると 2 時間しかない。もう一時間前倒ししても良い気はする。そんで必要に応じて昼寝する。WFH, 昼寝のしやすさはオフィスより圧倒的に上だからね。

明日から一週間くらい 3 時に起きてみようかなあ。

縦書日記

|

仕事のやる気がない、というかストレスが高いので、なんか現実逃避的な余暇プロジェクトが必要だなと思い、以前から気になっていた duckdb のコードを読むことにした。せっかくなのでコード読み日記をつける。場所は、ブログというほどでもないなということで karino2 の真似で githbub issues を使ってみている。columnar database なので縦書日記。ブログへの export とかはしない。

どういう milestone にするかは悩ましいが、とりあえず 30 日やってみるとかだろうか。あと現実逃避というか pure fun なのであまり生産性とかは気にせず雑にやりたい。


職業プログラマ的には ML とかやった方がいいんだろうけど、自分にとって ML はやってない宿題的なイヤさが高まりすぎて考えただけで憂鬱になってしまう。ストレスから離れるための場で別のストレスを受けてはたまらないので、有用性は追求しない方向。

Juggling

|

仕事、なんか細かいタスクでしかも他人に確認したり調整したりブロックされたりブロックされたりするものが色々あって、しんどい。というか完全に気が散りまくって生産性どん底。こういうのちゃんとできないのだよ・・・。

これまでは Deep Work 的な集中力ばかり気にしていたが、こういう細かいタスクを juggle するスキルというのは存在するはずで、なんか軽くレビューしたい気がする。しかしそういうのあまりに興味がなさすぎたのでまったくリテラシーがない。マルチタスク力みたいな。マルチタスクとかダメですよ、終了、という立場だったわけで・・・。

でもチームのエラ目の人達はこういうの自分よりよっぽど大量に抱えており、かつそれをこなしていて、なんというか、あまり自分の立場に文句をいう気になれない。こうして愚痴るくらいがせいぜい。しかし偉くなると雑用(というと怒られそうだけど)が増えるばかりというのはマジ夢がないぜ。

自分のチームの TPM とか超絶マルチタスク雑用マシーンという感じで、完全に人間離れした仕事をしている。しかし正直あまりハッピーという感じはない。季節性もあるのだろうが。なんというか責任感だけが彼を支えている感じがして、しかも必ずしも抱え込むタイプではなく自動化とか文書化とか超絶ちゃんとしており、本来ならもうちょっとスケールされてしかるべきなのだが、なんかその手の仕事ができすぎて頼りにされちゃうんだろうな。

そういう TPM を burn out させないために、そして自分も burn out しないために、ある程度の雑用力はつけたい気がしている。しかしそういうのは一体どうすれば身につくのか、根本的な部分で興味がないせいもありまったくわからない。Productivity Porn の世界ではこういうんはアンチパターンとされているわけじゃん?しかし現実にはそういう仕事は個人の力では撲滅できないわけじゃん。あの人たちどうしてんの?なんとなく「過労している」が答えな気がしているが、怖くて確認できない。

Links, July 30

|

Neeva

|

自分が Google の良心と目していた Sridhar 氏、二年前に会社をやめてプライベート検索エンジンのスタートアップをはじめていたのは知っていたが、昨日 podcast でインタビューにこたえていた。その Neeva という検索エンジンが既にサービスを開始していたと知る。

せっかくなので sign up して使ってみる。$5 / month だが最初の 3 months は無料で、入門セットアップをやると更に 3 months ぶん延長、合計 6 months 無料になる。

他の代替検索サービス同様、ウェブ検索は Bing を使っているらしい。ただ自分でも多少はインデクスをもっているのか、ランキングと表示だけいじっているのか、ニュースとかショッピングとかの検索はそれなりに専用の UI がある。あと Google にはない細々とした設定がある(一方で Google にある機能も色々無い気はする)。

プライベートサーチならではの機能として、Google, Dropbox, Notion などにリンクして Gmail なりノートなりのテキストも検索できるようになる。

モバイルアプリはなくて、ウェブのみ。ただ求人をみたらモバイルも募集してたので、やる気はあるらしい。


せっかくサインアップしたのでデフォルトのサーチにして使っているが、今のところ出来が良いというわけではないね。

個人的に検索は広告やプライバシー以前にスパムが問題だと感じていて、そこに何か答えがあるわけではない。たとえば「電子タバコ」の検索結果とかやばいじゃん。これが "e-cigarette" だと随分マシになるので、労働集約的な解決しかないのではないかという気がしている。

プライベート検索として Gmail が対象になるの、便利といえば便利な一方で脱 Google したい人のサービスで Google アカウントのデータを検索するというのはなんとも皮肉。今後色々なものに対応していくのだろうけれど・・・。ただ世の中の多くの「プライベート」なデータって API ないよね。特にメッセージングの類。Twitter のようなソーシャルメディアも API には制限があるし。

人々はプライベートで ads free というところにどれだけ価値を見出すのだろうね。たとえば Apple / iPhone はプライバシー重視とされているが、人々べつにプライバシーのために iPhone 買ってるわけじゃないよね。出来が良いから買っている。プライバシーは cherry on top of cake というかんじで、大半の人にとってキラー機能ではない。Apple が strategy credit を生かした付加価値としてプライバシーをやるのは正しいが、Neeva どうなのだろうか・・・。Podcast の中でホストが "Apple に買収されるしかないんじゃ?" と突っ込んでいたけど、そういうかんじだよな。

たとえば世の中には VPN のサービスが色々あり、人々は luxury としてそこそこ金を払っている。だからプライバシーに金を払う人はいる。一方で VPN は利便性は損ねない。

プライバシーを気にする人が、DDG のような匿名志向の検索ではなく色々データを預ける必要のある Neeva を選ぶのか、というのも気になる。Ads を介して個人情報を売られるのを気にする勢と、データを預けたらそれが breach される可能性を気にする勢がいるはずで、Neeva は後者の問題を解決していない。

と書いてみると、自分は人類のなかでもかなり pro-Google なバイアスがある身分なので、Neeva の価値をちゃんと判断できる気はしないなあ。まあ無料期間のあいだしばらくは使ってみます。

新聞

|

左傾の強さを示すゴタゴタに嫌気が差し 2 月におためしで NYT 購読を切ってみたが、また再開することにした。半年しか続かず。


不購読期間中、他のニュースサイトなどを見てみた。

まず paywall のない AP News. 大きなニュースのヘッドラインを眺めるにはいいが、圧倒的なつまらなさがある。文脈の解説とか全然ないし、ガンと取材した厚い記事、社会面的な記事もない(あるが、面白くない)。自分は別に最新ニュースとか興味ないということがわかった。左傾のウザさはなし。

普通だったら高すぎてまず購読しないがなぜか会社が sub してくれている FT. 割と良いが、方向性としては日経新聞なので社会の動向的な記事は少なめ。あとイギリスの会社なのでアメリカと微妙に距離がある。社会面みたいな記事を読む時はどっちの国の話をしているのか気にしないといけない。やや左寄りではあるが NYT のような暑苦しさはなく、ウザさは低め。Paywall が高すぎて free tier ゼロなので、誰にもシェアできないのは若干盛り上がらない。あと仕事ラップトップでしか読めないのは不便。

The Guardian. Paywall がないのはいいが・・・暑苦しい。こんなら NYT でいいやという感じ。最初はぼちぼち見ていたが、すぐ見なくなった。

CNN. テレビ的すぎて辛いのですぐ脱落。

Google News. ひさしぶりに unblock してみたが、やはりパーソナライズの結果としてしょうもないガジェット情報ばかり集まってくるのですぐブロックした。わたくしのしょうもなさを学ばないでいただきたい。ニュースも、結局 paywall がないサイトはいまいちなのが多い。自分はテック以外の興味深いテキストが読みたいのであって必ずしも最新ニュースが読みたいわけではないのだなと再確認した。

興味深いテキストという意味で、たとえば The AtlanticThe New Yorker あたりの雑誌を購読しようかとも思ったが、改めて冷やかすと話が長い割に情報量が少なく、そういえば雑誌ってこういう感じだったな・・・と我に返る。本題を薄く引き伸ばす "eloquent writing" は non-native reader からすると単なる負担。


で NYT. 自分のアメリカ感は NYT によって構築されている部分が多いので、読まずにいるとなんとなくアメリカがよくわからなくなり、落ち着かなかった。FOMO と言われればそれまでだけど、外国人としての所在なさを緩和するため自分に必要な所作なのだと思う。ニュースをガン無視して暮らすとか、その土地で生まれ育って社会に根付いている人にだけ許される贅沢・・・はいいすぎだけども。

あと book review とか parenting とか cooking とか割と見てるな。そういえば。安定した活字源としての期待ってあるよね。こんなに知的に依存しちゃっていいのか不安はあるけど、英語話者としての自分の知性はそんなもんということでしょう・・・。


閑話休題。

色々なニュースサイトをつまみ食いした結果、複数の新聞を購読する人の気持ちがわかった。あれは必ずしも全紙くまなく目を通したいのではなく、各紙の良い記事だけを読みたいのだね。どの新聞にも程度の差はあれよく書けた記事というのが存在する。渾身のスクープかもしれないし、思わぬ切り口の社会面の記事かもしれないし、特別なゲストの op-ed かもしれない。ただ、そういうのは数が多くない。だから複数紙購読しておき、それぞれで話題になっているやつを読む。あるいはソーシャルメディアとかで流れてきた記事を paywall に邪魔されず読む。そういう贅沢 (?) が複数紙購読というものなのだろう。自分ももうちょっとヒマとカネがあったら WP と WSJ あたりも sub したいけど、さすがに高すぎ。それに良い記事だけに限っても読むヒマなさそう。

電子タバコ

|

日本語のウェブサイトを見ていたら電子タバコの広告が出ていた。

ちょっと前に JUUL がすごい勢いで駆逐されたアメリカの事例を思い出し、日本ではどうなってるのかと軽く調べると・・・日本の電子タバコはニコチン入ってないのね。どこが嬉しいんだそれは・・・。JUUL で問題視された電子タバコの被害はニコチン自体でなくその他の成分の毒性だった気がするが、ニコチンないと依存物質がないのにその他の害だけを被ってしまう気がする。CDC のガイドをみるとニコチン以外の害の記述はいまいち曖昧。

軽く検索すると日本でも JUUL を買えるっぽいサイトがあり、それは個人輸入代行業者らしい。いいのかそれは。まあタバコを所持していいのに JUUL がダメと主張するのは難しい気はする。

ニコチンの入ってない電子タバコ、どうして吸いたいのかまったく理解できないけれどこういうのが JUUL 同様「かっこいいもの」になってしまうと面倒くさそうだなー。ニコチンが入ってないおかげで無放地帯らしく JUUL が廃止を余儀なくされた甘いフレーバーもバリバリ売ってるし。

しかし自分が目下気にすべきなのは子が 10 年後とかに JUUL とかのより危険度の高いアメリカ電子タバコに手をださないことなので、日本の電子タバコは厚生省あたりにがんばって睨んでおいていただきたく思います。

などと調べ物をしていたら少し前に JUUL の本が出ていたと知る。Audible してみようかな。

RubberDuckEng

|

Eric Seidel と Adam Barth が YouTube で Fuchsia の解説をしていると向井さんが教えてくれた。

Eric と Adam はもともと Chrome の WebKit チームを率いていた二人で、ある時から Flutter や Fuchsia に移っていった。自分もこの二人がなんか新しいことをやるというのでヒョコヒョコついていったはいいが、まさかの Dart Runtime と OS 再発明だったので逃げ出したのが 5-6 年前。自分がしょぼしょぼ Android のコードを書いている間に彼らは OS を出荷したのだった。

・・・という回想はいいとして、このビデオは RubberDuckEng という YouTube Channel がホストしている。RubberDuckEng は Eric Seidel と Adam Barth がペアプロで live coding するという番組で、いまみたらもう 50 回以上やっている。そして各話の再生回数は 100 回前後、というかもっと少ない。Karino2 のプログラム雑談と変わらん。無職ならともかく会社員がそんな再生回数で YouTube とかやっている場合なのか・・・

と疑問を抱きかけるが、見ると続いている理由がわかる: 楽しいからに違いない。

楽しそうなのだよね。Eric と Adam のこの噛み合っているようないないような感じ、よく覚えている。自分が転勤してきた最初の席はこの二人の机のそばで、この人たちはいつもペアプロしていた。HTML Parser を off thread にしたり、Polymer のスクロールを速くしたり。自分の中では Jeff + Sanjay に通じる部分がある。すごいプログラマが成果を出すとき、そこにはしばしば別のすごいプログラマがいるのである。

二人ともえらくなって守備範囲も微妙に違うっぽいから、たぶん二人とももうそんなにコードは書いてない・・・というか Adam Barth は書いているだろうけれど、すくなくとも昔のようにペアプロはしてない。Jeff + Sanjay はそれでも月曜の朝にペアプロをしていた。Eric と Adam はそれを YouTube でやることにしたんだな・・・と勝手に解釈している。

書いているのは仕事のコードではなく、小さなトイプログラムがほとんど。Live coding も (リンクした Fuchsia 紹介ビデオは別にすると)特に前準備もしておらず、毎回一時間くらいモタモタやってる。仕事ってかんじじゃない。目立ちたいとかでもない。ただ週に一回、ペアプロすることにした。そして様子を YouTube で流すことにした。それだけ。それがいい。その友情がいい。


こういうの、なんかできないかなあと考える。

Misreading Chat も Message Passing も、特に後者は友達づきあいの vehicle という面があるけれど、production に重きをおきすぎているせいで継続性や頻度が犠牲になっている。一方で Rebuild.fm 派生 podcast みたいなピュア雑談は自分がやるとエゴによって俗悪化するのが目に見えている。やっぱりなんか作業が伴うのが健全で良いよなあ。Live coding は個人的には気が向かないが、もうちょっとコード的なものが中心にあるのが良い、気がする。たとえば・・・なんだろうね。

コードレビュー Podcast. 相手の書いたコードをターン制でレビューする。ただコードレビューだとあまり楽しさがないので、何らかのひねりは必要な気はする。たとえば相手のコードを勝手に添削するとか、あるいは全然知らない言語でコードを書いてみたり。RubberDuckEng でも (Dart な Flutter の founder である Eric が) Rust を書いてみたりしている

Weekly Standup Podcast. 先週の進捗を報告する Stand-up meeting を番組にする。なんとなく良い良いと思っている。参加者が同じ共同プロジェクトをやっていたりすると楽しいだろうけれど、趣味プログラムだとなかなか難しい気がするね。一方で互いにまったく関係のないプロジェクトの進捗を話し合っても、会話が成り立つのかよくわからない。

Today I Learned Podcast. なんか調べたことについて相手に説明する。これは (pragmatic programmer 的な意味での意味での) rubber duck に近い。論文縛りを外した Misreading Chat といえなくもない。


こう考えるにつけ、Podcast にしろ Blog にしろ説教やら時事ネタへの感想やら書くよりは何らの action や motion が伴う方が健全で好きなのだろうね。自分は。Message Passing はその点がやや残念。そういう残念さを通じた venting もたまには良いものだけれど、それだけだと不健康に感じてしまう。

残業

|

ふとしばらく課外活動時間(子の就寝後 2-3 時間くらい)で仕事したらどうなるかな、と一ヶ月ほど試してみた。Boox 向けに書いていた課外活動が失速してしまったり、日中の仕事が雑事に追われて捗らなかったりしたため。つまり残業だな。

結論からいうと、全然ダメだった。

最初の数日は、捗らなかった仕事が進み初めてこりゃいいじゃんとか思ったが、すぐに「雑事」が夜の時間も侵食してしまった。雑事、すなわち性能バグの分析や修正。これらは夜の残業枠ではやらず、もうちょっと生産的な作業、つまり自動化の強化に使いたいと思っていたが、いざ眼の前にバグが積み上がってみるとそれを無視して他の仕事をやる気にはなれなかった。バグ修正の重要性はわかっているだけに、その優先度を無視するのは難しい。

そして時間がない!というと語弊があるけれども、他のことがガチで何もできなくなる。仕事、やることが自明な上に無限にタスクがあるため、いくらでも時間をつっこめてしまう。無限にタスクがあること自体は必ずしも悪いことではないはずだが、眼の前にあるタスク、つまりバグの分析・修正を生産的と感じるのは難しかった。この不毛な時間を減らすべく各種自動化を強化したいという動機で残業実験をはじめたわけだし。生産的ではないが重要とかわけわかんないけど、でもそういうのあるでしょ。

失われるのが課外活動プロジェクトの時間だけならまだマシで、実際にはやるべき家の仕事が後回しになってしまう。家庭崩壊リスクが高まり、良くない。

精神衛生が急速に悪化した。仕事というのはストレスがある。締切のストレスがあるし、それだけでなく性能バグ分析という作業の不毛さも課外活動時間では特に精神を削られる。他人にバグをたらい回すとかさ、やりたくないわけ。勤務時間中にこういうストレスがあるのはさすがに慣れたが、本来それを回復するための課外活動時間で更に心を削られてしまうと厳しい。残業をするまでは自分がここまでストレスに晒されているとは気づいていなかった。

これはいま時期的にチーム全体の仕事の忙しさが高まっているせいでもある(じっさいミーティングすると TPM が死にそうに不機嫌な顔をしている。)あとは仕事以外の家の細事にもいま若干のストレスファクターがあり、それも負担になっている。皮肉なことだが、仕事(や家)が忙しいときほどストレス対策には気をつけねばならず、すなわち残業するのは危険。

なおストレスと言っても、いわゆる「仕事をデタッチできないストレス」つまり仕事以外の時間でも仕事のことを考えてしまうは問題は、多少はあるがそれほどでもなかった。どちらかというと 1. 何も新しい情報に触れられないストレス 2. この時間がない状態で新しい危機が(仕事でも家でも)発生したら積んでしまうという恐怖 3. やりたいことが全然できないフラストレーション 4. 心の余力がないせいでしょうもないインターネットに時間を使ってしまう罪悪感 ... とかそういうかんじ。

そんなかんじでストレスが高まりすぎ、一ヶ月の後半は残業したくなさから子を寝かせた後にそのまま寝てしまう日が増え、結局そんなに働けなかった。ただし寝てるので課外活動もなし。寝て起きたくないとか鬱病みたいでやばくね?まあ朝は普通に起きるんだけど。


ただ自主的な残業を通じた発見もあった。

まず、WFH での残業はだいぶ違うね。家にいるので、会社で残業するより家族へのインパクトがない。家のことをする時間がなくなるとはいえ、すくなくとも夕方の家のルーティン(子の風呂、炊事など)は犠牲にならない。子が寝た後に画面のスイッチを入れればすぐ仕事ができるのは便利。去年もやむにやまれぬ事情から残業した時期があったから知ってたはずだけど、あのときは色々グロッキーすぎて気づいていなかった。

逆に言うと、辛くないな残業ならアリかもしれないとも思った。そういえば去年の年末に仕事のハカソンでスクリプト言語を作ってた時はちょっと残業したけど特に問題なかった。ああいう楽しい要素のある残業ならしてやらんでもない気がする。ただ今はそういうのができる時期でもないし、そういうプロジェクトを考える心の余裕もない。なので残業とかしないでやりすごした方がよい。

一歩さがると、残業してやってもよいと思えるくらい意義のある仕事を考えることには、もっと頭を使ってよいのではないか。「意義」というと社会的価値みたいな話になりがちだけどかならずしもそうではなく、例えば自分にとって学びのある仕事ならやってもよいでしょう。Kotlin 使ってなんかファンシーなものを書くとか、ふだん触れないデータ周りでなんかできるとか。いまはやってるのが性能バグの相手だから苦痛なわけで。

ただ新しいテクノロジを触れるだけだと別に仕事の外でもできるから、そこには仕事ならではのチャレンジがあるとか、認知されやすい成果に繋がるとか、そういう「仕事としての価値」が必要。

今のチームは忙しすぎで自明なやるべきことが無限にあり、あまり深く考えなくても目先の仕事をやっていれば最低限の成果はでる。なのでやることを考えるのをさぼりがち。一方でそういう仕事ばっかりしてると燃え尽きてしまう気がする。なので残業するかどうかはともかく、自分から積極的にやりたいと思える仕事を考えるのにはもうちょっと時間を使って良い気がする。もっというと、残業をするならまず時間を使うべきはそういう「やるべきことを考えること」なのかもしれない。今月はあまりに心が摩耗しててムリだけど、しばらくしたらまた考えてみたい。


ところでさ。新卒で働いてた会社とか「見込み残業」というナゾ制度があり、毎月 60 時間分の残業代が自動的についていた。そして、そんな制度があるくらいなので当然のように 60 時間は残業していた。たぶん 100 時間くらいはコンスタントに残業してたとおもう。

でもさ、60 時間とかすごくね?どうなってんの? 今月の自分、たぶん 2-3 hours x 10-15 days とかでたぶん 30 時間くらい残業したとおもうけど、それでこんなに疲弊してるわけ。60 時間とか到底不可能。まして 100 時間とは・・・。

当時のことを遠くから振り返ってみると・・・。まず、会社にはいたがいうほど働いてなかったね。同僚とだべったりインターネットしたりしていた。まあインターネットは今でもしてるけど、よりアグレッシブだった気がする。今思うとやばいレベルで働いていなかった。限りなく好意的に解釈すると、会社というのは金を稼ぐ以上にソーシャルな空間だった。今はそもそもだべる相手とかいない。自宅勤務がそれに輪をかけている。

あと独身なので残業しまくったあとも時間があった・・・いや、さすがに無い気がするが・・・。たぶん睡眠を削ってなんかやって、会社で居眠りとかしてたな。独身とかいう以前に若さとブラック企業勤務への適応の結果だった気がする。

仕事内容がもうちょっと TL 的にデザインしてコード書くみたいな内容で、自分が熱心だった面もある。仕事のことを、仕事以外の時間もずーっと考えていた・・・時期ばかりではないが、そういう面はけっこうあった。それと比べると今の自分の仕事への熱意のなさよ。


こう考えてみると、残業するしないはさておき今の自分の仕事へのやる気の無さは、会社員を続けていく上で問題な気がする。そりゃ出世もできんわ。

一方でやる気はでないがやるべき仕事が眼の前には山ほどあり、こいつらを無視して「楽しさ」を追求しても成果にはならない感触がある。本来はこういうのはチームとして挑むべき話なのだろうけれど、PM とは音楽性があわない・・・という最近の悩みに帰り着くのだった。そういえば PM との音楽性を乗り切るする手段として残業してみようと思った面もあったのだよな。やれやれ・・・。

まあこの先数ヶ月はやる気ないなりに働きつつ、電話機が出た後の余裕のある時期にやるべきことを課外時間で少しずつ考えるのがよいのでしょう。

まあぱっとしないながら残業への理解が深まったので、それなりに意味のある一ヶ月でした。はい。

Links, 07/03/2021

|

日記

|

一日一回、時間を決めて日記を書いてみている。一ヶ月続いた。夜、子が寝た後に書く。開きっぱなしのでかい Docs に日付を書き足していく。インターネットに公開はしない。

前は notion に時間を問わずダラダラと箇条書きしていたが、それだと impulsive な呪詛ばかりになりがちなのでやめた。Tweet 的なダメさがある。

久しぶりにいわゆる「日記」を書こうとすると何を書いていいかわからなかったので、適当な日記の本を探して読んだ。そうそう、こういう淡々とした感じだよな・・・。

あまり書くことがない。平日は仕事の話が主で、週末は家族でどこ行った、みたいな。考え事とか愚痴とか、あんまりない。いや、あるにはあるが、別に他人に説明するわけではないので一行くらいで終わる。でも、こんなもんでいいんじゃないかな。概ね気は済んでいる。

いよいよブログを書かなくなるが、それは時間や気力の無さが問題なのであって、それでも日記なら書けるので、むしろ精神衛生を助けているとも言える。


そいえば一時期 WordPress で日記をつけていたことがあるけれど、ひとつの Docs に書いていく方が軽くて良いね。WP 重すぎ。Day One を買収したところをみると、日記としての WP は諦めたのだろうな。残念。

会話の無さ

|

向井さんが転職してしまったので仕事中に雑談する相手が減ってしまった。自分は向井さんともう一人 Y 氏との三人、東京から転勤してきた仲間で社内チャットを持っていて、WFH 前はランチとかもよく食べていた。それが割と息抜きになっていたのだが、二人だといまいち話すことがない。そしてオフィスが開くというのに WFH が気に入った Y 氏は会社に来そうにない。会社いってどうすんだ。まあ同僚とランチ食べればいいんだけど、日本語でクダ巻きたいときもあるじゃん。オンラインにせよオフラインにせよ。英語で管を巻くにしても、ちゃんとした人たちが相手だと毒づいたりしにくいのだよね。ニュアンスも制御できないから下手すると Grumpy Non-PC Jerk 発言になってしまうし。

とはいえ同僚は同僚。物理的に出勤し隣席の仲間たちと雑談するくらいがいいのかもしれないという気もする。

オフラインは品行方正にすればいいとして、オンラインではもうちょっと管巻場所が欲しい。チームのチャットは上に書いたような理由でいまいちだし、そのうえ人数が多すぎる。Twitter とかをやればいいかもと思わなくもないが、精神衛生によくないので躊躇してしまう。あと日本に住んでる人とチャットすると意識の重心が日本に近づいてしまって良くない。一方 Twitter にいるベイエリア, US の人はあれはあれでなんともいえない厳しさがあって混じれない。

Facebook はそのへん意外とマシで、最近は週に一回くらい当たり障りのないことを書いてみている。Japanese Parenting Neighborhood みたいの、個人的な趣味という意味では特に接点がない人たちだけれど、そこは生活、親バカねたでも書いておけば良いということにしている。そういうのはあまり blog に書く気にならない。読んでる人の関心とズレすぎるので。FB as a parenting SNS.

個人的な趣味という意味では最近ぼちぼちと HN にコメントを書いており、いま数えたら過去 3-4 ヶ月で 100 件くらいコメントしていた。なお HN のアカウントありユーザ数はぜんぶで 40 万くらい、うち 100 件以上の投稿があるのはおよそ 40,000 件である。つまり 10%-tile くらいはコメントしている(だからなんだ。BQ 調べ。) - HN では自分のことを識別している人は誰もおらず、ただの mob として気楽に雑なことを書けるのが良い。それなりにスレが伸びることもあるし。人としてクソリプは書かないようにしている。といいつつ downvote されたこともあるのでたぶんクソリプしてるんだろうな。

FB も HN もあまり友達と話しているかんじじゃないね。良くも悪くも。

そういえば Message Passing の backstage GitHub repo もたまに会話があり、それは気に入っている。ただ雑談ブログとはいえそれなりに生産の場で、無駄話をする空間ではない。

ただ、こういう限られた目的の場所をいくつも持ち、それぞれのコンテキストに応じて話をすることで、総体としての雑談が達成される・・・というのが健全なオンラインの会話のあり方のようにも思える。雑談のためだけに集うって、Twitter になっちゃうじゃん。そうではなく、まず目的をもったコミュニティがあり、そこに人が集って雑談が生まれる。友達をつくるってそういうことなんじゃないの。Message Passing から新しい人間関係は生まれていないが、方向性としては後一歩な気がしないでもない。そういえばひげぽんは Kaggle をやって交友関係を広げている。ああいうの健全だよな。

誰かと一緒にできる趣味が必要かねえ。

Possibility and Impossibility of Remote

|

会社のリモート方針が明確になってきた。おもったよりだいぶ柔軟で、たとえばリモートの選択肢を公式に用意してきた。リモートだけでなく、オフィス選択の柔軟さも増した。改めてどう身を振るべきかと考える。

給料。Bay Area を離れると下がる。下がる幅は行き先による。自分たちが良いなと思っていた街、すなわち Boston や Seattle は、下げ幅は一番小さい。とはいえ家賃が安くなって節約できる額よりはだいぶ下がる。というか減俸を CoL 低下で補填できるエリアはほとんどない。一方 Seattle とかは州税がないのでトータルの手取りはプラスになるであろう。街の良さと金銭的な都合良さのバランスが良いのは自分の選択肢の中だと Washington 方面 (Kirkland) である。

まあしかし、引っ越しとか全然やる気がおきない。引っ越の瞬間的な面倒くささに加え、新しい土地で街を知って、子の学校を選んで、新しい人間関係を築いて・・・とかさ。大変すぎ。Seattle とか客観的には Bay Area より住み良い可能性が高いが、それはゼロから比較した場合の話。自分たちはもう何年もかけて Bay Area に適応している。新しい街に適応しなおしてその良さを引き出せるまでに何年かかるやらわかりゃしない。

この大変さは子がいることで増幅され、許容範囲を越えている気がする。夫婦で大人だけならちょっと寂しいとか別にいいけど、子が遊び相手がいなくて荒れたり、学校に適応できなかったり、その影響で家の中が荒んだり、みたいのを心配しだすともう胃が痛くて思考停止してしまう。

世の中のリモートシフトを考えるとこれは残念な現状と言わざるを得ない。Bay Area の優位というのは職の多さだったわけだが、世の中の企業がリモートを受け入れるにつれ他の街でも職探しの幅が広がる見通しが出てきた。だから Bay Area にいる必要性は下がった。むしろ CoL が高い分不利。この傾向はおそらく新しい企業ほど顕著であろう。そんな時代に自分は Bay Area で根を下ろしてしまった。


まあ Bay Area なんだかんだで外国人には住み良いのも事実。いっそ Bay Area 近隣でリモートして海のそばなり森のそばに暮らすのはどうか、と考えるが・・・海(太平洋)のそばまでいくと給料が下がってしまうことがわかった。残念。森のそばは・・・どうかね。Los Gatos くらいなら高給圏内な気もするけれど、Los Gatos に住みたいかと言われると、どうかねえ。森だけでなく海も近くなるな。アリなのかもしれない。

でもねー。めんどさくさいわ・・・。また引っ越しとかいうとすごいカネもかかるし行き先探すのも大変だし・・・。ついでにいうと Mountain View だって別にそんなに悪いところではない。会社への近さが無駄っぽく感じるだけで。


引っ越しに感じるこの億劫さがどこから来ているかと考えると、三月に引っ越したばかりで疲弊・散財しているのが一番の理由に思える。自分だけではなく家族として消耗した。あの次点では引っ越さず、会社のポリシーが固まるまで待つべきだったのかもしれない。

一方、ポリシーは固まったが運用がどのくらいうまくいくのかは未知数。結局「リモートで働くのはキャリア的にいまいち」という結論になる可能性も割とある。職住近接を選んだ自分は事実上そっちの可能性に賭けている。

ただ今にして思うと、良い判断をしたとは言えないね。結果がどうなるかはともかく、自分は内心ではリモートに勝ってほしいと思っていたし、今も思っている。けれど会社の適応力を信じられずリモートの負けを見越し、そっちに身を振った。でもさ、自分が良いと信じていない方に肩入れするのって、腰が引けすぎで楽しくない。盛り上がらない。どっちが勝っても嬉しくない。

子の進学という何年もに一度しかないタイミングをのがしてしまうので、もうしばらく引っ越しはないだろう。臆病さの対価。まあ仕方なし。


それはさておき運用・現実はどうなるのだろうね。会社の発表を踏まえた個人的な予想としては:チーム次第。会社はリモートを(注釈付きとはいえ)認めている。会社のトップレベルの文化はオンサイト寄りのままかもしれないけれど、多国籍企業としてオフィス分散には馴染みがある。

一方で個々のチームのオンサイト志向には差がある。

比較的規模が小さく、地理的な局所性が高いチームはオンサイト志向が強い。自分の今いるチームはこれで、それは当初望んでいたことである一方、自分のリモート悲観の根拠となっている。

前いた電子書籍のチームは TL プラス一人が東海岸にいて、コードレビューとか仕事はリモートっぽい感じだった。そしてマネージャとほか数名が SoCal にいた。だから Bay Area は必ずしもメインではなかったし、チームも割とリモートっぽさがあった。その前のブラウザ部門なんてもっと世界中に分散していて、しかもオープンソースなので昔から家で普通に仕事ができた。こういうチームにいると、リモートへの移行はスムーズに行きそうな気がする。

つまり自分は勤務先がオンサイト志向である以上にチームがオンサイト志向で、そのせいで過剰にリモート化を悲観していた、ような気がする。

そして今のチームがオンサイト志向である事実を考えると、自分の職住近接がまずい判断だったとは必ずも言えない。場所を変えてリモートで働きたいなら、そういうチームに行かないとよろしくない。それがどのチームなのかは現段階ではわからない。リモート志向でない点を除けば今のチームはそれほど悪くないので、リモートを求めてチームを変えるのが良い判断とは、必ずしも言えない。

こういうところでバンと未来志向な博打を打つ身軽さがないのはダサい。でも保守的な家族持ちといたしましては心意気ある若者が未来を切り拓いて会社を良い方に引っ張ってくれるまで待たせていただきますわ。若者たちが会社に愛想つかさないと良いなあ。

Links 2020-05-23

|

読んだもののリンクをブログにしておく試み。最初は substack にしていたけれどあまりに使い勝手が悪いので諦めて WP に帰ってきました・・・。なお今回は Instapaper に溜め込んで放流してなかった分を含むため、量が多め。

Mentorship

|

ふと、若者のメンターとかしてみたら世間の役にも立つし面白いのかな・・・と想像してみる。まえ karino2 が暇つぶしでプログラミング言語を教えていた。そこまでの時間的コミットは自分には全然ムリだけど、たまにメールとか VC とかでお悩み相談にのってあげるくらいでいいなら、どうなのだろうね。

とおもいそういうメンターコミュニティみたいのないのかなとインターネットを探すと・・・ MENTA といサイトがあり、人々は課金していた!いや、課金とかいいんで・・・もうちょっと low key なやつないのだろうか・・・。よくわかってないが bootcamp 的なやつ周辺に通じるキナ臭さに逃げ出したくなる。

社内にもなんかあるっぽいが、そっちはそっちですごい structured な上にテック企業に入ってくるような人べつにチームの外にメンターとかいらないでしょ・・・という気分もあり、英語はかったるいし、まったくやる気にならない。

プラットフォームはさておいて誰を何故メンターしたいのか・・・と考えると、たぶん業界の歪みみたいなのを矯正する手助けをちょっとくらいできないかと思っているからだろうね。アメリカだとマイノリティを支援するコミュニティとかあるけど、そういうかんじで。日本だと人種的弱者というのは目立つ形ではいないから、女性とかの社会的弱者を支援するのがよいのだろうねえ。となると、何らかの女性向けソフトウェア開発コミュニティの中の人に相談してメンターさせてもらう、とかが良いのかもしれない。なんとなく中年おっさんが女性メンターするとか世間の目がきびしそうだけど、日本相手なら物理的距離のおかげでいかがわしさから守られ、無駄に睨まれることもないでしょう・・・。女性以外の構造的弱者、どういうのがあるかねえ日本。貧困とかはあるな。

しかし女性にしろ貧困者にしろ、そういうコミュニティとかどこにあるのかまったく不明。知り合いのそういうの詳しそうな人とか東京オフィスで仕事でそういう系のをやってる人とかに相談するのが良いのかねえ。あんまし会社と接点のあるところでやりたくないけど、自分の専門性とかどうしても勤務先に紐付きがちなので、避けがたい気もする。

もう一つは普段話しているのとは違う人と話すと発見があるのではないかという期待。ただランダムに話し相手を得るのは難しいのでメンターシップという形でならいいかもなという。しかしいざ文字で書いてみると傲慢な発想だね。おまえはツイッターでもしてろという自己批判が頭をよぎってしまう。

とか具体的に考えると段々腰が引けてくる・・・。お前は人のことをメンターするヒマとかあるのか的な・・・。メンターとか気のせいではないか・・・・。


なんとなく自分がいちおう形式的にメンターっぽいことをした現勤務先のことを思い出してみる・・・と、別にメンターとかいらなかったよねあのひとたち。一人はもはや自分より三段階くらい偉くなっており、もう一人はさっさと会社をやめてスタートアップで CTO とかやってる。

自分がなにをメンターしたのかほとんど思い出せないしたぶんほとんどメンターしていないが、たぶん当時の仕事である WebKit なり Chromium なりの残念エリアで時間や体力を無駄にしないように「それは単に残念なだけだよ」的な指摘をしていたのだろうな。それすら必要だったのか怪しいが、ただ眼の前のコードやプロジェクトの残念さを「それは単に残念なんですよ」と教えてあげるのは、その場所に前からいた人ができる数少ない意味のあることに思える。「残念だからほっといたほうが良いよ」ではなく「残念だからなんとか出来たら良いね」といいたいものだけど。前者を言われてもイラっとするだけだったりするじゃん。実力者であれば特に。

更にさかのぼり新卒で入った会社ではすごいメンタリング行為をしていた気がするが、ひたすら謎の偉そうな説教をしていたやんわりとした記憶が・・・黒歴史フィルターによってぼかされてよく見えないですね。たぶんすごい残念なことをしていた気がするけど、若さということでひとつ・・・。


本題にもどると、自分はコミュニティでのメンターシップみたいなものをまったく理解していないので、やるにしてもそういう話について書いたものを読むとかが最初のステップなのかもしれない。

Nudge Bot Stack

|

Message Passing Blog の GitHub で進捗がない記事 (issue) をみつけてコメントする bot を作った。こういうのをささっと作れるようになっておきたいもんです。使ったものメモ:

  • Python で書いた。好き嫌いではなく慣れの都合。
  • 型がないと辛いので pytype を入れた。他の type checker と比べて特段出来が良いわけではないが、仕事で同じのを使ってるので。
  • Cloud Run に deploy し, Cloud Scheduler で週に一回つつく構成。
  • Dockerfile のことを考えたくないので Buildpack にした。
  • GCP のページをみたら "CICD できるよ" というので設定した。Cloud Build, 前は GitHub から引っ張る支援とか一ミリもなくてすげえ苦労した記憶があるが、今は勝手にやってくれる模様。ポチポチするだけでコミットから deploy されるようになる。

Scheduler の設定に Terraform を使おうかと一瞬おもったが、めんどいので諦めた。次はやります・・・。


こういうのをさくっとできる静的型言語が欲しいが GCP の buildpack は対応言語が限られすぎだわ・・・・。Kotlin を動かしている人がいるので、これを真似するのがいいのかもしれない。ただこんなこまっちい 200 行くらいのコードに IDE 使いたくないなあ。

Staff Engineer

|

最近の人事考課でチームの二人が Staff というレベルに promote された。自分のチームは TLM (TL+manager) になって下に人がつかないとえらくなれないと思っていたが、この二人はピンのまま出世。できたのか!まあ二人とも良い仕事をしている。一人はサーバサイドからきたひとで、ある時期からアプリのコードを書くのをやめてデータエンジニア仕事をするようになり、SQL を書きまくって野ざらしになっていた user stats の立て直しをほぼ一人でやってのけた。めちゃパイプライン持ってる。もう一人は TL"M" ではないがリサーチ部門のアルゴリズムや新機種のカメラ構成をアプリにインテグレートする仕事の TL. 事実上二人ぐらい引き連れている。

なにはともあれ頑張ればこのチームでも部下なしで出世できるのかと感心した。出世というのはチームの勢いとかも関係あるので、勢いあるうちに出世すべく遊んでないで仕事頑張ったほうがいいのかな・・・などと考えつつ Amazon をぶらぶら(悪癖)していたら Staff Engineer: Leadership beyond the management track という本が目についたので読んでみた。

Stripe とかで働いていたテック企業文化圏の著者。割とよく書けており、自分の知っている Staff のイメージに合致しつつ理解を深める役に立った。まず Staff というのがどういう仕事をしているかを俯瞰する章があり、そのあといかに Staff に出世するかの章があり、最後に著者知り合いの現役 Staff (Staff-plus) たちにインタビューしている。インタビューは数が多すぎてダレたが、ほかはそこそこ興味深く読めた。(根本的にダイヤモンド社的な本である点には目をぶつられたし。)

一方で, そんながんばってまで Staff になりたいのだろうかと改めて考えてしまった。

自分がなぜ Staff になりたいのかと考えると、大きな理由は二つある。一番の理由は金銭的なもの: 出世すれば給料があがる。Sony のミラーレスが買えるし家も買える、かもしれない、みたいな。付随的な理由としては人々から認められたいという見栄。つまり「カネと名声のため」みたいな話なわけで、プログラマとしてどうなんだそれは。オンナがないだけマシかもしれないが...

文中では、もうちょっと高尚(?)な動機としてたとえば重要な意思決定に関与したいとか、影響力の大きな仕事をしたいとか、チームや組織の成長や文化に寄与したいとか、そういうのが挙げられている。そういうの・・・あんまし興味ないね・・・。

興味ないというと言い過ぎだが、肩書を通じて仕事したくないじゃん?重要なコードを書けば自然と影響力が増えてしまうというものじゃん?ちがうの?著者は肩書によって呼ばれるミーティングもあるし、周りからの視線も変わるのだよ、と書いている。そうかもしらんけど、別にミーティング呼ばれなくていいですよ・・・そして視線も変わんなくていいですよ・・・こっちくんな・・・。

いまいる部署、ある時期から各種ミーティングの議事録がチームのリストに流れてくるようになった。そして最近も重要性の高そうな緊急プロジェクトのミーティング議事録が流れてきた。そこにはたしかにチームの Staff-plus たちが召喚され意思決定している。が、緊急度高すぎて近づきたくねー。しかも AI (action item) がひたすら stakeholder に話をして合意を得るだとか実際に実装する担当者を探すだとか、そんなのばっかり。やだよ・・・。この本にも "Present to executives" というセクションがあるけど、そんなの上司や PM に押し付けて逃げる以外にどうしろというんだ。

書籍は冒頭の章で 4 つの Staff archetypes を列挙している: TL, Architect, Solver, Right Hand. そしてそれぞれのありがちな一週間のカレンダー(時間割) みたいのが載っている。ミーティングだらけ。そしてこれは自分の知っている Staff-plus のカレンダーとよく似ている。つまり偉くなるとミーティングが増える。ミーティング以外もレビューとかが増える。コードを書く量は減る。でもコードを書かないと肌感覚がなくなってしまうので、無理やり重要じゃないコードを書いたりする。カレンダーに "coding" とかいってミーティング避けのエントリを入れたりしちゃう。そういう TL よくいえるよねー。大変そうだねー。週に4-5 回のミーティングで既にイヤさが上限に達しているわたくし、これ務まるのか。

閑話休題。

出世の章では "Staff-Projects" の重要性 (の真偽) を議論している。Staff-Projects というのはその人の Staff 力を示すような難しくてインパクトのあるプロジェクトで、そういうのを完遂してレジュメに載せることで出世審議会をパスできる、と信じられているもの。

著者は、Staff Project は very nice to have だが会社によっては必須でなく、チーム間の顔を繋ぎつつ意思決定に関与する glue work みたいな成果を評価される場合もあるとしている。そういうのは・・・あるかもしれないけどそこまでして出世してどうすんだ。部下のついてないマネージャみたいなもんじゃん。

Staff-plus は "leadership role" なのでチームを牽引する必要があり、コードよりは対人関係の能力が重要だという。だからそういう code-less な Staff もありうる。とはいえ個人的にはやりたくない仕事の集合に見える。一方で自分はいまなぜか窓口業務を評価されてしまっているので、下手に仕事をがんばるとそういう code-less 路線に近づいてしまう。やばい。コードを書かなければ!

ところでたまにやたらコードを書いてる Staff-plus とかいるけど、なんつうか、明らかに残業してるね。自分も独身若者だったらコード書きつつ出世の一つもしたいところだが、妻子あると課外活動とかできないのだった。ブログとか書いてますがそれはいいのかというと・・・残業に値する仕事というのはなかなかないということです。クビになりそうか、運命の天職か。後者でないのは残念だが、前者でないことへの感謝を強調したい。


Leadership はさておき、自分は日々の firefighting および procrastination に忙殺され (後者は忙殺じゃないですね) 「よく考えてインパクトのでかい成果を出す」というのに失敗しており、これはよくないなと改めて思った。出世はさておき、きちんとデザインして書いたものをバーンとキメないと、なんというか、面白くない。本来は余裕があるはずの年末年始前後も、結局 procrastination と distraction と poor judgement を積み重ねて何も成果を出せないまま過ごしてしまい、また丸腰で火消しに追われる季節に突入してしまった。本来は冬の間に武器を揃え、打ち寄せる火種を瞬殺できるようにしておかないといけなかった。

一年くらい前はそういう火消しインフラの整備とさらなる高速化とどちらを優先すべきか迷いがあったが、その後の経験や、この本のインパクトに関する議論などを照らし合わせ火消しインフラ整備をやる方が明らかに正しいと納得した。そういうインフラが出来てこのクソのような火消しの日々から開放されるならいいじゃん。出世は無関係に。

火消しインフラはしょぼい気もするが、とにかくプログラマとしてなんらかのまとまった成果をだし、その成果をスケールするために人を巻き込む必要がうまれたら、税金として自分の成果を advocate するのはやぶさかではない(気がする)。そして税金を払った暁には給料に還元していただきたいので、出世を目論んでもいいかもしれない。ただ他人のためにそういうのをやってあげるのは、英語苦手なアジアン中年の仕事じゃねーわ。得意な人に任せたい。

つまり日々の雑事に追われすぎず大局観をもってバーンとクールなコードをキメる。これがプライオリティ。出世に惑わされてはいけない。これは何度も道を外れては立ち戻る同じ結論なわけだが、カネの力は強いのでこうして繰り返し自分に言い聞かせないといけない。


一歩さがって、なぜ自分は重要な意思決定とか影響力とかに興味がないのか考える。

一つは、組織がそこそこまともなおかげで肩書とかなくても行動を通じて影響力を行使できると信じているからかもしれない。自分以外の人手を借りようとすると多少は権力いるかもだが、自分自身の仕事についてはエラくならなくてもそこそこ autonomy がある。むしろいまのチームだと偉くなると duty 発生しまくりで、期待する autonomy があるのか怪しい。すっぱい葡萄ならいいんだけど。

二つ目は、英語できないからだろうね。自然言語を通じて影響力を行使するみたいな自分の不得意分野にわざわざ踏み込んでいく気が起きない。苦痛とフラストレーションしかなさそう。そういうのがパリっとできるならやる気も起きるのかもしれないが。

そういえば東京オフィスを脱出したいと思った動機の一つは、下手に東京に長居していると自分より英語やコミュニケーションが苦手な人(いるのだよこれが・・・)のかわりに窓口業務 TL をやることになりそうな予感があったせいもある。当時の東京にはそういう窓口 TL が多かったのだった。今は知らないけど。

更にさかのぼり、東京の中小零細で働いていた頃はというと、別に特段意識しなくても leadership とか influence とかが発生した。それを taken for granted で生きていた。その傲慢さは反省してしかるべきだがそれは宿題にするとしてなぜ、勝手に発生したのだろうね、権力。日本語のためだけとも思えない。そういえば零細で働く前の中小企業二つでは権力なかったわ・・・と考えると英語のためだけでなく大企業だから権力を志向しづらい面もあるのだろうなあ。大企業、偉くなるの大変。そして下っ端はラク。給料上がらないのは残念だけど、ボンクラのトレードオフとしてはまあまあ妥当。

Caveat として勤務先の Staff は先の本にでてくる Staff-plus ほどエラくはない気がする。バーンのいい仕事を決めた暁に出世できるなら別にそんなに困らないかもしれない。

あーあ、いい仕事をして責任や影響力は据え置きで給料だけ増えないかなー。

Teacher Appreciation Week

|

今週は Teacher Appreciation Week というやつで、一週間かけ teacher に感謝の意を表明することになっているのだった。ようやく終わった。

例年だと room parent という学校指名の TL 的な親が取り仕切るのだが、今年は COVID の混乱のせいで指名がなされておらず、奥様は group gift に contribute いたいが自分で取り仕切るには忙しすぎる・・・とかいうので仕方なく取り仕切りを引き取った。プリスクール同級生の親にメールして、集金やら何やらを募ったりする。

しかし出遅れてしまったのでもう個人的にギフトを買ってしまったという親も多く、集金を締め切った後に「今週忙しくてメール読んでなかったわ間に合う?」という親も数名おり、当然返事のない親もおり、そういうのに色々返事をしたり、group gift の収支などを報告したり、はー。ただでさえ socially awkward な上に cheer する語彙にも乏しく、そのほか fairness などで気を使う判断も多く、メールを一通書くたびに精神力を削られた。親としての図太さを鍛える練習だと思ってやったけど、もう来年はやりたくない。そして一週間とかやめてほしいわ。Teacher Appreciation Day くらいにしてちょ。

集金する側に周ることで、この手の contribution に関する額(のばらつき)を理解できたのはよかった。

なおインターネット調べによると公立学校では一人あたり $50, グループからだと $150 が cap らしいが、一次資料は発見できず。そしていかにも誰も気にしてなさそうである。資本主義よ。

最近聴いた本

|

Working Backwards: Insights, Stories, and Secrets from Inside Amazon

Amazon の初期の偉い人が The Amazon Way を逸話混じりで語る本。The Amazon Way も各種エピソードも面白かった。

Working Backwards という慎重さはソフトウェアだけでなく流通とか手戻りコストの高い部分がビジネスにあるからこそ有効だと思うが、一方ででかい会社はどこもなにかしらそういう部分があるので、会社がでかくなった時にきちんと機能する慎重さを持っているのは強い。ふつう慎重になると麻痺してしまいがち。あと single threaded leader とかも面白かった。片手間で仕事進まないとかあるあるすぎる。スライド禁止の話も、ほんと勤務先の連中に言ってやってくれと思う。ただ下々には six-paper の大げささが必要な場面はそんなにないだろうと思う。重要なビジネス意思決定のための決闘資料だな。Output でなく Input を見るというメトリクスの話はなんともすごい先進的で、はー・・・というかんじであった。そういう proxy で大丈夫と言えるのは、なんかあるよなあ。

こういうプロセスを敷けば Amazon じゃなくても成果が出せる、というわけだが、そこはんなわけねーというかんじ。一方で ex-Amazon の人というのはいっぱいいるはずで、そういう人が牛耳ってる会社だと似たような感じになる気もして、どうなのだろうね。Seattle の方にいけばそういう会社いっぱいあるのあろうか。Bay area だとそれこそ ex-G なり ex-F なりの会社はいっぱいあって、そういう人は程度の差はあれ元勤務先-way を持ち込むものだが。

それにしても Amazon ちゃんとしてんなーと思う。たとえば Google について書かれた本を読むと、こいつら楽しくやってんなと思うことこそあれこいつら儲かりそうだなという感じはない。従業員体験は重視してるが株主利益や顧客利益についてはあまり話がでてこない。そういうのがいいと思っていたこともあったが、すくなくとも現状を見る限りでは Amazon Way の方がだいぶ上手く行っている。

なぜなのだろうね・・・と考えるに、ゼロ年代というのはインターネット黄金時代で、掘れば掘るほどあたりが出た。だから熟考して手を打つより色々やってみる方が良い面があった。でもその黄金時代は 10 年前に終わってしまい、真面目に考えてやらないといけないという(普通の)世界になった。Google Way はゴールドラッシュに乗るのには向いていたが、そのあとは厳しかった。

あるいは DHH のいうように産油国だった、ということなのかもしれない・・・と書いたが、金を石油に置き換えればだいたい同じ話だな。関係ないけど DHH, Hey の宣伝もかねてぼちぼち blog 書いてるじゃん、ということで sub しておく。

Never Split the Difference: Negotiating As If Your Life Depended On It

引越しに際し大家とのメールでだいぶ消耗したので、そういうのに消耗しないようになりたいなと読む。Crucial Conversations みたいな話だが、FBI の身代金交渉人という著者のバックグランドにバイアスされたツイストとポップカルチャー的な雑さが新鮮だった。交渉テクニックの話以前にでてくるエピソードがぜんぶ凶悪犯との身代金交渉なのでめちゃ面白い。

読んだあと、自分が日々面している交渉相手は大家より我が子だなと気づいた。そして子供との会話は理不尽さとか感情的っぷりが身代金交渉に通じるものがある。心を落ち着けて挑みたいものでありますな・・・。

Insight: The Surprising Truth About How Others See Us, How We See Ourselves, and Why the Answers Matter More Than We Think

内省ってあんまし役に立たないよね、というような話。日記をながなが書くとか無意味な自己非難で鬱っぽくなってしまうよねとか。そういえば CBP とかそういう話だったな・・・と思い出す。そんではどうしればいいかというと、信頼できる相手に的を絞った問いを投げかけなさいね、という話をしている。自己啓発ジャーゴンでいうところの Personal Board Of Directors というやつに近い。(このジャーゴンどこ発祥なのだろうな・・・)

Caffeine

カフェインに関する雑談。Audible Original というやつで、Audible にしかない。割とどうでもいい内容だけど二時間くらいなので、長い podcast だと思えば悪くはなかった。

The Tyranny of Merit: What's Become of the Common Good?

実力主義がはびこってしまったせいで、世の中ずいぶん生きづらくなっちゃったよね、というような話。実力主義の高学歴者が回りにいる身としては、そうですね、と思う。アカデミアの哲学者だけあって・・・というか Sandel は名が知られてるだけあって書き手として優秀で、過去の哲学的解釈とかもレビューされており、よくかけてる。説得された。

The Enchanted Hour: The Miraculous Power of Reading Aloud in the Age of Distraction

読み聞かせの意義を説く本。巻末の子供の本リストは参考にして何冊か買った。

Revisiting Caffeine

|

カフェインをやめて半年以上たつ。Why We Sleep を読んでやめて、WFH のストレスで再開し、しかしまた caffeine crash がおきたのでやめ、今日に至る。厳し目のドライブ(山道、長距離)がある日は一杯だけ飲むことにしている。

しばらく厳し目のドライブがなかったあと、こないだ Yosemite に行った折に行き帰りに一杯づつ飲んだところその威力を痛感。もうちょっと仕事の足しになるよう使えないかなーと考え始める。

うかつに再開しても crash するだけだしなすこし調査でもするかとまず Caffeine という薄い audiobook を聞く。これは単なるうんちく本で意思決定の役には立たなかったが、著者がカフェイン断ちをしてみる下りが長々書かれていて微笑ましかった。もうちょっとなんか本ないのかな・・・と探すも、よさそうな本が見当たらない。辞めたい人向けの話はあるのだが、こっちはもうやめてんだよ。

そんななかふと Confessions of a Caffeine Addict というカフェイン中毒者互助団体談話集みたいな本が目に入ったので気まぐれに読んでみた。が・・・やべえー!カフェイン中毒やばい!アル中とか他人事すぎてあまり共感がないが、カフェイン中毒は他人事じゃないエピソードもある。コーヒーがぶがぶ飲みながら働いてたら病院運ばれた、とかプログラマそういう人いそう。そして副作用。腹痛、下痢、胃潰瘍、頻尿、不眠、不安、短気、手の震え、などなど一時期の自分として身に覚えあるわ!おまえだったのかカフェイン!たぶん濡れ衣も混じっているけどいま全部ないもんな。

そのほか Soda (Coke) 依存や Caffeine Pill, energy drink 依存の人もでてきて、これもプログラマにいそう。というか一時期 soda addict 手前だったことがあるような自分・・・。


やっぱりカフェイン復帰とか気の迷いすぎるのでは?と思う一方、さすがにこの談話集は極端すぎるだろうと気を取り直し、本は諦めてインターネットを探す。コーヒー屋などカフェイン業界の息のかかったサイトに SEO されまくっておりいまいちいい情報がないなか、なんとか Mayo Clinic, Science Direct, NIH とかまともっぽいサイトの記事に一通り目を通してざっくりと理解を正す。

とりすぎのダメージなしに向精神作用を仕事に活かせるようカフェインを摂取することは可能なのか?どういうメンタルモデルで考えればよいのか?

  • カフェインは addiction (reward system への介入) はないが dependence (withdrawal symptom) はある。この区別に実用上どのくらい意味があるのかわからないが、ざっくりいえば他の薬物よりハマり度は低いがハマることはある。
  • Withdrawal symptom はカフェイン摂取を三日続けたあたりで発生する。
  • Tolerance があり、日常的に飲んでると段々効かなくなる。つまり効き目を維持しようとすると段々量が増えていく。ただし安全な量の範囲であれば完全に効かなくなることはない。
  • 「安全な量」の目安は 400mg/day 以下で、これはいわゆる "4 cup ぶん" だが、ここでいう 1cup は 150ml くらいなのでふつうのマグ (300ml) だと二杯。まあそんなものだろう。そして個人差はあるという。
  • Tolerance ができるので、心拍への影響などは長期的には無い、らしい。はっきりしないこと: 全ての作用・症状に tolerance があるのか。つまり副作用も体が慣れて小さくなるのか?というと、たぶん tolerance ができるものもあるしできないものもあるのだろう。つまり徐々に摂取量を増やし続けていくのは、バーンと急激に増やすよりは安全だが、完全に安全ではなさそう。
  • Tolerance の獲得にかかる時間は・・・よくわからないが一日から数日とされている模様。
  • 副作用の中でも睡眠へのインパクトが一番懸念されている。なので tolerance があろうがなかろうが午後は飲まない方が良い。
    • カフェインのせいで寝不足になり、その眠さを誤魔化すためにまたカフェインをとる、とか悪循環。
  • Withdrawal symptom は最後のカフェイン摂取から 12-24 時間後くらいに出てくる。つまり・・・ランチの時にカフェインをキメると寝不足じゃなくても翌朝は厳しいのでは?
    • はっきりしないこと: Withdrawal symptoms と Tolerance は関係があるのか、つまりたまに一杯飲むだけの人も withdrawal symptoms があるのか?Anecdotal には withdrawal symptoms と tolerance の強さは相関するように見える。
  • 徐々に量を減らしていけば Withdrawal symptoms は回避しつつ quit できる。


といった前提でいくつかの摂取パターンについて考えていく。

  • 一日コーヒー一杯 (カフェイン 200mg) 摂取
    • Pro: Tolerance はできるので最大の効果が得られるわけではないが、何らかの効果は得られる。
    • Pro: 午後は飲まないことにすると睡眠へのインパクトは、ゼロではないが控えめ(ほんとに?)
    • Con: 最大の効果が得られるわけではない。
    • Con: 翌朝が withdrawal symptoms で厳しい。
    • Con: 同様に withdrawal symptoms を防ぐために毎日飲まないといけない。
    • Con: 午前中のみ、所定量のみという決まりを毎日守り続ける規律が必要。
  • 期間限定で Tolerance を上書きしつつ毎日飲む:
    • Pro: Tolerance を overdose で克服できるため、効能が最大化される。
    • Pro: 期間が済んだら quit できる。
    • Con: 睡眠へのインパクトは、所定量で飲むより多そう。心配。
    • Con: 副作用も避けられるか不安、というかたぶん副作用あるね。
    • Con: Quit するのはそれなりに大変。
    • Con: 「期間」をどう定めるかが不明。なんとなく一ヶ月くらいなら乗り切れる気がするが、あんま根拠なし。
  • 週に一回、コーヒー一杯 (カフェイン 200mg) を摂取。(今やってることに近い)
    • Pro: Tolerance ができにくいので、いつも最大に近い効果が得られる。
    • Pro: 睡眠の問題もほぼなさそう。
    • Con: 効き目を得られるのが週に一回だけ。
  • 週に三回くらい、コーヒー一杯 (カフェイン 200mg) を摂取。
    • Pro: Tolerance は、週一回よりはできそうだが隔日ならたぶん under control にできる。Withdrawal syndrome も同様。
    • Pro: 週に三回効き目が得られる。
    • Con: Tolerance / Withdrawal Symptom 獲得までのマージンが薄い
    • Con: 週三回というリズムは週一回とくらべ実施がトリッキー。

とすると・・・

  • 一日一杯モデルは、規律を守るのが自分にはきびしそう。
  • 期間限定モデルは、基本的にはダメだがたとえばクビになって就職活動するから LeetCode をやる、みたいな時にはいいかもしれない。というかクビに限らず仕事のオフシーズンにそういう短期集中トレーニング系をやるにはいいかもしれないな。魂削りそうだけど。
  • 週に一回モデルは、今やってることをもうちょっと explicit にするかんじ。週末きびしいドライブがなかったら月曜日に一杯キメて良いことにすると、今よりもうちょっと恩恵を受けられる。
  • 週に三回モデルは、これより多くキメられる。しかし週一回よりは意思の強さを要する。危うさに近づいていく漠然とした不安ある。

何事も節度を持って楽しめる人とそうでない人がおり、色々な事例から自分は節度を保てないサイドであることがわかっている。攻めないほうが良い。週一回が無難。もうちょっと踏み込んで週三回。あいだをとると平日一回週末一回で、週末のまなかったら月曜に一回、とかそういうかんじかなあ。あるいは子と添い寝をした翌日のみ、とかだろうか。子と添い寝した翌朝はジョギング実施に失敗しがちで脳内麻薬不足気味だし、これがいいかもしれないなあ。


ところでプログラマというのはコーヒーをコードに変換する機械と自称することがあるくらいカフェインキメキメな職種である。先の中毒者談話集を読んで思ったこととして、ステレオタイプ的プログラマの生態や言動は、実はカフェインの副作用として説明できるものも多いのではないだろか。Night owl で朝おきられないみたいなわかりやすい例だけでなく、いわゆるイキリオタク的なヒステリック会話スタイルみたいのも、妙に集中してコード書いてて話かけても反応ないとかも、カフェインキメ過ぎによる narrow-focus, short-temper で説明できる・・・ときもあるんじゃないの?そういうのは personality として済まさずとりあえず一旦カフェインを止めてみると明らかになることもあるのではなかろうか。余計なお世話だが。

まあキメキメ勢を横目に見つつしばらく自分は週に 2-3 杯で暮らしていこうと思います。なお今日は山道ドライブがあったのでランチのときに一杯キメているが、案の定眠くならない。やっぱ睡眠への影響あるんじゃね?

In HN

|

最近日本語のウェブを見すぎて精神衛生を損ねてよくなかったと反省し、ずるずる見るようになっていた日本語のウェブを見るのをやめた。ただ英語圏は見ているだけだとなんか寂しいというか、あまりに盛り上がらない。ので HN にコメントを書く試みをはじめている。

最初のきっかけは NYT をやめたついでに読むもの探しをしようと Ask HN したのがきっかけ。これがまあまあよかった。

英語のウェブは言語障壁のおかげで感情を害しにくいのが良い。勤務先の残念事例、および逆に不当なディスられ、はそれなりに心が傷まないではないが、そういうのはスルーしてもっとどうでもいい話にどうでもいいコメントをつけていきたい。カルマ貯めるぞ、みたいな。

しかしブラウザネタしかコメントすることがない現実はだいぶイマイチだなあ。もうちょっと乗っかれるテックな土俵を増やしていきたいもんである。Android ネタとかまったくないね HN.


追記

その後もチマチマとコメント活動を続けた結果カルマが 100 を超えた!というあたりで我に返る。なにやってんだ自分。いつの間にかカルマを稼ぐ gamification にハマっていた。なにか言いたいときにだけ書くようにします。たまに雑なこと書きすぎて downvote されたりもするけれどあたしはげんきです。

ただまあ、会話に参加する楽しさってあるよね。HN は follower とかいないし自分も存在感ゼロだし、Twitter よりこっちの方がいいな。時間の無駄であることに代わりはないが。

追記 (11 月)

その後もたまになんか書いたりしていたらカルマが 700 を越えました。hahaha.

雑談用メディアについて考える

|

雑談できる小さい group chat か何かがほしいなと思っていたので、それについてもうちょっと braindump してみる。

結論としては: Facebook が一番近いが Facebook だと自分はダメだな。これは FB 嫌いとかそういう話ではなく、単に欲しているものと違う。(自分は Twitter とくらべると FB はそんなに嫌いでないし。)

自分が欲しいのは group chat 的な private communication channel だが、チャットは同期的すぎてよくないと思っている。すぐ反応しなきゃいけないのストレスだし、暗に自分がそれを期待してしまうのも嫌。

あとテキストも一行ではなくちょっと長いのを書きたいときがある。このテキストとか。

Group chats の対称性もなんとなくスケールしない気がしている。つまり、自分が気兼ねなく話せる相手と、その相手(たとえば向井さんとしよう)が気兼ねなく話せる相手の集合は完全一致ではない。つまり自分が誰かを group chat に invite するというのは、相手にとっては observe しなければいけない channel が一個増えるだけである。FB Messenger の group chat とか、どの channel/room に誰がいるのか割と混乱しがちで、投稿するとき投稿先を間違えないか若干ストレス。自分の FB group chat なんて3つしかないのに annoying なのだから、これまともに社会性ある人だったらもっと沢山あるわけでしょ。そこに一つ増やしてとか言えないわ。ある種の人々はそういうのストレスじゃないんだろうけど、自分が嫌なことを他人にやりたくない。

Facebook はその点おおむね private で、チャットよりは非同期で、コミュニケーションは非対称で、チャットよりは長文もかける。

ただ現実問題として自分の Facebook にいる人々は特別気兼ねなく雑談したい相手ではない。もうちょっと他人の方が多い。つまり public ではないが private というほどでもない。あと自分の closed friends はそんなに FB にアクティブでない感じがする。投稿してないだけで見てはいるのかもだが。ついでにテキストもそんなに得意じゃないよね。ブログとかに out source する前提だから。

そして Facebook に滞在する時間を長くするのは不安。他のどうでもいいものに lure されてしまいそうだから。


Twitter で protected な sub-account をつくり、知り合いに follow を求めるのはどうか。Twitter やってない勢というのもいるが、そういう人はどのみち雑談とかで時間を無駄にしたくないでしょう。その態度は尊重したい。長めのテキストはスレッドを使えばいいというのが時代の選択ぽいのでそれを受け入れる。そして知り合いを follow はするが mute しておくことで traffic は少なくできる。

これは、自分が雑談したい相手にとってはたぶんベストな選択だが、自分の Twitter 近づきたくない instinct と相性がよくない。もっというと、良識ある人々がソーシャルメディアから離れつつある今日にノコノコ入っていくとか、なんかすごい間違ったことをしている感じしない?むしろその態度こそが groupthink であり、ツールとして Twitter を使えるならその方がいいのではないか。

たぶんそういうアカウントをつくると自分の箇条書きブログ "Fragments" は用済みになる。いま Notion で書いている Fragments はどのみち公開しないつもりだったので別に Twitter に乗り換えても自分の発言アーカイブとして劣化はしない。むしろ時系列データに不向きな Notion よりマシな可能性すらある。

Twitter の UI は根本的に気を散らしに来るので、それも問題。これは 適当な Chrome extension を使えば解決するかな?もちろんモバイルはナシ。

あ。でも Twitter は自分以外が protected じゃないから雑談できないじゃん。はい解散・・・。

強い心を持って public Twitter で雑談するのはどうか。俺はソーシャルメディアの圧力に負けない無敵の人になる!そして誰もフォローしない!みたいな。でもこれは仮に自分が無敵の人になれても(この仮定からして Big If だが)自分の話したい相手がそうなれるわけではないからねえ。若者ならいざしらず、おっさんの気兼ねない会話には privacy 必須。


メールはどうか・・・というと、今のお手紙活動が概ねそれである。ただ一週間に一度だとちょっと雑談としては物足りない気がしませんかね。しかし粒度を上げるとうざいのも事実。

何らかの新しいアプリなりプラットフォームを使うのは避けたい。みんなそんなに暇じゃない。既に人々が使っているであろうメディアに便乗させていただき、かつなんらかの工夫によってそうしたメディアに自分が感じている問題を mitigate したい。


ふつうにブログはどうか。kzys のブログとかはまあまあ雑談できているように見える(対話あがるのかはわからないが、内容としては。)パブリックなブログは、自分が無敵の人になれば返信のメディアは自由なので割となんとかなる面がある。

ただ Twitter とかで会話されても参加したくない。もうちょっとプライベートな場所で会話したい。そういう意味で newsletter はいいのかもしれない。そして substack がいつの間にか private mode をサポートしていた。Newsletter は頻度の高いメールのウザさを完全には解決できないが、直接送られてくるメールに比べると押し付けがましさは低い(無視すするのに抵抗がない。)それだとみんなで雑談する感じにはならないが、お手紙活動の経験によるとそれは許容して良い面もあるし、privacy という意味での良さもある。つまり自分のお手紙送付相手同士が等しく親密なわけではないから、内容によっては 1:1 の方が会話がやりやすい。

箇条書きブログ Fragments およびこのブログとの棲み分けはどうするのか。わからない。まあ自分のブログとかガチで誰も読んでいないのでほっとくというのが一つの選択肢である。あと substack はいちおうコンテンツの export はできるようなので、公開するものについては何らかの形でタグをつけておきがんばってインポートすることもできなくはない。現状だって WP からインポートしているわけだし。箇条書きの方は・・・どうだろうね。書き溜めておきコピペするとかだろうか。あと substack editor とかちょう使いにくいのだよねー・・・。

Substack はさておき、なんらかの private blog から newsletter-ish なメールを送るというのは一つの切り口かもしれない。


Blog / newsletter の問題点は、会話が非対称だということ。つまり、他の人の雑談も聞きたいのだけどなーという。しかしこれは概ね phantom problem である。つまり誰もそういう問題を抱えていない。みんな普通に Twitter なり Blog なりしている。

ただ完全に phantom というわけでもなく、private group chat ほしいねという人がまわりに一人いた。パブリックになんか書く敷居が高い知り合いだけを集めてすごく小さい group chat を作るのは、いいのかもしれない。なぜならそういう人は自分の周りに沢山はいないので、場が増えすぎる問題はない気がするから。


結論としては:

  • 今のお手紙活動をもうちょっと普通の newsletter-ish にできないか調べる/考える。
    • これはほんとうに雑談につながるのだろうか・・・。
  • Private-focused な知り合い数名と Discord あたりで chat できないか、誰が興味ありそうか考える。

それにしてもこうやって自分の communication channel を tuning するのに時間や神経を使うのはどうなのだろうね。もうちょっと雑に生きたほうが良いのではという気もする・・・。

Project, Feb. 2021

|

今月はコードを書くプロジェクトだったが、実質的には何も成果はないまま終わった。要素技術をつついたりはできて、それはまあ進捗といえば進捗。あと当初考えていたデザインは大げさすぎることにきづいたので、ずっと単純化して作るよう考え直した。が、そこでおしまい。

この進捗のなさは無能さと呼んで良い。そして自分が無能なエリアでなんかして無能さを実感するのは余暇プロジェクトの機能のうちなので、がっかりを受け入れておく。

このプロジェクト自体は継続したい一方、税金とか引っ越しとかで余暇に割ける時間も精神的余裕もなかった。税金はおわったが引っ越しは来月前半まで食い込むし、仕事もデスマフラグが立ってしまったし、来月もコードを書くのは難しそう。三月は一時停止で、かわりに本なりなんらかのまとまった資料なりを読むことにしたい。手を動かして進まないのはいいが、動かしたい手を動かせないのはストレス。

Scala 3 Disappointment

|

むかいさんとかずよしが F# を触っているのを見て、天の邪鬼的にもうすぐリリースされるという Scala 3 をやってみたくなりを冷やかす。なおこの本よりは本家サイトのドキュメントの方が簡潔でよかった。

言語は、シンタックスも型システムもけっこう大胆にいじって Python 2 -> 3 どころではない大改造ぶり。資料を読む限りでは良い変更に思える。これならあと 10 年戦えるかも、という気にさせられる。

が、オンラインで Scala 3 の話題を探すと全く盛り上がっていない。Dotty とかいってプロジェクトが始まった頃はもうちょっと人々が話題にしていた気がするが、今となってはちょこちょこ新しい言語機能を紹介してる人がいるくらい。

そもそも Scala 自体の話題を見なくなった気がする。HN とかテック全体の話題を扱うフィルタを通すとまったく目につかない。たぶん Scala の Reddit なりなんなりを見ればそれなりに進展はあるのだろうが・・・。10 年くらい前に Twitter が Scala 使うぞ、Spark も Scala だ!とかいってた頃と比べるとまったく盛り上がっていない。


いま余暇でやろうとしているプロジェクトに HTTP のエントリポイントが欲しいので、勢い余って Scala で書いてみようかな・・・とフレームワークを探すと、全然新しいのがない。未だに Play とか言ってるのはどうなの・・・。全然 Microservices / Cloud / Serverless みたいな路線にキャッチアップしてない。いや Akka あるけどさ、Akka で Microservices をキャッチアップとみなすなら Erlang でもいいわけで、そうじゃないでしょ・・・。Docker とかにサクっと詰めて Cloud Run でポイと動かせてもらえないと困る。同路線に出遅れがちと見なされている Java の方が Spring Boot なり Micronaut なりがあって、ずっとマシ。

とか思っていたら久々に HN に Scala の話題: From First Principles: Why Scala? | Hacker News しかしコメント欄のネガティブさたるや・・・。しかも割とわかるわーという話が多い。そしてここで議論されている Scala のダメさを Scala 3 がなんとかしてくれる気はまったくしない。更にこの記事自体も Swift, Kotlin, Rust, TS とかの最近の "Hybrid Language" に対して Scala がどういいのかをまったく説得できていない。もう C# とか JS とか Python とか Ruby を引き合いに出してなんか語る時代じゃねーだろ。ついでに Scala 3 の話も全然ない。

記事を書いている Haoyi という人は Scala 界隈では一定程度有名人らしく、色々と気の利いたライブラリとかを作っている。それらは良さそうだが、ちょっと冷やかした範囲では言語を立て直せるような勢いは感じない。R における Hadley Wickham や Ruby の DHH ほどの影響力はなさそうというか・・・。

これはしょうじき高すぎるバーだと思うが, Scala はそういう言語より上のレイヤの革命のがないと返り咲きはなさそうだな、と思ってしまった。Scala 3, 良い言語っぽいのに残念。


そういう実用性はさておくなら、FP Playground としての Scala にはそれなりの存在感を感じる。引き続き色々と FP なライブラリが書かれている。こういうのを通じて教養としての Modern FP を勉強する言語としての Scala というのはアリかな、と思う。Haskell やるみたいなかんじで。メイン言語に据える気にはまったくなれないにしろ、Haskell よりはまだ馴染みがあるし、実用もしやすそうだからね。

といいつつそうしたモダン FP ライブラリたちが Scala 3 に移行してくれるには時間がかかりそう。Scala でモダン FP 入門は、するとしても来年以降かなあ。言語仕様とかライブラリの進捗を暇なときに冷やかしつつ気長に待ちたい。

Project, Jan. 2021

|

1月のプロジェクトは SWE At Google を読むだった。まあ、読んだ。この手の本を一冊読むくらいなら達成はそんな難しくないね。どのくらい足しになるかはわからんけど。

2月のプロジェクトはコードを書く系をやる予定。

Book: Software Engineering At Google

|

Software Engineering at Google: Lessons Learned from Programming Over Time: Winters, Titus, Manshreck, Tom, Wright, Hyrum: 9781492082798: Amazon.com: Books

今月のプロジェクト。いちおう読み通した。が、しょうじきだいぶ読み飛ばした。面白くなかったので・・・。

まず最初にこの面白く無さについて分析したのち読みどころを振り返りたい。

  • 面白く無さの一旦が自分にとっての新規性の無さなのは間違いない。仕事でやらされていることの話なわけで。これは自分の問題だから、まあいい。
  • とはいえ内容の新規性のなさはある。たとえば "Chapter 2. How to Work Well on Teams” とかさ、あなたそれ本一冊書いてるじゃん既に。読んだよ。
  • リーダーシップの話とかも、ここで書かずに自分で本書いてくれ、という気分になる。内容が悪いとは言わないけど、ミスマッチ。
  • 自動テストの話に四章割いているが、それも世の中にたくさん本出てますから。十年以上前に。もういいよ。
  • 基本的に Part 2. Culture と Part 3. Process はこの「もうその話は聴きたくない」食傷気味の話がおおくて厳しい。Part 4. の Tools は割と良い。
  • 書き手によってばらつきがあるが、文章が読みにくい。冗長だったり、いいわけがおおかったり、大仰だったり。読ませる文章(!=正しい文章)を書く力はソフトウェア・エンジニア能力のメインではないので仕方ないが、こっちは金を払って業務外の時間で本をよんでるので退屈だと辛い。仕事じゃないんだからさ、面白くないと読みたくないよ。

結局のところ、ソフトウェアエンジニアリングの原則みたいのは会社固有の部分はなく、あるとしても理不尽なスケールや時系列といった大企業税由来のうんざりするものばかりで、面白くない。面白いのはそういうのと戦うための具体的な工夫。だから Part 4 Tools は相対的には面白いのだと思う。説教はいいからお前らのやったことを教えろ!という。

とう点で面白かったのは ...

  • Part 4 Tools. 特に Code Search (Ch 17), Build System (Ch 18), Code Review (Ch 19), Static Analysis (Ch 20), Large-Scale Changes (Ch 22) はよい。
  • 賛否はさておくと Version Control (Ch 16), Dependency Management (Ch 21) はまあ、そういう結論になっちゃったんですよね・・・みたいな感想戦的読みごたえはる。
  • CI の話は特に面白くない.
  • Borg の話もなぜか面白くない。Kubernetes でも勉強したほうが良いわ、みたいな気分になる。

そのほか面白いというか、ふーんという気持ちになったのは

  • What is Software Engineering (Ch 1). 例の "Software Engineering はプログラミングの時間積分である" という話。この定義は Russ Cox も引用しているので、まあ知っといて良いかなと。
  • しかしこの定義の説得力ある、かつ新規性のある application というのはぶっちゃけそんなにない気がする。(保守性大事ですねはいはい、みたいな。)そんななか Deprecation (Ch 15) はまさに時間積分の連続性を実現するプラクティスで、割とよかた。コードサーチして依存箇所を洗い出せとかいわれても困るけど、まあ我々そうやってますよ、そうですか、という腑落ち感はある。
  • Knowledge Sharing (Ch 3). Google の knowledge sharing がどのくらい機能しているのかはさておき、go-link とか社内 SO もどきがあるみたいな話は Tools 枠として面白い。
  • CD の章。やばい。YT は Python の monolith です、こういうプロジェクトのリリースは担当者がどんどん burn out していなくなります、と書いてあるが解決したとは書いていない。サーチのバイナリは週一回のリリースも危うくなったけれど著者ががんばって2日に一回まで持っていきました、と書いてあるがどうがんばったか書いてない。というか手動の QA が挟まってるとか全然 C に D してない。そのへんのダサさはまあ生々しさとして楽しむとしても、リリースの話でプロセスの章にいれておきツールの節にいれる話じゃないべ。なんかフラグツール自慢とかしてくれよせめて・・・。


一歩下がって、プログラミングの時間積分としてのソフトウェア工学というメタファについて考える。

15-20 年前くらいのソフトウェア工学って、こういうのではなかったよなあ、と思う。要件定義みたいのがあって、それと実装の関係をどうトラックするかとか、工数をどう見積もるかみたいな話があって・・・みたいなのだった。この大仰なソフトウェア工学は agile movement の台頭によりだいたい滅んだわけだが、一方で agile も割と宗教なのでいまいち工学的な力は弱く、結局 The Lean Startup のような要件探索のための business skill と、Devops movement のようなそれを支える operational skill に収束していった。そのあとに残されたものがこの「時間積分としてのプログラミング」なのではなかろうか。

要するに、CD/CI でばんばんコードを出していく時代に持続可能なプログラミングとはこういうものですよ、という。その結論の説得力は議論の余地があるとおもうけれども、そういう時代を前提にソフトウェア工学を議論しているのは、まあ意義があるんじゃないかな。ただやはり説得力が乏しいというか、あまりに大企業ウェイだなあと思う。

そして時間積分して角を丸めてしまうとプログラミングは過去 10 年くらいあまり進歩してなくて、新しいことは operational skill すなわち Devops とかそっちの方で起きているのだろうなあと、仕事に opts 成分のない身としてはやや残念な気持ちになる。同じ Google 本でも SRE のやつは広く読まれ、話題になった。

ただ時間積分しなければプログラミングの世界にもエキサイティングな瞬間はあり、それは React / GraphQL なのかもしれないし TypeScript / Rust / Wasm なのかもしれないし async / await なのかもしれないし Kotlin/Swift なのかもしれない。こういう流行りものは時間積分しながら 10 年保守するコードベースの番人には興味のない話かもしれないけれど、日々の刹那を楽しみたいプログラマにとっては興味の中心である。この関心のズレが自分にとっての面白く無さの理由の一面に思える。

なので、この人たちががんばって世界の秩序を保ってくれているのに感謝しつつ、自分は日々の積分じゃないプログラミングを楽しませていただこうと思います。まあコードレビューもするし static analysis の warning もちゃんと直すから許してちょ。


自分も体裁として肩書は Software Engineer なので出世という観点でみるとたぶんこういう "Software Engineering" は必要なのだと思うけれども、なんとなくこの integral bureaucracy を受け入れるのは違う気がするので、もうちょっと違う視点を探求していきたい。なんちゅうか、こういう「伝統的」ソフトウェア工学よりはクラウドとかデータサイエンスとか、あっち方面の発展に目を向ける方が発見がありそうじゃん?

Write Code Every Day At Work

|

去年はストレスと雑用に負け仕事でコードを書かなすぎた反省があり、ここ一ヶ月くらい「午前中は他のすべてをほっぽらかしてコードを書く」という方針を試している。

コードを書かないのは、バグを睨んだり人のコードをレビューしたりメールを書いたりバグを睨んだりしていたから。プラスそういう盛り上がらない仕事によって procrastination が倍増したからな気がする。

コードを書くようにするという方針にして以来、仕事は捗るしプログラマとしての満足度も高い。よい。続けたい。

が、続けようとすると問題もある。つまり、ある種のコードを書くには割と準備が必要である。その準備は API や既存コードベースの調査かもしれないし、でかめのプロジェクトなら計画みたいのもある程度は必要だし、他人のコードをいじるならそれなりに話を通す必要がある。ざっくりいうと「考える」必要がある。コード書くのは考えないのかといわれると困るけど、コードを書きながら試行錯誤をして考えられる問題と、もうちょっと違う次元で考えないといけない問題がある気がする。特にドキュメントや既存コードを読んで理解するというのは本質的に何も生産してない。

今はそういう問題は後回しにしてコードを書けそうな仕事を優先的に片付けている。それは、ここ一ヶ月くらいは機能してきた。ぼんやりめんどくせーな、とおもっていた仕事もいざコードを書いてみれば一瞬だったりで、成果には満足している。ただ昨年から持ち越した小物はさすがにだいたい片付いてきて、大物ばかりが目に付き始めた。どうしたものか。

一つのアプローチは、諦めて朝から準備作業をする路線。これは会社員的には正しい気もするが、「毎日コードを書く」というルールが失われ、もとの状態にもどってしまう気がして気が乗らない。

逆に「コードを書く」というしばりを優先し、低優先度の小物でも半趣味的コードでも書くものをさがしてがんばる、という路線もある。ただこれをやってると大物のために考える時間がとれない気もする。

午前中の「コードを書く」しばりを残しつつ、午後に計画などの準備作業をすることはできるか。やや不安がある。まず日々のルーチン的雑用を無視できるのか。コードレビューとかバグ分析とか、ほっとくのは気が引けるし、待ってる人から直接つつると現実的に無視できないじゃん。あと午後はミーティングから子供まで割り込みの発生頻度が高く、時間の枠として立ち入った考え事をするのに向いていない面もある。

妥協案として「午前中」はあきらめ、コード書きタイムをたとえば「十時半まで」とかにしてみる。あるいは「月水金の午前中はコード」とか?まあ、アリかもしれない。

「小物でも半趣味的コードでも」という部分への不安もある。ちゃんと成果の出るコードを書かないとだめじゃね?仕事すすんでなくね?そして成果を出そうとするならコードの前に頭つかう時間は必要なのではないか。

計画や準備のような「頭を使う」作業を、プログラミングの支援を通じて進められないか。よく「高級言語のプログラミングはデザイン」みたいな話あるじゃん。あるいはプロトタイピング重要みたいな。そういうノリで進められる仕事はないのか。

手元のプロジェクトリストをみると・・・上から順に: なんかのトレースをとって分析する、なんかの proposal を書く、自動テストの機能追加に向けて他人のコードのリファクタリング。うーむ割と本質的に paperwork だな・・・。リストの先にいくともうちょっとコード書けるっぽいやつもある。うーむ。


一歩さがると、ここでいう paperwork とはコード仕事を「作る」作業といえる。

  • トレースを睨めば遅いところが見つかって、それを治す仕事が発生するかもれない。
  • ある proposal を書けば、そのアイデアは PM の後ろ盾や関係各所からのインプットにより大きなプロジェクトすなわちコードを書く機会につながるかもしれない。
  • リファクタリングを構想して話をつける作業は、そのコードの ownership を獲得してその後のコード書きをやりやすくするかもしれない。

理想的には、自分の仕事が「コード書き」と「仕事生成」からできているのが望ましい。これは、Cal Newport 用語でいう Deep Work である。しかし現実は「雑用」と「雑用以外」というカテゴリわけになっており、「雑用以外」すなわち deep work の時間がに少ないのが本質的な問題である。

と考えると、ひとつの方向性はこの「雑用」すなわちバグ睨みなどをへらすためにコードを書き、雑用の負荷を下げることではないか。これは第三の方向性といえる。

雑用負荷の軽減は前からぼんやり考えているんだけれど、こういう生産性改善プログラミングってすごい投機的で失敗するとほんとに何も残らないのが厳しい。本業じゃないから仕事をしたフリにすらならない。そしてしばしば技術的官僚性が手強すぎて倒せなかったりする。EngProd (世間でいう DX) が専門職になってるのは理由があるわけ。あんまり近づきたくない。リスク高すぎ。


うーん。こういう抽象的な議論は目先の問題を片付ける役には立たないね。まずは時間割を妥協し、かつ prep work の中にコードを探すというかんじかなあ。

ついでに Message Passing で聞いてみるかなあ。

On Misreading Chat

|

向井さんが書いていたものの続き。これはどっか別のところ (note とか) に書こうと思っていたが、Note 使おうと思うたびに心理障壁が邪魔をするのでとりあえずここに書いておく。

Podcast をはじめたきっかけは、もともと ATP とかの podcast を聴いていてフォーマットには親近感があったのと、話相手がいれば何か話すことはあるものだと Rebuild に読んでもらって感じたため。Anchor とマイク一本で始めれば編集とかもがんばらなくてよくね?という読みがあった。(この読みはどちらも外れた。)

運用。

パンデミック期の今は Zencastr で録っている。もともとは会議室に集まってスマホにマイクつないで Anchor でとればいいじゃん、そんなら負担も少ないし、と思っていたのだが、二人でマイクをシェアするアイデアはまったく機能せず、聴いてみると Anchor のような無編集も厳しいな・・・ということで、まずは一人一本マイク+ミキサー形式に落ち着いた。トラックを別にせずアナログで mix したのはトラック間の音のズレを懸念したから。この問題 ATP でよく言及されていたが、いざ Zencastr を使ってみるとそんなズレはまったく観測されなかった。

後処理は、基本的には Zencastr デノイザ(有償)を使うだけ。Kzys に来てもらったターンはちょっと空白除去をしたが、まあしなくてもよかったかな。なお Zencastr のデノイザの実体は Auphonic で、会議室で録っていた頃はこのサービスを直に使っていた。たぶん Rui-san に教えてもらったんだった気がする。

空白除去は、やるとマージナルには良くなるのだがめんどくさい。Podcast 開始直後は手動で削っていた。途中から Audacity の空白除去機能で削るようになった。そして最終的にはやらなくなった。後処理はカメラの RAW 現像みたいなかんじで、やればよくなるがヒマながないと無理。Podcast の音質がどうとかいう Twitter コメントをたまに見るけど、音質気にする人はほか聴いてちょ。

開始直後は無編集を厳しいと感じたのにいま編集していないのは、期待値の低下と話す側の慣れによるもたつきの減り、両方の結果だと思う。

フォーマット。

いくつか考えていた。最初はぼんやりと Rebuild みたいな対談を想像していたが、冷静に考えるとゲスト呼ぶとか人徳ない自分には無理だわ・・・と気づいた。

そんじゃ ATP のようにホスト固定でニュースやブログ記事についてコメントするのはどうかとおもったが、Podcast のためにウェブを読むというのも本末転倒だし、いかにもコンテンツ逆輸入出羽守ドヤり展開になりそうなイヤな予感がしてやめた。

今ふりかえると、それに加えて自分のホストとして話力が論外だったなと思う。Rebuild にしろ ATP にしろ一見 banal な対談形式が成り立っているのはホストが社会性や話術など特異な芸人的能力を発揮しているからだというのは、その後生えてきた日本語テック podcast や、ATP 周辺にある似たような雑談 podcast を聴くとわかる。普通の人の雑談は、退屈。

Podcast をはじめたころは今よりもうちょっと意識が高かったので、やるならプログラマとして糧になるようなことをやりたいと思った。自分はプログラマとしては書くよりは読む方が得意だし好きなので、読む活動の足しに出来ないか。ブログ・・・はイージーすぎるのでパスし、最初は本はどうかと思ったが、毎回違う本を紹介するのは厳しいしコンテンツ流用のグレー感もある。コード・・・は、やはり長すぎるのと、口頭で伝えるのは難しそう。というわけで論文を読むことにした。読みたいものは結構あるし、長さも丁度いいし、大概は open access で、著者は読まれたいと思っている。The Morning Paper や Linear Digression のような先駆者もいる。

結果としては悪くない選択だった。論文を読む行為は、腰は重いがやると満足度が高い。Podcast という活動に後押しされて腰が上がるのは良い。思ったより聴く人がいたのは、やっている最中はわからなかったが再開のアナウンスをしたらわかった。

ただ負担が高すぎて家庭の obligation に差し支えてしまった。これはフォーマットの問題というより自分の管理能力の問題だと思う。向井さんに誘われなかったらもう再開はなかったと思うが、せっかく再開したので sustainable なラインを模索しながらやっていきたい。

あと盲点だったのは人々はきほんまったく論文を読まないということ。「理解できるまで頑張って何度も聞いた」みたいなコメントをみるとびっくりする。時々間違ってるから一次資料当たるほうが良いよ・・・そういえば文章とか読まない人って結構いたね特に英語・・・。意図せずコンテンツ逆輸入業者になってしまったのは不覚だが、やむなし。いちおう自分の中の「英語でやっても恥ずかしくない」という逆輸入の閾値は守れている・・・と信じてる。

準備。

まず論文をハイライトとかしながらざっと読む。次に話す構成を考えつつ読み直しつつノートを書く。必要に応じて周辺の論文とかも読む場合もある。追加で読むのは大変なのでやらずに済むに越したことはないが、論文は本質的に hyperlinked media なので読まないとわからないこともぼちぼちある。

ノートは箇条書きで、話すことを基本的には全部書き出してある。最初はもっと普通の自分用 reading note みたいな内容だったが、それだと話の流れが論文の構成そのままになってダレるし、話すときに考えることが多くもたつく。そしてもたつくのは聴く方のみならず話す側としても割とストレスがある。

話すことを事前に全部決めると、論文の構成ではなく話して伝わりやすい構成に直せるし、話す時も淀まなくて済むし、ラク。結果としてノートは、当初の倍くらいに長くなっている。準備の時間は増えたが、ただ読むより話すことを考えながら読むほうが論文読みの体験自体が engaging になって楽しい面もある。アドリブの余地がなくなるが、どうせ即興して面白いこと言えるわけでもないのでいいです。

シリーズ。

あるジャンルの論文を続けて読むのは本人は満足度が高くて良い。ただ似たような話が続くので聴いている方はヒマだろうなと遠慮してしまう。収録頻度を減らすとこの傾向は顕著になるので、やるなら方法を工夫しないといけない。まとめて読みたいジャンル、いくつかあるんだけどねえ。まとめて読んで、まとめて紹介すれば良いのかもしれないが・・・。

ゲスト。

もうちょっと色々な人を呼べたら良いのにと夢想するが、社会性が低すぎて実現してない。ただ向井さんも今後は忙しくなるので真面目に考えたほうが良い気がしている。自分の友達とか同僚を呼んでもいいけど、それよりはオンラインで論文読み podcast をやっている人にお願いしてみるのも手かなと思っている。ただいくつか問題があるのですぐにはできないな・・・・。

まずゲストを呼ぶ場合は聞き手は二人でなく一人が良い。三人いると互いに間合いを測るのが難しい。そして聞き手としては自分より向井さんの方が二桁くらい良いので、向井さんにやってほしいが、ロジスティクスとかどうすんねん。不明。これが1つ目。

2つ目は、自分がそれらの podcast を聴いていないこと。失礼すぎる。自分は今は podcast は一つも聴いていないし、聴いていた時も日本語のは聴いていない。こういうのってよくないよね・・・。社会性を発揮し日本語の他の podcast を聴かせていただく必要がある。もうちょっと社会的やる気が高まったらがんばります。

メタな話: 対話形式というフォーマット。

世の中の日本語 tech podcast は Rebuild まねっこ雑談形式が多すぎて退屈だと思っているが、一方で雑談対談すなわちダベリと音声メディアの相性の良さは否めない。自分たちの番組は、もともとテキスト・・・どころか場合によっては数式やコード・・・みたいのを音声化しているため、音声メディアとの相性は必ずしも良くない。そこをブリッジしてあげるという趣旨といえばそうだけど、別にそういうトレーニングを受けてるでもなし。

音声とテキストの相性の悪さ、別の例として Audm がある。たとえば The Atlantic のサイトにある Audm 再録の読み上げオーディオ、聴いてみると期待に反し厳しい。Magazine writing は書き言葉のギミックに頼るうえに内容が薄いので、テキストにするとダメなのだった。Audiobook が大丈夫なのはなぜかよくわからないが、magazine articles ほど中身が薄くないのかな。ジャンル次第か。(なお Audm はいつの間にか NYT に買収されていた。だから The Daily に Audm の録音が降ってくるようになったのか。)

音声メディアの古株ラジオはなんか参考にならないかとあるとき NPR Training のガイドをいくつかひやかしたが、逆にこいつらはガチ勢すぎた。ただ対談形式をとりつつアドリブ少なめでちゃんとラジオ好きな誰かが台本を書くようにすれば、tech podcast にはまだブレイクスルーはあるだろうなと思っている。そんなブレイクスルーしてもプログラマ的にはなんにもならないが。

一人がたりだと台本書いてる人いそうだけど「一人がたり」というフォーマットの不利を覆すのは難しいと思う。対談形式は話者が切り替わるプロンプトで脳が刺激されるので、内容の boredom が和らげられている気がする。脳の反応をハックしてるとも言える。科学的根拠は無い。

こんな Podcast が聴きたい/やりたい。

雑談対談ではない Podcast, ちゃんと準備に時間をかけると決めればまだできることは色々あるはずで、人々やらないかなーと思いながらちらちら見ている。

他人はさておき自分が Misreading Chat に飽きたらやりたいこととしては:

  • コード読み podcast. どうやるのかは割と未知数だけど、やると決めればなんかはある気がする。
  • ドキュメント読み podcast. 最近のオープンソースプロジェクトはドキュメントがよく書けてるので、そういうのを次々に冷やかしていく。これは Misreading の枠組みでできる気もする。
  • Postmortem podcast. 古今東西の outage 資料をもってきて読む。これは自分がやっても感じ悪いだけだな。SRE 方面の人がやるとよい。
  • Stand-up Podcast. 最近書いたコードの話をする。たぶんそんなに長く話すことないけど、それが良いのではないか。一人 5-10 分くらいを 4 人くらい、Scrum の daily stand-up みたいなかんじでぱぱっとやる。リアリティショウ的楽しみを作りつ、コードを書く動機づけにならないか。

書き出してみると最後のやつが一番やりたいな。コードを書くきっかけとしての podcast. いいじゃん。一方でこれは Message Passing に fit する書式にも思える。

まあ読みたい論文も溜まっているので、しばらくは Misreading Chat やります。

追記

と思ったら向井さんちに子供ができて流石に忙しいらしく(向井さんちは共働きなのでなおさらである)さすがに継続はできなそう。ま、いつかそのうち、またね。

Wordpress Isn't For Blog Anymore

|

WP.com を使いたくなくなった最大の理由はこのバグで、ありえねーとおもって逃げ出した。ただ改めて調べたらリンク先のバグがみつかり、問題が theme 固有なのだとわかった。Theme setting を変えることで問題を回避し、ようやく使い物になった。編集画面が theme 依存のバグを持っているとかわけがわからないが・・・・。

改めて Wordpress.com のテーマ一覧をみると (この UI ではわかりにくいがログインユーザ向けの画面では) "Block editor (すなわち Gutenberg) 対応 theme" とそれ以外にわかれており、対応 theme は随分すくない。Gutenberg 意向で theme というブログエコシステムの重要資産を切り捨てているあたりにヤバさを感じる。自分が使っていた WP 謹製のテーマも Gutenberg 対応リストに含まれていなかった。だからバグったのだな・・・。

そして Gutenberg 対応 theme にいわゆる "blog" 向けのテーマは少ない。対応していても昔からあるやつだけで、新しい theme はどれも "business site" や "portfolio site" みたいのを対象にしている。要するに CMS 用途の theme になっている。Gutenberg もその視点でみると動機を理解できる。要するにこれは "homepage builder" の編集画面なのだな。執筆画面ではなくて。

パンデミックの影響で CMS 業者は特需があったらしく、そのための注力という面もあるのだろう。けどなんか、寂しいね。最大手の blog サービスに blog のやる気がないという・・・。

とおもったら向井さんが5年前に同じようなことを書いていた

Direction 2021

|

仕事、課外活動、家庭、運用の順で。

仕事。

  • 引き続き性能仕事。
    OS/HAL 側も必要に応じてさわれるよう手元のビルド環境はがんばってつくっておく。
  • 去年はコードを書かなすぎたので、コードを書くようがんばる。
    • 午前中はメール処理やバグ解析はせずコード書きにあてる。(これは 11-12 月に試して色々工夫が必要だとわかっている。それは別に議論する。)
  • 今年のデバイスが出た後は性能仕事をラップアップし、アプリのアーキテクチャとかに舵を切りたい。そのために事前にじりじりと準備をする。(方針は要検討)
    • 性能仕事の自動化を今よりずっとがんばる必要があるだろうが、色々 mess なのであまり近づきたくないなあ・・・。

課外活動。

  • 毎月「プロジェクト」を決めてやる。月末にレビューして、翌月のプロジェクトを決める。プロジェクトは別に大したものでなくて「この本を読む」とかもプロジェクト。1月は Software Engineering at Google を読む。(今の所そんなに面白くない。)
  • Podcast は slowdown しつつ止めずにやる。月一回くらい目標。
  • 雑談ブログを始める予定なので、これも月 1-2 回くらいは出したい。品質はがんばらず、継続的に雑談するのを優先する。

家庭。

  • 学区の見定めと引っ越し。はやいところやる。
  • 子守は academic preparedness を主導する。子の成長にあわせた moving target なので年始に具体的な目標をたてる感じではない。
  • 家計簿 (Tiller) 再開し、一年継続する。予算目標はなしで出費傾向の把握に集中する。

運用。

  • 運動。WFH 中はひきつづきランニング。筋トレもしたいが目標としてコミットするかんじではない。WFH おわったら自転車欲しいかもしれないが、未定。
  • GTD 継続。
  • Weekly review は、今やっている以外に snippet train を引退したのでかわりに Fragments に snippets を書いてみるのはどうかね。大変で続かないかな。
  • 課外活動は monthly review をする。

Having Fun on The Dead Carrier

|

主にプログラマとしてどうするかという話。

ここ 1, 2 年で、自分の将来はもはや望んだようにはならないことがわかってきた。次の世代のテクノロジを仕事にすることはできない。ML のみならずデータ・・・どころかサーバサイドに舵を切るとか、全然無理。今の仕事を維持するので精一杯。

これはひどく残念なことで、考えるほど憂鬱な気持ちになる。一方で、その憂鬱さに負けてしまうと物事は悪化する一方だとも思う。

業務外活動を通じてキャリアを新しい時代に進められないのがなぜかというと、資源が全然足りないからである。時間もないし、とれるリスクもない。(というか、リスクをとりたくない。具体的には収入減、超過労働したくない。)

持っている資源だけでなにかやろうとすると、自分の持ち札を生かしつつ投機的な手を打つことになる。具体的には、たとえば自分の立場から一番近い ML 系の仕事として on-device CV 系のインテグレーションをするモバイルエンジニア、みたいなのを目指して TF Lite で MobileNet なりなんなりをつなぎこむ練習をしておく、みたいな話になる。

が・・・別に CV もモバイルも TF Lite も興味ないのだよね。いや仕事の糧にはなると思うけど、自分の中から湧き上がる関心がない。なぜならモバイルも画像もあんまし興味ないし、TF ダサいな・・・みたいな中二心があるからである。これは例だが、他のパターンも似たような感じ。たとえばサーバサイドいいなと思うも社内インフラ興味ねー、みたいな。関心と必要性が一致しない。そして興味ないけど生存のために頑張るみ根性がない。必要があるのはわかってるけどやりたくない気持ちで麻痺してしまう。

ついでにいうと、そうした投資が実る見通しもそんなに高くない。それっぽいチームに移れる可能性はあるにしても、結局仕事は今と似たようなものになるんじゃないか。要するにエーアイ製品でエーアイじゃない部分のアプリを書く人になってしまう恐れ、というか、そうなるでしょという諦念。心を殺しやりたくない努力をした結末がそれじゃ、うっかり辞表だしたり自殺したりしちゃいそうじゃん。妻子あるとそういうの困るのだよ。


結局、自分のワナビー的願望と現実はあまりにかけ離れていて、それを繋ぐ道筋は見えない。無理に繋ごうとすると特攻や博打になってしまう。

それよりは、自分の残念な現実を受け入れた上である種の健全さを目指すほうが・・・健全なのではないか。プログラマとしても、人としても。絶望に歯を食いしばりながら戦うのドラマチックだけど、家族はそういうの迷惑だからね。かっこいいとか完全に自己都合な幻想。

ある種の、というのはつまり、プログラマとしての、健全さとは何か。まずコードを書いていること。業務でも業務外でもいいが、それなりに自分でデザインして何かを書いていること。新しいことを勉強していること。難しい理論でもいいし流行りのフレームワークみたな軽薄なのでもいい。本でも Coursera でもいいし hands-on でもいい。プログラミングとラーニングが常に並列している必要はないが、ある程度の時系列でみたときは両方あってほしい。そしてこうした行為を楽しんでいること。

つまり趣味としてプログラマっぽいなにかをしていること。

そういう趣味がキャリアを先に勧める役にたったりカネになったりすれば素晴らしいが、そういう実利がないからやらないのは本末転倒である。

なので業務外活動は、しょぼくても趣味性を優先したプログラマ的活動を継続していくのが良い、気がする。「やるべきこと」のやりたくなさに麻痺していると時間も無駄になるし精神性も損ねてしまう。既にだいぶ損ねている。


キャリアの足しにならないしょぼいコードを書いたり本を読んだりに余暇を使う先には何があるのか。キャリアという意味では直接には何もない。ただプログラマ・ソフトウェア開発者としての基礎体力みたいなものへの寄与はある程度期待できる。仕事でしかコードを書いてない大企業下っ端というのは危うすぎる。

あと楽しい趣味があるのは人生にとって良いことだと思う。職業生存の努力がその楽しさを殺してしまったら、これは実際に起きていることだが、人生が辛くなる。そして人生が辛いと家族との関係が損なわれてしまうなど悪循環になる。

キャリアに投資しないでレイオフとかされたらどうすんの、という話。レイオフされてもビクとしもない強いキャリアを作るのはどのみち無理というのが話の出発点だった。レイオフされて困った時、会社に希望を全部つっこんだ末に絶望するよりは仕事は残念だけどプログラマって楽しいもんだよね、と思えたほうがマシ。クビになったら・・・妻子には悪いけど日本に逃げ帰って知り合いにでも匿ってもらおうではないか。

我ながら根性がない。キャリアを進めるために努力できる人と自分は何が違うのか。現時点での瞬間風速的な根性の差というよりは、キャリアを進める努力を楽しい・実りあると感じられるよう人生を舵取り出来なかった差だと思う。継続的根性の差と言っても良い。これは残念だが、既に起きてしまったことなので仕方ない。


なおこれは別に業務を頑張らないという話ではない。仕事は業務時間の範囲でちゃんとやる。ただ業務外の時間は「仕事」の価値観に支配させず楽しくやる。「仕事は仕事、趣味は趣味」というやつだな。

この結論が具体的に何を意味するかは、つづく。というか今から考えます。

Being At Home 2020

|

Looking back を書いてみて、家のことにだいぶ労力を書いた一年だったと思い至ったので、どういうかんじだったか記録しておく。

まずパンデミックはさておいた家事子守のロードがどういうかんじかというと、子が寝ておらず、かつ自分が仕事をしていない時間は、子守か家事をしている。子は 20 時くらいに寝る。なので可処分時間は 20:00 - 22:30 とか、そういうかんじ。仕事中はこまごまちょろまかしてインターネットみたりできるけど、週末とかはそれもなし。夏休みや年末の休暇も同様。夜の可処分時間も厳密には全部が可処分なわけではなく、家の調べものとかで消える割合もそれなりにある。そういえば朝にも可処分時間があるな。6:00 - 7:00 とかで、今は眠気覚ましにちょっとインターネットしたあとストレッチしてジョギングして消える。可処分時間は早寝早起きして朝にもってくることもあるし、夜ふかしして夜に持ってくることもある。

パンデミック で何が変わったか。

まず childcare が復活する 8 月までは、仕事を削って追加の家事子守をしていた。平日2日は 3h 減、残り3日は 1h 減。今でも子が preschool から返ってきた午後は勤務時間中に子が部屋に入ってくることがよくある。すると強制的に break time となる。仕事も 9-17 で 8 時間働くのは難しく、特に夕方は奥様からの子守要求で 30 分くらい削られがち。(これは給料もらうための前提に反しているのでなんとかしたいと思っている。)

通勤がなくなった。往復で 1-1.5h / day. この時間は家事子守に充てられている。通勤は自分にとってはある種の精神の自由を得られる時間だったので、多少の息苦しさに繋がっている。あと通勤にともなう運動がなくなったので朝走るようになった。

週末(に限らないが)、子をつれて出かける先に大きく制限がついている。水族館、博物館の類は全滅。遊戯施設も全滅。従来、こういうのは月に数回は使っていた。State park, County park の類は概ね開いているので、結果としてこういう野外に行く頻度はすごく増えた。ほぼ毎週末 outdoor しているし、preschool から帰ってきた平日の午後は週に 2-3 回は奥様が連れ出している。これが田舎の helicopter parenting か・・・みたいな気分。とはいえ平日午後に子を連れ出してくれると仕事をしやすいので助かるのだった。連れて行く場所の選定に奥様は毎日苦労していた。あまり遠くにはいけない一方、人との接触が少ないところを探す必要があったので。

他の家の子供と遊べない。夏の間は屋外でなら許されていたが、せいぜい一家族相手とかで、大人数で集まれなかった。子は他の子供と遊ぶのが一番の楽しみなので、これができないのは大きなフラストレーション。親も複数世帯で集まって childcare load を share することができない。最近は一人遊び/親との遊びにもだいぶなれてきたとはいえ。

一方 preschool peers の birthday party というできれば避けたいイベントが完全になくなったのはよかった。クラス中の子を全部呼ぶ BD は狂った習慣だと思っている。月に一回くらいは invitation がきていた。

Preschool 再開後、クラスの人数が従来より少なく設定された。これは preschool 的には打撃だろうけれど自分の子にとっては teacher の attention も得やすいしぼっちになりにくいのでむしろ良かった。子の通う preschool は normal を保つことにかなりの労力を割いてくれており、それもよかった。

家の中の子の遊ぶ場所が大きく拡充された。殺風景な patio に人工芝風シートを敷いて playground っぽくしたりとか。これは奥様ががんばった。室内の遊具も少し増えた。

スクリーンタイムは思ったより増えなかった。週に 1 回 Disney Movie をみるくらい。これはがんばって少なくしているわけではなく、親にテレビをみる習慣がないためだと思う。あと物理的にテレビがなくて、ポータブルプロジェクタを設置する fraction が機能している。個人的には別にもうちょっとscreen timeがあっても問題ないとおもうけど、積極的に増やす必要性も感じていない。

パンデミックと関係ない記録。

絵本は惜しまず買うようにしている。とはいえ選んで買うのは割とめんどくさい作業なので、その手間がボトルネックでそれほど増えない。図書館の絵本はぼちぼち借りている (by 奥様)。近隣との貸し借りは少しだけある。子のためのメディア選定は、可処分時間を費やす必要がある作業のひとつ。読み聞かせは毎日している。ちょっとさぼっていた時期もあるが、ここ一ヶ月くらいはがんばっている。読み聞かせなら多少字が多い本もいけるとわかって以来捗るようになった。

ひらがなの読み書き。読むのは一通りできるが、まだ怪しい。ちょっと練習するとよくなることがわかっているので練習させたいが、時間をつくれていない(outdoor 優先しすぎなため。) 英語は、すこしずつ workbook みたいのをやっている。その workbook の出来がよいおかげで、短い時間で少しずつできる。日本語も良い workbook を探すべきなのかもしれない。アカデミックなスキルや日本語についてはどのくらいやればいいのか見当がついておらず不安。時間をとって調査し見通しを立てるべきだとわかっているが、やってない。

傾向としてはデスクワークより outdoor activity と sleep を優先している。Outdoor activity は奥様の意向だが、運動した日は目に見えて健やかなので正しい判断だと思っている。それより子は着替えや食事が super distracted でまったくはかどらず、そのせいで色々な activity の時間がとれないのが問題。これはどうしたらいいのかわからない。


何の話を書きたいのかわからなくなってきた。こうやって家のことや子のことばかりに脳の bandwidth を使っていてプログラミングとかキャリアとか考える帯域が残ってない感じを書き残せればと思ったが、うまくいかないのでここまで。

Looking Back 2020

|

振り返る気力すらない・・・と思っていたが、人々の振り返りが RSS で降ってきたのを見て少しやる気を取り戻す。

今年はコロナで childcare が崩壊した 3-7 月に自分の色々も崩壊し、そのあと立て直し切れず今日に至っている。立て直し切れないというのが適切なのかわからないが、キャリアの先行きとか割とどうでもいいわという気分が支配的になり、そういうことをちゃんと考えられなくなってしまった。

ブレイクダウンして振り返る。

まず健康。概ね問題なし。

通勤の消失に伴い運動量は減っているが、早朝に軽くジョギングして最低限の脳内麻薬は賄えている。通勤の強制力がないので頻度は下がり、週に 3-5 回くらいかな。筋トレは一時期ジョギングの代替にやっていたが、いまはやってない。定着しなかった。たぶんジョギングしない日にやった方がよいのだろうが。

自宅勤務化に伴い過食がなくなり、体重は何もしてないのに安定している。いかに会社で食べすぎていたかわかる。食事関係では秋くらいにカフェインをやめた。これは今もやめたまま。たまにコーヒーを飲むと効果に驚くが、あっという間に耐性ができるとわかっているのであまり復帰する気にならない。安全な付き合い方については研究したいと思っている。

睡眠時間はまちまちで、精神衛生を守るために長くしていた時期もあるし、今は夜にインターネットしたりで割と短め。睡眠を確保すると一人の時間が減ってそれはそれで wellness を損ねるため、すこし規律を緩め不定期な睡眠不足を自分に許している。寝不足だなとおもったらその日は早く寝るくらい。

精神衛生。物理的な支援(運動とか)の力でギリギリなんとかなってる。和良推薦の Medito は仕事のある日はぼちぼち使っている。

色々な思考を麻痺させて乗り切ってる感があり、込み入った考え事ができなくなった。なんというか、鈍くなった。それはもしかしたら単に WP という文章を書く場を失っていたせいかもしれないし(これは取り戻せそう)、会社やスタバのように普段のコンテクストから切り離された空間を失ったせいかもしれない(これは取り戻せていない)。時間のなさかもしれない。

メディア消費。

パンデミック開始直後はニュースに多くの時間を割いていたが、精神衛生によくないので段々と絞り、またぶり返したりで、今はニュースは NYT だけぼちぼち眺めている。選挙以降は紙面も少しヒステリー度が下がり、マシになった気がしている。

それ以外のインターネットは、あまり控えられていない。上の鈍くなったのと関連かどうかはわからないが、長い文章を読めなくなった気がしていて、これはどうにかしたいと年末にちょっと実験したりもした。e-Ink tablet を買って長文を読みたいような気もするが、単に時間がないだけな気もする。

RSS は知人関係とそれ以外でリーダーを分離した。これはよかった。友人の日記とかをよむと、どんな内容であれ心が和む。そういうときに engineering blog みたいのを目にしたくない。友人 RSS は、自分にとってのソーシャルメディアになっている。たまに感想をメールしたりしている。

Podcast はジョギング中に聴いていたが、段々と聴く量が減り、秋くらいから聴くのを辞めた。ニュースと同じで、なんとなく精神の安定に悪影響がある気がしたため。今は Audiobook を聴いている。Audibook は本と同じでいまいち気乗りしないときもあるけど、総体としては podcast よりは実りあるように感じている。単なるバイアスかもしれないが。

インターネット芸人活動。

秋くらいから気分転換に blog でも書くかと準備していたら向井さんから podcast を再開しようと誘いがあり、結果として Q4 ではけっこう時間を使った。気分転換になってよかった。まったく持続可能性は感じないが、そんなに持続する気もないので別にいいです。

Podcast は再開するよと言ったら歓迎のコメントが散見され、おもったより聴いてる人が多く驚いた。公開したものも聴かれているようで、それなりに嬉しい。

Blog はレビューとかをしてもらった割にインターネット上では想像を超えてまったく反応がなく、人々の労力に報えなかった申し訳なさがある。Blog というのは貯めて出すものではないのだなと思う一方で、どのくらい書けるかわからないのに新しいブログを公開するのも気が引け、どうすべきだったのかはよくわからない。

仕事。アプリ本体ではなく OS との相性みたいのとか HAL だとかに振り回され、非生産的な時間を多く費やした。そのせいでコードを書かない時間も長く、アプリのコードと距離ができてしまった。非生産的なリクエストの波が去った後も若干 burn-out 気味で、本来なら大きな仕事を片付けるチャンスの電話機発売後の凪の時期を無駄にしてしまった。上司的にはそれで OK だったらしく評定にインパクトがなかったのは幸いだが、自分的にはあまり OK でない。あと相変わらずバグの triage の負担が多いのも辛い。

あと夏までの childcare 崩壊期は目先のなにかを押し続けるのが精一杯で、一歩下がってなにをすべきか考える心の余裕がなかった。危機的状況下でちゃんと振る舞えないのは仕方ないといえば仕方ないが、そのせいでダメージが後を引いて、よくなかった。

課外活動。ゼロ。機械学習とか、完全に遠い世界のものになってしまった。悲しい。

家庭。問題なし。他の全てを犠牲にしてこれを優先したわけで、その甲斐はあった。奥さんががんばったおかげが大きいが、まあ力を合わせてがんばったと言って良い程度には参加したと思う。あと子が就学前だったおかげで夏から childcare が復活したのに救われた。これが小学生でずっと virtual class とかだったら一年中ずっと辛かったと思う。そういう家庭は周囲に散見される。

もちろん問題ナシはいいすぎで、子があるべき形で社会に expose されない副作用はあると思う。ただそれはがんばっても解決できる問題ではないので、自分の評価にしても仕方ない。

自分自身をもっと世間に expose すべきでなかったか、つまりもっと知り合いと zoom/vc とかすべきじゃなかったの?という指摘はありうる。そうかもしれない。無精だった。

出費は荒くなった。今は外出がない分でマスクされているが、back to normal になったら inflate するだろうと思う。困ったものだが、そういうのを気にする余裕なし。今は給料いっぱいもらってるのでこれでいいです。会社の景気が悪くなったら考えます。

生産性ハック。

12 月からは昼食を食べるのをやめた。これは摂取カロリーも減らせるし時間も削れるしすばらしい。来年も続けたい。

GTD. 崩壊した仕事と生活を立て直そうと9月くらいにを読んで、やってる。自分にとっては Inbox と Weekly Review をセットで真面目にやるというのが新しい取り組み。仕事と個人で別のリストを管理している。細かい雑用を漏れなく片付ける役に立っている。雑用が片付くと心的負荷が下がるのは良い。あと bottom-up に色々やるほうが現実的には機能するというのは、そうだなと思う。

大局的に物事に取り組むのにも GTD が役立つという件の本の主張は信じていない(というか、他によい方法があると思う)が、別にそういうのなしでも有用なのでいいです。GTD についてはなんかもうちょっと書きたい気がしていたが、また今度。

Another Update

|

Gutenberg エディタが苦痛でしばらく日記は Notion で書いていたが、どうも長めの文書を書く気にならなかった。結果として個々半年くらいものをよく考えなくなっていた。これはよくないと思い、2021 からはこの新しいエディタに体を慣らしていこうと考えを改めた。

方針の変更として、自分が Fragments と読んでいる箇条書きのテキストは引き続き Notion で書き、公開しないことにする。あれは Twitter みたいなもので、自分が脊髄反射を吐き捨てたりリンクを記録したりする役には立っているが、長期的にインターネットに晒しておきたいものではない。引き続き友人たちにはソーシャルメディアとして送りつけさせてもらうけれど、それで終わりにしたい。

それはさておき anemone.dodgson.org はいよいよ本格的に誰にも読まれなくなっており、それは自分の私生活から tech blog を分離した以上 by design なのだが、いざ目の当たりにすると若干の寂しさもある。ただこれは公開方法の問題ではなく読まれるに値するものを書いていないせいな気もする。

エゴへの執着で自分の行動や思考を歪めてしまうことにはいまだ抵抗があるので、まあそういう寂しさはおいておいて文章を書いていきたい。ひと目につくところに置きたければ、あとから置いても良いでしょう。

時間はなく、忙しくもない

|

人生最大級に時間がない。朝から子供の相手して、仕事して、家事して、仕事して、寝る。以上。みたいな毎日。一方で「忙しさ」は特に感じない。

忙しさというのはたぶん、予期しない問題や割り込みが起きて、もともとの予定が乱れてしまったときに感じるのだろう。課外活動ゼロの現実が期待値に織り込まれると、何もできないのは別に予定通り。だから忙しいとは思わない。ただ時間がないだけで。

時間がないとも実のところ感じておらず、というのは手持ちの時間 (24h/day) は変わっていない。単に優先度順にやることを積んでいくと課外活動が予算からはみ出てしまうだけ。「時間がない」というのはたぶん、気がついたら一日が終わっているみたいな時間が「どこかに行ってしまう」感覚に紐付いているのだろう。自分は時間がどこにいったかはわかっているので、そういう「溶けてしまう」ような時間のなさは感じない。「課外活動の時間がない」とは感じるが、あるわけがない。だって childcare してるんだから。

仕事の時間が所定の労働時間に届かない事実には frustration や pain がある。これは究極的には失業の恐れである。つまり childcare という目先の obligation と、金を稼ぐという前提の obligation が衝突している。課外活動も潜在的には将来の雇用に寄与するはずだから失われることに恐れはあるはずだが、その寄与の不透明さは目先の obligation にかき消されている。


一方で、これでいいのかと不安はある。疫病は仕方ないが、一方で「仕方なさ」を理由に必要以上にいろいろなことを諦めすぎてはいないか。もうちょっと無理していろいろやった方がよくはないか。「忙しさ」を感じるくらいまで日常にストレスをかけてもいいのでは?

それをやりたくない理由はいくつもある。睡眠を削るなりなんらかの形で時間をちょろまかそうとすると、他のことにしわ寄せるのが目に見えている。それは仕事の成果が減る、ということかもしれないし、妻子の期限が悪くなり関係を損ねることかもしれない。「しれない」というか、このどちらも確実に起こるのが目に見えている。


最近、睡眠を削るという行為は一体なんなのだろうなとたまに考える。いいことなくね?みたいな。ただし場合によっては睡眠を削りたい人もいるのだろうと想像はできた。

  • 昼の仕事が世を忍ぶ仮の姿である場合。昼はウェイターだがよるは歌手みたいな。昼の仕事がどうでもいいなら睡眠を削って自分の時間を確保する意味はある。
  • このバリエーションとして、自分にとって重要な趣味が脳のフル機能を必要としない場合。たとえばテレビシリーズを binge するみたいのは、割と寝不足でも気にせずやられているように見える。

自分はこれらには該当していないので、睡眠時間は削れない。ただまあ、睡眠削って眠気と戦いながら生きることに意味のある人生もあるにはあるのだろう。


話題がそれたが、睡眠を削れないなら何を削るべきか。

ニュースかなあ。ここ二ヶ月は世の動向が割と actionable な consequence を持っている場合もあったので熱心にニュースを読んできたが、もうそろそろいいかなとも思う。ほんとにいいのはわからないが、ニュースをやめるときには常についてまわる不安なのでこれは「やめてみる」が正解に思える・・・平時であれば。今はどうかねえ。まあいいんじゃね、という気はしているが、やけくそだろうか。

仕事の時間にもうちょっと紛れ込ませる。これも望ましくはないが、ちょっとくらいいかなと思う (Towards (A Bit) More Procrastination)。

相変わらず意味のあることができる気はしないが、小さなところからはじめていくほかなさそう。


課外活動以外にも考えることはある気がして、それをさしおいて自分のやりたいことをやっていいのかという逡巡もある。たとえば子の home schooling をどのように執り行うべきか、きちんと考えたほうがいいのではないか。こういう後ろめたさもなにかをやる妨げになっている。

課外活動にせよこうした問題について考えるにせよ考えていることを書き出して整理する必要があり、そのために今は細かい時間を縫って画面なり紙なりと向かい合う時間がほしい。やはりニュースはしばらくおやすみだな。

Towards (A Bit) More Procrastination

|

会社支給の Pixelbook で仕事をするようになりはや二ヶ月。このラップトップはもともと事実上の procrastination 端末だったが本業に使うようになった結果仕事から procrastination が消えた。基本的にいいことなのだが、なんというか、息苦しい。なにしろ家事育児睡眠以外はほとんど仕事しかしていないので、もうちょっとこう、インターネットとかしたいのだよ。Pixelbook のマルチプロファイルにより個人アカウントのブラウザもあるにはあるのだけれど、リモート開発ゆえの環境の不安定さもあり、あまりプロファイルの往復とかをしたくない。メモリも足りなくなりがちだし。

というわけでデスクの上を整理し、このところすっかり使っていなかった私物の Dell laptop をひっぱりだしてきた。ラップトップを二台並べる滑稽さにもなんとなく抵抗があったが、もうそれはいいです。ついでに勢いで Ubuntu 20.04 もインストール。ブラウザを使えるようにするところまでは 1-2 時間でたどり着いた。他はおいおい揃えていきます。もともと手元にデータを置かない主義なのでバックアップなどの手間がないのに救われた。

やはり画面は二枚ある方が気を散らすには良い。というわけで procrastinate してくぞ!というと仕事中もはやそんな余裕はない気もするが、すくなくとも寝る前ちょこっとゴソゴソするのに仕事環境を mess する心配のない私物 laptop を使えるようになったのは良かった。

ところで Ubuntu 20.04 ゴミのように遅いけど正気なのかなこれ。Crostini なり WSL なりがマトモになったら、もうほんとに Ubuntu とはおさらばかもしれないなあ、と思う。まあ GUI といのは金かけて真面目に人をつけてやらないとすぐゴミのように遅くなるわけで、それ自体は理由はわからないが今となっては驚きもない。ソフトウェア・どうしてすぐに・おそくなる?

とはいえ Chromebook には 15 インチ HDPI 高速 CPU モデルとかでてこなそうだし Windows に適応しなおすガッツもないのでしばらく Ubuntu で暮らすけれど、頃合いをみて Macbook に出戻るほうがいいのかねえ。あとやはり卓上に二台ラップトップがあるだめな人っぽさを軽減するべく速い Chromebox が欲しいなあ。いっそもう自腹でもいいから・・・と思ったが目一杯積んだモデルは $900 か。安くはないな・・・。

とか物欲の distraction をにわかにたのしんだあと、正気に戻って暮らすものなり。

Wishlist

|

夜シフトに慣れてきたのは良いが、結果として就寝直前まで仕事・・・みたいになっておりほんとに何も他のことができない。昼はジリジリと侵食され、月水は 3.5h, 火木金は 5.5h みたいなかんじ。そこに夜プラス 2 時間。たまに夜にヒマがあっても(仕事の気力がなくても)私用のラップトップがすぐに見当たららないみたいな体たらく。厳しい。仕事のラップトップで私用をしてもいいんだけど、デバイスが差してあるとかの都合で机から持ち歩くのが億劫なのだった。

いつか時間ができた暁にやりたいことを記録しておく。

  • Ubuntu 20.04 インストール。OS 入れ直しとかなんだかんだで半日くらいかかるので今は無理。しかしいつまでも 18.04 を使っているわけには行かないのだよ。
  • 仕事関係だが直接の依存はない調べもの。色々ある。
  • 読書。もう読みたい本をリストアップする気力すらない。
  • お手紙活動の見直し。今は虫の息。
  • Podcast するなりテクニカルな文章をするなりの課外芸能活動。
  • そういえば論文も読みたいな・・・。何かを学ぶことなしに芸能活動だけしても仕方ない。
  • RSS の消化。

なんちゅうか、たいしたことない人生だな我ながら。別にいいけど。

そしてやはり child care ナシは厳しいよ。そこに金を払うことで時間を買い、その時間で金を稼いでいたわけじゃん。あまりこれについて考えても憂鬱になるだけだが、一方で書き出さずに置くのも鬱積なので、書き捨ててゆきたい所存。

Office After This

|

Reopening Business みたいな議論が世間でも盛り上がっており、勤務先もうっすらとそういう気配がある。しかし social distance つきのオフィス、どれだけ意味があるのだろうね。

まずチームミーティング。できないよね。互いに 6ft 離すとか無理じゃん。上司との 1:1 くらいならでかい部屋でやればいいかもしれないが、1:1 なら別に VC でいい気がするし。出社が解禁される頃には small scale gathering も解禁されているのだろうか。それは・・・いいの?

個人のデスクの間を 6ft 離す・・・ことはできるかもしれない(というか、個人が移動しないという想定なら既にそのくらい隙間はある)。しかし人のデスクに立ち止まって一緒に画面を眺めて作業とかはできない。そして、たとえ 6ft 離れていても人がいっぱいいる室内に長時間 (八時間!) いるとか、微細飛沫防ぐ余地なし。イヤすぎる。

テラスやソファなどの休憩スペース。そういう shared surface は disinfect しないとさわれないわけだが、考え事でウロウロして腰を下ろす度にそのへん拭くわけ?そんなかったるいことするなら共有空間使うの諦めるわ・・・。

食事。6ft 離れた座席の cafe じゃ team lunch も成立せず、そうなるとタダメシを提供する動機/口実が失われる。そもそも空間が足りない。自席でサンドイッチを囓るのが合理的な選択肢になってしまう。つらい。せめて散歩しながら囓るか・・・。間食も、青果やドライフルーツは消えてパッケージされた乾き物くらいしか供されなくなりそう。

特別なハードウェアが必要な人はともかく、自分のようなプログラマに会社という空間の良さは:話す相手がいて、おやつやコーヒー片手にぶらぶら歩いて座って考える場所があって、腹が減ったらタダメシがあって・・・ということなわけじゃん。早い計算機とか広い机とかってのは、家でも(ある程度は)揃えられるわけだから。

けれどワクチンがない世界の socially distant な会社空間にそうした良さがあるとは全く思えない。多少制限があっても WFH の方がマシ。

とか思っていたら, Amazon は早々と 10 月まで WFH 期間の延長を決めたらしい。自分の勤務先も見習ってほしいもんだわ。6 月とかさ。無理でしょ。


一方で WFH の受容は中長期的に福利厚生の削減に繋がるとも自分は思っていて、そこに悲しさはある。

勤務先の手厚い福利厚生の多くは、人々がオフィスで働くことを前提にしている。人々がオフィスに来ないなら、オフィスの厚生を薄くすること自体は理にかなっている。一方で、そこでの削減が自宅ワーカーに還元されるとはどうにも思えない。

オフィス厚生の過剰さは多くが景気のよい成長期の名残であり、良く言えば文化の一部である。WFH に同じような厚生が実現されるためには WFH が文化の一部になる必要があり、しかもその文化が形成されるにあたっては背後に景気の良さがないといけない。これはどちらもむずかしい。WFH 文化は、よほどうまくやらない限り現行の強いオフィス文化と競合する。そして、ただでさえ成長が鈍化しているところに疫病の不景気。気前の良さも期待できない。

従って WFH が文化に根付く期待は薄く、そんな WFH にやってくるのはお仕着せのみみっちい厚生がせいぜいだろう。結局のところ自分の勤務先は pro-office, counter-wfh なのだよな。アメとムチでいうとアメ側がメインなので counter side が強調されることは少ないが。

そうなると勤務先にとっての望ましい展開はあくまでオフィスワークの復帰であって、WFH はそれまでの繋ぎにとどまるのだろう。一方で social distancing の必要性は、一部では一年以上の長期化が見込まれている。そうなったとき何が起こるのだろうか。借りぐらしの WFH が長期化するのか、それとも socially distanced office が定着するのか。後者が期待されている気がするが、先に書いたように自分はその妥当性を信じられていない。一方で借りぐらし WFH を続けるのもあまりうれしくない。

理想的にはリーダーシップが長期的な WFH first に舵を切り勤務先がリモート中心の会社になることだが、完全にファンタジー。

若くて身軽だったら勢いにまかせてリモート中心の会社に転職しそうなところだけれど、そういう元気もない。この悲観的な見通しが実現せず気がつくとなんとなくいい感じになっていることを祈りつつ耐え忍ばせていただきます。Sigh.


追記

勤務先も年末までは WFH ということになったらしい: When Will Companies Let Workers Back Into the Office - The New York Times その他のアナウンスメントを読んだ感じでは、安全性をうやむやにしつつ職場復帰というパターンはなさそうな雰囲気。

WFH Week 7 くらい

|

最近の平日の一日:

  • 6 時ちょっと前くらいに起床、かるくニュースを冷やかした後ひっそり家を出てストレッチ、ジョギング。
  • 7 時ちょっと前くらいに帰ってきて皿を拭いたりコーヒー淹れたりなんだり。このへんで妻子起床。スキを見てシャワー。並行して奥様が朝食準備。
  • 7 時半 - 8 時ちょっと前くらいから朝食。そのあと子の歯を磨いたり着替えさせたり。
  • 9 時から子の preschool video chat 付き添い。30 分ちょっと。その裏で奥様ジョギング。
  • 帰宅身支度した奥様に子を引き渡し、10 時少し前くらいから労働開始。
    • ただし月曜と水曜の午前中は奥様オフロードのため仕事をせず子供の相手。
  • 12 時前後から昼食。日によっては自分が準備するが、基本的にはあるものを出すだけ。週一回くらい出前。
  • 13 時 - 13 時半くらいに労働復帰。このへんのタイムテーブルは妻子の行動次第で、たとえば公園にでかけていて帰りが遅れると遅くなる。
  • 15 時。妻子とおやつ。30 分くらい。
  • 16 時半、仕事を切り上げて子守。
  • 17 時半、夕食。
  • 18 時半、夕食片付け、猫の世話、子の遊び場片付けなどの家事。奥様は子のねかしつけ。
  • 19 時半くらいから仕事の夜ラウンド。21 時過ぎまで。ほんとは二時間働きたいが、疲労のため大抵は 1 時間半くらいで脱落。このへんのどこかで奥様が寝かしつけを終えて登場(起きてこない日もある)。
  • 奥様と会話したのち 22 時就寝。
時間割を眺めて振り返るに...
  • 労働時間の短さ: 昼間 5h, 夜 1.5h で 6.5h. 月曜と水曜は 4.5h. やはり夜はもうちょっと頑張る必要があるな。家事を手早くやって、7 時くらいから夜シフトをはじめればいいのだろうか。あるいはメールの消化を朝のどこかにねじ込むとか。
  • しかし夜に働くのは肉体的にしんどい。デスマ気分。まあデスマなわけです実際。
  • 朝のジョギングを復活できたのはよかった。ほんとは更に早起きして朝に仕事したいが、子を起こしてしまう懸念があり断念。
  • 課外活動はおろか考え事をする時間もないのがジリジリと精神衛生を削っているが、色々な諦めの結果ストレスカーブはまあまあ flatten されている。
仕事。
  • でかいことはやらず、インクリメンタルに成果を出せることに絞って作業。でかい作業をやりきれる見込みがないため。これは今の所機能している。しかしそろそろ大物を狩るフェーズに入らないといけない気もしており悩ましい。
  • 労働時間が短いと税金の支払いが厳しい。俺のじゃねーバグの分析、インフラ変更への追従。ミーティング。こういうのは気合や工夫で圧縮できず、やってるだけで一日終わり、本業が進まない。ミーティングは以前に増してスルーするようになった。あまりよくないが、やむを得ないトレードオフ。毎週 coffee chat だの happy hour だのチーム歓談系のイベントが色々設置されているが、全部無視している。子の有無による class divide の深まりは否定しがたい。
  • CRD (Chrome Remote Desktop) でクラウドにある Linux の Android Studio を使っているのだが、レイテンシが厳しい。たぶん Comcast のネットワークが音を上げている。最初はターミナルや vscode も CRD 越しに使っていたが、ターミナルは Secure Shell extention, エディタは社内の簡易ウェブエディタに乗り換えた。IDE は仕方ないので耐え忍んでいる。
  • そのクラウドでビルドした APK をダウンロードしてくるのに 10 分以上かかり、きびしい。こないだはダウンロード時間が 30 分を超え、思わず仕事を投げ出した。なるべく lab の自動化用を使えるといいのだが、いまは作業が割と探索的なのでそれも難しい。つらい。AT&T なら少しはマシなのだろうか・・・。ただ実際は収集したプロファイルデータを睨んでいる時間の方が長いので、致命的なダメージは受けていないのだった。これが UI 仕事だったら発狂してたね。
  • 追記: これを書いたあと Wifi ルータの設置場所、Comcast のプラン、モデムなどを刷新した結果 10 分かかっていた APK のダウンロードが 10 秒くらいになり、帯域の問題は解決した。
  • Laptop を Pixelbook から Linux なり Mac なりに乗り換えたいが、在庫不足のため勤務先のラップトップ乗り換えは凍結中。いっそ自腹を切って laptop を買っても割が合うレベルなのだが、セキュリティ上それもできない。おもわぬ大企業税。Macbook Pro 16, オンラインで買えば来週には届くのに・・・いいよ $3,000 くらい払うから買わせてくれよ・・・みたいな気分。書いてるうちになにか抜け道がないか調べていい気がしてきたな。
  • 実作業時間を最大化しようとする結果、仕事の方向性とかを一歩さがって考える時間がとれておらず、そこには大きな不安がある。週末の夜にでもきちんと時間をとるべきなのだろうが、おうちの仕事もあるし、もう疲れてて無理・・・。
  • 時間がないといいつつ向井さんなど三人くらいで週に数回終業前 20 分くらい雑談ビデオチャットをしている。しかしこれは子守負荷増大前に始めたものなので、今や週一回くらいが妥当かもしれない。
おうち。
  • ロードバランスのため最初は炊事を引き取っていたものの、それよりは子守を引き取って欲しいというので炊事はやめ、朝のビデオ授業、夕食準備中、週二回の午前いっぱい子供の相手をすることにした。仕事の捗らなさに輪がかかったが、奥様の精神衛生が回復したので甲斐はあった。Child care をアウトソースできるという子持ち会社員の大前提が崩壊しているのでやむなし。Child を care する機会が増え、子との関係は良くなった。
  • 当初は不安などからストレス気味っぽかった我が子、奥様による様々な試行錯誤のおかげで今は見たことがないほどご機嫌に日々を過ごせており、よかった。家族の精神衛生と健康が一番重要というか、大前提なので。
    • プレスクールは午前中いっぱいぶんくらいのビデオクラスを提供しているが、最初の 30 分くらいしか参加していない。うちの三歳児にビデオクラスは無理だわ。ビデオクラスに集中できないこと自体は特に問題視していないというか、できるわけねー。画面にむかってちゃんとリアクションしている一部の他所の三歳児をみると感心する。
    • 朝 30 分のビデオクラスをしたあとは、おやつの買い物で釣って近所を散歩するなり(自分の場合)どこかの公園に車で行くなり(奥様の場合)して、子の運動量を確保している。午前中は人が少なくてよい。午後は適当に遊ばせている。
    • 苦もなく英語を吸収できる三歳児の魔法の時期が過ぎてしまうのが悲しいが、ビデオクラスを無理強いしたところで成果があるとも思えない。我が家における厄災として受け入れている。
    • 中長期的には日本語の活字コンテンツ(絵本)の仕入れに苦労しそう。iPad でも買えばいいのかもしれないが・・・・。配達遅れを承知で Amazon.co.jp から投機的に発送してしまえばいいのかもしれない。
  • 週末は、午前中に公園なり山なりで軽くハイキングして、あとは家でゴロゴロしている。疫病以前はハイキング先で弁当を食べていたところが違うけれど、それ以外は大差ない。
  • Grocery shopping は週一回程度。自分が炊事している間は自分が行っていたが、先週からは奥様が行っている。なるべくオンラインで買い物を済ませ、足りないぶんを補う方向。
近所。
  • Grocery stores はだいたいどこも入場制限をしているが、早朝にいけば問題ない。例外は日本食材店で、早朝は営業しておらず週末は大行列。平日の昼は空いているらしいが、平日の昼に買い物をすると労働時間が一層削られてしまい厳しい。なるべく行かずに済ませて欲しいと思っているが、奥様次第。アジア食材の宅配を検討中。
  • 隣の公園は人が多い。ジョギングや散歩は公道の方が良いし、公園に行きたいなら住宅地から離れた所が良い。
  • 隣人数組が子供同士を遊ばせていたり、公園に行ってもどうみても家族でない人々が連れ立っていたり、social distancing の実施にはばらつきがある。公道や公園で気を使ってくれない人と近距離ですれ違うのがいちばんのストレス。
  • 屋外でのマスク着用はまばら。自分はいちおう持ち歩いているが、マスクでジョギングするのは何度かやってくじけ、今は人の少ない早朝に走ることで落ち着いた。
  • 地元ニュースをまとめたニュースレターを書いていたが、行動に影響あるレベルのニュースが減り、政治の話が増えて S/N が下がってくるのに合わせ頻度を下げている。これをはじめたもともとの動機は shelter-in-place のニュースを当日に受け取ったのが仕事のチャットルームだけだった事実に端を発する情報不足不安および奥様のコミュニティの危機意識の低さのなんとかしたさだったが、疫病が日常になった今や役割はほぼ終わった気がする。SF Chronicle の subscription は引き続き地元ニュースを読む役に立っている。


子および奥様の状態が安定し、ベイエリアに限れば疫病の加速も収まり、表面的には持続可能性を感じられるようになった。一方で勤務先を含む世の経済は不景気に突入し、自分の仕事の成果もゴミのようにだだ下がりで、暗黙の前提である雇用と金銭的安定は暗雲というか雷雲のまっただなか。世間や勤務先の景気は自分がどうにかできるものではないが、仕事の成果をなんとかするのが次のステップなのだろうとは思う。しかし振れる袖が無い。また時間パズルを解き直す必要があるし、他にもなんとか成果を squeeze out することに頭を使うべきなのだろう。しかし「頭を使う」に必要な時間や精神力がなく、つまりこれが厄災の重荷。

Tech After This

|

テック業界、疫病の影響で中長期的にはどうなんのかね。主に自分の雇用が関心。

前提として、世の中全体の景気は悪くなる。回復するにしても、数年以上はかかるとする。サービス業は、長期的にはわからないが数年はどうにもならない被害を被る。ここまでは概ね合意があるように見える。

ここからは個人の見通し: テック産業も不景気の影響を受ける。そして基本的に新しい巨大な価値を生むようなイノベーションはしばらく生まれない(インターネットの祭りが終わってしまったから)。疫病による世間の変化で生まれる/盛り上がるニッチなテクノロジーはあるだろうが (ex: Zoom)、あとは従来の既定路線どおり。ただしタイムラインは変わる。


テック業界最大の疫病受益者は Amazon である。別に彼らが悪巧みをしたとかいう話ではなく、構造として。これまでも買い物は店舗からオンラインへのシフトを勧めていたわけだが、疫病によっての移行が桁違いに加速した。別の見方をすると、Amazon がリテールのシェアを一気に奪った。このマーケットシェアの移行は不景気をふっとばすインパクトがある。

Digital Transformation とかいわれているビジネスシステムのクラウド移行も加速するだろう。その受益者も一番手はやはり Amazon/AWS である。Microsoft/Azure も潤うだろう。Google/GCloud も少しは潤ってくれるといいのだが。WFH が生んだラップトップの特需は特に長期的なインパクトはない気がする。会社で使っていた PC が家に来るだけだから。

電話機業者、すなわち Apple とかがどうなるのか。不景気の影響で高い電話機はしばらく売れないだろう。そういう意味で iPhone SE2 は神がかったタイミングで発売されたといえる。景気がよくなるとも思えないがスマホが生活必需品なのは事実なので、脇を締めて乗り切る感じだろうか。このところ iPhone にひきづられて高価格化していた Android 電話機勢はどうするのだろうね、というかやすいの頑張るしかないと思うのが、頑張ってどうにかなるのかはよくわからない。

検索やソーシャルなのど広告業者。きびしい。別に悪いことはなにもしていないが、広告というのは景気の関数なので不景気になると辛い。Amazon が小売からシェアをとるように、疫病が非オンライン広告からオンライン広告への乗り換えを後押しすることはあるのだろうか。わからん。あまり想像できない・・・。広告業者、Google はきびしいなか少しは収益を diversify できている(クラウドがある)のが救い。Facebook のように広告に絞っていると厳しい気がする一方、会社の勢いでいうと Facebook はいまだ圧倒的なので勢いにまかせて乗り切れるのかもしれない。2009 年の Google がそうであったように。

実世界 disrupt 勢すなわち Uber, Airbnb やその仲間たち。ただでさえ上場後ぱっとしていなかったのが、いよいよ厳しい。数年前は実世界への進出がインターネット業界の未来だと思われていただけに複雑な気分。しかし Amazon だって実世界を相手にしたインターネット企業なのだから、別に実世界進出がだめなわけではない。Uber みたいのがダメだったという話だろう。

最近元気だったインターネット企業というと Slack とかのモダンエンタープライズ。このひとたちはどうなのだろうね。DX の加速に便乗できるのか、保守化した顧客は MS とかの手堅い方に流れるのか。


勤務先はどうなるのかね。不景気による広告の目減りをどこまでしのげるのだろう。一年くらいは現金があるので大丈夫だろうが、そのあとの冬の時代をどう生き延びるかをかんがえないといけない。会社がどう生き延びるかではなく、冬の社内をどう生き延びるかという話。

クラウドは相対的に存在感を増すだろう。しかし underdog である事実が変わるとも思えず、ついでにあまり興味がわかない。クラウドを使うのはいいが、中の人には特になりたくない。

電話機は・・・心配。ハードウェア業みたいに金のかかる博打、金がなくなったらだめそうじゃん。もっと OS とかのプラットホームに近づいておく方が安全なのだろうが、あいつらとはほんとに音楽性が合わないのだよな・・・。

検索と広告。なくなることはないが、脇は固くなるのではないのかね。どのみちそんなに興味ないけれど。動画。ユーザは増えているのだろうが、UGC をとりまくきな臭さが消えることもない。

タイミングを見計らってクビにならない場所に軸足を移したほうがよい気がする一方、別に今の仕事は嫌いではないしやることもあるので、雇用のためだけに逃げを打つのは気が乗らない。しばらくは現状維持、クビになったら撤収、くらいのつもりでいる方が地に足ついてる感じがする。

というか、アクションをともなうなにかについて考える心の余裕がない。現状維持で大丈夫と思い込みたい引力が強すぎる。

書く気力のなさ

|

せっかく 100 年に一度的な大きな出来事の中を生きているのだから何かしら記録を残したほうがいいなと思うも、どうにも気力がわかない。

時間がないというのもあるし、生活があまりに家族との関係に満たされており個人的な要素がかき消えているので、表立ってなにか書く気になれないというのもある。

何か立ち入ったことを考えるのも、目の前にある uncertainty が大きすぎてなにか計画なり分析なりをする意欲がわかない。うつ病というほどではないが、もう日々をやりすごしてい行くしか無いという諦めのような達観のような、そんなかんじ。先の心配をするといっても、まずは家族として病気にならず、心の健康も損ねず、というベースラインの達成が目下の課題で、仕事とかマジどうでもいい・・・というと語弊があるけれども、人としてのベースラインを満たそうとした果てに仕事にあぶれたりしたのなら、それは仕方ないという諦めがある。

目に見えない色々なものが壊れて、失われて、でもそれが厄災というものなわけじゃん。別に自分は頑張っていないわけではなく、優先度をつけて頑張ったら仕事やキャリアにまわす予算が残らないだけ。悲しいことだが、世界を覆う圧倒的な難しさと比べたらほんとにささいに思える。今のところ給料の払われる職があって、住む場所があって、食うものがあって、みな健康で。でもそれを支えるのに手一杯で、他のことに気を取られる余裕がない。

自分は今まで相対的に余裕があったから色々と余計なことを考えることができたが、厄災が起こる前から世の中にはベースラインを支えるので精一杯の人生を送っている人が沢山いて、きっとこういう気分だったのだろうな、と思う。ベースラインを支えることのできない人も沢山いるわけだが、そんな他人に思いを馳せる心の余裕はないのだった。

 

炊事日記 #1

|

奥様子守で疲弊のため炊事担当を引き取ることに。二年ぶり。一週間やってみたが真面目に頭をつかってやらないと破綻確実のためしばらく think aloud に記録をつけてみる。

水曜日

奥様に協力を仰ぎ、冷蔵庫および冷凍庫の不用品、賞味切れ品などを処分する。だいぶ余裕ができた。

木曜日

一週間の献立を決める。昼と夜、主菜のみ。必要な食材をリストに入れて翌日の買い物に備える。調理の連続性(材料の使いまわしなど)を考えることができなくなっている。要練習。

献立を毎週スクラッチで考えるのは厳しいので、昔やっていたように週単位のテンプレをつくる。すなわちこの曜日の昼はこれ、みたいな。おにぎりの日、チャーハンの日、粉ものの日、麺の日、冷凍プロテインの日、漬けおきの日、など。

さすがに毎日作るのは厳しいので出前もスケジュールに織り込むことにする。まずは週二回、ランチから。一回あたり $30-$40, 週二回だと月に 10 回で $400/m, $4,800/y.  週 3 回にすると $600/m, $7,200/y. 典型的な金で時間を買うカード。一年間ならアリかな。子の nutrition 等を考えると出前だけでは足らず野菜などを足すわけだが、それができるのが外食に対する出前の良さといえる。まあ外食できないんだけど。

昼飯は冷凍してあったボロネーゼソースでスパゲティ。

晩飯は・・・わすれた。

金曜日

朝から買い物。大きめの店舗にいくはずが、惰性で近所の小さな店舗に行ってしまう。結果としていくつか買えないものがある。しかし時間がなく帰宅。一週間ぶんの食材等を買うと量も多く時間もかかる。もっと速く済ませたいのだが・・・。そして時間の遅れに気を取られ会計時に会員カードを提示しわすれる。たぶん $20 くらい損した。

朝 7 時前に入店したため、入場制限の行列などはなかった。食材も、特別足りないという感じはなかった。欲しいものが売ってないことは、平時にもあったわけで。

二週間前くらいに申し込んだ Imperfect Foods のショッピングウィンドウがようやくやってきた。メンバーシップ型の食材配達サービス。週に一回の配達数日前にウィンドウがあり、その期間内に欲しい食材を注文する。品揃えは、いわゆるスーパーなどに比べると全然ないが、スタンダードな野菜はそれなりに揃っている。不揃い野菜を売るのがメインかと思っていたが、それ以上に生産過剰なものを売るのがメインに見える。アウトレット食材。特別不揃いの消費を助けたいというモラルはないので、むしろ好都合。

スーパーでの買い物をすべて補えるわけではない。たとえばプロテインは全然足りない。とはいえスーパーでの買い物量を減らせれば時短になるし、事前に手に入るものがわかるのは精神衛生によい。本当はなるべくこいつだけで食材を賄えるよう工夫すべきなのだろうけれど、そういうクリエイティビティを発揮する余裕なし。

ひるめしは奥様が冷凍していたチヂミと冷凍チキンナゲットなど。

晩飯は久しぶりにカレーを作る。子はなぜかカレーがあまり好きではないので、リスク回避のためカレーは鶏ももと玉ねぎだけでつくり、それとは別にじゃがいもと人参を蒸し、軽くバターであぶってトッピングにする。子がカレーを嫌がってもこれらは別に dip でもつけて食わせれば良い。煮崩れもないし、割とよい方法に思える。

土曜日

Imperfect Foods の配達は水曜夕方だが、それまで野菜の在庫が足りない気がする。昨日の買い物で買いそびれたものがあったのと、献立計画の時点で主菜だけを決めたためそもそも買い物リストに野菜が足りていなかった。困った・・・。

出前に Habit Burger. 子には適当にサンドイッチを作る。

晩飯は圧力鍋煮豚。セロリを買えなかったので仕方なく玉ねぎと煮る。このスープどうしたもの・・・出汁が出て旨いはずだが、具材が無い・・・。

時間パズル

スーパーへの買い物は週に一回に留めたいと思っている。これは人混みを避ける意図もあるが、そもそも時間がない。ただでさえ勤務時間のコミットメントを大きく割り込んでおり、これ以上時間を削りたくない。勤務にインパクトの少ない早朝に行くと、朝食準備等で奥様に負担が行くので本来の目的を損ねてしまう。週一回は不可避なので受け入れてもらうとして、足りないものがある買い物に行くと、そのたびに夫婦の関係がダメージを受ける。週一回でバシっと必要なものを揃える必要がある。しかも複数店舗を回る時間はない。

この制約がある以上、欲しいものを全部買おうとするのは現実的でない。買えなかったものを他のなにかで補うような柔軟性が必要。しかし何が買えないかは実際に買い物をするまでわからないため、買い物中に improvise しないといけない。しかも子の好き嫌いを想定する必要がる。難しい・・・。

どうすれば買い物失敗を補填できるか。仕事の時間に買い物に行くというのを試したが、昼間は入場制限とかで朝より時間がかかりがち。そこで 2 時間とか使ってしまうと勤務時間の短い現状では有給半日分くらいのインパクトがある。現実的でない。(これを試した日は有給を申請した。)

夜に買い物に行く、というのは試していいかもしれない。しかし閉店間際の混雑具合とか在庫とか期待薄。どうなのだろうな。しょうじきあまり行きたくないが、何も選択肢がないよりはマシ。月曜にでも試してみよう。自分のジョギングの時間が失われるが、それは自分自身の失敗の対価なので仕方ない。

週一回、一店舗の買い物(プラス配達注文)ですべてを揃える必要があり、かつ失敗した場合のペナルティが自分ではなく他人の負担(すなわち機嫌)。厳しいゲームすぎてストレスで死にそう。

この現状を打破するにあたって、ハイレベルには:

  • まず野菜、プロテイン、乳製品といったカテゴリ単位で必要なボリュームを把握し、それより多めに買うようにする。余ったら多めに食べるなり捨てるなりする。
  • 献立のフレキシビリティを高め、とりあえず何らかの形で nutritious requirements を満たすものを serve する。

具体的には:

  • Staple は、野菜も含めて多めに買う。野菜の賞味期限が攻めがちになる(破棄の可能性が高まる)のは受け入れる。
  • Staple 野菜と理想在庫量をリストし、買い物時にそれを埋めるようにする。(vs. 献立で必要なものを買う)

別の見方をすると、今の買い物は献立ドリブンすぎるので、もっと availability driven に近づけていく必要がある。といっても昼食は昼の 30 分、夕食は終業後 45 分で準備する必要があり、その前は仕事してて献立とか考える時間ないわけで、単純に献立ドリブンを捨てることはできないよなあ。調理の語彙を増やし、在庫から退屈でもいいから適当になんかつくれるようになる必要があるが、献立とか研究する時間ないわ。

仕事も進まずストレス、炊事もギリギリでストレス、文字通り頭痛気味。ここからどうやって sustain できる状態に持っていけるか考えないとうつ病になりそう。

忘備録

  • 人参は 2lb では足らない。 日持ちするので 5lb 買う。
  • ひき肉は足が早いので少なく買いがちだが、冷凍する前提で多めに買う。これも 5lb くらい買ってよい。ボロネーゼなどで割と使う。
  • 鶏ももは漬けおき肉にする必要なし。ソテーでも旨いし、野菜と炒めても良い。最強。帰るときにでかいパックでドンと買えば良い。


追記

炊事は自分でやりたいという奥様からの要望により三週間くらいで終了。

Big Blurry Picture

|

このパンデミック、どう終わるのか。誰も知らないわけだけれど、それでも雑にウェブの記事を読んで分かる範囲のことを咀嚼したい。そのために think aloud writing してみる。

おおざっぱに3つのパターンがある。

  • パターン 1: 感染者を隔離してウイルスが天寿を全うするのを待つ。ウイルスは世間から消える。
  • パターン 2: ワクチンが開発されて人々がそれを接種して免疫を獲得し、社会活動ができるようになる。Coronavirus は今の flu みたいな存在になる。
  • パターン 3: 人々がくまなく感染し、結果として抗体を獲得する。そして社会活動ができるようになる。

パターン 1 の隔離は、感染者の多すぎるアメリカではもう無理と言われている。

パターン 3 は herd immunity (集団免疫?) と呼ばれているもの。これは望ましくないとされている。なぜならパターン 2 より沢山人が死ぬから。数百万人の死者が予想されている。人口の数パーセント。自分も普通に死にかねない確率。医療機関がパンクして治療を受けられない人が増えるので、死亡率もあがる。

あとパターン 1,3 にしても最終的にワクチンは必要である。なぜならウイルスは他所からやってきたり mutate したりするから。

というわけでアメリカは長期的にはパターン 2 を目指している、はず。

ワクチンの開発には「最速で」12-18 ヶ月かかるとされている。つまりもっとかかる可能性もある。個人的には、世界の科学者が総出でがんばっているので割と楽観視している。一年半待てばなんとかる。なってほしい。治療薬の方はそんな期待してない。

パターン 2 を目指しても、政策の失敗などでウイルスの配布まで持ちこたえられず、望まざる形でパターン 3 に入り込んでしまう可能性も割とある。集団免疫って、聞こえはいいけど要するに全滅だからね。

つまり人類は集団免疫という名の全滅を免れるため医療機関が崩壊しない速度まで感染の広がりを抑えつつ、ワクチンの開発を急いでいる。全滅とワクチンの戦い。またの名を flatten the curve.

実際は医療機関はある程度は崩壊しそうに見える。つまり全滅とワクチンの戦いのうち、ワクチン圧勝の見通しは薄い。勝つにしても、大きなダメージは受ける。つまり数百万人は死ななくても十万人以上は死ぬという見通しが発表されている。もう一万人しんでるわけで、10x はそんな遠くない。あと地域により医療崩壊の程度にはばらつきがある。ベイエリアは NY ほどではないにせよ人口あたりの感染者が多く、崩壊しやすい側にいる。


そんじゃ 18 ヶ月 shelter-in-place で WFH しますかというと、それも現実的ではないと多くの人々は信じている。

自分とかはインターネット産業のホワイトカラーなのでやれと言われればやるが、アメリカ全体では既に一千万人くらい失業しており、この数はまだ増えると見られている。仮に数千万人(ざっと人口の一割以上)が失業した状態で国を維持するのは無理。就業可能人口の 10% じゃなくて全人口の 10% だからね。失業率 10% どころじゃない。

インターネット産業にしても、一番したのハードウェアやインフラが作れなくなってしまったら困るし、サービスを維持したところでユーザが失業して金がなかったら売上崩壊。広告産業とかガチで滅びかねない。Amazon だけは生き延びるかもしれないが・・・。

なので感染が「落ち着いたら」なんとなく「経済活動を再開」したい。政府含めた人々はそう考えている。しかしそれがどのように起こるのかはわかっていない。


最悪のシナリオ。再開以前に shelter-in-place が十分に機能しなくて全滅/集団免疫コースに突入すること。沢山の人が死に、集団が免疫を獲得し、ゲームオーバーののちに経済活動再開。

しかし人口の数パーセントが死んだ状態で再開する経済活動とか想像の範疇を超えている。最悪シナリオの終了までにどのくらい時間がかかるかは、死者数とのトレードオフ。数ヶ月から一年くらいだろうか。

ただ常識的に考えると行政は感染速度を見ながら lockdown の強度を強めていくはずなので、仮に現状の shelter-in-place が不十分だとしてもゲームーオーバー前のどこかで「落ち着く」ことは期待できる。なのでこの最悪シナリオは unlikely ・・・な気がする。

最悪シナリオのバリエーションとして、shelter-in-place が機能したのに油断して経済活動を再開したらまた感染が広がってあわてて lockdown ... みたいのを繰り返すうちに気がついたら全滅したりワクチンができたりするケースも考えられる。非現実的だと思っていた「18 ヶ月 shelter-in-place 」が望まぬ形で実現されてしまう。行政/国家の実力次第では、この展開はありうる。経済は崩壊。アメリカの財政赤字 $100 trillion, みたいな世界。 全滅よりはありうる展開。


したがってやるべきことは:「感染が落ち着いたら」再び流行らないよう「なにか手を打ち」、その準備ができたら「段階的に」すこしずつ「経済活動を再開」したい。ここまでは概ねコンセンサスがあるようにめる。ただしその「打ち手」がなんなのか、どんな「段階」を踏むのかは、よくわからない。

基本的な考え方としては、shelter-in-place 成功後の「落ち着いた」状態を冒頭のパターン 1, すなわり「隔離成功」の近似とみなす。つまり shelter-in-place によってウイルス保持者を「だいたい隔離できた」とみなす。

理想的な世界ではこれは正しいとされている。shelter-in-place の期間中に新しい感染が発生しなければウイルスは天寿を全うしていなくなるわけだから。ただ現実的にはそんわけなく、近似によるエラーがある。このエラーは何らかの方法でフォローしてやる必要がある。つまり、ウイルスはそんなに沢山はいないにせよある程度は残るから、それが再び感染爆発しないように手を打ちたい。その打ち手に人々は考えを巡らせている。

まず医療体制の強化。ventilator を増やすとか人増やすとか。医療体制が強化されるとそのぶん感染「爆発」の閾値があがる。これは再開とかいう以前にいますぐ必要なので、各自治体ががんばっている。でも、そんな増えなそうだよね。ぶっちゃけ。指数の力の前にこの小さな定数項がどれだけ助けになるのか、割と疑問。

あと言われているのがテストの徹底。テストを徹底することで、感染した人の隔離を確かなものにできる。テスト結果がネガティブだった人たちから「段階的に」経済活動に復活できる。とはいえ全人口をコンスタントにテストするのが現実的でない以上、どのように人々をテストすればいいのか自分にはよくわからない。この coronavirus は無症状の感染者が多いと言われている。なので熱などの症状がある人だけをテストしてもだめ。だとしたらテストの徹底なんで可能なのだろうか。

更に雑な(しかし頻繁に目にする)近似:テスト結果がマシだった地域(たとえば州)から「段階的」に再開する。でも人々が普通に移動できる以上、マシでない地域(たとえば NY) から人が来たりするよね?どうすんの?州境を封鎖すんの?できんの?

逆側の、より精緻な指標として、感染を生き延びてウイルスへの抗体が確認できた人を「部分的に」経済活動へ返していく方法も議論されているが・・・。まあその生存者が出歩くのは別にいいと思うけれども、それ経済活動を賄えんの?たとえば 1-2 割のランダムな住民が出歩けたところで、そのひとたちが行く職場や学校や遊び場は存在できるのだろうか。想像するのが難しい。ゲームーバーシナリオの中盤意向なら意味あるかもだが・・・。

個人や州単位の「部分的再開」とは別に、social distance を残したままでの再開に関する議論も見かける。たとえばレストランの席数を減らして social distance を保てるようにする、飛行機も有効席数を減らす、ビルの入り口で体温測る、公共ゾーンを除菌清掃する、みたいな。これが可能なビジネスもあると思うが、一方で線引きが曖昧で危うい橋にも見える。序盤での抑制に成功したアジア方面はこれをやっているように見える。

なお自分の個人的な関心としては学校/幼稚園どうするんかな、というのがある。小さい子供に social distance 守らせるとか不可能。中学、高校から上くらいならオープンできるのかもしれないが・・・。

そんな感じで、自分は経済の早期部分的再開というアイデアをあまり信じていない。「実施されない」とは思っていない。「実施されるが失敗する」と思っており、失敗の程度を心配している。

部分的再開のアプローチについては、アジア諸国やイタリアが先を行ってなんらかの結論を出してくれることを期待している。政府がそれらの学びをどの程度取り込むかには、若干悲観的。まあニュースは注視してます。


これを踏まえ、我が身について考える。

自分は(すぐには失業しなそうという意味で)WFH 可能な職についており、経済活動の早期再開にそれほど人生がかかっていない。幼稚園の長期閉鎖に伴う子の発達への影響は心配している一方、まあ一年くらい幼稚園にいかなくても人生踏み外したりはしないでしょう。就学後の学業が一年遅れるよりインパクトは低い。子が家にいると大変で仕事の生産性は激減だが、一年くらい仕事のはかどらない時期があっても、クビになるリスクはそれほどでもない。(長期化すると厳しいが。)

一方で、自分は若くない。そして喘息持ちである。喘息は covid-19 とセットで complication を起こすリスクがあり、要するに病気になって死ぬリスクがちょい高め。子も似た傾向を持っているように見える。なので危うい橋を渡ってまで経済活動再開に付き合いたくない。

といったことを踏まえると、世間の経済活動がどうであれ個人的にはワクチンを打つまで WFH したいなーという気持ちがある。しかし世の中の経済活動再開への eagerness を見るに、勤務先を含めた世間の人々は早期再開に乗り込んでいくだろうと想像しており、気が重い。世間一般はともかく勤務先は長期 WFH 側に倒してくれるといいんだけれど・・・。最悪一旦パートタイム労働に切り替える必要があるかもしれない。

ただこれは現状の不透明さに対して具体的すぎる心配なので今はほっとく。

むしろまず心配すべきはパンデミックの悪化。場合によってはガチで疎開が必要になるのではないか。日本も心配だが、相対的な期待値はマシっぽいから。ただそれそれでロジスティクスがだいぶ厳しい。妻子だけ返すのは悪手で家族揃って避難する方が妥当に思えるが、実現のためにクリアすべきハードルが多すぎて思考停止・・・。


書き出してみて、自分は経済の部分的再開というアイデアを信じておらず、それは世間のメディアの主流の態度とは違うことがわかった。あまりうかつなことを口走らないようにしたい。

自分の見通しが外れて部分的再開が成功してくれればそれは全然ハッピーなので、誰かにがんばってほしいもんですわ。


参考リンク

WFH Week 3

|

  • 子の休校がはじまると WFH が生産的なわけがなく、もう普通に働くのは諦めている。ランチも兼ね昼に二時間ブロックをとって、子の相手をすることにした。夕方も 30 分早く仕事を終えて家事育児。でないと奥様が燃え尽きてしまう。他にも細々と割り込みがあるため、実行的な労働時間は 5 時間くらい?それに加えてリモートデスクトップのオーバーヘッドもある。早朝か深夜に埋め合わせた方がいい気もしているが、そんな体力もなし。朝にメールくらいは見るかなあ。
  • 自分のような電話機部門は「突然トラフィックが増える」みたいなことはない(むしろ電話機売れなそうで不安)なので仕事そのものに大きな変化はないが、クラウド部門などは大変そうな様子。自分は仕事と家の板挟みではなく、一方的に仕事にシワ寄せられるだけマシ。もう評定下がってもクビにならなければいいです。嵐が去ったら頑張ります。
  • 子は不安定で、若干退行気味。仕方ない。そのうち適応してくれるといいのだけれど。ようやくちょっとずつ英語を pick up しはじめたタイミングでの休校、ほんとに厳しい。
  • プリスクールは、ビデオチャット経由で色々やってくれている。ありがたいことではある。しかし子の言語の発達は teacher ではなく peer からの刺激が主だったように見えるので、それがほぼゼロなビデオチャットは厳しい。そして母親が一緒なので自立心も育ちにくい。この世代の子は、社会的な発達が一年遅れになってしまうのかもしれない。
  • ずっと家にいるので子との bond は深まっており、これだけは朗報な気がする。
  • 買い物事情。食料品の買いだめはおちついたらしく、細かいことを言わなければだいたい必要なものは買えている。ただスーパーに行く頻度を下げたいので Imperfect Foods という配達サービスに入る。これは奥様の友達の推薦。他も 2 つくらい見たけれど、枠が埋まっていた。トイレットペーパーなどの衛生用品は完全に欠品。ウォッシュレットも売れていることでしょう。
  • ニュース記事をまとめる活動をはじめた。一日 30 分以上かかるので時間の使いみちとして正しいのか微妙だが、一方でニュースをきちんと追えている事実は精神衛生を助けている気もする。寝る前に書いている。SF Chronicle は購読した。メディアとしての好感度は NY Times >越えられない壁> SF Chronicle > SF Gate > San Jose Mercury だが、ローカルな実用性は逆という皮肉。NY Times は、なんだかんだで東海岸の会社だよなあ。その点西海岸な WP でも読むべきなのかもしれないが、どのみち地元ではない。
  • ニュースまとめメールには書いてないが、大統領の無能さがほんとうにやばくてびっくりする。有事においては権力者がちゃんと権力使ってくれないと困るのだが・・・。100 年に一度の厄災に 100 年に一度の無能大統領が重なってしまったアメリカ、かなり壊滅しそう。生き延びたあとの不況でレイオフになる可能性を無視できなくなってきたが、とくに備えられることもない。
  • 株価はすごい下がっているらしいが、あまりちゃんと見てない。証券会社から「loss harvesting が発動したよ」というメールがぼちぼちくるくらい。自分はもともと超保守的な portfolio でここ数年の好景気でもそんなに増えていなかったのだが、そのぶん減り方も世間の人よりは控えめだと思われる。とはいえリタイア可能年が 5 年くらいは遠のいた感じはする。むしろ給与における株の割合が問題で、今年の所得はすごい下がるだろうね。まあどのみちほっとくしかないし、生き延びるのが優先。
  • 生き延びるという点で、喘息の prescription をゲットしておいたほんとによかった。

疎開について考える

|

これは二週間くらい前に書こうと思っていたが、だいぶ情況がかわってしまった。

知り合いのいわゆる駐在、留学な人々の中に、帰国を早める人や勤務先から帰国を進められるケースが出てきた。自分も妻子を日本に逃がすことを考えているが、日本がどのくらい安全なのか判断が悩ましい。

子をどこかに逃したいのは健康が心配だからではなく、lockdown/shelter-in-place の影響が厳しすぎるから。三歳児、他の子供と遊べないのは過酷すぎる。2週間前、アメリカ/ベイエリアの shelter-in-place 長期化は明らかで、一方の日本はなんともいえなかった。もし日本が収束に成功するなら日本に返すのもアリかと思っていた。せめて近所の子と遊ばせてあげたい。

しかし今は日本というか東京も lockdown が予想されている(んだよね?)。子を逃がす先候補である奥様の実家は埼玉だけれど、まあ同じだよね。日本の lockdown がどのくらい厳しくなるのかわからないが、近所の子供と遊ばせるくらいはできたらなと思う。でもまあ、普通に考えたらやめたほうがいいよなあ。もっともこれは国の違いというよりは個人の性格の問題で、たとえば自分の隣人の家には他所の子が遊びに来ているのが見える。厳密には違法。

東京近郊も lockdown となると、相対的には spacious で遊具も揃っているこの家にいた方がよい気がする。親も二人いた方がずっといいし。もし日本の情況が、たとえば夏くらいに収束したなら、その頃に疎開させてもいい気はするが、lockdown するフェーズにはいったのならもう長期化するってことだよねえ。

それとは別に、疎開させたいと思ったタイミングで入国できるかも若干怪しい。すでに入管を厳しくしてるっぽいがだいぶ色々混乱しているらしく、その混乱に巻き込まれると辛い。たとえば二週間の self quarantine をする際に親元でそれをやるとなんというか、台無しになってしまう。一方で宿の確保は困難を極めている様相。

疎開は無理な気がしてきた。家にいたほうがよいな。

WFH Week 1

|

(金曜日に一週間を振り返りながら書いてます)

月曜日

週末に注文しておいた USB のハブや HDMI ケーブルが届いたので繋いで見る・・・が画面の解像度が上がらない・・・Sigh. 仕方なく USB-DisplayPort のケーブルを注文。しかし低解像度でもラップトップの 12 インチよりは 30 インチの方が目がラク。

SSH tunnel 越しの adb だと systrace はほぼ不可能という結論。やむなくオンデバイスで perfetto trace をとって Linux の VM から pull し、それを Chromebook で表示。そのデータをどっかにアップロードして URL 返すくらいやってくれやとおもっていが、そもそも API もないし機密データをアップロードすることもできない Perfetto UI. Sucks.

洗濯機や皿洗い機がめちゃうるさい。ノイズキャンセルヘッドホンが活躍。

モバイル OS がタッチレイテンシの削減に血道を挙げている一方でデスクトップはリモートでさわってもなんとかなってしまう現実。デスクトップはそのへんラクだよなあ。まあ、あるけどね。遅延。

火曜日

明日から公式に WFH 推奨というメール。予想通り。

画面解像度が低く入力のレイテインシもあるが、仕事は捗る。家には気が散るものがないという圧倒的な現実。WFH の方が働きすぎるという記事を過去に何度かみかけたが、わかるわ。

というか、家で仕事をしないと本当に言い訳の余地なく仕事をしていない。要するに会社にいて働いているフリをするという概念がないので、逆に仕事をしなければというプレッシャーがある。成果主義に体を慣らしてきたつもりだったけど、まだまだ職場という舞台装置への甘えがあったと思い知る。

寝室を片付けデスクを共用できるようになったのでようやく台所から脱出。

水曜日

前日、寝る前にちょっと仕事をしてしまった。寝る前に仕事ができる現実がやばい。睡眠に悪影響が出そうなのであまりやるべきではないが、割と捗るのも事実。

朝から喘息治療のため医者へ。いちおう「朝は不在です」というメールを出す。意味あるのだろうか・・・とおもったが実は上司との 1:1 があったことが判明。しかし医者なのでやむなし。帰りのタクシーでチャットで簡単に報告(「特に問題ないです」)をしたら「あのバグみといてね」と返される。はい。

USB-DisplaPort のケーブルが届いたのでつなぐ。ようやく会社員に望まれる解像度を手に入れた。4k にしたい気もするが, Remote Desktop の圧縮ノイズを目にすると解像度あげても無駄では・・・と思ってしまう。なおリモートでは IDE (Android Studio) とエディタ (VSCode) とちょっとしたターミナルを使い、あとは Chromebook 側で済ませている。つまり全部ブラウザ。

気分転換の散歩、腰が重い理由の一つがわかった。戸締まりが必要だからだな。その点会社の散歩はぶらぶら歩くだけなので friction free である。

話し相手が欲しくなる。チャットだと満たされない何かはある。なんとなくソーシャルメディアをしたい気分にすらなるが、たぶん同じく満たされないだろうからやめておく。奥様に「話し相手欲しくなるね」といったら「なるわよ」とのこと。ごめんね仕事中話しかけられるの嫌がってて・・・。

強い眠気のため夜の仕事はせずさっさと就寝。

木曜日

ワークステーションを再起動してね、というメッセージが出たので再起動したところ動かなくなってしまった。おいおい。仕方なく出社してトラブルシュート。ついでに億劫でやらずにいたクラウドのデスクトップ VM をセットアップ。クラウド VM, 会社の物理マシンより若干レイテインシはあるがそれ以外は大差なさそうな雰囲気。再起動のたびに会社いくのもやだしこれでいいかな・・・。

オフィスに来てみると、フロアの見渡せる範囲で数人。午後になると更に数人増えた。休憩コーナーが従来どおり整備されていて驚く。むしろ人がいないので普段よりおやつの在庫が潤沢。食堂は縮小+衛生管理厳重モードで営業されていた。ま、もうしばらく来ません。

夕方、初のリモートミーティング。これはいつにも増して発言しにくいなー。滑舌やアクセントの悪さからただでさえ発言したくないのに、マイクの動作にも不安があってまた敷居が上がる。なお寝室の mess を映したくないのでビデオは切っている。

ミーティングといえば、チームの誰かが「雑談部屋」みたいなビデオチャット (Meet) のチャンネルを作っているが、帯域も集中力も無駄にする気がして参加する気まったく起こらず。

とはいえこう、疎外感とは違うけれど loop から unhook された感じは否めないねえ。自分は仕事は九時五時という人間なのでそんなに寂しさないけど、仕事の重要度が高い生き方だと寂しい、虚しい気持ちになりそう。

TGIF 動画を見ていたら娘が入ってきて「あのおじさん誰」とか「字だけなの?」とか言ってる。機密情報ですよあなた英語わかんないからいいけど・・・。なお先のミーティングでは  TL の画面にちょっとだけ息子が登場していた。TGIF 登壇の幹部たちは会社っぽい場所だったり自宅っぽい場所だったり、まちまち。

金曜日

夜ふかししてニュースを読んでいたため朝起きて走るのに失敗。しかしあからさまに精神衛生が損なわれているので妻子おでかけ後に走る。この柔軟性はいいな・・・と思ったが、走った直後はさすがに疲れていて仕事が捗らない。やはり朝走るのが一番。

Santa Clara School District が closure を発表。大統領も National Emergency を宣言。それにあわせてついに子のプレスクールも閉鎖。はー。予想どおりだけどいざくると厳しい。奥様と相談が必要だが、そんな時間もない。会社は緊急事態だから勤務は「柔軟」でいいとかいうけど結局人事考課では成果をみられるわけで、板挟み。まあ national emergency なので仕方なし。一年くらいは覚悟しているが・・・。それにしてもものを考える時間も場所もない厳しさよ。

それはさておき仕事。ベンチマークのスクリプト、普段は手元で動かしているがリモートでは動かせないので、自動化につかっている Lab で動かすスクリプトを介して動かす・・・が動かない・・・。手元で動かすには色々小細工が必要なのだが、自分の使っていたワークアラウンドはいつの間にか使えなくなっていた。インフラ担当のひとに泣きついて助けてもらう。しかしこの自動化スクリプトを挟むとターンアラウンドが 10 分以上かかるので、まったく仕事が進まない。きびしい。

自分の仮想終業時刻である17時前に妻子は返ってくるのだが、そうすると17時に切り上げるプレッシャーがより一層高まる。その割の朝は 9 時から働けない。もうね。ちゃんと働くの無理。 まあせいせい寝る前にちょっと埋め合わせますわ・・・。

来週からは大変だが、気が重いなーとか逃避してても仕方ないのでプロアクティブになんとかしていきたい。

Peer Reviews

|

人事考課の季節。チームでの tenure が伸びてきたのと隣接チームと仕事をすることが増えた結果、今回は割と多めにピアレビューを書いた(といっても社内的には普通の量)。久しぶりだったので感想。なお社内のピアレビューには大きく「出世用レビュー」と「普段着レビュー」の二種類があり、出世用レビューは一段真面目に書かないといけない。あとは更に気楽な「一言レビュー」みたいのもある。今回は普段着レビューと一言レビューのみ。

まず、できる同僚に「おまえは良い仕事してるぜ!」みたいなレビューを書くのは普段の気持ちを伝える意味でも書いてて気分が良い。ただ「階級の期待値の記述を満たしていることがわかるように書け」と指示されており、そこは難しい。とりあえず自分の気分をバーっと書いた後、肩書期待値表を見ながら事後的に調整している。たぶん良い書き方ではない。

「もうちょっとこうしたら良い」的フィードバック。良い仕事している同僚には「せっかくだからもうちょっと野心的でバーンとした仕事もやろうぜ、こういうのどう?」みたいな謎の励ましフィードバックをしがち。そういう内容は期待されていない気がするが、勢いと野心があってよく働く人々相手にボンクラから言いいたいこととか別にないよね。しいていえば「もうちょっと人の話を聞け」みたいのを言いたい相手はゼロではないが、まあ別に聞かないなりに付き合い方があるので困るというほどではないし。

むずかしいパターン 1. すげーいい仕事をしているが、すげーいい仕事をすることが期待されている階級であるケース。この「ちょういい仕事してるけどそれも給料のうちですよね」みたいな温度感を伝えるテキストはどうかけば良いのかわからん。仕方ないので「すげー良い仕事してるよね!すごいね!」と書きつつ定量的な採点はふつう、みたいになった。もどかしい。

むずかしいパターン 2. 上の逆で、なんかいまいちぱっとしないコード書くなあ・・・と思っていた相手が、大したことを期待されていない階級だった場合。むしろその階級にしは割といいコードだった気もする。この「ぱっとしない」というイメージを払拭するのが難しい。思っていることをバーっとかいても感じわるいだけなので、期待値表の文言を照らしながらなんとなく「この期待値よりはだいぶ良いよ」みたいなドライな記述をした。そして制度が期待しているのはどのみちそういうドライな評価な気もする。しかし書いていて特に盛り上がらない。

むずかしいパターン 3. たいして重要でもない機能のためコードベースを複雑にしている、と自分(森田)が思っている同僚。しかし「たいして重要でもない」は自分の完全に主観的な評価なので、その複雑さは実は割にあっているかもしれない。しかしその複雑さが生み出したバグが自分のところにやってきてその原因究明に追われ本業が進まない、という腹立たしい体験を何度もしているため、自分はその相手を「余計なコードばっかり書きやがって・・・」と恨めしく思っている。ので「もうちょっとコードの品質とかアプリ全体のアーキテクチャとか考慮しませんかね」みたいな苦情をいいそうになるが、一方で難しい技術的な問題を解いているのはそれなりに事実で、あとアーキテクチャ考えるとかは責任範囲外(畑違い)の相手にも思える。うっかりネガティブなレビューを書きかけたが締め切り前に考え直し、期待表と照らしてドライなバージョンに修正。評点も見直した。


たぶんいい仕事をしている相手には(出世用レビューでない限り)心をこめた賛辞を送ればよいのだろう。逆に自分が個人的な主観では好きでない、評価してない相手に対しては階級別期待値表をツールとして使い、個人のバイアスを排して組織の価値観を代弁する。無駄な軋轢を産まないレールとしての階級別期待値表。

いい仕事をしていると自分が評価している、有り体に言うと仕事ぶりを気に入っている相手のレビューに階級別期待値表を使わなくてよいのか。たぶん、ほんとはもうちょっと期待値の記述をベースに書いた方がよいのだろうねえ。自分は期待値表の記述を内心それほど信じていないのでそれよりは心からの賛辞を送った方がよいと思っている。一方で相手にとっては標準化された基準にもとづいて働きの良さを説明してもらえた方が嬉しいかもしれない。つまり、「森田からの評価が高い」よりは「組織にとっての働きの良さを森田が証言している」ほうが良い。どうせなら相手のためになるレビューを書いてあげたい。

しかしそのためには自分が普段から組織の価値観にあわせて価値判断をする必要があるように思える。階級別期待値表の記述を内面化する必要があるというか・・・。

そんなものを内面化してしまっていいのかという倫理的な不安がある一方で、会社員としてはよく理解しておくほうが都合がよいようにも思える。うーむ。良いピアレビュアであるのを諦める、というのも一つの選択だが、はて・・・。

特に結論はない。しいていえば管理職は普段からこういうことを考えてて大変だなと思いました。

WFH Day 1

|

CA が State Emergency を宣言し Santa Clara County も警戒を高めてきたのを受け、勤務先も遅まきながら自主 WFH を求めてきた・・・とまではいかないが、したければどうぞというフェーズになった。そんじゃやってみっかということでラップトップと開発用電話機を持ち帰り、家からコードを書いてみる。

Chrome Remote Desktop で会社の Linux ワークステーションにつなぐ。手元のラップトップは Chromebook.  こいつに電話機をつなぎ、公式 Linux VM 通称 Crostini で ADB を動かす。同時に Secure Shell 拡張で会社のワークステーションに SSH しつつ ADB のポートを tunnel する。と、あら不思議。Chrome Remote Desktop の中で動く Android Studio でアプリをビルドすると手元の Pixelbook に繋がった電話機に APK がインストールされる。ちょっと感動。さいわい Linux/GNOME の virtual desktop と Chromebook の Virtual Desks はキーバインドが重ならなかったので、ネストした仮想デスクトップで仕事。

なお Macbook だと普通に手元の Android Studio でビルドできるらしく、チームでは Macbook が推奨されている。そんなこといわれてもなーとおもいつつ、ちょうどラップトップの更新をしていい時期にさしかかっていたので注文。Mac OS とかもう使い方忘れちゃったよ・・・。また別の路線として、会社のワークステーションではなくクラウドの VM にデスクトップを置くのもアリらしい。これはまだ試してない。


疫病疎開の WFH なので仕方はないが、仕事は会社でやるのがよいなと思った。これは意外といえば意外だが「仕事をしたくない」と「会社に行きたくない」を混同しなければ自然な結論に思える。つまり「仕事をする」という現実を受け入れたなら、家で仕事するより会社でする方が良い。自分の場合はね。

一般論はさておき自分の身の上について考える。自分はもともと家で仕事をする気はなかった。書斎もないし、今や自分のデスクもない。たまに趣味でコードを書く時は台所のダイニングテーブルにラップトップを置いて書いている。これはエルゴノミクス的にはイマイチだが、腰痛とか肩こりが辛くなるまえに持ち時間が終わるので現実的にはそれほど困らない。

会社はとうぜんデスクもあるし、でかいモニタもあるし、でかいワークステーションもあるし(そもそもこれが必要なのはコードがでかいせいだが)、インターネットは速いし、そのへんに休憩用のソファも転がってるし、雑談したいならテラスもあるし、考え事をしながら歩き回れる空間もある程度はある。コーヒーもあるし、おやつも無限にあるし、食事もでる。空調もちゃんとしている。まあこれは自宅でも大して困らないけれど。

同僚も同じ空間にいるから、ちょっとした用事で捕まえるのに苦労しないし、コードレビューで押し問答になりかかったらデスクまで歩いていって相手の画面で IDE を開き、ほらここが・・・とかいうこともできる。

翻って自宅はというと、デスクはないし、でかい画面もないし(奥様のデスクにはモニタがあるものの、散らかっていてアクセスできない)、CPU はラップトップだし・・・まあこれは特に困っていないが・・・インターネットは遅くはないもの会社ほど速くないし、休憩で座れるソファは捨ててしまったし(無印の beanbag cusion があるが、ソファのほうが快適)、歩き回るには狭いし、コーヒーは自分でいれないといけないし、おやつは限られているし、食事は自分で作らないといけない。今日は面倒なので昼飯抜きにした。

困った時につかまえる同僚もいなければ、無駄にダベる相手もいない。猫はいるが、こいつらは仕事という観点では邪魔である。そして夕方になると妻子が帰ってきて仕事を続けることができない。8時間働けないだよ。

上司や同僚の目がないならサボってインターネットやり放題じゃん、みたいな仮想問答もありうるが、仕事をしなくても給料をもらえる身分ではないので別にサボりたくはないのだよ。むしろ同僚の目のおかげで背筋が伸びるくらいがちょうどよい。息抜き程度にさぼりネットをするのは、同僚がいようが別に構いはしないし。今日はむしろ選択掃除片付け炊事など家事への圧力というか引力を散らかった部屋や溜まった洗濯物から読み取ってしまい、気疲れした。というか部屋を片付けて洗濯して晩飯の準備までしてしまった・・・。

会社にいきたくない理由としてよく通勤を上げるのを目にする。でも自分は片道キックスクーターで 30min 未満なのでそれほどイヤではない、というか、むしろ軽く運動しつつ音楽なり Audiobook なりの音声メディアも消化でき、仕事のはじまりと終わりを仕切るいい節目になっている。仕事に区切りをつける良いで、歩いて五分で会社より、このくらい距離がある方がいいとすら言える。端的にいうと自分は通勤は割と好きである。

というわけで仕事するなら会社いいとこじゃんと再確認した。仕事のためにデザインされた場所なので当たり前なんだけど。


自分の生活は会社で仕事をするという前提にあわせ最適化されているのだから、これはもちろんまったくフェアな比較ではない。仮に生活を WFH にあわせて最適化するとどうなるだろうと想像してみる。

デスク、モニター、部屋。これは金で解決できる。部屋はすごく高くつくが、一方で今の家賃がすごく高いのは会社のそばに住んでいるからなので、田舎にひっこせば家賃の問題は解決する。ただし田舎に引っ越したいかどうかはライフスタイルの選択だからあまり自明でない。あと各人がそれぞれ空間や計算資源を持つのって、規模の経済にあづかりにくから効率は悪いよね。同じ金を払うなら会社に使った方が良いものが手に入る気がする。コーヒー、おやつ、食事・・・もやはりかねで解決できるし、相対的には安いものな気がする。食事はそうでもないかな・・・。

あるきまわるスペースがない。たとえば自分のアパートは隣に公園がある。気分転換に散歩をするのはどうかと試してみた所、そんなに悪くはない。ただ家を出て公園一周、みたいのはやや大袈裟すぎる嫌いはある。休憩コーナーでコーヒー淹れて返ってくるくらいの粒度で一息つきたいことは多い。書斎から出て台所でコーヒーをいれればいいのだろうか。今日は台所のテーブルで仕事をしていたので想像するのが難しいが・・・。

同僚がいない。これは難しい問題で、人々は ZOOM とかを使って乗り切ろうとしているわけだが、どうかね。隣にいる方がずいぶんラクだよね。とはいえテキストでコミュニケートするのも、皆が慣れているならそれはそれでアリとは思う。東京でブラウザやってたときとか、割とそういうかんじだったし。効率が良いとはいえないが、みな等しく効率が悪いなら自分だけ割を食うことはない。

通勤しなくてよい。これは裏を返すと仕事と家庭の区切り目が薄いということで、自分はあまり嬉しくない。WFH するには仕事場の部屋を隔離しろと各種リモートワークガイドは説いているし、じっさいフリーランスのプログラマもしばしば WeWork 的なのを借りている。やはり仕事と家庭で場所をわけるのは大事なのではないか。個人の性格もあろうのだろうけれど。

たとえば自分がワーカホリック独身者だった頃のことを考えると、仕事と家庭(存在しない)を分離するのはどれくらい嬉しかったろうか・・・。それなりに嬉しかった気がするなあ。会社は家事をせず仕事をできるから良いのと同じくらいに、家では仕事のことを考えなくていい、というと大袈裟だけど、目先の仕事に追われなくて良い。そういう安全な空間として、独身者だろうがなんだろうが職場ではない家は大切な気がする。


家で働く良さについても考えてみる。

まず(妻子がでかけているなら)まったく邪魔が入らない。その静寂の良さはある。これは寂しさの裏返しでもあるが、目の前の問題に集中しやすい面はある。ただし、飽きてくるたときに周辺の雑談に耳を貸してたまに割り込んだりする気分転換ができない対価はある。チャットは、その代替にはなり切れていない。これはチームのリモート成熟度の反映かもしれないが、オンラインであまり盛り上がられてもアンチソーシャルメディア勢としては嬉しくない。

静けさの仲間として、思考の自由度は増す。職場のプレッシャーってあるよね。これは気が散るの双対だけれど、一歩下がって考え事をする上で会社ではない場所にいるのは良い。ただし WFH が常態になったとき、この detachment の魔法が持続するのかはよくわからない。たまにだからよいのかもしれない。

通勤がないのは、自分個人にとっては軽運動兼メディア消費の時間が減るだけなので別にたいして嬉しくないが、家族にしてみればそのぶん家事とかに時間を割ける。効率は良い。

同様に、休憩がてら皿を洗ったり洗濯したり、同僚ではなく奥さんとちょっと話したりというのは、家族持ちとしては悪いことではないかもしれない。仕事の隙間にインターネットするよりは健全に思える。

自分はあまりに通勤会社員に最適化されているのでうまく想像できないが、自宅で働くのに最適化した人生にはそれなりの良さがあるのだろうね。ただ大前提として勤務室・書斎はどう考えても必要そうだなあ。


台所のテーブルで働くアパート暮らし妻子持ちの自分は WFH とどう付き合っていくべきか。

とりあえず目先の疫病疎開中は、ムリなくできる範囲で WFH への最適化をすすめるべきだろうね。それは奥様にデスクを間借りさせてもらうことかもしれないし、おやつを拡充することかもしれない。

疫病が一段落したあとはどうか。ここまでの議論を踏まえるなら会社で働く方が良いというのが正しい結論なわけだが、なんとなく、たまに WFH するのは良いことに思える。妻子がいないタイミングで、仕事で込み入った考え事をする時間に充てる、とかはどうか。

なぜたまの WFH をしたいのか。うまく説明するのはむずかしいが、伝統的会社員のライフスタイルに最適化されすぎている自分になんとなく不安を感じる。無理のない範囲で別の側を test the water しておくと、その伝統的雇用が揺らいだ時にすこしはマシに振る舞えるのではないか。あとは単純に、気分転換かな。会社、たまに息苦しいよね。たまにね。

歌を覚える

|

世間が covid-19 の感染に震えるなか子が frozen-13 すなわち Frozen に七年遅れで罹患してなにかと Let It Go を聴きたがる。親として一緒に歌えないと色々と都合が悪い(というか歌えると色々都合が良い)ので覚えようと繰り返し聴いてみたけどまったく覚えられる気配なし。

歌ってどうやっておぼえるんだっけ?というか自分は歌を覚えたことがあるのか?すくなくとも 10 年以内、下手すると 20 年以内にはないような気がする。カラオケとか嫌いだし・・・。繰り返し聴いてる歌のサビくらいはちょこっと歌えるかもしれないが、そういう水準ではないのだよ。親の威厳をかけて Let It Go 全部歌う必要があるのだよ。

"let it go lyrics" などと検索すると歌詞のテキストが見つかるので、こいつを紙に印刷して壁に貼ろうかと一旦 Docs にコピーする。この感覚なんとなく覚えがあるな・・・とおもったアレだな。英語の shadowing. 印刷するのはやめて画面に Docs を表示し、ちょっとずつ再生しては一緒に歌ってみたり、再生しないで歌ってみたり。昔々にピアノの練習をしてた感覚にも似ている気がする。ほとんど覚えてないけど。とはいえ概ね shadowing である。

そしてあたりまえだが昔より英語力だけは高まっているので若干トリッキーに単語を繋いだり音が消えたりする部分があっても歌の音声と歌詞の相関を理解できる。英語やっててよかった気分をすごい久しぶりに味わえた。

たまに英語の勉強に洋楽を勧めてるのをみるけど、気持ちはわかるような、割と難しい気もするような。まあ今は歌詞の入手も音楽探すのもすごくラクだし、どんな歌もそのへんの音声教材よりは短いし上達した時の嬉しさは歌の方が上だし、いいのかもしれない。Let It Go を洋楽に数えていいのかはさておき。

それにしてもこの「覚える」訓練は子が生まれてからすっかり遠ざかっていた。久しぶり。ボソボソなりに声を出すせいもあり、普段使っていない脳の部位が活性化する(ポップカルチャー的な用法です)かんじがちょっと気持ち良い。15 分とかのそれなりに短い時間でも練習できるし、親としての歌の練習が英語の shadowing (の簡単なやつ) になっているお買い得感もある。これはしばらくやって良い気がしてきた。覚えないといけない歌も色々あるし。For the First Time in Forever とか Let It Go の倍くらい長いんだけど子が飽きる前に覚えられるのかこれ・・・。

Frozen 以前に英語圏の伝統的なこどものうた、たとえば itch bitch spider とか twinkle twinkle little star みたいな短いやつらもなかなか覚えられなくて長いこと居心地の悪い思いをしていたが、単に時間をとって shadowing 的に練習すればよかったのだな。こいつらは Let It Go と比べるとまったく盛り上がらないが一方ですごく短いのでそのうち練習して良い気がする。Frozen が片付いたらどこかで音源を探してきたい、かもしれない。あとは楽譜も欲しいなあ。

WA 2020 #7: Wrapping Up Before The End.

|

I found myself not to afford to write more, which was the original goal. This time I'm too busy, my mental traffic is so congested that I cannot have another task without harming things I'm responsible for.

Still, there are still some findings:

  • I enjoyed writing these. It was fun to write some silly stuff. I love to waste time by these writing attempts. These aren't just affordable now.
  • My writing tends to go too sentimental, and it degrades the clarity. I have to find a way to be more dry, concise and critical. Being emotional is easy, but not helping your thinking.
  • I still have a lot of errors around articles and tenses. It's a shame. I think a continuous practice like this will help improving. It's disappointing that I cannot do it.

Again, it was fun. And I'm pleased that I can still enjoy writing these random stuff. I'll be back some other day.

WA 2020 #6: Procrastination Paralysis

|

These days I feel like that my procrastination is killing me. My chores are stacking up, my work is disorganized, but I cannot take any action and just keep wandering the internet news sites. My instinct is pushing back against the home obligation. At the same time, it feels guilty to spend time to thinking about work without fulfilling the home responsibility. I'm almost paralyzed by this conflict, and it's called procrastination.

Is it a matter of productivity and I should revisit things like GTD? Maybe. Maybe not. I'm depressed? Slightly, if any. Is this a midlife crisis? I don't know. I think I need some soul searching to convince myself.

WA 2020 #5: Running Fast Enough

|

I just finished the audio version of Susan Fowler's Whistleblower. There are a lot of stunning facts covered. One of such saddening points is that the harassing managers came from Google. So in theory, in a parallel universe, it might be Google. Instead of Uber.

Susan Fowler had the dawning thought that she was prepared to fight against Uber. Although it is true that she is prepared, there is no reason that it has to be Uber. I take it more as a probabilistic outcome. Uber is probably the most likely one, as its bad reputation suggests. However, I cannot think other companies, including my employer are perfectly innocent. There is so much evidences being publicly reported. Here is the latest one. The story has so many parallels to the ones from Uber's,  albeit it's a bit more nuanced.

To be clear, I haven't seen such a misconduct around me. All I have is a vaguely memory of a few rumors in this realms from years ago. I'm not sure whether I in the past years took it seriously. I just don't remember how I reacted. If I hear such kind of things today, however, I'll probably believe it. That's the effect of the movement Susan Fowler catalyzed: I no longer hold the level of the belief to my employer. While I still think it's a good place to work overall, I now consider it as a matter of some probability. The odds are on my side, but it can fail.

And the story tells me that it fails miserably if it does. I don't think I'm able to fight against it. The best I can do is probably just running away. To be honest, I'm not that confident that I even have that ability, to run fast enough.

Even before reading this book, I know I can never be like Susan Fowler and that's totally OK to me. After finishing the book, however, I now don't want to be one of the researchers in Physics department in UPenn, who stayed away from Susan once she became "the "problem". Still, I know I'm probably one of them if it happens. I don't know what I should do, how I can prepare. One thing clear is that it's not about running fast enough.

Book: Whilstleblower

|

Whistleblower: My Journey to Silicon Valley and Fight for Justice at Uber: Susan Fowler

むかし Susan Fowler すげえなという話を書いたが、自分の認識は全然甘かったと深く反省した。件のブログはすごいクールにズバッと相手を切ったように見えたがそれは体裁であって、人生を賭けた一撃だったのだね。そりゃそうだよね。自分は「Stripe で楽しくやってる」とか書いたけど、件のブログを書いたせいで PR からめちゃ煙たがられたりして気の毒・・・だがその気の毒さは Uber が反撃のために送り込んできた私立探偵やおそらくインターネットトロルたちからの攻撃の酷さとくらべると些細な問題に見えてしまうという辛さのスケール。なお今は NYTimes の editor になり、思わぬ形で物書きになるという年来の夢を果たしたそうである。

Susan Fowler は home school だったため小中高と学校にいかず、いきなり大学から社会生活(というと語弊があるが)をスタートしている。それは前にインタビューを読んで知っていたが、その背景になる家庭の貧困についてはこの本で初めて知った。自分を white trash の trailer park コミュニティにいたと書いている。序盤の自伝パートはすごくアメリカ的。

その後アイビーリーグであるところの UPenn に編入し物理学の博士号を目指すが、メンヘル同級生の男に絡まれた上に大学に助けを求めたらトラブルをもみ消したい組織の意向によって逆に学校を追い出されドクターを取れない、のみならず、取得したはずのマスターの学位までなぜか抹消されてしまう。Upenn ひどすぎてびっくり。

この体験を通じて組織でのセクハラの扱いに絶望したことが、Uber での戦いへの備えになっている。UPenn での体験に限らずとにかく人生が壮絶すぎ、しかしその厳しさが Uber と戦う強さを育てたのも事実で、戦う定めの星の下に生まれた人なのだなという感想を持たざるをえない。本人の望みとは無関係に。

そんな Susan Fowler も告発ブログを書いて人生を ruin するのには恐れがあり Uber 脱出成功後しばらくは見ないふりをしていたが、ある日夜と霧を読んで覚悟を決めたという下りがあった。ナチの収容所からの生還譚が超絶ブラック企業の告発を促した。なんとも象徴的。自分もデスマのときに読んでいくらかの勇気を得た遠い記憶があるよ。


ところで Susan Fowler を abuse しつづけていた SRE 部門のクソ管理職チェーンはみな Google 出身者とされており、なんというか、がっかり。この会社のどこかにはきっと今でもこういうクソ管理職がいて、自分はたまたまそういうのを引き当てていないだけなのだろうと思うと薄ら寒い。自分はそうしたクソ管理職と戦う準備ができているか。できてないね。ハズレ上司を引いたら感傷とか責任感とかぜんぶ投げ捨てて逃げ出そうという思いを新たにした。

人々を勇気づけようと書かれた本を読んだ感想が「時が来たら逃げ出そう」なのは我ながら救いがたいが、自分にそうした勇敢さはないとこれ以上ないほどはっきり思い知ることができる本でありました。


本人による audiobook の narration は正直あまりうまくないが、時々感極まっている部分などが生々しかった。まあ、自分で読むべき類の本だとは思う。

WA 2020 #4: A Secret of Perfect Taste

|

"I found a secret." She said, after perfecting the taste of her potato salad / mashed potatoes. "To make the taste perfect, you can keep adding salt to the salad while tasting it and stop right before it gets too salty."

"It's like the Microsoft strategy for winning." I responded. "In their days they were said that their strategy was to keep running the business until they won, pouring money into it until competitors gave up." Twenty years ago, it sounded like a perfect strategy. Looking back, however, I cannot help but wondering - How many businesses had they won through this? Maybe their game console deserves the exemplar position. On the other hand, there are numerous counter examples. Think about their server market, which has lost to Linux, or mobile. A lesson from this quick lookback is probably something like this: The words from the winner sounds like the truth but you cannot tell.

That being said, I still have some respect for their commitment to the business continuity. My employer is famous for the business discontinuity. I used to think that it is reasonable, or at least make some sense. I'm not sure anymore. Instead I now believe Microsoft indeed won some ground with the strategy, and it must have paid off overall. It is just not a perfect strategy. There is no such thing.

Of course I didn't keep talking like this. That is not how couples talk. Here is what actually followed: "I think I read the same idea in Salt, Fat, Acid, Heat. I followed that advice for a while, but then noticed that it doesn't work on some occasions: Think about marinated chicken for example. You cannot taste the marinade, especially when you use some alcohol. You have to commit to some recipe, and all you can do is adjust it for each iteration."

In a sense the continuous-tasting secret resembles Agile Software Development, or Lean Methodology. You experiment, measure and adjust. In some cases, this works perfectly. For some others though, this doesn't make a lot of sense. There are software counterparts of the marinade - You have to commit. You can iterate only slowly. The perfection takes time and the early in-market does create the moat. Should you avoid software projects that's hard to experiment with? Now you know this a silly question - It's like asking you should avoid marinade. Fine. You can. But are you happy with it?

Of course I didn't keep talking like this. That's not how couples talk. Here was what actually followed: "But it works perfectly when it does. Give me a scoop. Wow this does taste perfect!"

WA 2020 #3: Conway's Law of Thread Pools

|

The mobile app I'm helping to build at work has stunning number of threads and it's been complained by the system health related teams, who are monitoring the apps built in the organization and alert their developers as needed.

One day, an engineer from a neighboring team filed a bug that said "the app has too many threads". I was furious - Their teams is responsible for large part of it, and you just throw the shit to us and ridicule us? What a rude guy. I was furious also because their team has been contributing to the app unstability for a long time and debugging it has wasted a lot of my time. But this kind of them-vs-us mindset never solves any issue, so I just left the bug open and moved on (which doesn't solve any issues either, literary, but at least I don't make it worse.)


People casually create thread pools. In many cases that's not a problem. Each thread isn't that expensive after all. However, if a lot of teams who are developing compute-intensive features come together and put their efforts into a single app, each increment is gradually harming the performance.

How expensive are threads? Talking about thread overhead, the first thing people care about is the memory. Thread does allocate some memory, but the actual number is not clear. In addition to the linux thread, an ART thread is attached to each thread on Android.

In practice though, the thread creation latency becomes more like a problem than the thread heap consumption. The thread creation is serialized, blocking other threads. Even without that, it does a lot at the beginning of the thread lifetime, and its CPU consumption is visible in a startup trace data.

In short: Threads can be heavy in memory, but thread creation latency is more evident harm.


Why do teams create itstheir own thread pool instead of sharing it? Because it's easier. Creating a new one is one liner but passing around thread (or Java Executor) needs some plumbing, especially it crosses the team boundary. Also, it is often safe to have a new one if you need specific semantics, like serialized execution on a single thread. Java doesn't have a way to express these characteristics of an Executor.

If you think a bit more, you would realize that you can implement the serialized semantics over an existing thread pool. Guava's SequentialExecutor implements it for example. People just don't care. Another evidence that people don't care is that everyone creates the thread pool with number of thread as the device's CPU count. What a f*** - Multiply it with the number of thread pools. How does it possibly make sense. (I know it does in a few occasions, but it doesn't help me from the complaints from the other side.)

Java or Android could have had some API that returns an Executor with desired property but is backed by a system-(or process-)wide thread pool. That didn't happen. Whom to curse?

Using native (C++) code in the app makes the situation way worse: There is no obvious way to share threads (or thread pools) between C++ and Java. As a result, same people create separate thread pools in C++ in addition to ones in Java.


The number of thread is now the number of CPU cores multiplied by the number of participating teams plus the number of async-but-serialized executions multiple by the number of programming languages. This is crazy. And that's why the number of threads in our app is crazy large.

Solving this problem is technically trivial: You can build a cross language thread pool library that has thread sharing in mind. But it's more about organizational problems: You have to convince other teams to use that library. You have to demand other teams extra work and complexity. You have to convince that your design is right, eschewing the endless bikeshedding, while you have deadlines, as well as do others.

I don't have energy to go through all of these, but probably I should start building something small and start using it in our own codebase, then go to the rude neighbor, and then pitch it to the research org, etc, etc... Oh god it's depressing. Stop thinking too much and just start small. Later.


Another side of me appreciates where I am - It's much better to have at-least-partially-technical problems stacking up in front of myself, instead of having the need to looking around to find even niche problems to solve, or having a not-at-all-technical problems in front of, but not reachable from, me. For me a hired professional, problems I have are bread and bacon.

WA 2020 #2: Doc Appointment

|

As instructed by my primary care doctor, I visited a specialist. I was supposed to have a pulmonary (lung) function test, but the doc said his office doesn't have the facility and I have to make another appointment to the hospital nearby. What a waste of time; What's the point of the specialist?

Without waiting for the test result, he prescribed a long-term control medicine for asthma. Why don't we wait? I was nervous, but kind of expected it. After all, asthma is very a vague categorization and the perception of the patient (me) matters a lot. And I went to the doctor, suggesting I consider myself an asthma sufferer.

Reading through the instruction of the medicine, the long list of the side effects scares me a lot. I hope I don't have to use this, but "long-term" means this is likely to become my lifelong medication. Sigh.


I was fed up with the series of my doctor visits. It's not close (20 min drive) and their office work is far from efficient. My primary care doctor/provider (PCP) hasn't shown up after my very first visit but only her subordinate NPs do. The specialist today was as blunt as I almost took it as an arrogance. I hate all of these.

My spouse has her PCP in a big hospital. It has its own strengths and weaknesses. One strength over my current mediocre small medical center is the streamlined services and the doctor's average quality of the service. The drawback is the long queue of appointments. Last week I asked her how long she had to wait for the possible next appointment. The closest date, it turned out, was about a month away. I'm not sure that is a good option. Even though my current situation is messy and has tedious arrangement, I can at least make an appointment in a few days.

Yet another option for me is the employer-provided medical center. I didn't like the idea of letting my life depending on the employer beyond the paycheck and I didn't have high expectations regardless. However, a friend of mine tried it and told me that he was very much satisfied. According to him, it has a couple of advantages over my current situation: First, the appointment latency is very short, which is a big plus. Also they are located on-site, meaning very close to my office. I would no longer have to pay about an hour plus $20 Uber fee for each visit. It'd be another big win. And so far I don't see any real shortcomings. Probably I should, and will, take a look - Once this asthma round is over.


I didn't like the employee-based services because I feel spoiled and I miss the opportunity to see "Real America." I don't have such an aspiration anymore though. Life is too hard to chase the reality behind the curtain. Now I'm happy to be illusioned.

 

WA 2020 #1: Figure Things Out

|

A teammate came back from his business trip to a remote office in Asia. I found that I've missed him.

Let's call him T.  T is the one I talk the most at work, and he's the one who has interesting topics. My work days were quiet while he was traveling. And that's over.

T traveled to talk to the people below the tech stack. I and T have been talking about adding some corner-cutting private API across the stack for performance optimizations, but we knew too little about the lower layer to make it happen. So the goal of his trip was to figure the plan out with the team who know the needed details.

T went there because this is his project. At the same time, he went there on my behalf because it's also my project. Precisely speaking, it is still not a proper project with substantial commitment, but we want to make it real. T took action for that while I didn't.

T figured it out, but he probably wouldn't make it, that is, he probably wouldn't write any code for that. That's likely to be my part.

That's because ... T is a manager, specifically a TL-M. A tricky part is that he's not my manager. He did the legwork not because his reportees needed it but because he thought it was important for hitting bigger goals, for which I'm also responsible.

I feel bad for him - Probably I should've traveled instead of him, or at least we should've gone together. Or he should be able to work on the whole project by himself. The talk-code separation invites bureaucracy. I hate it, but I realized I just did call it.

I've been frustrated by my lack of the action, but I'm almost giving it up. Why do I have to depend on him? Why does he have to depend on me? Why cannot we pursue these technical challenges from the beginning to the end by each of ourselves?

This question can be easily answered in a way that critics do. But I would reject that. It's just a noise unless being actionable. I'll figure it out. Meanwhile, T has a bumper-sticker message in the intranet profile page. It says: Figure Things Out.

WA 2020 #0: Ten Days, That's The Goal

|

My English ability is declining - This is the feeling I have often these days. Although I've been accepting the fact that my English fluency is not getting better, having decline is different. I have struggled to articulate my engineering points to my teammates, which feels like a real threat.

More practice is needed, probably speaking, but writing is easier. So I decided to start some writing practice: I'll write some random trivial stuff once a day for ten days. I expect it to be plain diary and do not expect it to be worth a read. That aims to be pure practice.

What should I write about today, then? Here you go...


Why is my English fluency declining? There are several contributing factors.

First of all, I have spent no time on explicit English practice. I simply cannot afford it. This isn't great, but it's just a plain fact.

Secondly, I've largely withdrawn from podcast listening for a month. I still listen time to time, but my phone no longer has any podcast app installed. The intention was to spend more time on long-form audio books and my own thinking, and it paid off. However, thinking more to me means thinking in Japanese, and also listening to written English like Audiobooks isn't like listening to people speaking and somehow doesn't have the language gravity podcasts had. It might be matter of taking back podcasts again to my life, but somehow doesn't feel like that today.

Relatedly, I feel myself in a kind of introspective mode these days. I like to be introspective, but it's not a great way to be aware of languages. What's worse, my introspection is solely done in Japanese.

Probably I should spend more time on consuming spoken media, talking to people and thinking in English. I don't feel like that, but there needs to be some balance to hit. This writing project is a not-so-promising attempt to hit the balance.


By the way, have you tried Google Docs' spell checker recently? It's amazing. I wrote the text above in a single path, and pasted it to a gdoc, and edited based on the suggestion. I underscored such edits. I guess I could've spotted some of them if I re-read, but all of t hem. It's worth highlighting - It tells me my misspelling patterns.

Anyway, spell checker. It's worth a shot. (I guess GMail is now using the same checker, but I'm not sure.)

Edit: I've made several edits after the spell checker applied. There are endless mistakes and rough edges.

貸しの無さ

|

インドに住むフェミニストのアメリカ人が書いた子育ての本(ひどい要約)"Women's Work" の後半、著者は取材旅行のためはじめて家を空けてたびに出る。夫のために子育てカンペなどを整理しながら「なぜこんなことを」と理不尽に感じ、しかし旅先では「自分はもっと早くからこうすればよかった」とある種の達成感と開放感に浸る。そんな下りがある。

これを読み、自分の奥様にも家を空けて外出してほしいなと思う。何度か水を向けているだが、まったく進展しない。自分にとっても目先ではやや面倒が増えることなので頑張って urge しつづける意欲もなく立ち消えになるのを繰り返している。でも、たぶんそこは頑張って繰り返し背中を押すべきなのだろう。

自分が出張に感じる強い抵抗は、結局そこで生まれる借りを返せる見込みのなさに根がある、気がする。自分はただでさえ、たとえば podcast の録音や出張者とダベる外食などで帰宅を遅らせ、奥様に負担をかけている。つまり細々とした貸しが積もっている。しかしそれを返すことができない。返せない借金がある身で更にでかい借金(出張)をするのは気が重いので出張から逃げてしまうが、これは明らかにキャリアを損ねている。友達と遊びに行くとかも同じ理由で難しい。つまり自分が必要に応じて出張とかをするためには、奥様に旅行とかに行ってもらう必要があるのである。別にいいよとかいうけど、借金踏み倒すしか選択肢がない倫理的イヤさが伝わってない。

なんとなく mortgage の利息を決めるクレジットスコアを稼ぐために車のローンを組む、みたいな理不尽さを感じないではないが、そういう金融的メタファはさておきちょっと遊んで息抜きしたり人間関係を回復したり自分のことを考えるまとまった時間をとったりしてくれた方が関係性として sustainable に思える。現状には deadlock 的息苦しさがある。信頼を勝ち得てないのではという指摘も有りうるが、別に一通り子の世話をできることはわかっているのだからその点で自分にできることはあまりない。子と自分を信用して出かけてもらうよう強く促す必要があるのだろう。

ロジスティクスの問題として、家に車が一台しかないというのがある。自分は緊急時のため、あるいは平日だったら drop-off/pick-up のために車がいる。奥様が外出に車を使いたいとなると、どちらかが借りるなりタクシーなりで妥協しないといけない。借りた車で長距離でかけなくないという旅行者の思惑と、慣れない車に子供を乗せるところで苦労したくないという留守番者の思惑が食い違う。車くらい借りてくれよ・・・といいたいが、もしそれが本当に blocker なのだとしたら・・・自分が借りた車で送迎なりするのかねえ。まあいいけどロジスティクス的な不自由さはずいぶん増してしまう。が、そういう細部でフリーズしてないでガっと話を進める太っ腹さが求められているのだろう。 車をもう一台買う…のはあまり考えたくない。

もっと無責任に子供おいて遊び行くねじゃーねーとかいって出かけちゃってくれるとある意味ラクなのだが・・・というなんとも歪んだ悩み。

Asthma and Fear

|

喘息関係で医者に行く手前、軽く予習。CDC のサイトをチラ見したあと、リンクされていた NIH のガイドにも軽く目を通す。

基本的には 1. 診断を受けて薬をちゃんと飲みなさいね 2. 環境要因を排除しましょうね。という話だった。そして NIH 的には 1 がメイン。そして投薬などのガイドラインを読む限り、いまのところ医者は間違ったことは言っていない様子で安心。自分はいまのところ short-term relief の薬しか使っていないが、long term control の薬も受け入れた方がいいのかもしれない。Inhaled corticosteroid の副作用は、割と控えめっぽいし。Oral はやばそうだが。まあしかし、あまり嬉しくはないなあ。環境要因の理解は、なんとなく自分が子供の頃から大きな進歩はないように見える。


そして自分はそれら環境要因の回避をかなり内面化しているのを思い出す。ある時期までは気にしていなかったが、奥さんと暮らしはじめてからというもの自分の神経質さを痛感している。最初のころ奥さんの家に遊びに行ったとき、あまりに possible asthma triggers に溢れていて発作が起こるのではないかと恐怖で気が気でなかった。埃をキャッチする布製品や毛糸製品ばっかりじゃん!やめてくれよ!みたいな。発作がおこることはなかったし、もうだいたい慣れたけど。

布にせよ毛糸にせよ、肌触りがいいから人々は好きなのだよね。一方でこれらは house dust の巣窟になりがちなので、自分は無意識に避けている。カーテンはツルっとした化繊のものを買っていたし、ソファもラグも持たなかった。自分の親が同じ方針だったので特に気にしなかったが、結果として家は殺風景になる。屋内に温かい景観を与えたい人とは意見が衝突しがち。

部屋に置くものに限らず、この喘息トリガーの回避を内面化した態度とそうでない人の衝突は時折おこって困惑する。最近のハイライトは去年のフランス旅行。喫煙者満載のカフェで「ゆっくり過ごす」みたいのは完全な恐怖体験なのだが、そういう感覚は理解されない。

ただ、そりゃ理解できないよなとも思う。他人の恐怖を理解するのは難しい。たとえば被痴漢行為経験者が公共交通機関に感じる恐怖とか、自分はきっと理解できないよね。これは辛抱強くコミュニケーションしていくしかないのだろう。

自分の子は喘息持ちっぽい兆候を見せており、自分は家の現状がもつ悪影響を心配している。しかしこれはまだ顕著化していない問題なので、フェアな形で懸念を伝えるのが難しい。あまり悪化しないといいなと思いつつ暮らしている。

Shopping List を探す旅

|

Wunderlist がもうすぐなくなるので行き先を探さないといけない。

主要な使いみちは夫婦共有買い物リスト。条件としては iOS と Android 両対応で、できれば Web もあるとよい。結論としては Todoist でも使うか思っている。しょうじきそんなに好きではないが、ひげぽんも使っているので。(困った時はひげぽんの真似をしろ。これ人生の tips.)

眺めてはがっかりしたアプリたちを記録しておく。

  • Microsoft To Do: Wunderlist の公式後釜。出来は良い。しかし自分は Microsoft ID を mess up しがちでトラブルが怖いのと、あとは背後に巨大な Office の影がみえるのに抵抗がある。Microsoft にも Office にも他意はないが、そういう巨大なものに sign up したいわけではないのだよ・・・。じっさい Microsoft To Do のウェブアプリをみると Office への導線はあるが Office から To Do への導線はない。かわりに Outlook Tasks Powered by To Do とかいうのがあって、そうかお前が黒幕か、みたいな気分になる。Outlook にも他意はないが、そういうのはいらないの。自分が大企業の犬なせいで org chart の臭いに敏感すぎるかのもしれない。
  • Remember The Milk: まだあったのか!そして 2016 年に大型アップデートをし、ついにアイテムの順序を DnD で並べ替えられるようになったという。これだよこれ!・・・とおもったが、アプリがあまりにもゼロ年代というか肝心の並び替えができない。アホなの。ついでにウェブでは Google Sign-in できるがアプリではできないとか、そういえばゼロ年代世代ってこういう感じだったねーそんで mobile first みたいな標語が持て囃されたんだよねー・・・と懐古してしまった。ログインすると過去に productivity obsessしていた頃の黒歴史 TODO が発掘されたため、そっと削除。さようなら Web 2.0.
  • Any.do: 割とよくできていて個人的には好きなのだが、VC money を燃やしつつブレイクできてない感にあふれており、有り体にいうと数年で潰れそうな気配。 奥様にも使ってもらうため、あまり冒険したくない。
  • TickTick: アプリの起動が妙に遅いのと、なんとなく没個性なのでパス。いちおう GTask という Android アプリが元らしいので Android が主戦場のはずだが、それにしちゃシャキっとしなくね?

なお Wunderlist とは別に長期的なタスクのトラッキングには Basecamp を使っている。こいつを Todoist に統合できるとよいんだけど、複数のプロジェクトにある TODO を串刺しで一覧できる dashboard みたいのがないと Basecamp は置き換えられないな。

ツール探しは本来楽しいものであるはずだが、めんどくささしか感じない。老化か。


これとは別に自分の TODO を管理するアプリがほしいとぼんやり思っているが、今のところ何も使っていない。なぜかはうまく説明できないけど。これを機に Todoist 使うとするか・・・。

Vega-Lite: A Grammar of Interactive Graphics

|

Altair は vega-lite というのをつかっているらしいが、これと Vega の違いがよくわかっていなかったので元ネタの paper を読む。

Vega-lite も Vega もフォーマットが JSON である点は一緒。Vega が低レベルの表現なのに対し、Vega-lite はもうちょっと高位の表現を持ち、その高位の表現から Vega のデータを生成する。Vega-lite をみると、Altair は要するに Vega-lite の Python 表現なのだとわかる。

Vega にしろ Vega-lite にしろ、データを JSON につっこんで JS のライブラリに描画をさせるアプローチ。これによってホスト言語 (ex. Python) 非依存にできる。そして対話性を与えられる。

理論的には良さそうだが、実際には弱点もある。まずでかいデータに弱い。せっかく Pandas がでかいデータを持てるのに、それを JSON に変換すると効率性が失われる。実際データポイントの上限が 5000 個に制限されており、適当に 1000 ずつサンプリングしたヒストグラム用のデータを 6 個つなげるとエラーになったりする。というか昨日その問題にぶつかった。サンプル数を減らせばいいんだけど、そういう制限気にするのかったるいのだよ・・・。データポイントの上限にヒットしていないのに描画中に死ぬこともある。ipynb も無駄にでかくなる。PNG を保存したい場合は Selenium 使ってねとかアホなの?(実際は右クリックで "save image" することもできるが。)更にこの裏返しとして、遅い。

対価として得られるはずの対話性: コードを書いてる身からすると図の上での対話性とか別にいらないのだよね。コードをいじって再描画すればいいので。図の上での対話性は、たとえば The UpshotDistill などの data journalism みたいな文脈で意味があるのは理解している。D3 とかをやってた研究室発なのでそういう対話的可視化に注力しているのもわかる。でも自分には必要ないし、そのためのコストが生産性に跳ね返ってくるのが厳しい。

一方でブレイクダウンをいい感じにやってくれる高位表現というアイデアの力は、Altair をさわっているとたしかに伝わってくる。こういう気の利いた API を Python ネイティブでバリっと実装したライブラリがほしいなあ。

Python native の気の利いた API というと Seaborn があるわけだが、一旦 Altair をみたあと Seaborn をみるとしょぼい。Altair/Vega-Lite の uniformity は、冗長性はいまいちだけど納得感がある。Seaborn はそれと比べるとだいぶ ad-hoc である。というわけで自分が Seaborn を使うことはなさそう。

まあしばらくは DataFrame/Matplotlib と Altair の間を行ったり来たりします、というかまた SQL 仕事の機会がきたら考えます。


なお paper は Grammar-Based Visual Encoding の歴史を軽くおさらいしており、そこは勉強になった。The Grammar of Graphics はそのうち読みたいと思いつつ何年もたっているけれど、これが Tableau の言及になっていたとは知らなかった。

はー可視化とか一度くらい真面目に勉強してみたいもんだわ・・・。

Book: Friendfluence

|

友達って大事だよね、変な友達もつと大変だったりするけど、でも大切だよね、という本。ベタな自分語りではなくよく取材されて書けれており、そうですねと思いながら読んだ。

自分の人間関係の雑さを反省し考え直すきっかけになればと思って読んだが、友達大事だよね、そうだよね・・・みたいな気分以上のものは特になかった。別に social skill みたいなものを学びたいわけではないが、その手の自己啓発色が強いのを読む方が何かしら provoke されるかもしれない・・・が、またこんど。

Revisiting FTrace

|

ふと思い立って ftrace 周辺のドキュメントを軽く冷やかしてみる。数年前から Sphinx ベースになったらしい・・・。

自分の五年前の理解は、間違ってはいないがだいぶ雑だった。

FTrace はもともとはカーネルのコードで GCC のプロファイラオプションというか gprof を使えるようにするというもので、ただカーネル空間にはプロファイラのランタイムがないのでカーネルが自前のランタイムを提供していた、らしい。そのランタイムのインフラに他のトレース機構、たとえば tracepoint が乗っかってきた。ここでいうランタイムは、具体的には CPU スレッド単位のリングバッファ。Android の ATrace もこのバッファに便乗している。

コンパイラが関数単位で instrument するタイプのプロファイラは全然スケールしないので、ある規模以上のコードベースではふつう sampling-based profiler を使う。Linux も perf とかはサンプリングベースだったはず。

ただしそれとは別に、FTrace は "dynamic ftrace" という仕組みを追加した。カーネルのコードをプロファイラ有りでビルドしつつ、ランタイム関数の呼び出しは起動時に全部 nop で塗りつぶす。この塗りつぶしができるよう、呼び出し箇所の一覧を事前に作っておく。そして API で関数を指示すると nop の所にランタイムへの呼び出しを書き戻す。デバッガがやるようなことをカーネルの機能として提供している。たぶん今はこっちの方が主流っぽい。手元の Ubuntu ではふつうに有効になっている。Android はセキュリティのためカーネルを read only にしている都合で無効らしい。でも性能改善のドキュメントで紹介するくらいなら userdebug では有効にしておいてくれや・・・カーネルのリビルドとかやりかたわかんないよ・・・。

そんなかんじで Android からはカーネルの中に明示的にうめこまれた tracepoint たちとユーザ空間から書き込まれたデータしかトレースできない。まあいいんだけど。

Tracepoint のようにプログラマが手で足すにしろ Ftrace のようにコンパイラの助けを借りるにしろ、トレースの記録通知と通知を受けて何をするかは分離されており、イベントハンドラみたいのを(カーネル空間で)登録できる。リングバッファに書き込む、という部分はそのイベントハンドラの責務となっている様子。なかなか正しいデザインと言える。Brendan Greg の BPF 本では BPF をカーネルのイベントハンドラと表現していた。実際トレーシングのインフラがイベントハンドラを提供しているんだね。

Perfetto も自分でトレースフックのカーネルモジュールを書けば効率的にデータを読み出せそうなものだが、そんなカーネル依存のことはしてないだろうなあ。

リングバッファに話をもどすと、バッファには trace_pipe を読むとでてくるテキストが直接書き込まれているわけではなく、何らかのバイナリ列を書き込む。そして trace_pipe を解釈するタイミングでそのバイナリをテキストに整形する。なお ATrace はユーザ空間から任意のテキストを書き込める trace_marker という API を使っているので、じっさいバッファにテキストを書き込む。整形の仕組みをユーザ空間からもアクセスされてくれればよかったのに・・・。なお trace_marker_raw というバイナリ列を直に書き込む API もあることはある。

トレーシングというものの実装としてはだいぶがんばっている例の一つだと思うので、参考のためにもうちょっとコードを読んでみたいもんです。そのうち。

Revisiting Altair

|

久しぶりにログを SQL で調べものをする仕事。二日くらいで終了。

昔にくらべ SQL は相変わらず下手くそだが Pandas/Matplotlib スキルが上がっており、それなりのチャートを Pandas だけで出せるようになってきた。結果として、二年前の "SQL 書くなら Altair 必須" という気分は消え去り、気がつくとぜんぶ Pandas で済ませている。たぶん当時は Pandas と Matplotlib を混ぜて使えなかった。今は Pandas の plot() が matplotlib の薄いラッパであるという事実を活用し、subplot したり axes 重ね書きしたりできるようになった。

とはいえもうちょっとモダンでシュッとしたライブラリを使えた方がいいんじゃね・・・という反省もあり、今回描いたチャートを一通り Altair に移植してみた。が ...mixed feeling. コードはすごいコンパクトかつ宣言的になるし、描かれるチャートもいいかんじ。でも自分の生産性がどれだけあがるかは微妙。

生産性を妨げる要素は、大きく分けて二つある。

ひとつ目は、自分のデータ力の低さ。Altair は入力の DataFrame が tidy data 的に正規化されていることを期待している。Altair が ggplot の追っかけである事実を考えると当たり前の帰結なんだけど、自分の手元のデータは必ずしも tidy でないので reshape しないといけない。でもデータの reshape とか素人には認知的負荷が高いのだよね。Pandas の API もわかんないし。今回のデータでいうと、ひとつ目のチャートは pandas.concat で複数の DataFrame を連結する必要があり、ふたつ目のチャートでは DataFrame.melt というので unpivot した。データの最終型がわかっていればこうした API を探す心の余裕もあるけど、実際の問題の中でごちゃごちゃやってる時には新しい API をみつける気力が無い気がする。同様に SQL も一段階がんばって書かないといけない。最終的に tidy な DataFrame をつくるための小細工とかを SQL に入れる必要があるので。でも SQL とかわかんないのだよ・・・。

一方で Pandas を生で使っていると適当に for 文を回しながらゴミのようなデータから手続き的に欲しい絵が出せるので、問題を考える mental bandwidth を浪費しない。たとえば一つの tidy DataFrame を使うかわりに、二つの単純な SQL のクエリから持ってきた二つの DataFrame を順番に使う、みたいなことができる。ただしコードはゴミ。

Hadley Wickham の Tidyverse がスパルタなデータサイエンティスト養成ギプスとして機能しているように Altair を tidy data 養成ギプスとして受け入れるのがあるべき姿なんだろうけど、自分なんて通りすがりで四半期に一回くらい SQL 書くだけなので、正直そこまでがんばりたくない。弱音吐いちゃう。

ふたつ目は Altair の API ergonomics。

Matlab あたりから延々と鍛え抜かれ磨かれた Pandas/Matplotlib の API は色々ダサいが、一方で使用頻度の高い機能がトップレベルの雑なキーワード引数でズバっと実現できるハフマン符号化的強さがある。しかももれなく SO の回答がある。たとえば outlier を適当に無視しつつレイテンシのグラフを書きたい時、Pandas なら df.plot(...., y='latency', ylim=(0, 10000)...) とかやればいいところで Altair は ....encode(..., y=alt.Y('latency', scale=alt.Scale(domain=(0, 10000), clamp=True)), ...) とか書かないといけない。気持ちはわかるがもうちょっとなんとかなんないんですかね・・・。Altair も所々にショートカットを揃えようという意思は感じるが、ベースの API がやや大げさな上にプロジェクトの若さゆえユーザビリティの苦情による API の圧縮が進んでおらず、上のようなかったるさにしばしば遭遇する。SO も頼りにならない。

Ergonomics 上の問題その二は、ベースにある Vega というオブジェクトモデルが言語非依存なせいで発生する冗長さ。Altair は自分自身がデータを dice and slice する仕組みを色々もっている。まあデータのブレイクダウンが必要なのである程度は仕方ないと思うんだけど、Pandas でやらせてくんないかなあ。一連の Data Transformation の仕組みなんて vega expression というナゾのミニ言語を使わされて、しらねーよという気分。ただし、いまドキュメントをみたら「できるなら Pandas 側でやりましょう。そのほうが便利です」と書いてあるのにきづいた。なんなの・・・。

Altair にせよ Vega にせよ ggplot と戦う気なだけあって色々よく考えられ、その結果としてよく練られた抽象がある。ドキュメントも割とよく書けてる。ただ裏を返すと大袈裟で、学習勾配がきつい。通りすがりのモバイルプログラマにはやや荷が重い。

がしかし!データワナビーとして我々は!背伸びをしてでもモダンなフリをキメるべきではないか!問題解決原理主義者に負けるな!

コードは短くなるしチャートはシュっとしているし DataFrame は Tidy になるし、良いことは良いんだよねー。まあ締め切りの厳しさと相談しつつぼちぼち使っていきたい所存。SQL 仕事だけじゃなく普段のベンチマークの結果整形とかにも使って体を慣らしていくのが良いかもしれない。

追記

Colab の local runtime ではちゃんと動かないことが判明しがっかり・・・。

高速化日記 (10) - The Deprecated Way

|

前回かいた Systrace (というか Ftrace) データのパース、やろうとおもいつつ procrastinate していた理由の一つは、それより Perfetto の trace processor を使う方が良いのではと思っていたからだった。が、まあ気のせいだったね。

Trace processor は Perfetto のダンプに sqlite でアクセスできる機能があり、これは魅力的である。ただ現実には自分は特別 SQL が流暢ではないので Python で regexp して Pandas で加工した方が速いし、できることも多い。例えばこのあいだアロケーションのレイテンシとサイズの相関を求めたが、その解釈にはネストした trace section を紐付ける必要がある。これは for 文で書けば自明だが SQL だとどうしていいかわからん。しかもその trace processor には Pandas インテグレーションとかがないので可視化もできない。使えねー。

より深刻な問題は Perfetto が lossy である点。Perfetto はオンデバイスのコマンドで、自分でバッファを持っている。ということは ATrace の API も Perfetto に直接フィードするのかな・・・と思いきやそんなことはなく、引き続きカーネルの trace_marker書き込んでいる。言われてみれば atrace/systrace の動作を壊すわけにはいかないので当たり前だが、つまり Perfetto は ftrace のバッファをパースして Perfetto の protobuf に詰め替えているということである。しかもオンデバイスで!まじか。そんなことで余計な CPU サイクル使わないでくれよ・・・しかもオンデバイスなんてロジックにバグあったら直せないじゃん・・・デバイスの外でやれよ・・・。

オンデバイスでやりたいのはオンメモリのバッファでけでなくファイルに書き出す長時間トレースをサポートしないなどの事情と関係あるのは理解している。しかしトレードオフには納得できない。実際、Q のオンデバイストレース (perfetto フォーマット) を Systrace のデータに変換しようとすると失敗したり、エラーにはならないが表示が壊れることがしょっちゅうある。一方で Perfetto ネイティブなビューアは機能がたらない。だめじゃん。Perfetto Native UI は wasm とかをつかっているあたり、いかにも実用的なものをつくる気のなさを感じる。というとディスりすぎかもしれないが。

自分が Perfetto への乗り換えを考えていたのは Q から on-device tracing のフォーマットが Perfetto に変更されたからだが、こうした不利益をわざわざ受け入れる必要はないと考えを改めた。特に ATrace が引き続き ftrace に依存している事実を考えると ftrace のバッファが the source of the truth なわけで、間に lossy な Perfetto を挟むのはリスク。やめやめ。引き続き Systrace で生きていきますわ。

Perfetto は Chrome と Android 共通のインフラにすると主張している。そんなら Chrome で枯らした後で Android に持ってきてほしかった。勤務先には "a shiny but work in progress way と a functional but deprecated way がある" という格言がある。Perfetto はその一例になっている感。そういう場合は常に the deprecated way を進めというのが先人の知恵で、自分はそれを体現してしまったのだった。Sigh.

追記

Perfetto の UI がバージョンアップし、以前は表示されなかったメトリクスが見えるようになった。そして後ろの席の同僚は文句をいいつつがんばって perfetto コマンドを使っていた。そうですね我々会社員には使ってバグを踏んで報告して直させる、という暗黙の責務もあるんですよね・・・。職業倫理の差を感じる。はーつかうか・・・しかし Colab から読めねーんだよなー・・・ヒマなら業務外で Perfetto に首を突っ込みたい所だがちょっとなー・・・。

高速化日記 (9) - Processing Traces

|

前回のつづき。

機能 F が招くコマ落ちの原因探求、最初の被疑者たる CPU 負荷は無罪の見通しとなったため、他の指標をさがす。

コマ落ちの直接の原因である HAL API A のレイテンシは機能 F の有無でどのくらい違うんだろうか。Systrace の HTML を肉眼で眺めていてもいまいち決定的な違いが見えない。重い腰を挙げて Colab を開き、適当に正規表現を書いて Systrace 内のデータに含まれる該当 API のトレースを読んでレイテンシを抜き出す。そして時系列にプロットしてみる。

と、やはり F 有効時はちょっと悪い気がする。しかしなぜかがわからない・・・。

さて、件の API は何かと言うと、共有メモリ (gralloc) のアロケーションである。そして件の API 内部のトレースには要求されたメモリのサイズが書いてある。このサイズを見ると、誰が要求したメモリなのかがひと目でわかる。そしてサイズがでかいほどレイテンシは大きくなりがち。

ふと思い立ってパーサのロジックを書き足し、プロット (scatterplot) にサイズを反映してみる。X 軸を時系列、Y をレイテンシ。サイズを色に割り振ると・・・やはりサイズがでかいアロケーションは遅い。そして F 有効時はそもそも「サイズのでかいアロケーション」の数が多い!沢山の細かいアロケーションに隠れていて気づかなかったが、こりゃ遅くなるわ!アプリのログや同僚へのインタビューでこの事実を確認する。振り返るとアルゴリズムの性質から自然な帰結である。OMG.

この初歩的な問題に何週間も気づいてなかったのは shame. 肉眼さん・・・。

API リクエストの頻度自体は他の機能によるリクエストが支配的で、総数は機能 F の有無で大きな差はない。しかし他の機能がリクエストするアロケーションはぜんぶサイズが小さい。F によるアロケーションはでかい。しかも F のスレッドが直接リクエストを発行するのではなく、F がメモリを長時間保有するせいで普段はプロセス内で資源が再利用され省略されるアロケーションが発生してしまうという間接的な症状なのでグチャっとしたトレースを睨むだけでは気付けなかった。

というわけで可視化重要。あとゴチャっとしたデータをパースして構造化するのも重要。トレースをパースするコード片を書き溜めないとな。

可視化素人としては subplot の利用と scatterplot の color axis を使えるようになったのが最近のブレークスルーであった。

高速化日記 (8) - Load Average and Jiffies

|

とある機能 F を有効にするととある操作 T のあとでコマ落ちするという、ユーザ(上司)の手元では再現するが手元での再現率がいまいちなバグを直そうと苦戦しつつはや数週間。

ハイレベルには、F を有効にした状態で操作 T をトリガーすると瞬間的に CPU の負荷が跳ね上がり、画像パイプラインのクリティカルパスにある HAL API である A のレイテンシがフレームレートを超えてしまい、コマ落ちに至る。

A のレイテンシは普段は余裕で予算に収まるのだが、他のタスクが増えると CPU のサイクルを奪われて遅くなる。症状から A の重要性は明らかなので A が動くスレッドを SCHED_FIFO にしましょうと主張してパッチを書いたが、OS のひとにインパクトでかすぎるのでダメと押し返されうーむとなる。

なお HAL の一部では SCHED_FIFO はぼちぼち使われている...まあ「ぼちぼち」は overstatement かもしれないですね。はい。従ってこの問題は priority inheritance で解決されるのが筋だが、俺のせいじゃねー的 API のせいでその仕組みは使えないのだった。


それはさておき操作 T 発動時の CPU 負荷は機能 F の有無に関わらずどのみち高く、全てのコアが振り切る。機能 F のアルゴリズムが高価なのは事実だろうが、ほんとにコマ落ちの有無を決めるような規模のインパクトがあるのだろうか。こういう雑な仮説を盲目的に信じては痛い目に逢い続けて数年、いちおう検証しておこうと思い立つ。

タスクが多すぎてタイムスライスがもらえないとか、ロードアベレージみたいなのをみればいいんだっけ?と検索すると Brendan Gregg のブログがヒット。要約すると Linux の load average の数字は微妙なので他の指標を使っときなよとのこと。他の指標としては BPF が使えるよ、とかいうが Android でそれは大変。別の候補として紹介されている  /proc/schedstat ファイルを polling してみることにする。

ドキュメントおよびインターネットによると同ファイル内で "sum of all time spent waiting to run by tasks on this processor (in jiffies)" という数字を監視すればよいようだが、Jiffies ってなんやねん。その manpage およびインターネットによるとスケジューラのクロック、たとえば 100Hz だったら 10ms とからしい。なるほど・・・と値を眺めるが、全然合ってない。桁がいくつもちがう。最初は自分の雑なコードが計算ミスをしてるのかと思ったがそんなこともなさそうな雰囲気。はーなんだこりゃ・・・と落胆して帰宅。

翌日気を取り直してカーネルのコードを睨むと、数字の出どころは sched_clock() という関数らしい。実装が複数あるのでよくわからないが、ドキュメントは単位をナノ秒と主張している。 10ms と 1ns じゃだいぶ違うわけだわ・・・。ナノ秒として計算してみるとそれっぽい数字になる。やれやれ。カーネルのドキュメントも案外信用できない。


さてこうして計算したオレオレロードアベレージを定期的に ATrace_setCounter() しつつアプリをつついてトレースを眺めたところ・・・機能 F が有効だろうが無効だろうがロードに全然違いがない。

冷静になってトレースを見直すと機能 F はスレッドが一つ増えはするものの大した並列度はなく、そのスレッドも GPU に計算を投げたり他のスレッドの計算結果を待ったりで必ずしも全力では回っていない。仮説敗れる。はー・・・。

ではなぜ機能 F はコマ落ちを招くのだろうか。ユーザ(上司)の思い込み?でも自分の手元で問題がおきるときも機能 F の有無は影響ある気がするのだよなあ。


そして書いていて気づいたがトレースには sched の tracepoint が含まれているのだからカーネルが集めた stats を使うより自分で事後的に計算した方が色々わかることが多いきがする。たとえばカーネルの stats ではレイテンシの分布はわからない。ただその計算をするにはもうちょっとカーネル詳しくならんとムリだな。はー・・・。

高速化日記 (7) - Removing Code

|

年末にハカソンがあったので、自分は機能を削るとどれだけ起動が速くなるか実際にコードを消して調べることにした。一つ一つモードを消し、UI を外し・・・と一週間コードを消し続けた。しかし一ミリも速くならなかった。がっかり。

理由を考える。

まず前向きな理由がありうる: 余計なコードはクリティカルパスから取り除かれている。自分は余計なものをクリティカルパスからどかす作業を延々とやってきたわけだから、これはまあまあ的をいている。一方で、どうにも信じがたい。

最初の論点と少し関係がある仮説:起動などを遅くしているのは、モードや UI といった user facing feature のコードではなくフラグの定義やモニタリングのようなインフラっぽいコードである。そういうコードはどのみち消せないことがわかっているのでがんばって消すことをしなかったが、実際はまあまあクリティカルパスにあるのでほんとは消してみるべきだったのかもしれない。ただあちこちに断片的に埋め込まれてるので消すのが難しいのだよね。

このハカソンの少し前にフラグ取得の IPC がフラグの数だけ呼ばれまくっていたのを助っ人高速化隊のエースが発見し、それをバッチ化したら起動がぐっと速くなる出来事があった。これはインフラ税の存在を裏付けている。

自分が消していない部分に遅さがあるという意味だと、画像処理や C++ の中にある余計なコードがクリティカルパスにある可能性もある。画像処理パイプラインの「機能」は、わかる人には消せるのかもしれないが自分にはむずかしい。そしてこれらの「機能」は年々複雑化が進み、遅くなっている。

もうちょっと red herring な説: 一旦コードに持ち込まれた複雑さは、単純にコードを消すだけではキャンセルすることができない。たとえば新しい機能のためにリファクタリングして間接化や抽象化を足したとする。コードを消すと抽象化の裏にある実装は消えるが、抽象や間接化そのものが消えるわけではない。コードを消したら、そのあとよくコードを読み直して余計な抽象化を見つけ出し、それをベタなコードになおしてはじめてオーバーヘッドを取り除くことができる。かもしれない。自分は心の奥底でこの説を信じている一方、検証するのは難しいいイチャモンという面もあるのであまり強く主張する気にもなれない。


いずれにせよ「コードがでかくなると遅くなる」というのは必ずしも絶対的な真実ではないし、逆が真とも限らない。たとえばデスクトップ環境に巨大なアプリをインストールしたところで(そのアプリを起動しなければ)対して遅くはならない。一方でサーバに daemon の類をインストールすれば少しは遅くなるだろう。Android のアプリはその間くらい。単一プログラム内の余計なコードがデスクトップアプリのインストールとサーバの daemon のどちらに近いかは、ケースバイケース。というわけで「コードがでかい = 遅い」は経験則のひとつに留め、鵜呑みするのはやめましょう、という話。

そしてコードを消す話をするといつもこれを思い出してしまう人生の呪い。

Book: Women's Work

|

Women's Work: A Reckoning with Work and Home

The Decade of the Parenting Manual - NYT Parenting で紹介されていたので読んでみた。ここにある本は半分くらい読んでおり我ながらサヨリべすぎて苦笑。そしてマニュアルではなく読み物ばかりだな、このリスト。

この "Women's Work" も例にもれず子育てガイドではなく読み物だった。著者自身の Memoir. もともと新聞記者の海外特派員だった著者が中国(北京)で妊娠し(配偶者もジャーナリストとして一緒に中国にいた)、新聞社の仕事をやめて子育てしながら本を書いてライターとしてのキャリアを続けようとする。しかし非協力的な夫を通じてジェンダー格差の現実に面し仕事が進まず、仕方なく nanny を雇ってみたら今度は中国の貧困やジェンダー格差に加担している自分に気づき思い悩む、という話。途中で第二子が生まれ、そのタイミングで夫の仕事の都合にあわせインド(New Delhi)に引っ越す。そこでまた nanny を雇い、同じ悩みを繰り返す。

ここで終わると傲慢なアメリカ人のうざい独り言なのだが、後半ではジャーナリストとして過去に自分が雇った(そのうち一人はクビにした)nanny に会いに行ってインタビューをする。そこは面白い。自分が employee として見ていた nanny たちのおかれた現実をジャーナリストとして revisit する著者の倫理的葛藤みたいのがよく書けている。

あと「うざい独り言」はやや言い過ぎで、自分も外国で子を育てている手前、そこにはある種の共感があった(インドに住むアメリカ人と比べるとカネの力で殴る経済力はないが)。そして自分はジェンダー格差の受益者なので、著者が夫にブチ切れるところでは胃が痛んだ。この手の本にでてくる夫は割とみんなひどい気がするのだが、自分がそうでないとなぜ言えよう・・・。

Amazon のレビューを見ると "White Privilege Horror Show" という批判がある。でも著者はそれに自覚的で、けれどその傲慢さを隠さない正直さみたいなのが面白いと思う。自分も読んでいる途中で著者のアメリカ人っぷりに笑ってしまう箇所がいくつもあった。書き手としての「声」がある点で「正しさ」に塗り固められた Lean In より個人的には好ましい。声といえば audiobook の narration はその鼻持ちなら無さを完璧にとらえており、最近きいた audiobook の中では最高峰の出来。


子供ができたら親である自分のキャリアは終わる。それは仕方ない。理由はどうであれ、多くの母親が仕事を辞め専業母親化する事実がそれを伝えている。そうしたコストの fair share を引き取ろうとしたら、定時強制の化石技能な万年末端になるくらいは妥当。理屈ではそうわかっていても、日々の impluse がしらずしらずのうちに privilege を claim してしまう。たまにこういう本を読み calibrate していきたい。

Book: Zero To One / The Startup Way

|

割と良かった。スタートアップは陰謀論でカルトなんだよ!と衒いもなく言い切る政治的正しく無さといい、なにかと引用される文献が渋いところといい、ファンもアンチも多いのがよくわかる。過剰なかっこよさ。あと薄いのも良いね。個人的には、世界の秘密を暴けるような仕事がよいという下りがよかった。


リーンスタートアップどういう話か忘れてたのでいい復習になった。ちゃんと innovation accounting してる企業がどれだけあるのか見当もつかないし大企業にそれを売り込める気もまったくしないが、シリコンバレーの会社というのはこういうのを読んだり本物のスタートアップで体感したりした下々が草の根的に存在するので、上の方が雑でも少しはスタートアップ・ウェイがまじりこむのだろうなと思った。

Amazon のレビューを読むと「風呂敷広げすぎ」「よくある企業改革論」みたいな批判が目につく。まあそうなのだろうね。アイデアは Lean Startup から変わってない気がするので。


こういうビジネス書を読んではなくそほじりながらフンフンとかいってるあたり我ながらおっさんだなー。ちなみに actionable な要素は特になし。

Link: Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer

via Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer

ARM の割と新しめな GPU (Bifrost) の資料を眺める。

ARM の GPU には複数の "Shader Core" がある。最大で 32 個くらい。NVIDIA の GPU でいう SM に相当する、とおもわれる。

個々の Shader Core には複数の "Execution Engine" が入っている。上の資料で参照されている G71 というやつ(最新ではない)だと 3 つの EE が入っているらしい。EE  は NVIDIA の GPU でいうところの "CUDA Core" みたいなものだと思われる。

適当な NVIDIA の GPU (ここでは Turing) の資料とくらべてみる。

Turing の SM の数は、構成によって 28-72 個である。一方で SM あたりの CUDA Core の数は 64-128 である。この比率は ARM GPU とだいぶ違う。SM/Share Core の数はせいぜい数倍程度しか違わない一方、それらあたりの EE / CUDA Core の数は 10-20 倍違う。ARM も EE の SIMD 並列化を "Warp" と呼んでいるが、NVIDIA の Warp と比べると断然狭い、グラフィクスの頂点一個を並列処理するくらいがせいぜいに見える。

これは自分の直感の逆だった。ARM の GPU は、SIMD つきのシンプルなマルチコア CPU といった風情。しかもコア数が CPU より多い。GPU はおもったよりたくさんの異種タスクを詰め込めるように見える(他にボトルネックがなければ)。一方で NVIDIA の GPU が想定されているようなでかいベクトルをバンと並列に計算する能力を個々の Shader Core は持っていない。

これは・・・どうなの?少なくとも OpenGL を使っている限り単一プロセスがこのマルチコアの性能を完全に引き出すことはできないよね。なぜなら OpenGL はマルチスレッドのタスクを投げられない・・・というと語弊があるが投げにくいから。もちろんでかい頂点列をマルチコア向けに分割して処理するくらいは GPU なりドライバなりがやってると思うけれども, NVIDIA が暗に築いてきたメンタルモデルを逆手に取る利点はなんかあるのだろうか・・・。不思議。まあ色々なプロセスやスレッドから同時に叩かれるのを助ける面はあるかもしれない。

ARM GPU の理解を深めても自分の役には立たない。Qualcomm の GPU はどうなってんだろう・・・と調べるが、さっぱりわからん。相変わらずだなこいつらは・・・。

Picture Taking Practice, A Month Later.

|

Picture Taking Practice をはじめて現在 36 日分経過。

  • 完全に毎日はできないが、まあいいです。人間風邪引いたり調子わるかったりするので。精神衛生を損なうと写真を撮らなくなりがちで、ある意味バロメータになっている。
  • 一日に一回 curate する頻度は割とちょうどいい感じがする。寝る前に 10 分くらいなので負担がない。
  • 家族日記として機能している。自分の個人的な記録はないが、どこいったみたいな家族としての記録が残るのはよい。
  • どうせとるならフルフレームが欲しいなーと思う一方、でかいのはムリだなという気分も深まる。でかいカメラを抱えて隣の公園で散歩するのもやはり silly に感じてしまうので。APS-C くらいでいいのかもなあ・・・というか 4/3 でいいのか・・・など無駄な物欲的悩み。
  • アプリ的な話
    • 奥様にも写真を追加してもらうようにした。Photos はこれができるのが便利。
    • Timelapse がすばらしい。日常の banality も圧縮によって消える。
    • Portrait も、被写体を強調する目的でだいぶよい。ボケはひきつづきだいぶ雑だが、Pixel 4 は激しい壊れ方をすることは減った(人間相手なら)。スマホで眺める分には許容範囲かなと思う。
    • Night mode は子供を録るには不向き。水族館でも普通の Photo mode の方が良い。
    • 週末、プレイデート友達家族と外出した先で子らが遊ぶ様子を両親 x2 の四名がスマホで写真をとる瞬間にはその sillyness に躊躇がある。
    • カメラアプリのバグに遭遇しがち。ぐぐぐ・・・。

時間予算日記 (18)

|

休暇中に精神衛生の劣化が限度を超えてしまい、ふと思い出して朝にジムで走ってみると・・・世界が!明るくなったぞ!(比喩的に!)そういえば走った日ってこういうかんじだったわ。すっかり忘れていた。トラブル気味だった大腸も元気になった。

スクーター通勤に切り替えて以来運動ができていなかったが、それでも通勤という軽運動はしていた。しかし休暇に入りそれすら途絶えていた。もっというと、通勤ランは色々気が散りがちでジムで走るほどの効能はない。ジムで走るみたいな純粋な心拍数向上活動は子が生まれて以来三年ぶりくらいな気がする。

睡眠に続き、目をそらしていた健康上の懸念を突きつけられた気分。じっさい休暇中は色々とストレスがたまりがちで、夫婦間の空気を険悪にしないようかなりの努力を要した(つまり、たぶんちょっと険悪になってたね。)色々理由を考えていたが、単に運動不足だったとは。脳内麻薬欠乏やばい。

やはり運動は必要に思える。薬物の質という点でジムなり公園で走るのが望ましい。そして薬効を最大限活かすには朝がよい。休暇前は朝おきて会社のメールを読んでいたが、これは諦めてジムに行くべし。


とはいえジムでの運動は着替えやシャワーを含む E2E で一時間。きびしい。5:00 に起きて、5:30-6:30 運動、そのあと家事。朝のメールが消える結果、8 時間労働を達成できない問題は振り出しに戻ってしまう。このトレードオフは字面からはあまり自明でないが、脳内麻薬の欠乏(に無自覚であること)は無視しがたい恐怖を感じるのではやり運動は取り戻したい。

一方、これを時間割とすると家でラップトップを触る時間はほぼ消えてなくなる。いまは就寝前にちょこっとさわったりしているが、大して生産的でない割に睡眠を削ってしまい望ましくない。

年末からは fast を兼ねて会社では昼飯を食べず、かつちょっと時間をちょろまかして昼食前後一時間半くらいを課外活動に当てている。これが自分の課外活動の全てとなる。八時間労働できないのに時間ちょろまかすのどうなの、という話はあるけれど、ただ子の着替えやトイレを待つのに使う時間と課外活動に使う時間ではトレードオフの妥当性が違うのだよ。

家でパソコンとかさわらないプログラマってこういうかんじか・・・ほんとに・・・?しかしここで躊躇して運動しないと鬱病になってしまうのでとりあえず運動はします。はい。今日もスタバまで走ってきたよ。

A Short Reflection 2019

|

今年の振り返り。

仕事:

  • 自分のなかではがんばって働いたつもりだけれど人事考課に変化はなかったので、成果はそこそこということでしょう。チームがだいぶ強化された結果、あれもこれもやらなくてよくなったのはよかった。
  • 課外活動の時間はどんどんなくなって、クビになるまで今の仕事にしがみつくしかないという現実の壁は高くなる一方。これを打破するには健康か今の仕事か家庭のいずれかを損ねるしかないとはっきりしているが、そうはしていない。

生活:

  • Podcast をやめた結果、個人的な時間/心的予算をとりすぎている後ろめたさはなくなった。一方で子供や家のために十分に考えたり行動したりできているかというとそうでもない。自分は selfish な成分が強すぎ、子のことをいつも気にかけている「良き親」でない。なんというか intrinsic な drive がない。結果として後手に回っては後悔してばかり。システムで後押ししないとだめそう。
  • 運動する時間すらなくなって、精神衛生に不安がある。

自分の行き場のなさに向き合うと暗い気持ちになってしまう。とはいえ今のところ子は健やかに育っており、自分も奥様も概ね健康で、まともな職もあり、そういうベースラインが維持できている事実は appreciate したい。ベースラインの維持は割と高く付くこともわかったけれど。

(Audio)books 2019

|

12冊。うち子供関係 3 冊。健康関係 3 冊, self-help 2 冊。アメリカ関係 2 冊。軽い技術書 2 冊。がっかりなスループットとラインナップだが、たまにはがっかりさを直視しないといけない。いつもしている気もするが。つんどく、つまみぐい、中断したやつらは書いてない。

ぜんぶ雑に感想をつけられたのはよかった。

どうでもいいウェブをみるノリでどうでもいい技術書を読むのは悪くないかもしれないと、どうでもいい技術書二冊を epub で読んで思う。ブラウザのタブに pin しておくのがいいのかもしれない。いっぽうどうでもいいもの読むならウェブの記事でよくね、とも思う。

来年は・・・と意識高い目標を口にしかかったが、嘘になる確率がたかいのでやめておく。

Book: Why We Sleep

|

睡眠学者が睡眠の重要性を説く本。睡眠をおろそかにしてた自分を反省した。

個人的な発見は、まず睡眠は睡眠不足してる間だけでなく永続的なダメージがあるということ。なので「一時的にがんばる」みたいのは一見するほどアイデアではない。どのみち生産性がおちるので良いアイデアではないのだけれど。

もうひとつは寝不足時の自動車運転のヤバさ。わかってはいたけど具体的な数字を挙げあれるとウっとなる。寝不足とアル中は事故率に大差ないのに寝不足が放置されているのは社会としてよくないと著者は説く。

睡眠のリズム。体のリズムは固定されていて急にはかわらないので、日によって就寝にばらつきがあると睡眠の質がさがる。つまり遅くまで起きていたぶん朝寝するとか、前の日が寝不足だったぶん早く寝るとか、意味はあるが規則正しく寝起きするより効率が悪い。

自分の朝の活動は睡眠不足だったと反省し、目覚ましを使うのをやめた。八時間睡眠 (sleep opportunity - 布団に入ってから起きるまで) を推奨されているので 21 時に寝て 5 時に起きることにして一週間くらい経過。わかったこととしては、なにもしなくても普通に 5 時くらいには目が覚める。自分は 2-3 時すぎたあたりからずっと眠りが浅く、どうしたものかと思う。ただ眠りが浅いからといって 3 時とかに起きると昼間眠いので、浅いとはいえいちおう睡眠の効果は得られているっぽい。

カフェインも昼に一杯飲むだけに変更など、ほかにも細々と生活を見直した。なお睡眠 good practice などは特別新しい話はなく、それよりは睡眠不足のヤバさを突きつけるのが主な論点。ただ論点を示された上でこうしろといわれるとだいぶ説得力がある。

朝の活動の時間が減り、かつ夜もダラダラせず寝るようにしてるので、一日が 1-2 時間短くなった。ただでさえ時間がないというのにどうしたものかと考える。が、それは別エントリで書きます。昼間の眠気は今のところ完全になくなった。


しかし朝の活動の寝不足なんてかわいいもので、自分は結婚するまでずっと寝不足だった気がするな。インターネット依存にありがちなこととして。寝不足がはじまったのをふりかえると・・・たぶん学生時代の夜間インターネット定額制度(テレホーダイだっけ?)あたりな気がする。あれはマジで壊滅的な制度だったと今にして思うのだった。テレホーダイ世代は集団訴訟すべき。まあ人のせいにしても仕方ない・・・。

最初の会社の頃なんてたまに徹夜したりとか夜中まで酒飲んだりとか、そんで昼間は会社で居眠り。狂ってたとしかいいようがない。まあ若い頃は色々おかしかった。そういう愚かな若者にならずちゃんと暮らしてた人がエリートなのです。

Learning at work is work, and we must make space for it | Hacker News

|

via Learning at work is work, and we must make space for it | Hacker News

HN のコメ欄は本文を読まずヘッドラインだけみて言いたいことだけいっているクソコメで盛り上がっているが、自分も興味のあるテーマだったので PDF を買って読んだ。

内容としては: "Boot Camp" みたいのでなにかを勉強したり教わったりしてスキルや知識を身につけるのは "Incremental Learning" であって、大きな飛躍はない。一方 "Playground" で実際になにかをやって、その体験を内省的に振り返り、新しい自分を発見する "Transformative Learning" には飛躍がある、そういうのをやろうな・・・みたいな話だった。Kate Matsudaira 的 BS 感・・・というと語弊があるが他人事感・・・を拭いきれないが、著者は HR 方面の人なのでそれも仕方なし。

たとえば delegate できないリーダーが例として登場する。そのひとたちは失敗できないがゆえに delegate できない、だから色々なことを試してちょっと失敗してもいい learning のための space をつくってやるのが組織に必要なことである。みたいな話をする。そして企業が transform するには、そういう space をシステマティックにつくる playground をトレーニングに組み込もうな、と結論づける。後半にいくほどどうでもいい。しかしこの記事は企業の digital transformation (ってなに?) を応援する issue の一部なので、書き手に文句をいう筋合いはない。釣られた HN が悪い。

自分はというと、出世パスに乗っていないおかげでまあまあ transformative learning  をする機会を持てているなとは思う。一方、下っ端プログラマが生存するために必要なのは仕事を通じてものの見方を transform することではなく、機械学習とかクラウドとかがわかるようになることではないか、というと極端だけれども、知識やスキルというのは下っ端には必要なのだよ。リーダーシップの皆さんはそういうの足りてる前提で話してますけどね・・・。

というわけで「俺は仕事中もコソコソ勉強してるぜ」みたいな HN のコメが本文を読んでないゴミであるといいつつも、その sentiment には共感があるのだった。


ところでなにかと脊髄反射で悪口をいいがちな Kate Matsudaira, いま何してるのかなこのひと、と見てみたら・・・あまり人の悪口とかをいうのはよくないですね、という良い例でありました。はい。ごめんなさいね。

Publishing 2019

|

見直したら毎年書いていたのでいちおう記録をしておく。

お手紙活動の影響もあり、今年はついにアップロードを誰にも気づかれないという偉業 (?) を達成した。寂しいが、意図通り。ちょっと速くなり HTTPS にもなり、いちおう進歩はしている。

来年もたぶん似た感じでやっていく予定。ほんとの newsletter platform を使ってみたいという見栄の欲望は引き続きがあるが、書くことないのが現実。衝動的に色々試すかもしれないのでそういうときお手紙仲間の皆様は温かい目で見守ってください。

A Long Reflection 2019 (7) – Not Looking Forward

|

もくじ。

普段から断片的に書いていることの繰り返しも含め、だいたい書きたいことは全部書いた気がする。こうした反省を踏まえてどうするかというと・・・特になにもない。「あのときこうすべきだった」という反省は「あのとき」という条件付きの宣言だから。できないことも、今となっては意味のないこともたくさんある。そして「あのとき」の前提がないものは、できる範囲で実行にうつしている(と思っている)。だからこの文章を踏まえてなにかを変えたいとは思わない。

こうした反省とは別にぼんやり考えていることは色々あるけれど、それらはまた別の機会にぼんやり書いていきたい。

A Long Reflection 2019 (6) - The Failure

|

もくじ。

ウェブ標準の仕事について。

あのプロジェクトは失敗したと言って良いと思う。出荷はしたし使われている部分もあるので全体として完全な失敗ではないにせよ、長い時間がかかったし評判も期待したほどではなかった。自分が担当した部分については完全な失敗で、誰も使ってない。仕様は deprecate され実装も消されることが決まっている

なんで失敗したのか、どうすればうまくできたかと繰り返し考えた。自分にとっての結論はあるようなないような状態。もう情報が増えることもないし、いい機会だから書き出しておきたい。

端的には:野心的な目標に対してチームが実力不足だった。いうまでもなく自分もだいぶ実力が足りてなかった。

なんでそんな野心的な目標を持ってしまったのかというと、時代の空気かなと思う。勤務先、および該当製品は、世の中からも割と愛され当事者は調子に乗っていた、と書くとかんじわるいけど、勢いがあって強気だった。

一方、ウェブテクノロジは行き詰まっているように感じられた。Node.js を中心とした JS のエコシステムは盛り上がりはじめていたが、まだ中心が定まっていなかった。たとえば ES6 Modules はまだなくて、複数のモジュール化標準が入り乱れていた。ウェブフロントエンドのフレームワークについてもかなり混沌としており、ぜんぶぱっとしなかった。(まだ React はなかった。)ので調子に乗っていた我々は、ウェブ標準の力でこれを解決したいと考えた。

どのへんが実力不足だったか。DOM のようなコアのウェブ標準をいじる経験は誰にもなかった。それまで同ブラウザが足した API はデスクトップ OS の機能を expose するようなものばかりだったから(データベースとか。)実装の側もようやくフォーク差分を upstream しおえたくらいの時期で、まんなかの方をがちがち触れる人間は限られていた。

野心的なプロジェクトに挑戦して失敗した。それは仕方ない。挑戦しない方がよかったとも思わない。こうすればうまくいったかもという反省は、色々考えたけれどもう一回やる機会もないし、だんだんと忘れてしまった。


勤務先はさておき、自分がやるべき仕事だったのかについてもよく考える。

自分は標準化というアイデアがそんなに好きでない。必要性は理解しているが、あまりお近づきになりたいとは思っていなかった。この感覚がプロジェクトを通じて強まったのは事実だが、標準化というのは根本的に design by committee. 自分が好きでないのは当たり前。

ついでに自分はプラットホームとかフレームワークとかがあまり好きでない。「ウェブプラットフォーム」に「フレームワークとしての API」を足すプロジェクトを仕事でやる。きびしい。特に自分はウェブ開発者としての専門性がまるでない。そんな人間がフレームワーク API とか設計してもいいものができるわけない。設計は他の人がやってくれるという期待があったけれど、やはり自分の肌感覚がないものを作るのは落ち着かないものだった。設計も、細かいところは結局自分で決めないといけないし、大きな変更をする必要だってあるかもしれない。けれど直感が働かないからそれができなかった。

標準化にブロックされ、オープンソースにブロックされ、チーム内の終わり無い議論にブロックされ、コードを書けない時間がとても長かった。この非生産的で無力な自分にはもっと自覚的になり、なんらかのアクションをとって解決すべきだった。プロジェクトを変えるべきかもしれなかった。

でも総体として同じプロジェクトに stick した自分の判断が間違っていたとは思っていない。自分はそれまで job hopper だったし仕事はしょぼいものばかりだった。このときは難しい、価値のある問題を放り出さず向き合いたいと思っていた。だから自分にとっても難しいことに挑戦して失敗したプロジェクトだった。難しさの種類がチームにとってと自分とでは少し違ったというだけで。そこに学びはあった。だいぶ高くついたが仕方ない。


自分にとっての学びはなんだったか。

まず、価値判断が自分でできる仕事をするのが重要ということ。ウェブの API の良し悪しは自分にはまったくわからない。そういうのを仕事にするのはよくなかった。標準化みたいのも好きでも得意でもないから、やはりいまいちだった。価値判断の重要性は、受託開発で働いてきた自分が自社製品開発をする身として学ぶ必要のあることだった。受託開発だと、価値判断はしばしば麻痺された方がよいからね。いつもそうだとはいわないけれど。

もうひとつ、他人にブロックされることが多い仕事はよくないということ。ボトルネックは自分の側にあった方がよい。それはストレスでもあるが、自分ががんばっただけ進む仕事の方がよい。一見ブロックされているが努力によって unblock できる問題もあるから、この判断はそれほど自明でない。とはいえある程度の期間仕事をすれば gut feeling を通じて傾向は判断できると思う。

あとは、製品やプロジェクトの良さと自分との相性は必ずしも足並みを揃えないということ。仕事のウェブブラウザは製品としても良かったし、組織もよく回っていた。会社の調子もよかった。自分もブラウザというテクノロジは関心をもてた。ただ開発者体験を良くするための新しいウェブAPI の標準化という仕事は自分と合っていなかった。

トレードオフもある。オープンソースの仕事をするとかアメリカの会社で働いてみるというのは自分にとっては意味のあることだった。うまくいっている製品チームの一員として学ぶこともたくさんあった。だから負の要素に目をつぶるのは、ある程度は理にかなっている。程度の問題。

たとえば自分の今のアプリの仕事だと、本当にコアの部分・・・たとえば画質・・・みたいのは自分では価値判断できない。そこに後ろめたさはある。ただ画質以外の要素・・・たとえば速度・・・の良し悪しはわかるので、画質のような本道ではなく速度のような補助的な役割を担うことで妥協している。製品のコアな価値を担えたらかっこいいとおもうけど、そういう仕事はなかなかみつからないね。それは勤務先のせいではなく自分のしょぼさだと思っている。

他人によるブロックについても、大企業だったりチームがある程度でかかったりすると細々とブロックされるのは日常。そういうのは複数の作業を持つことで乗り切っている。今は以前とくらべだいぶブロックされることが減り、ボトルネックを自分の側に近付けられていると思う。これはチームやプロジェクト自体の性質もあるし、立ち位置選びがうまくなった面もあるし、チーム内での自分の tenure も関係ある。時間をかけて信頼を高めればそれだけ自律性が増すし、ブロックされにくい道もよく見えてくる。これだけだと 10 年前に戻っただけだけど、リーダーシップ的なのをほぼ完全に捨てることで組織オーバーヘッドを最小化できているのが進歩といえば進歩かもしれない。


話を少し戻して、件のウェブ標準プロジェクトはどうすればうまくいったのだろうか。

越権を承知で無責任かつ雑に書くと、たぶんレンダリングエンジンじゃなくて JS という言語の側に注力すべきだったんじゃないかな。JS は愛されているし人々は気にかけている。レンダリングエンジンは、そんなでもない。たいした根拠はないし、言語をいじったところでいいものができた保証もないけれど。あとは abstraction ではなく真の capability に的を絞ったほうが良かったとも思う。ユーザとプラットフォームの役割分担として。

プロジェクトの最初期は JS の拡張も含めた様々なアイデアが模索されていたけれど、結局レンダリングエンジンの側をなんかするところに収束した。なぜかはわからないけど、たぶん当事者の多数がレンダリングエンジン側の開発者だったから。手にある武器で殴りたくなるポップカルチャー的 conway's law の帰結、に思える。Abstraction に手を出したのは・・・立案者の趣味かな。たぶんね。

同じ人々はその後 service workers という capability focused でずっと広く使われる標準をずっと短い時間で出荷した。同世代の野心的失敗プロジェクトである Native Client も競合たる ASM.JS と手を組んで Web Assembly という広く使われそうな標準に至った。組織もまた学びを糧に前に進んでいる。もっと fail early しろと Eric Ries に怒られそうだけど、それは仕方なし。


自分は今の会社に入る前から何年も仕事をしていて失敗プロジェクトもいっぱいあったのに、あまりそれらに関する反省が思い出せない。あまり反省しなかったのだろうか・・・。とおもったが、昔のブログを見ると少しは反省しているね。メランコリックすぎてわかりにくいけど。

あと、プロジェクト自体がしょぼすぎて色々責任転嫁の余地があったのを言い訳に、自分の不足に目を向ける誠実さを欠いていたとも思う。自分のだめさに自覚的であるべきだったが、中二病ってのはそういうことしないんだよ。

A Long Reflection 2019 (5) - Extracurriculars

|

もくじ。

業務ではない課外活動。趣味プロジェクトとか勉強とか。

趣味プロジェクトは、実用性を重視しすぎて小物ばっかりつくったのがよくなかった。役に立とうが立つまいが挑戦として OS なり言語処理系なりを作ればよかった。そういうのをやらなかったのは根性がなかったせいでもある。そして実用といいつつ使えたものは殆どない。なさけなし。

座学/読書は、もうちょっとノートをとるだとか環境に気を使うとか、ムダに挫折したり放置したりしないよう勉強の仕方というものを気にすべきだった。ここ 4-5 年で多少改善したけれど、時すでに遅し。挫折や放置はそれ自体も問題だけれども、そのあとしばらく勉強する気を削いでしまうのもよくない。

コード読み。少しはやったが、日常にするところまでたどり着けなかったのは残念。コードを読む日常に憧れがあったが、どうすればよかったのかはよくわからない。雑誌連載は動機づけにはなったが、ややきつかった。

競技プログラミング。全然やらなかった。まあいいです。何らかのコードを書いていればそれでよいと思っている。個人的に趣味プロジェクトをがんばりたかった。

英語。まあ、こんなもんですわ。入社直後、あるいは引っ越し直後にもっとがんばればよかったとは思う。やる気と時間のバランスがよいはずの時期。あと、やはり勉強法みたいのにもっと気を使うべきだったね。特にキャリア序盤。

総体として、もうちょっと高い目標をもって根性だしてメタスキルも高めて継続的に色々挑戦できればよかった。昼まで寝てマンガ読んで酒を飲みに行くのが青春だった身には、まったく高望みだとも思うけれど。


他人となにかやること。

小さい活動をもっとたくさんやればよかった。たとえば自分はむかし小さな読書会をはじめた。実際の運用は別のちゃんとした参加者の人が引き取ってくれたから続いたのだけれど、これはよかった。たまに友達と小さなプロジェクトをやってみたり、「もくもく会」みたいのに顔をだしたりして、それもよかった。こういう小さな集まりをもっとカジュアルかつ継続的にやればよかったと思う。場所を探すのが億劫だった記憶があるけれど、別に自宅で 2-3 人の集まりを持てばそれでよかったね。最後の数年住んでいた広尾のボロアパートはさすがに厳しいかもだが、日頃そういう集まりをしていたら引っ越しに際しマシな部屋を選んだかもしれない。

よその勉強会みたいのは、まあ、たまに出るくらいでよかったかな。自分が話さない勉強会はきほん意味なかったなと思う。自分が話すのはオフラインで個体を認知される意味で良い。飲み会を尊ぶ声をオンラインでたまに見かけるけど、自分にとっては二日酔いになるし喉をやられ風邪をひくしで、あまりいい思い出はない。その割に頻繁に顔を出していたが・・・。

オープンソース。自分の勤務先だと「仕事で使うから」みたいな理由をサードパーティのプロジェクトに見出しにくく、結果としてコントリビュートする気があまり起きなかった。残念だけど、本業として数年やったからいいかなとも思う。残ったものはないけれど、やっている間は楽しかった。会社のカネで meetup にも参加できたし。趣味と仕事が一致していた瞬間。


これらを書き出してみて思うこと。

趣味や勉強の支えとして、友達と一緒に勉強したりコードを書いたりをもっとしてよかった。特に若い頃はまわりのひともみなヒマなわけだし。なぜそれをしなかったのか今になって思うと不思議だけれど、内向的すぎとか臆病とか腰が重すぎとか色々理由はあげられる。あまり考えもしなかった気がする。友達とやることなんて、酒のむか飯くうくらいだったような。結局、そんなに意識高い身分ではなかったのだよ。

友達となんかやる方がいいという感覚は snippet train なり podcast なり、比較的最近の経験に裏付けられた気分にも思える。結婚して引っ越してヒマも相手もいなくなった後に気づいたのは残念。

ライフハックやメタスキルみたいのを重視するようになったのも最近の傾向で、むかしはもうちょっとバンカラ志向だった気がする。年を取って自己啓発にかぶれたと見ることもできるが、パッショネイトバンカラ野郎を気取るには期待値に対し素の実力が足りない。

A Long Reflection 2019 (4) - Attention and Citizenship

|

もくじ。

少し脇道に逸れ、インターネット芸人活動について。これについては過去に何度か書いている(1, 2, 3, 4)。自分はある時期までは無自覚な attention addict であり、それが自分のキャリアを損ねたと思っていた。その反動で、一旦は原理主義的な意見に至った。すなわち、関心/承認欲求のためにオンライン活動をするとプログラマとしてのキャリアを損ねる。それよりは実力の足しになるようなこと・・・たとえばコードを書くとか・・・をするとよい。その結果引き起こされる関心だけが本物の通貨で、あとは贋金である。

これはあまりに draconian で、関心/露出/知名度にはキャリア上の利点もある。自分はそれを享受している。だからその「偽物らしさ」に自覚的であれば、必要悪のツールとして芸人になるのもよい。原理主義化したあとは、そう考え直しもした。

「自覚的である」ことはそれなりに難しい。とはいえ関心への飢餓感が孕む危険は主に聴衆側の成熟によってある程度は理解が進んだ。たとえば「炎上芸」みたいな語彙は昔はなかった。今は、プログラマはともかくウェブで悪目立ちする一部の「ブロガー」を人々は失笑しているし、YouTube personalities の burnouts などもしばしば報道されている。

そうした芸人としての罠がオンラインで活動するプログラマにもあてはまることを理解した上で、趣味としての芸を楽しむのは別にいいんじゃないか。最近はそう思っている。プロ芸人でない自分たちのようなプログラマにとって関心の病を自覚するのは案外むずかしいこともあるが・・・。

依存症の比喩からこう考えることもある:自分は依存症を通じて脳が変質したからアル中やヤク中がそうであるように依存対象すなわち関心からは自由になれない。だから諦めと受容を通じ距離をおいて付き合っていくしかない。

外国ぐらしをするようになり、自分にとって日本語圏でのアテンションの直接的な価値は下がった。結果として見栄に引きずられず芸人活動の趣味性を楽しめるようになったのはよかった。これは Podcast で特に顕著だったとおもう。いまでもアテンションは気になるが、前よりはうまく距離を置けている気がする。出羽の守化がさほど進行せずにすんでいる(と信じている)のは、解毒の成果とみることもできるし単に加齢のせいかもしれない。


自分の社会的アイデンティティを考えると、また違った見方もある。自分はインターネット「芸人」である以前にインターネットの「住人」で、自分の人間関係にはウェブを通じて作られたものが沢山ある。オフラインが起点の知り合いでも、互いがオンラインに書いたものを通じ理解しあった関係もある。発言の場としてのインターネットはそうした人間関係を育む土壌であり自己表現の舞台なのだから、芸人だの関心だのと腐してばかりはフェアでない。相応の重要度と敬意を持って接するべきではないか。有り体に言えば、自分はインターネットと一緒に人間関係を放棄していないか。

これらの矛盾する見解は、それぞれ正しいと自分は思っている。ただ互いに矛盾しているので歯切れの良さはない。まあ、仕方ない。 これからも試行錯誤が続くだろう。

A Long Reflection 2019 (3) - Bigness

|

もくじ。

大企業について書こうと思ったが、自分にとっては外資系というか非母語で働くという変化と受託開発から自社製品開発への変化も同時にやってきたのでれらは切り離しにくい部分がある。まずは別々に議論してみる。

まず大企業と大規模プロジェクトについて。自分は今の会社に入るまでは中小企業で働いていた。気づいていなかったが、働き方も中小企業に傾いていた。それを補正するのに苦労した。

規模と細分化

中小企業の働き方は役割が未分化である。製品のコードベースも大きくないからフロントエンドからバックエンドまでふつうに全部さわるし、人手がないからマネージメントはしないまでも TL っぽい立場にはなりやすい。色々やる。

その色々の品質は高くない。多くの場合、とりあえず動けばよい。ひどいところは直そうかな、くらい。要素技術を売るスタートアップのコア技術とかだとまた違うのかもだが、中小企業というのは基本的にしょぼいものをしょぼしょぼ作って売っているのである(殺されそうな発言)。しょぼいは酷い言い分で、ニッチというほうが良いな。

大企業は人がいっぱいいる。仕事も規模がでかいので、役割が細分化されている。マネージメントも管理職以外はそんなやらなくてよい。偉くなりたいなら TL くらいはやった方がいいだろうが、別にやりたい人(偉くなりたい人)はいっぱいいるので自分がやらなくても他に人はいる。ビジネスは成功している(からでかくなった)ので、その先に積み上げるものへの期待値は高い。

細分化の結果、個々人は専門家として仕事をしないといけない。その専門はわかりやすい(市場価値のある)切り口の場合もあるし、製品固有なニッチの場合もある。マネージメントも専門である。TL はある意味ではジェネラリストだが、それでも守備範囲のスコープは狭い。なぜなら個々のチーム自体の守備範囲が(相対的には)小さいから。"Uber TL" という TL の TL みたいなポジションもあるにはある。割とすごいプログラマがすごい視力をもってやる仕事とされている。なおスコープが小さいといってもコード量が少ないとは限らない。コードの総量が多いので。

自分はというと、チームのつくっている特定のアプリの性能の専門家となっている。でも性能の指標をすべて見ているわけではなく、起動レイテンシや Jank のような限られたメトリクスしか扱っていない。たとえば画像処理のスループットとかメモリ消費とかは他の人が見ている。前のチームは今より小規模だったので、もうちょっと色々見ていた。一方その前のチームは今よりずっと巨大で、自分が性能の専門家になる余地はなかった。

大企業というか大きなプロジェクトは仕事が進まない。具体的にいうとコード産出のスループットが低い。なぜなら満たさなければいけない期待値、品質のバーが高いからである。性能改善とかはその傾向が顕著かもしれない。コードを書くよりプロファイルやトレースを睨んでいる時間の方がずっと長い。

現実の問題に裏付けられた専門のニッチにどこまでも踏み込んでいく知的刺激は得難い。一方で、どうってことないコードをフルスタックで雑にいっぱい書く方がコード書きの筋肉はつくし潰しは効くだろうなと思う。

Small autonomous team で Microservices みたいのは大企業が中小企業の身軽さを取り戻す術とされている。Microservices でなくても、新規製品の立ち上げみたいなプロジェクトにはこれらプロジェクト規模の問題がなく比較的ザクザクとコードがかけるため、勢いのある人たちに人気。ただ自分はそういう仕事はしていない。今のチームも新機能やっている勢はそこそこコードのスループットがある気はする。コードを書くという視点だと、性能仕事は微妙。

まとめると、大企業はプロジェクトの規模が大きくなりがちで、結果として仕事は細分化、専門化しがちで、期待値の高さから品質のバーはあがりがち。ただし弱小製品や新規プロジェクトなど例外も多い。コードを書く量は総体としては少なくなりがちだが、程度にはばらつきがある。うまく仕事を選ぶと雑用がすくないぶんコード書きに集中できる面はある。

自分は専門家になるより E2E でコードを書きたいと思っていたし、TL/TPM 的にプロセスなどをコントロールできないことに強いフラストレーションを感じていた。性能の仕事はコードを横断することができるので良い。ただし新機能実装みたいな機会はない。プロセスについては超非生産的な年月を経て慣れた。どちらも適応には時間がかかった。

社内固有の事情

大企業はでかいので、社内固有の事情が色々ある。そうした社内固有の事情に関する知識は、転職を見据えると基本的には無駄。ただ日々の仕事には欠かせない。

社内知識にはスタックのように技術なものと書類や人間関係のように技術的でないものがある。運用のプロセスみたいのはその中間くらい。

まず技術的な知識について。自分の勤務先はオープンソースにあるような分野のものも色々内製している。そういう内製スタックに詳しくなるのは無駄だからと、なるべく近づかないようにしていた。

ただ後から気づいたこととして、その内製スタックの上に作られた製品固有のテクノロジ(画像処理、検索などなど・・・)はオープンソースに代替品が存在せず、ものによっては業界最先端だったりする。そうした製品固有のテクノロジを学ぶ税金として内製スタックは勉強しても良かった。反省。とはいえ規模の問題もあるので、製品固有テクノロジを学びたいならそのテクノロジの上で仕事をしないといけない。片手間で理解できるような代物ではない。検索について知りたいなら検索を仕事にしないとだめ。たぶん。

もうちょっと汎用的な内製技術スタックが「時代の先を行っている」とされている場合、未来を見るメガネとしてそれを学ぶのには意味があるのか?個人的にはあまり無いと思う。「時代の先を行っている」はだいたい当事者の思い込みで、実際はニッチな袋小路に過ぎないことが多い。その未来は来ない。上に書いたような理由からそれを理解するのは悪いことではないけれど別に未来じゃなくね?やはり論文なりオープンソースなり世間で評価にさらされないと勝敗はわかない。

しかし学ぶ意欲を得るにあたりファンタジーが助けになるのも事実。自分も、自分を騙せる勢いが残っているうちに内製テクノロジにどっぷりすればよかったなと思う。まあブラウザとかもオープンソースなだけでニッチ性は内製テクノロジみたいなもんだから、それを学んだのでよかったのかもしれない。未だに心のどこかでサーバサイドには「秘伝のタレ」があるというファンタジーを捨てきれてない。

技術的でない社内知識。たとえば人脈とか部門間の関係とか他部門の動向とか。ほんとに社内でしか価値がない情報だけれど、ゴシップ的な面白さはあるのでひやかし程度に詳しい人の話を聞くくらいでいいんじゃないかな。チームメイトなど、直接接点がある人たちとの関係を良好にするのは大事だと思う。自分がこれらをちゃんとできているとは思わないが。

半分くらい技術的な知識。たとえばプロセスや、それをとりまくツールと人間。自分が agile とかが好きなせいかもしれないけれど、これが一番学ぶに値するものだと思う。プロセスというのは細部は組織固有だけれど big picture は存在し、それはソースコードほどオープンでないし知識として明文化するのも難しい。そこそこ機能している "The Way"には学ぶ価値がある。そして座学で学ぶより実際に動いているものを目にするほうがずっと身につく。それらのプロセスが最適であるとは限らない。でも何も知らずに完全にランダムな解空間を探索するよりは良い。

企業 blog やオープンソースにはじまり Devops movement やその周辺 SaaS へと続く情報開示によって、様々な大企業 ways も段々と標準化、商業化されているような気はする。そうやって小奇麗になったバージョンを学ぶほうが効率的に思える一方、土着のプロセスが動く生々しさに触れる良さもある。自分は一時期こういうのに興味があったけれど、モバイル部門は音楽性が合わなすぎて興味を失ってしまった。ただ各種の社内ドキュメントはもうちょっと熱心に読んだほうが良いのだろうなあ。

官僚的なものごと

大企業が官僚的であるというのはたぶん事実だが、体感するフラストレーションはばらつきがあった。

ミーティング。自分はいま週に 1.5 時間くらいかな。チームの定例が一個と、1:1 が隔週から月一回くらい。隔週の demo day は時期によって開催頻度はまちまち。自分がヒラ社員すぎるせいとはいえ、これは会社の規模によらず割と少ない方ではないか。(しかもたびたびすっぽかしている。よくない。)

出張とか経費精算とかのペーパーワークはずいぶんラク。人事考課は、ちょっとめんどい。ただフェアさを考えると妥当かなと思う。制度に改定があるたび、下々の手間は少し減り、同時に透明度も少し失われている。

非同期でやるミーティング相当の行為。コードレビューとか、ドキュメントのレビューとか。まあそこそこ。やはりヒラなのでそんなに多くない。バグのトリアージは今の仕事はすごい多くて苦痛。ただ割と例外的な気がする。メールはそんなに書いてない。読むのは適当にやってる。

リリース。相当めんどくさいはずだが TPM がぜんぶやってくれる。専業の人間がいる時点で官僚的なのは事実。TPM ではなくエンジニアがやってるチームもある。自動化はされているが、自分たちのチームは割と激しく cherrypick するとか QA チームによる手動のテストが挟まってるとかのせいでめんどくささが増していると思う。官僚的だからというよりは、チームの練度不足に思える。

なんか新しいことをはじめる。自分の裁量でできる範囲なら特に面倒はない。人が欲しいとかエンドユーザから見える違いがあるとかだと大変。製品の表面積が小さいほどエンドユーザ向けの機能を足すのは大変だと思う。カメラアプリとかだいぶ大変。電子書籍はもうちょっとラクそうだった。どちらでもプログラマがやりたいと言い出した機能が入り込んでいくのを見たので、機能の筋の良さと本人のパッションに依存している。たとえばカメラの RAW 保存とかはプログラマ発だった気がする。

機能ではなく、新しい製品を始めるのは、きっとすごい大変。自分には無理だし、エラ目の PM とかでないと正しい攻略パスを進めないんじゃないかな。PM と仲良くなれば良いという話かもしれないが。

新機能にしろ新製品にしろ始めるのは大変だけど世に出すのはもっと大変で、リリース前のプロジェクトはしょっちゅうキャンセルされている。世に出たものもよくディスコンして世間の顰蹙を買っているけれど、あんな生易しいもんじゃないんだぜ。今のところキャンセルでもクビにはならないのはめでたい。

日々の仕事の官僚性。ビルドが遅いとかテストが遅いとかは技術的な官僚的オーバーヘッドと言えよう。コードレビュアがみつかんないみたいのは、昔でかいチームだった頃はよくあった。今はあまりない。忙しくて全然レビューしてくれない時はたまにある。分散バージョン管理のおかげで、仕事の並列化はやりやすくなった。多少ブロックされても遅延を隠せる。

コードにおける官僚性。なんかのインテグレーションをするとか、コードの静的チェックとか。UI の見た目の足並みを他アプリと揃えるとか。まあまあある。そして、これは大きいチームにいるより小さいチームにいる方が負担を感じる。なぜならシステムが巨大なチームのために作られているから。大きなチームだと、面倒なことは割と誰かがやってくれる。(自分がその面倒な担当にならなければ。)

総体として、自分の役割を果たしている分にはたいしたオーバーヘッドを感じないが、役割を超えてなにかしようとすると非現実的に大変な印象。自分は最初のころ役割をよくわかってなかった。そのせいで無駄に苦労をした気がする。

英語と外国

英語と外国の影響は理論的には大企業である事実とは直行しているはずだが、自分の場合は大企業による影響を reinforce している。すなわち、フルスタック雑用リーダシップではなく末端専門家プログラマとしての振る舞いを後押しされている。

英語の影響、すなわち言語バリアは、プレゼンやメールや立ち話といった自然言語による説得を難しく、かつ高価にする。その結果、1. 事前に説得するより実際にコードを書いて結果をだしてからもっていくようになる 2. 主観的な性格が強いもの(例: コード品質)より成果を客観的に見せやすいもの(例: 性能)を目指して仕事をするようになる。3. 人に頼むのではなく自分でやるようになる。4. 他人の仕事に口を挟まなくなる。全体として、リーダーシップ/マネジメントではなく末端/ICであることを志向するようになる。

外国であることの影響、すなわち人的ネットワークの喪失の影響。これは日本で育んだネットワークが役に立たないからでもあるし、言語バリアのせいで新しいネットワークを育てられないせいでもある。家族がいると社外のイベントの類も全然顔をだせないし、社内の業務外グループみたいのに参加する余力もない。結果として、仕事では人づてに裏で口を利いてもらうとかはできないし(これは日本にいたときもしたことない気がするが)、同じく人づてに面白い仕事を探すこともできない。社外でも社内でも。結果として 1. 転職とかをする気がおきない(人づてに行き先がみつからないから) 2. 自分のプレゼンスを高めるためにがんばる、みたいなことをしない。(プレゼントする先がないから。)といったことがおきた。最初のチームにいたときは社内ソーシャルメディアで管をまくチームメイトもいたので自分も割とやっていたが、今はもう社内ソーシャルメディアもしなくなった。

まあ社外とか社内の遠い何処かとかはさておき、チームの隣人に対してはもうちょっとつきあいよくしてもいいかもしれないと最近は思っている。人として。人間的な接点がないと仕事場に「所属してる感」がなくてやや寂しい。ただ同僚とランチとか時間の使い方として贅沢すぎてちょっときびしい感があるし、週末に遊びに行くとかありえないかんじ。子供ができる前にもうちょっと社交しておくべきだったと思う一方、既婚者にはそれもバー高めなのだった。


全体として、大企業/外国ぐらしは自分を専門的なテクノロジを末端で行使する人にしている気がする。専門性がニッチに先鋭化していくのは望ましくないが、技術以外の側面を捨てるよう後押しされるのはプログラマとして生きていく上でいい圧力ではなかろうか。職業人生の前半と互換性がなさすぎて苦労はした。最初から大企業にいる人々はエリートネイティブという感じでうらやましいが、彼らは大企業にいるからエリートなのではなくエリートだから大企業にいるのだった。

もうひとつ、こうした圧に任せているとまったくエラくはなれないね。外国人でも圧と戦いながら大企業の中で偉くなっていく人々には尊敬がある。でも自分は舵を切りたくなったらそれを後押しする圧のある環境に移る方がいいな。そういう日が来るのか、そういう日が来たとして異なる環境が自分を受け入れてくれるのか、不安はあるけれども。

A Long Reflection 2019 (2) - Grit and Expectation

|

もくじ。

事実関係の振り返りを横断的に眺めると、繰り返しあらわれる話題がある。自分の気分の底を流れるテーマも頭をよぎり始める。

まずひとつめは、このひと根性ないね・・・ということ。これはモダン根性論に感化されて以来より一層思う。特に大学時代の自分のやるきの無さときたらやばい。学費の!もとを!とるきあんのか!

つぎ。これは根性のなさに少し関係があるけれど、仕事の決め方が雑。不確実性を扱うのが苦手で、探索が苦手。仕事を選ぶタイミングというのはすごい自由度があり、それゆえ不確実なことも多い。だから色々な手を考え、それだけでなく実際に話をきいて、いくつものオプションの中から選ぶ方が良い。自分は考えることは一定程度しているが、おおむね思い込みでバンと決めている。話を聴くのをさぼっているし、不安定な状態を嫌っている。これは自分のコミュ障や臆病の帰結ではあるけれど、もうちょっとがんばっていいのではないか。とおもって前回はちょっと頑張ろうとしたが、そもそもレジュメでお断りされてしまったのだった。なおバンと決めてる割に現状さほどひどいことになってない点は自分の運を讃えたい。

仕事選び雑さという点だと、割といつも仕事が辛くなって雇用主やチームを変えており、それが雑さにつながっている面もある気がする。ほんとはもっと心に余裕のあるとき仕事を変えると良いのだろうね。その反省から前回は三年たったらチームを変えようと思っていたが、三年待たずにトラブルに巻き込まれてしまったのだった。

つぎ。大企業と中小企業の違い。中小企業時代の反省というのはあるわけだけれど、それらは今の大企業の文脈にまったくあてはまらない。例えばチームやプロジェクトのリードの仕方、みたいのは考えても無駄。リードしないし、チームの構成人員もリソースも全然違う。まあ10年近く前のことを反省しても仕方ないんだけど、このギャップは未だに埋め切れていない感がある。同じような大きな飛躍として受託開発と自社開発の違いもある。国の違いもある。ただ自分の中でこれらは大企業と零細の違いとうまく区分できていない。こうしたギャップを埋めるのに自分はだいぶ苦労したなと思う。これはきっと稿を分けるのが良いでしょう。


大企業に関するメタな感想として、自分の期待値はきっと釣り上がっているのだろうとも思う。感じの悪さを恐れず書くと、大企業の中やその周辺の人々はわりかしエリートである。そういう人々の振る舞いを baseline にすると自然と期待値があがる。しかし現実の自分の baseline はどちらかというと中二病気味なボンクラである。中二ボンクラな自分の期待値と大企業エリートの期待値には重なる部分もある(「すごいプログラマになりたい」とか)が、大きな違いとしてボンクラにはロードマップがない。エリートにはある。別の言い方をすればボンクラの期待値はファンタジーだがエリートにとっては現実だ。ファンタジーを現実として突きつけられると、あ、ごめんなさい・・・みたいになる。とはいえいまさらファンタジーに戻すこともできないので、無理な期待値にちょっとでも近づけたらとできる範囲でしたばたしてる。(にも似たようなこと書いたな。)

ボンクラ・・・というかノン・エリートによるロードマップレスの「がむしゃらな頑張り」がファンタジーを現実にすることもたまにはあるらしく、そういうストーリーはそれはそれでかっこいい。ただ自分は該当していない。あとここでいうエリートは長期間着実に努力と成果を積み重ねられる強い自制心の持ち主という意味で使っている。これは現実のいわゆるエリートとだいたい重なっているが、もっと地味なエリートもいる。とはいえ自分くらいの年齢になるとまあまあ結果がでてる気がする。

A Long Reflection 2019 (1) - Timeline

|

もくじ。

まず・・・どこまでもどればいいんだろうか。大学?自分は私立大学の推薦入学というやつをして、それはよくなかったと思っている。ちゃんと受験勉強を戦う根性を出すべきだった。ただ当時の自分がそこで迷った記憶もないので、自分の根性の無さの帰結とみなす方が自然に思える。いくつか候補がある中で情報系を選んだのは、なかなか先見の名があったと思う。市場動向とかを調査した記憶もないので、まあまあマグレではある。プログラマなんてゲームプログラマしか知らなかったし、プログラミングもしたことがなかった。なお「手に職」と親に強く念を押されていたため、文系は考えていなかった記憶。これは親がえらかったともいえるが、別に文系にだって職はあった気もする。我ながら雑である。評価としては、大学受験をしなかったのはダメな判断だが情報系という選択は、運の要素もあるが良かった。

そのまま同じ大学の大学院に進んだ。大学院大学みたいのも教員に勧められたが、田舎の山奥で寮暮らしをして正気が保てるとは思えなかった。(インターネットには大学院大学在住の変人がいっぱいいた)。まあこれらは言い訳で、根性がなかったね、やはり。評価:根性なくてだめだが、無難ではあった。

学生時代は最初は本屋でバイトをしていたが、プログラマのバイトをしたいんですよねと教員に話したところ授業の TA を紹介してもらい、その TA の仲介でいわゆるエンタープライズ孫請けみたいな会社で Java を書くバイトをした。それとは別に、これはきっかけは忘れたがウェブで組込系の会社のバイトをみつけ、そっちでも Java を書いた。組み込み系の方は家から遠かった上に時給も安かったので一年ぐらいでやめた。もう一個のエンプラ孫請けは 2-3 年くらいやってた気がする。

プログラマのバイトは、まあ、よかったね。本屋よりお金をいっぱいもらえたし、仕事でコードを書く様子を覗き見られた。特に当時の一大産業である「エンタープライズの Java 開発」というやつがどんなものか体感できたのがよかった。それらのバイト先が特段優良企業だったとは思わないが、自分も別にコードをかけたわけではないから、実力を考えると良い仕事だったと思う。評価:運がよかったというよりは時代が良かった。時代の波にのる良い判断ではあった。


大学院生には「学校推薦」という優遇雇用枠で就職できる利点があり、自分も大学院に進む時は視野にいれていたと思う。ただ実際目の前に来てみると、企業からの様々なしがらみに関する噂や雇用枠を巡って学生の間に漂う微妙な空気など、めんどくささの総量が自分の許容範囲を超えていた。なのでふつうに就職することにした。そこで説明会とかに行くことにした。

最初に行ったのはマイクロソフトだったと思う。ただ説明によるとトップ大学卒でないと話にならなそうな雰囲気だった。会場で「質問」みたいのを繰り出す学生の意識高い感じも厳しく、ああ二流私大のおたくはお呼びじゃないのねと退散した。安い革靴で痛んだ足の記憶ばかりがはっきりのこっている。もう説明会に足を運ぶのも面倒になり、先に一年だけバイトをした組み込みの会社に求職し、説明会とかも一通り行って、採用された。エンタープライズ系のバイト先は仕事の印象が(本業の候補としては)よくなかったのでパスした。エンタープライズ受託は親も子も孫もイヤだと思っていた記憶。

つまり自分は説明会には二つしかいかず、求職したのは一社だけだった。やるきねえなーーー。本当に根性がなかったとわかる。今振り返ると数年後にやってくる就職氷河期に巻き込まれたら就職できなかった可能性あるね。あぶなかった・・・。

評価:一社にしか求職しない根性のなさはダメだが、その後の学校推薦をとってるメーカー系大企業のぱっとしなさをみると、それらを退けた判断自体はよかった。エンタープライズ IT を避けたのが良かったのかどうかはわからないが、それが自分のバイト体験に基づいた判断である点は地に足がついていたよかった。


最初の組込系ブラウザの会社。かなりハードワークしたが三年弱で辞めた。

ベンチャーという触れ込みだったが今振り返るとストックも自社株もないし、顧客が大企業だったせいか仕事の仕方もぜんぜんベンチャーぽくなかったし、社員も年寄りが幅を利かせていたし、やたら会議が多かったし、なにより労働時間の長さは異常だし、いまいちだった気がする。

一方で、作っているものがウェブブラウザなのはよかった。後に今の会社に入る役にたったのはさておくとしても、来るウェブ時代の基盤技術に仕事を通じて詳しくなれた。自分は別にウェブブラウザがやりたくて入社したわけではない(特にやりたことはなかった)ので、これは運がよかった。

会社の偉い人たちは、本人らが主張するほどテクノロジの重要性をわかっていなかった気がする。おかげでコードを書くのは新卒入社数年目みたいな若者が中心だった。これは会社の競争力という点ではよくなかったが、新卒入社の身分である自分にとってはよかった。自分は入社早々組み込み SVG レンダラを開発したけれど、初期バージョンを書いていたのはグラフィクスを何もしならない一年上の新卒社員だった。しかしこの SVG は Macromedia (当時) Flash と戦う必要があったのである。新卒入社一年二年、しかも専門性のない素人を西海岸と戦わせるとかアホなの?ふつうに考えたら社内の使える TL を軸にゲーム業界とかのグラフィクスわかる人員を雇って脇を固め、新卒はせいぜい補助的に手を動かす仕事に回すとこじゃね?ところがそういうことは微塵もおこらず、自分がビットシフトとかしながら Bitmap にピクセルを置くコードを書いていたのだった。やばい。勝てるわけない。しかしそのあり得ない期待値のおかげで上から下まで自分でぜんぶデザインして書く、という得難い体験ができた。

会社の中に人はいっぱいいたので、これはスタートアップの人手不足ストーリーとは少し違う。組織の価値観の歪みによって生まれた機会という方が近い。社内の同世代も、似たような事情で沢山コードを書く人が多かったと思う。もっと気の毒な感じの仕事に回されてしまった人もいたが・・・。

評価: 選択の根拠やプロセス自体はそんなによくなかった。運良く沢山コードがかけたのはよかった。ウェブブラウザだったのも運がよかったが、それなりに勢いのある会社を選べばどこでもそれなりに時代に合ったテクノロジには触れられたんじゃないかな。労働時間が長すぎるのはよくなかった。これは運の問題に思える。


つぎは外資系の名を冠した SI の会社に転職した。二年くらいいた。特によいことはなかった。グラフィクスの仕事をできるという触れ込みだったが、入って最初にやったのは Java で Web をつくる仕事だった(なんで?)。最終的にグラフィクスの仕事も少しはできたけれど、半分以下だったと思う。一つ前の組み込みの会社も今おもうとプログラマの扱いはひどいものだったけれど、この SI の会社はほんとにプログラマ・エンジニアをリソースとして見ており、エクセルとにらめっこする上司を横目に、ああ人月ってこういうことなのねなるほど・・・とある種の感慨があった。

後から振り返るとこの転職のきっかけは過労すぎなどで損ねていた前職時代の精神衛生だったので、精神衛生や健康は仕事より大切にしなさいね、というのが教訓。

なおこのとき仕事への思い入れみたいのが完全に失われた結果、仕事のクソさにもかかわらず精神衛生は回復した。あと仕事のやる気のなさの反動でインターネット執筆活動がはかどり、ブログの時代の追い風もあってそこそこオンラインの知名度が高まったのは良くも悪くも後の身の振り方に影響している。趣味プロジェクトも捗った。

評価: 判断も結果もよくなかったが、前の段階でよくない判断をしてしまう状態に身を置いたのがよくなかった。一方で、それも若さ/時代かなとも思う。メランコリックな若者だったし、IT といえば過労で鬱という時代だった。インターネット活動は、自然言語よりコードを書いた方が良かったとは思うけれど、文章も書いたなりに影響力を持てる時代だったので悪くはなかった。


次は零細ゲームミドルウェア会社。大手ゲーム会社の子会社だった。小さい会社がいいなというのと、速いコードを必要としているところがいい、という判断だったと記憶。三年弱。

社長はスタートアップぽい野望を色々もっていたものの、別に金もないし子会社で株もないしで、別にスタートアップではなかった。ただ前の二者と違い社員 20 人とかの小さい会社で、小ささ自体は悪くなかった。エラそうなことをいいつつ沢山コードをかけたのは良かった。エラそうにする必要はなかったけれど、たとえばアジャイルごっことをしたりとかは小ささの利点だった。同僚も気のいい人々で、おおむね楽しく働けた。(なんとなく擁護しておくと、一つ前の会社も同僚は概ね良い人たちだった。)

ただ本当にまったく儲かっておらず、儲かるあてもなく、経営や採用も雑で、企業としての先行きは暗かった。実際じぶんがやめた一年後くらいに店じまいしてしまった。

この頃からインターネット活動でも身元を明かすようになった。小さい企業なのでそのへんは気楽でよかった。インターネット芸人成分が増したとも言える。

評価: 小さい会社にいく判断自体は, job hopper になってしまった身からすると悪くなかった。大きい会社は雇ってくれなそうだったから。小ささの恩恵は堪能した。どうせならもうちょっと儲かりそうなところに行けば良かった気もする。一方で自分の中の天邪鬼は儲かってて軽薄そうな空気を嫌がっていたので、そんな判断を出来た気もあまりしない。


つぎ、外資系大企業でオープンソース。

入社じたいは、まあめぐり合わせと運みたいなもんです。ブラウザつながりだけど、東京にウェブブラウザやる仕事がある理由からして未だに謎というか特になかったと想像する。雑だから、くらい。

最初の 4 年くらいは新しいウェブ標準の提案実装をやった。これについては前に何度か書いた。なにかもう少し書くことはある気がするけれど、稿はわけておきたい。このプロジェクトの最後の方で転勤した。

そのあと一年くらいは割と実験的なプロジェクトを手伝っていたが、気がつくと新しい OS やらマイナー自社言語の UI フレームワークを作るプロジェクトに姿を変えており、どちらも自分の価値観とあわなかったので一年くらいで退散した。プロジェクトを選んだ時は想像していなかった展開なだけに運が悪かったとも言えるが、大企業の野心的なプロジェクトは自分の価値観とはズレがちという事実は知りつつ踏み込んだわけで、自業自得。仕事の作業自体も色々な事情で全然はかどらず、たぶんこの一年は職業人生の中で二番目くらいに非生産的だった気がする。(一番非生産的だったのは SI 勤務時の数カ月だが、それは自分の意思でさぼってただけ。)

評価: 運の要素もゼロではないとおもうけれど、それよりは野心的プロジェクトを通じた出世の欲をかいて価値観や原則にあわないことをしたり、前のプロジェクトで染み付いた非生産性を払拭できなかったりと、入社以来降り積もった自分のダメさが結実したような一年だった。ただ転勤を助けてもらった義理を果たす面もあったので、一年やったこと自体は妥当と思う。

そのあと二年くらい電子書籍アプリ。ウェブがモバイルに負けると言うならモバイルというものを見てやろうとモバイルアプリを選び、Web の知識が役に立ちそうなので電子書籍。結局半分くらいの時間は WebView の中でうごく JS を書いていた気がする。ウェブの知識で成果を出しつつモバイルに入門するという狙いどおりにいったのはよかった。チームはそんなに大きくも強くもなく、それは良いところも悪いところもあった。大企業モバイルのベストプラクティスみたいのはまったく触れる機会がなかった一方、割と雑にいじっても見逃してもらえたので裁量はあったと言える。サーバ側もちょっとだけさわれたし。コードは割とレガシーで厳しかったが、チームを説得してそれをガっと書き換えるのが自分の職位に期待されていることのはずで、それができたかったのは実力不足。文句をいう筋合いはない気がする。じっさい自分がやめたあとにけっこう人がいれかわり、今はだいぶ近代化されたと伝え聞く。育児休暇のあと復帰した際に巻き込まれた Git to Monorepo の移行プロジェクトに伴いチームの空気が悪くなり、いたたまれなさが限度を超え逃げ出した。

評価: 欲をいえばウェブからモバイルに寝返る勢いでもっとでかくて勢いのあるチームでバリバリ働く道を選べばよかった気もするが、現実的にはこういうプロプリエタリなコードを書く小さなチームでオープンソースや超大規模開発からの禊をするのはリハビリとしてよかったと思う。新しいチームを決める前ににいくつかのチームの話を聞けばよかったかもしれないが、そんなに候補もなかった記憶。チームの空気が悪くなったのは残念だったけれど、結果的にみるとリハビリを切り上げるにはいいタイミングだった。

そのつぎが今いるカメラアプリ。もう二年くらいやってる。これについては繰り返し書いているので割愛。総合的には割といい判断だったとおもっている。

A Long Reflection 2019 (0) - Looking Back

|

一年を振り返る季節だが、とくにかわりばえのしない一年だったというと言い過ぎだけれども仕事的には去年と似たようなもんだし来年も似たようもんであることが予想されるので、今年は趣向を変えて自分の職業生活をはじめの方からふりかえって評価してみる。特に転職等の大きな判断の良し悪しを遠くから見直したい。何年かに一回書いている内容。

ダラダラ書いていたらだいぶ長くなったので分割した。目次:

話がそれ過ぎたのでこれとは別に今年の反省をすべきな気がしてきたが、それはまたあとで。

Book: Competing with Unicorns

|

Competing with Unicorns: How the World’s Best Companies Ship Software and Work Differently by Jonathan Rasmusson | The Pragmatic Bookshelf

人気の Agile 入門書 The Agile Samurai の著者が自分の Spotify での体験をもとに "Unicorn" ... いわゆるテック企業、インターネット企業を指す用語として使っている ... の働き方をエンタープライズな読者に説く、という内容。なのだが、だいぶどうでもよかった。

目次を見るとわかるとおり、割と総花的である。薄い本 (150p. 薄いのは良い)なので個々の踏み込みが甘いというか、全然踏み込まない。そして切り口に方法論として軸がない。テック企業の働き方というのは資産(出資金にせよ利益にせよ)があるからできる博打の一部という面もあるわけで、方法論というよりは俺たちがカネののちからでやってることをおまいらもやるといいよ、みたいな話がぼちぼち入り込んでいる。そうでない話題もあるが、そういう話題と混ざってるせいで台無し。

Unicorn (インターネット企業) というくくりも雑すぎる。大企業とスタートアップじゃずいぶん違うでしょうに。そしてスタートアップの方法論というのはここ 5-10 年くらいでだいぶ文書化されたから、この本に新しいところはないように思える。一方の大企業ウェイというのは規模の制約を規模の力でねじ伏せる別のゲームをやっているわけで、スタートアップとは同列に議論できないし真似しないほうがよいものも多い。

偏見だけど, Agile 信者がテック企業に入ったら Kool-Aid でやられてしまったのだな・・・という印象。自分も似たような部分があるのである種の共感がなくはないが、Agile Samurai はもうちょっとマシな内容だった記憶があるだけにがっかり。自分が悲しく汚れちまっただけななのだろうか。

Spotify 固有の部分は半分ゴシップ、半分ケーススタディとして興味深く読んだ。無理に一般化しようとせず What I Learned At Spotify みたいな本にすればよかったのにね。


がっかりの反動で唐突に Eric Ries の The Startup Way を聞き始める。同じくエンタープライズにスタートアップ方法論を売り込む話なのだが・・・この本はいいね。

The Lean Startup は Pivot だの MVP だのを流行らせ growth hack や startup methodology の先駆けになった。そういう movement を生み出しただけあって、Eric Ries の話は説得力があるし、理論もよく整理されている。語り口も良い。この本自体はさすがに三番煎じくらいで新しい話が少ないのかあまり売れなかったようだが、個人的に Eric Ries は割と影響を受けているのもあり、久しぶりに話を聞くと気分が盛り上がる。宗教家としての格の違いを感じる。なお Audio book は Eric Ries 自ら narrate している。さすが教祖。

スタートアップ論には方法論も精神論もあるわけだけれど、unicorns の皆さんと compete しようと思うなら 150 ページの薄い本を読むよりはこの Amazon で The Startup Way の関連書籍に並んでいるような奴らを順番に読んでいく方がいいのではないかなあ。

自分はその手の本には若干食傷気味かつ他人事なので足が遠のいていたが、来年は教養/気分転換/ドヤ顔素材としてもうちょっと聴いてもいいかもしれない。

感謝祭の夜に

|

旅先の宿で夜中に目が覚めた。頭をよぎったことを書く。


しばらく前から自分のキャリアが下り坂に入った手応えがある。職業的なピークは過ぎて、あとは何かが下がっていくだけなのだというぼんやりとした重量加速度。

学生時代に人生のピークがあった人物が、哀れさのステレオタイプとして世の中の物語に時々登場する。自分がそんな風でなくて良かったとたまに思う。人生の楽しい瞬間は会社員になってからの方が多かった。退屈な学生時代だっただけかもしれないが。

もしピークが過ぎたのだとしたら、いよいよ自分は楽しかった過去を惜しむばかりの哀れなステレオタイプに成り下がったのだろうか。だとしたらピークはどこかと振り返る。しかしこれといった山場は見当たらない。一方で道が平坦だったというのにも違和感がある。

気分だけでいうと、確かにピークはあった。一つは外資系の会社に雇われてオープンソースの仕事をはじめた瞬間。もう一つは外国に引っ越した瞬間。でもこれを人生の、あるいはキャリアのピークと呼ぶには抵抗がある。どちらの瞬間でも何かを成し遂げてはいないから。

何かを成し遂げた瞬間、たとえばあるソフトウェアの大きな機能を世に送り出した実績はあるか。おそらく HTML Imports はそれに当たるだろうが、これはかけた時間と労が大きいだけでとても成功と呼べない。Bittersweet な思い出くらいがせいぜい。学生時代のステレオタイプに比喩を求めるなら、なんだろう、学年一の美女とデートした(が何も起きなかった)みたいな感じだろうか。したことないからわからないけど。

つまり、自分の人生…というと大げさすぎる…職業人生に、特にピークはなかった。いくつか小さな谷があったから平坦ではない。でも山はなかった。残念だけれど、谷で足を踏み外し崖から落ちてないことを感謝するのがフェアな態度にも思える。感謝祭だし。今夜は。目の前の下り坂もあまり急じゃないことを望む。

気分的なピークを振り返る。求職相手から the offer letter を受け取った日、あるいはプロジェクトから the open source reviewer の権利を受け取った日。転勤願や永住権の認可が降りた日。何も成し遂げていないそれらの夜に頂点を迎えたものは何か。

可能性。あるいは期待。この先の人生で何かすごいことが起こるかもしれないという感覚を強く感じたのがたぶんこうした瞬間だった。けれどその期待を実現することはできなかった、というとあまりに悲観的なので、未だできていないと書いておこう。

けれど「何かすごいこと」なんておこるのだろうか。そんな形のない質量だけの願望を、人は叶えることができるのか。学年一の美女とデートしたい十代ですらもっとマシな見通しを持っている気がする。自分は可能性や期待ばかり追いかけて、その先に何があるかをよく考えなかった。「何かすごいこと」をしようと思っていたのかすら疑わしい。キラキラしたものを追いかけていただけじゃないか。だから大きな可能性を掴んだとき、その奥にあるものを引き寄せることができなかった。きっとそうだよな。

可能性の向こうのことなんて未だにわからないから羨望こそあれ後悔はしようがない。大きな成果を上げている同世代と手のひらにある自分の可能性の燃えかすを見比べると不甲斐なさから多少の失望はあるが、今はまずその可能性たちをささやかに弔うのが筋にも思える。会えて良かったよ、ありがとう、形にできなくてごめんなと。異国の盆は遠にすぎ、感謝祭だけど。今夜は。

紙読み日記: Spatial Transformer Networks

|

[1506.02025] Spatial Transformer Networks

チュートリアルに出てきたので読む。2015 年, 2100 citation くらい。画像の affine transformation のパラメタを learn できるという話。Differentiable Image Sampling というのがなんとも不思議。

grid sampler みたいのはどうやって PyTorch で実装するのだろうとおもったら、めちゃ C++ だった。しかも CPU と CUDA と CUDNN の実装がある。まあ grid generation 自体は事実上 range の生成で、sampler は texture の sampling みたいなものなので GPU で頑張る余地があるのはわかる(論文にもそう書いてある)が、こんな頑張るほどよく使うものなのか。

[1905.03813] When Deep Learning Met Code Search / Neural Code Search: ML-based code search using natural language queries

コードの構造をどう活かすのか気になって読んだが、基本的には雑に tokenize したのち NLP 的に扱うらしい。「メソッド」くらいの粒度は利用する模様。まあそうしないと特定の関数をみつけだす、といった検索ができないからあたりまえか。1 ソースファイル = 1 ドキュメントではないという意味でコードの構造は活かしていると言えるのかもしれない。なんとなくもうちょとミクロな構造を想像していたけれど。

なぜ Facebook がそんなにコードサーチをがんばっているのか謎。PL の研究者がいっぱいいるのでそういう demography の余波なのかもしれない。

PT 日記 (3)

|

またチュートリアル一個進めただけ。朝起きられない。

チュートリアルの写経がまったく捗らない。面白くない、とい面もあるけれど、前に進む感じがないのもやる気を起こさない原因に思える。チュートリアル、ランダムな話題のあつまりにしか見えない。書いてるのもそれぞれ別の人でスタイルに一貫性がないし、品質や重要性も疑わしい。もうちょっと前に進む手応えを感じられる話題が欲しい。なんで毎回この training loop を書き直さなければいけないんだアホくさい・・・。が、そういうことをいってないで黙々と手を動かせという気もする。

代替案として PyTorch の本をやるのはどうか・・・・と目次を眺めるが、チュートリアルの colab やるのと大差なさそう。結局じぶんは読んで得られる知識は足りていて、手を動かす motor skill が圧倒的に不足している。苦手だから読む方向に逃避したくなるけれど、ここは踏みとどまるフェーズなのでしょう。

したがって朝おきられなさは対症療法で凌ぐ必要性を感じる。例えば、寝る前にちょこっと notebook をさわって記憶を蘇らせるというのはどうか。あんまし就寝前に laptop したくないけど、なにごとも試してみるのが大事ということで。だめなら他の方法を考えましょう。


あと Tensor と Module をちゃんと理解してないせいで足元がおぼついていない気もするので、ドキュメント読むなりコード読むなりして理解を深める必要もあるかもしれない。ただ寄り道してると進まないので、これ朝以外の時間に best effort でやる。コードもリンクしとこう。

コード読みたいけど、読む活動に傾いてしまうと的をきっと外してしまうのだよなあ・・・。

前回

朝型化一年

|

朝おきるようになってからだいたい一年くらい経ったらしい。

ここ一ヶ月くらいまた起きられなくなっていて困ったものである。基本的に朝の時間は論文を読むことか、Podcast のオフシーズン中は小さな余暇プログラミングプロジェクトに費やされていた。今は PyTorch の写経をしているが、こいつがまったく捗らない。

捗らなさについては別に書くとして、朝おきるのは機能していたなと思う。朝と週末のスタバ逃避は自分にとっては dignity を保つのに必要。なので朝に時間がとれないと精神が削られていくのがわかる。

なぜ夜ではなく朝なのか。世の中の子持ちの大人はよく子を寝かしつけた後に「自分の時間」活動をしている。自分の場合、夜は起きていてもぼんやりインターネットで時間を溶かしがち。あまり意味のある活動ができない。なぜなら夜は疲れているからである。世間の大人たちはなぜ夜でも大丈夫なのかというと、あいつらは若くて体力あるんだよ!若さを口にするのが age discriminative なのだとしたら単に体力の差だということでもいいが、人間の個体差というのは存在するのでみな自分にあった方法を探していきましょう。

夜に活動する別の問題は over budgeting すなわち夜ふかししすぎて翌日に差し支えがち。昼の仕事が世を忍ぶ仮の姿で夜の活動がメインの aspiring people はそれでいいけれど自分は昼の仕事の成果は重要なうえに雇用リスクはリアルなので、あまりそっちを危険にさらしたくない。夜ふかししすぎることはあっても朝早く起きすぎることはあまりないので、そのへんは安心。

実は目覚ましを使うと朝早くおきすぎることはあり、一時期それで寝不足だった。それ以降、就寝が遅れた時は目覚ましの設定時間も遅らせるようになった。


朝起きるための工夫。

Philips の明るくなる目覚まし。これなしにおきるのはほぼ不可能といってよい。最近は子の寝室でも使っている。就寝の際に段々と暗くなる機能があるのも(子の就寝の)役に立っている。まあ大人はスパッと消せば良い。もうちょっと明るいといいんだけれど。光量を補いたいと青い光のバージョンを併用したこともあるが、目覚ましと連動しないのでいまいち。

部屋のデフォルト照明を明るくする、のは夜に眩しいなど様々な都合でやっていない。しかし検討すべきかもしれない。

Fitbit 腕時計の目覚まし機能。腕でブルブルされると、それなりに目が覚める。Philips のお供に。眠い時は無視してしまうが、そんなに眠い時はどのみち寝たほうが良いから問題なし。目覚まし専用機とちがって一日中つけておけるため、つけ忘れがよい。Android や Apple の時計はバッテリーが持たないのでダメ。

すかさず Podcast を聴く。音があると目が覚めやすい。内容はどうでもよいものほど望ましい。立ち入った話は眠くなるので。そういう意味で Audiobooks は不向き。朝のニュースみたいのがよい。つまりラジオだな。音をならしつつトイレに行って用を足し、顔を洗って髭を剃る。ダメな人っぽいがそういうもんです。

すかさずラップトップの光を浴びる。人の睡眠を妨げると評判のブルーライト、それを逆手に取ろうではないか。しかしダラダラと時間を溶かしがちな諸刃の剣。スマホは完全に時間を溶かすだけなのでおすすめしない。

早く寝る。だらだらとインターネットして夜ふかしすると試合終了してしまうが、やりがち。ありがちな問題として、夜のうちに片付けなければいけない諸用があるのに procrastinate して就寝がおくれるパターン。これはきっと翌朝に繰り越すのがただしい。ただしシャワーとかはさすがに寝る前に浴びたほうが良い(が、ダラダラおくれがち。)

早寝の助けとしてメラニンを服用する。イライラしているなどで寝付きが悪い時に有効。定常的には使ってない。

朝にやるプロジェクトを exciting なものにする。あるいは締め切りのあるものにする。やることがはっきりきまっていないと起きられない。最後にかいたけど、これが一番重要かもしれない。しかしそんな exiciting なプロジェクトがあれば苦労しないのだよ。

時間予算日記 (17)

|

金曜、土曜と続けて筋トレできず。

子供の就寝に向けて家中を暗くして、ベッドの上で絵本を読んだりしていると自分まで眠くなってしまう。奥様に付き添いをタッチして抜け出した後に体をおこし直すのがしんどい(眠い)。しかも自分はそのあと早々に寝るわけで、あまりおこしてしまうのも良くないし。就寝直前に筋トレというアイデアが良くない、のはわかっているけど、どうしたもんかね。

自分の筋トレは腕立て腹筋スクワットと自重だけでやる極めてカジュアルなもの。15 分もあればおわるのだから、仕事中にやってしまう手はあるかもしれない。たとえば昼食前とか?場所はどうするか。適当に開いている会議室をハイジャックするとかだろうか。幸いあたらしいビルはいまのところ会議室は潤沢。

しかし毎日会社で筋トレするのは気が乗らない。前日の夜に筋トレをしそびれたら翌日会社でやる、くらいはどうか。こうすれば二日つづけて筋トレそびれることは減るであろう。


メタな話として、ここしばらく自分のスケジュール調整をこの日記シリーズとして意識的に記録している。書き出してみると毎週のようにこの話題に頭を悩ませているのが露呈してばかっぽいというか、自分のことしか考えてないっぷりに若干 embarasssing.

Picture Taking Practice

|

もうちょっと頻繁に写真をとるようになりたいなと思っている。このことは定期的に考えるが、あまりに身になる結果につながらない。

写真をとりたい理由そのいちは仕事関係。いちおう毎日手元でビルドしてカメラの APK をインストールするよう自分に課しているのだが、さぼりがち。毎日録る動機がほしい。とくに最近微妙に性能上のバグがある気がするので毎日様子を見たい。(原因はわかっているが他人にたらいまわしたため。どのみち出荷までには直します。)ようするに真面目に dogfood したい。

理由そのには家族関係。子の写真はゆこっぷ(奥様)が割ととっているからいいとして、奥様の写真が少なくて申し訳ないとおもっているため。

理由そのさんは物欲関係。フルサイズフレームのミラーレスが欲しいとずっとおもっているが、買っても撮らなそうという不安がある。写真をとる行為をもうちょっと空気を吸う感じでできるようにしておき、準備ができたら物欲を行使したい。


自分がいまいち写真をとらない理由はいろいろ列挙できるだが、そういう分析よりは意識的に習慣化する訓練が望まれている気がする。

というわけでまず目標設定をしようではないか: 写真を一日三枚以上とる。しょぼい。そのうちバーをあげたいけれどまずはこのくらいで。これを 365 日やったらフルフレームを買って良いとする。

撮るのはいいとして共有するあてがないとむなしすぎて続かない。自分は Instagram には近づきたくない。As well as FB. Blog みたいのがあるといいんだけれど、写真は割とかさみがち。Google Photos でも使うかな。

というわけで一個アルバムをつくってみる。まあこんなもんでいいのではなかろうか。アルバムのタイトルは連番 + 一日のサマリにして、コメントに付加情報をつける。そしてこれを奥様および母上にシェアするものなり。まあ、しばらくやってみます。


ゆこっぷ(奥様)はスマホおよびカメラで写真をとる習慣が完全に板についており、感心する。日常の進行を遮って写真をとることもあり、それは slightly annoying だけれども、自分もおなじことをするのが平和な解決に思える。

とった写真は別にソーシャルメディアに行くとは限らず、どうしているのが不思議。ただ FB などの public social media の他に友達とだけやってるやつだとかメッセージングだとか色々と connected なのでそういうところで share している部分もあるらしい。あと日記 (Day One) とか。使う先が色々あると写真もとる気になるのでしょう。自分はいろいろこじらせていてよくないが、ソーシャルとかメッセージングとかやりたくないしなあ。

日記に写真をつけるのは良いアイデアかもしれない。このブログももうちょっと写真をいれるべきなのだろうか。WP には Google Photos インテグレーションもあることだし、それはそれでやっていいかもしんないね。ただこのドラフト公開スクリプトが写真対応してないからだめかな。

PT 日記 (2)

|

ほとんど進展なし。チュートリアルを一つ進めたくらい。

進展がない一番の理由は時間を割いていないからで、ふたつ目の理由は写経でタイポして原因究明に時間を使っていたから。タイポというか、自分の好みのスタイルに書き直した時に壊れてしまった。まあ一字一句おなじにタイプして壊れなくても特に体験としては意味ないので、書き直して壊すのも写経のうちかなと思う。PyTorch のデバッグのしやすさというのを体験できたのはよかった、かもしれない。

ところで nn.Module には training というフラグがあるのだが、このフラグによって評価時の戻り値の型が変わる (training 時には loss が、それ以外では inference 結果が返ってくる)という実装が普通に行われており、これが Python first の reality か・・・となった。

PyTorch DevCon 2019 のビデオをちらちら眺める。代表的なモデルはオフィシャルに色々実装されていることを知る。チュートリアルでも torchvision の pretrained MaskRCNN を使う例があってなるほどとおもったけれど、それだけではないらしい。CV の detectron2,  BERT とか NLP の新しいやつらの fairseq など。モデルじゃないけど torchtext もあるし。アルゴリズムの実装を眺めたい時に品質のわからない野良コードを探して読む必要は必ずしもないことがわかってよかった。

そのほかおもしろかったビデオ:

前回。

Revert First

|

雑な "リファクタリング" (クオートつきな理由は察せられたし) をして帰宅したはいいが割と基本的な挙動を壊していたらしく、時差のある世界で仕事をしている人々が右往左往している様子が翌朝にチャットのログから伺えた。ごめんね・・・しかし困ってないでさっさと revert してくれよ・・・。

いい機会なのでチームあてに "壊れてたら遠慮なく revert するのがみんなのためだからそうしとこうね" というメールを書く。これは社内では "rollback first" あるいは "revert first" と呼ばれ、民度の低いモバイル部門以外では常識になっている。その常識を説明したドキュメントをリンクして「ほらみんなやってるでしょ」と伝える。いくつか賛同の声がスレに連なる。

この「壊したらまずは revert」の常識、なんか名前があったはずなんだけどどうも "revert first" ではないっぽい。検索してもでてこない。社内ジャーゴンをあたりまえのように口にする人間にはなりたくないのだが。


ふと考えたが monorepo は rollback first 強制力が高い。なぜなら何かが壊れたときの影響範囲が広いから。TensorFlow が壊れては困り、Protobuf が壊れては困り、まあこのへんは稀なのでいいとして, CV 部門のライブラリが壊れては困り, Research の奥の方の何かが壊れては困り、なんかよくわかんないサードパーティのライブラリがアップデートされ壊れては困り・・・。アプリ側も割とストレスだが、ストレスのたまったアプリ勢からチクチクされる monorepo ライブラリ勢にはなりたくないもんですな。

時間予算日記 (16)

|

このところ妻子の就寝後の夜中に grocery shopping と cooking する機会が増えており、結果として就寝が遅れ、翌朝起きられず課外活動が削られている。

食料(材料、作り置き)の在庫を管理、補充するのは大仕事なのでときどきこうした遅れが生まれるのは仕方ないのだが、自分が買い物や調理をしてしまうとこのリズムがいっそう乱れがちな vicious cycle になり、それは困ったものだ。

なぜリズムが乱れるかというと、自分が買い物なり調理なりに介入することで奥様が在庫を把握できなくなるから。まあ冷蔵庫を見れば理論的にはわかるんだけれど、自分で作るものを決めて買い物をして調理してと End-to-End で担当した場合にくらべメンタルモデルを作りにくく、記憶が薄れがちになる・・・と個人的な体験にもとづき理解している。

これは仕事とかで下手にヘルプをつけられると協調コストでスループットが下がるのに似ている。ヘルプ人員(ここでは自分)がフルタイムなら協調コストも割に合うかもしれないが、片手間ヘルプなのでマネージメントに手間をかけてしまうと本末転倒である。具体的にいうと、食料在庫や調理計画の共同管理をがんばるのは大変すぎる。

こういうときのヘルプの定石は「手離れの良い仕事を引き取る」だと思う。そう思っていままでは朝食の調理を引き取って来たのだけれども、今起きているのは朝食材料の不足や子の弁当の材料および作り置きの不足である。つまり朝飯の調理だけを引き取るのだと不十分なことがある。まあ朝食の調理なんて卵を焼くくらいでほとんどやることないから、他の仕事を引き取るのはやぶさかではない。しかし管理コストを増やさない「手離れの良い仕事」を探さないといけない。どういうオプションがあるのか。

ひとつは朝飯の grocery shopping もやり、朝飯を E2E で引き取ること。これは理論的にはいいのだが、重複する材料(例: 卵) の扱いをどうするかが悩ましい。まあ卵は日持ちするので朝飯とそれ以外で共有しないのは一つのオプションかもしれない。あとは奥様が(好みなどの都合により)介入したいケースもある気がする。(たとえば自分はいつも whole wheat で multi-grain のパンを買うが白いパンも食べたいなど。) まあそのくらいの介入はどうぞ、ということにすればよいかもいれない。材料が余ったら冷凍するなり捨てる(ひどい)なりする。

ただ不足で困るのは朝食よりは子の弁当なので、朝飯を takeover してもいまいち問題が解決しない。では子の弁当も takeover すればいいかというと・・・。ちょっと荷が重いなあ。そしてこれは「たまに朝食と弁当の準備が発生する」現状より自分の仕事が多い。しかしまあ、それが正しいようにも思える。

が・・・ちょっとそこまでのコミットメントをする覚悟がないなあ。食事の不足や手抜きを受け入れるのもアリではあるが、食事が貧相だと場が険悪な空気になりがちなのでそれはそれで厳しい。のでしばらくは現状の不定期夜間買い物および調理を受け入れようとおもいます。はい。PyTorch は早起きできたときだけさわるということで。精神衛生マージンに若干不安があるが、まあ永遠に続くことでもないからだいじょうぶでしょう・・・。


もっと具体的で小さな問題な気がしてきた。朝食用食材の在庫補充を責任をもってみている人がいないせいではないか。夫婦で互いになんとなく足りないものを買ったり買い物リストに入れたりしており、そのせいでしばしばタイミングが遅れたり品揃えに漏れが出る。典型的な responsibility gap.したがって自分がすべきことは在庫補充担当の takeover ではないか。

ということでストックしておきたい朝食用食材を書き出してみるとオプショナルなものを含め 20 個くらいある。そりゃ買い忘れるわ。

紙にリストを書き出し、うち必須常備品に下線をひき、台所に貼っておく。これを寝る前や朝食調理時に walk through して足りないものを買い物リストに入れればよいでしょう。この手の作業の mental overload の出処は 1. 必要なものを思い出すこと 2. 必要性の有無を判断すること なので、リストを貼っておけばだいたい解決のはず。

いまなぜこの問題が顕著化したかというと、奥様の忙しさが高い時期だからでしょう。材料ではなく常備菜の枯渇については別途検討すべし。

紙読み日記 (1)

|

ひまつぶしにぱらぱら論文を読む活動は続けたいと思い、昼休みとかにちょこちょこ読んでる。論文単位で記事にすると細かすぎるが、日記にまぜると見失いがちなので、何本かまとめて書き出してみる。

[1910.02190] Kornia: an Open Source Differentiable Computer Vision Library for PyTorch

PyTorch を使って OpenCV みたいな伝統的 CV を実装してみたよという話。GPU が使えて割と速いし、NN のアルゴリズムでも前処理に OpenCV つかったりするからぜんぶ PyTorch になってると便利だよと主張する。OpenCV の contributor の一人が書いている事実は面白い。

有り難みに実感はないが、NumPy の上に作られたライブラリたちを PyTorch 用に再実装すると嬉しいケースはぼちぼちあるのかもしれない。

A Landscape of the New Dark Silicon Design Regime

しったかぶりをしてしまった反省を踏まえ、関連論文を読む。これは Dark Silicon をテーマにやっていた UCSD のプロジェクトの終盤にかかれたまとめ論文みたいな内容。Dark Silicon の有効活用として色々な方針があるという話をしている。一つは Near Threshold Voltage Design という、要するにクロックを下げまくるという話。あまりピンとこない。あとはキャッシュに使うのも良いと行っており、最近のサーバサイドの CPU のキャッシュがやたらでかいのは余り面積を活用するためだったのか・・・と腑に落ちた。

特殊用途の回路を作る話としては Android platform の一部を C からコンパイルするハードウェアで置き換えた GreenDroid という研究が紹介されていた。おなじ UCSD のグループが 2011 年にやったもの。Domain Specific Architecture の前進みたいな Conservation Cores というアイデアに基づいているらしい。

[1909.09436] CodeSearchNet Challenge: Evaluating the State of Semantic Code Search

GitHub が MSR と共同ではじめたコードサーチランキングの competition を紹介する論文。自然言語でコードを検索したいんだけどどうしようという問題。

サーチとかランキング以外の部分を作るだけでも大変じゃん・・・と思っていたが、ランキング以外の部分はぜんぶ前処理して JSON を用意してくれており、それをランキングするという趣旨だった。あと LTR みたいなログ頼りではなく伝統的 (?) な IR に近い。

具体的にはコードのコメントをクエリーにしてメソッドを特定するような構成。メソッドは本文も適当に tokenize した文書になっている。最終的なテストは Stakcoverflow のデータを使っている。コメントをクエリーに見立てるのはどうなの、というと、若干いまいちだけど他に良い教師データがないから仕方ないと主張している。

PT 日記 (1)

|

PyTorch 入門日記。

ぐだぐだしてても始まらないので何も考えず入門チュートリアルをこなすものなり。とりあえず最初のやつだけやった。一週間で進捗がこれだけとは捗らなすぎ。来週からはもうちょっと時間を割けるといいのだが。

手元に環境を作ろうかと思ったものの、環境セットアップで時間を溶かしがちな過去を踏まえまずは Colab で。というか実は Conda を入れて Jupyter を起動したのだけれどキーバインドが思い出せず Colab に撤退した。そのうち Conda に戻るかもしれないが、とにかく「正しい環境」を作るのは意識的にさぼり、行けるところまでは素人ぽく進めるのが今回の目標。すなわちなるべく pyenv とかそっち方面は避けたい所存。Colab, リリースされたばかりの PyTorch 1.3 がさっそくインストールされており感心。

さわった感想:

  • ほんとに numpy ぽくつかえるのに感心。
  • backward() したあと buffer が開放されるタイミングがよくわからない。が、保留。
  • nn.Module と nn.functional の住み分けがいまいちわからない. Trainable parameters がある場合は nn.Module にするかんじなのだろうか。まあ実用上はふんいきで使えば良さそう。そして nn.Module の定義をみていると Python にも pipeline operator あればよかったのになと思う。
  • DataSet や DataLoader はしょぼいが、こんなもんでいいのかもしれない。
  • データの中身を覗くところに強い苦手意識を感じる。いわゆる EDA というやつ。ML 以前に data exploration の練習が必要(だが今はその事実を無視してチュートリアルを進めてまいります。)これとかこれみたいな本があるあたりに R の歴史的強さを感じる。そのうち The Pandas Book (2ed) でも読むことにしましょう。
  • TorchScript がモデルフォーマットの標準になると思い込んでいたがまったく間違いで、実際は Python code + weight の dump を使うものらしい。たしかにその方が pretrained モデルが Python オブジェクトとしてさわれるから再利用は圧倒的にやりやすい。TorchScript はあくまでコンパイルされた実行環境向け表現なのだね。


本当はなんらかの ML プロジェクトをやるなり Kaggle に参加するなりオープンソースに PR するなりデータ職を得るなりのゴールをもって進めた方がいいのだろうけれど、決めることができなかった。興味のもてる ML プロジェクトはないし、競技にもやる気を起こせないし、オープンソースをするならコードなりバグなりを読んだほうが早いけど自分がやりたいのは ML だし、職の点では TF をやった方が良いし。

意味のある目標を持つ意義は理解しているが、自分は目標について考えるほど自分と ML の間にある距離の現実を突きつけられ憂鬱になるばかりだった。何か意味のある(キャリアに影響のある)形で ML に関わることが自分にできるとは思えない。

ただその現実に discourage されて何もできずにいるのは癪なので、深いことは何も考えずチュートリアルで手を動かすことにした。これは Hello Work と同じ精神。多くを期待せずただなんとなくさわってみる。なにかおもしろいことがみつからないかなと淡い期待を抱きながら。

やってみてわかった(というか、思い出した)のは自分はとにかくデータを触るのが苦手で、こんな簡単なチュートリアルですら結構 uncomfortable だいうこと。そしてこの uncomfortable な感じは仕事だとなかなか得られない。

実害の無い形で苦手なものを触り「苦手さ」を和らげていく体験として PyTorch をやるのはアリだと思うに至った。目標がなくても手を動かすのは、何もしないよりはマシ。手を動かさずにいると忘れがち。

時間予算日記 (15)

|

朝のスケジューリングを工夫した結果 、妻子のドロップオフ最遅時点まで家族として 30 分近くの空白をつくることに成功する。が、その 30 分は「ゆっくり過ごす」という形で消化され、自分は出勤を早めることができない。所定労働時間を満たせない日々が続く。どれだけ時間を shave out しても無駄なのではという絶望が頭をよぎる。フラストレーションで頭が痛い。

冷静に考えるとこれは「時間がない」ストレスではなく「時間をコントロールできない」ストレスなのだろう。20-30 分くらいの時間は勤務時間内ではしばしば浪費されるが、これほどのストレスは感じないわけだから。

朝キチキチと物事を進めて時間を前倒すのには、それはそれで子を急かすなどのストレスがある。それが「所要労働時間を満たす」の対価に見合わないと暗に捉えられているのだろう。結局のところ働くというのは個人的な所作で、仕事への態度には深いレベルで理解しあうことのできない部分がある。仕方ない。これを説得することに関係性のバランスを費すのは割に合わない。

かわりに退社を 30 分おくらせることにする。退社時間は自分がコントロールできる変数。「時間をコントロールできない」不満を、時間に対する自分のコントロールを行使することで解消する。まあ、妥当。

対価はある。帰宅後の進行が遅れ、子の就寝が遅くなる。30 分ぴったり遅くなることはないにせよ。多少ね。これは望ましいことではないが、自分の精神衛生にもあまりマージンがない。すべてが思い通りにならないのは仕方ない。


子の起床を遅らせることで、朝の bin packing によって生まれた時間を「朝食後にゆっくり過ごす」ではなく睡眠に割り振ることはできる、かもしれない。子は 30 分遅く起きて、家族は従来通り学校の時間にあわせ家を出て、自分は 30 分退社を遅らせる。結果として子の就寝は 30 分遅くなる、というイメージ。子の睡眠は失われず、自分は失われた労働時間を取り戻す。

これでよさそうだな。まあ自分の帰宅通勤は kick scooter によって 15-20 分短縮されているので、実際は上に書いたよりマシになっているはず。

 

1st Day of Kick Scooter Commute

|

Kick scooter 通勤初日。

徒歩 45 分、ランで 20-25 分のところを 25-30 分くらい。つまり今のところ走るよりちょっと遅い。割と疲れる。心拍の負担はそんなでもないのでランのように汗だくにはならないが、バランスをとったり地面を蹴ったりするので別の筋肉が必要。

道の bike lane を走るのかと思っていたが、ランより遅いので歩道がメインだった。一方、自分の通勤路の歩道は舗装がしょぼいのでガタガタ。交通量をみつつ、安全な範囲で bike lane を使いたい。舗装の良し悪しがそのまま走りやすさと速度に直結している。

いちおう前日にちょっと練習したけど、なんだかんだで新しい乗り物なのでそれなりに不慣れで、あぶなっかしさはある。まだまだ練習というか慣れが必要。しばらくは通勤のオーディオコンテンツ消化はおやすみだな。

総体としては「歩きより速く走りのように汗を書かない」という最低限のゴールは達成されたが、ぼんやりと期待していたそれ以上の素晴らしさは特になかった。それは通勤路の舗装がへぼいせいでもあるし、自分が既に自転車やランなど「歩きより速い人力通勤」の経験者だからでもあろう。

そんなかんじで若干がっかりだったが、たいして練習もせずヘタクソな身分で期待と違ったと投げ捨てるのもかっこ悪い気がするためもうしばらく練習したい所存。久しぶりに普段使わない筋肉を使っている感じがあって、それは良い。スポーツだと思って取り組むべし。返品のウィンドウは一ヶ月だけど、どうかな。せめてもうちょっと上手になって、危なっかしさが下がるといいんだけれど。


Kick scoot したあと他のオプションについて考えたこと。

自転車はよくできている。すごい速いしラク。家に置き場所があるあら自転車に乗りたいもんです。「自転車」という形態が究極的な良さを持っているというより、十分に需要があるおかげで人類ががんばって改善を重ねてきた結果な気がする。Scooter、もうちょっと伸びしろあるんじゃないの? 自分がもっているやつより車輪の直径がおおきく、かつサスのあるモデルもあるらしい。ただのりやすさが増すほど嵩も増すのが悩ましい。まあ、しばらくは今のやつに乗ります。奮発したし。

ここ一週間くらい通勤中にあらためて周りを見ていると E-scooter は結構みかけるが、あれはないなという結論。あまりに運動しなさすぎ。

誰が力を持つのか

|

製品開発においていちばん影響力をもっているのは誰か。もちろん組織構造で上の方にいる人が偉いわけだが、それはさておき様々な SWE, SWET, PM や UX など色々ある職能のうち誰が強いのか。

ブラウザをやっていたころは、プログラマが強い印象だった。自分が  Web の API を増やす部門だったせいもあるとはおもう。プログラマ(のうち意見のあるアジテーターみたいな人)が色々とやりたいことを決める。PM は主にロジスティクスとか辻褄あわせとかをやる。仕事の性質上 UX はいない。Web API に限らず、ブラウザという製品の舵取りをするのは founding member のエースプログラマだった。今はどうだか知らないが・・・。

UI にしても、デスクトップだとメニューに要素を一個足すくらいなら UX に相談とかは一切なく新入りプログラマが思いつきで足すようなことを平気でやっていた。というか自分は  パッチ修行として Mac Chrome に「辞書を引く」というコンテクストメニューの項目を足した。十年前は牧歌的な時代だったという話でもあるが、それだけでもあるまい。

UX

スマホアプリのチームに異動してびっくりしたのは UX の力の強さだった。プログラマが雑に UI を決めたりはせず、基本的には UX (デザイナ) のつくったモックを実装する。プッシュバックしたりはあるが、ほとんどのプログラマは自分でモックを起こすことがない。新入りが勝手にメニューを足していたデスクトップとはだいぶ違う。画面が狭いので雑さが許されない。

UI をデザインするというのは、結局機能をデザインするのと同じ。なので UX が製品の舵をとっている・・・というのは大げさすぎるが、プログラマには「降ってきた仕様」を実装する下っ端ぽさがあった。(自分が性能改善ばかりやっていたのは、それがなんとなく面白くなかったせいもある。)面白いのは UX の人々が自分の権力を自覚していないように見えたこと。そして UX とプログラマの関係が妙にウォーターフォールぽかったこと。プログラマ主導、実験指向で漸近的な開発を誇っていた企業のはずなのに、モバイルになった途端こんな前時代的になってしまうとはとショックを受けた。

まあプログラマは別に地位が低いわけではないし意見もある人々だったのでただおとなしく仕様を実装したりはせず色々ネゴしたり自分のやりたい機能をゴリっと入れたりもしていたがそれは個人の努力であって、プロセスはそうしたプログラマの自律性を後押しはしていなかった。

ただしばらくモバイルの仕事をして振り返るに、これはやや極端な例だった。つまり、必ずしも UX パーソンが仕様を主導するわけではなく、それができるのは優秀かつ意見のある人だということ。たとえばチームの新機能ブレストみたいのをリードするのは誰か。UX の人が主導するチームもあるし、プログラマが主導するチームもあるし、PM がやるときもある。

自分が体験した UX 主導プロジェクトは、プログラマが相対的にボンクラだったのに対し UX のひとはすごい優秀だった。実際そのひとはトントンと出世し、どこかに行ってしまった。その人の下で働いていた UX の人がいまの自分のチームにいて、やはりというか割と優秀である。

PM

Mini CEO などともてはやされがちな PM. 存在感はまちまち。ブラウザ時代いっしょに仕事をした PM は雑用っぽいかんじだった。無能というわけではなく、ただ方向性とかは主張しない人々だった。当時はまわりに TPM も PGM もいなかったけれど、事実上そうした仕事をしていた気がする。おかげで人々から感謝はされていた。

電子書籍時代の PM は、下っ端の若者はさておきシニアな人は大きな方向性やビジョンみたいのは決めていた気がする。たとえば「Audiobook やるぞ」みたいな。そういう人がミーティングでバーンとプレゼンし、具体的な機能は、その方針をうけてプログラマなり UX なりが考える。PM がエラそうにしてる!と最初はちょっとびっくりした。

電子書籍ではコンテンツホルダ(出版社)との窓口をするパートナーシップの人も存在感を持っていた。契約上の色々なめんどくさいことはこうした人たちが PM と組んで deal してくる。プログラマは出る幕なしで、決まったことを実装しないといけない。これはパートナーシップ部門の人が偉いというよりはコンテンツホルダが偉い、すなわち Content is king という話な気もする。むかし Ben Evans が Content isn't king と書いていたが、これは市場を独占した人たちに限った話。

PM は色々なことをトップダウンに決めているように見えたが、実際は関連部門の意向をとりまとめていた面もあったのだろうと思う。今やっているカメラの PM は比較的仕事ぶりの transparency が高くどうやって物事を決めているか開示している。それによれば、リサーチ部門からハードウェア部門から OS 部門まで各方面に話を聞いた上で判断を下している、ように見える。バーンとトップダウンにプレゼンしているように見えた電子書籍時代の PM も、たぶん事前に各職能の leads と相談し、おおよその合意を形成していたのだろう。自分が気にしてなかっただけで。

トップダウンより合意形成を重視するのは、一つには PM は別に関連部門の上にいるわけではないからだろうね。それでも自分がいまいるチームの PM はそれなりに筋の通った価値基準を持ち必要に応じて外からの提案を押し返したりもしているので、個人的には評価している。エラくなりそう。

SWE

プログラマはソースコードという最終成果物に直接アクセスできる強みがあるので実質的には一番権力がある・・・と思っていた時期もあったが、実際にはケースバイケース。

たとえば勤務先のモバイルだと勝手に UI をいじれない。レビューが必要。これは大企業だから官僚的という面はあるし、モバイルだから画面予算の管理が厳しいという面もある。

電子書籍だと、コンテンツホルダとの契約があるのでデータのいじれる範囲に限度がある。社内で実験的になんかいじるのはいいのかもだが、その結果の扱いには制限が多い。新機能のために契約の制限を克服するにはパートナー担当や PM の協力が必須。そしてふだんからパートナーシップに接している PM は契約をどこまで交渉できるかの肌感覚を持っているので、標準的なプログラマとくらべ機能デザインにもカンを働かせやすい。

Web API にしても標準化されてるのでコードがいじれるからといって勝手に増やしていいわけではない。標準化団体で人々を説得するなどが必要。とはいえモバイルプラットフォームとかの方がプログラマが自分で API を決めて実装している色が強い。何らの官僚的なプロセスはあるにせよだいたい会社の中に閉じており、競合他社を説得するとかは必要ない。コミュニティを説得しないと新しい API を使ってはもらえないが。API を決める仕事とっても色々あるね。

様々な場面でプログラマが主導権を発揮できないのは、該当者がボンクラだからという面はゼロではない。UI プログラマならモックくらいいじれるべきだし、電子コンテンツプログラマなら権利関係を理解しているべきだし、Web API プログラマは弁が立って然るべき。といえなくもない。

たとえばカメラの高画質を支えるアルゴリズムを開発したリサーチ部門のトップは製品開発の組織系統に直接は所属していないにもかかわらずめちゃめちゃな影響力をもっており、他のチームが一年かけて作ってきた機能を一声でボツにしたりする。これは実力の帰結と言えよう。

これは極端な例かもしれない。とはいえプログラマなら勝手に書いたコードはそのまま出荷はできないにせよデモくらいはできる。雑な世界にあった自由と力はないにせよ、なんらかの優位はある。ただデモとかハックをするにはある程度ヒマが必要なので、締め切りに追われてるとダメだね。


組織で働く会社員プログラマの仕事場として望ましいのは誰が力を持つチームか。

プログラマが力を持つ環境で一度くらい働いておかないと、それがどういう状態なのか理解するのは難しいかもしれない。今の会社に入る前の自分は、たぶんわかってなかった。一方で他の職能のひとが活躍している様子を見るのは、それはそれで学びがあり、人を humble にする。

あと一つの職能の人だけが活躍しているより、それぞれが主張をしつつ交渉や議論のダイナミクスの中から製品が立ち上がってくるほうがわくわくする面はある。プログラマが主役になってばかりの環境にはない面白さがある。

たとえば UX のひとがもってきた新しいデザインに、ちょっと気の利いたツイストを加えた POC でプログラマが応じる・・・みたいなのは見ていて楽しい。あるいは自分がやっている性能仕事のドキュメントをもとに PM が気の利いたピッチをスライドにするのを見るのも・・・まあ、なるほど、とは思う。自分がもうちょっと野心のある身だったら盛り上がるのではなかろうか。今は若干こっちくんなとか思ってしまうがそれは PM のせいじゃないからね・・・。

ただプログラマが仕切っている環境の方が、その仕切っている人の価値観とズレがないならストレスは少ないね。ストレスが低いのは、それはそれで大切。


Draft の底に沈んでいたやつを Rebuild で話す準備として掘り起こしてみたが、話す時間なさそう。

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 が満たされていないからと主張しているのは面白かった。この本は冷やかしてみたい気もする。

高速化日記 (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 ですかね。とりあえず引き続きスルーでよさそうなのが確認できてよかった。しょうじき使う日はこなそうだが、頭の体操にひやかすのは悪くないかもしれない。そのうち。

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

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 が採用したことで話題になっていた

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

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

音の鳴るおもちゃとはてなくん

|

音の鳴るおもちゃが苦手で、子にはあまり買い与えていない。

楽器ではなく、 ボタンなどのスイッチを押すと録音されて効果音が再生されるようなやつ。同時にランプが点滅したりもする。楽器ではないと書いたけれど、楽器やオーディオ装置を模した形をしていることも多い。

ランダムに音が鳴るのも苦手だし、プラスチッキーな外観も好きに慣れない。例外としてボタンを押すと短い歌が流れる "sound book" を 2-3 冊持っている。別に何らかの criteria を満たしからではなく、これらをいくつか買ったあとでもうたくさんという気持ちになった。強いていえば sound book は嵩張らないところがマシ。

自分たちはよくあるテックな親としてスクリーンも控えめにしか見せていないので、子は音に耐性がない。音の鳴るおもちゃ、にかぎらず音というものにはだいぶ sensitiveで、mall とかにいくと全方向から鳴る音にキョロキョロしている。過敏すぎが少し心配ではある。


そんなかんじで音の鳴るおもちゃのない家に「こどもちゃれんじ」の教材デバイス「はてなくん」がやってきた。別名タッチペン。ステルスインクを読み取るスキャナで、教材の冊子のページ内に埋め込まれたマーカー ID を読み取ってなんらかの録音を再生する。たとえば動物の絵をスキャンするとその動物の鳴き声が再生される。

さらにデバイス内に簡単な state を持てるらしく、クイズの設問マーカーをスキャンしクイズを再生したあとそのクイズの正解をスキャンし設問に答えることができる。たとえばページ左上のしまじろうアイコンをスキャンしたあとページ全体に描かれたモブから彼をさがしてスキャンすると該当キャラのよろこびの声が再生される、といったことできる。

タッチペンの「はてなくん」は音の鳴るおもちゃである。しかもかなり出来が良い、つまり子供を引きつける力の強いやつ。まず再生される声のデータが多い。見開き 5 ページくらいの冊子の各ページに 10 パターン以上の音声が再生される。先に書いた state を駆使してかなりインタラクティブだし 、たまにランダムで自分のテーマ曲を歌う easter egg まである。

コンテンツにはもちろんベネッセの稼ぎ頭「しまじろう」が登場する。しかもそのコンテンツが毎月更新される、というか毎月新しい冊子が届く。サイトによると 10 ヶ月分で合計 4700 音声らしい。そこらへんで売ってる嵩張るばかりの音の鳴るオモチャとは格が違う「面白さ」、刺激の強さがある。

開封した翌日、普段は寝起きの悪いその子は朝起きると「はてなくんで遊びたい」といった。昼寝から置きた時も、ふだんなら「ぶどうたべる?」とかいっておやつの力で意識を呼び戻すところ「起きてなにしたい?」ときいたら「はてなくん」と答えた。じゃあ遊ぶかと一緒にあそんでいたら・・・

おしっこをもらした。ここのところトイレトレーニングは順調で半月以上もらすことがなかったのに、タッチペンに夢中すぎて尿意を無視してしまったらしい。だいぶショック。文章にするとファニーだけど当事者にはおおごとなのだよ。


タッチペンの楽しさ、刺激の強さ、あるいは「エンゲージメントの高さ」は親である自分を不安にさせる。同類の刺激の強いおもちゃはずっと避けてきたのに、教材の顔をしたこの刺激テクノロジが突然乱入してきて焦る。

自分の中にある「音の鳴るおもちゃ」への抵抗は主に aesthetic なものだとなんとなく思っていたが、それだけでないことに気づいた。この抵抗は「スクリーン」への忌避に通じている: 当事者(子)の effort に対する reward としての刺激が強すぎる。簡単にヒマが潰せすぎる。

「音の鳴るおもちゃ」を選ぶ世の中の親を非難したいと自分は思っていない。スクリーンをはじめとする刺激物の影響に確固たる結論は出ていないはずだし、どのみち子育ては各人の判断でやるものだから。ただ、自分たちの中の standards や boundaries はなるべく一貫させたい。タッチペンはその壁を激しくぶちぬいてきたので動揺している。タッチペンにはスクリーンと同じような扱いが必要なんじゃないか。

というか、そもそも与える必要はあるのか?

教材である以上なんらかの学習効果を期待しているわけだが、その効果はこの刺激のコストに見合っているのか。今回のコンテンツを見る限りその見返りは感じない。他の本やトイで足りてんじゃね?

ウェブで世の親の声を眺めてみると、言語の獲得を助けるのが主要な効能として評価されているようす。つまりタッチペンで遊んでいたらしゃべるようになった、字が読めるようになった、というようなもの。幸い子はすでにだいぶしゃべるしひらがなも読めるようになってきたので、その点でタッチペンの助けは要らない気がする。

公式サイトはそのほかの効能ジャンルとして「数」「図形」「論理」「好奇心」を挙げている。そんなに高い効果あんの?コンテンツからそういう作為・・・・という書き方は悪意がありすぎるけれども、意図は感じる。しかしそんな思い通りにいくの?


他の教材なのかおまけなのかよくわからないコンテンツたちも、やはりテイストが親たる我々の趣味とあまりにも違い、その割に子供は夢中で、しかし教材としてのユニークな価値というものは感じられない。(世の中ユニークな教材なんてものはほとんどないだろうから、この批判がフェアでないのはわかっている。気分を書き下してるだけです。)

この受け入れられなさが刺激が強すぎるという「子のため」の判断から来ているのか、テイストの不一致という「自分のせい」なのか、冷静には見極められない。ただ親としての居心地の悪さがどうにも辛いので、夫婦協議の末に解約した。

ウェブを眺めてもタッチペンに対して自分と同じような不満は見つからない。しかし音の鳴るおもちゃへの批判はあるはずなので、やや不思議。きっと自分と同じような指向性の人はそもそもこの教材を購読しないのだろうね。不用意だった。ただ「こどもチャレンジ」がどういうものかわかったのはよかった。高い勉強代、あるいはうかつ税となった。

画面の不透明さ

|

ソーシャルな場面、特に家庭で、ラップトップなりスマホなりの画面を眺めているのは感じが悪い。自分も食事中にスマホをされるのは不愉快なので家では夫婦とも食卓でのスマホはナシとしている。

一方、たとえば食後にソファなりベッドなりで画面を眺めているのはどうだろう。人にもよるだろうけれど、自分の感覚だとこれは食事中ほど感じはわるくない。一方で、子供がいるとやりにくいし、実際自分たちはあまりやっていない。しかし、結果として子供の目を盗んで画面を見るという本末転倒なことがしばしば起こる。なんか不毛。

いま子に画面を見せたくないのは、それが過剰に引力を持っているから。一旦画面に気を取られると、たとえば何らかの動画を見せろと tantrum が起こる。一旦見せても次々に見たがりきびしい。この問題は、ある程度は時間が解決すると思っている。

もう一つの問題は子に限ったことではなく、画面というものが持つ awkwardness に由来している。つまり、画面の向こうで何が起きているのかが外からわからない。

食卓の例にもどると、たとえば食事中でもちょっと調べものをしたいことはある。一方で、調べもののついでにソーシャルメディアなどをひやかすことも可能だし、実際に寄り道はおこる。画面が見えない事実も寄り道を招きがち。その寄り道はしないでほしいし、自分でもしたくない。画面が外から見えないとその不信感は払拭できない。

食卓に限ると、調べものとかはテーブルに電話を置いて作業しようと決めている。画面を隠さない。こうすると、少なくとも夫婦間での問題は解決する。地図を見るとか買い物アイテムを足すとか、別に他人に見られてもいいし。

ソファやベッドは同じ方法が使えない。こうした時間にソーシャルメディアなり何なりを眺めるのは何も悪いことではない。ただ問題が無いわけでもない。相手に話しかけたい時、あるいは話しかけられても構わないときに、良いシグナルがない。つまり画面を見ている誰かはいま「忙しい」のだろうか。それともどちらかというと「ヒマをつぶしている」のだろうか?ラップトップや電話の背中はこうした問いに答えてくれない。

ラップトップや電話のない世界では同じ場面で何が起こるか?テレビやテレビゲームは、そこで何が起きているのか筒抜け。ポータブルゲーム機は、すくなくともゲームをしていることはわかる。紙の本や雑誌を読んでいるなら、本や雑誌のタイトルはわかる。雑誌は、どの記事をよんでいるかまではわからない。ノートに日記を書く。日記を書いていることはわかる。何を書いているかは見えない。ノートと教科書をだして勉強をしている。科目くらいはわかる。電話で誰かと話す。筒抜け。

ここには何らかのシグナルがある。ゲームをしているなら、その場で話しかけてもムダだろうが(ゲームに集中しているから)、一方でそのラウンドがおわったら用事があると伝えることはできる。電話もおなじ。本や雑誌を読んでいるならたぶん話しかけて問題ない。日記も、たぶんだいじょうぶ。勉強は、そっとしておいてあげたい気もする。

プライバシーも、一定程度はある。つまり(少なくとも家族なら)日記を覗き込むんだりはしない。読んでいる雑誌を覗き込むのは、たぶん構わない。他人に知られてくない読みものは、そういう場面に持ち込まない。仕事の電話も席をはずす。

スクリーンにはこうした nuanced  なプライバシーやシグナルがない。それが awkwardness につながっている。

不透明でない画面の可能性

少し意外な発見として、デスクトップの画面は場合によってはシグナルがある。具体的には living rooms にデスクトップを設置すると画面はまわりに筒抜け。職場での画面も同じ性質を持っている。デスクトップを使っていたり、ラップトップを大きなモニタにつないでいると、作業はまわりに筒抜け。これはある種の制約としてもよく機能する: 仕事中あんましソーシャルメディアとかみてんなよ。まったく気にしない強い人もいるが、すくなくとも Facebook やってる同僚に仕事の話で割り込むのに気後れはない。

Kindle のデバイスも少し似たようなところがある、つまりすくなくとも本を読んでいるであろうことはわかる。カバーつきの本くらいの可視性。

スクリーンを使いつつ、適切な可視性で家族にシグナルを伝えることはできないものか。つまり、つかっているアプリなりみているウェブサイトくらいは外から見えてほしいんだけど、見せられないんですかね?

富豪的な解決は用途別にデバイスをわけること。これはインターネットにつながるデバイスとそうでないデバイスをわける、みたいな断線の仲間だけど目的は違う。機能するかもしれないが、そのためにはメインのデバイスでソーシャルをしない決断が必要で、それは自分はともかく他人(奥様)に強いるのは難しそう。

Surveillance dashboard をつくる。ブラウザ拡張や強い権限のあるアプリで、いまつかっているアプリやみているサイトを検出のうえなんらかの見える場所に表示する。おおがかり。あと iPhone 相手だと使えない。 ついでに寝室には surveillance dashboard 置きたくない。十分に非侵入的かつコンパクトで持ち歩けるデザインなら話は別だが・・・。

理想的には PC なり電話なりの背面に小さい画面があって、そこにアプリのアイコンなりサイトの favicon を出せるといいんだけど。そういう時代は来ないだろうなあ。

紙を選ぶ

より現実的に、画面でなくていいものを画面から追い出し、シグナルのあるメディアを受け入れることもできる。要するに紙の雑誌を買う。紙の本を買う。紙のノートで日記をつけるなど。

紙のメディアは「かさばる」という大きな欠点があるわけだが、その「かさ」がまさにシグナルとして機能する事実は無視できない。いわゆる affordance というやつ。本の affordance がどれだけ重要かは場合によるが、それが本当に priority なら紙の本を買うのはアリだと思う。ただ失うものも多いので悩ましい。

そんな理由で最近はためしに紙の本を買ってみている。でも技術書は厳しいね。でかすぎ。一方、たとえば Modern Operating Systems は表紙が賑やかで楽しいらしく子が興味を示す(まさかこのダサい表紙にそんな魅力があるとは)し、ヘネパタを読んでいる時に子が寄ってきたら裏表紙をみせて「これがヘネさん、これがパタさんだよー」とかいう話ができる。などなど affordance の力は感じている。

ただ長期的には family-aware で less awkward な media consumption device に出てきてほしいなあ。Apple と Amazon に期待。ていうか Kindle DX 帰ってきて!愛してた!


追記

その後も実現方法をぼんやり考えていたが、子供を画面に近づけたくないうちは無意味なアイデアに思えてきた。そのフェーズが終わり子供に画面、というか画面つきデバイスを渡すようになったら surveillance dashboard を作っていいかもしれない。

How It's Been Ending (5) - Software Development

|

ハードウェアがあまり速くならない世界で、ソフトウェア開発はどうあるべきか。

マルチコア化や GPU 対応みたいのは、ある程度は進んでいるが「Many core が来るぞー」といっていた時に想像していた、全てのループとデータ構造が並列化される、みたいな勢いには至っていない。(知り合いもそんなことを言っていた。)

これは、端的にいうとクライアントサイドだとコア数がそんなに増えなかったからで、サーバサイドだと serving の inherent な concurrent nature を exploit すれば足りたから。Big data 方面の data parallelism は進展があったけれど, functional にしましょうね (Spark),  Stream も相性いいよ (Kafka), でもできれば declarative にしましょうね (SQL) というあたりでアプリケーションプログラマの用は足りた。こうした data processing や cloud のインフラを開発している人は色々難しい問題と戦っているだろうけれど、そういう人たちは別に many core とかいう前から大変だったはずなので、がんばってくださいね。

GPGPU についてはほんとに "general purpose" なコードを書く必要に迫られる人は少なく、何らかの(グラフィクスでない) specific purpose ごとに定型的なやりかたが生まれ、人々は分野ごとにそのパターンを使いまわしている印象。具体的には何らかのデータフローのフレームワークがあり、プログラマはそのノードを埋める CUDA のコードを書く。ML はそうだし、画像処理も似た感じ。他の分野はどうなのだろう。ゲームとかは general purpose してる人がけっこういるのかもしれない。物理エンジンとか、どうなのかな?

ある分野の専門家として上を目指すならそのドメインの定形フレームワークを自分で実装できた方がよいだろうけれど、それはなんでもかんでも GPU に追い出すぞ!みたいな勢いとは違う感じがする。一方でそんなフレームワークををかけるくらい CUDA に精通すればなんでも GPU に追い出せる能力を持っている気もする。


要素技術の話はさておき、プログラミングやソフトウェア開発の慣習は Moore's Law 時代の暗黙の前提がまあまあ残っていると思う。

たとえば「まずは正しく動くものを綺麗に書いて遅かったら高速化する」("premature optimization is the root of all evil.") というアイデア。Knuth のもともとの premise は正しいといえば正しいが、その「正しさ」はどんどん速くなるハードウェアによって割増されていたと思う。つまり書いたものがちょっと遅いことはよくあったが、ほっておくとハードウェアの高速化によって解決してしまった。

「綺麗に書いたらあとはハードウェアの進歩がなんとかしてくれる」というこの期待は、昨今はよく裏切られる。けれど、どうしたら code hygine と性能のバランスをとれるのかの答えは出ていない。Go, Rust, Swift のようなモダンで速い言語は答えの一部なのだろうけれど。特に Rust は zero overhead abstraction とかいってるし。

こうしたプログラミングの所作だけではなく、ソフトウェアの製品デザインにも暗にハードウェアの進歩を期待している。具体的には、人々は既存のソフトウェアにどんどん新しい機能を詰め込んでいく。ソフトウェアはじりじり遅くなる。

モニタリングやベンチマークといった fitness function enforcement によって性能低下を防ごうとするのがモダンソフトウェア開発ではあるけれど、新機能の追加によるちょっとした遅さを deliberate choice として受け入れる場面はしばしば目にする。つまり「この機能は重要だから」とトップダウンな判断でちょっと遅くなる。また完全な fitness function は存在しないので、気づかないところで色々おそくなったりしがち。たとえばウェブブラウザでいうとページの中で使うプリミティブはよくベンチマークされているがページの外側の UI は相対的にザル。

ハードウェアは今でもいちおう速くなり続けているので、こうした小さい性能低下は今のところあからさまでない。ただし「速くなった」と主張する新しいハードウェアの性能をエンドユーザが体感できる機会は減った。伸びしろをソフトウェアが食いつぶしてしまうから。

クライアントサイドはモバイル、サーバサイドはクラウド。ここ 5-10 年でユーザの性能に対する期待値は一旦リセットされた。だから「コンピュータは速くならない、遅い」という時代の空気はまだそれほど高まっていない。でも PC をとりまく倦怠感に似た空気は、そろそろ現世代のコンピューティングにもやってくるんじゃないの?

というかモバイルには「退屈なハイエンド新製品」という形で倦怠期が来ている。毎年 CPU が(ベンダー公称でなく実際に) 1.5 倍はやくなってたら別にカメラとか AI とかがんばらなくてもみんなスマホ買い替えてくれるよたぶん。クラウドも「自分でサーバを持たなければ自動的にハードウェアの進歩がやってくる」みたいな初期の約束はうやむやにされてるじゃん。それは別に AWS 鞘抜きでぼったくってるからではなく、ハードウェアが言うほど速くなってないからだよね。

話が逸れた。

プログラミングにしろソフトウェア製品のデザインにしろ、CPU 性能バブル期になんとなく染み込んだハードウェアの進歩に対する暗黙の期待が今でもあちこちに残っていると思う。Many core parallelism や GPGPU みたいなわかりやすくてかっこいい取り組みは気にされているけれど、日々の細々とした営みの中にも unlearn した方がよいものが色々あるんじゃないかな。


意図せず環境の sustainability を巡る議論とよく似た論調になった。子どもたちの未来のために限りある資源としての性能を大切にしていきましょう・・・というのは半ば冗談として、限られた機能の速いソフトウェアは、今も色々あるけど今後いっそう存在感がましてくる、かもね。Environmentally responsible products ならぬ responsibly performant software.

Link: What is Developmentally Appropriate Practice (DAP)? | NAEYC

|

via What is Developmentally Appropriate Practice (DAP)? | NAEYC

NAEYC というのは幼稚園の業界団体みたいなもので、自分の子がいく preshchool も入っている。幼児教育本を探すにあたりこの団体の出している Developmentally Appropriate Practice in Early Childhood Programs という本の評判がよかったので、Developmentally Appropriate Practice というのが何なのか下調べしていたらこの資料をみつけた。(リンクされているドラフトの PDF.)

名前からして年齢相応のアクティビティのリストみたいなものかと思っていたら全然違った。幼稚園教育のスタンダードを定義するメタフレームワークみたいな話。しかもリンクされている PDF はその実現方法については議論しておらず「我々のスタンダードはこうです」という話だけをする。position paper を名乗っているのはそういうわけだったか。

書籍も中を覗いてみたいけれど、目次すらオンラインには見当たらない。ただ先の文書を読んで家での教育と preschool 運営はやはりだいぶ違うという認識に至ったので、あんまし参考にはならないかもな。自分は幼稚園の先生になりたいわけではないからね。

過保護の本

|

読書記録:

おまえらは学歴にこだわりすぎだし過保護すぎる、厳しく、しかし愛のある親になろうな・・・という話。こう書くと退屈な本みたいだが、なかなか面白かった。

まず書いているのが Stanford の元 freshman dean (新入生担当課長みたいなかんじかな) である。そして著者自身 Palo Alto に住む二児の母でもある。超高級住宅街で子育てする学歴社会頂点勤務のひとが「学歴にこだわりすぎる」というこの圧倒的居心地の悪さが面白い。

本書の前半 1/3 は過保護な親の現状に関するレポート。なのだが、書かれている過保護っぷりがやばい。アメリカ社会共通のダメさ (helicopter parenting - 子がどこにいくにも車で連れてく)はそれなりに共感があるし、公園のような公共空間の過剰な安全指向についても身に覚えがある。しかしそこから先はアホかと呆れる話が続く: 子供の宿題をやる親、大学にだす出願エッセイを書く親(および代行業者)、修学旅行についてくる親、一日連絡がとれないと大学に連絡をよこす親、子の職探しをする親、職場の上司に人事考課の苦情を言ってくる親など、エクストリームな逸話が多すぎて他人事ながら面白い。アメリカの金持ちはアホだな・・・という気持ちになる。結果、そうした過保護が生み出す問題(子のうつ病、親の育児鬱、study drug 中毒など)について議論する中盤 1/3 も半分以上他人事に感じられ、がんばってくれやと冷やかしながら読んだ。ただ anecdotes としては面白かった。

後半 1/3 は、そうした現状を脱するための指針を議論する。ここは狂っていない upper middle 家庭向け parenting book guide といった体裁で参考になった。書き手はさすがによく取材というか調査しており、参考文献がとても充実していて良い。紹介されている本を何冊かは読むことになろう。議論されている指針自体も前半を踏まえると割とまとも(平凡ともいう)で、我々夫婦の感覚とまあまあ近い気がする。プロキシ言語化として役に立ちそう。

ただ最後が「Stanford と Harvard と Yale 以外にもいい大学は色々あるからこのへんのウェブサイトを参考にして探してくれよな」みたいな話でおわっており、アメリカの大学進学率何パーセントだよ主語でかいな、という白けはあった。高学歴の呪いの根深さを感じてしまう。いや Stanford も Harvard もすごいと思いますけどね・・・・。Amazon のコメント欄も絶賛と白けに分断されている。こんなところにも class divide.


しかし我が子の避けがたい helicopter parenting という現実をみると、アメリカの学校教育システムや社会そのものの変化もまた異常な過保護を生み出す何らかの避けがたい構造的な圧力を持っているのではないかと不安になる。10年後アメリカにいたとして、自分も気がついたら子の所在を GPS でトラックしつつ宿題をやっちゃったりするのではないか、巻き込まれるのではという恐怖。

自分にはアメリカ学校生活への無知から来る不安があるので、それを払拭するためにもそのうち何らかの調査をしなければと思った。

時間予算日記 (14)

|

夕方、晩飯を食べて風呂に入れると子はもう寝る時間。まったく戯れる時間がない。週末ためしに晩飯前に風呂に入ってもらうと食後に余裕が生まれた。

夕食前に子を風呂に入れたい。しかし奥様は炊事をしている。自分が帰ってきて風呂を担当する必要がある。17:45 くらいに帰ってくれば 30 分で風呂に入れて出して 18:30 前に夕食できる。しかしそのためには 17:00 ぴったりに退社しないといけない。

一方、朝は子の歯磨き補助やプレスクールの送り出し補助などで出社が遅れがち。9:00 仕事開始を miss することが増えており、8 時間労働のコミットメントが危ぶまれている。この slippery scope を下りたくない。遅れた日は帰りを少し遅らせて補っているが、子の風呂を担当するなら帰宅時間もハードデッドラインになる。それは無理なのでは・・・。

色々と愚痴の萌芽が脳内を渦巻くがそれはスルーし、できることを考える。そろそろ手を付けたくなかったものに踏み込んでいく必要がある。

候補 1: 通勤時間の短縮。自転車を買い直して自転車通勤する。三年前に盗まれて以来徒歩だった。これで 30-40 分増える。しかし自転車を使うと通勤を兼ねたジョギングが自分の生活から失われ、運動不足および脳内麻薬切れの恐れがある。また帰路のオーディオメディア消化もだいぶ減る。

候補 2: Mail WFH. 家でメールを読んでおく。朝か夜か。まあ朝だろう。いま課外活動に使っている朝の時間の一部を仕事メールの消化にあてる。家で仕事をやるのも課外活動を削るのもイヤだが、可能ではある。朝はどのみちインターネットでダラダラしがちなので、かわりにだらだらメールを読んでも大差ないかもしれない。あと会社で朝からメールを読んで勢いを損ねる残念さを克服できるかもしれない。

候補 3: 候補 1 のバリエーションとして、徒歩通勤で歩くのをやめ帰りも走って帰ってくる。そして自分の風呂ついでに子も風呂に入れる。一瞬名案かと思ったけど、現実的には自分は風呂に入れない可能性が高い。そして風邪をひく。危険。

候補 4: 候補 1 に加え、夜中にジムなり公園なりで走り脳内麻薬を補う。就寝が遅れるので朝の課外活動が削られるが、メールに削られるよりはマシかもしれない。朝走るよりは夜走るほうが、シャワーを夜の一回で済ませられて良い。あとジムで走れば本が読める・・・かもしれない。しかし夜はもうだいぶ疲れててきびしい気もする。本をよむ気力はなさそう。

候補 5: 仕事中いまよりカリカリ働く。できりゃ苦労しねえっつうの。言ってみただけ。

候補 6: 候補 2 (Mail from Home) と 候補 4 (自転車 + 夜のジム) を同時にやるとどうなるか?朝の課外活動の時間が睡眠とメールで完全になくなる。しかし会社でメールを読む時間を減らせ、かつフル 8 時間いられるので・・・仕事がはかどる。いや仕事はそこまで捗らなくていいな。アメリカのワーカホリックというかんじの時間割。

候補 7: 夜の睡眠を削り、昼休みに昼寝する。ハードワーク父母のあいだでは割とポピュラーなオプションである現実を目撃しているが、精神衛生および健康を損ねがちなのでパス。

自転車、あったらあったで通勤以外も便利だとは思うけれど、家の中には置く場所がなく外におくとまた盗まれそうにも思え、うーむ・・・。

課外活動か精神衛生と家族の時間のトレードオフ。むー・・・。まずはためしに朝メールを読んでみるかなあ。いちばん開始の敷居が低いので。

とかおもっていたら今日は奥様が夕食前に風呂をやっていてくれた。ありがたし。


なお以前書いた寝る前の家事は、できたりできなかったり。気力がない時もあるし、dish washer が done でない日もあるし、こうしてなにか書くのを優先する日もある。さぼった翌日はだいたい朝が遅れ、出社が遅れ、イライラしがち。自業自得だけど、そんないろいろちゃんとやるには意志力が足りてない。

How It's Been Ending (4) - Dennard Scaling

|

最近たまたまハードウェアに詳しい人と話す機会があったので「なんかムーアの法則ってけっこう前におわっちゃってたんですね?」と水を向けたところ、「いやムーアの法則は今でもまあまあがんばっていて、おわってしまったのは Dennard scaling だと思うんだよね」と言う。

Moore's Law は半導体の集積度がどんどんあがっていくという話だった。プレイヤの数はどんどん減って TSMC とか数社になっちゃったしペースも少し落ちたけれども、プロセスはひきつづき細かくなっている。ただし集積度が上がることで消費電力がさがる、という現象はなくなった、

この「集積度があがると消費電力がさがる(そのぶんクロックを上げたりコアを増やしたりできる)」という現象が Dennand Scaling であり、それが 2006 くらいでおわったらしい。2006 年からしばらくはまだ電力バジェットに余裕があったからコアを増やせたし Big.Little みたいな発明も助けになったけど、以前のような勢いはもうない。

最近のスマホの SoC で CPU の占める面積がどんどん小さくなっているのもこの帰結らしい。Moore's Law によってチップの集積度は上がっている。しかしチップ上の回路をぜんぶ同時に使うと消費電力が多すぎる。しかし CPU はその汎用性から基本的にぜんコア同時に使いたいハードウェアである。だからダイの予算を活かそうとコア数を増やすと電力消費も増やさざるを得ない。つまり SoC 内の CPU の大きさはダイの面積ではなく電力によって制限されている。

なので CPU の性能向上でみると Denning だろうが Moore だろうが結論は変わらない。つまり、もう大して速くならない。

一方で CPU 以外は事情が違う。同時には使わない用途限定のハードウェア同士なら同じ SoC に詰め込んでいくことができる。そこで将来 CPU のかわりに色々な特殊用途の DSP なり DSA なりが色々 SoC につっこまれるようになった。たとえばカメラの ISP (image signal processor) とかすごいでかい。A13 では CPU よりでかい。これはカメラを使ってるときしか使わないハードウェアだからなのだね。

別の見方をすれば、CPU は SoC 上の面積では存在感が下がっているが、消費電力では引き続き目立っているのだろう。CPU にしても、たまにしかつかわない命令のための回路 (Dark Silicon) は増やせる。AVX とかはそういう枠、という認識。どのくらいの空間的・時間的粒度で回路をオンオフできるのかは自分にはよくわからない。CPU 業者の腕の見せ所でもある。

たまにしかつかわない DSP/DSA が増えているのはムダだとおもっていたけれど、電力や熱がボトルネックで SoC の面積は相対的に余裕があるのなら、ピンポイントで CPU をオフロードできるハードウェアでその余剰面積を埋めていくのは理にかなっている。Domain Specific Architecture, おもったより時代の要請だった。

そう考えると TLS ... はもうハードウェア支援ありそうだけど、あとは JSON のパースとかも ハードウェアにされちゃいそうだな。あとは GC とか色々研究あるけどそろそろ実践投入してもよくね? 個人的には View のレイアウトとかもなんとかしてほしいなー。などなど、あまった回路で DSA する将来には色々夢があってよい。


ふと手元にあったヘネパタをぱらぱら眺めたら 5 章にだいたいこのようなことが買いてあった。左様でありましたか・・・。

アカデミア的には 2011-2013 あたりに盛り上がっていた話らしい。

教える対価

|

前に書いたことの続き。

以下では「人に教える」という行為のネガティブな話を色々書くわけだけれど、だから教えるのが良くない、という話ではない点に留意されたし。物事には多かれ少なかれ対価があり、この文章はその対価に話題を絞っているだけ。総体として教えるのがよくないとは特に思わない。自分は機会がないからやってないけれどね。


前の文章では教えないことの対価が言語化の不足だと書いたが、教えることの対価があるとすればそれはまず言語化の過剰、あるいは望ましくない言語化である。

人に何かをおしえるとき、特に企業のトレーニングのような実務的な文脈ではおおきく二種類のバイアスが入り込みがちだと思う。

ひとつめは単純化。人に何かを教える時は、わかりやすさのために物事のニュアンスを落として説明することが多い。アイデアの限界や例外は、しばしば省かれる。教わる側はなにもしらない状態から単純化して理解した状態になるからプラスだけれど、教える側はどうだろう。本来もっていたニュアンスを落とした言語化をすることで、当人のメンタルモデルからもそうしたニュアンスが失われることはないだろうか。ニュアンスは言語化されず単純な部分だけが言語化されたら、その単純さは reinforce されないか。

ふたつめのバイアスは overrating. 説明されるアイデアが過剰な「正しさ」を与えられてしまいがち。これはひとつ目の単純化の特殊ケースとも言える。どんなアイデアやプラクティスも、多かれ少なかれ「仮止め」としての性質を持つ moving target である。別の言い方をすると「いちおう動いてるっぽい、たぶんこういう理由でうまくいってる」くらいのアイデアは多い。しかし単純化によって「こういう理由でこのやりかたは<正しい>」という単純化がおこりがちである。ここでも教わる側はゼロよりはマシになるのでいいとして、教える当人は本来あるべき以上にアイデアを信じてしまうのではないか。棘のある言い方をすれば教えているアイデアを信仰化してしまう恐れはないか。

この overrating の延長として、教える側にいると自分の能力を過信しがちではないか。何かを教えると「生徒」からは「尊敬」されがちである。企業などだと公教育の現場みたいなピュア教育環境ほど極端な非対称性は生まれないけれど、それでも教えることで権威は生まれる。教える側が報酬としてこのブースト現象を「利用」するのは構わないと自分は思っている。ただその立場がエゴにつながる心配はしたほうが良い。教える立場からうまれた権威の影響半径は、体感よりも小さいから。

思い入れや権威があると、アイデアを捨てるのが難しくなる。Unlearning というのはただでさえ難しいのに、それに輪をかけると色々こじらせがち。自分が大切、重要、本質的などと公に訴えてきたものを、時代がかわったからといって「ごめんもうそれどうでもいいわ」とはなかなか言えない。一言多いのを承知でいうと Uncle Bob を見よ。

最後の対価は、これは対価なのか報酬なのかはっきりしないけれど、人に教えていると教えることの専門家になってしまうことがある。人に教えること、教えることについて考える時間が増え、結果として他のことに使う時間が減る。そういうキャリアは別に悪いものではないと思うけれど、本人の望みなのかは・・・どうなの?教えるキャリアに入りつつある同世代に聞いてみたいね。


上に書いた話の半分くらいは人になにかを教えていた時期の自分の経験に基づいている。また教える立場にいる人を横から眺めておもったことも混じっている。

世の中のキャリアに関するアドバイスでは、しばしば人に教えることの価値を強調する。それを否定する気はない。けれど対価が議論されない片手落ち感は長いこと気になっていた。どんな行為にも対価はあるでしょう。

そうやって対価を議論すれば、対価を割り引いて落とし穴を避けるための議論を積み上げることができる。実際、教えるキャリアの長いひとは何らかの手を打っているにちがいない。そうした議論は、教える行為の価値とセットで語られていいのではないか。ただ価値だけを語るのは、先に書いた overrating そのものだ。

A caveat: 自分は教育リテラシーに特別詳しいわけではない。教える身分の人の間ではこうした議論は既に行われていて、自分が知らないだけかもしれない。そういう文献などをご存知の方は興味あるのでお知らせください。

モダン根性論と才能

|

読書記録バックログ

聞き始めた途中で、むかし日本語版を読んでいたことに気づいた。

Amazon の履歴によると 2016 年に買っている。子供が生まれる心の準備としてよんだっぽい。このときには気づいていなかったが、実はモダン根性論の本だった。モダン根性論の集大成たる Grit の出版が同年なので、まあ気づいてなくても仕方ない。ちなみに本書には Grit の作者が根性理論(?)の研究者として登場する。2012 年出版の本に登場するくらいには昔から活躍していたんだなあ。

この本は育児のガイドブックというよりは育児や教育をとりまく状況のジャーナリズムなので、いまいち actionable な要素は少ない。ただ読み物としてはまあまあ面白い。なお本書のいう character というのは要するに根性 (self control や self-awareness などの meta cognitive skill) を指している、性格というとなんとなく先天的なものに思えるが、ここでは non-academic な skill を意味するのに使っているのだね。

話は貧困が子供の教育というか発達に与える影響の話から始まる。貧困家庭、治安の悪い家庭にいると、そのストレスだけで知性が阻害される。だから貧困家庭に必要なのはいわゆるアカデミックな教育ではなく、それ以前に(今でいうところの)physiological safety なのだ、それを行政はわかってない、というような話。幸い我々はいまのところ貧困家庭ではないので、金銭以外のリスクファクターである夫婦仲はがんばって良い状態にしておかねばな・・・と身を引き締めた(いつも気にしてますが)。

そこから話は段々とモダン根性論的になっていく。早期教育の段階から meta-cognitive skill を扱うプリスクールがあるという話や、アカデミックにフォーカスした charter school KIPP の失敗と立て直し、などに触れる。また貧困地域の学校のチェスクラブを全国大会に導いた教師の話などにも多くページを割いている。また根性/characterを定量的に評価、フィードバックする学校なども紹介されている。


本書の本題とは少し外れたところで考える事の多い本だった。

むかし自分は、才能という先天的なものはアンフェアな存在で、根性(モダンでも伝統的でも)によるスキルアップは後天的に努力でなんとかなるフェアなものだとぼんやり考えていた。だから talent を強調するアメリカの(日本もかもしれないが)育児や教育には違和感があった。

しかし根性あるいは character, meta-cognitive-skill の重要性が裕福で教育熱心な人々のあいだで認識され、根性をつけるモダンな教育というものが(本書で説明されているように)研究開発されると、金を払ってそういう先進的な根性教育 (!) を受けられる学校に進学させたり、親としての資源を子の根性教育に傾けるといったことが起こる気がする、というかたぶん一部では既にやられている。

これはつまり、「本人の」意思でなんとかなると信じていた努力というフェアネスの象徴が、親の金で買える資本主義的アイテムになるということである。自分は勤務先の関係で根性あるエリートを観測する機会にまあまあ恵まれているが、当人らの生い立ちおよびそうしたエリートの子息がうけている扱いは、資本としての根性というアイデアとまあまあ合致している。

逆にアンフェアだと思っていた「先天的な才能」のようなものには、ランダムな要素があるぶん少しはフェアネスが残っているように感じる。以前は 「poverty が prevailed な学校にいる brilliant で talented な child に機会を」というようなアメリカ教育論におけるフェアネスの主張を「才能だって不公平なパラメタじゃん」と斜めから見ていたが、すくなくとも class や capitalism の限界を乱数の力で超えていける可能性のぶん、何らかのフェアさはある気がしてきた。いわゆる gift という呼称が腑に落ちたとも言える。

自分の子には金の力でもなんでもいいから根性や生命力を身に着けてほしい。がそれはそれとして、子のなかにある才能というのを見出してやるのも大切だと思うようになった。何の才能があるかはよくわからないが・・・。


ところで本書ではぱっとしない学区から躍進するチェスのチーム I.S. 318 のストーリをつかい、アカデミックなスキル(ここでは暗に暗記みたいのを想定している)ではなくメタ認知的スキル(自己認識みたいなもの)こそが重要だという話をする。チェスチームのコーチが何を子供に教えるか、訓練するかの記述がストーリーのキーとなっている。のだが・・・

これ根本的にそのコーチがガチで強いチェスプレイヤーである事実が一番重要なんじゃないのかなあ。ガチチェスプレイヤーが様々な成り行きからその(本来ならぱっとしない)学校のチェスクラブのコーチになったある種の偶然こそが快進撃の理由であって、非認知スキルとかどうでもよくね?というといいすぎだけれども、他のぱっとしない学校やぱっとしない親からするとまったく再現性のない他人事ストーリーだよね。この事例をもとに教師が非認知的スキルを教えるようになればぱっとしない学校もかわる、という暗黙の主張を支えるのは無理がある気がする。そんなことしたってチェスつよくなんないでしょ、どう考えても。

一方でこれは根性について一抹の真実を伝えてもいる: メタな根性というものは存在しない。というか根性だけをピュアに身につけることはできない。何らかの具体的な mastery を通じて根性は獲得される。この本だとそれは Chess だったし、Grit では Ballet (Violin だっけ? わすれた)だった。

自分の子にただ「根性をつけてほしい」と願うのは不毛で、本人が好きになれるもの、才能のあるものを探すのを手伝ってあげたり、それを身につける過程で根性がつくよう後押ししてあげるというのが、望まれていることなのだろうね。こうかくと大変あたりまえの話に思えますね。そうですね。

根性と才能と訓練というのはかように噛み合っている。モダン根性論の理解が深まる一冊ではありました。

The Writer's Process

|

読書記録。

大きめの変更を始めるにあたり design doc 的なものを書きたいが時間がとれず、考えがまとまらず、もしかして design doc を書くのって文章を書く人々から学ぶことがあるのでは・・・みたいな謎の気の迷いから聴いた。それなりに興味深い本ではあった。プロセスの話で、どうやって時間をとるか、どういうフェーズがあるか、というようなトピックを議論していく。

時間がないのは、ソーシャルメディアとかしてるんじゃないよ、自分にあった時間帯を見つけて書くんだよ、みたいなことをいうんだけどいやそうじゃなくて他の仕事があるせいで時間がないのだよ・・・。しかし根本的に時間は必要なので確保するしかないという現実に目を向けることができたのはよかった。

その後仕事(バグ取りなど)の忙しさは一段落したので、時間をとって書くことができた。もともとそんなに長い文章ではなく、3-5 ページくらいの短いもの。こんなものすら書けないとは・・・。

フェーズは、Research, Incubate, Structure the idea, Writing the first draft, Let the draft reset, Revise... とつづく。

自分のように大きめのリファクタリングをするだけ、みたいなケースは「調査」が必要という事実を忘れがちだが、人を説得するのに design doc を書くんだからちゃんと調べて(この場合、既存のコードを丁寧に読んで)やることを正当化したり事前に整理した方がいいね、という当たり前のことを remind できた。

アイデアを整理するにあたり、freewriting すなわちなんでも頭にあることを書き出してみるアプローチを推していて、自分はこれを以前から braindump と読んでいるけれど、そういうのも自覚的にやってみたら割とよかった。 3 ページの mini doc なんてズバっとかけそうなものだけれど、それでも一段階 freewriting / brandump を挟むとだいぶ認知の負荷が下がって良い。それにしても blog 書くのにやってんだから design doc でもやれっつう話ではある。


The Writer's Process が想定しているのはたとえば「本を書く」ように文章そのものが最終成果物なプロジェクトである。一方で自分はソフトウェア開発すなわちコードを書くという具体的かつ専門的なゴールがあり design doc はその一部に過ぎない。なので良いドキュメントを書くことに重点を置きすぎるのは的外れだし、場合によっては BDUF につながる恐れもある。特に自分はコード中心探索的アプローチ原理主義者なので事前にドキュメントを書くことに強い reservation がある。

一方で design doc を書くと決めたならそれを機能させる必要があるが、内容に何を含めるかはともかく「作文のプロセス」にはあまり共通見解みたいのはない気がする。ちょっと探した感じではこれというのが見当たらなかった。まあソフトウェア開発にとって作文は本題でないから仕方ない気もするけれど、それにしても人々はどうやって書いてるんだろうね、ドキュメント。

自分は design doc をガっと書くような気合が失われているので、コードを読んで調査をまとめたり疑問やその答えを記録して、やりたいことを箇条書きして眺め、というのを二周くらいして、それからドラフトを書く、という簡易版 writer's process がよく機能した。

それにしても立ち入った考え事をする能力が弱っているなあ。こうやって crutch を探しながら進まざるをえない人生のきびしさ。

A Book On Potty Training

|

読書記録バックログ消化。

トイレトレーニングのやりかたに関する本。知り合いの家で見かけたのを忘れないよう Amazon の wishlist にいれておいたらいつの間にかゆこっぷ(奥様)が買って聴き、自分も聴くよう促されたので聴いた。

この話題で 300 pages / 8 hours 書けるってすごいな・・・という感慨があるが、さすがに専門家として obsess してるだけあって網羅的だった。網羅的ってなんだよと思うかもしれないけれども、そういうことってあるのだよ。

内容をかいつまんで書いても仕方ないので書かないが、トイレトレーニングには親のコミットメントが必要だぞ、という前提からはじまる本だった。重要なコンセプト(というのがあるのだよ)を何度も繰り返すので、叩き込まれる感じがある。おかげで役にはたった。若干スパルタ過ぎるのため全てをフォローできているわけではない。まあ自分よりもゆこっぷのほうが頑張ってくれた。

この本を読むと、その前に買った何らかの日本語のランダムなトイレトレーニング本はまったく情報量のないゴミだったなあと思う。インターネットの anecdotes を集めたようなやつ。育児関係で素人のコメントをランダムに載せてどうするんだ・・・。

トイレトレーニング、他の育児マイルストーンと同じくどれくらい苦労するかは子次第、および保育園/託児所次第という面もあるらしい。まったく何の苦労もせずパンツに移行したという人も、何ヶ月もてこずっているという人もいた。

How It's Been Ending (3) - Downsizing

|

ここまで書き忘れてたけど気になっていたことを思い出した。

ハードウェア集積度アップの歴史はダウンサイジングの歴史でもある。ハードウェアは小さく安くなり、イノベーションのジレンマがおこる。2008 に iPhone が登場し、コンシューマ向け計算機のダウンサイジングがおきた。Moore's Law がおわるとこのサイクルもおわるのか?

PC はある時期まではガンガン値段が下がっていったが、下げ止まった。むしろハイエンドはちょっと値上がりしてる。モバイルもハイエンドは値上がりしている一方で、PC と比べると値段の下落は最近まで続いていた。OLPC が 2005 年に夢見た $100 laptop は $50 smartphone という形で商業的に実現している。 ただ、さすがにもう値下がりしなそう。

Moore’s Law による集積度向上が続いたのなら、このあと更に小さいコンピュータが登場するはずだった。しかし CPU はもう(指数的には)速くならない。既存のフォームファクターは色々な改善を寄せ集めてがんばればいいとして、桁違いの計算性能がもたらすはずだった新しいフォームファクターはどうなってしまうのか。

Apple Watch みたいな画面つき時計や各社の喋るスピーカーは新しいフォームファクターの例である。(IoT みたいなエンタープライズ方面はもっと色々あるのかもしれないけれど詳しくないので触れないでおく。)あいつらは半導体業界の進歩が生み出した時代の子なのか?それとも半導体業界の停滞を押し切って出てきた、ちょっと無理のある存在なのか?

時計とスピーカーは同列に議論できない気がするので別々に考えてみる。

Smartwatches

コンシューマ向け計算機のダウンサイジングという点で post mobile の筆頭にいたのが時計だった。スマート時計は Apple Watch が一強で、そのほか Fitbit などの雑魚っぽいのがいるという理解。自分は Fitbit を使っている。こいつに可能性を感じるのはわかるが、どうにも遅い。ゆこっぷ(奥様)がつかっている Apple Watch をみるとだいぶマシだが、やはり遅い。

iOS 開発者の話とかを読んでいても、時計アプリは速度とかメモリが可能性の上限を決めているように伺える。今後時計の CPU は速くなるのか。ある程度はなるだろうが、指数的には進歩しないだろう。バッテリーが大きくなる様子もないからモバイル初期のような勢いも期待できない

... といっても Apple Watch はすでに 64 bit dual core だし Snapdragon も 4 core らしいけど。Galaxy Nexus (2011) くらいのイメージ。思ったより速い・・・。ただバッテリーの小ささを踏まえるとスペック上の性能を発揮できる時間はスマホ以上に限られていて、プラットホームもなるべくアプリを寝かそう殺そうとしてくるであろう。

時計のバージョンアップにも省電力志向は反映されている: 汎用アプリプラットフォームとしてより Fitness への特化を進めている。用途限定の省電力チップを足しセンサ情報を処理したりする。こうした用途限定ハードウェアではサードパーティのアプリのかわりにプラットホームの中の人が書いたコードが重要な役割を果たす。アプリはなんらかの集約済みデータにアクセスできるだけ、みたいな世界。

Smart Speakers

スマートスピーカーは時計よりでかいし給電もされるから、理論上はスマホと同じかそれ以上にパワフルになりえる。しかし収益モデルの違いなどから価格が安く、結果として CPU もケチられている。この Wiki によれば Echo Dot とかは MediaTek の ARM 1.3GHz 4 core. 上の Snapdragon Wear と同じクラスっぽい。

そしてどのみちアプリ開発者にはアクセスできない... が Alexa Built-in のデバイスをつくるために Amazon と提携するという路線があり、そういう意味で open platform ではある。ただ Echo 以外で Alexa 入りのキラーデバイスみたいのは聞いたことが無いな。

時計と違ってセンサーもあまりないし、Alexa デバイスをつくりたいならプラットホームは least common denominator になりがちで、時計のように小さいなりにがんばった SoC がやってくる期待は今のところなさそう。

Observation

コンシューマ向け Post-Mobile のフォームファクターである時計とスピーカを眺めた。これらはまあまあ売れているが、次なるプラットホームの決定版という勢いはない。今のところニッチに留まっている。

では iPhone のようなまだ見ぬブレイクスルーによってこれらがニッチを抜け出す日は来るのか。わからないけれど、半導体の進歩はあまり助けてくれなそうではある。Edge TPU や NPU のような省電力 DSA が降りてくる展開を当事者は期待しているかもしれない。しかし時計やスピーカに乗った DSA が中の人以外からアクセスできるようにはならなそうなので、自分のような外野は遠くから健闘をお祈りしていればいいかな。

そういうハイテクとは関係なく、1.3GHz x4 core の CPU はスピーカや時計に使うくらいしょぼいものであるというのは個人的な学びだった。年寄りなせいで 1GHz とかいまだにすごい速く感じてしまう。ARM かつ省電力のプロファイルだからという面はあるにせよ、これらの「遅さ」を内面化できないと危うい。ラズパイとか触った方がいいかもなあ・・・。RP4: Cortex-A72 1.5GHz x4 core.

付随する問いとして、2011 年のスマホ相当の CPU を載せている 2019 の時計やスピーカ, 8 年後には 2019 年のスマホ相当の CPU を載せているのだろうか。Moore's Law の slowdown が事実ならこの期待は満たされないわけだけれど、なんとなくそのくらいは速くなりそうじゃね?2027 年だよ? すごい未来じゃん?

未来のことはわからないね。

An Update on Fragments

|

このブログを Letters + Fragments 方式にして 5 ヶ月。まあまあ機能している気がするものの、欠点や不満もわかってきたので微調整したい。

欠点そのいち。Fragments が若干雑すぎる。自分が雑に書けるのはいいが、ゴミ度が高すぎてこれ publish してどうすんの感がある。一方で自分が雑に書くにあたり publish する精神的敷居が邪魔になるときもある。端的にいうと仕事の脊髄反射的愚痴を書きたいのに若干はばかられる。そういうのはその瞬間に溜飲をさげるべく書きたいだけであって別に公開したくはない。WordPress として別の post にすれば非公開にはできるけれど、そんな大げさなもんじゃないのだよ。脊髄反射なのだよ。

欠点というか不満そのに。Letter をかく前に下書きというか頭にあることの箇条書きをする場合があるが、その敷居が高い。今は独立した(非公開の)Post にしているが、自分が wordpress.com 上で眺める時のノイズになりがちである。あと独立した post をつくる、という行為が僅かにめんどい。とはいえ Fragments にダンプしてしまうと自分以外には本当に意味不明なため邪魔すぎる。

不満そのさん。日々の reflection が足りてない感じがする。一日の最後に日記を書く、みたいな行為はやはり必要なのではないか。仕事日記は週に一回くらい書いているけれども、独立した Post をつくる腰の重さが頻度を下げがち。Fragments くらい日常に解けこめるとよい。

といった点を踏まえ、Fragments は非公開にして自分用のゴミ溜めとして使い(欠点 1, 2 への対処)、それとは別に公開日記をつける(欠点 3 への対処)、という風にしてみたい。公開日記はなんとなく毎日つける気力はない気はする。あと公開する必要があるのかはわからない。

まあやってみます。来週より。


WP 上での運用としては、公開日記を従来の fragments category におき、自分のゴミ溜め用に別の category をつくることにする。ほんとはここまでの fragments も非公開にしたい気がするけれどめんどくさいので放置。クビになるほどまずいことは書いてないはずだからいいでしょう・・・。

2019-11-18 追記

二ヶ月くらいやってみたところ、この「公開日記」部分は表面的には従来と大差ないことがわかったのでタイトルなどを従来の Fragments に統一した(これまでは無駄に Reflections という名前にしていた)。それとは別に非公開の "timeline" というゴミ捨て場が運用されている。

How It's Been Ending (2) - CPU

|

つづきもの。まず CPU と仲間たちがどうやって Moore's Law を終えたのかを雑に考える。

PC

身近なところでまず PC クラスの CPU を考えてみる。あまり良い資料がないなとおもっていたら Apple が全製品のスペックをカタログ化しれていたので冷やかす。やはり印象としては同じで、2005 年くらいまではびゅーんと伸びていく。Apple は 2006 年あたりで Mac を Intel に移行して PowerPC に見切りをつけるが、皮肉なことにこのへんで Moore's Law がおわってしまい Intel CPU たいして速くならない。Intel Core とかいってた頃。

2006 年の初代 Intel Macbook Pro が 2GHz x2 core. 2019 年の最新機種が 2.4 GHz x8 core なのでクロック数は 13 年で 2 割しか増えてない... というのは若干フェアではなく、2019 年のCore i9 は TurboBoost で 5GHz までクロックを釣り上げられるので 2.5 倍増えたと言えないこともない。そしてコア数は 4 倍。(値段は二倍くらい?)

つまりクロック周波数という Moore's Law Pop Culture の基準では 2 割, TurboBoost とマルチコアを考慮すると 2.5x4  = 10 倍増えた。13 年、ゲーム機に世代分なので昔なら周波数だけで百倍速くなったところで定常周波数は二割、マルチコアと TB あわせても 10 倍。時代がおわった感がある。

コア数や TurboBoost など色々な条件付きで性能を議論しないといけなくなった事実も Post-Moore 時代の特徴と言える。CPU にしてもたとえば Core Duo は 2MB の L2 cache だったのに対し 2019 の Core i9 は 16MB の L3 cache がある。PC 全体の性能でみると、各種バスは速くなっているし SSD という大きな変化もあった。二割しか速くなってない、というのはまったくフェアでない。13 年のあいだに 100 倍はないけど 3-5 倍くらいは速くなってるような気がする。まったく何の根拠もない主観だけど。

そういえばここ 20 年くらいの PC における大前提の大きな変化として、主戦場がデスクトップからラップトップにうつった。結果として PC といえども消費電力の影響を受けるようになったし、排熱の要件もタイトになった。結果として単純にコアを増やし続ければ良いというわけにもいかなくなった。

ラップトップの主流化はいつ起きたのだろうね。個人的には Macbook Pro あたりからラップトップに完全移行した記憶がある。世の中的には Netbook のあとに Ultrabook とかいうのがでてきて、それが普及したようなイメージ。Intel が Ultrabook と言い出したのは 2011 年。Macbook Pro は初代が 2006. まあ 2011 以前にも速くて軽いラップトップは一定程度あって、自分は VAIO Z というのをつかっていた。これは 2004 年らしい。雑にいうと 2005-2010 年の間に段々とそうなった感じだろうか。

Servers

サーバサイドの CPU はもともと PC の CPU を定数ファクター速くしたものという印象だったけれども、PC がラップトップ主流化で電力キャップされるに従い給電や排熱に融通しやすいサーバーとの差は大きくなっていったと思う。

いま見てみたら最高級の Xeon は 2.6-3.8GHz x 56 cores らしい。値段はさっぱりわからないが Arstechnica の記事をみると 36 コアのバージョンですら $10000 かららしいので、$20k - $30k くらいだろうか。消費電力も 400W とかまったくわけがわからない。一つのサーバはこれを 4 つまで挿せるらしいので、そのサーバは 200 コアくらいあるのか。すごいね。

まあ今どきサーバを買う人なんてほとんどいないわけなので次は EC2 を見てみる。Compute Optimized な C5 instance は c5.metal というやつで 96 vCPU. TurboBoost で 3.5GHz. 上に書いた上限の半分のコア数のやつくらいまでは売ってることがわかる。(ついでに GCE をみると・・・よくわからないが 64 vCPU まで増やせるとある。)

PC の初代 Macbook Pro と比べるべく 2006 年の Xeon のうち一番値段が高いやつを Wikipedia のリストからさがしてみると 7140N が $2000. 3.3GHz x2. MBP の Core Duo とコア数は同じ、動作周波数が 8 割増くらい。サーバという単位でみると、たぶんこの Xeon を 4 つくらい挿せるサーバがあったことでしょう。しらんけど。

13 年の差分をみると、動作周波数は 3.3GHz -> 3.8GHz で 2 割増。コア数が 2 -> 50 で 25 倍。あわせて 30 倍くらい。ラップトップの 10 倍よりは伸びているけれど、値段も 10 倍くらいになってるので正しく比較できてる感じがしない。雑に 2019 年製から $2500 くらいの CPU をさがすと 6240 が 2.6-3.9GHz x 18 cores. これだとだいたい 10 倍くらいでラップトップと同じ水準の成長となった。

つまりサーバの CPU はだいたい PC と同じ経緯を辿っているだが、金とデータセンターの力よくわからん。よくわからん。ででかいコア数を積み増していた。

なお Intel のサイトにはプロセスの集積度も載っている。2006 年の 7140N が 65nm, 2019 年の 9282 が 14nm. 4 倍、というか面積でいうと 16 倍?  更に 10 年遡った 1995 年の Pentium Pro は Wikipedia によれば 500nm くらいっぽいので 1995 -> 2006 は 7.5 (or 60) 倍だった。

2006 年から 2019 年のあいだにおきたサーバサイドの大きな変化は言うまでもなくクラウド。でもそれが CPU の発展にどういう影響を与えたのか、自分にはよくわからない。$10000 を超える超高級巨大 CPU を作る気になったのは仮想化のおかげだろうから、そういう広い意味で「クラウド」の影響はあるかもしれない。

クラウド業者のデータセンターは小規模なサーバファームと比べ圧倒的に電力消費にうるさいので、以前と比べ野放図に電力を使えなくなった面はありそう。それがなるべくコア数を増やし集積度をあげるという方向に背中を推したのか、それともでかい CPU を避ける圧力となったのか。まあ結果をみるに前者なのだろうな。

Mobile

2006 年にはモバイルは・・・なかった (雑すぎる近似。)

iPhone よくわかんないので Android. 2008 に G1 がでた。CPU は Qcom の ARM11 で 528MHz x 1 core. ときは流れ 2019 年の Galaxy S10 は Snapdragon 855 で "1x2.84 GHz, 3x2.42 GHz and 4x1.8 GHz".

動作周波数が 5 倍, ぜんぶのコアをあわせると 30 倍。Moore's Law の期待値 100 倍には届かないにせよ 13 年で 10 倍の PC よりは健闘している。毎年でる電話機の新しいモデルは前の世代より体感できる程度には速くなっているから。その経験則とも一致している。

この健闘はどこから来るのか、雑に想像してみる。ひとつにはモバイルに流れ込んだ資本の勢いだろう。PC 全盛の時代の ARM ファミリーは Intel に比べたらたいした技術力はなかったろうが、モバイルの隆盛にともない金が流れ込んで相対的な技術的洗練が進み、Intel との距離を縮めた。別の言い方をすると、限界までアーキテクチャ的な無理をしてきた Intel に対し素朴さを保ってきた ARM 勢が、その素朴さ貯金を取り崩して性能を手に入れた。

もうひとつはバッテリーサイズの巨大化。ラップトップ PC が薄型化によってバッテリーサイズを削られたのに対し、モバイルは画面の巨大化に伴う筐体サイズの増大に助けられ、バッテリーサイズを増やせた。おかげでマルチコア化など性能を電力で買うアプローチを積極的に使えた。

結果として PC とモバイルの距離は縮まった。性能ポップカルチャーの北極星 Geekbench によれば Macbook Pro 2019 のスコアが 6900 で Galaxy S10+ が 2100.  3.3 倍くらい。価格差はもっとある・・・のはいいとして、たとえば G1 と初代 Macbook Pro なんてたぶん 10 倍以上差があったことでしょう。

GPU

進歩してるんだろうけれど、よくわからない。すごい雑な印象として、少なくともモバイル CPU くらいのペースでは速くなってるかんじ。Intel CPU ほど終わってしまった印象はない。

計算の性格上 CPU と違って容赦なく並列度を上げていけるので、並列化に重点を置いて増やしている印象がある。あと AI/Crypto で存在感を増し、かつ Cloud 到来にともないデータセンターの中でバスパワーとかの遠慮なく電力を使えるハイエンド機がでてきたのも高速化に寄与している気がする。

あと CPU と比低レベルの ISA とかを公開していないぶん互換性の制約がすくないので、回路の非効率は CPU よりすくなく、そのぶん性能の伸びがよい、という面はあるのかもしれない。

それ以外はターゲット領域の CPU に足並みを揃えて進歩してるのではなかろうか。つまり: よくわからん。

FPGA, ASIC and Domain Specific Architecture

サーバや PC の世界ではごく限られた用途のニッチという理解。一方モバイルの SoC は面積の半分以上が CPU および GPU 以外すなわち ISP などの ASIC なので、モバイルにおける Moore's Law の文脈でこいつらの存在感は無視すべきでない。

が、全然わからん。ビデオの codec などは PC でもモバイルでも CPU (のふつうの命令を処理するところ/AP)以外がやっているわけで、それなりに予算を使っているはずなんだけど。

TPU, NPU や PVC のような DSA は emerging technologies なんでとくに歴史として振り返るものはない気がする。

SIMD

CPU は引き続き AVX や Neon などのメディア処理専用命令を足し続けて動作周波数あたりのスループットの改善を試みた。AVX は最初のバージョンは 2011 年, AVX512 というのが 2016 から入り始めて、じりじり命令を増やしている。2011 以前にも MMX や SSE があった。ARM も昔から NEON があり、AVX512 に対応するものとして SVE というのがあるらしい。

System

システム全体でみると、歴史的にはそもそも CPU 以外、つまり IO とかが性能のボトルネックという場面が多かった。それを補填するために CPU はでかいキャッシュを積み続けバスも太くなり、その傾向はおおむね続いているという理解。バスについて考えると、モバイルは SoC なので標準規格に引きずられず自分の都合で色々できる利点がある。データセンター業者も非標準な I/O をつかいがち。

CPU がもたもたしている間に I/O は高速化をつづけ、ギャップは小さくなっている気がする。ストレージだと SSD や NVM. ネットワークも 1Gbps から 10Gbps, 100Gbps と規格が改善し、AWS もインスタンス間は 25Gbps とかいってる。データセンターについてはクラウドの台頭に伴うこうした著しいシステムレベルの改善が CPU の停滞感を隠してきた印象。

モバイルも、よくわかってないけど色々進歩してるんじゃないの?そういえば 3G から LTE になったのは大きかったね。これも 10 倍以上 100 倍未満の改善。モバイルじゃないけどいわゆる「ブロードバンド」な帯域は 15 年でどのくらい速くなったのだろう。いまいち調べる方法がわからない。

Observation

「なにがおきたのか」という当初の疑問に自答すると:

まず上に書いたスペックの二点比較だけからは自明ではないが当たり前の事実として、動作周波数上昇の slowdown はいきなり起きたわけではなく、徐々におきた。CPU 業者はあの手この手で slowdown の影響を補填しようとした。

わかりやすいのがマルチコア。動作周波数の停滞に伴いコア数が増えた。ただ PC やモバイルでは思ったほど増えず、せいぜい 8 コアくらいが現状。サーバ側は 100 コアみたいな勢いのでかい CPU もあるが、値段も消費電力もアホみたいに高いので CPU が期待通りの性能上昇を果たしたと解釈するのは無理がある。どちらかというと昔からある HPC/スパコンみたいなジャンルに Intel が踏み込んでいったと見る方が正しい。

消費電力の壁から、可変周波数が普及した。Intel は TurboBoost があるし、ARM の一族もふつうにクロック数が上下して最大周波数での可動時間はほんとに短い。動作周波数を下げるだけでなく一部のコアを止めることもできる。

ARM 家は可変長クロックにくわえ Big.Little のような非対称コアが現れた。Snapdragon 855 にいたっては Prime 1, Gold 3, Silver 4 みたいな三段階構成。

同一クロックでのスループットを稼ぐ SIMD は昔からあって特に Moore's Law 関係ないのかもしれないけれど、引き続き強化されつづけている。

システム全体でみると CPU の存在感は相対的に下がり、グラフィクス以外の用途、というか 主に ML のおかげで GPU がもてはやされるようになった。特にデータセンターでは PC 相手には役不足なかんじのでかい GPU も重宝されている。モバイルも同様に GPU の存在感は増しているし、GPU だけでなくメディア用途などの ASIC も SoC の面積予算を多く使っている。

単純なコンピュートだけでなくシステムレベルでの改善もデータセンターを中心に進んだ。ネットワークもストレージもだいぶ速くなった。15 年のスパンだと 100 倍まではいかないにせよ 10 倍よりは改善している。モバイルにしても LTE がやってきた、今年から来年にかけて 5G がくることになっている。家庭のブロードバンドはよくわからない。

というわけで...

CPU の動作周波数停滞は CPU 内外の数多の改善によって覆い隠され、計算機業界全体としてはこの 15 年もひきつづき進歩を実感できた。PC は動作周波数依存のパラダイムから脱しきれずに停滞感があったが、サーバサイドはデータセンターへの集約にともなうアーキテクチャの刷新がシステム全体の性能を高めたし、モバイルは雑魚っぽいところから本気度の高い SoC へと進歩し、デバイスの巨大化によるバッテリ容量の増加もそれを助けた。

ただし Moore's Law のようなわかりやすく乗っかりやすい単一の指標はもうない。レイヤのあちこちでおこるブレイクスルーをその周辺にいる人々が活用し、産業全体としてなんとなく前にすすんでいるのだろう。

こうした変化をプログラマやソフトウェア開発チームはどのように受け入れたのか、については別項で。

How It's Been Ending (1)

|

少し前に Podcast で Reality Engine の論文をよんだとき、この時代の CPU クロックのあがりっぷりにビビった。いわゆる Moore's Law というやつ。Mooore's Law は半導体の集積度について言及しているのでそれをクロック数として解釈するのはポップカルチャー的ではある。ただ近似としてはあってる。

Podcast では Reality Engine の比較としてなんとなく PS1, PS2 を引き合いに出した。その延長としてゲーム機を例に考えてみる。

ゲーム機、だいたい 6-8 年に一回くらい新しい機種が出る(1983 にファミコン, 1990 にスーファミ,  1994 に PS1,  2000 に PS2, 2006 に PS3, 2013 に PS4. 2 つの系列を混ぜてる雑さは見逃されたし。) このサイクルに Moore's Law を当てはめると、だいたい世代が一つ上がるとクロック数がひと桁増えるかんじになる。6 年 = 4 Moore Cycle = 16 倍、みたいな計算。スーファミの CPU が 2MHz, PS1 が 33MHz, PS2 が 300MHz, PS4 が 3200GHz なので、この間のクロック数はじっさいひと桁づつ増えている。

このあと PS4 の CPU は 1.6GHz x 8 core となり、クロック数が下がってコアが増えた。CPU アーキテクチャが PPC から x86-64 にかわったので厳密にクロック数で比較はできないが、ひと桁は増えてないという雑なレベルでは間違っていないとおもう。そしてコア数がひと桁近く (8 倍) 増えている。

この数字から判断するに, Moore's Law は 2006 から 2013 の間に終わったと言える。議論の雑さにも関わらず、これは自分の肌感覚とも合っている。

自分は Moore's Law が最後にフルスピードだった 2000 年代前半に大学を卒業した。だから自分の中の色々な常識や期待は Moore's Law を織り込んでいる... とおもっていた。でも Post Moore な 2019 年にこうしてぼんやりプログラマをやっていて、クロック数が倍々で増えていく当時の身体感覚はすっかり失われていている。そういえば学生の頃はクロック増えまくってたわ。最近のラップトップとか全然速くなんねーな、と思いつつ受け入れてたわ。

こんな大きな変化が起きたのに何事もなく生き延びている自分と業界にびっくりする。まあ何事もないわけでなく、大きな変化は起きたのだろうけれども。でもあんまりそういう体感ないじゃん?あたしの感性にぶすぎ?

いい機会なので、何が起きたのかを自分の中で整理してみたい。関心は大きく分けて2つある。ひとつ目はハードウェアの中の Moore's Law がどう終わったのか。ふたつ目は、プログラマというかソフトウェア開発はその事実をどう消化したのか、あるいは消化できていないのか。

この2つを言語化する気力があるかわからないので、とりあえずは「法則の時代がおわってたことにも法則が成り立っていたことにも同じくらいびっくりした」という事実だけを記録しておく。

追記

がんばってかいた:

平日と休日の交換

|

「週末一日働くかわりに平日一日休みたい」というようなことを言う人がいる。自分もたまにそう思うことがあった。今日、子を暑さから逃すため平日に仕事を休み涼しい Monterey の水族館にでかけたところ、いつも混んでいてうんざりしがちな水族館が人影まばらなすばらしい場所になっており感動。この「平日週末スワップ」という(実現することが稀な)願望のことを思い出した。

これは、昔は結局やることはあまりなかったし、今もできる気がしない。なぜか。

昔、というのは妻子を持つ前かつ東京で働いていた頃だけれども、スワップをしたい動機は主に仕事の生産性アップだった。人がいないところで集中して働きたいという。平日に休みがほしいとは特に思わなかった。無趣味ひきこもりだったので避けたい週末の人混みもさほどなかったし、有給もだぶついていたから平日たまにどこかいきたいならふつうに休みを取ればよかった。労働時間の柔軟性もあったから休む必要すらなく、午前中に用を足して午後から遅く働くオプションもあった。

有給が少なく労働の柔軟性のない仕事をしていた頃も同じようなことを考えたが、当時はそもそもスワップを実現できる人事的な柔軟性がなかった気がする。自由のきかない零細中小企業とはそういうもんである。

今はどうかというと・・・。理論上はそれなりに制度の柔軟性があり、かつ自分は平日の休みを欲しているが、いざやろうと考えてみると腰が重くなる。なぜか。

まず仕事はそれなりに調整しないといけない。チームに周知するくらいは必要。結果として若干のカルマを消費する。しかし自分はカルマに余裕がある気がしていないので、そうした調整活動に身の危険を感じてしまう。巨大な締め切りが過ぎ、緊張が低い時期ならまた違うかもしれないが。あと休日に仕事をする側で家族の logistics をなんとかするのも面倒。

全体的に、得られるものが norm から外れるコストを justify していないという gut feeling がある。なぜ得られるものが重要に思えないのかというと・・・有給とって休めばよくね?と思うからだろうなあ。そんなにバンバン使えるほど有給があるわけでもないので気のせいにも思えるが・・・。

あるいは具体的に行きたい場所がそれほどない曖昧な状態で休みの確保というめんどくさいことを考えているから気が乗らないのであって、もうちょっと平日に行きたい具体的な場所リストが育ってくるとがんばってやりくりする気も起こせるかもしれない。

バグを弔う技術

|

製品寿命が伸びてくると登録されたバグの数がどんどん増え手に負えなくなる。

対策として、まずはバグの優先度の解釈が厳密化される。たとえば P3 は「いつかやるかもしれないバグ・新機能」みたいな扱いになる。バリエーションとして「いつかやるバグ」というマイルストーンをセットすることもある。GTD 信者には "someday maybe" といえば通じるだろうか。

症状が進行すると本当にいつかやりたいバグと単に放置されているものの区別がつかなくなる。この段階での対処は色々ある。

たとえば「いつかやるバグ」とは別に「冷凍保存したバグ」というマイルストーンが追加される。「もうやりません」という意思を明示するぶん、ある種のコミットがある。バグを登録した人や新機能を要求した人はその意思を受取り、文句をいったり諦めたりする。

より激しい対処として、一定期間なんのアクティティビティ(コメントなど)が観測されなかったバグを一律 "Obsolete" とマークして閉じる「バグ破産」というアプローチも見たことがある。これはほんとにひどい話だが、よく考えると「バグ破産」で閉じる行為自体がひどいというよりは、そこまで手に負えなくなってしまった事実が問題に思える。

ここまではチームや組織単位での対策。これらとは別に、自分は個人的にバグを弔うやりかたを一つもっている。それは「墓場バグ」をつくること。

どうにもならないが、度々報告される問題がある。自分の仕事だと「遅い」というやつ。わかってる。手も打ってる。良くする計画もある。でも完全には治らない。原因はまちまちだが、はっきりもしない。そういうバグのために自分は「遅いバグの墓場」というバグをつくっている。新しい遅さバグが報告されたら、ログを睨んで何らかの診断を下し、特に新しい情報がない場合(すなわち大半の場合)はその遅いバグを「墓場バグ」の重複報告としてマークする。「遅いバグの墓場」は、遅さの種類に応じて複数個用意してある。

診断をコメントし、ありがとう、がんばってるからよろね、と挨拶してバグを墓場バグに重複登録 (dedup, de-duplicate) する。バグを登録してくれた人も納得するし、バグも成仏するであろう。たぶんね。

「なんか画面の表示が乱れる(がちょっとつつくと直った)」というバグも度々うけとる。これも原因はよくわかっていない。アプリのレイヤではなく OS のバグであることはログから確かなのだが、では OS の何が壊れているのかはよくわからない。こうしたバグは、受け取られるたびに色々な人の間をたらいまわされ、各段階で各人が時間を無駄にする。不毛なので、自分のところに来たときに「いつものやつ」だとわかったら「描画乱れの墓場」に dedup する。

こうした墓場バグがあると、問題のカテゴリに名前がつくおかげですくなくとも「似たような問題前にも見たな・・・」みたいなことが減る。そして既存の類似バグに dedup するよりは後腐れなくていい。コメント欄も荒れにくいし。

これらの墓場バグ自体は、冷凍バグなりなんなりの「やるきはないが閉じないバグ」に所属している。明らかに suboptimal な所作だけれども、生きていくために目をそらしたい現実もある。あのバグたちにはせめて成仏してほしい。

なお遅さバグについては、直す気はあるという意気込みを込めて墓場ではなく動物園と名付けている。"Zoo of the slowness"  みたいな。Graveyard だとしょんぼりしちゃうけど、Zoo はなんとなく楽しげでよい。今日も速くしてくぞ!


Upstreamed

|

https://twitter.com/kazuho/status/1170911284713230336

そうっすね・・・という。自分も upstream するみたいな言い回しはそもそも WK なり Chrome なりで身につけたはずだが、もうマインドセットがオープンソースじゃなくなってるなー。

Link: Blow to 10,000-hour rule as study finds practice doesn't always make perfect | Science | The Guardian

via Blow to 10,000-hour rule as study finds practice doesn't always make perfect | Science | The Guardian

モダ​ン根性論ポップカルチャーのはしりのひとつ Outliers (5000 Amazon reviews!) が論拠としている 1993 年の研究を replicate しようとしたけどだめでした、という研究の話。ふーんとリンク先の論文も眺める: The role of deliberate practice in expert performance: revisiting Ericsson, Krampe & Tesch-Römer (1993) | Royal Society Open Science. 割と面白い。

  • 元研究、およびこの研究は great, good, less good の violinist をあつめて比較している。これどうやってあつめるかというと: Great と good は一つのエリート音楽学校からサンプルする。具体的には学校の教師にノミネートしてもらう。Less good はエリートではない音楽学校から適当にサンプルする。
  • モダン根性論用語になった "deliberate practice", 具体的には "teacher-designed practice" だった。対にあるのは self-guided practice らしい。Deliberate practice ってなんとなく自分で工夫して負荷を高めるもののように考えていたけれど逆だった・・・というか、もともとは Delibrate practice の定義は存在しなかった、あるいは主張に応じてコロコロ変わった、らしい (4.1)。この論文は元論文著者 Ericsson の雑さを強く批判している。
  • 練習以外の activities についても時間の情報を集めている (table 3). たとえば "意識の高い会話 (professional conversation)" みたいのもはいってる。

この論文のキーとなる発見は

  • Good および Great 勢は Less Good 勢より圧倒的に練習している。
  • Great​​ 勢と Good 勢は practice も teacher-designed practice も大差ない。(むしろ great 勢の方がちょっと少ない。)

この論文の趣旨はオリジナル論文の主張の replication なのでそのほかの点については細かく議論していないが、外野としてグラフを眺めるとなかなか趣深い。特に "3.5. Retrospective estimates of practice during development" のセクション、自己申告による練習時間の経年変化。

  • Best 勢は人生序盤 (8 歳くらいまで) の teacher-designed practice の量が Good/Less Good よりだいぶ多い。しかし 12 歳あたりで Good が逆転する。つまり violin で Great になるには幼少期に教師に鍛えられるのが重要なのではないか。逆に一定程度年をとったあとにキャッチアップしようとしても難しいのかもね。この一定程度というのが 12 歳であるあたりに violin 業界の厳しさを感じるが。
  • Good 勢の練習量は 15 歳あたりから Best よりもだいぶ多い。(二割くらい違う。) そして Good の練習量は 18 歳に向けてどんどん増えていくが、そこで頭打ちになり下がり始める。一方 Best 勢の練習量(Good 勢より少ない)は 18 歳を過ぎても下がらない。ボンクラ努力家が 18 で自分の限界に気付かされる様を見るようで気の毒。

音楽の世界は厳しいなあ・・・。

あと Best と Good が同じ学校の同級生で、Less Good は別の学校という事実にも趣があるね。Good/Great と Less Good の差はほとんど peer pressure で説明できそう。実力をつけたいなら厳しい環境に身を置くのが大事だね。


プログラマ、音楽家と比べるとほんとに平和なものでよかったな・・・と思う。

  • Best でなくてもふつうに生活できる。
  • 幼少期にプログラミングを教えてくれる teacher とかいない (少なくとも一般的でない). Teacher-designed practice もあんましない。

Best と Good を violinist を区別するものが (12 歳以降の) practice でないならなんなのか。幼少時の訓練なのか「才能」なのかそれとも他のなにかなのかはよくわからないが、音楽のように成熟した世界ですらこれなのだから、プログラマみたいに雑で新しい世界でそこそこの成果を出したいなら、いくらでもやりようはあるのだろうね。まあ AI 方面はアカデミアという超成熟した過当競争世界にも見えるけれど。

 

教えない対価

|

「後輩を指導する」みたいなことを基本的にあまりやらなくてよい立場にいる。誰かを指導する行為には副作用があり、それを被らずに済んでいる事実を appreciate している。

多くの人々が無意識に払っているであろう「教えることの対価」についてそのうち書こうと思っていたが、最近は逆側にある「教えないことの対価」に出くわしがちなので、まずそれについて書く。


隣の席の同僚の書く UI まわりのコードにやや不満がある。性能改善のために UI まわりもさわりたいのだが、変更に弱くバグりがちで困っている。これはもうちょっと MVC とか MVP とかなんか architectural pattern みたいのも考えてくれや Flux にしろとはいわねえからよ・・・という抽象度高めの不満と、それコピペしたり雑に分岐する前にもうちょっと考えて整理してくれや・・・という細部への不満がある。

抽象度高めの方は件の同僚以前に昔からそうなので、これは「なんとかしなかった」the lack of action に対する不満であり、期待値が高いだけと言える。細部のもうちょっとなんとかならんのか感はモバイル専業でやってきたおっさんとかにありがちな症状なのだが、その同僚は割と若い。年齢関係なかったねごめんね・・・。つまり勤務先でモバイルをやってるだけだとこういうコードになってしまう気の毒さ。

おっさんのコーディング傾向に口を挟むのは不可能だと前のチームで学んだ。しかし若者はまだ救えるかもしれない。フィードバックしてあげたい。しかしあまり良いフィードバックをできる気がしない。その同僚は、成果はだしている。本人はコード品質で struggle を感じている様子はない。だから下手に口を挟んでも余計なお世話。コードレビューとかで場当たり的になんか言うことはできるが、もうちょっとこう、あなたのコードはこういう傾向があるからこれ読んで勉強のうえ補正してちょ、きっといいことあるから、みたいな一歩さがったフィードバックを、本人が有用性を感じられる形でできないものか。

こういうの、たとえば自分が昔そうであったように、ランダムな新卒入社メンバーをメンターする、みたいな立場で組織から「新人教育」を期待され続けてきたなら、時間や労を割いて人に何か教える方法を考えるだろう。それを 10 年 20 年と続けていたら、バンとアドバイスの一つもできそうな気がする。そしてその先輩的アドバイスは組織と文化の力で割と聞き届けられがち。昔は先輩面してそういうことを考えていた時期がある。

しかしそういう身分を脱し 10 年ちかくヒラ暮らしをしているので、いざ誰かにアドバイスをしたいと思っても壁を感じる。他人のやり方に口を挟むことに強い抵抗があるし、その抵抗を乗り越えられる説得力ある言説を自分の中に積み上げられていない。

自分はオブジェクト指向なり関数型なりのデザインの本を一定程度読んでいるし、いわゆるプログラミング指南書もいくつか読んできた。ただ基本的には読んで感心して影響を受けて内面化して忘れる、というサイクルで消化しているため、他人のコードの傾向から適切な文献なり文献内の「ベストプラクティス」なりを論拠として引用はできない。

「引用できないなら身についたとはいえない/消化不良なのでは」という批判は、何割かは正しい。一方で他人を説得する必要がないなら、その場で納得して結論を受け入れコードの書き方を変えれば、それは内面化され身につく面もある。これは若干 cargo cult 的な危険を孕んでいる一方、少なくとも読んだ瞬間にはある程度批判的に評価しているはずで、その時点の前提が崩れない限り問題はない。そして問題があれば、それは体感できる・・・こともある。

こうした雑な学習はコストが低いので、かならずしも割は悪くない。人に教えられないのは雑さの対価といえる。逆に言えば、雑なまま前に進んでいけるのが人に教えずに済む強みである。

表題にもどると、人に教えないでいると仕事のプラクティスなどを説得力ある形で言語化できない、かもしれない。その機会が少ないから。結果としてチームメイトなどへの影響力が下がる、かもしれない。


しかしこの隣人のコードをなんとかしないと日々が厳しい。どういうオプションがありうるか。

  • 適当にぐぐってでてきたアドバイスを鵜呑みにして伝える。職業倫理的に NG な感。
  • いい機会だからと必要文献をばーっと買い集めて読み、整理してみる。これは興味深いプロジェクトな気がする一方「雑なまま進める」という自分の利点を損ねてしまう気もする。時間のない身に割が合うのか。
  • 高位のフィードバックは諦め、必要に応じて適当に相手のコードをレビューしたり書き直したりしつつ付き合っていく。とりあえず書き直しても大丈夫な程度には関係性を維持できている、というか相手が不遜じゃないのが幸い。

なんとなく個人をピンポイントで先輩面するのは企業文化的にあわなそう。あと現状のコードのだめさはその同僚のせいだけでもないので、なんか言われると腹も立とう。もうちょっとこう、チームに対してなんかを提案する、プレゼンするのが筋に思える。そしてこれは主張の品質の bar を一層高くするなあ。しかし他人のやりかたに口を挟む以上、この高さは必要なものに思える。

最後のオプションすなわち現状維持で当面はいいとして。コード品質に関するアドバイスたちをレビューし、現時点での妥当解のスナップショットを研究するのは面白そうではある。しかし時間の無駄な気もする。なんかもうちょっといい切り口ないかな。うーむ・・・。

Dogfooding Fear

|

OS リリースという節目も来たことだし、まっとうな会社員としていいかげん OS の dogfood を再開(一年ぶり)しようと考えてみるが、どうにも gut feeling が拒絶してくるなあ。この胃の痛さの出処はなにか。

外出先でいきなりバッテリーが drain されるなどして Google Map が使えなくなる恐怖。通知まわりのバグで奥様からの緊急連絡に気づき損ねる恐怖。写真とって、といわれてカメラが動かない/あとで写真が消える恐怖。(カメラ周りは過剰反応している可能性がたかい点に注意されたし。)

これはリリース前の OS が理不尽に不安定なせいだけではなく、電話機というものが生活に密着しており、かつ自分の生活に精神的余裕がないという事実のあらわれに思える。となると、やはりバックアップにちゃんと動く安全なデバイスを持って piece of mind しつつ、地雷バージョンを日用したい。つまり、ふだんは不安定な子を使う。しかし鞄の中にはつねにちゃんと動く子が入っている。

最初の悩みは一枚しかない SIM をどちらに差すか。まあ答えはバックアップ機一択なのだが、そうすると地雷の子を使いつづけるよう自分を仕向けるのが難しい。SIM を複数使える MVNO に乗り換える, 会社から SIM を支給してもらう...  といった選択肢は色々人生をややこしくしがちなので今は保留する。SIM なしで日用できるのかというと、自分の平日はだいたい under Wi-Fi なのでだいじょうぶです。

たぶんバックアップ機からは本当に重要なアプリ(すなわち地図とテキストとカメラと写真)以外をすべて消し去り、机の上におかなくてもよいようにすることだろう。というか前そうやってた気がするのだがなぜやめてしまったのか・・・と考えるにそのデバイスでしか起きないとされるバグの調査で wipe してしまったんだな。そういうことは滅多にないんだけど年に一回くらいはあり、年に一回あれば dogfood の習慣を断つのに十分なのだった。

ついでにバックアップ機からはすべての BT ephemeral を消し去るのも良いだろう。

最近うまれた新しい問題: 自分はメッセージングを SMS に統一してしまった!なぜなら Hangout が滅びてしまったから・・・。これだと SIM のないデバイスで不都合がある。SMS 以外で奥様への負担の少ない選択肢を考えないとなあ。おとなしく FB Messenger を使うか。やだけど・・・Signal や Telegram つかいたいなー・・・しかしそういう話ではないのだよ・・・。

バックアップ機は Pixel 2 XL. 地雷機は新デバイス...はなくすとやなのでしばらく Pixel 3 を使い、新しいのが発売され次第そっちにスイッチするとしよう。そしてアプリのセットアップがめんどいので発売まではあまり色々インストールせず質素な電話機生活をしときます。

追記

二台持ち再開した。

実践 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 するにはもうちょっと考える必要あり。

 

 

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 になってしまったので自分を説得できるまでもうちょっと調べてみたい所存。ひっこして来たばかりの頃に勢いでやってしまえばよかったのだろうけれど、当時は全然興味なかったのだった。

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

 

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

Huawei officially reveals Harmony OS, its first party operating system

|

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

Fragment から移動

仕事のやる気

|

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

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

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

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

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


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

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

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


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

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

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

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

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 の問題はやることのなさではなく時間のなさなので、世の中に時間はあるけどアイデアがない人がいるのはそれはそれで仕方ない。誰もが自分自身の問題を抱えて生きている。

どうすっかなー。

 

高速化日記 (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 年前だった。もっと活用せねばならぬと反省。

Another Reduction

|

精神衛生低減の出処について考える。

家族の起床が  7 時から 6 時に繰り上がった結果、自分の可処分時間が一時間減った影響は大きい気がする。ほぼ半減。早起きすることでオフセットしようとしたが、うまくいっていない。

暗黙の前提として起床が一時間早まることで一日のタイムテーブル全体が一時間前倒しになると考えていたが実際はそうもいかず、現実には単に自分の朝の labor が一時間増えた。これは以前は自分が一時間分の labor をゆこっぷ(奥様)に押し付けていたということなので文句をいう筋合いはないが、可処分時間が減ったのもまた事実。

結果として、たとえばいつも翌々週の podcast のために読む論文まで決められていたのが常に自転車操業的になり、読んでまとめる作業も仕事の昼休みプラスアルファまではみ出している。

なにができるか/すべきか。

  • 夕方のタイムテーブルに変化がないので、自動的に早く就寝できるわけではない。早く寝るための工夫が必要。なにか考えないといけない。ダラダラする時間を最小化してさっさと風呂に入って寝るのが良いが、一日のおわりは疲労がピークなのでだらけがち。たとえばだらけの原因になりがちな電話機を今より厚く隔離するのはどうか。どこに?
  • 朝はすっぱり諦め、夜更かしする。これは世間では人気のある選択肢だが、年寄りだと夜は疲れてて頭はたらかないのでいまいち。
  • Fasting を通じて食事はそんなにたべなくてもよいことがはっきりしたので、昼飯は同僚などに誘われない限り適当にヨーグルトとかサンドイッチで済ませ、昼休みを積極的に可処分時間に転嫁していく。これはできそう。ただし過去の似たような試みは軒並み失敗しているのでその理由については考える必要があるかもしらん。
  • 一歩危険水域に踏み込み、平日にも一日 leave me alone する日を作ってもらうのはどうか。朝早く家を出て、スタバに行き、そのまま出社。直接会社に行くでも可。これは家庭円満と可処分時間のトレードオフなので、あまり望ましくはない。
    • その枠を夕方にもってくるバリエーションもありうる。ただ夕方は疲れてるので時間あってもそんなに嬉しくない。
  • 家族のためではなく自分のためだけに有給を使い、可処分な一日 or 半日をたとえば monthly とかで確保する。これも家庭円満とのトレードオフ。
  • 会社にいきつつ真面目に働かないでなんかする。これは雇用と可処分時間のトレードオフ。やばい。まあ現状もビルドまちにインターネットとかしているわけなので、そういう時間をなんとかできないか考える。しかしこれほどうまくいかないものはないことが過去の経験からわかっている。そして最近は仕事はたてこみがちなのである。

小銭の力でなんとかするオプションはないものかと思うが、既に職住近接、片働き化という大きなカードは使用済。うーむ。

まずはアグレッシブな早寝(ばかげた響き)のための施策と、昼休みの fast 化から。時間それ自体の確保とは別に、可処分時間の使い方も考える必要はある。それは別枠で。


しばらく考え、もっと攻めていい気がしてきた。上のストーリーは腰が引けすぎている。

タイムテーブルの細部を見ると、自分がボトルネックではなく他の人を待っている時間がある。このアイドルサイクルで他の人つまり奥様のロードを引き取ればトータルのレイテンシは減らせるんじゃね?そういうサイクルパズルで詰められそうなパスはけっこう残っている。

自分の仕事を増やすことで自分の時間が増えるというのは一見逆説的だが、これいわゆる work stealing というやつじゃん。ブレイクスルーの予感。ただし過労に注意。

Casey

|

ATP の co-host である Casey がフリーランスという名のフルタイムポッドキャスターとして会社をやめてから一年くらいたった。楽しくやっている模様。

Casey は紛うことなきインターネット芸人プログラマだ。自分はインターネット芸人的プログラマがあまり好きでなかったし、自分のインターネット芸人的側面も嫌だった。ただ Casey を見ていて少し意見が変わった。嫌いなのは単に特定のインターネット芸人のステレオタイプなのだとわかった。

一部の芸人プログラマは芸人としての力を使ってプログラマとしての実力を水増ししようとする。それは意識的かもしれないし無意識かもしれない。本人の意図とは別に聴衆が勝手に誤解することもある。いずれにせよ芸を磨いた方が良いプログラマに映る事実がインターネットのプログラマコミュニティに与えるかもしれない影響は、自分にとって好ましいものではなかった。

Casey は芸人プログラマであるものの、自分の実力を boast するところがない。もっといえばほとんどプログラミングの話をしない。それは ATP なり Analogue の聴衆がプログラマより広い聴衆(すなわちアップルファン)だからという面はあるだろうけれども、それよりは本人のパーソナリティに思える。

Casey は nice person である。あるとき Casey のつくった小さなインディーアプリが TechCrunch にとりあげられる出来事があり、当人を含む多くの人を驚かせた。その件を振り返る ATP のエピソードで、ホストの Marco Arment はこれを Casey の niceness に attribute し、それを flatter した。TechCrunch の編集者と Casey やその仲間たちは古くからの友人であり、その関係が記事の登場に影響したというその指摘にまったく嫌味はなく、ただ being (very) nice であることはときに credit されるし、そんな君をみんな好きだよ、という話。Casey の being nice なところが好きでたまに Analogue (当人メインの podcast) を聴いている身として、これはよくわかる。

卑近な見方をすると, Casey は自分の personality でカネを稼いでいる。それを生活の糧にしている。そして Casey がプログラマである事実は personality に彩りを与えている。例えば自分は TV に出てくるような一般的な「いい人」芸人には興味がない(テレビみないし)が、Casey は ATP をきっかけに存在を知り、その性格ゆえにフォローしている。Marco Arment は以前「Podcast は話題をきっかけに聞き始め、パーソナリティを理由に聞き続ける」と言った。これが真である程度は個体差があるだろうけれど、少なくとも Casey の武器は being very nice な personality だと思う。


プログラマ中心の視点で見ると、Casey は personality で金を稼ぐ芸人プログラマである。その事実はまったく隠されていない。自分もそんな Casey を敬愛している。

冒頭で stereotype として描いたようなインターネット芸人プログラマを自分が嫌いなのは、一つには単にそのステレオタイプが自分の好みでないからだった。けれど芸人プログラマにはもっと他のありようがあった。

もう一つ、自分はコミュニティにおけるプログラマのあり方に狭量だったとも思う。もっといえば、インターネットでのアテンションはプログラマの実力に応じて分配されるべきであり、芸人プログラマはその取り分を掠め取っているように感じられた。けれど自分のボンクラぶりがはっきりした今にしてみると、これは随分と息苦しい意見に思える。

関心と実力は特に紐付いている必要はない。関心を欲している人がそれを持っていけば良い。関心の払い手であるコミュニティがそういう態度でいる方が、関心を集めたい芸人やメディアが実力詐称の誘惑に負けずに済む。コミュニティは単に芸人としてのスキルとプログラマとしてのスキルを混同しなければよい。それは今の時代ならできるのではないかな。

実力がないならないなりに居場所のあるコミュニティの方がボンクラには居心地が良いから、そんな多様性を応援できるよう自分に染み付いたドラコニアン的態度は改めていきたい。


そんなことを考えるのは、自分はプログラマとしての実力より芸の力にキャリアを助けられてしまったと感じているからでもある。いちおう今の勤務先に入るときは面接を通過しているし、今の職場で芸を頼ったことはない(頼りにならない)けれども、職業人生全体でみると芸に頼った瞬間はあった気がする。

Attention trading が現代のスキルポートフォリオの一部なのは事実だけれども、そこには dark pattern や growth hack 的後ろ暗さがあり、居心地はよくない。そういう自覚に至ってからは芸人的行動をする際には transparency のためボンクラ性を強調するようにしている。板についたハッタリ感が滲み出してしまうときもあるけど・・・。

まともなプログラマが Kaggle とか GitHub で修行しているのを片目に可処分時間をぜんぶ podcast につっこんでいる身として、自分はもはや芸人として生きていく方がいいのではと思うこともある。でもまあ、仕事がぱっとしないマイクロセレブワナビーにありがちな現実逃避のファンタジーだね。Podcast をやるのは自分の芸人性向が満たされて楽しいけれど、Casey と違い自分の番組が生活費を払ってくれる可能性は微塵もない。多少ボンクラでもプログラマを続ける方が、どう考えても実入りは良い。これは自分が運と成り行きで恵まれた待遇のプログラマとして働けているからでもあろう。

インターネット芸人プログラマの受容と、自分が芸人になれるかどうかとは無関係。やっぱ Podcast とかやって遊んでないでちゃんとプログラマとしてキャリアを前にすすめることを考えないとなあ。

Pricing, Medium vs. note

|

Fragment から移動。

  • Medium の pricing を眺める
  • $50/year or $5/month. これを engagement に応じて writer に分配するらしい。
  • 読み手としての嬉しさはさておき、書き手は競争が激しくて食えなそうだな。こうした歴史的雑誌たちよりユーザが沢山つけば話は別だが、そんなことあるのかね。あまり想像できない。
  • note.mu の課金を見ると、こっちはコンテンツ単位。Medium と note, 同じようで違うと前に書いたけれども、やはり違うな。note もやがて paywall 地獄始まるかとおもっていたが、この課金モデルだと動機がない。Paywall の動機を持っているのは書き手だけである。
  • Paywall を押し付けないと課金しない書き手のインフラをどう賄うかという問題はあるけど、課金者からのショバ代に転嫁するか、広告を出すかすればよい。
    • 無料分を広告で賄えるのは Medium にも同じことが言えるが、そもそも広告が嫌いでやってるビジネスなので打てない手となっている。
  • Medium が儲からなそうな一番の理由は membership だと単位ユーザあたり課金額の上限が $5/month に固定されてしまうこと。ソーシャルゲームとかだとユーザのカネ使いすぎが問題になっており、そういう "digital whale" への依存が色々な意味で問題になっている。しかし文章の課金にはゲームのような射幸性はないんだからカネ使いたいなら使わせてやればよくね。
    • 逆に読んでも読まなくても毎月自動的に $5 もってくのは、それはそれである種の人間の性向(惰性)に依存している。雑誌の購読ビジネスはそれに依存していると思う。これを "friction-free" と呼ぶのを止めはしないが、使いたいときに使いたいだけ使える方が個人的には好き。
  • というわけで note はサイトの出来は気に入らないが商売としては頑張って欲しい感。

隣の TLM

|

近隣チームの TLM の下から二人続けて人が出ていった。他所の部門に移ったという。

TLM というのは TL 兼業の EM で、いわゆる playing manager. 下についている人数は少なめ。専業マネージャへの移行過程であることが多い。といっても特にエラくもならずそのまま TLM を続ける人の方が多い気もする。(なぜならエラくなるのは一般に難しいものだから。)

出ていった人たちはもともと acquihire 的に入ってきた人たちで、それほど能動的にチームを選んでいない。本来やりたかった方向の仕事に移っただけかもしれない。一方で件の TLM は随分と細かいことにうるさいある種の micromanagement をしていたので嫌気の差した可能性も自分は疑っている。他人事なので深くは追求しないけれど。


TLM は専業の EM に比べるとしばしば micromanage しがちに見える...あ、多くの TLM の名誉のために言っておくと、別にみんながみんなそうなわけじゃないですよ。

下についている人数がすくないせいで micromanage 「できてしまう」面はあるだろう。面倒を見る相手がある人数を超えると micromanage は現実的に無理。官僚的にガチガチとプロセスを固めればできるかもだが、幸いそれは組織の風土と相性が悪い。

別の理由として、TLM は TL というだけありしばしば technically opinionated なせいで下々より良いやり方を思いついてしまい、下からの提案を論破してしまったりする。 この「より良い」は当人の主観なわけだが、実際より良いこともよくある。なぜなら多くの TLM たちはエラくなるだけあってエンジニアとしても割と実力があるから。とはいえ当事者の提案する方法を却下して自分の案を押し付けるとか、一般にはムカつくことである。

そういう意味で TLM の micromanagement は伝統的な管理職による micro-management のステレオタイプとは違う。締め切りとか進捗とかにうるさいというより、仕のやり方やソフトウェアのデザインとか実装の方針みたいのにうるさい。しかし下々としてはどっちも等しく嫌である。

そういう micromanaging-TLM の下ではまったく働きたくない一方、peer, team mate としてみると彼らは結構(というかだいぶ)頼りになったりするので気分は複雑。下々を手足のように使い複数人がかりで面倒くさい問題をぱぱっとやっつけてくれたりする。自分も件の TLM にはだいぶ世話になっている。エンジニアリング的な趣味や価値観でいうとチームのなかでいちばん「こいつわかってんな」と感じる。そういう実力派だから下に人をつけられる面はある。


TLM の micromanaging nature はしばしばマネージャとしての成長の過程かもしれない。どうすれば彼らがより良いマネージメントスキルを身につけられるのか・・・は自分が口出しすることではないのでおいておくとして、そういう TLM の下についたらしたっぱとしてどうすべきか。

まず一番いいのはそもそも TLM の下につかないこと。一人で仕事ができ、TLM の「面倒見の良さ」(かぎかっこ)が必要でないと認識されていれば専業マネージャの下で放置しておいてもらえる可能性が高い。自分は今のところこれに成功している。しかし今の勤務先でのキャリア前半、そういう目に遭わなかったのは単に運が良かったからに思える。

もし運悪く TLM に micromanage されてしまったら?

ケンカしても評価が下がったりして損するだけなので、心を無にして指示に従いつつ逃げ出す先を探すの良いのではなかろうか。望まぬ mindfulness skill が問われるけれど、会社員人生そういうこともある。


TLM, 自分でプログラマとして働きつつ追加で people management の仕事を増やされても特に嬉しくない。だから TL 的な立場で自分の能力を拡張する手足として部下を micromanage したくなるのはわかる。自分も同じ立場なら同じことをしていまうかも知れない。TLM がどのような mindset で仕事に望めば皆がハッピーなのか。わからない。わかる必要がない身分を有難く思っておこう。

むかし、隣の同僚が「俺マネージャになるわ」といって TLM になったことがあった。自分はその TLM の下についたが、もともと team mate だったせいもあって特に上下関係は感じなかったし、あれこれ指図されたりもしなかった。人事考課はされたはずだがどうだったか記憶にない。

そのひとは結局一年ぐらいして「やっぱ向いてなかったからマネージャやめるわ」と IC に戻ってしまった。

 

The First (Failed) Attempt To note

|

そんなわけで note 書いてみっか、と試してみる。しかしダメであった(自分の出来が)・・・。公開するに値せず。

自分がオンラインで読んだものを紹介する、というのをやってみた。リンク、要約、一言感想、みたいのを並べていく。みんなも紹介した記事を読んで面白かったとかどうとかいう話をしようじゃないかという趣旨。

なにがだめか。まず自分の書いた要約がつまらない。自分としてはリンク先の関心を横取りしたいのではなく読者にリンク先を読んでほしいので、読んだ気になれる文章を書く気はない。一方で「読みたい気になる要約」という意味では文章のタイトル、ヘッドラインが圧倒的に優れているので、ちょっと使える字数が多いだけでやる気ない第三者が付加価値を生むのは難しい。自分の要約能力が低いだけかもしれないが、とにかくこの要約文のつまらなさといったらない。我ながら。

感想もぱっとしない。要約だけ読んで本文は読んでない読者向けに何を伝えれば良いのか。特に言うことない。ついでに自分は批評をしたいわけでもない(し、いちいち批評を加えるような文章を読んでいるわけでもない。)ディスり芸みたいのもやりたくない。「すごい。面白い。びっくりした」くらいしか書くことがない。

読んだものをただ並べるというのもいまいち。なにも考えずにならべると時系列になるのだが、結果として紹介文全体のストーリーもテーマも存在しない。そんなら Twitter にでも書けばよくね、という気になる。実際世の中のリンク横流しインフルな皆さんは Twitter をやっているわけだし。

ついでに読んでるものもなんというか、ほんとにそれ紹介したいの?みたいな気がしている。紹介を書いてみたのは The mindfulness conspiracy,  ‘They Were Conned’: How Reckless Loans Devastated a Generation of Taxi Drivers, The rise and fall of French cuisine, How Millennials Became The Burnout Generation とかなわけだが・・・なんつうか、アメリカの話なんだよね。あるいはイギリス(the guardian) 。Mindfulness とか Millennial とか日本語圏の読者どれだけ興味あるのだろうか。自分にとってアメリカの話というのは(住んでるので) relevant かつ (長くは住んでないので) novel なわけだが、novelity はともかく relevance はないよなあ。まあ興味ないよね。

日本の読者の多くがアメリカに興味を持つ文脈って armchair cultural study すなわち他国をだしに自国をディスったりおだてたりする話である。しかし自分は日本との比較はそんなに興味ないというか、なくはないが比較できるほど詳しくないし、そもそもそうした他人褌出羽守活動はやりたくない。詳しくないという話だと、ソフトウェア関係以外に自分は何の専門性もないので、紹介できるだけのリテラシーあるんか、という疑問はある。というかリテラシーない。

などなど、自分が書いた文章が自分にとってすらここまで面白くない体験は久しぶりでびっくりかつがっかりしてしまった。この路線はダメだな。


「読んだものを紹介する」活動をやろうと思ったのにはいくつか理由がある。

一つは、自分が読んだオンラインのリンクをただ捨ててしまうのは悲しいので、記録をつけてあげたい願望が昔からあったこと。世の中の人は Twitter なりブックマークサイトを使う用途だろうし自分も pinboard を使ってるが、自分にとって pinboard は reference であって journal ではない。もうちょっと日記的につけたい気持ちがあった。まあ fragments でいい気もするけれど、自分の話と何かを読んだ記録は分離したい気もしていた。記録のつけ漏らしも多いし。

もう一つ、日本語の「紹介記事」が持つ関心のサヤ取りが自分は気に入らなかったので、元記事を読むよう励ますテキストをできないかとぼんやり考えていた。結果としてこの試みは今回は失敗した。たぶんなにか違う take が必要なのだろう。

あとは最近 Digg Long Reads, Longreads, /r/Longreads などを購読して今まで自分に降ってこなかった類のコンテンツに出会えるようになったのを喜んでおり、これらリンクを横流ししたい気持ちがあったかもしれない。

世の中の newsletter の類はリンク先を読ませることに成功している印象だが、あれはそれなりの専門家が情報収集に時間をかけており、かつジャンルを絞っているからうまくいくのだよなあ。ランダムな人間がランダムに読んだもの、という切り口は厳しいというか、切り口になってない。むかし(今もあるかもだが)ニュースサイト、フィルターサイト、リンクサイトなどと呼ばれるランダムな個人がランダムに読んだリンクを列挙するサイトがあったが、それらは social aggregator にとってかわられた。 ああしたサイトの運営者のようにインターネットで時間を溶かしていない自分がその劣化版をやろうとしたと考えるとますますうまく行かないのは無理もない。

色々筋が悪かったということで、違うことを考えます。


追記 08/02

Podcast の宣伝兼おまけに使うことにしてみた。音声でのフォローアップ、ATP の真似ではじめたがいまいち機能してない気がしていたので別の方法を模索してみてよいでしょう。なお宣伝の効果は今の所でていない。文章として読まれ広まるコンテンツでないと宣伝にはならないのだろう。まあいいです。

On note

|

Kzys が note.mu などを使い始めるという。

むかし Mercurial ユーザだった頃、Kzys に「時代は Git ですなぜなら GitHub があるからです」と言われて Git を使い始め、それが圧倒的に正しかった体験から Kzys の流行りものへの適応には信頼を置いている。自分の中二病的アンチメインストリーム傾向は他人の力で訂正するしかない。(同じ理由で Higepon のメインストリーム力にも高い信頼を置いている。)

自分は Qiita や DEV に値するがんばった技術的文章を書く気はない。けれど note はつかってみていいかもしれない。それがなぜかはわからないが、それがなぜかを理解するために。

文章に課金したい書き手にただメッセージを公開したい自分のような人間が混ざるのは筋が悪そうではある。というか同業の Medium がその筋の悪さを pay-nudge-walling で体現してしまった。note (capitalize しないの気持ち悪い...) に同じ問題がないのかよくわからないが、そういうことをいっていると "grumpy 中年" になってしまう。


ある platform に参加するには、書くだけではなく読んだほうが良いと思う。そうしないと雰囲気や流儀みたいのがわからないし、書くだけではコミュニティに所属して楽しくやるのも難しい。

そう思ってアカウントを作り note のサイトを眺めていたのだが・・・。なんというかテクニカルなレベルで出来が悪くてげんなり。

  • たとえばトップページからリンクされている "ピックアップ" というページに "ルール1, ルール2, ルール3" みたいな placeholder が残されている。数週前から治ってない。正気か?
  • モバイルウェブでみるとレイアウトが崩れている(画面にフィットしない)。コンテンツサイトでこの初歩的な壊れ方はどうなんだ。きっと iPhone ではちゃんと見えるのだろうが・・・
  • アプリはウェブよりはマシだが、ウェブでやってほしいくらいの機能しかない。オフラインとかないんすか・・・。
  • エッセイマンガが多いが文章と混ざって降ってくる。マンガに人気あるならちゃんと UI で優遇してやってくれや・・・というかもうマンガサイトに pivot した方がいいのでは・・・。

ここでめげてはいけないと歯を食いしばってしばらく冷やかしているが・・・読みたいものが無い。

  • エッセイ漫画興味なし。文章を書きたい人とコミュニティがかぶってるのか疑問。
  • 意識高くなりそこねた自意識日記およびエッセイ。人々がこういうのを書くのはいい。でも自分は特に読みたくない。
  • 情報商材っぽいなにかへのリンク。
  • 中身のないビジネス風記事。

自分は根本的にいまあまり日本語を読みたくないし特にアマチュアの生煮えテキストを読みたくない、という問題はあるかもしれない。ならばなぜお前は日本語で雑文を書いているのかと言われるとまったく反論の余地はないけれども。


note やるぞやるぞと決めてから改めてソーシャルメディアなどに流れてくるリンクを見ていると、たしかに note で書かれたものはある。それらは必ずしも自分が読みたいものではないが、サイトの feed に提示されるものよりはマシ。しかし運用は人気のあるものを流さない方針という。治安がどうこういうビジョンはわかるけれども、結果として人が集まらないと書き手に読者を提供できるのか?そしてサイトのランキングをいじったところでハイパーリンクのある世界の炎上から距離を置けるのだろうか。いまいち信じられない。結局ソーシャルメディアからの流入に頼ってたらダメだよね。

アマチュアコンテンツの platform としても note はそれほど独占的でなく、はてなブログや LINE ブログのような従来の blog platform もよく見かける (LINE ブログは「従来の」ブログではないかもしれないけれど。) 英語圏で感じる blog の死んでしまった感は、日本語には無い気がする。

一歩さがって考えると、ブログの末裔が存命なおかげで note は Medium と違い「課金したい書き手」というニッチに集中できているのかもしれない。別の言い方をすれば note は blog の代替ではなく newsletter ... というかいわゆる「メルマガ」の代替なのだろう。そう考えると feed の ranking とかをチューンしないのもなんとなく納得できるが、一方で自分にはますます必要がないものに思えるなあ。

冒頭の「サイトからのおすすめを読むことで note というコミュニティの参加者になる」というアイデアも、メルマガ的視点でいうと筋違いなのがわかる。つまりこれら有料コンテンツの世界では一人ひとりの書き手を中心に microcelebrity 的コミュニティが構成されており、それら同士はあまり crossover しない。あるいは(有料の)書き手が別の(有料の)書き手を参照するという形でコミュニティ同士が接続される。そこに読者の姿はない。読者を過剰に empower してしまったソーシャルメディアへのアンチテーゼとして、これは一定程度正しい。

ソーシャルメディアに流れてくる note 記事の書き手にしろ、特段コミュニティとしての note に入れ込んでいるようには見えない。これは昔の blog community みたいのとは違う。世界は flat ではなく、書き手と読み手に分断されている。もっといえば有名人と mob に分断されている。そこに the world being flat というファンタジーへの郷愁がないところは post Twitter というかんじで潔い。

そう考えると望ましい note への参加方法とは、人気のある書き手の note を購読しつつ、自分も購読料で一山あてたい野心をもって有名人に絡みつつ note を書く、とかだろうか。ここで Internet microcelebrity as MLM 批判を持ち出す気はないけれども、興味もわかないな・・・。


がしかし!こうした外側からの表層的な批判が孕む的外れさから逃れるために!我々は実際に何かを書いてみる必要があるのではないか!景気づけに一人称複数ですが自分の話です。

しかしこのブログのようなことを書いてもめんどくさくなるだけだしどのみち時間も気力もないので、毒にも薬にもならず書くのもそんなに大変じゃない話題でなんか書くことないかなあ。

自分でやるのはめんどくさいのでゆこっぷ(奥様)に「なんか書いてよ」といったら断られた。一人称複数とは。

追記 (2019-07-30)

 

Link: ニューヨーク・タイムズは日本を「独裁政権」と呼んだのか、気炎を吐いても息さわやか - ネットロアをめぐる冒険

via ニューヨーク・タイムズは日本を「独裁政権」と呼んだのか、気炎を吐いても息さわやか - ネットロアをめぐる冒険

珍しく NYT が話題になってるので眺める。

  • 朝日新聞、というか新聞全般はいつも元記事をリンクしないのがひどい。
  • それはそれとして <Japan is a modern democracy where freedom of the press is enshrined in the Constitution, which American occupiers drafted after the war. It is not the kind of place where journalists are denounced as the “enemy of the people.” Still> ときて <the government sometimes behaves in ways more reminiscent of authoritarian regimes> と「現代民主主義」の対なうえに "regime" なんだからネガティブさを強調する語として「独裁政権」は別によくね?
  • リンクされてる「権威主義体制」訳の文章はアカデミアの書いたテキストで、それとこのライトなポートレイト記事の訳を比べても仕方なくね?
  • NYTimes がすごい無色透明な報道機関であるという前提がある気がするが左よりで opinionated なメディアだし、そうでなくてもアメリカのニュースは(リンク元の asahi.com の特集が示唆するように) Trump がらみで言論の自由にピリピリしてるんだから、歯に衣着せぬ感じな「それでも日本政府はときに独裁政権をほうふつとさせる振る舞いをしている」という訳は権威主義体制みたいなやんわりワードより雰囲気を伝えている。なにかニュートラルな話をしてるんじゃなくて直球でディスらてんのよ?そのニュアンスを伝えたかったんでしょ。
  • まあ記事はディスりが本題ではなくこの記者の存在の興味深さなので、NYT が日本を独裁のようと批判したとする cherry picking がフェアかどうかはまた別。どちらかというと掴みためののレトリックじゃね。
  • ちなみにコメント数を見ればわかるとおりアメリカ人には興味ない話題なのだった。東の方には独裁政権いっぱいあるからね。(自分も冒頭記事を読むまで Ms. Mochizuki 知らなかった。日本のニュースもうちょっと読んだほうがいいな・・・)

Fragment に書いていたら長くなったので別記事にしてみる、という実験。


一歩下がって考えるに、これは翻訳というものの限界な気がする。

自分の感覚だと「権威主義」という言葉はアメリカ人のいう "authoritarian" ほどネガティブな空気を纏っていない。それはたぶん歴史的に割と authoritarianism っぽい文化が通底しているからな気がする。ついでに「体制」という後も、戦後すぐならともかく 21 世紀には "regime" ほどネガティブなニュアンスがない。

なので "権威主義体制" は直訳としては正確だが "authoritarian regime" という語が孕む「うげーヤベーなあいつら」という雰囲気を伝えていない。でもこれって直接的な意味のマッピングと価値観や雰囲気のマッピングの間にある不一致がうんだ lost in translation だよね。

ついでにアメリカ人にしてみれば authoritarian も dictatorship も等しく悪なので、そこを繊細に使い分ける動機はない。NYT の寄稿者の中にはそういうのを気にする書き手もいるだろうけれど。リンク先の記事はもうちょっと雑。

朝日新聞の記事が雑さのギャップにつけこんで我田引水してるのは事実だと思うのでそこにケチをつけるのはいいと思うけど、ある語の訳を nitpick するのは生産的ではない気がする。

メタなマウントとして、リンク先の記事も朝日新聞も NYT を絶対視しすぎ。NYT -> asahi.com でもちこまれた歪曲は NYT 元記事の左傾や雑さによる歪みに対して significant なのか?NYT いいメディアだけど別に隈なくクオリティ高いわけじゃないよ?日本の話なんてとくに眉唾がちなんだから、ちゃんと読んでケチつけといたほうがよくね?


我ながらクソのような出羽守を書いてしまった・・・。しかしそうした衝動の掃き溜めとしてブログ書いてるからいいのです。

退屈な電話機と仕事の物欲

|

ハイエンドスマホ付属アプリの仕事をしていて言うのもなんだけれど、スマホはもうちょっと安くて退屈にならないものか。じっさい新興スマホメーカーの多くはスマホの安くて退屈化、すなわちコモディティ化を目論んでいたはずだが、いまいち成功していない。PC はもっと順調にコモディティ化が進んだ記憶がある。

もちろん安いスマホはたくさんあるし、台数を見れば売れている。けれど業界の中心にある感じがしない。端的にいうと iPhone や Galaxy をやっつけられていない。OnePlus はかなりいい位置にいたはずだが、いつの間にか高価格化の波に引きずり込まれている。ハイエンドの電話機が段々と売れなくなっているのは事実だけれども、結果として起こるはずの値崩れが起こらず、逆に値上がりしているのは興味深い。

これは要するに Apple が頑張って差別化に成功し続けているということなのだろうなあ。成功の陰りは販売台数の減少から明らかとはいえ、それでも多くの人々が iPhone を買い続けている。iPhone の差別化にはハードウェアだけではなく iOS のエコシステムも含まれている。エコシステム側の差別化が難しい Apple 以外の電話機メーカーは苦労しているけれど、Apple はだいぶ粘っている。

とかいってる間に PC もコモディティ化が底を打って値上がりしている様子があり、これもやはり Apple / Macbooks の影響に見える。スマホと同じく安くラップトップはいくらでもあるから、コモディティ化が失敗したわけではないけれど。

PC もスマホも安くて退屈になってほしい自分ですらハイエンド機に物欲を刺激されがち。これはガジェットへの金遣いが荒くなっている愚かな中年という面はある一方、愚かな中年を散財させるコンシューマ向けコンピュータというマーケットを切り開いた Apple はなかなか大したもんだとも思う。


もともと「スマホのコモディティ化を食い止めた Apple なかなかやる、しかし自分はコモディティ化を支持する。」という話を書こうと思っていたが、よく考えると自分は仕事からどうしょうもなくバイアスを受けている事実に気づいてしまった: スマホはコモディティ化している、けれど自分はハイエンドスマホが欲しい。自分の物欲を業界動向にこじつけるのはよくない。

仕事でスマホ関係をやってなかったらコモディティ化の恩恵にあづかり OnePlus なり 3a なり Moto なり Nokia なりの適当な middle-end を雑に買って使っているであろうことを思うと、ガジェットに近い仕事は無駄に物欲が刺激されがちでよくない。

Toiletry Bag

|

今回の旅行は荷造りグッズを少し拡充してみた。

まず packing cubes を買い足した。バックパック用に小さいのを増やし、要洗濯衣類格納用に大きいのを増やした。どちらも役に立った。特にバックパック用は子どもの着替えやタオルを突っ込んでおくのに重宝した。複数個セットでしか売られていないのが不便・・・と思いきや余剰分はゆこっぷ(奥様)が活用していた。

パスポートケース、これまで使っていたのが壊れかけでパスポートが危険に晒されていたため交換。グリップしやすいので盗難への備えになってる気がするのと、ペンを入れておくと税関の書類を書く役に立った。リンク先のやつは安っぽい。金を払えばもうちょっとコンパクトになりそうだけどまあいいです。

そして Toiletry Bag. オフィス女子がトイレに持ってくようなやつ、という差別的認識だったが、製品説明によると登山者とかも使う想定らしい。洗面用品だけでなく細かいケーブルみたいなガジェット周辺アクセサリもつっこめる。荷物がだいぶ片付き満足。飛行機の機内持ち込みにも重宝した。これも金を払えばではある。

あとはスマホをパクられにくい状態で持ち歩くのに便利なカバンが欲しい。バックパックの外側のポケットに入れるのも、衣類のポケットも、若干不安。今は通勤用のバックパックをそのまま使っている。そして旅行専用バックパックは増やしたくない。

On Hybrid Research

|

20パーセント制度がどうこういうのは、一歩下がると企業が新しいものを生み出すためにどうすべきかの議論である。20パーセントは下々や現場の人からも新しいものが生まれるといいですねという話だった。このコインの裏に、新しいことを考えるのが仕事の人は現場に出たほうが良いですねという話がある。勤務先のリサーチ部門のトップ(当時)は、それを主張する Hybrid Approach To Research という記事を書いている。すごい雑にいうと、いわゆる研究者も製品開発に突っ込みましょうみたいな話。しばしば「象牙の塔」などと揶揄されがちな大企業研究所モデルのステレオタイプに対するカウンターとなっている。

論文書きや標準化といったリサーチっぽい仕事と製品開発の近接は自分の勤務先での体験と一貫しているし、機能もしている。伝統的な研究所モデルとの優劣は自分には議論できないが、少なくとも研究者たちが専門分野の知識にもとづいて書いた実製品のコードは差別化の要素になっているし、逆にばりばりコード書いたり標準化にクビつっこんだりしているエース級がその成果を論文にまとめ、世間に注目されたりもしている。

ある日の夕方、リサーチと部門が持っているコードをちょっと直す必要があったのでパッチのレビューを送ると「ごめんごめん今オフィスに帰ってきたところだから明日レビューするね」と返事があり、ふーんとおもっていたら数日後に会社のブログで CVPR に論文を通していたことを知る、みたいな出来事があった。学会帰りだったのか。締め切りのある製品コード書きながら締め切りのある論文も書いてるこのひとたち・・・と驚愕した。

CS のエリートがすごいアイデアを考えバリバリとコードを書いて製品につっこんでくる。その様子をずっと横から眺めていた自分は、これこそ勤務先の競争力の源泉だと信じるに至った。その反動で「誰でもイノベーションできる」みたいなファンタジーに白けてしまう面はないでもない。

一方で、エリートが活躍できるのも究極的には個人の自立性を重んじる文化の現れなのだと考えると、エリートが活躍できるためにそういう空気を作り出すのは大切なことで、それに便乗したボンクラがどうでもいいことに時間を使うのはまあ、空気の対価ということでいいんじゃないかという気もしてくる。エリートだけあからさまに差別しちゃうと空気悪くなるし製品開発で協力とかも心理的に盛り上がれないからね。ある程度は優遇した方がいいと思うし、実際されているだろうが。

世界で戦える CS トップエリートがじゃんじゃん成果を出す。下々のボンクラもたまに少しは面白いことをやる。その間くらいのひとは、間くらいの成果を出す。PM やマネージャは適当にその辻褄をあわせる。プログラマ中心のテック企業にはそういう感じでやっていってほしいもんです。

 

More On 20-Percent

|

On 20-Percent を読んだ知り合いから反応があった。自分の考えをもう少し整理し、「20パーセント制度」の語りをめぐる自分の中のわだかまりを三つの論点にまとめてみる。

ひとつ目は、勤務先の中の人の語りは盛り過ぎではないかということ。20パーセント制度の成功例としてよく Gmail が引き合いに出される。Gmail はユーザ数が 1B を超える超大成功製品である。そんな成功を生んだ制度ならたしかに自慢の甲斐もある。しかしこの主張の信憑性は薄い。Paul Buchheit はインタビューの中でこう話している:

[Larry] and Wayne Rosing, who was the VP of Engineering at the time, would sit down with engineers and give them projects. When they sat down with me they said, “we want you to build an email something.” That was all the specification I got! So I went off to build something with email, which became Gmail.

自発的でも 20 パーセントでもなく社長直々のフルタイムプロジェクトじゃん?Gmail に限らず、同じ規模の主要製品の中で 20 パーセント制度から生まれたものは無いのではなかろうか。

20 パーセント制度が何も生んでいないとはいわない。いちいち例はあげないけれど、沢山の面白い、良いプロジェクトの起点になったとは思う。でも Gmail が引き合いに出されるたび嘘くさくて白けてしまう。

20 パーセント制度の成功例をいちいち名指ししたくない理由は、ふたつ目の論点と関係がある。これは前に書いたことの繰り返しだが、20パーセント制度はボトムアップで勝手になんかやる文化の現れに過ぎないと自分は信じていて、制度ではなくその文化を大切にしてほしい。

二割とかケチくさいことをいわず、プログラマは自分でやると決めたプロジェクトにフルタイムで取り組むことができる・・・こともある。実力、実績やカルマ、チームの勢い、上司の性格、プロジェクト自体の説得力と野心度、主要製品との相性・・・こうした変数によって、獲得できる自立性には大きなばらつきがある。でも当事者たるプログラマが「こういうのがあるといいと思うのでやります」と言い出し、上司などが「そんじゃよろしく」とプロジェクトが始まる(あるいは上司に黙ってこっそり始まる)のはそこそこ普通の現象。Gmail の逸話にしたって、上司がいってきたのは「メール関係でなんかやってよ」だけだから勝手にやったと Buchheit はいう。このマネジメントの雑さ、当事者の自由度は勤務先に対する自分の文化的イメージと合致するし、大企業になった今も面影を残していると思う。

別の例: Chrome の話。Chrome をはじめたのは Ben Goodger や Darin Fisher といった Mozilla 出身者だが、彼らは別に Chrome をつくるためではなく Firefox に検索っぽい機能を入れるために雇われた。けれどしばらく働くうちに結局ブラウザが作りたくなり、上司に「ブラウザやります」といったら「やろうやろう」と盛り上がりプロジェクトが始まったと言い伝えられている・・・というか件の上司が他の部門に異動する際の小さな集まりで当人から聞いたのでここで言い伝えさせていただきます。つまり Chrome は少なくとも当初は戦略的製品とかではなく、当事者が自発的に始めたフルタイムのプロジェクトである。大小様々な規模のプロジェクトが似たような感じではじまり、様々な成功(や失敗)を収めたことは想像に難くないし、実際いくつも目にしている。

各人が実力や実績に相応しい自立性を持てる。そして「実力や実績」には必ずしも組織上の権力が伴う必要はない。そうした自立性を当然のものとみなす空気がある。制度としてすべての社員に最低限の自立性を与える20パーセントより、自分は雑さの空気を信じている。

空気は繊細なものだから、環境の変化に晒され失われることもあるだろう。だからこそ単純な制度に卑小化されたくない。「制度としての自由」と「上司にいわれたことをやる」の間にある豊穣をわかりやすいストーリーで握りつぶさないでほしい。

みっつ目は完全に個人的な話。自分は、少なくともある時期まではかなり高い autonomy budget を与えられていたと思う。勢いのあるチーム、放任主義のマネージャ、外的要因のせいで進みの遅いプロジェクト。妻子なし。本業の外で自分のやりたいことに好きなだけ時間を使える条件が揃っていたし、実際それなりに時間を使っていた。にも関わらず、大した成果は何もなかった。やがてこの autonomy budget をダラダラと浪費する働き方に適応し、非生産的な日々を過ごすようになった。この話は前にも少し書いた

自由を与えられながら何もできなかった現実は自分に都合が悪いので、無意識に色々言い訳したくなる。その一環で20パーセント制度にもケチをつけたくなる。別に自由な文化からイノベーションとか出てないでしょ成功した製品みんな買収でしょ、とかシニカルな態度を取りたくなる。

ボトムアップで自律的な文化に負の側面があるのは事実だと思うけれど、自分がそれを生かせなかったからといって必要以上に否定的になるのは我ながらよくない。

でもインターネットで20パーセント制度の話題をみかけると「なにもできなかった自分」という現実が視界に入り、シニカルさが顔をだしてしまう。愛社精神とシニシズムが関心を求めそれぞれ声を上げる。自意識の病。

この「20パーセント病」が発症したらほんとうは話題から距離を置くのがよいのだろう。それに自分のようなボンクラより、成功譚の当事者から話を聞きたいよねえ。

Stepping Out From The Mess

|

職場から持ち帰った仕事での不機嫌が感染して子も不機嫌になる、という vicious cycle が発生した。よろしくない。

帰り道に考え事をするのは生産的ではあるが、仕事で BS が発生した直後だと考え事を通じて腹立ちが長引いてしまう。仕事が BS だった日はむしろ家への帰路で podcast なり audiobook なりを聴いて仕事を detach した方がよいのではないか。仕事以外の考え事するでもいいけれど、題材があるとも限らないし。

一方で仕事から一歩距離を置いて何かを考える、というと大仰だけれども目先のバグから一歩下がって翌日やるべきことを考える、とかは意味があるし、記憶が失われる前、その日のうちにやった方がよい。というわけで仕事というかデスクを終業 30 分前に離れ、よそのオフィスにラップトップを持ち込んでコードから離れて wrap up をしてみる。(コードはデスクトップで書いています。)

終業間際までコードを睨んでいるよりは良い気がする。欠点としては移動のオーバーヘッドがあるのと、このまま家に帰るのでラップトップをもって通勤しなければいけない点。あとなんだかんだで実作業時間が減ってしまうのは若干いまいち。ラップトップは諦め、歩きながらの考え事とおなじく紙のノートを受け入れれば良いのかな。まあ 30 分前 wrap-up 自体は実験的にしばらく続けてみよう。アラームを設定。


ところで先週ことさら BS に腹がたったのは、一つには風邪のせいで二週間くらい課外活動ができていなかったせいもある気がする。気分転換がなかった。Podcast の準備に paper reading とかをしていると、仕事以外のテックな関心事がアクティブになるので仕事が多少ムカついても気を散らせて良い。気が散るのは一般には良くないことだが、BS が目の前にあるときは有効な気がする。仕事の性質上ある程度の BS は避けられないので、課外活動をもっておくのは精神衛生の予防に良さそう。「仕事の他の趣味があるといい」みたいなのってどうでもいいとおもってたけど、働いて稼ぎ続ける必要性を考えるとあながち無視もできない。やれやれ。

Composability

|

NN のモデルがアプリのあちこちに色々ありすぎてメモリや CPU を使いまくって厳しい。モデルの実行は自分の与り知らないネイティブコードの奥深くで起こっているのではたして全体でいくつのモデルがあるのかすらわからないが、なかなか現代的な事象を目の当たりにしているとは思う。

アプリの性格上、こうしたモデルの大半は何らの方法で画像を入力として受け取るモデルのはずである。理想的には、アプリに内在するいくつものタスクは入力を共有する multi-head なモデルとして表現され hidden layer などの計算資源を共有すべきだが、たぶんそうなっていない。

これは入力の解像度やモデルの実行頻度の違いなどに起因している面もあるけれど、より本質的には Andrej Karpathy の Software 2.0 や Keras 作者の The future of deep learning が envision しているような未来のプログラミングとしての model composition という世界がまだここには来ていない、という話のような気がする。

モデルを開発しているチームが会社の中の別のところにいるせいでおこる ML 版 Conway's Law という見方もできる一方、伝統的なソフトウェアではチームをまたいでコードが分断されても機能自体は API を通じて共有され同じ計算を何度もやりなおしたりは(そんなには)していない。ML モデルにしても、たとえば segmentation なんかは複数チームの機能をまたいでモデルおよび結果を共有している。つまりモデルの入力という切り口でなく Java なり C++ なりの API というところまで遡れば共有されている。

複数機能やチームをまたいでモデルのアーキテクチャを部分的に共有する、なんて言うは易しだけれどもトレーニングどうするなどを含め自明でないことが多すぎ、自分にはあるべき姿がまったく想像できない。一方でそうしたモデルの統合なしにデバイスの計算資源が要求にあわせスケールすることがあり得ないのもまた明らかなので、この問題は数年以内にどこかの頭のいい人がなんとかするのだろう。それを見届けたい気はする。単にスケールせず AI 機能は頭打ちになりました、おしまい、という可能性もまあまああるが・・・。


あるとき AI っぽい新機能を開発している同僚と話していたら、その機能は実は別のあまり関係なさそうな既存機能のモデルで実現でき、したがって性能上のインパクトほとんどないんだよ、と聞かされてびっくりした。モデル再利用できちゃってる?自分の問題認識が遅れているだけで、結局問題は Conway さんという話なのかなあ。

Martin Fowler が micro models とかいいだすのはいつだろうか。Micro frontends 以上にどうでもいい話になりそうだが・・・。

手段の為替レート

|

Getting Things Done であるためには手段を選ぶべきでない、プログラマはなんでもテクノロジで解決しようとするが交渉などで解決した方が良い問題もある、みたいな主張を昔たまに耳にした。今でもそういうことを言う人はいるかもしれない。

これは言い換えると、問題を解決するためのコストを最小化しろという主張だと理解している。ここで主張自体に異論を唱える気はないが、当事者のコストを理解してないなとも思う。

たとえば何らかのインテグレーションを片付けたいとする。インテグレート先に望ましい API が足りていない。コードによる解決策は、たとえば足りない機能を自分で実装する、かもしれない。この作業には 10 コード$かかるとする。 交渉による解決は、たとえばインテグレート先のチームにお願いして API にフラグを足してもらう、かもしれない。この作業には 2 交渉$かかるとする。

「コード$」および「交渉$」は仮想のコスト通貨である。ここでいうコストは所要時間かもしれないし emotional burden かもしれない。交渉の方が速いと考える人は 10コード$ > 2交渉$ と考えているが、これは交渉が得意な人の為替感である。そのひとにとっては、たとえば 1コード$ == 1交渉$ である。一方あるプログラマ、仮に森田と呼んでおく、にとっては 10コード$ = 1交渉$ である。別の言い方をすれば 1 森田$ = 1 コード$ = 0.1 交渉$ である、かもしれない。

コスト通貨の為替レートは個人差が大きい。個人は自分の為替レートに基づいて判断を下す。相手に自分の為替レートを押し付けることはできない。

チームワーク

反論はいくつかありうる。たとえばチームワークという点でコードは高く付くかもしれない。後の保守コストを考えると 1 チーム$ = 2 コード$ = 0.5 交渉$ くらいかもしれない。すると先のインテグレーションはコードを書けば 5 チーム$,  交渉なら 4 チーム$ で片付く。交渉したほうが安い。

頼まれる側からするとチームのために自分の苦手なことをやれという依頼には Principal–agent problem がある。真面目な会社員たるものべつにチートとかはしないけれど、やる気は起きない。もう一つの問題は、チーム総体の能力を判断するのは難しいことなので、そのunreliable judgement に基づいてなされる話には説得力がない。

もっと有り体に言うと、交渉仕事はそういうのが得意な人に頼んでくれやと思う。人手が足りないのはわかるのである程度は協力するけどさ。

スキルポートフォリオ

人手の足りなさに連なる別の主張として、交渉も得意になった方が仕事の幅が広がるし問題解決能力も高まるよ、という反論もある。この主張の正しさはケースバイケースだし、バランスでもある。

交渉、に限らず自分の得意なこと以外が極端に苦手というのは、要するに問題解決の手札が少ないということで、そこには不利がある。仕事にかぎらずなんらかの達成が求められている世界では、原則として達成を重ねるほど評価され、立場がよくなる。結果としてやりたいことがやりやすくなる。なので手札を増やして達成のスループットを増やすのには意味がある。

要するにスキル・アップしてキャリア・アップしましょうね、という話。

一方で、目の前の問題解決に求められているスキルと自分のキャリアに必要だと自分が感じているスキルが一致しないこともよくある。交渉上手になれっていうけど別にそういう組織横断的な仕事をやりたいわけじゃないんで・・・みたいな。目の前の問題解決に最適化した結果マネージャになる事例はよく観測される。それを望んでいるケースもあるので必ずしも悪い話ではないが、それを特段望んでいない身に交渉がんばる気などはない。

そうはいっても、自分のやりたいことと世間の需要が乖離すると金を稼ぐのは難しくなる。そして目の前の問題は、世間の需要を何らかの形で近似している。目の前の仕事の求めを自分の思惑と違うからを退ける不安は強い。

けれどけれど、真の意味で世の中の需要を突き詰めるならプログラマとかやってないで Wall Street の trader なり外資系 consultant なりになった方がよいのでは?プログラマたるもの Knuth 目指して山に籠もって Deep Work でしょう?

これは極論だけれど、スキルポートフォリオを根拠に交渉 $ の強化を求める上司の望みもまたノイズ溢れる市場からのシグナルに過ぎない。そんな視座は失わないほうが良いと思う。目先の仕事が超稼げるので上司の願いを叶えるのは重要、というケースもありうるが・・・(ドラマの中の Wall Street や Hollywood にみられるステレオタイプ。)

などこれといってはっきりした指針があるわけでもないので、問題解決の手段は人の話は聞きつつも最後は自分の胸に聞いて決めましょうという話。

 

Diplomatic Coding

|

政治的ということばは曖昧すぎるので嫌いだが、外交的なコードってあるよな。WebKit の仕事をしていたころは毎日そんなのばかりだった。また最近書く羽目になってうんざり。

外交的なコードとは他人の主張にあわせて書くコードのことである。他人のコードにあわせる、では無い点に注意。他人の書いたダサい API に自分にコードを合わせるのは、ここでは外交的に数えない。それを言い出すと一人で閉じないすべてのコードが外交的になってしまう。コードレベルの enforcement ではなく、ミーティングとかで書くことが決まってしまった望ましくないコードを指すことにしておく。

外交的なコードにはいくつかの段階がある。

一番ダメージが少ない外交的コーディングは他人のために自分がコードを書いてあげる、仕事をひきとるケース。仕事は増えるが後腐れはない。

一番ダメージがでかいのは他人の意見によってソフトウェアのデザインが歪められるケース。なおここでいう他人は該当ソフトウェアを書いているチームの外の人という意味で、チームメイトは含まない。チームメイトとデザインの方針が合わず好みのコードを書けないこともあるが、外交よりチームワークの範疇。

他人の「都合」によってコードがダサくなるのは外交的な問題か?他人の都合、たとえばレガシーコードとのつなぎ込み、は解くべき問題の一部だと思うので、外交には数えたくない。外交的コードとは、よりよい解決策があると自分は考えているのに、相手の顔をたてるなどソフトウェアの外の事情で自分のアイデアをひっこめて他人の主張を受け入れるもの。

この間くらいにあるのが、相手の意見によって優先度が変わるケース。それ次のリリースでいいじゃんという作業を、いや早くやるべきなぜなら俺がそう思うから、みたいに押し付けられる。締め切りまで時間がないので corner cutting がおこり、デザインが歪む。


外交的コーディングの必要性は外交それ自体とおなじくはっきりしない: 外交というものの必要性は認めるが、個々の外交的アクションを評価するのは難しい。

外交的コーディングには仕事が増える以外に固有の問題がある。

まずソフトウェアデザインの autonomy が奪われる。Autonomy は人々の労働意欲の核の一つである(って Daniel Pink が言ってた・・・と書くと急に説得力なくなる。)要するに仕事のやり方を指図されるのはムカつく。デザイン全体の integrity も損なわれる。

つぎ。外交的コーディングは rationale を記録するのが難しい。「あのめんどくさい人のいうことに従ったのだよ」なんて design doc や commit log  に書けないじゃん。結果として説得力のないデザインだけが残り、後世の人々は puzzled する。そして書いた人を blame する。俺のせいじゃねえーーと言い返したいが証拠がない。

外交的介入をうけたのがデザインそのものではなく優先度だと事態は殊更不透明になる。たしかにそのデザインを考えたのは我々だが締め切りが無茶だったのだよ・・・みたいな主張は、外交的に作られた一時的で人工的な締め切りの存在を明らかにしてしまうので大っぴらに語りにくく、風化しがち。俺のせいじゃねえーーー!

同様の理由により、外交的コーディングは議論するのも難しい。外交的妥協をしたマネージャはしばしば下々のプログラマから意思決定に噛みつかれる。「偉い人を宥めるためなのだよ」と開き直れるかはマネージャの性格次第でもあるが、外交の性質上単純な honesty が望ましいとも限らない。無理に取り繕って株を下げがち。外交に負けて株が下がるのは仕方ないとして、「外交に弱い」ではなく「話がわからん」とラベルをつけられてしまうマネージャは気の毒。

外交的譲歩は良くないことに思えてくるが、ならばとタカ派になるとそれはそれでどこかの大統領みたいになってしまう。よりよい提案は: きわどい外交的立場にならないよう普段から気をつけましょう。より長期的には外交的露出の少ない立場につきましょう。

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 する気がおきない、というのは避けたい。

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

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 にしたって主要な情報源はオンラインにある。

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

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


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

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

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

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

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

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 年前から使うべき。

無印のプログラマという夢

|

単なる「プログラマ」でありたいと願っていたが、その夢が破れつつあると感じる。今の自分はモバイル・プログラマである。今から他のものになるのはだいぶ大変。

気のせいかもしれないが、世の中からも単なる「プログラマ」は姿を消しつつあるように見える。だいたいもうちょっと限定がついている。Frontend engineer, backend engineer, SRE, data scientist とか、いわゆるインターネット企業の中だけでもこれだけある。自分が学生だった 15-20 年前にこうした細分化はなかった気がする。もちろんゲームとエンタープライズのような業種の壁はあったけれど、それ以上は細分化していなかったような。

自分の視野が狭かっただけで、昔からそれなりに色々あった可能性はある。逆に、自分と同年代の知り合いにもたとえばガラケー向け組み込みから現代的なモバイル、ウェブ、今はクラウドバックエンドと河岸を変え続けている人もいる。だから職能の細分化にしろ分野の壁にしろ必ずしも一般化できる普遍的なものではない、かもしれない。


と前置きした上で、細分化が実際におきているとしたらそれはなぜだろう。情報産業が成熟したからと考えるのが自然に思える。成熟に伴い給料は上がり世間から認知もされた。それと引き換えに専門化を求められた。

成熟の程度は産業の中でもばらつきがある。自分は大企業勤務なので細分化はより顕著に感じる。ここには自分がどうやってもたどり着けない専門家がたくさんいる。一方で比較的成熟の浅い、若くて小さい企業ではより広い職能が求められる。産業全体の成熟と産業の内側での spectrum を区別するのは自分には難しい。


特に細分化は進んでいないとしたら自分の感じているものはなんだろう。たぶん老化、よくいえば成熟、なのかもしれない。一人前に給料をもらうための期待値が昔より高くなった、これが成熟。一人前であるための能力を新たに獲得するのが難しくなった。これが老化。期待値が高いのは obligation のためでもあるから、人生の都合という面もある。

産業全体としての職能の細分化と自分の立場を区別するのもやはり難しいし、区別することに大きな意義も感じない。自分の前に職能の壁があるのはどのみち事実だから。

有り余る能力があれば、あるいは経済的な自由度が高ければ、職能を超えて「無印のプログラマ」、ジェネラリストでいることができる。自分にはそれがない。

専門家になるというアイデアを受け入れることはできないのか。自分は既に一度ウェブブラウザの専門家になるのに失敗し痛手を受けている。そして専門にしようと期待していた Android を好きになれず、再び失敗している。専門家のなりそこないである自分という事実を認めたくないから無印のプログラマというファンタジーに逃げ込もうとしている面はある。


ただ純粋な逃避でもないと思う。テクノロジは移り変わる。時代にあわせて自分の専門を切り替えていかないとやがて行き詰まる恐れがある。無印のプログラマは、素朴なジェネラリスト信仰ではなく専門を乗り換えられる実力への aspiration でもある。

そう考えると、職能の壁と感じているものは時代の流れの速さに過ぎず、自分の不安は時代から取り残される恐怖なのだろうか。そんな気がしてきた。職能の細分化とかいうのは年寄りの愚痴だったか。腑に落ちた。

伝統的サラリーマンの謎

|

そのむかし、テレビドラマなどにでてくる「サラリーマン」たちの仕事がなんなのか長らく謎だった。上司が「やっておいてね」とデスクの上にドーンと置いていく紙束とか。紙束を「やる」とは何なのか。

しかし自分が日頃電子的にやっている作業が仮に紙ベースだと考えるとだいぶ腑に落ちる: メールを読む/書く。バグをたらい回す。コードレビュー。Design doc.

上司や TPM につつかれるバグのトリアージとか、まさにドーンと置いて行かれた電子紙の束。

一方で自分はバグをたらい回すとか design doc とかいまのチームに来るまでそんなにやっていなかったので、これらが本質的な仕事とも思わない - 組織の bureaucracy に過ぎない。つまりむかし目にした fictional なサラリーマンたちは紙束という形の官僚的重みにもがいていたのだな。

それらサラリーマンの仕事がなんだったのかはわからないままだが、それはある意味 by design なのだろう。様々なホワイトカラーの仕事があるなかで大多数の共感できる「仕事」がオーバーヘッドなペーパーワークだった。

という事実に気づき、ますますペーパーワークが嫌いになった。やだやだ。

嫌いなものに美点を見出す

|

自分は Twitter や Facebook などのソーシャルメディアが好きではないが、これらが発明した良いアイデアには目を向けたほうが良いと最近は心を改めた。

Twitter の良さ: 文章は可能なら短い方が良いと示したこと。そして短い文章を映えさせるためにコンテンツ本体以外の装飾を取り払ったこと。

Twitter 以前は、文章は長い方がエラかった。これは単純化しすぎた主張だが、長い文章を書いたり読んだりする方が偉い風潮は少なくとも一部にはあった。今やオンラインでそういう立場を取る人はマイノリティになった。これは Twitter だけの功績ではないかもしれないけれど、果たした役割は大きいと思う。

長い文章はしばしば読むよりも書くほうがラクなので、短い文章は書き手の負担が大きい。コンテンツが希少な時代は書き手に権威があったので長文を書き散らすことができたが、コンテンツ過剰な現代は書き手がエラそうにせずがんばって短い文章を書くのは正しい。

ブログなど Twitter 以前のメディアで短い文章が輝くのは難しかった。それはタイトルやら広告やらコメントやらメタデータやら、コンテンツのまわりの装飾が邪魔だったからだと思う。Twitter はそれを取り払い、かつ複数の tweet をタイムラインという単位にパッケージすることで一つ一つの短い文章を読む敷居を下げた。

短さの強制やコンテンツの混合には明らかな欠点もある。けれど短さの価値をシステムやデザインの力で示したのは偉い。

Facebook の良さ: 子供の写真を家族や友達にシェアする簡単な方法を作ったこと。

Twitter と違って自分は Facebook にサービス特有の良さを見出していない。でも数あるソーシャルメディアの中でちゃんと人を集めて動き続けたのはエラかった。知り合いのオンライン至上主義者の中には子供写真のシェアを毛嫌いする人もいるし、行き過ぎを嘆く人もいる。けれど自分はそこにしか FB の価値を感じていない。

GitHub の良さ。

GitHub は "ソーシャル・コーディング" によってオープンソースの敷居を下げ人気を博したが、ソーシャル部分の行き過ぎによる弊害は出始めているし、ソーシャルメディアと同じく問題への反発は少しずつ目立ち始めるだろう。

がそれはさておき GitHub にはソーシャルとは直接関係ないコードホスティングやバグトラッカーとしての出来の良さもあり、その美点は讃えたい。

ひとつめはコードブラウザ上で README.md を index.html として表示するようにしたこと。これによってソフトウェア開発における documentation の問題の半分くらいは解決したんじゃないか。

2つめは issue tracker や commit message で Markdown を使えるようにしたこと。バグレポートはともかく issue tracker でタスク管理をしようと思うと計画なり設計なりを書き出して議論したくなるが、GitHub でない世界すなわち職場ではいちいち Google Docs とかに書く羽目になる。

Issue にしろ comit log にしろ README にしろ、主題の近くに文書を置ける効能は大きい。Github 独自の Markdown 拡張にある checkbox などを見るにつけ、Living document としてのこうしたテキスト群の力をわかってるなと感心する。

ある製品の発明したアイデアを製品自体から切り離して考えると、そうした製品の外でもアイデアを再現できるかもしれない。自分の fragments は Twitter のもつ短文的な良さをブログに持ってこれないかという試みだし、仕事でもディレクトリ単位で README を書いたり bug tracker の文章部分を詳しく書いたり書き換えてアップデートしたり GitHub ぽく振る舞うことで Google Docs への依存を減らそうとしている。こういう「移植作業」は滑稽だけれど、なにも無いよりは良い。

高速化日記 (1) - Flow Visualization

|

ベンチマークの自動化ばかりやっていたら、そろそろリリースも近いことだし自動化は適当に切り上げて速くしろという指令を受ける。

自分が見ているレイテンシの指標のうち重要とされてているものは2つある。A, B と呼ぼう。ベンチマーク自動化で B の計測が自分の持ち物になったのが先々週くらい。去年はもっぱら A ばかり見て B は無視していたら、案の定値は悪い。

Android Q からようやく Systrace の Trace#beginAsyncSection() がアプリからも使えるようになったので、とりあえずこれらの指標を annotate してみると、指標 B の遅さは明らかに何かが間違っている。コードを睨んでつついて原因を特定、修正を試作してあるべき速さになることがわかったので真面目に書き直してレビューにだす。ここまでで一日。こんなにさっくり直るひどい性能バグを放置しといてすまなかった・・・と反省。

このエピソードからわかる、知っておくべき性能改善の常識ふたつ:

ひとつめ。なにもしてない指標は遅い。指標 B は重要といいつつ自分に限らず誰も何もしていなかった。結果としてあっさり直る数百ミリ秒の遅延がたぶん一年くらいは放置されていた。「気をつけてコードを書く」ではコードは速くならない。速くするには時間と労力をかけて測って睨んでつきとめないとダメだし、遅くしないためには労力をかけて計測を自動化し監視しないとだめ。あたりまえ。

逆にいうとなにもしていない指標を速くするのは簡単である。なぜなら自明な遅さが放置されているから。組織が十分にボンクラなら、計測のインフラを作らず誰かが遅くしたコードを定期的に直し続けるだけで雇用を維持できる。しかし幸い自分の勤務先はそこまで無力ではないのだった。

ふたつめ。可視化は重要である。Trace#beginAsyncSection() は要するにスレッドやコールスタックをまたいだ区間を Systrace 上でマークするための API。同じものは昔から Chrome にあるし、 Android platform の中にもある。しかしなぜかアプリからは使えるようになっていなかった。同じ指標をログに書き出して Systrace と照らし合わせれば理論上は同じ情報量があるし、実際自分はそうやって指標を睨んできた。が、これが正しく可視化されると暗闇に突然明かりがついたような解像度をもち見逃していた問題が次々と明らかになる。

たぶん自分は Q 以前もなんとかして Systrace に out of band の指標をつっこんで可視化する方法を用意すべきだった。しかしそうしたツールの改善に労を割かなかった。よくなかったね。目先のプレッシャーがありすぎるせいなわけだが・・・。

なお Chrome にあって Android にない重要な可視化はもう一つある。それは IPC の呼び出しを追跡できる flow event. Android の Binder なんて Chrome IPC よりよっぽどヘビーに使われているし複雑、しかも Systrace は既に必要な情報は全部もっている。にもかかわらず可視化されていないのはひどい話なのだが、Android がひどいという事実に特に驚きはない・・・と書いていてさすがに自分が見逃してるだけな気もしてきた。あとで探し直そう・・・。

追記

入っていた!がバグだらけで使い物にならん。Sigh... OS 側がトラックしやすい annotation をつけておいてやればいいのだが、そうなってないせいで guess work が発生してダメなのだろう。やれやれ。

Letters

|

文章を公開する方法を見直し、以下のような感じにしようと考えている。

  • 長めの手紙と、短い断片に分ける。
  • 長めの手紙は、それなりに読めるものを、ある程度丁寧に書く。長めといっても、別にすごく長く書きたいわけではない。あまりにゴミなものは書かないというだけで。
  • 短い断片は、日付ごとの箇条書きを一週間単位でまとめる。これは要するに tweet まとめみたいなもの。読み物としての価値はあまりなさそうだが、友人などに「生きてますよ」という役にはたてばいいかないいかな、くらい。

これらを書き溜め、なんらかの形でまとめて公開する。たぶん年末に、HTML 生成ツールみたいのでコンパイルしてどこかにアップロードするかんじ。それとは別に、一部の友達などには草稿をメールで送りつける。形態としてはいわゆる newsletter みたいだけれど、どちらかというとほんとにただの手紙というか letter というほうが気分としては近い。


なぜこんなめんどくさいことをするのか。Blog と Twitter でもやればいいのではという指摘はもっともだけれども、自分はインターネット中毒をこじらせてしまいひと目のあるところにリアルタイムで書いたものを公開すると精神衛生を損ねてしまう。一方でやはりインターネット中毒をこじらせてしまったので書いたものをオンラインに置かないのはそれはそれで落ち着かない。

折衷案として、二年くらい日々なんとなく書き溜めたプライベートなブログを年に一回公開する、ということをしていた (2016, 2017.) この方法は悪くなかったが、一方でいくつか問題もあった。

  • 若干さびしい。ブログというものが本来もっていた会話としての性質が失われて、完全に独り言になってしまった。
  • どうせ読まれないという気楽さから、文章がどんどん雑になっていった。発言が乱暴になるという意味ではく、単に読みにくいとか、無駄に長いとか。文章を読み書きするのが好きな身として、日本語が乱暴になってしまうのはやや悲しい。
  • 一方で、誰かに読まれるという圧力から考えていることを単に箇条書きでダンプする書き方はできず、本来は掃き出しておきたい half baked な考え事が頭の中に滞りがちでストレスになった。

世の中的には、会話は雑に Twitter でやり、丁寧な文章は Blog に書き、考え事のダンプは Evernote などノートアプリにやるのが定石だとは思う。ただ自分は色々なものをこじらせた結果これらができないので、やや定番から外れた方法をとっている。他人に勧めはしないにせよ悪い方法というほどでもない、という話を書きかけたけれど不毛なのでやめます。

I Don't Like The Focus

|

いま仕事はベンチマークの自動化をやっているのだが、リリースが近づくにつれ自動化は誰か得意な人にまかせて速くするのもやってくれよ、というプレッシャーをかけられている。むー。

自動化のインフラを作ってくれた人はたしかに自分より自動化は得意だと思うけれども、ベンチマーク書くのは自分にやらせてほしいのだよなあ。これはチームにとっての利点と自己都合、それぞれ別の動機がある。

チームにとっての利点は、要するに自分の方が良いベンチマークを書けるというか、結局速くする仕事をやるのは自分なのだからユーザである自分の都合を完全に理解している人間すなわち自分が書く方が的をいたものができる、というもの。同僚信用してないの、といわれると言葉をにごしたくなるが、自分の要望や優先度のコミュニケーションコストとか高いのだよ。そしてベンチマークの実装は単純仕事だけでもなく探索的な側面もあり、つまりベンチマークを書く中で高速化のアイデアを思いついたり、逆に問題点を発見したり、自明でない箇所の測定をする方法を見出したりするのですよ。

自己都合としては、性能の専門家を目指すにあたり自分は良いベンチマークを書けるようになりたいから、訓練したいのだよね。安定したベンチマークはどうしたら書けるのか。トラブルシュートのコツ。現実的かつ安定した負荷のかけ方などなど、ベンチマーク書くの全然自明じゃないじゃん。それができたら専門家として一段レベルアップできると思うのだよね。バグレポート付属の systrace という断片的な情報を元にカンで直すのではなく、ちゃんと再現できる環境を作って、測定して、それを速くする。そうありたいでしょ?

それを締め切りがあるからとかいってできることだけやれみたいな圧力をかけられるのはほんといや。おっさんの成長にも配慮してくれ!定時で帰るからって差別すんな!

この話にはいくつかの含意がある。すなわち

  • 疎な締め切りはクソである(今年度百回目につき新しい情報なし)
  • 自己都合の仕事についてはやっぱちょっと時間外労働したほうがいいのでは(いやです)
  • プレッシャーをうけても適度にしらばっくれるのが大切である

まあ基本的には自分の仕事が遅いせいなので、何らかの形で責任は果たします・・・。

追記 (2019-12-01)

その後性能インフラチームはでかくなり、仕事を横取りするのもどうかと身を引いて高速化業に専念した。しかし結果といてずっと気になっていた指標をベンチマークに追加できず、当然のように regress したのだった。

Spring

|

気分転換にダウンタウンまで30分ほど散歩してコーヒー。今日はずいぶん天気がいい。そしてあたたかい。カルフォルニア、ようやく雨季もおわりそうな雰囲気。天気がいいとそれだけで幸せな気持ちになる。

自転車があったら海岸沿いをサイクリングでもしたいところだけれど、盗まれてからはや数年。ひとりでドライブもつまらないし、近所の公園で昼寝でもしようかなあ。たまに公園にピクニックマットをしいて横になりながらスマホをいじったりラップトップを叩いたりしている人をみるけれど、割と気持ちはわかるね。家より公園の方が気分いい。

ここから半年くらいはいい天気。子供が自在にあるけるようになって初めての夏、ちょっと楽しみだね。去年はまだちょっとよちよちだったからな。

Community Exposure

|

もうちょっとベイエリア日本人コミュニティへの露出を増やしたほうがいいよな、と思いつつ何もせず何年も経ってしまった。

露出を増やすというのは自分を認知してもらうという面もあるが、それ以上に自分自身の地元密着意識を高めたい。そうしないと、この地に留まろうという意欲を維持しづらい気がする。

生活費の高さや自分の被雇用能力の低さなどから、これらが相対的にラクな東京に帰ることを考えがちだが、いざ帰省で東京を歩いてみると彼の地への適応も段々と失われていることに気づく。人口密度、情報密度、殺伐感、気候、どれも厳しくてストレスを感じてしまう。ひとつには、自分の東京への適応は独身者としてのそれなので、妻子ありでの東京には居場所を作れてないからだろうか。なんともいえないアウェイ感。

ベイエリアに適応できていないのに、東京への適応が失われている。英語ができるようになったわけでもないのに日本語が不自由になっていくのに似たどっちつかずさ。

少なくとも子供が就学するまであと 4 年くらいはこのへんにいたい所存だし、その先もっといる可能性もまあまああるわけなので、こっちがわへの適応を高めていかないといけない気がしている。下手に東京に目を向けると self fulfilling prophecy になってしまう不安がある。

ちなみになんで「日本人」コミュニティかというと、世間づきあいができるほど英語できないからですね。言語バリアで近所コミュニティに入れない。アパート住んでると痛感。


しかしまあ、どうしたもんかなあ。

とりあえず Facebook になんかかくか・・・と考えてみる。ベイエリアの知り合いは FB での活発度が高い気がするので。Twitter にもいるのかもしれないが・・・。

しかしいくつかのレイヤで気乗りしない。まずあまり書くことがない。当たり障りのない家族の話はゆこっぷ(おくさん)が既にいいかんじで書いてくれている。家での活動はほぼすべて家族が関与するため、当たり障りのない自分の話というのは、特に存在しない。

当たり障りのあること。書きたくない。まわりのベイエリア住人、どうにも opinionated な人が多く、しかも思想的にいまいち自分と互換性がないので不愉快な思いをしがち。これはフェアな言い分ではなく、FB のようなソーシャルメディアの上でアクティブな人という bias があるゆえにこうした問題がおこるのだが、FB になんか書く上での本質的なめんどくささなのは事実。一時期はめんどくさい人を除外していけばいいかとも思っていたが、それやりだすとキリがないのだよな。他人とのめんどくささは community に対する exposure すなわち人付き合いから切り離せない。だからこそ当たり障りのない話が重要なわけで。

そもそもソーシャルメディアとか人の醜さを暴くばかりだしやりたくないというのもある。

いま自分は一部の知人の奥さんを除くすべての friend を unfollow している。(これらのおくさんたちは当たり障りのない子供の写真をシェアしてくれるので安心して follow できる。家族写真シェアメディアとしての FB を自分は高く評価している。) それ以外にベイエリアな人たちを follow して、そうした人々の発言に自分を expose するところから始めるというのはどうか・・・と思うが、自分のソーシャルメディア嫌いに加えて opinionated people の発言を読む息苦しさを想像するとまったく気が乗らない。


書いていて思うが自分はまったく非コミュだよなあ。インターネットという空間は、それでも一定程度 like-minded な友人を作ることを可能にしてくれたわけだが、自分がいまやろうとしていることは地理的な proximity に基づいたコミュニティになんとか参加しようという話なわけで、苦手さが際立つ。くわえてベイエリア、なんというかエリートでリア充な人々が多くてあまりに価値観の互換性がない。自分も理論上は大企業勤務のエリートで週末は妻子と外出しているリア充なはずだが、精神性が現実と噛み合っていない。

そういう細部をさておいて一歩さがると、外国人としての寂しさと中年の寂しさが一度に来たという話なのかもしれない。何らかの形で comfort zone を踏み出す必要があるのだろう。あるいは自分の生きづらさを、というと大げさだけれども性格を、受け入れる必要があろう。

The First Regression

|

ベンチマーク自動化を強化してから休暇に入り、明日からの仕事に向けふとダッシュボードを眺めたところ・・・オイ遅くなってんぞ!しかしダッシュボードのおかげで簡単に怪しい変更を特定できたのでさっそくバグをファイル。これだよこれ!リグレッション警察参上!どんどん取り締まってくぞ!こう明らかにダメっぽい変更を特定できたので成果アピール材料としては上出来であることよ。hotlist つくってコレクションしよう。

本来なら P1 でリバートね、とかいいたいのだがもうちょっと実績が必要。あと自動でアラートあげたいけど、もうちょっと数字を落ち着けないと厳しいな。

Home Alone 2019 (1)

|

一足先に東京から帰ってきたので妻子不在期間すなわち Home Alone 2019 の計画、というほど大げさではないけれど何して過ごすか考える。

去年の記録をみなおすと... (1, 2, 3, 4, 5, 6) 長い病床生活および共働きから復帰したばかりで暇にオロオロしているうちにおわっているな。1. ソーシャルメディアおよびネットをしすぎ, 2. 家事や炊事などのリズムを掴み損ねている 3. プロジェクトを思いつかない 4. 考え事に時間を使っている, といったところだろうか。

今年は日頃から早起きするようになったりある程度考え事をしたりコードを書いたりしているので、去年よりはオロオロせず過ごせる気がする。

大まかな方針としては:

  • 平日は早寝をし、朝に活動を集中する。夜の寝る前はインターネッツより本を読むとよいのではなかろうか。インターネッツにしても日記ドリブンで読むものを気にする。
  • 朝はまず podcast のノルマを済ませ、そのあとコードを書く。
  • コードは今やってるものの続きをやる。
  • 週末は、コード書きおよび Podcast 編集をメインに置きつつ気晴らしの外出や調理を挟む。
  • 家事
    • 家事リストを書いて貼っておく
    • 献立計画は一週間単位(か、もうちょっと長期)で立てる。

といったかんじでやればよいだろうか。リスク要因としては去年より一段階仕事が忙しいことだが・・・。うっかり残業しないよう昼間からせっせと働くべし。


  • 一回くらいドライブしてもいい気がする
    • Mono Lake までドライブとかどうかなーとおもったがヨセミテまだ開いてないね・・・。
    • Sacrament くらいならどうか。
  • 一回くらい独身勢と社交してもよいのではなかろうか。なかなか普段できないからね。

Beyond BOLD

|

昔々 BOLD internship という種類のインターンをホストしたしたことがあった。これはマイノリティを積極的に採用してみるインターンシップ、みたいなもので、東京だとそれは概ね女性を採用するということを意味した。

対象が学部生だったのでバーはちょい低め。実際コード書き能力はたいしたことなく(自分の学生時代のことを棚上げした発言)、成果もさほどではなかった。とはいえ翌年ふつうのインターンで帰ってくる人も多く、たまに LinkedIn に通知がくるとかで進路を見ると、大学院に進んだあと今をときめく感じのかっこいい会社でエンジニアしていたりする。自分がホストしていた学生だけでなく、同じ時期に同じ BOLD で採用された別の人も似た感じで活躍してるもよう。すごい。

こういうのを見ると、ソフトウェア開発キャリアにみられるジェンダーの偏りはまだ環境側で改善できることは色々あるなと思う。この人々の技術力がインターン当時たいしたことなかったのは事実で、いま活躍しているということはそのあと頑張った、ということであろう。(実際、ブログとかをみるとえらい頑張ってる様子が伺えるケースもあった。ストーカーじゃないよソーシャルメディアかなにかで流れてきただけだよ・・・。)

学生は、たとえば大学院二年間ガチっとがんばればふつうに一人前以上の実力になれるわけだから驚くべきことではない。しかし「がんばる気になる」という部分で女性の足を引っ張る環境圧があることはジェンダーの議論においてよく知られている。あのインターンシップ経験がそうした環境圧を押し切る助けになったのか、当人たちがもともとガッツある系だったのかはわからないが、いずれにせよすごいなと思う。

一つ大きな反省があるとすれば、自分はだいぶバイアスがあったね。担当したインターンはふつうにおしゃれ女子大生(※差別用語)で、採用してみたはいいがほんとコード書くんかいな・・・みたいな気分は自分の中にゼロではなかった気がする。その気分がバイアスであることはその時点でもわかっていたので補正するよう気にしていたが、十分だったとは思えない。

今もしおなじような立場のインターンを採用したら、自分は「こいつは 5 年後に一定の確率で景気のいいウェブ企業とかのソフトウェアエンジニアとして活躍している」と心の底から信じることができる。その高い期待値を持って接することができる、気がする。

まあ件のインターンさんは自分の雑ホストだったにもかかわらず活躍するに至ったのだから、ガッツある系だったのだろうな。

Quora

|

向井さんがやっているのでみてみたが・・・つらい。なんというか、全国ドヤ顔選手権みたいな辛さがある。こんなんだったっけ Quora...  日本語版が辛いだけかなとおもって英語もみてみたが似たような辛さがあり、かつ謎のベイエリアゴシップみたいのが追加されて余計辛い感じになっていた。

そもそも自分はなぜ Quora にアカウントを持っていたのか振り返って見るに、たぶん自分にもかつてはベイエリアゴシップが楽しい時期があったんだろうな。今はうんざりするばかりだが。別に Quora という存在を批判したいわけではなく、自分の居場所ではないという話。アカウントを削除した。やれやれ。

Accessible Podcast

|

視覚障害者です、という人から Podcast 良かったよと感想をもらった。図で説明されがちな話題を言葉で説明しているのがよい、という。

なるほどねえ。

自分は特にそうした配慮によって話題を選んでいるわけではないので、そういう役に立ち方をするのは意外で、ありがたいことだが若干申し訳なくもなった。つまり、特にそういう人々のことを気にしてなかったから。

言葉だけで、特に声だけで、伝えるためのテクニックというのはきっと存在して、ラジオの人とかはそういうのをどこかで学ぶのだろうなあ。自分はなにも気にしていない。それには気まずい面もあるが、一方で low hanging fruits がありそうな気もする。なんかちょっと調べてみようかなあ。

少し前から話の構成は準備するようにしたわけだが、音声メディア固有のテクニックというのはどういうのがあるんだろうね。ちょっとぐぐったくらいではわからない・・・。あと自分たちの Podcast は編集とかはそんなに頑張れないので、たとえば音声クリップを挟む、とかは厳しい。自分たちの話の仕方の範囲でできる工夫を探したい。

 

Urge Of Side Projects At Work

|

仕事を真面目にやり、社内 Python インフラの流儀がちょっとづつわかってきた結果、色々と自動化したりちょっとした Web UI をつけたりしたいものが増えてきた。しかしまったく手を出す余裕がない。フラストレーション大。

皮肉なことだが、むかし相対的に(おそらく絶対的にも)ヒマだった時期は、仕事のツールとかでなにか本業以外に書くコードないかなーと探していたものだった。しかしあまりなかった。

一つには仕事がたいしたことなかったから。そして、プロジェクトの他の人もそれなりにヒマだったので草の根ツールがいっぱい書かれていたからでもある。

プロジェクトに繁閑の波があるのは仕方ないが、年に一回出荷するモデルだと閑が足りない。デバイスや OS を出した後はすぐ次のバージョンの計画が始まるし、それ以前になんだかんだで火消しがある。まったく余裕がない。

たとえば自分はいまある種の automation をやっている。こうしたインフラっぽい仕事は、アプリのリリースとは理論的にはまったく紐付いていない。しかしチームのリリースプロセスの都合でアプリのリリースにあわせてタスクをトリアージしたりしないといけない。無駄なストレスがある。そして現実問題、皆がリリースに向けて作業している世界だとインフラだけ timeless とはいかないよね。そのインフラの受益者がリリースに縛られているから。


書いていて改めて思うに、自分はこの「特定のリリースに向けてチーム一丸となって進む」というモデルが根本的に間違っている、というと強すぎるけれども、嫌いなのだな。

各プロジェクトが自分のサイクルで仕事を進める。製品は時を超えた存在で、各リリースは単なる器。この方がモダンだし、色々都合良いことが知られている。その行き着いた先が continuous delivery なわけだ。モバイルの時代になって事情は少し変化したけれども、やっぱり月に一回くらいは出ていってくれないと厳しくね?

しかしこれは年に一回デバイスが出ていく世界とは根本的に相性が悪い。自分はついデバイスが出ていく、と書いてしまうけれども、たぶん感覚的には「出ていく」ではなく「出す」なのだよな。この違いが価値観のギャップを伝えている。勝手に起こるリリースと苦難の果てのリリース。

まあ OS とかデバイスが苦しむのは仕方ないのかもしれないが、上に乗ってるアプリはもうちょっと労なく出て行かせてほしい。しかし今のチームの製品は表面的には APK だけど限りなくデバイスの一機能であってアプリってかんじじゃないね。

この話は過去に何度も書いている気がするけれども、自分の主要な painpoint なのでやむなし。

Stressed Out

|

仕事のストレスの高まりがしんどい。まだ電話機出るまで半年以上(推定)あるはずなのだが、こんなんでこのシーズン乗り切れるのだろうか。

はーもうつらい・・・のでどこかゆるっとしたチームに逃げだしたい気持ちもある一方で、ストレスがあっても多少は勢いのあるチームにいた方が職業人としての精神衛生にはいい気もする。などと考えるとあと 2 シーズンくらいはやった方が良いだろうなあ。ストレスとうまくつきあっていく方法を考えなければ。九時五時勤務のストレスとは何かと思うかもしれないけれども、評価減とそれにともなう収入減への懸念です。

それにしても、かかってくる各種ストレスがエンジニアリング・文化的によくない圧として働いている気がして、これはモバイル部門全体の空気の悪さを説明できる気がぼんやりする。

たとえば、バグの相手をする最適解はどう考えても(直すではなく)他人にたらい回しする、なわけだが、たらい回しされる側になると生産性を損われを実感する。

あとは何でも一年単位で成果にしないといけないせいでインクリメンタルかつ実験的に進めるのも複数年の長期計画も難しい。たぶん何かが間違っている。

表面的に色々間違っているものを指摘はできるが、もっと根深い何かを感じてしまう。たぶんこのストレスが機能していた時期が(最初の頃に)あって、結果として文化に根付いてしまったのだろうなあ。しかしこれ以上深く考えるのは精神衛生上よくないのでここまで。

問題を思考停止によってやり過ごす量が増えていて、これは色々な判断能力を奪っていて危険だなと思う。しかしどうにもならない。

Snippet Train At Work

|

課外活動ではじめたはいいが脱落してしまった Snippet Train, 課外活動はともかく仕事ではこれに類する何かは欲しいなあ、と思っていたところ似たような要望を聴いたのでちょっと紹介文書を書いた上ではじめてみた。一ヶ月くらいたったけれどそこそこ続いている。参加者はチームの半数は超えており、安定した感じはあるので自分がサボらなければ続くであろう。そして自分は「スレッドを始める」という責務を持っているので続ける気がする。

投稿を nudge するメールは、自動化できなくもないけどなんとなく人間から届く方がいい気がしている。人々は機械からのメールを無視するのに慣れすぎているので。

Snippet train, チームに欲しいとは思っていたが言い出すほどでもないと感じていた。ただ timezone  の違う国にチームができて分散が進み、チームの中でも inter-site のコミュニケーションをなんとかした方がいいという機運が高まったため、それに便乗できた。

一週目のスレッドも実は難産で、「メールのスレッドに返信する形で投稿する」というコンセプトが理解されず自分の投げた一通目からあとが続かなかった。しかしある同僚が「俺も snippet 投稿したいんだけどうすればいいの?」と訪ねてきたおかげで、デスクまでいって「そのメールに返信すんだよ!」と横で背中を押すことができ、仕組みを demonstrate できた。そのあとはわりかしスムーズに続いた。新しいプロセスを始めるに当たってはサクラが必要という話。この TED Talk そのまんまですが・・・。

西海岸タイムゾーンではいまだに weekly standup meeting をやっている。個人的にはいらないと思っているが、週に 30 分くらいのためにケンカしても仕方ないので参加している。じっさいこのミーティングはそれをきっかけに人々が(ミーティング後に)議論をはじめることに成功している。Snippet Train はそれができてない点で相対的に動機が弱い。

たぶん今は snippets が箇条書きだけで dry すぎるのが問題で、もうちょっと軽く nuance/tone を添えられると議論の種になるなど status updates としての価値も増すと思うのだが、意義を高めるにはまだ iteration が必要そう。自分がチーム内でザコすぎるためいまいち cultural change を drive できないのが若干残念。

Listening Backnumbers

|

Apple のサイトで自分たちの podcast の analytics をみていると、昔の録音を聴いている人が一定数いて興味深いなと思う。過去 60 日の統計、新しいエピソードはだいたい 500-700 listeners のあたりを推移している一方で昔のやつも 30 くらい聴いている人がいる。

自分たちの podcast は時事ネタでもないので昔のやつを聞いても特に問題はないが、一方で世の中他に聴くものいっぱいあるべ・・・という気もする。

が、ここ数日 Exponent の backnumber を聞いている自分を発見して、ああこれかという気分になる。つまり意外と聴きたいものがなくてバックナンバーを聴いてしまうことがある。Exponent なんてもう 5 年くらいやってるのでバックナンバーも豊富。バックナンバーの豊富さだと ATP は更に上なわけだが、今は ATP 聴きたい気分でもないのであった。

理論上は Audible で本をみつけてきて聴く方が有意義だと思うが、本を探す気力も長いものを聴く気力もないときってあるじゃん。あと直前に聞いた audio book にがっかりした記憶が新しいと、本に近づく意欲が下がる面はある。

というわけでサイトのサイドバーにバックナンバーを出すようにした。まあバックアンバー聴くような人はだいたいアプリ使ってるだろうけれど。


2014 年あたりの Exponent を聴くとテックへの風当たりみたいのが全然違って興味深い。このころは暗雲の気配こそあれまだ楽観的だったね。だから引っ越してくる気にもなったわけだけれども。自分が転職した 2010 頃はどんな空気だったのか、2014 年より更に utopian だったはずだが今となってはマジで思い出せない。

あと Exponent, James が co-author した How Will You Measure Your Life の話をしているのも良い。まあメインの著者は Clayton Christensen で James はちょっと手伝っただけだと思うけど、割と好きな本の話を当事者が話すのを聴くとちょっと楽しいね。

 

Link: Antitrust 3: Big Tech : Planet Money : NPR

|

via Antitrust 3: Big Tech : Planet Money : NPR

Planet Money が三回シリーズで Antitrust を扱っていた。その中で紹介されていた論文 Yale Law Journal - Amazon’s Antitrust Paradox, NYTimes で紹介されたのをきっかけにブレイクしたという。自分も antitrust まわりに気をつけるようになったのはこの記事がきっかけだった。論文は 1/3 くらい読んで放置してあるが・・・(長いのだよ。)

別のきっかけは  Exponent の Episode 153 — Black Holes. 上の論文は Amazon の分割を提案しているらしいけれど、このエピソードでは Facebook による競合の買収を問題視している。NPR のエピソードでも同じことを主張する人が登場した。

Tech 大企業はいっぱいあるので、一社が(たとえば倫理的な判断から)買収を遠慮したりすると、別の会社に攫われてしまう。競争がある故にいろいろえげつなくなりがちな面はある気がする、ので法が頑張るのはそんなに悪くなさそう。ちゃんと機能するのかは疑わしいが、やってみて機能したりしなかったりするなかゆらゆらと調整するのが民主主義、法治国家の歴史だとも思う。

そういう法律は大企業だけでなくスタートアップにも影響ありそうだよね。主要な exist path だった買収に暗雲が漂うわけだから。

いずれにせよ Antitrust はもうちょっと色々読むなりして心の準備をしたいかんじ。

Link: Block ads in apps on Android (including video ads) - unlike kinds

via Block ads in apps on Android (including video ads) - unlike kinds

フーンどうやるのかな、とおもってコードを覗こうとしたが GPL3 だったので諦め。周辺情報を総合すると VPN として振る舞うらしい。

これを使えば /etc/hosts の代替品となるのではなかろうか。でも VPN ってことはアプリをぜんぶのパケットが通ってくのかな。それは雑に作ると性能でなそうだが・・・。

そしてなぜか app store でなく f-droid  で配布してるけれど、Ad-blocker は Playstore の規約に触れるのかな。まあ触れてもおかしくないな。自分用なら adb install すればよさそうではある。

サンプルの ToyVPN を見ると・・・ IP packet がストリームとしてやってくるのか。厳しい。一方で VpnService.Builder をみると DNS を指定できる。

なんとなくインプロセスの DNS を実装してそいつが /etc/hosts 的に twitter.com などをブロックし、IP パケットは素通しする、というような実装ができると一番簡単に思えるがどうなのだろうな。素通しは必要なシステムコールを特定すればなんとかなるとして、インプロセスの DNS は手強い・・・。なお ToyVPN は linux の tunneling の仕組みに丸投げする実装になっている。

DNS はインプロセスじゃなくてどっかに自分で立てる、という方向性もありうるか。どのみちそこまでがんばって実装する気にはならないなあ・・・。

ここまで。Android の VPN の API を眺めることができたのでよしとする。


更にスレを読み進めると、Android P はユーザが DNS サーバを上書きできるのか。(Cloudflare の説明) これでやるのが一番簡単そうだなあ。しかし DNS サーバを運用するのみならず DNS-over-TLS をサポートしたやつを使うとか大変そうすぎる・・・。誰かそういうサーバ立ててくれないかなー・・・。

You probably don't need a single-page app | Hacker News

|

via You probably don't need a single-page app | Hacker News

自分も手元に SPA の悪口を書いた draft があるのだが、世間での hate が高まっているところに加えて言うこともないかなと思う。

なお自分は不満は開発者としてではなくユーザとしてのものである。すなわち世のウェブ製品や内製のツールが SPA になったとたん URL が壊れるなど激しくゴミ化する現象が観測され、気に入らないという話。出来の悪いコードというのはいつの世にもあるのだけれど、内製ツールという観点だとダメージの現れ方が厳しいと思う。

この話は長々書いても悪口にしかならないのでやめとこう。

それよりは、出来の悪い SPA はなぜ生まれるのかを考えて見る方がいい気がする。個人的には Web というプラットホームが十分な基盤を提供してないせいだと思う。JS フレームワークの未熟さみたいのはそのうち解決するだろうから。

SPA は、伝統的なウェブにあった URL 単位の "画面" という単位が希薄になりがちである。その昔, URL はユーザにとっては文脈を特定するコンパクトな表現であり、同時にウェブアプリにとっては serving というわかりやすい抽象化の単位であった。つまり URL のわかりやすさはユーザにとっても開発者にとってもある程度有り難みがあった。

ところが SPA になると開発者にとっての URL は単なる負担になる。画面という抽象化の単位に自動的に URL がつかなくなるから。なのでサボって腐ることが増える。ウェブやブラウザという patform は、ウェブプログラマに良い URL をデザインする incentive を用意しないといけない。そうしないとサボられてしまう。

素人の意見としては TurboLinks みたいのをもうちょっと洗練させて標準にすればよいのではないかと思う。つまり、JS のコードやある種のサイトグローバルなデータはインメモリに残しつつ、ページ単位のデータを新しい URL のもとに取得しなおす。ある意味では JS フレームワークの router みたいなもんだが、それを何らかの形でブラウザが提供し、それは JS だけだと実現できない何らかの有り難みがあるとよい。

完全に口から出まかせを続けると、そのためには API から serve される JSON が一級市民にならないといけない。もっというと "JSON のレンダリング" みたいな概念が一級市民として必要に思える。20 年くらい前は XSLT がそれだったわけで、XSLT は概ね失敗したのでたぶん普通にやると失敗するからもっとうまくやらねばならず、自明でないデザイン上の難さがある。Service Worker からもう三歩くらい進めばなんとかならない?だめ?

URL がぶっこわれていてリンクも scrape もできない dashboard  や CRUD UI は心底うんざり。そういうのを作ったやつが悪いのは確かだが、ウェブがしゃきっとしないから治安が悪くなったのも事実だと思うのだよね。


Android だと Activity がプラットホーム提供の画面単位の抽象化単位として機能している。Activity をすっとばした SPA 的アプローチも一瞬流行りかけたが、今のところ主流にはなっていない。React Native にやられてしまうかもしれないけれど。

ウェブも Android も React にやられかけているというのは興味深い現象であることよ。

 

Deep Dive

|

臨席の同僚が "なんとか deep dive" というような文章をチームにシェアしており, それは要するにアプリの特定の困った挙動についてコードをよく読んで調べたよ、という話だった。

なにか違和感を感じたのは、deep dive と銘打ってやっていることが自分の普段の仕事みたいなものだったから。それ別に deep dive 呼ばわりするようなものではないのでは、という。

その人はチーム歴が比較的浅いいわゆる TL/M で、割とばりばり仕事ができるタイプ。こういう getting things done な人は普段から無駄にコードを読んだりせず、もっとゴール駆動で作業するのだろうなあ。

一方で自分は getting things done への passion が不十分で、それよりはコードを読んだり色々調べたりして目の前の事象に詳しくなることを優先している。これは成果を求められている会社員的にはあまり望ましくない。個人的には getting things done のために "deep dive" を犠牲にしたいとは思わないけれど、そのコストは自覚して deep dive の "成果" を意識的に仕事に還元することは考えが方が良いかもなとはおもった。たとえば notes を書いて流すといった形で。コード以外の成果の割合を増やすのもそれはそれでいまいちだけれども、無駄に調べものしたりしている間はコード書いてないので仕方ない。

仕事は完全に gtd に倒し、知的関心の探求は課外活動に回すという選択肢はある。ただ、いまの自分の仕事はそれなりに面白い questions を提供してくれるので、それを表面的に片付けてしまうのは勿体無い気がしている。望ましい振る舞いは仕事次第な面はある。

 

Memory Allocation onDraw()

|

Android の昔からある高速化 tips というか性能アンチパターンとして onDraw() でのメモリアロケーションが挙げられているがホンマかいなと思う・・・

・・・と書こうとして証言を探したが、公式ドキュメントは割とまともだった (1, 2). 特に後者は "Object allocation and garbage collection (GC) have become significantly less of an issue since ART was introduced ... Note that significant amounts of allocation can mean more CPU resources spent on GC" とページを締めくくっており、これがまさに自分の言いたかったことなのだよね。ついでにいうと onDraw() は別に毎フレーム呼ばれねーよ、というのがある。

なぜこの話を書こうとおもったのか忘れたけれど、古い知識で性能しったかぶりするのはよくないから実際に測ってからなんか言おうね、といういつもの話でした。まあ GC の影響は測るのが難しいから公式ドキュメントが cargo cult busting してくれてるのは良いことである。Android の公式資料, たまにちゃんと書かれてるね。

Extra Curricular And Distraction

|

早朝活動、仕事には支障がでてないフリをしているけれど若干でている事実を認めざるを得ない。つまり、ちょっと眠い。そして退社前に疲れて集中できなくなる。

さいきん週に一回くらい家族三人で cosleep する実験をしている。Co-sleep は良いところもある。この NYTimes のエッセイの気持ちもちょっとわかる・・・というのはさておき、子供とねると 20-21 時から 6 時まで 10 時間の睡眠となる。翌日は会社での調子がすこぶる良い。眠くならないし疲れない。

今は 4:15 に目覚ましをならし、うだうだスマホを眺めて顔を洗って・・・と五時前に課外活動を初めている。しかも夜もなんだかんだで 21:30-22:00 までダラダラ起きてしまう。睡眠時間は 6-7 時間。やはり最低 8 時間は寝ないとダメだなあと思う。

就寝前のダラダラを減らせばいいとわかっているのだけれど、夜は疲れ果てて意識レベルが下がっているので「風呂に入って寝る」というルーチンすら億劫でもたもたしてしまうのだよなあ・・・。

 

google/mobly: E2E test framework for tests with complex environment requirements.

via google/mobly: E2E test framework for tests with complex environment requirements.

最近性能テストの自動化にこれを使っている。まあまあ良い。良さの一部は lab の実機で CI するインフラを誰かが用意してくれているから、というツール自体とは無関係なものだけれど、テストコードが host 側で動き、しかもそれが Python だというのも良い。

原則としてこうした E2E のテストは保守性の点で望ましくないことが多く最小限にすべきなのだが、性能のベンチマークばかりは実機でやりたいし、環境をいじる必要もあるのでホスト側の adb で色々やりたい。そして自分の関心は特定のコードの挙動でなくシステムとしての遅さなのだった。

Mobly をランダムな他人に進めるかというと・・・どうだろうね。ちょっと大げさすぎる気はする。しばらくは plain python でがんばってみて、辛くなったら調べてみるくらいでいいのではないかな。ホスト側でテストを動かすというコアのアイデアが重要だと思う。


それはさておき仕事で python を書くのは新しく学ぶことが多くて楽しい。文法とかは今更特に学ぶところはないが、社内インフラをはじめ色々なライブラリを使い、他人のコードレビューを通せる程度にはゴミでないコードを書くと、余暇プロジェクトや書き捨てのスクリプトとは違う仕事の手触りがある。

 

Your Responsibility, My Problem

|

他人になおしてほしいが困るのは自分、というバグがある。バグトラッカーには owner の概念があり、これはふつう直す人を意味するが、直す人とそのバグがなおる事実を気にする人は別なことが多く、(例: API を実装する人/使う人)なおる事実を気にする人が誰かをコミュニケートする良い方法がない。

これは自分の周りではどう解決されているかというと、基本的には TPM や EM が「直る事実を気にする人」を代表し、hotlist で気にするバグを管理しつつ定期的につついて回っている。ただこの方法は機能しないことも多い。なぜなら TPM/EM のつつかなければいけないバグが多すぎるし、当事者ではないから伝言ゲームになりがち。やはりできるだけ直してほしい本人がつつくべきで、システムにもそれを支援してほしい。

したがってバグには「直ることを気にする人」すなわち owner と、それを直す「assignee」が別に存在すべきなのではないか。

とかおもったけど、これは管理社会へ続く道への一歩であって、やはり直す人が決定権を持っている方が健全だな。こういう願望が頭をもたげるのは「直してほしいのに治らない」という organizational malfunction への反応であって、その正しい解決策は上のアイデアのような脊髄反射ではない気がする。

健全なのは、直したいとおもっている当人や関係者が踏み込んでいって直せる状態にすることかもしれないし、場合に寄っては問題解決がおこるスループットの上限を受け入れることかもしれない。他人になにかを強要しようとするのは傲慢だし、自分がやられたらイヤだよね。

しかし締め切りのプレッシャーに晒されながら直してくれよオオとかイライラしているとなかなか一歩下がった価値判断をするのは難しいのであった。

Book: The Age of Surveillance Capitalism

|

The Age of Surveillance Capitalism: The Fight for a Human Future at the New Frontier of Power: Shoshana Zuboff

Tim Wu の The Curse of Bigness を聴いて、テック企業のあり方について考えてみようかな・・・と聞き始めた。あちこちで話題になっている一冊。

なのだが・・・これ厳しくね?メタファとレトリックでひたすら FUD しまくってて聴くに耐えない。お前は何言ってんだ・・・と頭痛がしてきて数時間で挫折した。たぶん多少は意味のある指摘もしているはずで理解したいのだが、罵詈雑言の割合が高すぎてちょっと無理。空想上の巨悪を叩かれても、いやそんなことしてないんで・・・的な気分にしかなれない。耳が痛いのでなく頭が痛い話でつらい。

自分はテックカンパニーのプライバシーの扱いはもうちょっと何かが何とかなってもよいのではとは思っている。でもこういう乱暴なバッシングから有意義な議論が起こる様は想像できない。

自分の勤務先の現実なんて、世間の若いインターネット企業が growth hack とかいいはじめて何年もたったあとにようやくそういう話をしはじめたくらい prediction based でなんかするのに出遅れており、自分はこんなやる気なくて大丈夫なのかと思っていた(し、そのへん頑張らなすぎて消えていったとしか思えないサービスも多い。)Surveilance して predict できるならもっと色々うまくやってるはずじゃね?株価とか又聞きで判断せず製品さわった方がいいよ・・・まあ technical なあら捜しをしても詮無い書き手なのだろうけれども。

しかしこうやってセンセーショナルにバーっと叩いて、それがバズってなにかが起こるのかもしれず、そうしたら著者としては満足なのだろうなあ。レビューも絶賛してるのばかりだけれども、こういう話を聞きたい人が聞きたい話をしてくれて喜んでいる様子。炎上商法みたいのに振り回されるのだとしたら悲しいが、人々がこれを求めているところが時代なのだろうな。

繰り返すけど、評判から判断するになにか意味のある議論してるんだと思うのだよね。でもほんとにノイズがキツすぎて読めないよ。

Book: The Curse of Bigness

|

The Curse of Bigness: Antitrust in the New Gilded Age: Tim Wu

でかい企業の独占はよくない、という話の発端である Shaman Acts や、それをうけた 20 世紀序盤から中盤にかけての anti-trust 活動、70 年代のシカゴ学派によるカウンターから現在までの歩みを紹介しながら、いまの anti-trust は元々の精神を失っている、取り戻そうと語る。

Tim Wu にしては薄い本だけれども、The Master Switch で anti-trust のハイライトである AT&T を研究し The Attention Merchant でインターネット企業を研究した流れでみると自然なかんじはする。自分は昨今のテック企業をめぐる言論には mixed feeling だけれども、でかすぎてダメというのはそうだろうなと思う。

Forbes には否定的なレビューが載っているが、全部読んで振り返ると自分は Tim Wu に分があると思った。自分が左よりで Tim Wu ファンであるバイアスは差し引く必要があるが。

テック企業は anti-trust の例外と見られることがある。つまり、たとえば Microsoft を分割しなかったけれどその後に新興企業が出てきて世代交代したし、それまでも The Innovator's Dilemma で語られているように世代交代の disruption は続いてきた。競争が機能してるんだから anti-trust みたいな規制いらなくね?という主張。

でも、たとえば Microsoft が勃興できたのは IBM が anti-trust を巡って政府と戦った名残で IBM PC がやたらオープンになっていたおかげだし、同様にそのあとのインターネット企業がウェブでやんちゃできたのも Microsoft が anti-trust のリスクに備えて無茶しなかったからという面はある。

もうひとつは、やはりインターネットおよびウェブというのは電話以来百年ぶりの超特大イノベーションで、PC market を独占していた Micorosoft が氷山の一角にあるパイを食べたくらいではまだまだ余裕で巨大な市場が残っていただけという気が個人的にはしている。その超巨大市場がようやく飽和して現代があるのではないか。

そして企業に悪意というか強欲さがあろうがなかろうが anti-trust のない市場には monopolize の tendency みたいなものがあり、それはある意味で自然の摂理というかエントロピーみたいなものなので、人類の平和のためになんらかの秩序が必要で、 anti-trust はそのための発明なのだ・・・という説明を Tim Wu はしていないけれど、自分はそう納得した。

それにしても Anti-Trust というアイデアは全然自明じゃないよね。こんなものが 19 世紀に提案されていた事実にはアメリカの民主主義の力を感じざるを得ない。最近のアメリカには失望つづきだったけれど、そうした歴史や Tim Wu のような書き手の存在はさすがと思う。

Software Design, Process and Documentation

|

自分が Design Docs というものがいまいち好きでない。Design Docs という抽象的な概念が嫌というよりは、提供されるテンプレートが嫌(という話は前に書いた気もするけれども発見できなかった・・・。)

典型的な Design Docs は BDUF によりがちである。バシっとしたデザインを宣言し、これでいくぞ!という。しかしそれは多くの場合嘘である、というと語弊があるが結果できあがるものとは違う。違うものを作るの自体は良いが、そんなら最初からバシっとデザインできてるみたいな顔すんなよ、と思う。

これは半分はテンプレートや慣習の問題である。多くの design docs は confidence level を communicate しない。「ここのデザインはまだ決められないので適当です。ちょっと作ってみてから考えます」「これはあとで変えられない重要な決定です」みたいな情報は一級市民であるべきだが、抜け落ちがちである。

そうしたプロジェクトの confidence level を上げていくというか uncertainty を絞り込んでいくの作業は planning と呼ばれる。つまり planning と design は表裏一体である。しかしなぜか2つは独立に扱われがちである。書いてる人が違ったりすることすらある。アホか。まあ planning というとプログラマ以外の stakeholder も色々関係してくるのでプログラマだけがどうこうすることはできないけれども、自分のぶんの計画くらいは design に織り込んでいいのではないか。そうしないと PM の書いた PRD みたいないまいち iterative 精神を理解してない計画に縛られて色々厳しくなりがち。不透明なものを段階的にすすめるならそうはっきり伝えなておかないと。

Agile は planning についてはいろいろと手法を開発したが、design 側は手薄になりがち。もともと BDUF に対するアンチテーゼの面があるから documented design を意図的にがんばってない部分はあるのだろうけれど、そうはいってもコード書く前に多少はなんか考えて書き出しといた方がよくね?実験的に開発をすすめるにしろ、多少は当初の目論見をはっきりしないと slip しがちじゃん? いやドキュメントも必要に応じて書くよとかいうけど、たとえば Scrum のプロセスの回し方みたいのを議論する細かさに比べたら design の話は皆無といってよい。そういうことやってると BDUF の亡霊に襲われるぞ。というかその亡霊が Design Docs だと思うのだよね。

自分はある時期までは iterative に進めるなら事前の documented design はなくてもいいと思っていた。実際なくてもできることは多い。ただ相手にするコードベースが大きかったり達成したいゴールが自明じゃなかったりすると iteartoin の turnaround time が長くなりがち。だから事前にあるていど調査をして見通しを立てるのには意味がある。しかしその調査の結果や見通した設計を資料化する部分でいつもモタモタしてしまい、もたついた末にサボってひどい目にあったりする。

特に誰かに助けを求めたいときはやりたいこと、やっていることを文書化しておくと be on the same page する上で都合が良い、というか割と必須。ひどい目にあうのは意思疎通の失敗が多い気がする。

もう一つ多いのは自分がやるべきことをはっきり決められていないのに気づいていない場合で、症状として procrastination が現れる。これは文書を書くとはっきりしたり、少なくとも何がはっきりしてないか自覚できたりする。考える道具としての文書化。


自分はこういう uncertainty から始まる evoluving design を記録するメディアとしての半時系列的なアプローチに興味あがり、だから blog 的なものに期待があるのだろうということに気づいた。もしかして一部では solved problem なのかもしんない。勤務先、なんとかならんかなー・・・。

まあ勤務先はおいといて、自分でなんかモダンなものをさわってみないとなあ。

You Are What You Say (And Not Say)

|

社会人になって blog 的なものを書くにあたり、一つ決めていたことがあった。それは批評や批判を書かないということ。仕事をしているとネガティブなことはたくさんあるわけだが、それを blog などに書いているとネガティブな話が好きなネガティブな人が集まってくる。学生の自分はいわゆる批評の類が好きでよく読んでいたが、一方でその不毛さは当時のウェブの楽観的な空気と噛み合わず、自分は楽観的に何かを生み出す側でいたいと思っていた。今日のウェブはネガティブな言葉に埋め尽くされてしまったが、一方で自分の勤務先を含めるインターネット企業は良くも悪くも当時の楽観の帰結である。自分がそっち側で仕事をしていられる理由の一つは、楽観側に身を置くと決めたおかげもある。9割は運だとしても。

自分の性格もあってこの決めごとは必ずしも守られておらず、しばしばなにかにケチを付けてしまうことはあった。そしてそういうものほどよく流行った。けれどそういう流行りをある程度押し返すことができたのは、いちおう「決めていた」からだと思っている。

ある時期からは自分の感じている苦難(というと大げさだけど struggle ということね)と、ものを書く際に課している delightedness の gap が大きくなって、けれど struggle や frustration を表立って口にするのは昔以上に problematic で、何かを書くのが億劫になった。今のように 人目につくまで時間を置く方針はその溝を橋渡しする処方となっている。

いまの自分が書かないようにしていることはいくつかある:

  • アメリカ・ベイエリアの暮らしの話。たまにはいいとおもうけれど、こういうのばっかり書いていると「アメリカ・ベイエリアの人」になってしまうよね。特にベイエリアはいちおうコンピュータ産業の中心地ということになっているので、この話題は同業者からの関心を集めやすい。一方で職業人としての足しにはならないし、この手の話に寄ってくる同業者は地理的なコンプレクスを持っている人が多く、話して楽しい相手ではない。だいたい日本の悪口とセットになりがちで、それも negativity を呼び寄せる。
  • 外資系企業の話。まあ外資系じゃないんだけど、日本にいた頃は外資系だった。これも上と同じで、話しているうちに「外資系企業の人」になってしまいがち。これは「ベイエリアの人」よりは仕事に役立てやすいケースもあるようだけれども、プログラマ向きではないよね。ある種のコンサルタントになりたいなら別だけれども。
  • あとは前に書いたけど記事の孫引きみたいなやつね。

なにを書くかの選択は、自分が外からどう見えるか以上に自分が何を考えることに時間を使うかを決める面がある。これも前にちょっと書いたけれども、ベイエリア在住技術者の人にも東京の外資系企業で働く人にも伝統的日本企業を腐すことに自分のプレゼンスの大部分を費やしてる人が一定数いる。そういうひとたちはそうした自分の勤務先が晒されている競争や、面している課題を考えることにどれくらい時間を使っているのか。そっちのほうがずっと興味深いし、仕事にも関係あるし、重要な話題だと思うのだけれど。まあ業界動向はともかく他人より自分の話をしたほうが良いよね。

こうした人々はもしかしたら意識の切り替えがすごく上手で、日本の悪口は単なる関心の通貨や息抜きに過ぎないのかもしれない。でもそういう語りが自分の精神性に影響を与えないってこと、ほんとにあるのかな。自分には無理。Whenever they go low we go high.... とかいうとまったく縁起が悪いが...

外資系というか bigco という話だと、もちろん大企業づとめにはいいこともあるのだが、一方で自分のプログラマとしてのキャリアを危険に曝している面も大きい。仕事をするにしても大企業なりの難しさは色々ある。大企業勤めの害をなるべく押し返しつつ、大企業の難しさを押しのけながら仕事をする、というのは自分の大きな関心であり、そういう話はぼちぼちしていくと思う。自分の立場が持つ問題とどう戦うかという話はステレオタイプの助けもあってか日本の中小企業勤務者の語りの方がよく目につく。ただ自分にとっては全体的に他人事すぎる。だからテック大企業の人も角が立たない範囲でそいう話をしてほしいもんです。

Link: Androidにおけるパフォーマンスチューニング実践 - Speaker Deck

via Androidにおけるパフォーマンスチューニング実践 - Speaker Deck

世間の期待値的には性能の話がこれでいいのか・・・別にリンク先のひとを腐したいわけではなく、2019 年にこんな話なのか・・・と割と心の底からびっくりしてしまったのでひっそり記録したかったという話。なお別にこういう話をしているからその人たちのアプリが遅いといいたいわけではない。地味にコツコツやればそこそこ速くなるジャンルはたくさんあるから。それでいいならそれでよいのです。


つい Twitter に余計なことを書いてしまったが完全に言いがかりだったと反省。

講演きいてないのでわからないけれど、リンク先の資料に問題があるとすれば計測して、詳しく見て問題を特定して、それを速くする、というサイクルが感じられないところかな。高速化、そのサイクルが一番下にないとカーゴカルト黒魔術みたいのになりがち。


追記

スライドの人が dex.fm に出ていたことに気づいたので聴いてみた。ちゃんと仕事してる人だった。我ながら言いがかりよくないわ。

dex.fm — 064: Performance Tuning

こういう人の話を聴いてみると、自分のやってる仕事は単に職場のインフラを exploit しているだけだなあと思う。たとえばベンチマークの自動化にしても lab なり dashboarding なり scheduled execution なりの仕組みはもうあるので、それを寄せ集めれば良い。

というか自分はそれすらできず、半年くらい前にやってきた別の人が別の目的で寄せ集めた自分のチーム向けのセットアップに相乗りしている。一番大変な connecting pieces 作業はそのひとが済ませてくれたので、自分はその上でちょっとコードを書けば良い。

自分の作業はアプリ側からメトリクスを expose する側に寄っているのでちょっと守備範囲が違うとも言えるが、そのアプリ側の仕事にしても昔だれかがやったまま放置していたコードを整理復旧して使い物にしただけで、特にすごく何かをがんばったわけではない。まあこれは前のチームで割とがんばった部分なのでやればできるとは思うが・・・。

こうした仕事に価値がないとは思わない。実際自動化によってカバレッジがあがり、早い段階で性能バグを発見できるようになったわけだから。ただまあ、リンク先の人のような全方位的活躍とは程遠い。

他人の仕事を寄せ集めるだけで成果がでるのも、他人の仕事を寄せ集めるのが大変なのも、大企業であることよ。最近やってきたできるエンジニアは「俺はコードは書かない。他人のコードをコピペするだけだ」と冗談交じりに言っていて、そういう面なあるなと思う。コピペ元コードの出処が社内コードサーチか SO かの違いで世間のプログラマも割とそんなもんなのではという気もする。はさておき。

部品を寄せ集める大変さを考えると大企業で社内インフラに乗るのだろうがスタートアップでオープンソースに乗るのだろうが大差なくね、というのは常々感じているオープンソースもっと使わせろという不満につながるわけだが、自動化のインフラはコードだけでなくサービスの operation も必要な類なのでまあ仕方ないかなと思う。過剰な大変さはなんとかしてほしい気もする一方、サーバ側と比べた時の社内のモバイル回りの筋の悪さには諦めもある。

Freshing Out Before Starting

|

平和な朝、ストレッチをして家を出て、走って会社について朝食して、バグのリストや機能の記録からやるべきことを見直してノートに書き出して仕事を始める。これが全部スムーズにいくと朝から調子よく仕事ができる。一日の生産性はおおむね朝の調子の定数倍なのでこういう日は仕事がはかどる。

しかし実際には雨が降って走れなかったり、子供の相手や医者その他の雑用で朝のルーチンをこなせないままばたばたと職場につき、遅刻にともなう焦りと締切圧からなんとなく前日にやっていた作業を再開する・・・というような日は集中を欠き、一日の生産性はその集中のない状態の定数倍なのでつまりまったく捗らないまま終わる。

といった点を考えると、たとえ朝に雑用が立て込むなので遅れてついたり運動できなかったりした日も、会社についてから慌てず騒がずストレッチや作業計画に時間を使ってから仕事を初めた方がトータルの生産性は高まるのではないか。

問題があるとすれば、オフィスというのは朝から時がながれるほど混み合い慌ただしい空気にあふれてくるので、それを振り切るのは割と大変ということ。もうちょっと余裕のあるオフィスで働きたいもんだわ・・・。

それとは別にぶらっと見たインターネットで disturbing/digsuting な話(勤務先のやらかしなど)を読んでしまうと気が散ってしまう問題もある。精神衛生のためにインターネットは見ない方がいい。わかってる。

Colab and Exploratory Benchmarking

|

Colab には Local Runtime という機能があり、自分のワークステーションで動いている Jupyter に Colab でアクセスできる。これを使うとアプリなどのベンチマークの実行、集計を一箇所に集約できてよい。

アプリのベンチマークは、ある程度自動化可能になっている前提。たとえ自分の場合だと Android 相手なので ADB で適当にインテントを送りつけアプリを起動したりベンチマークのスコアをどこかにダンプしたりできるようになっている。

次のステップは Python から ADB などを呼び出してベンチマークを実行し、結果をダンプしてパースしてスコアを読み出す。あとはそれを適当に複数回実行したのち Pandas とかで整形すればよい。

環境のセットアップなど Python 側でデータの解釈が必要ないコマンドの実行は shell command 記法 で書いておくと簡潔だし出力も記録できる。

またベンチマークの意図やコード上にあらわれない情報(アプリを改変してビルドしなおしたなど)はテキストとして書いておく。Diff を gist 的な場所に貼り付けて URL を記録してもいいかもしれない。

ある程度結果がでたら整形して説明を書き加え、バグトラッカーなどで関係者にシェアする。Jupyter と比べた時の Colab の利点は、Notebook が最初から URL を持っているおかげでシェアする作業が自明なところ。ipynb をバグに添付しても間違いなく読んでもらえないからね。

開発中にとるベンチマークは探索的な性格を持っており、同時に手順が繊細で自動化しないと間違いやすい。なので Jupyter と相性がよい。自分は今まで適当にシェルスクリプトとかで半自動化し、結果を Jupyter にコピペして計算と整形だけやっていた。これは間違ってたね。なんのベンチマークをしたか自動で記録がのこり、再実行はセルと叩き直すだけ。同じ場所でメモもとれる。コピペの手間もなし。全然よい。

よく考えると本質的にベンチマークの試行錯誤というのは実験という Notebook の使いみちの王道なんだから相性が良いのは当たり前。性能の仕事を主にして数年、今までこれをやってなかったのは shame と言って良い。反省。でも明日からちゃんとやる。むしろシェルスクリプトの出力をコピペするとかかったるいのによく耐えてきた。


次は Systrace を統計的に処理するとかやりたいなあ。どっかにパーサないものか。Chrome は trace 結果が JSON だったので簡単に Pandas から読めたのだが。

Better At Detaching

|

FB のろくでもないニュースがあり、さすが同じ広告業者でもあいつらは格が違うな・・・とびびっていたら勤務先も似たようなことをやっているという報道がつづいてまた一つがっかりした。

セクハラ幹部に一生遊んで暮らせる手切れ金を払ったのもひどかったが、ユーザとは関係ない話だった。これはエンドユーザ相手。がっかりもひとしお。

しかしそうした判断とは裏腹に自分の gut feeling は思ったより動じなかった。予想の範囲内だったというわけでもなく、もうどうでもいいという気分が近い。勤務先からの自我切り離しが着々と進んでいるのを感じる。売り上げて給料を払ってくれればそれでいい(法は守るとして)。誇りを持って働くことへの憧れもまだゼロではないが、今はファンタジーにしか感じられなくなった。目先の仕事がそれほどつまらなくないのがせめてもの救い。

降り注ぐ失望をいつか無視し切れなくなる気もする。一方で仕事に対する感性の劣化速度もなかなかのもの。光の速さで心を麻痺して、そのまま苦しまずに倫理的な死を遂げられたらと思わないでもない。家族がいると物理的な死はちょっと抵抗あるね。

定期的な愚痴なのでそっとしといてください。

Unconscious Bias

|

同僚からいじめを受ける夢を見た。

その同僚は隣のチームに比較的最近入ってきたほとんど接点のない相手で、したがって嫌な思いをしたこともない。正直いうと名前すら思い出せない。白人である。

白人である、というのは本来は完全に無意味な情報なはずで差別的ですらあるが、ここでは関係がある気がする。つまり、自分は心のどこかで白人ちょっと怖いのかもな、と思ったから。自分はたとえばインド人の同僚からいじめられるところはまったく想像できないが、先の夢に出てきた同僚からいじめられる様は、想像・・・というか空想・・・の範囲内なんだよね。端的にいうと風貌が(日本の)マンガとかにでてくるいじめっ子ぽい。もちろん現実にそういうことは起きない。

夢にでてくるとかまさに unconscious bias. Unconscious bias って majority が minority に対して抱くものだと考えがちだけど、実際は逆向きも少しはあるよね。だからこそ人種間の対立というのは一層ややこしくなるんだろうし。しかし自分は別に普段から迫害されてる minority というわけではないので、この unconscious bias というか discriminatory な気持ちは単に情けないというかみっともないというかひどい。夢だからどうしょうもないとはいえ反省した。

たとえば同じ白色人種でも自分はチームの TL が夢の悪役に出てきたことはない。見も蓋もないことをいうならこの TL の方がよりいじめっ子ぽい風貌をしているしコードレビューとかで迫害されている、というのは冗談だけどそれなりに blunt な扱いをうけてムっとすることもたまにある。しかし自分が相手の性格をよくわかっているので unconscious bias を生み出す未知への恐怖はない。差別は相手を知らないとおこる。

まあ仕事のストレスが歪んだ形で現れた面もあろう。仕事忙しいの良くない。締め切りよくない。(やつあたり。)こういう話はそっと胸に秘めておくのがマナーだけれども、公開時点では時効ということでひっそり confess しておく。

 

Web Stack Today

|

Ask HN: Go-to web stack today? | Hacker News

簡単なウェブアプリをささっと作れた方がよいよなあという年来の懸念と、簡単につくりたい社内ウェブアプリ(ちょっとした dashboard 的なもの) があるのとで、何で作ろうかと考える。自分の現状としては flask いちおう使えますが・・・くらい。

上のスレを眺めていると flask 派はいるにはいるが少数で、Django か Rails あたりでいいんじゃね、的な雰囲気。Rails もうちょっと人気あるかとおもったけど Django/Rails とくくられる程度の扱いか。US だとそうなのかね。Java 勢どうなのかとおもったけれど Spring Boot は flask 以上に人気なかった。まあ HN という媒体のバイアスはあろうが、自分はそのバイアスされた世界に生きているので無視はできない。

Elixir や Clojure はよりマイナーで、まあそうだよなと思う。Go もバックエンド方面向けらしくフルスタック用途ではあまり見かけない。自分はこの辺の温度感が知りたかったので、なんとなくわかってよかった。Go 流行っているけれど、それは既存のウェブアプリからサービスを切り出す用途ではやっているのであって、ブラウザに HTML や JSON をお渡しする仕事は昨今あまり変わり映えしていない。代わり映えしないから話題にならないだけで、すごく衰退したわけではない。

自分の関心は世の中みんな JS でやるようになった結果ウェブのサーバ側は簡素でよくなり、結果として従来のでかいフレームワークは衰退して小さくて気の利いた奴らが台頭したりしてないよな・・・特に Go とか普及してないだろうな・・・というあたりだったが、少なくともいわゆる「フルスタック」の人の間ではそういうことは起きてなさそう。Micro なんとかだと事情はまた違うのかもだが、自分はそんなサーバがいくつも必要なものを作りたいわけではないからね。

といった現状はあるが・・・。自分の仕事を考えると App Engine で動かさねばならず、そうすると Django とか別に嬉しくないので Flask か Spring Boot, しかし会社の中で Spring Boot 使ってる人とかいなそうなので結局 flask かな。Flask はやっつけモニタリング UI やしょぼいデータ編集ツールなどで割と使われている模様。

いい機会だから GAE でなく内製側のクラスタに push できる何かとして作ってみようかと一瞬思ったが、勝手に使えるデータベースがなかった。終了。どのみち内製のクラスタで動かしたところで社内の謎フレームワークが使えるようになるくらいで、良い選択肢は増えない。

自分や自分の周りの人が使うレベルを一歩越えようとするとやはり flask はつらそうで、Django なり Rails なり Spring Boot なりを使いたい。しかしこれは社内では使えないスキルなのでいまいち盛り上がらない。社内でしか使えない謎スタックはそれ以上にやる気が起きない。うむ。やはり Flask だな。今の自分にちゃんとしたウェブを作るのは out of scope ということなのでしょう。やむなし。

JS はというと社内はおおむね Angular ぽいので、全然興味ないけどまあ Angular でいいです。React 勢とかいるのだろうか。気になるけれど深入りしても仕方なし。


より現実的な問題としてそんなことしてる暇あんのか、というのはあるが、まあ隙間を見つつジリジリ進められたらいいな、みたいなレベルの話ですので。

Sentiment Amplifier

|

このあいだ久しぶりに社内ソーシャルメディアを眺めたらあまりに空気が悪くてびっくりしてしまった。(普段はブロックしている。)

自分が勤務先に持つ悪印象への貢献度は: 社内ソーシャルメディア > 世間の報道 > 普段の仕事。普段の仕事で不満を抱くことはないでもないとはいえ、社内ソーシャルメディアに渦巻く negativity と比べたら足元にも及ばない。遠い昔は仕事が退屈な時期に社内ソーシャルメディアから euphoria  を補っていた淡い記憶があるが、どうやってそんなことが可能だったのか今となっては思い出せない。

今の勤務先は総体としては downturn に入っており、テック産業の歴史を鑑みるとそのまま朽ちていくと考えるのが一番妥当。楽観的にいってもどっかで下げ止まるくらいがせいぜいで、大復活みたいのは考えにくい。そうした世代交代は産業全体からみると健全なことであろう。自分が収入の stability を欲している時期にそれが起きてるのは個人的にはすごく困ったことだし大復活してほしいけれども。

5 年くらい前はそういう空気を読み取った人がザザザーっとスタートアップや近隣の景気良さそうな会社 (FB とか) に流れていたように見えたが、最近は謎の給与格差および巨大スタートアップ群の停滞感、競合他社がおなじくらいぱっとしない問題などから行く先を失って滞り、社内メディアでガス抜きをしているのかもしれない。  社員が高齢化した面もあろう。自分がまさにそうだし。

成長の鈍った企業で社員の不満が渦巻きがちなのは仕方ないのかもしれないが、社内ソーシャルメディアは空気の悪さを増幅している気がする。会社の先行きの不透明さ以前に、この空気の悪さが嫌でやめる人も結構いるんじゃないか。それは(「言論の自由」みたいなものが後押しするはずだった)組織の resillience を損ねている気がする。

まあ Twitter がそうであるようにソーシャルメディアはコミュニティのろくでもなさの投影にすぎず、まともな社員は社内ソーシャルメディアで管巻いたりせず淡々と仕事をしていると信じつつ自分もそう行動して生きたい所存。


一歩さがって、なぜ言論であるはずの社内ソーシャルメディアが組織の resillience に寄与していないと感じるのかを考えてみる。たぶん必要とされている言論はソーシャルメディアではなくジャーナリズムなのだろうな。しかし残念ながら社内ジャーナリズムというものは存在せず、NYTimes や Bloomberg のような世間のジャーナリズムに依存している。この非対称性(?) が社内の言論をろくでもなく感じる理由だろう。

社内ジャーナリズムというのは存在しうるのだろうか。たとえば Microsoft の景気減速がひと目を引いていた 2000 年代, Mini-Microsoft という匿名 MS 社員のブログが一部で注目を集めていた。これはまあまあいい線行ってたんじゃないかな。空気の悪さはかなりのものだが、当時は筋が通っているように感じた。(今読み直したらただのゴミに感じるかもしれないが。)

ただこういう本気の批評は存在しにくいよね。書き手の動機がなぞすぎる。

社内のソーシャルメディアにも単体ではよく書けた言説はぼちぼちある。ただ編集の役割を果たすものがないせいで、ストリームに消化されて終わるのだろうなあ。だれか愛社精神あふれる暇人がそうした声をきちんとまとめてアーカイブしていけば、それは社内ジャーナリズムの萌芽となろう。芽が出る前にクビになりそうだけど。

追記

この日はどこかの新聞に空気を悪くする報道があり特別荒れていたとあとから知った。

The Lack Of The Focus

|

仕事をしつつ PDFium をいじりつつ論文読む、とかやってるとなにかに集中するのが難しい。きちんと時間をとって作業してるとき以外も頭のすみでなんとなく考えているわけで、そういう時に考えるものが散漫になる。そして考える対象を変えるとコンテクストが失われてしまう。

きちんと時間をとって何かする時はそれまで頭の片隅で考えていたぼんやりした何かに形を与えるわけだが、別の考え事によってもともと考えていた何かが失われていると捗らない。

まあ仕事はある程度まとまった時間があるのでなんとかなるけど、他は割と厳しい。仕事にしても、たとえば通勤中に仕事のことを考えているか他のことを考えているかで滑り出しの順調さが大きく変わり、それは一日の生産性に響く。

Podcast やってると Podcast 準備のない日にコードを書くのがはかどらない問題の解決として、Podcast 準備とコードいじりの両方をちょっとずつやる、というのを考えていたが、この集中を失われる問題は悪化してしまう気がする。

そして課外活動を忙しくしてしまうと最低限必要な仕事および家庭への集中が失われ、それはそれで困る。

Podcast の優先度を下げるのが一番いいのだろうけれど、ちゃんと準備せず話すのはすごく気分が悪いという問題がある。まあ頻度を下げろということなのだろうなあ・・・。


これは自分が仕事でぱっとしない理由を説明してもいる:自分は業務時間の外でほとんど仕事のことを考えていない。

TL とかみてると、彼は職場にいる時間はふつうに 9-17 だが、通勤バス(推定片道一時間)の中では明らかに仕事をしているし他に趣味プロジェクトを持っている様子もない。かわりに仕事を趣味化することには大きく成功している。趣味を全面に出しすぎてコードベースにオーバーヘッドを持ち込んでいる面もあり、それはチームメイトとしては迷惑だが個人としては上手いことやったなと評価している。他のファクターをさておくと仕事はこのくらい熱心にできたほうがいいよね。

自分は他のファクターをさておけないので仕事に全部をつっこむ気にはなれず、その consequence は残念なものだが、仕方ない。なお PDFium の仕事は探せばあるかもしらんけど別に PDFium の仕事をしたいわけではないです。Podcast で食っていきたいわけでもないです。


Ten minutes a day – Alex Allain – Medium

この人は一日十分を三年続けて本を書いたと言っている。すごいね。気が散るとかいうのは甘えなのかもしれないとも思うが、どちらかというと仕事の外でできる活動は一つくらいで、そいつがこの一日十分の枠ということなのだろうねえ。

やはり podcast がんばりすぎを何とかするのが正しいよなあ・・・。

WebRender

|

servo/webrender: A GPU-based renderer for the web

今日は向井さんが Servo の話らしいので雑談がてらちょっと眺める。Servo のレンダラ。最近は Firefox でも使おうとしているらしい。

ブラウザのレンダラを再利用可能にするというアイデアは皆が考えるけれどまず失敗するものの典型だが、これはすくなくとも Servo と Firefox で動いているわけである種の夢を叶えている。どうなってんのかと見てみると・・・。いわゆる CSS Rendering Model を扱っているのではなく、どちらかというと Skia に近いレイヤだった。ただ Skia よりはもうちょっとブラウザに寄せてある感じはする。API が retained-mode first というか only なので, immediate ぽい API の Skia より色々できるだろうと想像はつく。

思ったより普通だったが、それはきっと正しいことなのだろうな。

Link: Profilo · An Android performance library

via Profilo · An Android performance library

コードを眺めているが・・・。すごいなこれ。

すごいところを列挙するのはあとでやるとして、Android の C++ レイヤの練度で見ると Facebook は自分の勤務先を含む多くの会社を圧倒している気がする。

たとえば Chrome なんかは単純に C++ のコードベースとして見れば割と比類ない練度だと思うけれども、基本的にはデスクトップアプリだから Android らしさというのはない。Facebook から出てくるライブラリの C++ は Android らしさを感じる。しかも Android が好きで良さを引き出そうというよりは、Android の弱点にくまなく付け込んで攻略するという方向性。これは自分の好みに近い

自分の勤務先は根本的にはウェブの会社で、モバイル対応はなんとなく場当たり的に行われた。上の方は mobile first と旗を振ったけれど、なにをすべきなのかは誰もよくわかっていなかった。各チームがそれぞれ勝手に色々やっていたため、全社共通の基盤みたいのの整備が遅れた。さすがに今はちゃんとしてきたけれども、インフラから整然と作っていったサーバ側とはだいぶ趣が違う。そしてアプリインフラ的なレイヤを主導しているのが Java の人なせいか C++ レイヤは未だに荒野感がある。まあ Android の低レベルの仕事をしたいプログラマの多くはアプリじゃなくて OS やると思うんだよね。アプリとして C++ 書きたい人、そんなにいない気がする。

この話とはちょっと矛盾するけれども、初期にモバイル対応 (Android アプリ開発) を主導した現場の人の多くは Android OS 出身者で、自分のアプリのために Android のギリギリを攻めて行こうというよりは Android ecosystem の良き市民であろうという意識が強かった。だから platform の .so を dlopen() してシンボルをぶっこぬく、とか多分やらない。Java レイヤの hidden API を reflection でよぶくらいがせいぜい。自分たちのチームにしても、OS やデバイスがやるべきことは自分で妙なハックをしたりせず OS やデバイスの人に頼む。(自分はそれがあまり好きでないが、妥当だとは思っている。)

ふりかえって Facebook を見るに、彼らの mobile first はなにをすべきかはっきりしていた。Facebook アプリに全部の機能を詰め込んでちゃんと動くようにすればよい。そう決断したタイミングがすごく早かったとは思わないけれども、とにかくチームが、そしてコードベースが一つのアプリを中心に編成された。だからライブラリなどのインフラも大規模コードベースらしく整備されているし、よく書けてる。

しかも低レベルでいろいろやりたいプログラマに OS をやるという選択肢がない。彼らはそのかわりにアプリの中で色々無茶なハックをしてウサを晴らしたのだろう。OS のコードをコピーし、アプリ固有の事情にあわせツールチェインを魔改造し・・・といった具合に。

まあこれらは完全な想像だけれども、Profilo および依存先 C++ のコードには大量につっこまれたエンジニアリング資源の匂いがあるね。Android がアプリレイヤでどこまで無茶できるかを体験するには面白いところなのだろうな Facebook. まあコード読んで勉強させていただきますわ。

Agile And Micromanagement

|

少し前に JIRA is an antipattern という記事があり、盛り上がっていた。どうも ticket を assign するという形で micromanage されることがあり、それが嫌という話らしい。

これはツールの濫用/誤用であるというのが主要な反論で、そうだろうとは思う。一方でツールやプロセスが暗に促す方向というものもあり、JIRA は micromanagement を遠ざけるような力を持っていない。それはそれできっと事実なのだろう。

自分は勤務先内製の bug tracker に長いこと不満を持っているわけだが、ひとつだけ良いこともあると気づいた。このツールは管理職が下々を micromanage するには出来が悪すぎるのである。一方、むかし Pivotal Tracker を使っているチームの TL/M によるものすごい micromanage を目撃したことがあり、あのチームでだけは働きたくないと思ったのを覚えている・・・というのは嘘で、当時は Pivotal いいなー使ってみたいなーと思った。しかし今振り返るとアレはないわ。無理。

そんなことを考えたきっかけは、やはり少し前にあった Why 95 Percent of Software Engineers Lose Nothing By Unionizing という記事。これを書いた mchurch というのは HN から ban された過去を持つ筋金入りのクソブロガーだが、それでも Scrum とか micromanage だよね、という話は自分の心に刺さるものがある。

なぜか。自分が昔々 Scrum ごっこをしていた頃のことを思い出すと、あれは micromanage だったと思うからだ。当時の自分はどちらかというと manage する側だったので「うむ、チームワーク」とか思っていたわけだけれど、他の人はどう思ってたのかねえ。管理されてる感あったんじゃないかな。

Scrum や Agile は teamwork の皮をかぶった相互監視 micromanagement methodology である・・・と主張するつもりはない。Agile が people を empower することはできると思う。一方で JIRA と同じくこうしたプロセスというのはどうしても管理者、あるいは管理性向のある個人に濫用されがちで、それを防ぐ仕組みも特にないのではないか。

Agile に関する語りはだいたいそうした管理者や管理性向パーソン ("scrum master") によって行われており、これは管理職やリーダシップに関する語りと同じ問題をはらんでいる。つまり、あなたの周りのひとはほんとにハッピーになったんですかね、という問いには答えてくれない。

出来損ないの agile が招く潜在的な micromanagement から身を守るには自分とその周辺の仕事を自分で manage しておいた方がよくて、そのためには逆説的だけど軽く agile のような計画の話とかを勉強するのはいいんじゃないかなあ。GTD とかの生産性ライフハックだけだとちょっと心もとないよね。

自分も何か読み直そうか。10 年前からなんか進歩したかな agile 方面。Lean がでてきたくらいだろうか。調べないとわからないね。

Reviewer Being Nice

|

チームの人が増えた影響などで、コードレビューをする機会が多くなってきた。自分は前のチームではあまりレビューをせず、その前もそんなにせず、つまりあまりレビューをして来なかった。しかしいよいよレビューする側になってしまったかんじ。まあ税金なので仕方ない。

で、どうも言葉遣いが乱暴というか blunt になりがちでよくないなと気づいた。昔々オープンソース仕事で他の会社のひとが書いたものをレビューしていたころはかなり気を使って丁寧な言い回しをしていたものだけれど、そういった気遣いが完全に失われている。

オフィスが近所で立ち話したりランチたべたりする機会があるならまだいいんだけれど、remote の人が相手だったりするとほんとに気をつけないと関係を損ねてしまう。しかも自分が微妙に authority を持っているせいで、相手が不満を口にせずただ黙って hate をためてしまうこともありうる。それは困る。

というわけでコードレビューの言葉遣いは気をつけないといけないし、特に remote の人が相手の時は人格を切り替えていかねばなあ。


そういう意味で自分の今いるチームはあまり参考にならない。Remote の歴史が浅いせいか人々はオフラインで話をつけがちだし、いちばん権力のある TL はだいぶエラそうというか blunt だから。そのへんは remote 歴の長いチームの方が勉強になることが多い。あの頃レビューをしてくれた人たちはだいぶ気を使ってたのだろうと今になると思うが、昔のことすぎてどんな感じだったかすっかり忘れてしまった。

Bad Parts of Performance Work

|

性能仕事には色々イヤなところもある。

なにかと組織やコードのダメなところにでくわしがちなのも、イヤさの一つ。どんな仕事も多かれ少なかれダメさと戦う必要はあるが、性能仕事はその程度がひどい。コードにしろ組織にしろ抽象化なりプロセスなりでダメさを隠そうとするわけだが、性能は隠せないので。

わかりやすい例として、レガシーコードの奥の方が遅いみたいなやつ。速くするにはそのレガシーコードを触らねばならず、ウっとなる。性能改善に Anti-Corruption Layer はない。

組織のダメさでいうと、マネジメントの意向でインテグレートすることになったよそのチームのコードが遅い、みたいなやつ。そのコードは特段ひどいわけではないが、しかしよくわからん・・・みたいになる。

別の組織のダメさ。なんで性能関係の CI 無いの?と思って追求していくと SWET/QA 部門と開発チームのつなぎ目にある crack に落ちてた・・・みたいなケース。

こういうのが次々と出てくる。

自分はなるべくダメさに怖気づかずズカズカ入っていって直したいと思っているのでそのように振る舞っているが、ダメさに向き合っているとどんどん仕事やコードや組織が嫌いになっていくという問題があり悩ましい。Burn-out しないよう程々にしないとなあ。まあ九時五時で働いているとなかなか burn-out するほど消耗しないけれど。

 

Link: I interviewed at six top companies in Silicon Valley in six days | Hacker News

|

via I interviewed at six top companies in Silicon Valley in six days | Hacker News

また HN が大企業コーディングクイズ問題で荒れていた。自分の見解は前に書いたが、この話はコーディングクイズを肯定する前提で書いた。HN のトップコメントはしかしアンチコーディングクイズで、しかもなんとなくわかってないなあ・・・と感じてしまった。

なお以下の話は自分の意見であって別に勤務先などの見解を反映していない。

コーディングクイズがアルゴリズムを書かせがちなのは、別に CS の知識的なものを問いたいわけではなく、プログラミングの筋肉みたいなものを知りたいからだ。プログラミングには筋力/体力みたいなものが存在する。それは綺麗な抽象化を考える力とかアルゴリズムの知識とかではなく、目の前の積み上がったミクロな複雑さの山を押しのけてズカズカと前に進んで結果を出す速度みたいなもの。

アルゴリズム類のコーディングには抽象化でごまかせないむき出しの難しさがあるので、体力を試すのには割と向いてる。

体力が導く「成果」はかならずしも最終的な成果ではなく、試行錯誤のマイルストンに近い。目の前に自明でない問題がある。ここでいう問題は原因不明のバグかもしれないし、API デザインみたいなものかもしれない。そこでガガガっと色々試して解空間を探索して良い答えを出す力が筋力。知識があるほどよい初期解を選べる。体力があるほど広い空間を探索できる。

そういう筋力を使わずにできる仕事、良い初期解の近傍で乗り切れる仕事はたくさんある。そういう仕事の多くでは、規模から生まれる複雑さがプログラミングの主要な、しばしば唯一の、敵である。一方で世の中には筋力がないと解決できない仕事もある。そして実際に筋力がある人の働きを目にしないと、世の中にそういうものがあることには気づけない。

筋肉質な仕事ぶりを目にすると、ああアーキテクトとか別にどうでもいいな、という気持ちになる。規模に頼らなくても意味のある成果を出せることがわかるから。

体力だけあって抽象化とかの技能がないとそれはそれでやがて破綻する。けれどテック大企業、というと一般化しすぎだけれど自分の勤務先とかはそういう筋力で解く姿勢を重く見ている気がする。表立ってそれが語られることはなく、表面的には規模の複雑さを扱うほうが偉くなれることになっているが、空気を流れる ethos は筋肉を志向している、気がする。それを端的にあらわしているのがたとえば Jeff Dean Facts のような subculture である。

そういう価値観は必ずしもいいことばかりではなく、わかりやすい欠点としては manliness や heroium に傾倒しがちで teamwork や inclusiveness とは相性が悪いなど副作用もある。良くも悪くもそういうものというだけで。昨今の diversity awareness の高まりから生まれた古い subculuture に対するカウンターにはその綱引きを見ることができる(例 1, 2)。大企業はでかいだけあって価値観も一枚岩でない。ただ採用の仕組みとかは早い段階に固まってしまいがちで、結果として proto culture が染み出すのだろう。

そして自分は後ろめたさを感じつつこうした古い価値観を一定程度 preach しており、だから冒頭のようなコメントを読むとため息ついちゃうんだろうな。Manliness が大事って話じゃなくて、ばばばっとコード書きたいなということね。

筋力がないのに筋力がある人のように働こうとすると、初期解近傍で妥協するかわりに時間をかけて広い解空間を探そうとして仕事が遅い人になってしまうのだった。困る。しかしちょろい仕事をぱぱっとやるとかマジもう興味ない。価値観の呪い。


しかし冒頭のコメントの人は抽象化が大事とかいいつつコーディング練習するヒマがあったら乗っかるフレームワーク考えるのに時間使いたいわとか言っていて、現代における抽象化というものを考えてしまうよなあ。

Thinking Like Talking

|

会社での勤務時間中は step back して問題について考え直す、という頭の使い方がなかなかできない。

なぜかと考えるに、仕事中はどうしても英語で物事を考えがちで、それが自分の思考能力を律速している面がある。ただそれだけでもなく、最近は問題について考えるときに、その解決方法をどうやって他人に説明するかと joint で考えがちなのが良くないなと思う。

今の仕事は他人、特に近隣チームの人を説得、合意形成したりその人たちにお願いしたりする場面が多く、結果として「提案の仕方」を軸に物事を考えてしまう。もっというと脳内でそうした人々と会話したり、実際に相手のデスクに出向いて軽く温度を調べたりする。他人と話して inspiration を得ることもあるわけだが、言語能力が高くなかったり相手が押しの強い人物だったりすると問題を矮小化してしまったり、変に(最終的には正しくないとわかる)意見を押し付けられてかえって自分の解空間を狭めてしまうことがある。

なので他人と話す必要性のプレッシャーをなんとかして保留し、問題の解決方法に集中して考えるのが良いのだろうな。しかしオフィスは他人に溢れているからそれが難しいのだった。

考える必要性がある程度溜まったら WFH というか Work From 通勤途中のスタバ、みたいにしてなんとか自分をデタッチしたほうが良いのだろう。というかスタバまで行かずなんとか近隣のオフィスで考え事のできる場所を探しが方が良い。自分のいるオフィス周辺は建物の建造が人の増えっぷりに追いついておらず、かつてないほど詰め込まれているのだった。東京オフィスより狭いのでは、みたいなかんじで厳しい。

It's Not For Your Favorite

|

Link: retrage on Twitter: "#misreading KVM回聞いたんですがFreeBSDのbhyve、OpenBSDのvmm、NetBSDのNVMMあたりも触れて欲しかった"

がっくりするフィードバックの例。話の内容がわからなかったから詳しく話せというフィードバックは歓迎だが、これはもうね・・・自分の好きなものの話は自分でしろ! FreeBSD にしろ OpenBSD にしろ心の底から興味ない。とかクソリプしかけたが聴いてくれている人に喧嘩売っても仕方ないのでそっとじ。

前も書いたけど自分の知っているものの話を聞きたいという人は割と多いっぽく、KVM の話とかはまさにそういうだった模様。Podcast の人気を高めたいのであれば聞き手が知っており、かつ他人はそれを知らないと思っている、という程度の疑似ニッチを紹介するのが良いのだろうが、そういう圧力とは戦っていきたい所存。他人の関心に引きずられるべからず。

 

Link: amakanサービス終了の経緯 | r7kamura on Patreon

via amakanサービス終了の経緯 | r7kamura on Patreon

シリーズ情報は誰かが提供してくれるものではないため、書籍の名前、カテゴリ(漫画、ライトノベル、雑誌など)や作者を amakan 側で解析し、良い感じに分類するということをやっていました。

前のチームにいたとき、漫画のタイトル(など)からシリーズを検出してまとめるコードの日本語対応をしてちょと頼まれ、適当に正規表現を書いた記憶がある。リンク先にも書いてある通り、書誌情報にはシリーズ番号が入っていることもあるが、入ってないこともあるのだった。

元のコードに正規表現やその他の細かいコードを足せば大体動いたが、それなりに奇妙なケースもあって (1上、1下... 3上、3下 みたいなのとか)、そういうのをちゃんと動くようにしたかは覚えていない。最後に計算量を変えるような微妙なコードを書いたがレビューされなかった、やんわりとした悲しみが残っている。

そのバッチは Cloud Dataflow の前身 FlumeJava で書かれており、自分が書いた唯一の production big data コードとなった。まあ正規表現なんだけど。

Flume みたいな並列のコードからガバっと叩いてバッチでデータ処理してもびくともしない Megastore だか Spanner  だかはすごいな、という感想を持った。

先送り

|

いつもはこの blog を年末にまとめて公開していたが、書いてから人に読まれるまで時間を挟みたい意図が年末に近づくほど薄れてしまうのがいまいち。しかも Podcast などの影響で自分のことを認知する人が増えてしまい(いいことのはずだが)、居心地の悪さが閾値を超えた。

ので 2018 年分は 2020 年頭か 2019 年末あたりに公開することにしたい。年末の方がヒマでいいかな。たぶん。

人に読ませるものを書く気が一層薄れそうだが、人に読ませるものを書かないというのは当初の目的の一つだったのでそれで良しとする。コンテンツとしての自分の価値を高くしないのは、精神衛生を保つ上で重要な指針に思える。Podcast だけで十分。

What To Give Up

|

来年の目標などについて考えつつ、まとまった量のコードを書きたいなあとぼんやり思う。

あ、愚痴なんでそっと読み飛ばしてね。

自分の大きな行動指針は生涯被雇用可能性の最大化である。いや最大化は嘘だな。可能性を十分に大きく保つこと、という方が正しい。それなりに稼がないといけない事実を踏まえると、今は十分に大きくない。

時代遅れかつ偏りのある身なので、現代的なメインストリーム技術への追従が喫緊の課題。一番大きいのは ML だけれども、クラウドとかのサーバ側も期待値がないとはいえさすがに足りてない。本職なはずのモバイルについても期待値を満たせていない。

けれど追従にばかり時間を使っていると他に何もできない。

これを作ったといえるソフトウェアを、自分は持っていない。仕事で中心的な活躍をしているなら、その仕事の成果を自分の成果に数えてもよいと思う。会社員プログラマの王道とも言える。しかし自分はちょう下っ端。チームの成果を名に冠するのはあまりに詐欺っぽい。レジュメの方便にはともかく自分がそれを信じられない。更に悪いことに、自分が仕事で発揮するインパクトはチームをうつるたびに小さくなっている。今のチームに長くいたところでより大きな仕事ができる気もしない。

それは実力の現れなので仕方ないのだが、結果として自分を代表するコードというものが存在しないのは悲しい。別に a billion users とか state of the art とかじゃくてよいのだよ。ただ「これが自分の実力」と言える何かがほしいだけで。

仕事がだめなら仕事の外で何か書こうじゃないの、と思っても先の追従作業が邪魔をする。

追従作業はそれ自体は何も生み出さない。追従作業と何か書くプロジェクトを被せることもできない。端的にいうと自分が ML 絡みでなんか作ろうと思ったところでゴミしかできないし、より現実的には何も完成しない。これは過去に体験済である。

モバイルはもう少しマシかもしれない。でも全部をつっこんで作りたいアプリとか、別にないんだよね。あんまし興味ないのと、それ以上に自分が規模のあるまともなアプリを E2E で作れる気がしていない。完成しないとは思わないけれど、ゴミができるとは思う。これも過去に体験済である。もっかいやってみろという話もあるが。

やはり自分の経験は技能と照らし合わせ、できると思える主観的な確率が 50% くらいないと厳しい。ML は 1%, モバイルは 20% くらいしかない。クラウドを絡めたサーバサイド主体の何かだと、そのあいだの 5% くらいだろうか。自分が 50% くらいできると思えるプロジェクトは古臭い題材ばかり。

そうした古臭い題材のプロジェクトはけれど、やれば楽しいし満足すると思う。成功の見込みは、主観で 50% だから現実にはその半分くらいでまあ失敗するだろう。でも趣味のコードなんて完成しなくてもそこそこ達成感はある。

ただその対価としてまた 1, 2, 3 年と時代との距離ができてしまう。ただでさえ時代遅れなのに、その追い打ちは高くつきすぎやしないか。運良くなにか満足いく成果が出たとしてもダメージはでかいし、失敗した日には何も残らない。しかも失敗しがち。

自分の「追従作業」がもたらす未来も、特段明るいわけではない。ML にキャッチアップすると言ったってすごく基本的なことをできるようになるのがせいぜい。現実に ML エンジニアになれるわけではないし、より遠回しな形で仕事が ML に近づける見込みすら、さして高くない。せいぜい仕事で手伝っているシステムの奥の方にあるブラックボックスの暗闇に、ちょっとだけ目を慣らせるというだけ。必要なことだと思うけれどもエキサイティングではない。

古臭い趣味プロジェクトを楽しんで雇用を危機に晒すか、届くことがないであろう将来への距離を空しく縮め続けるか。そんな二択。というか現実的には後者一択。

ヒット作を連続する超スタープログラマを別とすると、多くの「名を冠する」コードは書き手のキャリアが一番明るいときに書かれているように見える。そんな時期があったとして、自分は何をしていたのだろう。わかんない。どうでもいいブログを書いたりしてたのだろう。今だって時間ないとかいいつつ Podcast をやっているわけで、自分の名を関しているのはそうしたコンテンツやメディアであってコードではないのだろうな。

これは我が体を表していると思うし現状として受け入れているけれども、この先もずっとそうなのかと思うとだいぶ悲しい。


年末だからと将来のことを考えると暗くなりがち。程々にして、また目先のことに気を取られつつ暮らしていきたい。

My "Things I Don’t Know"

|

Things I Don’t Know as of 2018 という記事がよかったので真似してみる。

個々の説明を長々しても仕方ないと自分は思うので、ざっくり 3 つくらいの「知らない」レベルに分けてみる。すなわち 1. なにそれ. ニュース記事とかで名前と三行説明を読んだくらい。 2. 聞きかじり: 何らかの入門的文書は読んだことがあるが、さわったことはない。3. ハロー: ハローワールドしたか、何らかの必要に迫られて数行触ったくらい。

元記事とおなじく全てのソフトウェアテクノロジをカバーしているわけではない。なので個々に載ってないからと言って知っているわけではないものはたくさんある。あと元記事では「ネットワークスタック」「関数型言語」みたいな「さわる」を定義するのが難しいものが混じっているので、そういうのは省いたり具体的にしたりした。ウェブの細かい要素技術はどうでもいいのでだいぶ省いた。かわりに Technology Radar を眺めたらちょっと補った。

ではスタート!

  • モバイル:
    • React Native: 聞きかじり
    • iOS: なにそれ. Mac 持ってないし...
  • ウェブフロントエンド技術:
    • Webpack: なにそれ
    • Modern CSS (Flexbox and Grid): 聞きかじり
    • React: 聞きかじり
    • GraphQL: 聞きかじり
    • Electron: むかしハロー
  • サーバサイド
    • Docker: ハロー
    • Serverless: 聞きかじり
    • Kubernetes: 聞きかじり
    • Istio: なにそれ
    • Rails: すごい昔にハロー
    • クラウド全般: EC2 と S3 くらいをのぞくとだいたいなにそれか聞きかじり。
    • Deployment pipeline 全般: 聞きかじり
    • Logging, monitoring 全般: なにそれ
    • Hadoop 全般: なにそれ (プロプリエタリな類似品についてもなにそれ)
    • CI Platform 全般: Travis のみ Hello, あとはなにそれ
    • 他にもなんかある気がするが知らないので列挙できない
  • データベースっぽいやつら
    • ハロー: MySQL, Mongo
    • 聞きかじり: Redis
    • なにそれ: Postgress, ELK, etc.
    • まったくわからん。しいていえば SQLite ちょっとできるかもな・・・。
  • ML
    • TensorFlow: ハロー
    • PyTorch: 聞きかじり
    • 他のツールやフレームワーク: なにそれ
    • RL: なにそれ
    • Sigh.
  • ゲームエンジン全般(Unity, Cocos2d, etc.): なにそれ
  • ランダムな新しいもの
    • Cryptocurrency: なにそれ
    • Quantum Computing: なにそれ
  • ランダムな古いもの
    • アセンブリ言語: ハロー
    • FPGA: 聞きかじり
  •  プログラミング言語は多すぎてキリがないのでざっくり。
    • なにそれなプログラミング言語たち: Swift, Elm, Elixir, etc.
    •  ハローなプログラミング言語たち: Rust, Go, Scala, ES6, TypeScript, Obj-C, Scheme, Haskell, Erlang, etc.
    • プログラミング言語はハローの敷居が低いね。一方でハローと実用は遠い。


現代的ソフトウェア開発をしている人が見たらこの人大丈夫かと首を傾げるかもしれない。が、今の所大丈夫ですよというのが話の趣旨なのであった。元の記事は Facebook で React を作っている有名人らしい。そのへんのおっさんはともかくスターがいうと説得力がある。

自分の場合、ほんとに大丈夫なのかと言われると言葉に詰まる。サーバサイドやりたいなあ、機械学習やりたいなあ、とか思いながら行動には移さずぼんやり Android してます。色々触れる仕事は遠くなりにけり。

追記

自分の知らないことを書くのに気が乗らない理由の一つは、こういう上から教えたがりさんに絡まれる可能性への億劫さだと思う。

Comments and Commit Logs in English

|

プログラマと英語その 3 くらい?年に一回くらい書いているので今年も backlog を消化しておく。

コミットログとコメント。自分はこれを日本語で書くのはないわーと思っており、強制された場合を除き日本語で書いたことはないし、日本語のコメントをみると拒否反応が出る。最初の勤務先ではコミットログは日本語だったかも。覚えてないが・・・。

実際のところ日本語だめなのだろうか?オープンソースで世界中の人に使ってもらいたい!とかいうときはやめといたほうがいいと思うが、日本で日本人と働いているとして。コメントもコミットログもコミュニケーションの手段なわけで読み手に親切な方がいいし、不自由な言語で書いて間違ってたりしても厳しいよね?

自分はもう完全に適応してしまっため日本語で書くのは無理な気がするし幸い必要もないけれど、昔なぜあんなに英語で書くことにこだわっていたのか思い返すと不思議。まあすごいダメなコンパイラが死ぬ、みたいな可能性が昔は一部の言語であった。しかしそれほんと昔の話だし、一部のダメな言語 (C  とか) くらいからねえ。

なんとなく美しくない。気分としては完全に理解できる。しかし説得力には乏しい。

むかし無駄に下手な英語でコメントやコミットログを書いている自分を、同僚たちはどう思ってたんだろうね。想像すると若干肩をすくめてしまう。ごめんね。

過去:

来年以降のキャリアをぼんやり考える

|

これは来年の目標や計画をたてるにあたっての braindump である。

メタな話として、長期的な見通しを考えると同時に目先の仕事のがんばりにも気を配らないとだめだな、というのが今年仕事をがんばってみた上での感想。先のことばかり考えると足元を掬われる。あと人生のフェーズ的に将来の話ばっかりしてる段階でもない。

といいつつ大局的な話をまず考える。

Android の仕事について

  • Android プログラマ、もうだいぶ旬を過ぎた感はある。世間的には Android 固有でハードコアなことをするより iOS と両方できるようになったり React Native なり Flutter なりでクロス OS 開発をしてみたり、あるいは Web のフロントエンドもできますよ、みたいな人が重宝されるフェーズに見える。専門家はまだ必要だが、足りてる。
  • これは少し前に一部のサーバ側の人が「フルスタック」すなわちサーバ側のコード書きと JS と Devops を期待されたのと同じ状況と言える。そして Android に限らず iOS や JS プログラマも同じ立場に置かれているだろう。フロントエンドが converge するフェーズと言ってもいい。クラウドやマイクロサービスみたいなやつの隆盛にともない一部サーバ側のスキルセットが細分化しはじめているのとは対象的。
  • 大企業で働き細分化された仕事をしている自分と、このフロントエンドの統合・雑用化はだいぶ相性が悪い。

ML とクライアントサイド

  • ML はデータがサーバサイドにあるのでどうしても主戦場はサーバ側になりがち。ただサーバ側にせよクライアント側にせよ高い ML の専門性がないとどのみち ML 仕事はできず、そうでない下々がモデルをつくることはなくデータや UI をつなぎ込む仕事が主に見える。そして自分が現実的なタイムラインで ML の専門性を身につけられる見通しは薄い。
  • ML 周辺プロダクション仕事だと、サーバ側はデータを持っているのでトレーニングがある。クライアントにはない。一方でクライアントは on-device inference をすることはしばしばある。そのインテグレーションには多少新しい難しさがあるように見える。クライアントサイドのプログラマとして ML に近づいていくにあたり、これはできるようになっておきたい。
  • ただこういうインテグレーション業というのは本質的な難しさではないので、時間とともにプラットフォームやツールが整備されて有り難みは薄れるであろう。やる必要はあるが、あまり多くは期待できない。サーバ側の人もまあ似たようなことを考えていることでしょう。
  • その上で勉強する ML とは何なのか。教養だな。まあデータベースも OS も自分で書かないのと同じ。

Computational Photography と Computer Vision

  • 自分は Computational Photography の根本にあるすごい良い/面白い絵をだしたい、という情熱がまったくないので、この分野に踏み込んでいっても先には進めないと感じる。
  • 隣接領域である Computer Vision はより ML に近くホットだし、自分ももしかしたら Computational Photography よりは熱心に取り組めるのではないかとも思うが、一方でほんとに実用化されるんかいな、という疑念もある。Computational Vision の近代的な主要ジャンルの一つ AR, まったく流行りそうにないじゃん。もちろん画像認識はたくさん応用されているわけだけれども、クライアントサイドに限ると AR くらいしか用途がなく、今のところ流行る様子がない。若干 over-promise/under-deliver な印象。
  • 一方で Computational Photography はニッチではあるが確実に deliver している。そこはすごく良い。ただしこれはジャンルの問題ではなくリサーチ勢が偶然めちゃ優秀だっただけ、という可能性は否定できない。
  • ただ画像なり音声なりのセンサーデータ相手に ML するのはクライアントサイド最後の砦なので、AR というラベルでは流行らなそうでもいちおう近くに立っておく必要はあるのだろうなあ。という意味で下地としての CV は盛り上がらないなりの必要性を感じる。

その他クライアントサイドの要素技術

  • iOS はまあ自分がやってもしゃあないな、というかんじがする。Android 以上に飽和してそう。iOS の強い日本はどうなのだろうね。Web は自分の過去の経験を活かすには良いが、iOS 以上に人が飽和してそう。
  • React Native などクロス環境は需要はありそうだが、やるなら RN の中に詳しくなる方向で、上でアプリ書くのに長けても自分的には仕方なさそうだな。
  • クライアントサイド、今は iPhone 前のウェブみたいな停滞期なのだろうね。

サーバサイド

  • クライアントサイドに比べるとコンテナだサーバレスだマイクロサービスだとここ数年賑やか。主要な関心は: クライアントサイドのプログラマが E2E でなんかする上で触れるようになっとくにはどのへんまで見れればいいのか。
  • フロントエンド勢として Firebase みたいな Baas の末裔に親しんでおく?フリーランスやモバイル大好きっ子ならいいけど、自分はどうかな。
  • なんとなく GKE にバイナリプッシュするくらいはできた方が良い気がしているが、余興でやるにはインフラ力なさすぎて辛い感じはする。一方で GAE / Heroku とか趣味にはいいけど会社員として需要あるんかいなとも思う。
  • みんなが Rails なり Node なりを使っていた時期に比べ個人のツールと企業のツールが再び乖離しはじめたように感じるが、クラウドベンダの宣伝に騙されてるだけかなあ。
  • 机上の空論するより Hello world した体感で判断するほうがよいのでしょうな。


次の自分に目を向ける。

プログラマ基礎力

  • 専門分野(自分なら Android アプリ)でそれなりに規模のあるものを一から設計実装できる。これがプログラマとしての一人前の働きだと思うが、今の自分はできる気がしない。
  • 能力としての不足だけでなく、これをやりましたと言える成果がないのは対外的にもよろしくない。
  • 会社員ならこの能力は本来なら課外活動より仕事で出世する過程として身についていないといけないのだけれども、自分はできてない(し出世もしてない。)
  • 課外活動でやるなら他のあらゆる活動を止めて時間をつっこまないとできる気がしない。
  • ジャンルにも旬があるので、一から実装すればなんでもいいというものでもない。極端な例をだすなら C 言語で SVG レンダラを実装するとか意味ない。
  • こういう合理性とは別に、自分でまとまった量のコードを書きたい、という欲望もある。
  • 仕事や他の活動とうまく紐付けてやる気や時間を生み出せないか。

プログラミング言語

競技技能

  • すごい人になる必要も可能性もないが、たまには筋トレしないと心細い。
  • US で転職するなら必要。

転職

  • US で転職しても仕方ないという心境。収入の都合で大企業でないといかんけれど、大企業じゃできる仕事の種類は今とかわらない失望がある。そしてどのみち大企業への転職可能性はまったく自明でない。
  • 一方でこのあたりでで暮らしていくなら中小やスタートアップは選択肢にならない。
  • 一定程度資産を形成したのち東京に戻れば金銭的なプレッシャーは減る気がするが、そのときおっさん雇ってもらえんの?などいまいち盛り上がれない。準備として日本語圏での可視性をがんばる、とかも気が乗らない。出羽守してもねえ。
  • なのでほんとにイヤになるかクビになるまで今の職場で働けばいいかな、と考えがち。

そのほか課外活動

  • Podcast どうすんねんという。もうちょっとプログラマとしの自分に有意義な内容に近づけられないか。そうでなければつっこむ時間を減らすべきではないか。
    • 仕事に近い論文を読むの自体に意義はあった。
    • コード読み、はぼちぼちやっていきたい。
    • コード書きをコンテンツ化できないものか。しかしこれは向井さんを巻き込むには無茶ぶりすぎるよな。
  • 英語はやらなすぎて衰えている。なんとかしないといけない。
    • Dedicated な時間にかぎらず、他のアクティビティ(特に仕事)に混ぜるのを復活できないか。

目先の仕事

  • これは別枠で考えます。
  • この braindump をみて思ったことだが、自分は目先の仕事でなく転職や課外活動などを中心にしすぎている。このバイアスは正さないと雇用が危うい。資源が限られているときは目先の仕事重要。

 

家でも非同期コミュニケーション

|

ゆこっぷ(奥さん)が子と添い寝をするようになって夫婦の会話が不足がちになったので、あるときから文通をしてみることにした。半年くらい前。メディアとしては例のごとく WordPress を使っている(二人ともブログ世代なので。)一つのサイトで運用。

今は休暇中だし、子供の相手をしながらなんとなく会話をする技術も向上してきたので以前ほど頻度はない。それでも少し立て込んだ話をするのには文章でコミュニケーションした方が良いことも結構あり、そういうときは重宝している。(たとえば家電製品のマニュアル PDF  のスクリーンショットをとって張り、昼間にここみて XX しておいて、と頼むなど。あるいは Amazon にある子供おもちゃのリンクを複数張り、レビューサイトへのリンクもはって引用をコピペし、これはどうだろうかと言うなど。)あと仕事の昼休みとか朝早くとかに書いておける非同期性も助けになる。

たぶん普通だとソーシャルメディアでグループ使うとかの方が良いのだろうけれど、ブログはソーシャルメディアにありがちな他人のノイズがないのは良い。文通、という感じがする。あとから見返す楽しみがあるのもよい。あとチャットはチャットで使っている。でも情報量に応じてメディアを使い分けるほうが良い気がする。

Review 2018 / Work

|

今年は自分比でいつになく仕事をがんばったので仕事について考えることが多かった。稿を分けてなんか書いておく。

自分について

  • とにかく集中力とか生産性が低く struggle している。今年は多少立て直せたが、今よりだいぶキチキチ働けるようにならないと雇用が危ういというか成果出せんわ。
  • 自分でやろうと思ったことは軒並み失敗し、目先の性能バグをひたすら直すことで評価された。この状態は sustainable でないかんじがする。物理的に胃が痛いし。
  • バグ直し以外で成果がでなかったのは単純な能力不足以外に
    • プロジェクトのまずさ:好奇心優先で成果を軽視していた。
    • コードベースの不理解
    • 締め切り、関係者の多さにともなう調整能力不足
    • より一般的に、ある程度規模のあるものを計画する能力の不足
  • などがある。まあ最後の項目の subsections がその上の3つなわけだが。これは自分の給与水準的にはまずい状態なので、なんとかしないといけない。
  • Android の性能まわりについてはある程度詳しくなった。ただ所詮仕事のアプリで問題になる範囲の話なので小さなサブセットではある。たとえば描画が遅いとかネットワークが遅いというふつうのアプリでありがちな問題は仕事のアプリにはない。まあ前のチームである程度やったからいいといえばいいけれど。

チームについて

  • コードは、不満はあるけど前よりはだいぶマシ。開発プロセスとかの未熟さを照らし合わせるとこの水準は偉いとすら言える。古株の TL がんばったね。
  • 開発プロセス。会社の Monorepo になったのはまえよりはいいが、ハードウェアや OS の文化に引きずられるせいか、どうにもならないモダンさの欠落があってそれは辛い。それの辛さを共有できる人が少しはいるのが救い。一方でそっちの文化になれてしまっている人も結構多い。
  • ただ古いプロセスなりに機能はしており、崩壊してるはない。Bugtracker とかちゃんと triage されているし。ただこれは完全に TPM 個人の hard work に依存しているので、そのひとが burnout したりするとやばい可能性あり。
  • あと OS やデバイスべったりである厳しさの対価として Android にありがちな古い OS や奇妙なデバイスへの対応とかがないのはとても良い。
  • チームの human side. 淡々としている。あと English native speakers と non-native speakers というか喋らない Asians の間にうっすらとした壁を感じる。面白いことだが、これは non-native speaker の数が多い故に発生している壁に見える。要するに我々 ESL Asian はあまり chitchat に参加しないわけだが、chitchat に参加せず淡々と働いてる勢が一定数を超えると chitchat してる人々との間にコミュニケーションの境界ができる。一方でそれが嫌かというとそんなこともない。自分とか 5 時で帰らないと行けないのであまり chitchat してもいられないし。ESL でない流暢で社交的な Asian 数名がこの境界を取り持っている面もある。
  • 相対としては、すごい functional なチームだ!というかんじもないけど dysfuncdtional というほどでもないかんじ。我ながらえらそうだなー。

製品について

  • なかなかクールで良い。まあ概ね research の人々の成果だし、アプリのレイヤにしても自分はほとんど貢献してないので特に胸を張る感じでもないけれど、それでもなにかクールなことが起こる瞬間を比較的近くで目撃できるのは良いものである。

 

Mercari IR

|

メルカリ上場していたのか! というのを UK 撤退だかのニュースで気づく。IR をぼんやり眺める。

  • 日本の売上ちょう伸びてて減速する様子なし。すごいね。
    • GMV の 10% なのは手数料が 10% だからなんだね。
    • 社員 1300 人で売上 10B JPY /Q ということは、一人 30M JPY / Y くらいか。
  • US はだいぶ微妙。日本の売上の 1% くらい?びゅんびゅん伸びてる、というかんじでもない。まあノイズが多いフェーズといえる。
  • こんなにガンガン売り上げているが利益は出たりでなかったりの Amazon 方式。
  • 人件費増えてます、というが他の色々の方が支配的だね。これならまだガンガン雇いそうな雰囲気。そしてコストのうちどれくらいが US とかの海外対策なのか気になる。
    • Personal expenses は 1B JPY / Q とあるがよくわからないな。1B JPY / Q =- 4B JPY / Y だとプログラマ 400 人に 10M JPY / Y 払っただけでおわってしまうよね?社員 1300 のうちどれくらいが開発部門なのだろうか。
  • 広告費の割合が減ってるのはすごい。

とにかく日本での伸びっぷりおよび売上がすごい。US やめて人増やすのも遠慮すれば超高収益企業になりそうだけど、そういうノリではなく博打継続中なのだろうなあ。今のところ見込みのある博打には見えないが・・・。


日本のソフトウェア企業が米国進出するの、自分は最初の勤務先がそれ(など)で潰れかかったのでまったく成功する印象がない。一方で DeNA とかが一時期ヒット作もありやばくなったらさっさと撤退したのを見て、単に突撃してきて失敗する時代は終わったのだと感心したのを覚えている。Mercari どうなるかな。

プログラミング言語の習熟

|

C++ を書いていると、数年のブランクがあるにもかかわらず妙な安心感がある。自分は間違っていない、というと語弊があるが、自分の間違っている程度を自分はわかっている、というような。コードの質もなんとなく高い気がする。

仕事で Android アプリの Java を書いているときはそこまでの confidence を感じない。そこそこだろうとは感じている。

Python とか JS を書いていると、我ながらこのコードはダメだなと思う。しかしどう良くしていいか検討もつかない。似たような話を前に書いた気がする

最近のモダンメインストリーム言語、すなわち Go, Swift, Rust, TS とか全然使えない。Kotlin は Better Java として使っている範囲ではそこそこだと思いつつ、Kotlin を活かしている感じはない。

自分は学生時代、 C++ の習得に莫大な時間を費やした。学生時代後半から会社員になってしばらくは Java もそれなりに熱心にやった。そうした取り組みは自分の言語への fluency や confidence にはっきりとつながっている。何らかの新しいプログラミング言語を、同じくらいとまではいかないけれど十分な fluency や confidence で使えるようになりたいという願いがあるが、なにもしていない。

機械学習をやりたいとする。プログラミング言語の観点から見たらやるべき言語は明らかに Python である。一方で良い機械学習プログラマは良い Python プログラマなのか。いまいちそんな様子はない。Python 経験者が ML 界隈で特別重宝されている様子もない。むしろ、あまりがんばらなくてもなんとなく使える Python の性質が ML との相性の良さの一つになっているようにすら見える。なので ML 修行の寄り道として Python 真面目にやるか、という気分にはなりにくい。そんなにモダンでもなく、したがってさほど面白い言語でもないし。隣接する Computer Vision や Computational Photography に至っては C++ だし。もういいよ...

Android プログラマでいるにあたり Kotlin に詳しくなるのはいいような気もするが、Android プログラマでいるという事実にそんなに深く踏み込んでしまっていいのか。自分は根本的に Android への reservation があるためあまり盛り上がれない。そして Kotlin.js や Kotlin Native といった Android 以外での Kotlin の活躍を、自分は信じていない。ついでにいうと JVM もそんなにすきになれない。

Go. 自分がサーバサイドで何かできる見込みが薄い上に言語としてもさほど面白みがなく、盛り上がれない。サーバサイドやらない人が Go やるとなるとどうなるの?コマンドラインツールでも書くんだろうか。

TS. ウェブとかやるの?いまさら?まあやればいいのかもだけど。JS まわりほど技術習得の不毛さが際立つ世界ってなかなかないよね。

C++ 出身者にとって Rust はある意味理想の言語だ。ただ使いみちあんまりないよね。それこそコマンドラインツールとか、なんらかのシステム系のプログラミングをするにはいいんだろうけれど。ブラウザやってる人にはいいだろうね。システムプログラミングというマーケットの性質もあり、他のモダン言語と比べると若干メインストリーム感に劣る。そして仕事で触れる可能性はほぼゼロである。

Swift, は自分的にはぜんぜん圏外なのでどうでもいい。(言語の良し悪しではなく守備範囲として。)

・・・などとどれも決定打に書き、そいつらに詳しくなるくらいなら機械学習系の勉強でもするわ、みたいな気分になってしまう。

でもさー。プログラミング言語に詳しくなるってそういうことじゃないじゃん。もっと打算を超えた勢いとか愛とか執着みたいなもので過剰に時間を溶かした結果として無駄に詳しくなるわけじゃん。そして時折、何らかの偶然が過剰を報いてくれることもある。そんないささか割の悪いギャンブル・ファンタジーがプログラミング言語への精通というもの。

・・・というと極端すぎるな。マイノリティー言語への習熟はギャンブルかもしれないが、たとえばいま Swift や Kotlin や Rust や Go をやってる人はそれぞれ iOS や Android やブラウザ/システムプログラミングやサーバサイドのしごとをしていて、そこで前に進む歩みの一つとしてこれらモダン言語に習熟しようとしている。なのでいうほどギャンブル要素はない。

自分がモダン言語に腰が重いのは、1) 仕事であるはずの Android に愛がない 2) ワナビーである ML や CV にモダンメインストリーム言語がない 3) 打算的すぎる、の組み合わせの帰結といえるかもしれない。

打算を超え一つの言語に入れ込んで、その大好きな言語で流暢にガガガっとコードを書く、という憧れがある。ただ勢いも根性も足りてない。という愚痴。

2018 Review

|

ふりかえる。

昨年末から今年頭に病床していたため目標とか立ててない。しかし病気がちな上に仕事の人事考課スコアが下がったりしたもんだからどのみち目標どころではなかった気がするが。

大きな出来事

  • 共働きから片働きへ。決断に伴う気分は複雑だったが、生活は楽になった。炊事がほとんど出来ないのは若干寂しい。週末ちょっとやってるけど、やはり買い物から E2E でやらないと達成感ないね。金銭的にはまあ、大丈夫です。
  • 病気色々。主に年初。辛かった・・・。子供がいると健康を維持するのは大変と知る。うつされるし休めないから。
  • 人事考課下落、それにともない心を入れ替え真面目に働く。真面目に働きたいのかと言われると mixed feeling だが、仕方ない。いままでだめすぎた。
  • Podcast. こんな巨大な時間のコミットメントをしてしまっていいのか今だによくわかっていないが、人生には思いつきが必要ということでまだ続けている。

仕事

  • 性能の専門家になったなと思う。これは自分が性能に詳しいというわけではなく相対的に何も出来ないのでこうなってる。比較優位。
  • 色々不満もあるが少しは興味深い部分もあるし他にできることもないな、というかんじ。
  • 仕事日記は頻度は落ちたが続けている。就寝が早まったのであまり書く暇がない。

業務外活動

  • 片働きになったから時間ができるかと思いきや、生活に時間を奪われて割と何も出来ず。Podcast は締め切りの力で若干無理しつつ継続できた。結果として他のことはいよいよ何も出来なくなった。
  • ここ一ヶ月くらいの早起き活動は絶望的な時間の無さを救ってくれている。どれだけ継続できるかは未知数。
  • 機械学習との距離は、去年より大きくなってしまったなと思う。

子供

  • 概ね順調に育っており胸をなでおろしている。
  • 歩けるようになり、言葉もしゃべり、人間になったので張り合いがある。
  • プラス去年よりは生活に余裕があるせいもあり、細々した外出が増えた。
  • 変化が速いので自分の準備が後手に回りがちなのが不安。
  • かわいい。

目標達成度

  • 目標を立ててないのでアレだが、たててもきっとゼロだったんじゃないかな。日々の実感から高い期待値を持つのが難しい。クビにならずひどい病気にもならずに生き延びられてよかったね、という気分。

英語

  • 以前は毎年英語学習について何らかの目標をもっていたが、今年はなにもなし。結果として若干退行気味。悲しいがやむなし。

去年。

(Audio)books 2018

|

聞いた/読んだ本備忘録

途中で挫折

くじけた本については、1. アメリカ辛い話は去年含め聴き疲れた。精神衛生に悪いのでもうしばらくパス。2. Behavioral economics 周辺も食傷気味。3. 育児系は飽きがち(子育てに飽きたという話じゃないよ)。4. Malcolm Gradwell は podcast を聞いた後だと間延びしてて退屈してしまった。など。CV 系は途中でやめてるけど途中まででもそれなりに得るものはあったかな。

電子書籍仕事をやめたせいか、去年と比べ今年はあんまし本聞いてないね。来年はもうちょっと読んだり聞いたりしたいもんです。ちゃんとした教科書を一冊も読めてないのも無念だけれど、論文読んでると無理。

職場における自分個人の進行管理

|

締め切りの存在や打ち寄せるバグの波と戦うべく個人レベルのプロジェクト管理的なものを真面目にやる必要性を感じはじめ、どうすべきかと考える。道具に頼りたい性格なので、のっかるツールやアプリの選択に思い悩む時間が長い。

何度か書いているが勤務先にはまともなプロジェクト・タスク管理システムがない。一番近いのは bug tracker. ただしこいつは内製で、市販品と比べ出来が良くない。なので今まではテキストファイル (というか Google Docs) に目先のリストを書き出したりしてたが、それはそれで破綻しがちだった。現実問題としてこの tracker が組織の source of truth である事実から逃れることはできない。なのでへぼいなりに受け入れてみようと決めた。

まずは真面目に使ってなかったマイルストンとか優先度とかをちゃんと書いたり、タスクを以前より細かくバグにして登録してみる。わるくない。TPM 氏も喜ぶであろう。が、まだ日々のワークフローを支えきれる感じがしない。すなわち自分のやるべき仕事リストや優先順位などの source of truth を tracker に突っ込みきれていない。

何らかの bug tracker を個人のタスク管理に使うにあたる大きな問題のひとつは、(組織の)バグトラッカーを(個人の)タスク管理に使うギャップにある。自分は個人的なメタデータをタスク/バグに紐付けたいが、それをチームに見てほしいわけではない。たとえば「このバグよくわかんないからほっといて風化してもらおう」みたいな意思決定は表立って伝えたくない。ほかには自分の目先の優先度(例:今週やる)と、チームの優先度(例: 次のリリースまでにやる)はだいぶ粒度が違うが、tracker の優先度はチームの事情でつけられているので自分の好みで勝手に付け替えられない。

アジャイル!とかいいだすとそういう組織と個人のギャップを埋めたツールを作ろうとしたりするわけだが、今の自分の関心ではないのでもっと適当にやりたい。

そんななか tracker のドキュメントなどをじっと睨んでいたら、このギャップを乗り切るための機能がみつかった。

一つは hotlist(label) の ACL. すなわち自分にしか見えないラベルをバグにつけることができる。これで組織の粒度から切り離した個人粒度なラベルを付けられる。いいじゃん!というわけで「すぐに見て返事する(バグの分析など)」「今週やる(主な仕事のコード書き)」「小さい暇ができたらやる(クリーンアップとか)」に相当するラベルをつくり、目先のバグを割り振る。ほんとは自分にしか見えないコメントとかもつけられると最高なんだけど、文句はいうまい。

もう一つの機能は、機能というよりは運用なのだが、申請して自分専用のバグ component (カテゴリみたいなもの)を作ることができる。つまり「製品 X のアプリのバグ」というかわりに「自分のバグ」を登録できるようになる。(製品単位でなく組織全体で一つの tracker を共用している事実を思い出されたし。)結果として自分のタスク(例:経費精算する)とチームの製品のタスク(例: このバグを直す)をフラットに管理できる。いいじゃん!これだよこれ!

GHE とかだったら自分のアカウントで適当な repo をつくってその issue を使えばいい話だろうから何も特別ではない。でも大企業の古臭い内製 tracker の運用上の工夫が bureaucracy 的かったるさを回避させてくれた事実は appreciate してもいいのではないか。

仕事タスク管理に希望の光が挿した年の瀬。来年も会社員やってくぞ!

TabCopy

|

Firefox 生活は思わぬ形で早くも終わりを迎えた。すなわち・・・ TabCopy がない!みんなこれなしにどうやってメモやブログを書いてるんだ、というような重要機能なのだよ自分にとっては。

ブックマークレットとかで適当にちょろまかせる気もするが・・・

まあクリップボードにコピーするのは手動でもいいかもだけど、いずれにせよヒマなしにつきまた今度ということで。

Playing With Firefox

|

実験的に Firefox に乗り換えてみる。Chrome に不満とかではなく Edge 逝去にともなう完全な気まぐれ。自分は Chrome を使う前は Firefox を使っていたのもあってか、特に大きな不満はない。メジャーなデスクトップブラウザ、どれもだいたい良く出来てるからね。

細かい感想を書いてみる

  • フルスクリーンの挙動は Chrome より良い。自分のようにすべてのアプリケーションをフルスクリーンで使いたい人間には重要。なおこれは Linux 限定の話で、Mac では Chrome もまともに動く。
  • Built-in でスクリーションショットが取れる!これはいいかも。
  • CPU 消費はどうかな。ちょっとマシかもしらんが大差ない。メモリはさすがに控えめっぽい。メモリ8GB だった XPS13 も Firefox 使ってたらもうちょっと長生きできただろうか・・・。
  • Bookmark Sync はバックアップがてら on にしたが Android で Firefox を使う気は起きないのでありがたみは薄そう。逆にいうとブラウザ乗り換えはモバイルとデスクトップ同時にやらねばならず、それはかったるいね。これは今やブラウザに限らないが。
  • サイドバー。表示してみたがコンテンツの immersion を妨げる、というか要するに邪魔くさい。デスクトップの横長の画面とコンテンツの縦長最適化の溝を埋める施策としてアリだとおもってたけど、実際さわるともうひとがんばりしてほしいという感想。Vivaldi の tiling, 他のブラウザもやんないかなあ・・・。
  • New Tab Page に Pocket. こりゃないわ。個人的にはプライバシーもいいけどそれよりユーザのアテンションを大切にしてほしいので、こういう feed をつけて engagement みたいな路線は嫌い。だから Chrome の feed も好きでない。こんなもん真似しなくていいのに。ただオプションで完全に消せるのは良い。(Chrome だと完全には消せない。)
  • Extension. パスワードマネージャと OneTab だけ入れた。Firefox, extension の強力さが売りだった気がするがあまりピンとくるものはない。もともと自分がカスタマイズ志向じゃないからかもしれない。
  • 英語版をダウンロードしたせいか英語で Ubuntu をつかっているせいか、Gmail で日本語のスペルチェックが壊れている(というか日本語がすべてスペルエラーと判断される。) スペルチェックを切って解決。これに限らず spellcheck は全然ダメね。
  • ウェブの中は速いのかもだけど、UI あんま速くないね。XUL のせいだろうか。サイドバーのブックマークとか笑っちゃうくらい遅い。WebRender が一段落したら同じくらいの情熱で UI も速くしてほしいね。ブラウザ、UI の速さはコンテンツの速さと同じくらい重要という事実は無視されがち。いや無視してはいないのかもしらんけど。速くはない。
  • その WebRender. 使ってみたかったけど Linux 版は有効化するフラグすら見当たらず。残念。まあ Linux の buggy な GPU の相手は後回しという気持ちはわかるので責める気はおこらない。Nightly なら使えるのかな。

個人的にはどうせなら Vivaldi くらい攻めてほしい。でもそういうキャラではないのだろうなあ。あのくらい色々ヘンなことやってくれればときめくのだけれど、Vivaldi は Gecko-based ではないから Edge 追悼にはならないのだった。あれはオープンソースでもないし。

今の所つかっていてすごく困ることもないのでしばらく試します。

Skimming OpenCV

|

opencv/opencv: Open Source Computer Vision Library

どんなコードか軽く冷やかしてみるが・・・つらい・・・。C++ で画像周りのコードをどう書くと綺麗に書けるか、という題材には向いていない。C++ は実装のための言語であって Python とか Java の binding とかが重要なのかもしれないね。

機能はいっぱいあるし特殊な CPU 命令や GPU を使った高速化とかもがんばっているぽいので、誰かが実装したアルゴリズムを呼び出すだけならさすがに良さそう。こいつをフレームワークとして自分でアルゴリズムを書くという乗り物には向いてないというだけで。

この言い分もフェアではないかな。たとえば Computational Photography のアルゴリズムを実装したコードも入っており、中を見るとまあこんなもんかな、と思えてくる。単にかっこいい C++ ではないというだけで、OpenCV の流儀を覚えればそれなりに便利なのかもしれない。

それはもはや OpenCV を参考に画像処理コードのデザインを考えるという話じゃなく OpenCV にコミットして良きも悪き受け入れるということなわけだが、そうやってる人が多いところを見ると割には合うもんなのかもね。

まあ今回はスルーするとして、やる気になったら考えよう。OpenCV 4.0 には G-API という、Halide/TF/NNAPI 的グラフでがんばるモデルもあるらしい。こういうのは学ぶ価値ありなのかもしらん。

給与改定の季節

|

下がらなかったぞ!!やーよかったよかった。これで来年も家賃とデイケア代が払えるわ。

しかし年々基本給の割合が低くなってて心臓によくない。景気が悪くなったとき勤務先はどうするだろうか。理論上は基本給以外のところを減らすのが答えの一つなわけだが、現実には不採算部門レイオフの方がふつうに見える。ボーナスとは何なのか・・・。

Link: The Friendship That Made Google Huge | The New Yorker

via The Friendship That Made Google Huge | The New Yorker

Jeff / Sanjay が長いことペアプロをしていたというのは有名な話で、以前にもどこかで読んだことがある。自分が入社したころはまだやっていたらしいが、入社後初出張ツアーで冷やかしにいったときは不在だった。かわりに Gosling がいた。ははは。(遠くから見ただけだよ。)

AI 部門のトップになると聞いたとき、TensorFlow は Jeff Dean 最後の戦いなのだという自分の予感は深まった。コードを通じて会社を支えてきたけれど、何千人もいる部門のトップになってしまったらコードなんて書く暇ないじゃん。GFS / MapReduce / BigTable とちがって TensorFlow はオープンソースになり、専用のチップも作り、会社の総力をつっこんで開発を進めている(ように見える。)最後の戦いに相応しい舞台だとは思うけれども、勝手に悲壮感を感じてしまう。

会社のために AI 部門とインフラ部門へ袂を分けた二人が、けれど月曜は朝早くオフィスにきて、かつてのようにペアプログラミングをする。かつてにように二人で互いに LGTM し、かつてのようにコードをコミットしていく。

Jeff / Sanjay がコードを書いている限りこの会社もなんとかなる、とは別に思わない。どちらかというと、組織がどんどん大きくなり、自重で崩れかかっているこんなときでも、二人でコードを書く大切な営みを一週間のなかの少しだけは守り続けている。人として大切なことをすべて投げ捨ててはいない。そんな事実に安心する。会社はともかくあの人達は大丈夫と。億万長者相手に余計なお世話だが。


テクノロジー資本主義に荒波が打ち寄せるその朝、失望したユーザの罵声と政治家の叱責が空を埋め尽くし、デモ行進の果て暴徒と化したアクティビスト社員が放った炎に二階建ての旧本社ビルが燃え落ちるなか、オフィスの片隅で二人は、いつもようにコードを書いていた。ここが遅いな。どうしたら速くなるかね。まずはちょっとコードを整理しようか。人々が投げ棄てた暗いコードベースに、小さく静かな LGTM が灯る。

悲しい話だと思いませんか。

 

Retiring

|

社内で探しものをしていたら、以前おなじチームだったプログラマが・・・リタイアしていた!FIRE とかではなく、もうちょっと普通なかんじの引退だと思われる。すなわちけっこうな年齢(推定)だった。奇妙な CPU のコンパイラの仕事をしていたことすらある、といった経歴が LinkedIn に載っていた記憶がある。コンパイラの仕事をするのが割と普通だった時代の生き残り。

そのチームは買収で入ってきた人が多く、この人もその一人だった。すごく生産性が高いというわけではなかったが、humble かつ funny で good to work with であった。彼と同じ年齢の自分には全く生産性を期待していない身として、せめて easy to work with でありたいものだと思う。

プログラマとして職業人生を全うする様を目撃する感慨って、あるよな。

煙に追われ南へ

|

山火事の煙による空気汚染は、結局雨が降るまで二週間続いた。一週間たったあたりで、こりゃ Thanksgiving も煙かもな、どこか行こうという決断がくだり、ゆこっぷ(おくさん)がみつけてきたのが Cambria という村。南に車で三時間くらい下ったところで、そこまでいくと大気汚染もだいぶマシそうだったため。Seattle や Hawaii も候補にあがったけど飛行機が高いのでパスとなった。

旅行の前夜に雨が振り煙は収束。とはいえ宿も取ったことだしせっかくだからでかけようと HW1  を下り南へ。夕方到着してレストランを探すも、ほとんどみんなしまっている。Thanksgiving にレストランがしまってしまうとか、ほんとにあるのか。自分の近所だとそうはいってもファストフード店などそれなりに空いているので油断していた。

なんとか空いているレストランに入ると、似たような身の上の家族、すなわち Bay Area から避難してきた Asian、がふた組。インド人と中国人。大変ですねーはははなどと挨拶する。

夜、宿の暖房を調節しわすれて風邪をひく。

翌日は Cambria はビーチが目玉だけれど雨のため宿でゴロゴロしたり 20 世紀の歴史遺産 Hearst Castle に行ってみたり。夜は少し南の Morro Bay まで下って寿司を食べてみる。日本人らしき男性が切り盛りする小さな店だった。このひと、なんで西海岸の片田舎で寿司屋しようとおもったのだろうな・・・。でも田舎の港町で寿司屋を持つのにはロマンがある気もする。

翌日帰宅。

Book: Building Evolutionary Architectures

|

Building Evolutionary Architectures: Support Constant Change

もうすぐ Refactoring 2ed. がでるという宣伝 Podcast のなかで Martin Fowler が言及していた Thoughtworks 勢の薄い本。

おまえらアーキテクチャレベルでもばんばんリファクタリングしていけよ、そのためには decoupling が重要だから Microservices にしとくといいよ、あとガンガン変えると非機能要件とかが失われがちだからテストとかモニタリングとか audit とか review とかで監視しとこうな (これを fit function と呼び、本書のコアコンセプトになっている)、ただ人手でチェックすると厳しいからなるべく自動化して CI/CD の pipeline に載せような、というような話だった。

読み始めたもののあまり興味がわかず、ぱらぱらっと読んで終わりにしてしまった。一つにはあまり新しい話がなく盛り上がらない。Thoughtworks シリーズで Refactoring, Continuous Delivery, Refactoring DatabasesNoSQL Distilled, Building Microservices とか色々あるのをぱらぱらっとつまみ食い用にまとめなおしたかんじがする。まあいいんだけど、もっと内容を絞ってそのぶん踏み込んだ知見を見せてほしい感じがする。

あとは例に出てくるのが Netflix だの GitHub だの Twitter だのの事例で、日経ナントカがエンタープライズのおっさん向けにインターネット・カンパニーの華々しい話をしてレガシー大変だろうけどおまえらもがんばれ、みたいに説教してる的な空気を感じてしまう。別に日経に悪意があるわけではないんだけれども、ふだんから HN とかを読んでる身としては新味がない。本書はたとえば DBA という職種をステレオタイプ化してディスっている説があるのだが、そんな SIer ディスってる退職ブログみたいな話されてもなあ・・・。同じエンタープライズ路線でも DDD とかは独自性や誇り的なものがあったじゃん。

あとは完全に個人的な話として、自分はもうアーキテクチャとか興味ないんだな、と思い知らされた。でかいプロジェクトの下っ端、アーキテクチャに口出す余地なし。ましてや組織がどうとか完全に out of control. たとえば Inverse Conway Maneuver, 最初にこの手の話を聞いたのは Twitter の microservices 移行の話だったと記憶しているが、その頃は零細でお山の大将をしていたときの感覚が残っていたので一定程度共感があった。今はもうない。

これは悲しいことだが、様々な選択の結果なので仕方ない。自分にとって actionable であったり、そうでなくてももうちょっと getting excited なものを中心に読んでいくほうがいいね。アーキテクチャとかは、こうしてたまにつまみ食いするくらいでいいでしょう。

同じアーキテクチャの話でも何年か前に読んだ Hadoop Application Architecture は一定程度楽しめたので、やはり乗っている要素技術のかっこよさは大事な気がする。RDBMS の trigger で microservices に migrate だよ、とかいわれても外野的な盛り上がりがゼロすぎる。実務家にはいいのかもだけどね。


そういえばこのあと関連する Accelerate という本も聴いた。こっちは割とよかった。いろいろな規模の会社で働く人々を相手にサーベイをしたら、やっぱし devops 的なノリで CI/CD しないと厳しいということがわかりました、という内容。まあそうっすね、という内容だが、説教ではなく調査をベースにしているのがよい。

空気清浄機

|

先週の wildwire による大気汚染をうけ、月曜に注文し、昨日の木曜に届いた。山火事は先週の金曜。もっと早く注文すべきだったし、届くのが木曜じゃあ火事も収まって次の wildfire 事故まで出番なしかな・・・などと思っていたらその後も悪化が進み各種教育機関が休校しだす有様。

サンフランシスコに本社のある高級空気清浄機の会社、少し前まではベイエリアの住人に対し即日配達送料無料、本社オフィスでの受取も可、と宣伝しており、今日みたら品切れで入荷まで一週間待ちとなっていた。自分たちの買った Wirecutter 推薦モデルも品切れ。この手の業者は儲かってることであろう。

空気清浄機、電源をいれると高い汚染度を示す赤いランプが灯り、しばらくまわしているうちに収まったが数秒窓を開けたらふたたび真っ赤に戻った。いかにも汚染されてる風情。

logd

|

Android の logging suppression ("chatty" とマークされるやつ),  M だか N だかくらいで入った logd という daemon に実装されているらしい。それまではカーネルのバッファに直行していたのが logd を経由するようになった。

しかしひどいコードだなー特に驚くことではないとはいえ・・・。しかも std::list とかマジかよ。もうちょっとがんばってメモリアロケーションとか控えめにしてくれよ。それに色々コピーしすぎだよ・・・バッファに直に read してくれよ・・・。あなたけっこう CPU 使ってらっしゃいますのよ?

そして普通にコードきたないというかなんというか、泣ける。Pruning のロジックは LogBuffer::log あたりだけどもう興味なくなったのでどうでもいいです・・・。

コードを読むとき、自分はコードにこめられた人類の叡智のようなものを期待しているのだなあと思う。Android は読んでも大概疲弊するだけでつらい。

Understanding Android Surface

|

以下の話題についてより包括的な理解をしたい人は Graphics architecture を参照されたし。


Surface というクラスがある。この名前は完全に間違っていて、実際は ImageQueue みたいな名前だと思えばよい。ここでいう Image は、たとえば GPU が処理したりできる、ART の外で確保された、プロセスを跨いでやり取りされる画像のための共有メモリである。ではなぜ Surface という名前なのか、と考えるのは時間の無駄なうえに精神衛生を危険に晒すので、十分な資産を形成し引退するまではやめておいた方がよい。

Producer / Consumer

Android のサブシステムには画像 (Image) を生成するコンポーネントと Image を消費する(受け取って処理する)コンポーネントがある。

Image を生成する Producer side には以下のようなものがある:

  • MediaCodec: 圧縮された動画ファイルをデコードし、動画のフレーム画像を Image として produce する。
  • Camera: カメラがセンサーから吸い上げた画像をproduce する。動画として次々と生成することも、写真の撮影リクエストごとにひとつの image を生成することもできる。
  • OpenGL: eglSwapBuffers() のタイミングで GL の描画結果 Image をproduce する。

これら producer side のサブコンポーネントは結果の画像を書き込む ImageQueue すなわち Surface を受け取る。例: MediaCodec#configure()

画像を受け取って処理する consumer side には以下のようなものがある:

  • ふたたび MediaCodec. 流れ込んできた画像列を動画として圧縮する。
  • SurfaceView: 流れ込んできた画像を View の一部として画面に表示する。
  • SurfaceTexture: 流れ込んできた画像を OpenGL の texture に割り当てる。

これら consumer side コンポーネントは、画像を受け取るための ImageQueue すなわち Surface を公開している。例: SurfaceView#getHolder().getSurface(). SurfaceTexture はちらっとドキュメントを眺めただけだと Surface を取り出せないようにみえるが、Surface のコンストラクタが SurfaceTexture を引数にうけとるという形で公開している。なぜそんな API デザインなのかは、やはり考えるだけ時間の無駄である(e.g. 単にゴミなだけ。)

Operating On Pixels

Surface の上を流れる画像にアプリケーションからアクセス、加工する代表的な手段は OpenGL である。すなわち画像を SurfaceTexture 経由で GL texture にマップし、GL でレンダリングがてら pixel shader などでなんかする。

GPU でなく CPU で処理したい人には ImageReader というクラスが用意されている。これは ImageQueue すなわち Surface の consumer side コンポーネントの一つ。そのコンポーネントが自ら画像をなんかするかわりに、Java のレイヤに Image というオブジェクトをとりだす API がある。この Image オブジェクトを使うと ByteBuffer ごしに画像のピクセルを読み書きできる。

CPU で処理したいユースケースの代表格はファイルへの書き出し。たとえばカメラの画像を JPEG で保存するとか。

ImageReader で読み出した画像は用が済んだら close() のうえ捨ててもいいし、ImageWriter オブジェクトを使って他の ImagQueue すなわち Surface にそのイメージを enqueue することもできる。ImageWriter は ImageReader の対, producer side のクラスである。

Image#close() するのはかったるいが、Image の実体は Java heap でなく希少な共有メモリ・そのうえサイズがでかいので、こまめに開放しないとすぐ枯渇してしまう。やむなし。

SurfaceView

SurfaceView は ImageQueue/Surface の consumer である。ではどうやってその image を consume し、画面に表示するのだろうか。

すべての Activity は最低一つの SurfaceView を持っている。以下ではこれを Root SurfaceView と呼ぶ。Root SurfaceView には持ち主のアプリが描画される。アプリが描画した画面の Image を実際に消化するのは SurfaceFlinger と呼ばれるプロセスである。これは複数のアプリの描画結果をくみあわせ最終的な画面を描画するプロセスで、他の OS だとWindow Manager とか Window System などと呼ばれるものの機能の一部である。SurfaceFinger は最終的な画面を OpenGL で描くこともあるし、可能ならより省電力で 2D 専用の composition hardware を使う。

つまりアプリの描画結果はアプリ自体のプロセスから ImageQueue/Surface を介して SurfaceFlinger に送られる。SurfaceView は画像だけでなく画像の表示場所や大きさすなわちレイアウト結果も SurfaceFlinger に伝える。(こうした位置情報の伝達は Surface と独立した API/Binder をたどる。) 

Root SurfaceView ではなく、アプリケーションが確保した SurfaceView も基本的には同じように振る舞う。すなわち、受け取った画像はレイアウト結果ともども SurfaceFlinger に送られる。

別の言い方をすると、アプリは SurfaceView をレイアウトはすれど描画はしない。たとえば OpenGLで SurfaceView に何か書き込んでもアプリ自身の描画結果には反映されない。Android が内部で確保したアプリの Root SurfaceView とアプリのコードが確保した SurfaceView はそれぞれ独立に描画され、それぞれの Image を SurfaceFlinger に送る。SurfaceFlinger はそれを重ね合わせ、辻褄のあった最終的な画面を描画する。

プロセスをまたぎ最終的な画面画像の合成プロセス (composition という) に介入する荒々しさを理解していないと, SurfaceView はすごく奇妙な振る舞いをするように見える。そういう意味で SurfaceView という名前は misleading とは言わないまでももうちょっとそういう事情を反映した名前のほうがよかった。たとえば CompositionView とか。

ところで Android は Camera や VideoCodec にも独立したプロセスがある。こうしたコンポーネントはそのプロセス内で Image を生成し、ImageQueue/Surface を介してアプリに届ける。しかし SurfaceView の実際の consumer は SurfaceFlinger プロセスなので、VideoCodec や Camera を SurfaceView に繋ぐと Image はアプリのプロセスをかすりもせず SurfaceFlinger に届く。なのでアプリの UI thread が多少もたついてもビューファインダやビデオはコマ落ちせずに再生される。この低遅延な振る舞いは SurfaceView の大きな利点である。

TextureView

TextureView は SurfaceView と同じく Surface すなわち ImageQueue を介して画像を受け取る consumer である。しかし SurfaceView と異なり、TextureView は実際にアプリのプロセスが描画する。

各アプリには RenderThread  と呼ばれるスレッドがあり、このスレッドは UI thread の作ったディスプレイリストを OpenGL で描画する。 TextureView は RenderThread に SurfaceTexture を作って画像を受けとり、RenderThread が描画する画面の一部としてそのテクスチャを描画する。これは LAYER_TYPE_HARDWARE を指定した View の振る舞いとよく似ているが、RenderThread がテクスチャの中身を描くかわりに Surface の向こうの producer からテクスチャの中身が届く点が異なる。

TextureView は普通の View と同じく RenderThread で描画されるため、レイアウトとかでややこしいことにならない。だから扱いやすい。一方で一回余計な GL の描画を挟むぶん 1 フレーム遅延があるし、電力効率も悪いし、UI thread がもたつくと巻き込まれる。利便性と性能をトレードオフしている。

TextureView も名前が悪いね。SurfaceView とは逆に実装の詳細を晒しすぎている。LayerView とか呼べばいいのに。

Pipeline

どこかの producer から 受け取った Image のストリームをどのような方法で画面に描くか、画面に書く前の加工をどうするか。Surface を中心とした一連の画像処理を pipeline と呼ぶことがある。Pipeline のデザインはメディア系アプリの性能や安定性に大きく影響する。同時に HAL や OS の都合で思わぬ制限も多い。実験しつつ良いデザインを探求する価値がある。が、世の中は割とコピペと cargo cult に支配されがちに見える。ここに書いたシステムのデザインの意図みたいのは理解しておくと少しマシな判断ができる、かもしれない。(できないかもしれない。)

朝型化を考える

|

家族の生活リズムの変化により朝に何もできなくなって久しい。結果として夜になんかやろうとしていたのだが、ダメ。夜の自由時間のはじまり、すなわちゆこっぷ(奥さん)が子供の寝かしつけに入り、自分が晩飯の片付けなどを済ませたあと、意味のある活動が全然できない。ほんとはここでシャワーを浴び、そのあと本来やるべきことをやる必要があるんだけれど、疲れていてだらだらスマホをつついているうちに夜が更けてしまう。

自分の根性のなさのせいにしてもよい(間違いではない)が、それだと問題が解決しない。やはりなんとかして活動時間を朝に戻す必要がある気がする。そういえばもともと朝にシフトした時も同じことを考えていた気がするな。

以前やっていた朝シフトは、早く起きて早く家を出て始業の前に会社でなんかする、というスタイルだった。今は早く家をでることができないためこの方法を使えない。

となると、早く起きて家でなんかするのが良いのかなあ。なんか聞いたことあるなこの話。ひげぽんか。ひげぽんにはある時この話を個人的に聞いた。「昼寝はしてない」と書いてあるが実は朝寝をしている。というのが発見だった。たしかに今読み直すと 「朝 7:15-8:00 に寝たりしている。昼寝のかわり?」と書いてるね。なぜそのタイミングで仮眠できるのか謎だが。子供に邪魔されないのだろうか・・・。

まあそんなのはディティールで、自分は普通に5 時起き可能。なぜなら今のところ子供が早寝なため、自分も 20:30-21:00 くらいには寝られるはずだから。

朝おきてすぐ家でなにかするのと、朝おきて会社に言って何かするのを比べると、やはり会社の方が色々よい。まず出勤のジョギングで目が覚めるし、会社の方が完全に自分をデタッチできるから。まあでも、なにもしないよりは何かできる方がよい気がするなあ。


どんなかんじにすればよいか。

前日夜

  • シャワーをさっさと浴びる
  • 着替えを用意する
  • 朝やることをなんらかの形で考えておく
    • ノートに書くとかだろうか。
  • とにかくさっさと寝る。 8:30 くらい目標で遅くとも 9:00.

  • 目覚ましで 4:30 くらいにダラダラ起床開始。
    • スマホでダラダラするかわりに laptop でダラダラしつつ覚醒。
  • 着替える、顔あらう。
  • ストレッチ・・・はしない。時間がかかるので、子供起床後に回す。ちょっとだけ筋トレして目を覚ますのはいいかも。
  • コーヒーのむ。
  • 作業開始。ここで遅くとも 5:30 くらいだと良いのだが。


朝の出勤後の活動が失われ始めたのが、記録によると一年半前。この頃から離乳食が始まったとあるが、それでも 7 時には出勤できている。どうすればそんなことが可能なのか今から振り返ると謎。まだ子供の夜の睡眠が不安定で、起きるのが早かったのかも知れない。今は概ね 6:00-6:30 くらいに起きてくる。あとは起床から朝食の時間が長くなっている。とかなんだかんだで当時より1時間余計にかかっているのだね。つまり一年半前より 1 時間、二年前より 1.5 時間、朝の可処分時間が減っていることがわかる。

一方で、この頃は子供の離乳食と大人の食事は別にとっており、大人の晩飯は子の就寝後だった。でも子の食事が大人に近づいてきたどこかのタイミングで、子供と大人は一緒に晩飯をとるようになっている。なので夜の可処分時間は当時より 30 分ちょっとくらい増えている。合計だと可処分時間の減少は1時間弱くらいか。減ってはいるがゼロにはなってはいないはずなので。やはり朝シフトに戻すべきだな。

今の平日の一日をかきだしてみる

  • 06:00 にめざましがなり、だらだらと 6:30 起床。洗顔など。
  • 07:00 少し前くらいから家事雑用。その後ストレッチ。
  • 07:30 くらいから子供の朝食補助。
  • 08:00 出勤
  • 17:00  ちょっとすぎ退社、18:00 帰宅。
  • 夕食、子供の相手など。
  • 19:30 家事雑用
  • 20:00 風呂、上がり次第空き時間
  • 22:00 就寝

やはり風呂の後と朝のダラダラが無駄だね。


今まで朝シフトをしてこなかったのが不思議に思えてくる。生活に変化があっとのではと振り返るに、ゆこっぷ(奥さん)が子供と添い寝をするようになったのが大きな変化に思える。ある時期から子が一人で寝るのを嫌がるようになり、父(自分)と寝るのも嫌がり、そのようになったのだった。これは必ずしも望ましい変化ではないのだが、朝シフトをするのには都合が良い。なぜなら子供が寝たあとに夫婦で会話をする、という可能性がなくなり、さっさと寝ても何も不都合がなくなったから。そして朝起きるににしてもゆこっぷを巻き添えにする必要がなくなったから。

添い寝はいつまでもするものではないから、この前提もそう遠くない将来に変わるであろう。今のうちに活用しておきたい。

関心過剰

|

Rebuild.fm に呼んでもらったのでカメラの話でもすっか・・・としたわけだが(他に話すことが何もない)、エゴサーチしていると思ったより話題になっているようでやや焦る。根本的に話してまずいことは話してないはずだが、広報のひととかギョッとした可能性あるな。ごめんね・・・。基本的にはこういうところで細かいことを言わないのがあの会社の良いところだけれども、電話機日本再上陸はおもったよりだいぶ注目されていたのだった。

US だともう三代目なので特に novelty はなく、はい発表会、ハンズオン、レビュー、みたいなメディアの空気を感じるし、自分もそう思っていた。日本の注目度が高いのはきっと良いことなのだろうけれども、今更ベンチマークで iPhone と比べていたりして、おまえら Snapdragon を何だと思ってるんだ・・・と思ってしまう。いやいいんだけど。

ブラウザ仕事の頃は、コードもオープンソースだったし、他に日本で同じ仕事をしてる人もたくさんいたし、ウェブ開発者が顧客みたいなプロジェクトだったし、対して注目されるような仕事でもなかった。しかしスマホはコンシューマ製品で、カメラは推し機能。そして日本語圏でその機能にいちばん精通しているであろう人間がたまたま自分(周辺チームに日本語圏のプログラマがいないから)という組み合わせによって予期せぬ関心を招いてしまった。

まあ自分も心の何処かで人の関心を引きたい気持ちがあり(メディアで話すというのは本質的にそういうもんである)調子に乗りすぎたのだろうね。しかも自分が根本的な部分でカメラの専門家でないせいで、話す内容がどうしても素人向けというか表面的でネタっぽいものになってしまった面もある。

やりすぎたのは今回は仕方ないとして、その関心を自分の風評の水増しに使わないよう気をつけないとなあ。まあ話を聞いて自分がカメラテクノロジの専門家だと誤解するような非素人はいないと思うので、そんなに心配してないけど。

ステロイド

|

子供の肌荒れが治らないのでゆこっぷ(おくさん)がステロイド系の薬を買ってきて使いはじめる。その後小児科にかかって正しい処方の仕方を教わったものの、カジュアルにステロイド系の薬を使うことにショックを受け「ちょっとオンラインで副作用とかについて読んでちょ」と釘を刺したところ、be on the same page の方がよいと思うので読むべきリンクをよこせという。そりゃそうだ、といくつか探してみたところ・・・むしろ自分が神経質すぎてよくなかったことが判明し、反省した。要するに、副作用はあるが使わずに悪化するとより辛いのでさっさときっちり使って直し、治ったら使うのをやめなさいねという話であった。

ステロイド系薬に自分が感じていた不信感は、20世紀末にあった過大報道(内服と塗薬の混同など)と、そこから始まった民間療法ビジネスの影響だったらしい。自分は弟にアレルギー性皮膚炎があり、自分の両親は当時のそうした報道などにひきずられて反ステロイドに振れていたのだろう。そこまで極端に拒否していた記憶もないが、なにしろ自分のことではないのでよく覚えていない。ただ時代の不安な空気だけが記憶に残っていた。ゆこっぷファミリーは健康体でアレルギーとかはなかったらしく、おかげでそうした不安に囚われずに済んだのかもしれない。健康が一番であることよ・・・。

オンラインの医療情報は破滅していることが多いが、アレルギー性皮膚炎(「アトピー」)についても同じことがおきており、かつそうした過去の空気および民間療法ビジネスの隆盛にともないだいぶひどいかんじになっている。最近の自分はすっかり Mayo Clinic だのみ、たまに WebMD も見るくらいで、今回のように日本語で調べたい時は go.jp に絞って検索するようになった。政府の陰謀論的なものがゼロと断言する気はないが、相対ではだいぶマシに見える。日本語圏にも Mayo Clinic 相当がほしい・・・。

しかし go.jp のサイトは PDF ばっかりな上に、そこからリンクされている厚生省のワーキングンググループの調査の成果(を参加した大学教授がまとめたもの)、みたいのが .org にホストされていたりしてまじゲンナリ。百歩譲って ac.jp にしてくれよー。


ちなみに Mayo Clinic を見ると塗るのはともかく内服はやべえぞ、という書きぶり。内服とかあるんか・・・とみると喘息の吸引薬とかがそうらしい。あれはたしかに効きすぎてやばい。知ってる。あとはスポーツのドーピング。まあこれは他人事なんでいいかな・・・。

コーディング面接

|

熱心にコーディングインタビューの勉強をしている人をみると肩身が狭く辛い気持ちになる。

自分が転職したときは、面接の数週間前にリクルータに top coder やっとくといいよ、といわれたがリアルタイムで戦うのは大変そうなので過去問をいくつか解いてみて、なるほど案外難しいな、と更に何問かとく、ということを 2-3 週くらいやった記憶がある。面接でのコーディング自体も特別スムーズに答えられたわけではなかったが、なんとなく採用された。運のよさはあった。

今でもコーディングクイズ類はまったく得意ではなく、転職するなら練習しないといけないのだろうとは思うも、しょうじき大企業の面接を突破できるところまで自分を訓練できる気はしない。一度やめたらそれまでだろう。なので気分転換に会社やめてみっかとはなかなか思えない。息苦しさはある。周りを見ても、東京時代はさておきここ数年の同僚たちを見る限りクイズ面接突破の再現性があると思えるのは半数以下ではなかろうか。東京は妙に競技家率が高かったな。


競技的コーディング力に対する自分の態度は煮え切らない。

競技力は、面接はさしおいてもあるに越したことはないと思っている。「競技的コーディング面接は無駄」と主張する一団とは距離を置きたい感じ。一方で自分はそうした能力がないので、ほら競技力あればこんな風にいいでしょ、と実演できるわけでもない。ズバっとかけたらカッコイイのになあと思いつつ、もっさりとコードを書いて暮らしている。

ここでも理想と現実が乖離している。つまり、競技的なコーディング力に価値はあると信じたい。しかし自分はその理念を体現していない。コーディング面接トレーニング勢から目をそらしたくなるのは、その距離を思い出させられるから。もっと言えば、自分はゆとり入社組みたいなもんなのではという後ろめたさ。

一方でテック大企業の年収高騰に伴い面接対策としてのコーディングクイズがジャンルとして確立した結果、技能として意味のある範囲を超え悪い意味で受験勉強化してしまっており、面接の効能を損ねているのではという残念な気分もある。これはクイズ的コーディング技能にも意味があると考えたい上の気分と矛盾しているけれども、現状の行き過ぎを懸念しているという話。

受験勉強としてのコーディングについて軽く調べると、MIT は 2009 年にもう対策クラスやってた。 vs. Stanford at 2017. 東海岸やるな...

現実問題としてコーディングクイズはほんとに決定打なのだろうか。特に数値に基づかない自分の印象としては、コーディングクイズは fizzbuzz をちょっと高級にした一種の screening というだけで、その他の様々な non-coding な話題も割と重みを持っている。さらに言えば運や相性も大きい。じっさい運とか相性とか、そういう一見あまり客観的じゃない要素もあった方がよいとおもうんだよね。運がわるかったと move on できる方が精神衛生にいいし、システムの欠陥も乱数の力で多少緩和できるだろうし。

世の中には妙に知識だけあってコードがまったく書けない人というのが存在し、そういう口だけな人をうっかり採用しないための仕組みがコーディングクイズなのだ・・・と思うんだけれど。なんでちょっと練習するくらいでいいんじゃないの?だめ?世の中的には駄目って風潮なのできっと駄目なのだろうなあ・・・。自分は妙に知識だけある側に近いので、それもまた居心地の悪さにつながっている。

人事考課の季節

|

あいつらはやくエラくなってくれないかなーと思っていた人々がちゃんと出世していた。めでたい。自分より ladder が下の人々が自分より活躍している状態のは精神衛生によくないため、それが adjust されていくのはよい。主観的に二段階くらいズレてる人がいたからね。あなたたちもう一段いけるよ。早くエラくなってわたくしめを下僕として使っておくれエリートな若者たちよ。

ある時期までは他人の出世を羨む気持ちが少しはあったはずだが、今やゼロ。手放しで喜んでる。

追記

自分の rating も回復した!大幅減俸回避(たぶん)!!いやー精神的にマジしんどい半年だったわ・・・。残業なしでも真面目に働けば最低限のラインには到達できることがわかってよかった。ダメだったら定時外をつっこまざるを得ないと考えておりました。まあ少々のダウンは予期している。やむなし。

真面目に働いた結果として仕事から遊びの要素が完全に失われてしまったが仕方ない。あと 1-2 年は引き続き真面目に働き、遊べる余地を作らないとなあ。今のチームはスパルタすぎる。

・・・とかいってうっかりまたチームを移ったりするとリセットされてしまう悩ましさもある。Chrome をやめた時は今後は三年ごとにチームを移ろうと思っていた。しかし今回のストレスを鑑みるにチーム固有の技能をためてマージンを作り、そのマージンで色々遊ぶ期間があった方が良い気もする。ほんとはそういうのも含めて 3 年くらいでローテーションできるといいけれど、現状の実力を鑑みるにもうちょっと必要そう。なので長居しても辛くないようチームの code health をなんとかせねばならん的な気持ちになります。

何を仕事に数えるか

|

仕事、というとなんとなく会社に行って働く・・・でなくてもいいけど直接の対価のためになんかやることを指すように思えるが、趣味でコードを書くのもプログラミングの本なりネットの記事なりを読むのもブログを書くのも仕事だよなと思う。仕事というと若干ニュアンスが違うかもしれない。 Work といえばいいだろうか。Work Life Balance の Work.

仕事とか Work という言葉にアレルギーがあるなら career progression でも良い。

「仕事」と「勉強」を区別するのはナンセンスである。仕事と仕事以外の境目だってそれほどはっきりしていない。会社での仕事はふつう収入に直結している。投機性がない。いわゆる「勉強」には将来役に立つかもという期待があり投機的である。ここでいう期待は動機のことではなく、期待値とかいうときの期待ね。

会社の仕事にしろ、チームや組織の思惑と自分の思惑が 100% align しているのなければそこには常にトレードオフがある。つまりチームのために完全に献身するとは限らず自分のやりたいことをやることはある。たとえばバグのトリアージ遅れやテストインフラを改善した方がチームの生産性あがるだろうなーでもそんなもん自分じゃやりたくねーわ、とプロダクションのコードを書くとか。逆に新機能遅れてるけどあんま興味ないんでスルーしてツールでも作るか、とか。

自分の正しいと思っていることと TL やマネージャの正しいと思っていることがズレることもよくある。こういうとき、自分の正しいことをやるのは「趣味」で、上から降ってくる意向に従うのは「仕事」なのか?「仕事」した方が給料はあがるかもだが。

ていうか、そもそも勤務時間中だって別にずっと目の前の仕事だけしてるわけじゃないでしょ。しててもいいけど、それって割と選択の余地あるじゃん。カリカリ働けば成果を出せるし、チンタラしてると進まない。そしてチンタラ働いている人はそれなりにいる。そこに consequence はあるが、一方で給与と成果の関係は特に linear というわけではない。人によって適切なチンタラ度というものがある。チンタラとまではいかないにせよ、残業してバグを直すか諦めて五時で帰るかとかも、選べるといえば選べる。

もっといえば、丁稚奉公なり石の上にも三年みたいな働き方は将来の見返りを求めており、投機性が高い。投機性が高ければ趣味というわけではない。

「勉強」にしたって、たとえば仕事で使っているライブラリやツールについて調べるのはまったく投機的でない。このツール/テクニックは仕事で使えそうだな、と調べるなら少し投機的である。転職に向けた準備で何らかの調査や訓練をするのは更に投機的だが、一方で転職って仕事そのものじゃん。

いや勉強じゃなくて趣味ですよ、というのだって、そこで得るものが仕事に役立つ期待(将来の確率)があるなら、それは仕事である。趣味と仕事が排他である必要はない。期待値の高低はある。だから個々のアクションの仕事としての濃度には差がある。ウェブプログラマで食ってく予定の人が FPGA やるとか、マネージャになる気がないのに経営の本よむとか、期待値低め。

目先の仕事にしろ趣味のコードにしろ、その経済効果、必ずしも financial なものである必要はないがなんらかの objective function, との相関ははっきりしていない。人は portfolio について考える必要がある。


子供の相手をするとか、配偶者と話をするとか、家族でどこかにでかけるとか、掃除洗濯炊事とか。これらのアクティビティが仕事の役に立つ可能性は限りなく低いので、これらは仕事ではないと言って良いだろう。Work Life Balance でいうところの Life に相当する。マンガや小説を読むとかの非プログラミング余暇活動も、多くの人にとっては Life にカウントしてよかろう。

Jeff Bezos の Work Life Harmony 理論によればこうして家庭で refresh するのは翌日の仕事の糧になるでしょ、という話になるわけだが、そういうマクロで不透明な話はおいておく。

仕事に人生のどれだけをどんな形でつっこむかは、つっこむ資源(時間)の話と時間のポートフォリオ、経済的合理性とそのほかの principles のバランスなどによって決まる話。資源がいっぱいあると余裕をもって振る舞えるし資源がなければ妥協や工夫を求められる。ポートフォリオの攻め度合いには性格もあらわれる。Financial freedom 以外の principles は単なる性格を超えた人となりを物語っている。

資源を沢山もっているリスク選好の高いの人々がそれを活かして楽しく Work しているのをみると資源も度量もない自分は羨ましすぎて悲しくなるが、持てるものの違う他人と自分を比べても仕方ない。

そうした制限と意思決定の連続が職業人生だとおもう。

だから他人の人生のパラメタを知らずにプログラマはこうあるべきと叫ぶ人々をみるとうんざりする。あえて細部を無視し声を上げる政治活動に意味がないとは思わないけれど、政治活動にしちゃメッセージの届け方が無神経だよ。


追記 (2019/10)

オンラインの声の多くは既に価値観を共有する相手を探すための sonar であり、反りの合わない意見が目につくのは文字通り noise に過ぎないという社会分断主義を受け入れた結果、主張の雑さはバグではなく仕様だと思うようになった。自分は自分のやり方で仲間を探していきます。

Pick Your Battles

|

バグの相手が辛い問題への対症療法的なアプローチとして、午前中はバグの相手をしないことにしてみた。明らかに自分が悪くてさっさと直すような奴は別として、バグはほっといてコードを書く。そこそこ精神衛生が回復。

若干良心が痛むが、バグの相手はメールみたいなもの、と考えれば妥当に思える。じっさい時間と精神力を drain される点がメールとよく似ている。自分はメールをスルーする力はかなり鍛えてきたけれども、バグも似たような感じで程々にスルーしていったほうが良かろう。マネージャとか TL とか大変だけれども、まあ応援してるからがんばって。応援してない風だけど心の中では応援してますから。

バグが painpoint だからといってバグ処理スループットの改善に邁進するというのは、メールが painpoint だからといってメール読み最適化のためのツールを開発するようなものに思える。場合によっては worth かもしらんけど、自分の戦場ではなかろう。こういうのって頑張れば頑張るほど寄ってくるからね。Pick your battles ということで。


誰が pick すべき battle なのか。もし自分がマネージャでバグの相手が主戦場なのだとしたら、何かを頑張る価値はあるんだろう。もしバグレポートを NLP で解析する仕事がフルタイムであるならやって良いとも思う。一方でバグを直す当事者以外ががんばっても良いものはできない気もする。スーパーハカーの参入が待たれる。

 

卵と壁と窓

|

Always on the side of the egg - Israeli Culture - Haaretz

当時すなわち 2009 年にこの話を読んだ自分は、村上春樹と違ってじぶんは "The System" を支持すると思ったのをよく覚えている。

去年から今年にかけて、世の中や自分の勤務先をめぐる軋みのようなものに圧倒される、というと大げさだけれども失望する、というのもちょっとちがうが、なんというか、ある種の納得のようなものがあり、最近ふとこの話を思い出し、なんとなく読み返してみた。

これを最初に読んだとき、自分は The System を政府や企業のようなものだと考えていた気がする。それは近似としてはあっているが、The System だと世間から思われている企業の下僕として何年も働いたあとに振り返ると、いやそうじゃないんだ、といいたくなる。これは概ね言い訳でしかなく、何かを正当化したいわけではないけれども、ここでいう The System というのは政府や企業やメディアを動かすインセンティブのフレームワークみたいなもので、あいつらがしょうもないのはなんというか、フレームワークの帰結なのではないか。

とはいえ自分という個人もやはり一つの egg なのだ、と主張する気もなく、今や wall の構成分子になってしまった自覚はある。なので卵をぶつけられても仕方ないなと思う(やだけど。)皮肉なことだが、The System の正しさを信じていた 2009 の自分は今思えば egg だったね。The System いいじゃん、みたいな judgement ができるというのは個人というものであることよ。今はもう The System には良いも悪いもない所与の事実みたいなものという感覚が強い。それはたぶん間違っているが、では wall のない世界なんてありうるのか。腐った卵のスクランブルエッグになるだけじゃないの。


ところでこの講演は egg と wall ばかりが引用されるけれども、小説家としての世界に対する態度、 lie と story の力、というところも割と読みどころだと思う。プログラマというか自分も、もうちょっとこう、世界に対して個人的な態度がとれればいいのにね。

この話を思い出すきっかけになったのは割れ窓理論との再会だった。割れ窓理論で世界をクリーンに保とうとする post agile で automation everywhere なプログラマの世界観って、どう見ても The System だよね。アジャイル原理主義者だった 2009 年の自分が The System に肯定的なのは自然なことに思える。そして The System の駒として組織に埋め込まれたプログラマたる自分がとれる小さな個人的態度が @SuppressWarnings なのではないか。いやでまかせです。すみません。

出荷を見届ける

|

朝早く会社に来て、ほかの早起きな同僚たち数名と新製品発表会のライブを観る。いまのチームに入ってちょうど一年、ようやく仕事でやっていた製品が出ていくのを見届けた。年に一度のハードウェア発表に向けてがんばって働くこのソフトウェア開発モデルには懐疑的な自分だけれども、やや感慨はある。

今のチームは、自分が全く活躍できていない点を除けば割と良い。カメラはスマホの重要機能とみなされていて、しかもまだ良くなる余地がある。スマホ自体も競合に対しキャッチアップする側におり、それでありながら敗戦処理モードでなくやることがある。こういう伸びしろのあるチームで働く方が、会社員としての精神衛生を保ちやすい。

コードも、まあまあ良い。良くないところも多いが問題の多くは認識されており、人々に直す気もある。なのでコードを良くする仕事をしやすい。若干官僚的なところは気に入らないが、適当にしらばっくれている。それで角が立つほど厳しくもない。以前のようにコードを読んでいてひどさに発狂したくなることはなくなった。

チームの人々は、前のチームと比べると大企業的というか、ふつうにスマートかつ温厚。前のチームは買収で入ってきた人が多くて平均年齢も高く、そのせいか個性的で主張の強い人が多かった。それはそれで楽しかったし好きだったけれども、仕事に限って言うと淡々とできる方がラクではある。まあ職場というのはひどい jerk さえいなければどのみち楽しくやってけるもんです。


カメラアプリの差別化要素は HDR+ にしろ合成ボケにしろ夜モードにしろリサーチ部門の成果である。自分たちアプリ部門はその成果を製品としてパッケージするのが仕事。リサーチ部門といっても普通にばんばんコードを書く人たちなので、アプリとして出荷されるアルゴリズムのコードも彼らが実装し、ふつうにデバイスでデバッグしたりなんだりしている。

同じ製品のために働いているとはいえ、リサーチ部門は別の組織である。だからいまのチームでがんばったところでそういうかっこいいアルゴリズムの中に近づけるわけではない。少し寂しい。

前にやっていたウェブブラウザの仕事では、すごいエースプログラマみたいのが組織の中のどこかにいて、そのすごいプログラマと自分は間に距離こそあれ地続きな感じがした。もっといえば、自分の report line の先には Darin Fisher や Ben Goodger といった Chrome の founding member がいて、仕事のキャリアと自分の憧れは足並みを揃えていた。

Pixel のカメラというのは、自分の中では Marc Levoy の野望を叶える vehicle である。Light Field からはじまった Computational Photography を、Frankencamera, Halide, Pixel Visual Core, HDR+... といったテクノロジースタックとして結実し、計算機の力でそこらへんのカメラをやっつける。このストーリーには圧倒的なかっこよさがある。Mark Levoy はかっこいい。その野望の実現のためなら下働きも厭わない、というと言い過ぎだけれども、自分の今の仕事のやる気を支えているのが Marc Levoy の存在なのは間違いない。なので Marc Levoy がファイルしてきた UI のバグとかを直せるとちょっと嬉しい。我ながらファンボーイというかファン中年すぎる。

が、そんなスターは自分と地続きではなく、どこか遠くのリサーチ部門にいるのだった。

リサーチ部門とアプリ部門が分かれている事実を大企業のせいにする気にもならない。ブラウザ仕事時代のエースのひとり Adam Barth のやっている仕事、書いているコードを、自分は少なくとも理解はできた。でも HDR+ のエース Sam Hasinoff の仕事、すなわち論文だとかそれにもとづくコードというのは、自分にはわからない。組織上の壁は能力の壁を反映している。もちろんアプリチームの中にも HDR+ だとか computational photography をちゃんと理解している人はいると思うけれども。

この寂しさは仕事が悪いというより自分のボンクラさのあらわれなので、特に文句をいう気もない。彼らの書いた論文を眺めて成果を表面的にでも appreciate できたら、少しは報われる。

学生だった自分にとって、かっこいい成果をばんばん SIGGRAPH に通す Marc Levoy は憧れとか目標とかそういうレベルを遥かに超えたスターだった。自分はアカデミックに何かを頑張ったことは一切ないので目標もなにもない。それでも巡り合わせで近くから彼らの成果を伺うことができるのは、期待値にはあっている。でももうちょっと頑張れなかったのかね自分・・・という悲哀が消え去ることもない。

長続きするコツ

|

Under The Radar Podcast のバックナンバーを聞いていたら、100 回目のエピソードで長続きするプロジェクトのコツ、のような話をしていた。奇遇にも、最新回の Linear Digressions は 4 周年記念のエピソードだった。

Under the radar では、とにかくはじめるのが一番難しく、そのできの悪さに挫けず試行錯誤して良くしていこうな、物欲とかで procrastinate しないほうがいいよ、というような話だった。Linear Digressions は、なにをきっかけに podcast をはじめ、今でも続けているのはなぜかを話していた。

Under The Radar の二人はフリーランスのアプリ開発者で、番組の動機も割とはっきりしている。すなわちある種の self branding と、あとは sponsorship の収入である。同じ relayfm の仲間で ATPAnalogue podcast に出ている Casey に至っては、Podcast の収入を足がかりに会社員をやめてフリーランスになった。この人達は言ってみれば職業 IT 芸人であって、その事実を隠してもいない。(最近の Analogue はそんな話ばっかし。) ついでに Soft Skills の人もこの枠にいる。

自分は昔は IT 芸人的なものをバカにしていたし、もともと IT 芸人を自称した人々にも自虐のニュアンスは若干あったと思う。嫌儲サブカルチャーの空気を孕んだこういう蔑視の気持ちはしかし、自分の中では姿を消した。これはこれで entrepreneurship だと思うし、会社勤めをせず one's own boss でありたい気持ちも以前よりはわかる。会社員しんどいとか、家族と一緒にいたいとか、あるよねという。

とはいえ、自分がより共感できるのは Linear Digressions の二人だな、とも思う。彼らは sponsor もとっていないし、co-host のうち data scientist で話をリードする Katie はともかく software engineer で聞き役を担う Ben に至っては特に self branding できてる感じもない。Ben は動機をこう説明する: Podcast は普段の仕事と全然違って気分転換できるホビーになってるし、 data science のように縁遠い世界とわずかながら接点を持てるのも良い。

まあこの二人は若くて羽振りのいいテック会社員なので謎の entrepreneurship を発揮する必要がないという面はあるのだろうけれども、意識高い感じがときどきしんどい Under The Radar と比べ力が抜けていて良い。完全にステレオタイプ発言だけど Millennial 的とでもいおうか。

自分にとって Podcast の継続というのは完全に他の家庭及び仕事の事情とのトレードオフで、うまくならないから辞めたいとか飽きて辞めたいとかは、今のところ特にない。一方でそのトレードオフは tight なので、たとえば人事考課のスコアが下がったままだったらこのまま podcast とかやってる場合じゃないなとも思う。

それでも Ben の話を聞いていて、自分の podcast はキャリアには全然寄与しないけれど論文なり何なりを読んで話をするのが楽しい趣味で気分転換にもなるのは確かだな、とは思った。頻度や質に妥協することで仕事の厳しさが続いても細々と続けていけたら良いなあ。Blog にしろ Podcast にしろ、時間のかかる趣味であることよ。

ただまあ生活かかってる手前、仕事を優先しないといけないのは避けられないね。人生いっぱいいっぱいなのは困ったことだけれども, that's life.

Unlearning The Dream Job

|

滞っているコードレビューやメールの返事を nudge するのが妙に苦手だ。これは言語バリアのせいであったり我が身を振り返ったときのバツの悪さのせいもあるけれど、それ以外に WebKit 仕事をやっていたときに染み付いた感覚が抜けてないせいもある気がする。

WebKit のコードレビューツールにはレビュアを指名する仕組みもないし、従って各人の pending review list のようなものもなかった(当時; 今はしらない。)そして開発者には contributor, committer, reviewer という階級があり、コードを approve できるのは reviewer だけである。そして WebKit は Apple が own するプロジェクトであり、しかも自分の勤務先、特に自分がやっていたプロジェクトとは割と意向が一致しなかったりした。

この舞台設定は会社員がやる普通のソフトウェア開発とはだいぶ違う。たとえば自分の勤務先だとコードレビューはレビュアを指定する。レビュアはダッシュボードで pending review のリストを見て、対応が必要なものをこなしていく。プログラマの間に階層はない、というと厳密には語弊があるが、まあチームの人は基本的にみなコードレビューを approve できる。

コードの owner すなわちチームの意向に反するコードをなんとかして突っ込む、みたいな場面もない。もちろん時折何らかの controversial な変更はあるが、そういうのは事前に適当にドキュメント書いたり話をつけたりするものである。仕事でプロジェクトの意向にあわないコードを書くとかわけがわからない。

WebKit の仕事をしていたとき、コードレビューが一週間放置されるとかは普通のことだった。レビューで仕事がブロックするとやることがなくなるので、仕方なく本題でないコードを書いたりする。重要なものから余興までいくつも並列にレビューをだし、返事が来たものを対応する。レイテンシを並列性で隠してスループットを稼ぐ働き方をしていた。コンテクストスイッチしまくり。

ふつうの会社員プログラミングでレビューが滞ったらどうするか。まあレビュアに催促するよね。相手が忙しそうなら別のレビュアに頼む。タイムゾーンの問題がないならレビューは遅くとも一日以内に帰ってきてほしい。レビューを催促するのも、催促されたらさっさと応じるのも、仕事のうちと言える。

翻って WebKit のときのことを考えるに、自分はしばしば Apple のひとにレビューをしてほしかったわけだが、まずシステムとしてレビューをたのむことはできなかった。だからレビューが単に気づいているのか、忙しいのか、気に入らないから無視されているのか、判断できない。メールなどで頼むことも理論上はできるが、そもそも Apple のひとには自分のコードをレビューする義務はない。オープンソース・プロジェクトのボランティアとして付き合っているに過ぎない。一方で自分はフルタイムで働いており、それなりにコードを書く。ボランティアのスループットで足りるはずがない。

しかも自分たちのやっていたプロジェクトは、あからさまに Apple から嫌がられていた。プロジェクト・オーナーの権力をもって提案段階でその仕事を却下することもできたはずだが、そのへんはオープンソース・プロジェクトとしての体面や倫理や義理のようなもので黙認していた。しかしその後には passive aggression が続いた。これは自分たちにとっては不都合だったけど、今思うと当たり前の対応だよな、というか、むしろ断らなかっただけえらいとすら言える。


放置がデフォルトのコードレビューでプロジェクト・オーナーの嫌がる仕事を 3 年も続けると、生産性は完全に破壊される。

・・・というと WebKit あるいは Chrome が悪いみたいだけれど、別にそういう話ではないのだよね。強いて言えば関係が良くなかっただけで、特定の誰かが悪いという話ではない。問題は自分がプロジェクトの歪みを常態として absorb してしまったことだと思う。

思い返せば、自分にとって Chrome のために WebKit のコードを書くのは Dream Job であった。時は 2010 年、その勢いが頂点に届こうとする米国資本のハイテク企業に入って、給料をいっぱいもらい三食タダ飯食いつつウェブブラウザのような人々が毎日使うプロジェクトのためにオープンソースでコードを書く。いいじゃん!

・・・と思うがゆえに自分はそのプロジェクトのあり方を無批判に受け入れ、働き方や価値観をその異常な世界に最適化してしまった。

隣接する Chrome のエンジニアリングが極めてまともだったのも目くらましになった。そうしたまともな組織の umbrella に入っていると、自分のやっている仕事もまともな気がしてしまう。しかし自分の仕事環境はそうしたまともなエンジニアリングの世界の中でプロダクトの ambition と世間 (よそのオープンソースプロジェクト, ウェブ標準) の摩擦が集中する特異点のようなもので、そのしわ寄せが突出した仕事の進まなさだった。

自分は Web Components の ambition は価値のあるものだと思っていたし、その大変さはいつか pay off すると信じていたし、今でも信じている。ただその大変さ、すなわち当たり前のように仕事が進まないという事実、がプログラマとしての自分にもたらす影響、すなわち仕事の進まなさへの適応、に自覚的であるべきだったのだろうなあ。

摩擦の帰結として Blink がフォークしたあと、多くの同僚たちは水を得た魚のようにコードを書き出したが、自分はダメだった。別のプロジェクトに移ってみたけれどそこでもレビューを催促できずに滞りまくり、仕事の進まなさへの適応を強めてしまった。

Chrome をやめて小さめの Android のアプリ仕事にいってからは、ふつうにさくさくとレビューしてくれるチームメイトに恵まれてそういう問題はなくなったが、それでもマネージャに flag flip を頼むのが遅れてしまったり、そうでなくともこう、ゴールに向けてガシガシとコードを書く働き方ができず、あれこれ散漫に手を出して中途半端な成果しか出なかった。そしてまたチームをうつったはて評価減に至った。


どうも人に何かを頼むのが苦手だなとは感じていたし、どうしても集中して仕事を前に進めることができないなと思っていたけれど、その理由についてはいまいち思い至っていなかった。でもよく考えると、それは歪んだ働き方への適応の成れの果てだった・・・というと人のせいみたいだけれども、要するにサボりが板についてしまった。

いま我に返って自身を鑑みると、自分はこの会社のなかでどうやって効率よく仕事を進めればいいのか全然わからない。そして以前の職場で効率よ・・・かったかはさておきそれなりにガツガツと仕事を進めていた頃の感覚もすっかり忘れてしまった。

一方で、自分の本業の傍ら関係あるようなないようなコードを細々書いたり読んだりする楽しみや、そうした余興やボランティアが生み出す(かもしれない)発見や発明の価値については、驚くほど深く理解している気がしているし、その良さを信じてもいる。

でもこの価値観は、自分の非生産的態度の隠れ蓑になってしまったようにも思える。本業をきちんとこなた上の余興ではなく、進まない本業からの逃避としての余興にすっかり適応してしまった。

今のチームは締め切りとかがそれなりにタイトで、脇道症候群になった自分にとっては息苦しい部分もあった。悪い仕事ではないが Dream Job という感じでもない。でも結果として自分が Dream Job を通じて抱えてしまった歪みを照らしだしてくれた。

プロジェクトの余裕や柔軟さ、チームの実験精神やボトムアップな取り組みからうまれる諸々の良さについては今でも信じている。でもそれを無批判に受け入れるのではなく、一旦捨た上でよく調べて拾い直す必要があるのだろう。

でも一旦捨ててしまうと自分の手元には何も残らず、どうしていいかわからない。なんていうか途方にくれる。うっすらと見に覚えのある感覚

まあ、ぼちぼちやっていきます。

割れ窓理論再考

|

崩壊するアメリカの公教育という本を読む。ゆこっぷ(奥さん)が買っていた。アメリカ公立学校やばいよ、という話。自分は(仮に子が進学するまでこのへんに住んでいることができたら)公立はないな私立だな、と思っていたので特に actionable な要素はなかったが、文中で Zero Tolerance Policy が批判されていたのは興味深かった。

Zero Tolerance Policy はプログラマが大好きな「割れ窓理論」などを論拠とした施策で、すごく雑にいうと「悪いことをしたら一発で退場な」という方針のこと。学校だと、たとえば暴力をふるったら即座に休学/退学になる。これは自分のようないじめられっ子からすると歓迎な方針である一方、ガラの悪い環境で育ったせいで気が短くカッとして人を殴ったりしがちな子供の教育機会を奪ってしまう問題がある。そういう恵まれない環境に生まれた子供こそ教育が必要といわれればまあまあ説得力はあるし、そうでなくてもマイノリティはストレスが高いのでカッとしがち、みたいな面もある。白人メインの地域で黒人やってるとか。

結局のところ Zero Torelance Policy みたいのは弱者を守る体面でシステムを守っている。社会はその不気味さと向き合う必要がある。

振り返ってソフトウェア開発の世界では CI とか presubmit check, それらに組み込まれた各種動的および静的チェックの類が Zero Tolerance Policy を構成しているわけだが、こいつらはそうした批判を免れるのだろうか。

義務であり権利でもある公教育とある程度好きなものを選べる仕事とでは人に何かを強いる際の責任はだいぶ違う。ろくでもないが人権を脅かすほどでもない仕事というのは沢山ある、そしてソフトエア開発、特にでかいやつは、じっさいにシステムをつくる仕事である。なのでプロセスが(弱者ではなく)システムを守ることに特に欺瞞はない。

そうはいってもガチガチの presubmit check  にはしばしばムカつくことがある。このムカつきの理由には、本来 CI はプログラマを守ってくれる善きものだったはずなのになんで俺のジャマをするんだという裏切りへの怒りが含まれているのだろうな。でも(ある規模から先の) Zero Tolerance は(お前ではなく)システムを守っているのだ、そしてお前の給料はそのシステムから支払われているのだ、という風に考えるといちいち不毛な static analysis のチェックにムカつくこともなくなり、システムに感謝しつつ静かな心で SuppressWarnings できるかもしれない。

Bugs are Eating (My) World

|

手元ではまったく再現しないバグを bugreport だけを頼りに直す、という作業を延々としており、辛い。

まず直らない。なにしろ再現しない。しかし症状は(発生した場合)そこそこ深刻である。ログ(adb logcat のダンプ)には証拠がある場合もあるしない場合もあるが、いずれにせよひと目で分かるようなものではない。じっと睨む。しかしわからない、を繰り返す。一日が終わる。

結局「すみませんがよくわからないですね・・・」と close することもしばしばある。あるいは、すみませんが自分にはよくわかんないので見てもらえませんかね、と他人にたらい回す。どちらもストレスがたまるし、報告されたバグを無碍にされたユーザ(多くは dogfooder)も、わけわからんバグを押し付けられたりした同僚も不愉快。押し付けた自分の株は下がる。だからなるべくやりたくないし、できるものなら自分で解決したい。結果としてひとつの bugreport のログを睨むのに丸一日あるいはそれ以上を費やしたりする。

現実に、それはアプリでは直せないバグのこともある。

(大局的にみると)幸いなケースとしては、報告してきた人は古いバージョンの {アプリ, OS, ハードウェア} を使っていて、問題は修正済みである場合。これはまあ、自分の時間が無駄になる以外の問題はないのでマシといえばマシである。

(局所的に見て)幸いなケースとしては、症状がおきた瞬間のログが ring buffer の彼方に消えてしまっているとき。これはどうしようもないことが客観的に明らかなので「情報不足で直せません。ごめんね。」と言って終わり。自分が無駄にする時間は少ない。問題が治ってないのはダメだが。

高負荷時におかしな挙動をするというバグ。これは platform の問題であるケースも多い。そして人間のストレスも高い。Platform の人にたらい回したい誘惑に駆られるが、レイヤが下のひとは自分のようなアプリの人から次々にバグを押し付けられて既に疲弊しきっていることが知られている。そういう人に何かを頼むのは emotional な地雷度が高いし、濡れ衣だった場合は自分の株を下げる。バグ修正以外の仕事でも付き合う相手なので関係を悪くしたくない。だから確実性が高いときだけたらい回すことにしているが、確実性を高くできりゃ苦労しねーんだよ。

ログに捉えられたおかしな挙動をみつけた。そのおかしな挙動が自分の守備範囲を超えているなら、他のチームメイトにたらい回す。他人にバグをたらい回すのは自分の株を下げるし相手のストレスを高めるのでほんとは直してあげたい。ただ状況証拠がある場合は相手もなんとかできる可能性があるのでマシといえばマシである。

ログでみつけた怪しい挙動が自分の守備範囲である。その場合はコードを睨む。でも正直、その怪しい挙動から問題をつきとめて直せた記憶がない。はーわからん・・・となる。

ログに怪しい挙動が見られない、あるいは怪しい挙動の原因を突き止められない。問題が深刻かつ頻繁であるなら、自分よりシニアなチームメイトにたらい回す。シニアなチームメイトが必ずしも問題を解決できるわけではないが、自分よりは判断がマシである。しかしそうしたシニアピープルは自分以上にたらい回されたバグが溢れているものなので、これ以上相手の心労を増やしてもなあと気が引ける。頻度や深刻さがそこまで高くない場合は、なんとなく放置して風化するのを待つ。しかしそれはそれで TPM や上司につつかれたりする。

というような負け戦ワークフローを、やってきたバグごとに繰り返している。ひたすら時間が溶けていく。ここ数ヶ月くらい、仕事の時間の半分かそれ以上を治ることのないバグを睨んで暮らしている。辛い。たまに直せるバグがあるとそれだけで嬉しい、みたいな期待値のどん底に到達している。

こうした作業を bug triage と呼んでいるが、bug triage 自体は税金みたいなもので仕事の成果として評価されづらい。製品を前に進めていないから妥当ではあるが、仕事の成果がでないのは事実。税金の支払いで財布がカラになる気分。これで人事考課とか下げられた日にはもうどうしょうもない。リアルに財布がカラになってしまうよ(誇張あり。)


どうしたもんかね。と考えるに 3 つの軸がありうる。

1 つ目は、ダメな会社員としての軸。すなわちバグは放置するなりすかさず他人にたらい回すなりして労をかけずに自分の手から離す。こういうと倫理的に NG ぽいが、一面では真理をついている。つまり、直せないことが明らかだったり他人の守備範囲であることがはっきりしているならさっさと手放すべきである。

自分は自らコードを書いてバグを直したい強いバイアスがあり、そのバイアスにある種の自負すらあるけれど、自分の未熟さやシステムの複雑さ、組織の構造や文化や締切といった現実と戦えてない。別の言い方をすると今は bug fix でなく bug triage に重点を置くべきで、質と速度を高めた方が良い。これは結局のところ、バグをすばやく閉じるなり他人にたらい回せ(ただし説得力のある形で)と言っているのに近い。これは、自分の価値観としては引き続き NG だけど、人としてダメというほどではなく思える。個人の価値観は現実の厳しさに負けました、ということで。

そんな流れから、残り 2 つの軸は triage をどうするかという話。

2 つ目の軸。bugreport のログの読み方を改善できないか。社内にはログのテキストをインタラクティブに正規表現でフィルタできるビューアがあるのだけれど、それだけだと不十分。もうちょっと色々支援して欲しい。支援の方向性としては人間の診断を手伝う(たとえばより良いビューアを作る)路線もあるし、ツールに診断させる路線もありうる。それ以前に、ログを読むプロセスを構造化する、たとえばチェックリストを作るとか、も必要に思える。ビューア強化はがんばってコードを書かないといかんので、まずチェックリスト的なプロセスの明文化と、それを支援する診断スクリプト書くあたりからスタートかなあ。我ながら引き続きクソみたいなこと言ってると思うけれど、ボンクラたるものしばしばクソさを受け入れざるを得ない。仕方ない。コードで色々な問題を解決するのはできるプログラマの特権です。

3 つめの軸。アプリの出力するログをマシにする。現状のログは android.util.Log の流儀でクラス単位でタグづけしてアドホックにエラーとかを出してるけれど、これはダメだね。もうちょっとアプリケーションのフローがぱっとみてわかる感じにしないと。adb logcat のバッファというのは根本的に unreliable でよくドロップされたりするし構造もないしで、なるべく依存したくないと目をそらしてきた。しかしバグとして自分の目の前にやってくるのはこのログなので、unreliable だろうと unstructured とか文句いってないで使ったほうが良い。自分の価値観に反するが以下略ということで。あと Platform より下のログは直せないが、それは仕方ない。

2 と 3 は数ヶ月前にやっているべき話な気がしてきたけど、バグがやってきてログを見ているとゾンビみたいに意識レベルがさがって問題解決マインドになれなかったのだよね・・・。

Elephant in the room として、アプリがなぜこんなに不安定なのか、安定性を高めるべきでないかという話はある。この問題にも対処したいと思っているが、そうした仕事をするためにはとりあえず目の前にやってきて時間を奪っていくバグを捌く即効性のある処方が必要なのだよ。汚職の片棒を担いでる下端官僚みたいな言い訳ではある。なお汚職はしてない。残業もしてない。

自分の理想が厳しい現実にやられていくのは若干 soul crashing だけれども、そういえば昔は仕事ってこういう感じだったなあと思い出す。理想のためにがんばる力が自分にないところが昔と違い、それは悲しい。しかしそれは自分の問題なので愚痴はともかく文句をいう筋合いはない。

景気のいい日本の会社

|

キャリア近況 - 滞舎路日記 を見ていて、本題とは関係ないが昔から抱いていたほのかな疑問を思い出したので書いてみる: 日本の景気のいい IT の会社で働くの、どんなものなのだろう/だったのだろうね。

今この瞬間に景気のいい Mercari なり PFN なりがそこらへんの外資系より(少なくともいくつかの指標においては)良い、というのは、まあそうなのだろうと思うしいい話だ。実際そこらへんの外資系から流れていく人も多い。

それはさておいて、たとえば 5-10 年前の景気の良い IT 企業、たとえば Mixi であったり楽天であったり DeNA であったり、で働くのは、それこそいわゆる外資系と比べてどのくらいダメだったのだろうなあ。まあ給料は安かったろうけれども、それもさておくと。中の人達はまあまあ楽しそうにやってたじゃん?

というのは、外資系および米国で働きつつ日本の会社の悪口を言ってる人たち、だいたい凋落を続けるメーカー系大企業出身だったり、景気の悪いアカデミアだったり、そのほか運が悪くてランダムにひどい待遇の立場にいた人だったりするのだよね。自分も過去に働いた会社は景気のわるいところばかりで、すべて大規模リストラしたり解散したりしている。それらと比べたらそりゃ景気のいいアメリカの会社は色々良いに決まってるが、これは日米比較という意味でフェアな比較ではなかろう。Comparing Apples To Oranges すぎる。

本当のところはどうなのか・・・というマクロな比較には実のところそんなに興味がなくて、自分も若いうちに一回くらい何らかの景気のいい日本の会社で働いてみたかったなという話です。自分の過去の記録をみても転職に際しあまり景気を気にしている様子がない。気にしろ。

就業年数が少ないときの経験は自分の中の定規になる。景気のわるい受託の会社で失敗プロジェクトばかりという自分の経験はだいぶ自分の prospect を損ねたと感じている。プロジェクトの失敗は自分に責任があるケースも多いのでかつての勤務先を責める気は毛頭ないけれども、「プロジェクトは{成功する/儲かる}こともある」という暗黙の前提でいる人と「プロジェクトは{失敗する/金の無駄}」と心のどこかで思っているひととでは、成功への引力みたいのがだいぶ違う気がする。


ところで辛い経歴を持つ人の呪いの深さというのは本当にかわいそうなところがある。

東京にいたころ、昔の(景気の悪い元勤務先/運の悪かった仕事)と景気の良い今の勤務先を比べ、日本の将来を憂いる風の口ぶりでなにかと過去の職場の悪口を言う人が一定数いた。いやその化石のような電機メーカー公社みたいなやつ基準で日本に危機感もってないで FB なり Netflix なり Amazn なりと比べて勤務先に危機感もってくれよという気持ちになったのを思い出す。同じように、そうした凋落していく会社はほっといて景気の良い日本の会社に目を向ければそれほど悲観的になることもない(から黙って仕事してればよい)とも思ったが、実態を知らないため確信もなかった。

いずれにせよ彼らの憂国活動は精神衛生にもよくなさそうだし生産的でもない上に本人の reputation も損ねると悪いことづくめなのだけれど、何らかの obsession に囚われ口走ってしまう様子で気の毒。

自分も過去の職場と現職を比べため息の出る場面はよくあったけれど、単に自分の経験がへぼいだけなのが明らかだったため異種混合の呪いにかからず move on できたのはよかった。

なんてのは、いまとなっては心の底から昔の話。

Performance Team, SRE and Android as Distributed Systems

|

Android には Performance Team というのがあって、「なんか遅い」みたいなバグに対してアプリ開発者が音を上げると登場して triage して責任者を突き止め、場合によっては自分で OS を直して帰っていく。最初は懐疑的だった自分もなかなかの仕事ぶりに評価を改め、いまは頼りになる人たちだと思っている。サーバ側でいうところの SRE みたいなもの、というとわかりやすい。

なんでクライアントサイドに SRE (的な仕事)がいるのかというと、結局システムとしての Android には分散システム的な側面があるからだと思う。Binder は RPC みたいなもんでたまに congestion を起こすし、ハードウェアの故障はともかくプロセスは LMK で死ぬ。CPU もメモリもいつも足りておらずプロセスは資源を奪い合っている。本物の分散システムとの大きな違いの一つは network partition がないところだけど、OS 本体はともかくアプリから見ると offline 状態というのは network partition みたいなもので、それなりに graceful に扱わないといけない。

そしてなんか電話機/アプリが遅いというとき、それはしばしばシステムとしての問題である。すなわち overload や contention のような system-wide で inter-component な問題が遅さを引き起こしている。もちろんアプリの出来が悪いだけということも多いけれども。

というわけでクライアントサイド OS の開発組織に SRE じゃなかった Performance Team があり、そうした system-wide の性能について日々考えているというのは、まあまあ理にかなっている。


クライアントサイドの性能問題は、いくつかの点でサーバサイドより簡単である。

まずなんだかんだで本当の分散システムではない: 多くの問題は単一デバイスに閉じている。だから理論上 OS は system-global view を持っている。もちろん production には millions of devices があってそいつらには long tail の問題があるわけだが、少なくともデバイス同士が干渉しあうことは、そんなにない。(クライアントであるデバイスが送るリクエストがサーバ側のレイテンシを生み出すことはよくあるが、ちょっと脇においておく。)

あと、突然の高負荷でシステム全体がダウン、みたいなことも起こりにくい。なのでふつう pager で呼ばれたりはしない。まあサーバサイドで flag flip をしたら突然アプリがバタバタと死にはじめることはあり、そういうときはアプリの人も呼び出されるわけだけれども、flag flip は昼間やってちょうだいね、ということで。

一方、サーバサイドにない難しさもある。

まずなんといってもモニタリングがヘボい。これは半分は本質的な問題で、半分は特定の実装のできの悪さだと思う。

本質的な問題。モバイルデバイス、とにかく計算資源がない。CPU 遅い、メモリ少ない、ストレージ少ない、ネットワーク帯域細い。なんでとりあえず Prometheus の agent をインストールしましょう、というわけにはいかない。モニタリングをするにあたってもかなりケチくさくやらざるをえない。

実装のへぼさ。 つまり、そうはいってももうちょっとなんかないの?というね・・・。Performance Team もなんらかの clue がないとできることは限られてしまうし、ましてアプリ開発者(自分)はもうわけわかんないログ睨むの疲れたよ・・・。ただ最近は Perfetto というプロジェクトでそのへんをなんとかしようとしているらしいので、首を長くして待っている。

クライアントサイド固有の難しさそのに。Production の制限の多さ。要するに我々は SRE と違って世の中の電話機に adb したりできないのである。いや、できたら困るんですよ。わかってますよ。でも出来なくて困ることもあるんだよ!Systrace できないじゃん!みたいな話です。

まあ Lambda や App Engine とかも開発者はコンテナにアクセスできないので似たような面はある。すると app-level の instrumentation がいよいよ重要になってくるため、結局は計算資源がボトルネックといえる。

クライアントサイド固有の難しさそのさん、といえるかどうかはわからないが違うところとして、ロードが burst 的というのがある。だから広い sliding window で time series の log をとる、とかやると重要な情報すなわち burst/spike を見逃してしまう。これは実際に時系列のデータを見て意見してるわけではないので間違いかもしれないが・・・。

スマホ、大半の時間は寝て過ごしている。画面をつついている時間も大多数は平和なものだ。アプリを起動する瞬間、データをロードする瞬間、カメラのシャッターを切る瞬間、なんらかのデータを submit する瞬間、モードを切り替える瞬間など、ほんのゼロコンマ数秒から数秒の間に起こる色々な細部が重要で、その数秒に問題があるとアプリが固まったり描画が乱れたりする。これはたくさんのクライアントから並列でリクエストが飛んできて結果として全体のマクロな負荷は平滑化されて見えるサーバの皆さんの典型的なロード特性とは異なる。

Burst 的、別の言い方をするとロードが時系列方向に heterogeneous である、と言えるかもしれない。なんでサーバサイドと同じようなモニタリングしてもダメだと思うのだよな。ではどうするか、は、アプリ次第だけれども、system-wide でいうと AcitivityManager や LMK の活動は重要な指標になりうる。Historian はそのへんよくできており、こいつやるな、と思う(エラそう)。

他の切り口でいうと、homogeneous な負荷の世界ではスタックトレースのサンプルをソートした framegraph が重要で, 負荷の heterogeneous な世界では普通の時系列 trace が重要。クライアントサイドでも、たとえば IPC のスループットをなんとかしたい、みたいな話になると tracing より framegraph が役に立つ。むかし Chrome の IPC 載せ替えを手伝っていたときは tracing より perf と framegraph が友達だった。

とにかく Android アプリは app-level および system-wide 双方が structured  で resource efficient な continuous かつ in-production の instrumentation をがんばらないといけない、ということです。もっとかっこいいツールとかダッシュボードとかみながらタタターンってかんじで性能改善したいじゃん。させろ!

 

帯状疱

|

Shingles帯状疱 が出てしまった。痛痒い。虫刺されと腰痛が同時に来ているような感じ。

ウェブを読んだ情報からおっさんの病気だなーと思っていたが、チームのメーリングリストに "shingles になっちゃったので悪いけど感染気をつけようねー" 的なメールを書いたところ、俺もなった、辛かったわーという返事が2つ。どちらも年下。必ずしもおっさん専門の病気というわけでもないらしい。だからなんだっつー話ではある。

ストレスなどで免疫が弱るとなりやすいという。このところかなりストレスレベルが高まっていたので、そうですね、という。家も仕事もストレス源自体は減らせないので、ストレス感度みたいのを下げてかないといけない。自分はストレス溜めやすい方だと思うので。

Podcast もどうすっかなー。しばらくお休みすべきか・・・。仕事もおやすみしたいが、それは叶わぬというか色々都合が悪いのでぼちぼち働きます。一週間くらいで治るなら休んでもいいけれど、回復まで一ヶ月くらいはかかるものらしい。

去年の終わりから今年にかけて、椎間板ヘルニア、chest wall pain (肋軟骨炎), overactive thyroid (甲状腺機能亢進症), そして shingles と病気ばかり。こう病気が続くと、あと何年生きられるのだろうかみたいな気分になる。が、気を取り直していかないとなあ。この先何年も似たような状態が続くようなら、まじで半引退して負担の少ない暮らしに舵を切る必要があるかもしれないが、まあその時がきたら考えます。あとから振り返って今年は特別ひどかったね、と思えることを期待。

書きたい、書ける気がしない

|

時間をつくったとしてどんなコードを書きたいかぼんやり考える。時間をつくれる目処は立っていないがそれはさておく。

まず Android のアプリ、一人で一定程度規模のあるものを書きたい気持ちがある。いままではゴミのような小物しか書いていないので。ゴミのような小物しかないのはやる気ではなく実力の問題なのだが、やらないといつまでも実力つかないからね。

できれば Android からは足を洗いたいとういう儚い願望はあるが、ここ数年の選択の結果すっかり Android しかできない人になってしまったので、せめて Android  開発者としては一人前になっておいた方がいいのでは、という気がしている。たとえば転職したい、とか思ったとして Android 開発者枠以外では雇われようがない。いまのところ転職したい気はないが、世間の動向からして勤務先で働くのに耐えられなくなる可能性はなくはない。そして最悪転職できる、と思えることは精神衛生に寄与する。

それとは別に ML やらないと、という焦りもある。しかしこれは仕事との相関が一ミリもない上に謎の理由で stuck して結局コード書けないみたいな可能性が高いので、コードを書くという目的には向いてないようにも思う。謎の理由で stuck するのはおそらく ML 修行には必要なフェーズなのだろうが。

この中間くらいの路線として, CV  なり Computational Photography なりのアルゴリズムを実装してみたい気持ちもある。いまの立場で Android 以外のなにか面白いことをやろうかな、とおもったらきっとこのへんが一番近いので。・・・と思っていたが、実際にこういう仕事をしている本職の研究者、および今でこそアプリレイヤで働いてるけど昔はピクセルさわってました、みたいな人の仕事ぶりをみると現状の自分と距離がありすぎてはじめる前から諦め、みたいな気分。

転職という話だと leetcode なり Euler なり HackerRank なりで coding quiz の練習でもするか、という選択肢もありうる。しかし正直自分はこの手のがまったく好きではないので、ほんとの職探しが目前にない限りやる気にならないなあ。短い時間でインクリメンタルに結果(正解)がでる良さもあるのだが。

実利という意味では何らかの Android 関係のオープンソースのプロジェクトにパッチを書く、というのもアリといえばアリ。でもまあ、あまりに仕事的すぎるというかたくさんコードを書くには向かないね。自分はコードの書き方がその手のパッチ修行に最適化されすぎているので、その路線を練習しても仕方ない。転職的な意味ではこれもそこそこ効果的ではあるのだろうけれど・・・。

こういう実利を完全にぶっちぎって無意味に言語処理系とかレイトレとか書きたい。という願望はないではないけれど、ファンタジーにしか感じない。

もうちょっと実利的にクラウドつかってなんかする、みたいのはアリかもしれない。しかし自分はクラウドつかってなんかするの実利を得られる身分ではないな。Android 枠でしか転職できない上に、会社の中はクラウドじゃないからねえ。


まあとりあえあえず Android アプリをなんか作る、としよう。

WordPress で日記を書くアプリ。WordPress for Android は遅すぎるというか UI がゴテゴテなので、もうちょっとテキストを書き捨てられる何か。欲しい。しかし自分がどうでもいいとおもっている「インターネットから JSON を持ってきてリストを表示するアプリ」なので、イマイチ盛り上がらない。でもまあ、こういう定番の作り方を知っておくのが "Android 開発者" であることだろうな、とも思う。

何らかのカメラアプリ。自分の持ち札的にはこっちをやった方がいいことに思えるが、特に作りたいものがないという問題がある。エンドユーザとしての自分がテキスト中心すぎて、画像でやりたいこととか全然ないのだよね。もうちょっと画像とか写真のリテラシーがあればよかったのだけれど。写真は Camera と Photos で完全に足りてます、という・・・。


今は規模は諦めて Hello Work をやる方が良いのかも知れない。やってるうちに何か書く気が湧いてくるかもしれないし。でもなー。なんかちゃんと頭つかって規模なりアルゴリズムなりの難しさがあるものを書く、ということがしたいのだよなー。

この何もかける気がしない感じ、ちょっと鬱病のひとみたいでよくないなあ・・・。

要リハビリ

|

ここ数ヶ月くらいデバッグのためにログを睨んだりちまちました高速化のために Systrace を睨んだりしてばっかりだったせいか、なんか全然コードが書けなくなってる感じがする。そしてこの先もあんまりでかいコードを書く展開にならない予感。リハビリというか筋トレとしてある程度まとまったコードを書きたいが・・・。

どうしたもんかな。仕事を休むか仕事をサボるか。この2つは実は本質的には大差がないのだよな、仕事は結局進めないとならず、サボろうが休もうが仕事が進まないことに差はないわけだから。仕事を休むのは制度なので休んでもクビにはならないわけだが、自分は今はクビになるよりもうちょっと色々やらないといけない身分になってしまったので、こう、心の余裕がないね。

仕事でまとまったコードを書けばいいのでは、という話はあるのだけれど、書くものないのだよね。いやリファクタリングとかすれば表面的な行数としてはいっぱい書くわけだけど、そしてそういうリファクタリングの TODO は若干あるからやる予定ではあるけれど、リファクタリングって本質的にはコードの品質以外何も生み出さない(そしてそれが良いところである)わけなので、ここでいう「まとまった量のコードを書く」には該当しない。ズバっと書き換えて高速化する、とかはリファクタリングとは違うが、速くできるならもうしてるっつー話です。

仕事のコードはリアルに価値を生み出さなければならず、それはめちゃめちゃコードを書ける人にとってはともかくボンクラ勢にとっては難しい。なのでどうしてもリファクタリングとかバグ直しとか細かい高速化とか、小さいインクリメントで小さい成果がでるものに逃げがち。

逃げずにリスクを取るとどうなるのか。というと、そもそも今の自分の仕事でどうリスクを取ればいいのかすらわからん。というのは、ガバっとコードを書いて実現したい新機能とかすごいかっこいいアーキテクチャとか別にないからね。

まあ「無い」というと語弊があって少しはあるんだけど、自分の立場を踏まえた優先度としては他に色々やることがあり、それらの「やること」はコードをガバっと書く以外の細々したものばかりなのである。困ったね。

この仕事でガバっとコードを書く自分が想像できない事実と、コード書きリハビリの必要性はたぶん表裏一体で、仕事でガバっとコードを書ける身分になるためにリハビリが必要だと自分は感じている。

これはもとをたどると去年チームに入ったときによくないリスクの取り方をして失敗し、その後の病欠などとをあわせコードを書く立場を作るためのリスク予算がなくなってしまった、という現実の帰結なのだろうなあ。

この話を総合すると下手に余剰の時間でランダムなコードを書くのはいまいちで、限られた余剰の時間はコードをがばっとかける身分への歩みにあてるべき、ということになるが・・・。


しかし経験的にこの何も見えない状況でそういう投機的な行動をとるのは良くない気がするな。リファクタリングでもバグ修正でも、個々の規模の大きさは気にせず数をこなすことでチームのコードをさわることにもっと体をならす方が良い気がする。

というのは今のチームに入って一年経つにも関わらずすごい限定的な働き方をしてしまったせいでコードベースに体が馴染んでおらず、それもズバっとコードをかけない感覚に寄与している気がするから。

つまり今の自分には2つ問題がある。1. 目の前にあるコードベースへの慣れの不足、そして 2. 絶対的なコーディング量の不足。これらに実績不足が組み合わって、仕事でガバっとコードをかけない状態を生み出している。小さい変更を積み重ねると 1. を改善できるし、2. についても少しは足しになる。だからこれがいま仕事の時間を使ってやるべきことに思える。

コーディング量の不足は・・・。やっぱり Podcast やめるしか無いかな、という気がする。しかし始めてしまったものには色々 inertia があって踏み切れないでいるのだった。

 

作らない、作れない

|

今年もふたたび @Scale に行ってきた。(去年)

おもしろかったが、一方でこういうかっこいい何かの一部になることは自分にはもうないだろうと思い知らされる面も強く、気落ちした。

知り合いが podcast で "自分で作ろう!" という話をしていた。この episode の主張は、プログラマは年をとると自分で何か作っても大変な割に良い物ができないからと既製品ですませようとするが、それは面白くないし作らない側のバイアスが強すぎるので作る側に倒してみると良い、という話。

自分は、すくなくとも余暇では何も作ることはできないし、仕事も目先の成果を優先して色々妥協しているのでここでいう「作る」に相当するなにかをすることはない。別の言い方をすると自分は作るか作らないかという選択肢から作らない選択をしているわけではなく、作るという選択肢がない。作る必要がある問題は、単に諦めている。

これは悲しいことだが自分の選択の結果なのでどうこういう気もない。自分の現状を正当化しようと作る選択肢の価値を低く見るようになってはいけない。一方で、現実にはそれは難しいとも思う。自分が「正しい」選択を諦め続けているという事実を見つめながら日々を過ごすのは、控えめに言って憂鬱だ。だから自分の言動の端々からは「作らなさ」のようなものが滲み出ることだろう。自分の知人にもそういう人はいる。

支持したい価値観と自分の行動が一致しないことが増えてきた。こういう場面で人々の振る舞いは色々だ。

行動にあわせて価値観を調整する人もいる。上の例で言うなら何かを作らずありもので済ますのを良しとするようになる。行動と言動の不一致を受け入れる人もいる。「自分で作るといいよ」といいながら自分では作らない。何も言わなくなる人もいる。ただ姿を消す。

多くの場合は、これらが少しずつ同時におこる。言葉の角が丸く曖昧になり、時々かっこいいことをいっても行動は伴わず、存在感が薄れていく。

 

Moving Target

|

また時間のなさについて考えている。というのは週末の leave alone 枠を数週続けて撮り損ねた上、今週(いま)も半分くらいになってしまってかなり frustration の水準が高まっているため。

時間がない、という事実はあるわけだが、可処分時間が単調減少しているのかというと、ゆるやかには単調減少であるにせよこのゼロになってるんじゃね、という体感が正しいとも思えない。何が起きているのか。日常の fluctuation が以前より大きいのだろう。つまり波が合って不規則である。

たとえば週末の leave alone 枠にしても日曜の 10 時から、とか決めてあるわけだが外出の予定のとかに上書きされ予定通りにことが進むことは少ない。食事の時間とかも子供の昼寝などに合わせて微調整されるので、この 10 時という予定を決めた前提もすぐに崩れてしまう。気がつくと時間は失われている。週末は特にその傾向が強い。というのは外出のタイミングは必ずしも自分たちだけでコントロールできるものではないから。

この不規則さとどう折り合いをつけるか。一つは少し無理をしてでも不規則さの影響が比較的少ないタイミングに予定をつっこむ。たとえば早朝とか。たとえばこのスタバは  5:30 から開いているらしいので、眠気をこらえて 5 時に起きて駆けつけ、5:30 時から 8 時くらいまで確保する、というのはどうか。なんとなく自分の規則正しさの限界を超えてしまっている気もするけれども・・・。あと週末に限っては深夜帯を利用する路線もありうる。田舎なのでコーヒー屋とか一切空いてないという問題はあるが・・・。そして年寄りなので深夜は早朝より辛いね。だめか。

直行する論点として、不規則に生まれた時間をどう取りこぼさないかを考える必要もある。不規則であるということは(長期的には)失われた時間がどこかで帰ってきているはずなので、それを逃さず捉える必要がある。

たとえば、最近は朝の時間は完全に失われた一方でゆこっぷ(おくさん)が子と co-sleep するようになったため夜の時間が増えた。夜は朝より疲れているので朝やっていたように気合をいれて難しい教科書を読み続けるのは難しいが、それでも podcast 準備の論文を読むくらいはできる。

ただこの夜の時間は自分のリズムに完全に組み込まれておらず、いまいち活かしきれてない。なんとなくだらだらネットをみて夜が更けてしまって後悔することが多い。

こういう不規則な時間をキャッチしてなんかやるのは、子供ができてからずっと考えているけれど今のところ機能してない。MSR のひとが Microproductivity という研究をしていてこれは問題意識としてちょっと違いきもするのだが、なにしろ research なのでなにか使えるものがあるわけでないのだった。ただこう iterative かつ incremental になんか書く、というのは以前からできてらいいと思っているので、もうちょっと追求しても良い話題なのかもしれない。ゼロ秒思考とか、切り口は悪くないと思うんだけど蒸留するフェーズが弱いよね・・・って前も書いたな

自分は文章を書く時は基本的に一撃でズバっと書く傾向があり、逆に書きかけで止まると書き上がることはないのだけれど、もうちょっと iterative に書き、アイデアを整理していく方法を考えた方が良いのだろうなあ。むー・・・。保留。

まあまずは早起きですかね。きびしい・・・

Bugrepot and Thread Dump

|

手元では再現しないが厄介なバグを割り振られ、ここ一週間くらいじっとログやコードを睨んでみたり再現を試みたりしていたがあまり打ち手がなく、仕方ないので問題が起きた時にそれを検知してこっそりアプリを殺す、という回避策コードをコードレビューにだしたところ「これほんとに治るの?それとも speculative fix なの?」というので「speculative だし fix ですらない partial mitigation ですよたぶん dead lock かなんかっぽいんだけど・・・」と返事。すると「Dead lock なら再現したときに bugreport とると thread dump が入るからわかるよ」と指摘される。なんだって!Bugreport なら最初にもらったやつが一個だけあるよ!さっそくログをにらみ直すとたしかに最後の方に thread dump が。そしてたしかに dead lock (じゃないんだけど似たような事態) がおきている!

普段はそのへんのノイズをフィルタし表示してくれるビューアを使っていたのでまったく気づいてなかった。この一週間はなんだったのか・・・といっても dead lock ぽいなと気づいたのは数日前。この数日はなんだったのか・・・。

適当な修正を書き、問題の箇所の持ち主にレビューを出す。そしてあちこちたらい回された結果、どうもその問題はちょっと前に依存関係の奥の方で修正されていたとわかる。そりゃ再現しないわけだわ・・・。

というわけで自分の書いたコードたちはチェックインされることなくバグがなくなり、めでたく締め切り前のノルマ完了。まあそれらのコードは会話のきっかけみたいなもんだったのでどうでもいいんだけど、ストレスがしんどい一週間だった・・・。

Bugreport に thread dump が入っているのを知らなかったのは残念だったが、それ以前に自分はほんとにログを読むのが下手だなあと思う。あとからみると、たしかに根本にあった問題を匂わせる出力はログに含まれていた。しかしノイズをかき分けてそれに気づくだけの才覚がなかった。

しょうじきこの「Bugreport のログから色々読み取る」というスキルはレガシーかつドメイン固有な上に持つと色々嫌なものを引き寄せてしまう気がするのであまり上達したいとも思わないのだが、一方で性能改善の仕事をしているとログを相手にトラブルシュートしなければいけないことは多い。生き延びるためにある程度は鍛えないといけないのだろうなあ。やだやだ・・・。

この「手元では再現しないがおかしい」という類のバグは、特に性能がらみでよくおこる(「なんか遅かった」的なやつ。) On-device tracing があるとだいぶ違うが大抵 trace なんてとってくれないので bugreport の限られた情報から憶測するしかない。多くの場合はしばらく睨んだ末に「わからん。降参」となって終わり。この triage 作業は今の仕事で一番イヤな部分と言えよう。やりたくないけど、性能仕事をしている限りは逃げられない。厳しい。色々対策は考えてるけど、どうなるかね。

Podcast の集客

|

今週は旅行のため Podcast を録音しておらずしたがって編集もないので、その暇にどうやったら購読者を増やせるかを考えてみる。増やす必要があるのかは今は脇においておく。

Buzz

まず完全に自分の直感で頭に浮かぶアイデアを書き出してみる。

話題を buzz りやすいものにする路線がありえる。buzz りやすいすなわち social media でリンクされやすということね。これには2つの切り口があると思う。

一つ目は題材/headline に流行り物や人々の好きそうなものを選ぶ。流行り物はさておき、好きそうなものとは何か。聞き手がその話題について知っており(あるいは知っていると信じており)、どれどれこいつらどれだけわかってるか聴いてみっか、みたいな態度で聞ける話。たとえば bikeshed であったり古典であったり。自分の意見を (support であれ confrontation であれ) 表明しやすい話題と言えるかもしれない。昨今は意見を表明する = social media になんか書く、なので buzz に向いている。

流行り物は自分も知りたい時があるのでそういう時だけやればいいとして、「人々の好きなもの」はねえ・・・購読者を増やすことが他のなにより優先するひとだけがやることであって、自分はそれに該当しない。Empirical software engineering  の話、読むと面白いけどあまりやりたくないのはこの「人々の好きなもの」成分が強すぎるから。

話術

つぎ。話術を軽妙にする。なんつうかこれは「話を面白くする」みたいなトートロジーぽい主張に見えなくもないけれど、情報としての価値ではない filling の部分をよくする、ということで、ようするにテレビのトークショーとかのホストやレギュラーのようであれ、ということだよな。まったくできる気もやる気も沸かない話だが・・・。

ただ軽妙さはともかく滑舌はもうちょっとなんとかしたい気がしている。編集してて自分のいってることがしばしば聞き取れことがあり、聴いてる人に申し訳ない。

Referral

すこしデータをみてみる。上で buzz ればよいと書いたけれども、じっさい social media  上でのリンクの流通はどのくらい購読者増に寄与するものだろうか。Misreading Chat, stats を見ていると social media より検索エンジンからの流入の方がだいぶ多い。これは自分がむかし blog を書いて stats  を眺めていた時には見られなかった現象な気がする。確認のため前に書いてた Medium の stats を見たら Twitter だのブックマークサイドだのばかり。検索エンジン全然 refer してくれてない。

検索でサイトにたどり着いてくれていることを考えると・・・。どうしたらよいのだろうね。たとえば show notes をもうちょっと親切にするとか? でも show notes で気が済んだら聴いてくれないからダメだな。Rebuild とか Turing Complete FM とかは chapter をつけていて、あれはエライし聴いてもらう敷居はさげていると思うが、面倒すぎるし Wordpress の hosting ではどのみちうまくリンクできないからダメ。

iTunes

多くの podcast は番組内で iTunes に review を残してくれるよう頼んでいる。Review の流量が iTunes 内でのランキングに寄与するためらしいのだが・・・ Apple デバイスというか iTunes の動くデバイスを持ってない身としてはランキングってなに?ってかんじなのだよなー。てか Chrome OS 開発者と Android アプリ開発者がやってる podcast をみなさん iTunes で聴いているの? ほんとに?

iTunes の Podcast Analytics はいちおう見えるようにしてあり、それによると各エピソード最終的に 500 devices くらいでは聴かれているらしい。これは多いと思うけれども、一方で 7-8 割くらいといわれる iTunes の podcast market share を自分たちの購読者が反映しているというアイデアも直感的には信じがたい。まあ自分が Android にバイアスされすぎてるんだろうね。ただ自分で見えないランキングのために何かをお願いするのはアホらしいなあ。 自分がこのアホらしさを克服できたらお願いすることにしよう・・・。

The YouTube stars heading for burnout

とかぼんやり考えていたら職業 Youtuber の苦労について書かれた記事を見かけた。記事の中では彼らが購読者獲得のため何をがんばっているかについても触れられている。YouTube は podcast よりは Web 寄りだけれども、同じ非活字メディア同士参考になる部分はある気がする。

記事の中では social media やコメントでの engagement, 更新頻度, 他の Youtuber からの推薦(を得るための Youtuber 同士の社交) に苦労しているとある.

自分は social media があまり好きでないので Twitter で反応するとかはあまりやってない. 購読者を増やす意味ではやった方がいいんだろうけれども, Twitter にログインしたくないので. Social media の外に dedicated な forum をつくる、というのも理論上はできるけれども、なんとなく嫌な予感しかないので多分やらないでしょう。

更新頻度は, 結果的に週二回になっていてこれは良い方向に機能してるのだろうけれども, 個人的には編集とかが大変なので半分くらいでもいいかなと思っている. ただ論文を読む量も減ってしまうので, 今のところ週二回になっている.

他の Youtuber がどうこういう点だと、じっさい Misreading Chat の購読者は Rebuild や Turing Complete FM 経由でやってきた人が多いっぽいので、きっと効果はあるのだろうな。ただ、たとえば Rebuild に出してもらって自分の podcast の宣伝をするというのも図々しく感じてしまう。一回やらせてもらったからもう十分でしょう。自分が他の podcast を宣伝するのは別にいいのだが。

むしろこの記事を読んで思うに、自分は職業 podcaster ではないのだから生活がかかってる人々と同じ指標すなわち購読者数を気にするのは筋が悪いのではないか。そもそも日本語のプログラマ向け Podcast を職業でやってる人はいないと思うけれども・・・。

様々な時代の力によって本職ではない個人までもが stats と attention の虜になってしまった blog の不幸を繰り返さないためにも、購読者数のような他人の数字ではなく自分にとっての価値を重視する方がよい。とおもう。と、結局いつもの結論になってしまうのだった・・・。

ただ滑舌は、もうちょっとなんとかしたいです。はい。

Updating Baseline

|

Snippets, 始めたのが 2015 年の初頭くらい. 去年の途中であまりに何もできない時期が続いたため一旦リタイアし, 今年の 3 月くらいからまた復帰していた. しかし結局なにもできていない.他の人々ががんばってるのをみると, 励みになるより自分の powerlessness が際立って depress されてきてしまう.

この Snippets はもともと互いの活動に触れることで自分を procrastination とか complacency から立て直す目的で始め、それは機能していた。でも今の自分の問題は時間のなさであってサボりであるとは感じていない。だから今週も何もできませんでした、しかしどうしょうもないかんじです、みたいな snippets を書き続けているとどんどん現実が reinforce されていくように感じる。

一方で snippets をやめても特にどうにもならないこともわかっている。なんというか、どうにもならない現実を受け入れるか、リマインドされ続けるかの違いみたいなかんじか。

これは benchmark の rebaselining に似ている、だろうか。ある benchmark で何らかの数字が悪化し dashboard が赤くなる。しかし諸事情からその数字が改善しないことはわかっている。このときやるべきことはベンチマークの baseline を現状の数字で書き換え、今後の regression に備えることである。その dashboard を赤いまま放置することでも、continous benchmarking を止めてしまうことでもない。ゼロ成果な Snippets を書き続けるのは前者、Snippets から脱退するのは後者に相当するように思える。

では baseline の update に相当するのは何なのだろうか。それ以前に、自分は現状を受け入れるべきなのだろうか。それとも何かもうちょっと悪あがきすべきなのだろうか。というと悪あがきすべきなのは明らかなのだが、特にアイデアないのだよね。そしてこのメタファでいくと順番としてはまず rebaselininig で regression に備えた上で try-n-error するのが望ましい。なので今の自分を monitoring するのに相応しい baseline について考える必要がある。それはできれば snippets のフレームーワークに則っているのが望ましいが、必ずしもそうでなくてよい。

どうしたもんかねえ。といったところで今日は時間切れ。

Tateno Culture

|

自分の勤務先はいまいちこう、小規模でカジュアルな情報共有がやりづらい。Google Apps を使っているので、まあメーリングリストはある。いちおうチャットもある。Docs もある。Sites もある。社内ソーシャルメディアもある。ソースツリーに Markdown をチェックインする文書化インフラもある。Bugtracker もある。しかし。あれがないんだよあれが。Wiki と Blog がつくっついたみたいな、日本の会社は多かれ少なかれ使ってるアレ。Qiita Team, Esa, Kibela とかそういうやつ。なんでないの?

勤務先は融通の聞かない大企業だから仕方ない面はある。しかし英語圏、似たようなツール全然なくね? グループウェアとか Slack クローンとか Google Docs の亜種は腐るほどあるくせになぜアレっぽいやつはないの?おかしくね。Confluence は違うんだよ!Wiki は違うの!Wiki でも代用できるけどそうじゃないの!もっと時系列とカテゴリーとソーシャルメディアと日報と日記と意見と説明をいいかんじに雑に混ぜたようなそういうやつなの!なんでわかんないのきみたち!!?

と思っていたのだけれど、まあこれはもしかしたら日本語プログラマ圏固有の文化なのかな、と思うようになった。というのも結局こいつらはみな secondlife こと Yuichi Tateno 氏がはてな社やら Cookpad 社やらで内製および製品化したウェブアプリから多かれ少なかれ、そして直接的間接的な形で影響を受けて生まれた親戚みたいなもの。言ってみれば Tateno Culture なのだ・・・と自分は自分は雑に理解している。でも 7 割くらいあってるよね多分。

結局アメリカ製の気の利いた、ものに限らずパクリでもそうだけれど、様々な生産性ツールだって、作り手がキャリアを通じて得た体験や知見から生まれている。そして彼らは誰一人として Yuichi Tateno と一緒に働いていないのである。(たぶん。)残念すぎるが、まあ仕方ないね。日本とアメリカ遠いからね・・・。

自分も 10 年くらい前に日本の会社で働いていたとき、Wiki で似たようなことをしていた。そしてそれは特別なことではなかったと思う。それはなんていうか日本語圏プログラマなウェブピープルの時代の空気で、それも当時はあんまし気にしてなかったけど多分もとをたどれば Yuichi Tateno 周辺カルチャーにたどり着いたのではないだろうか。そして自分が悪態をつきながら渋々 Google Apps を使っている間に、そうした文化は上に挙げたような製品たちに結実していったのだった。やーよかったね。羨ましい。

最近なんとか Google Apps 上で擬似的にそういうことができないかと試行錯誤してるんだけど、いまのところ全然むりなかんじ。自分は thought leader でもないし。

現状のアレらのツールは自分の勤務先のような社員数万人の企業までスケールするようには見えない。でも同じようなものがもし英語圏で流行り、あわよく Unicorn 化したりした暁にはなんらかの形で Google Apps  や Office 365 に受け入れたかもしれないし (Slack を見よ)、そうでなくても内製のしょぼいクローンくらいは作られたであろう。

そういうことが起こらなかったのは残念だけれど、どちらかというと固有名詞の正確さはさておき先の Tateno Culture 的な時代精神が花開いていくつものユニークな製品をうみだした素敵な事実を appreciate したいいうはなしです。


上の製品たちが英語圏に展開すればいいのでは、と期待する人がいるかもしれないけれど、それはなさそうだと自分が考えているのはわかってもらえると思う。人々が共有する時代の空気から生まれたものが、空気の繋がっていない違う世界に広がっていくのは難しいよね。

あと勤務先の名誉のためにいっておくとそういうアレがない以外はまあまあうまく回っているのではないでしょうか。


2019/8/26 追記

本家? のはてなグループはおわってしまったと教わった: はてなグループ終了に寄せて - #生存戦略 、それは - subtech

草の根ツール

|

Battery Historian (GitHub) というツールがある。Android の bugreport  dump を時系列に可視化してくれる。名前からもわかるようにバッテリーの浪費をチェックするためのツールだが、結果としてシステムの挙動を longitudinal かつ holistic に眺める役に立つ。Systrace のように細かいことはわからないが、そのぶん広い時間の幅をカバーしてくれる良さがある。なんだかわからない性能バグがやってきたら、とりあえず軽く Historian をチェックする。

このツール何がすごいかというと、必要な情報はぜんぶ bugreport dump から集めているところだよな。

Android の bugreport dump はすごいアドホックな非構造テキストデータの塊で、基本的には logcat  バッファの中身と dumpsys にはじまるいくつかの inspection 系コマンドの実行結果が詰まっている。ないよりはマシだが、しょうじき大したデータではない。Historian はそのしょぼいデータをまあまあいい感じに可視化し、なんらかの知見を引き出している。もちろん中の人が作っているので Historian 自体の必要に応じ OS が収集しているデータもあるだろうが (batterystats とか), それにしてもこのしょぼい中がんばったなと感心する。

常識的に考えたら Android がやるべきことはシステムの活発度に応じ粒度を変えながら iostats やら vmstats 的なデータを構造化した状態で time series 用 ring buffer のストレージにダンプし続け, かつそのストレージを様々な subsystem から書き込めるよう公開し、システム全体の時系列のロードを常時収集のうえ bugreport に含めることである。ぜんぶ proto なサーバ側を見よ。

しかし Android にそうした大局的なまともさは期待できない。(いいかげんやってもバチはあたらないとおもうが。) かわりに正しい問題を見定めたビジョンと実力のある現場のエンジニアが手持ちの時間の中でギリギリできることをやる。その結果が Historian なのだろう。(きっと。)これは Android 的だなと思う。Systrace も似たような雰囲気あるでしょ。

こうしたツールやシステムに対する自分の気分は複雑。ギリギリじゃなくてちゃんとまともにやれと思う一方、まともにやろうと人を集めて作ると大げさで使えないゴミの負債を生んでしまうのではという恐怖心もある。オープンソースな世界だと市場原理でいいやつが残る期待があるけれど、企業のコードベースというのは計画経済で、かつオープンなプラットフォームだと一度入れてしまったものはゴミでもなかなか切り捨てられない (例: renderscript)。あんまりムリに背伸びはしないでくれよな、などと思ってしまう。我ながら上から目線な上に余計なお世話にもほどがありますが・・・。

Android に限らず、しょぼいが便利な内製、製品固有のツールやライブラリが本腰を入れたプロジェクトとして書き直されゴミ化する様を何度も見てきた。そのせいで警戒心がある。しょぼいツールに資源が投入された結果よくなった例もきっとあるのだろうけれど。

個人的な意見としては、問題意識のあるプログラマがヒマを見つけて気の利いたツールの萌芽を作り、それに気づいた周りのプログラマが手を貸し育てていく、というパターンが内製ツール成功の定石。Android のひとたちにはきっとヒマが足りてない。これも余計なお世話だが。

プログラマは適度にヒマにしておくのがよい。ヒマの大半は無駄に使われるだろうけれど、時々生まれる成果はトップダウンには置き換えられないものだから、それに免じて見逃してちょいだい。と思う。そういう意味で優秀なプログラマほどヒマなほうが良い。

コードサーチの力

|

勤務先のソフトウェア開発インフラやプロセスには良いところも悪いところもある。中でも一番良いものはたぶんコードサーチだと思う。コードサーチのできの良さが、他の様々なイマイチさを一定程度救っている。

コードサーチといっても検索だけでなく、シンボルをクリックしてジャンプできるとか履歴やら blame やらができるウェブブラウザ越しのコード閲覧環境一式や monorepo である事実を含めて良い。

まずコードサーチがあるとドキュメンテーションの重要性が下がる。この API なんだろ、という時にまずコードサーチをするようになるから。実装を見て、呼び出し箇所を見て、だいたい用が足りる。それでもダメならコードの冒頭なりディレクトリの README にドキュメントないかなーと探して、それでもダメなら仕方なくコードじゃないサーチを試す(だいたい何もでてこない)。エラーがおきたら、まずエラーメッセージをコードサーチする。

ライブラリを提供する側もユーザがコードサーチすることをわかっているので、サンプルコードとかは一通りチェックインされている。そして codelab とよばれるハンズオン方式のチュートリアルがドキュメンテーションの方法として幅を効かせている。

逆に Javadoc のビューアは知る限りどこにもない。Java 自体は広く使われているし、そのコメントも Javadoc フォーマットで書くのだが・・・。コードサーチ上ではコメント内の @link とかがちゃんとハイパーリンクになっててウケる。

設定ファイルの類がぜんぶチェックインされている事実もコードサーチの有用性を高めている。ダッシュボードや Web UI の類でよくわらからい項目があったら、とりあえずコードサーチする。

あるとき性能リグレッションのバグを割り振られたプログラマが、ベンチマークの CI を管理する QA チームの一人に質問していた。

「この指標の名前、コードサーチしても全然出てこないんだけどどうやってサーチすればいいの?このハイフンの前を削ればいい?」その場の誰にも答えがわからず聞いて回ってたどり着いた人いわく「その項目の横にある鉛筆のアイコンをクリックすると(コード上の名前とダッシュボード上の名前の)マッピングを編集できるよ」つまり答えは(サーチでたどり着けない)データベースの中にあったのだった。

データベースじゃ見つからないわと一同爆笑。そしてブーイング。サーチできるようにしとけよ!と叫んだそのプログラマは、すかさずラベルにコード内のシンボルを追記した。よしよしこれでサーチできるぞと・・・。

このエピソードはコードサーチのメンタルシェアを物語っていると思う。実際じぶんたちのチームが使っているダッシュボードは社内でもできの悪い部類に属しており、ちゃんとした部門の使っているできが良いやつは設定をチェックインする設計のものも多い。まあ設定ファイルをチェックインするのは infrastructure as code 的な意味でコードサーチ以外の利点も多いなのでサーチのためだけにそうなっているわけではないけれど。

コメントだけがドキュメントでない、独立したドキュメントにはそれはそれで価値がある。その主張は事実かもしれないけれど、コードサーチはドキュメントとしてのコードや設定ファイルの守備範囲を大きく広げる。おかげでプログラマの仕事がよりコード中心になる。副作用がないではないけれど、個人的にはけっこう好き。


あるとき社内インフラのサーベイがメールで送られてきた。諸事情でフラストレーションを溜めていた自分は脊髄反射で「中途半端な内製ツールを強要しないでオープンソースを使わせろばーかばーか」的なコメントを書いて投稿してしまい、あとで大人気なかったと反省した。

そうはいってもいいとこだってあるよな、と考え直して最初に思い至ったのがコードサーチ。罪滅ぼしにいい話でも書こうと思った次第。いずれ GitHub に完敗する日まではエンジョイしておきたい。

エピソード構成見直し

|

Podcast, 自分のターンは基本的には論文の構成にしたがって話を進めているのだけれど、これはイマイチだな。概要をつたえるという趣旨に合わないし、門外漢相手に話をするメディアの性質にもあってない。そして書いて有ることを全部伝えようとする結果長くなりがち。もっとこう、内容を把握した上で話す順番とかとりあげる話題は自分で考え、細部はざっくざくと削ってしまう方が良さそう。

それはつまり Linear Digressions みたいにするということで、幾つかの理由からもともとはあまり乗り気でなかった。まず若干パクリっぽい気分になるので自分なりの方法を考えたかった、というエゴのようなもの。あと Linear Digressions はあっさりしすぎて食い足りないところが自分は不満なので、詳しい話をしたかった。あとは理解がいいかげんな状態で中身を再構成するとかできなそう、という気がしていた。

が、その結果として締りがなく時間ばかり長い現状になってしまっているので、何か違うことを試して良い頃合いでしょう。難しかったらまた考え直すということで。

たとえば向井さんとかは、割とあっさり済ませているよね。そしてそれは機能している気がする。自分はせっかく読んだので読んだよーと言いたい誘惑に負けてるのだろうな。

というわけで次回からは構成を無視してあっさり目に話してみたい。

 

Thread Priorities

|

Android では UI thread に高いプライオリティが割り振られているという。それは Systrace を睨めばわかるが、ふと思い立って実際にどのくらいなのか調べてみた。この SO の記事を真似してよく知っているアプリすなわち仕事アプリのスレッドを眺めてみる。

  • UI Thread と Render Thread は同じくらい高い pri がある: 29
  • HwBinder のスレッドは更に高い: 31
  • ランダムなワーカーの皆様は 19
  • Thread#setPriority で釣り上げを試みたと思しき奴らは 21. つまり Java の API をいじっている範囲では UI Thread には勝てない。setpriority() とか使うと変えられるのだろうか。常識的に考えるとダメそうだが。
  • ART の GC 用スレッドは低め: 15

最終的に UI thread をブロックする処理は下手に worker に逃がすより UI thread でやってしまったほうが良い場合があるとわかる。まあ CPU は1個だけじゃないし他プロセスとの兼ね合いもあるので一概には言えないけれど。

ps の出力には PRI の他に NICE もあるが、上下関係は PRI に準じている。違いが気になるけど調べるのはまた今度。

 

Evicted

|

Evicted: Poverty and Profit in the American City を Audible で聞き始めた矢先、アパートのドアに管理事務所からのお手紙が。「三日以内に家賃払うか出てけ」「法的な措置をとるからよろね」という。マジかよ!慌てて管理サービスのページを開くと auto-pay の設定が切れていた。すかさず支払う。しかしこんな脅迫状送りつけてくる前に一声かけてくれや・・・。三日前に通知とか、うっかり旅行中だったら詰んでしまう。Auto-pay を設定しなおすと同時に、設定の見直しを促すカレンダーイベントを作って予防線を貼った。明日 leasing office にいって支払いが認識されていることを確かめねば、と思ったら off-site で不在とか張り紙がはってある。脅迫状送りつけといてだんだよーーーもーーー。

前に住んでいたアパートはもうちょっと穏当なメッセージで通知された気がする。このアパート、立地はいいけど運用は色々と好きになれん・・・。なお先の書籍によると、いちど法的な措置が発動してしまうと、裁判で勝とうが負けようが訴訟された記録がデータベースに残り、就職やらローンの審査やらに影響がでうるという。疑わしきは無罪の原則は資本主義の圧力により崩壊していたのだった。読んでる本がよくないのかもしらんが、アメリカのろくでもなさに対する確度が高まっていく日々。

Mountain View は今年から rent control の法案が施行された。最初はめでたいと思っていたけれど、これって大家に住人を追い出す incentive を与え、長期テナントはなにかと迫害されうるよなあ。自分たちは本来は大企業勤務でわりかし stable income 、かつたいして文句もいわない優良住民のはずなのに、rent control のせいで追い出し候補になってしまう。ダメじゃん。はー Sunnyvale に帰りたい・・・という気分。


十年前に住んでた桜新町のアパートでうっかり半年ほど家賃を払い忘れたら大家さんが遠慮がちにやってきたのを思い出す。あの頃は平和だったなあ(そして馬鹿だったなあ・・・)。なおその次に住んだ広尾のアパートは2日くらい払いが遅れたら親に電話が行き、かつ大家がドアをドンドン叩いて催促に来た。それでも法的措置を取られるのよりはマシな気がするよ・・・。

 

Less Free Time, 2018

|

時間がない、という定期的な愚痴です。

子の寝かしつけが難しくなってきたのと、子の朝飯の助けをするようになった結果、朝の時間も夜の時間もなくなってしまった。前は Podcast だけで一週間が終わってしまうと思っていたけれど、今や podcast の準備すら怪しい。ここ一ヶ月くらいエクストラな読書はまずムリなかんじ。そこに週末の外出などが重なると、週末の考え事時間さえ失われる。フラストレーションというか絶望というかそういう気持ちになる。

とはいえコントロールできることではない以上精神衛生を損ねても仕方ない。10 のうち 10 失われるところをなんとか 1,2 は手元に残せるよう頑張ってみて、うまく行ったら喜ぶくらいに期待値を調整しないとな。たとえば今は妻子昼寝の隙をついて給油ついでにコーヒー屋で管を巻いている。こういう小細工を、夫婦関係を損ねない範囲で色々やってくセコさが求められている。

共働きを片働きにして余裕ができるかと思ったが、そこに発生した余剰資源は大半が子供などの為に使われ自分には大して回ってこない。これも優先順位からして完全に妥当なことで文句はないけれど、自分が間違った期待値を持っていたせいでがっかりしてしまう。

妻子あり生活、適応したと思ったけれどまだまだ先は長かったという話。

 

Gralloc, Treble and ION

|

カメラの画像など Surface を介しプロセスをまたいで流れていくメモリ (buffer) は Gralloc というアロケータで確保される。Gralloc は HAL である。

ところで Android は O ではじまった Project Treble によって多くの HAL が独立したプロセスに追い出された。Binderization という。昔の Windows の COM-fication および Mozilla でおきた反動の De-com-ificaton を思い出すがまあそれはいい。

これが意味するところは Gralloc も binderized で別プロセスに追い出されたということである。マジで?とおもったけど Systrace を睨むとそれっぽいプロセスがいるのだよな実際。無駄にかっこいいなおい・・・。Image の確保開放、微妙に遅いと思っていたがこのせいという面は否めない。


Treble, 資料を眺めると色々思わぬことが書いてある。たとえば above HAL の binder とは別の "binder context" を使って congestion を回避しているという。そしてそのためにカーネルもちょっとかわっている。Systrace で "HwBinder" というトレースがところどころにあるのはなんだろうとおもっていたけれど、それが別コンテクストで動く HAL 用の binder なのだろう。

更に HAL の Binder は binder といいつつ IDL は AIDL variant の HIDL というフォーマットで、AIDL と違い C++ もサポートしている、というか C++ がメインらしい。君たちは IDL コンパイラ二種類サポートしてくのか。それより AIDL 直してくれや・・・。


ところで Gralloc の話にもどると、このひと HAL とはいえ結局中では何をしているのだろう。というと、多くの場合は ION に落ちるらしい。例:

ION は Android がドライバ実装のため Linux に入れた shared memory の仕組み。アプリのレイヤで使う ashmen とは違い、たとえば物理メモリ上で連続した領域を確保したい、みたいなことができるという。LWN にいくつか解説がある。

ION があるならもう Gralloc は HAL じゃなくて AOSP 側で持ち、そのレイヤから直に ION に行けばいいのでは・・・という気もするけれど、Gralloc は最初の頃からあるのに対し ION は GB あたりで入ったらしいので歴史的経緯なのかもしれない。あと上でリンクした Exynos のコードをみると実装固有のフラグを Gralloc のレイヤから ION の下のデバイス固有コードに渡すようなことをしているので、Gralloc のレイヤにフックがあるのに意味はある・・・ような気もするが、基本的には Gralloc の usecase を伝えているだけなのでそれが ION に入ってればよくね?とも思う。どうせ Android 用なわけだから。あとだしの感想ですが。


ION は複数種類のヒープをサポートしている(ion.h). Linux のカーネルが普通に管理している (物理的には page にわかれている) メモリからアロケートする SYSTEM ヒープ、カーネルの起動時に reserve しておく CARVEOUT ヒープ (物理メモリは自動的に continuous になる)、そして DMA ヒープがある。

CARVEOUT はお前は昔のゲーム機か、というかんじでゲンナリするけどまあそういうの必要なこともあるでしょう。 (共存している co-processor を動かす別の OS と連携するとか。) 感心したのは DMA ヒープで、こいつは Continuous Memory Allocator 略して CMA からメモリを確保する。

CMA は名前の通り continuous な物理メモリを確保できるのだが、CARVEOUT のような雑なことはせずカーネルがもっているメモリから必要に応じてアロケートできる。正しい。しかし誰得なのだろうなと思ったら、パッチを書いていたのは Samsung の人だった。エライ。Samsung, 伊達に Android 界の頂点に立ってないなと見直した。

そしてこういうヘンなやつらもちゃんと仮想メモリにマップしないといけない Linux の VMM は大変だね。


ところで Gralloc がメモリを ION から確保するということは、そいつらは userland から普通に map できるということである。つまり GPU に渡すメモリを CPU から触れるのでは? SGI unified memory architecture なのでは? とおもったら O から NDK に AHarewareBuffer という API がたされており、これがまさにそういうクラスっぽい。(そして古いバージョンでもplatform の中のコードを無理やり触っている人たちがいたらしい) べんり! まあ CPU 遅いのでできることそんなになさそうだけど。


なお ION は雑すぎて脆弱だよと主張する ION Hazard という論文がある。Android PoV から ION を理解するのにはこの中の説明が一番わかりやすくてよかった。

My Note Taking 2018

|

Ask HN: Favorite note-taking software? | Hacker News という定期スレがあったのに釣られて自分のスナップショットを書いておく。あまり参考になる人はいないだろうけれど・・・。

Accepting Google Docs に書いたとおり、自分は仕事のメモはすべて Google Docs に集約した。ただ以前は一つの Docs にすべてを書いていく ChangeLog スタイルだったのを、ChangeLog 的な時系列 doc とプロジェクト単位の記録用 doc に分割した。ここで言うプロジェクトは適当なまとまりのタスク、くらいの意味。細かいファイルが増えまくるのも困るのでバグ修正などは Bug Scrapbook という doc に Section を作って書き連ね、でかくなってきたら別文書に extract する、といった運用をしている。

前に Google Docs は sync がちゃんと動くのが良いと書いたけれども、もう一つの利点として GSuite のサーチが割と使えるのも良さだと気づいた。困ったらとりあえず GSuite でサーチする。すると GMail なり Groups なり Docs なりで書いたものが見つかる。GSuite 色々言いたいことはあるが search  がちゃんとしてるのは面目を保ってる感じがする。


仕事外の記録は Dropbox Paper と Blog を併用している。Dropbox Paper がトータルで Google Docs より良いかは微妙だが、まあ Google 製品ばかりでも面白くないと使っている。たとえば Podcast 用の reading note は Paper. やはり Sync が重要で、会社の昼休みにつけた記録を寝る前に引き継げたりするのがよい。

残りは Blog.

Blog を記録に使うのはイマイチなところもあるが良いところも少しはある。イマイチなところはオフラインに弱いことと遅いこと。ただ Android アプリは offline に対応しているので、自分にとって一番重要な offline usecase はカバーされている。PC もがんばってほしい。そして遅い。これもオフラインの弱さと根は同じ気がする。記録をつけることでなく、文章をウェブに publish するためのツールなのだよな。(といいつつ前に一瞬ためした self-host の Ghost は offline で動くし速いしなか素晴らしかった。でも self-host はしたくないし hosting も高いので諦めた。)

Blog の良いところは、やはり文章を書くには良い体裁だと思うのだよね。雑な箇条書きよりも考えが整理されるし。万一人に読まれると思うと自暴自棄はことは書かない、そして書かないから考えなくなる。自分の潜在的な破滅志向を抑制できてよい。家族持ちが破滅志向よくない。

あと他のメモツールにない大きな利点として blog はスクロールで時系列に記事を skim できる。時系列でスクロールは読み直す手段としてすばらしい。なぜ Evernote とかにないのか謎。

公開する記録としない記録は混在させている。公開するのがデフォルトで、公開しない記録には専用のカテゴリを割りふって弾いている。これはリアルタイムで書いてるブログだと危なっかしくて足枷になるだろうけれど、自分のように年に一回エクスポートして公開する方式だとうっかりの危険は小さい。出す前にざっと眺めるから。


まあブログが特段 note taking に適したメディアだと言うつもりはない。自分は blog というものに多くの時間を費やしてきたせいで思考形態がブログ的になっている、つまり自分がブログというツールの側に適応しているのだと思う。

でもそういうのってあるでしょ。Evernote ユーザは Evernote 的に、Org-mode ユーザは Org-mode 的に、Simplenote ユーザは Simplenote 的に考えているよね。きっと。そういう力があるからこそ、冒頭のスレにいるような人々や自分は謎のこだわりを持ってしまうわけじゃん。

Owning The Speed

|

これまで UI の性能をみてきた同僚が「特定の操作の速度が新機種の電話で遅い」というバグをファイルした。よそであった議論をうけてのバグ登録。たしかにその操作はちょっと遅い。しかしその遅さ、たしか別のバグで議論されている HAL の下の遅さが原因だった気がする。どうやって直す気なのか・・・とおもったら、まさに HAL の担当者にそのバグをたらい回して「とりあえず HAL の遅さについて議論してちょ」とコメントしていた。なるほど。

別に責任転嫁をしているわけでなく、その遅さを直すためなら議論を推し進めたり背中を押したりのプチ TL/PM もするという話。自分はこういう他人を巻き込んでなんかやるのが苦手なので、彼はエライな、と思う。

結局、たとえば 「UI を速くする」といった粒度のある仕事をしようとおもったら自分では直せない問題にも踏み込まざるを得ない。特に壁の多い世界では。なのでプチマネージメント業が必要になる。世間ではリーダーシップと呼ばれているものなわけだが・・・。別の言い方をすると、何かを own するには時にその場を取り仕切らないといけない。アプリを速くしたいなら、ときに遅いコードの持ち主をつついて速くしてもらなわないといけない。

そういうの、すごい昔はできた気がするけど言語バリアを跨いで以来すっかりできなくなったしやる気も失っていた。でもまあ、やらないといけないのだろうね。どうやってこの苦手で面倒なものに手を付けていくかを考えないと。なんかこの話くりかえし書いてる気がするな・・・。

贅沢してる

|

家計簿や予算を真面目につけ始めて思うこと: 自分たちは特に慎ましい暮らしはしてない。それなりに贅沢してる。

共働きでもないのに子供を daycare にいれている。それなりの頻繁でガジェットを買っている(自分が)。子供部屋のため 1BR でなく 2BR のアパートに住んでいる。そのアパートは勤務先から近い。毎年海外旅行(日本)をしている上に、来年は親戚の住むスイスに行きたいね、とか言ってる。引っ越してきたときに買ったクルマは新車である。自分は細々したインターネットサービス群に金を払っている、など。

こうした意思決定は(ガジェットとスイス旅行を別にすると)自分の中では正当化されているが、正当化したところで安くなるわけではない。そしてこうした出費によって生活費を base salary 内に収めるという目標が遠のいている。

自分たちはあまり外食をせず、クルマを二台持つこともせず、ケーブルテレビも契約せず、衣類宝飾品もさして買わず、家も買わず、Whole Foods にも通わず、庶民的な倹約チップスに出て来るような無駄遣いの類は割とクリアしているが、一方で上に挙げたような、ほんとにカネがない家ならまずやらないような出費をしている。(Expense-conscious な家庭が毎年海外旅行をするだろうか?)

一方で職住近接も daycare も 2BR も帰省も自分たちの QoL 向上には大きく寄与しているので、節約のためにやめてしまえばいいとも思えない。羽振りの良さの恩恵として有難く浴しておきたい。

この平和な日々が景気の力だという事実は俄には受け入れ難いけれども、それはひとつには付き合いのある人々の多くがおなじくらい(あるいはより一層)羽振りが良いせいで、無意識のうちに QoL standard が釣り上げられてしまっているのだろうね。身の回りの人の羽振りが良いのは悪いことではないし避けても仕方ないから、こまめに家計簿という現実を睨むことで認知の歪みを正していこう。

あとは外国人としてのプレミアはある。たとえば日本旅行はもっぱら親に孫の顔を見せるためであり特段面白味はないが、中米のリゾートでバケーションするよりよほどカネがかかる。友人や血縁者のサポートが得られないがゆえに daycare のありがたみが増す、US 市場のメインストリームと価値基準がずれている、というように。

まあ家計簿のおかげで不景気突入に際してすべきことがはっきりしてきたのはよかった。それがどのくらい uncomfortable かはやってみないとわからないが、まだわからなくていいです。

締め切りの力

|

Podcast を一ヶ月おやすみしている間にやりたいことがあったが、結局ほぼ何もできないまま一ヶ月がおわった。これは子供の就寝起床時間に adversary な変化があったせいでもあるけれど、どちらかというと自分の生活にはもともと時間がないという話なのだと思う。たとえば budgeting にしても vacationing にしてもやらねばと思いつつ podcast の編集や paper reading を優先して放置していたものなわけで、そういう生活のツケを払うと自分のために使える時間はあまりない。

逆にいうと自分の extra-curricular に時間を使うためには家庭や仕事を犠牲にするしかない。自分は仕事の側はこれ以上犠牲にできないと思っているので、結果として家庭が犠牲になる、が、一方でいま家庭を犠牲にしていいのかあまり自明でない、というかよくない。なので順当にいくと extra-curricular が犠牲になる。ただ extra-curricular は自分の将来への架け橋でもあるので (Podcast がその立場を deserve するのかはさておき) なくしてよいというものでもない。これが永遠に解決しない frustration なのはわかっているのでいいとして、そもそも Podcast よくできてんな、という気になる。

これは締切の力だよなと思う。締切があると、長期的な視座とかはさておき優先度を上げたくなる。家族にもわりかし理解される(気がする)。理解を得やすいと感じるのは、たぶん我々現代人が締切という概念にすごく飼い慣らされているから、というのと、締切前の忙しさは一過性のものに感じるからだろう。逆にいうと毎週つづく締切が永遠にあるのは締切の ephemeral な性質を損ねてよくない。

締切に振り回されるのは一般的には良くないことに思えるが、自分の振る舞いを変えるために人為的な締切をセットするのはアリな気がする。

締切だったらなんでもよい、とも思えない。たとえば「期日までにある本を読み切る」という締切は相対的に理解を得にくい気がする。誰かからの期待, commitment がある方がよい。たとえば Podcast には聞いている人や co-host がいる。過去にうまく行った他の例だと、Coursera の宿題締切。別に公的な性格はないが、外部から与えられているのがよい。あと失敗すると落第してしまう、というペナルティの存在も意味があるかもしれない。読書の締切、間に合わなくてもなにも起きないからね。

読書の締切についても家族と約束すればそれなりに機能するのかもしれない。締切をすぎたら家のことに優先度を戻すと決めれば、締切までに読みきらないと続きを読めないペナルティが生まれるから・・・でもどうかな。

個人的には人工的に決めた締切に追われて暮らすのはあまりに silly に思えてやる気が出ない。Podcast の締切みたいにある種の期待を伴うほうが腑には落ちやすい。Podcast 休止中になんかやる、という締切は機能しなかった。自分のやりたいことに意味のある締切を作るのはライフハック的スキルと言えよう。


書籍の Acknowledgement section で家族に感謝する著者は多い。昔はなぜ感謝しているのかまったく理解できなかった。でもきっと執筆中に家族への duty を多かれ少なかれさぼったのを見逃してくれてありがとう、ということなのだろう。書籍も締め切りの力が使えるプロジェクトだな。

You Need A Budget

|

Audible の力によりようやくゆこっぷ(おくさん)にを読んでもらうことに成功したので自分も復習のうえ家計の立て直しを始める。

YNAB を使う。一部にファンの多い opinionated な家計簿ソフトウェア。自分も上の本を読んで興味をもった。彼らの pitch は色々だが、素朴な家計簿予算システムとは大きく2つの違いがある。

  • 予算カテゴリに優先度をつけ、優先度の高いものが over budget になったら優先度の低いものを諦め補填することを勧めている。そのため伝統的には同じカテゴリになる項目も優先度に応じてカテゴリをわけたりする。たとえば Groceries と Eat Out とか。Groceries が overspent だったら eat out を諦めて groceries を補填する。まあ英語だともともと groceries と eat out はわかれてそうだけど、日本語だと伝統的には「食費」でひとまとめだよね。かわりに食費と日用雑貨が groceries でひとまとめになっている。(Groceries は雑なカテゴリな気もするが、結局は supermarket で買うものということなので理にはかなっている。)
  • Monthly の budget で扱いにくい不定期、大型の出費は、項目毎にゴール額を決めて毎月資金を積み立てる。これは当たり前っちゃ当たり前だけれど、素朴な家計簿アプリは支援してくれない。YNAB には支援がある。不定期な出費には、たとえば旅行や正月のような予測可能な出費もあれば、クルマのトラブル、病気、冠婚葬祭のような予測不可能(だが不可避)なものもある。これらも優先順位の一部として他のカテゴリと予算をわけあう。(例えば他で overbudget した月は旅行のための積立を止めるなど。)

自分たちの主要な関心は後者、不定期大型出費の扱い。自分たちはしばしば旅行やガジェットなどの大型出費をするわけだけれど、こいつらの扱いが不透明なせいで日常の budgeting が意義を失っていた。日銭をケチったところであるとき雑に散財しちゃうんでしょ・・・という。加えて子供用品のような中規模高頻度不定期な出費が重なったせいでいよいよ budgeting が崩壊し、精神衛生を損ねていた。これらをシステムとして扱えるのはよい。YNAB によって出費の優先度に関する夫婦間の意見の不一致がなくなるわけではないけれど、カンと雰囲気だけで決める今までよりは生産的な議論ができることでしょう。

これは要するに欲しいものがあったら金を貯める、というだけの話ではあるものの、その前提でツール全体がデザインされているので今まで使っていた Mint.com とはだいぶ趣が違う。

Mint はクレジットカードの不正出費を見張る役には立っていたけれどbudgeting tool としていまいち actionable でないのがよくなかった。具体的には preset のカテゴリーから逸脱するのがすごく大変なのと、月をまたいだ大型出費を扱う仕組みがないこと。

YNAB には、なんとなく TODO アプリを使いつつ腑に落ちない気持ちでいたあと GTD の本を読んだあとのような説得力がある。一方で personal finance のような pervasive な話題をライフハックみたいなノリで扱っていいのか不安もある。まずはちゃんと personal finance を勉強したほうがよくね?みたいな。たとえば YNAB は借金生活から脱出したい自転車操業生活者が主要な対象ユーザなため、retirement fund の話とかはでてこない。それはいいのか。

まあ、しばらくためします。

2019/12 追記

このあと半年から一年くらいで挫折した。代替は未定。

Santa Cruz Mountains

|

夏休みは友達の家族と Monterey にでも行きたいなと思っていたのだけれどすっかり計画に出遅れ、かつ自分たちの子連れ旅行スキルが低すぎなことにも気づき、今年は見送り。かわりに近所の Santa Cruz Mountains の村 Boulder Creek そばにあった AirBnB の別荘に泊まってみる。うちから車で一時間くらい。おためしなので短く二泊三日。

山の中、森の中なので昼間でも涼しくてよい。遊歩道とかはあまりないけれど車どおりが少ないので driveway を散歩しても特に問題ない。そして一歳半児の脚はどのみち大して歩けない。やることがなくてヒマといえばヒマだが、森の中を走る鉄道に乗る観光や川辺で水遊びをするなど、多少はなにかあるし、どのみち子供の相手をしていれば一日は短い。一週間くらいならヒマさに殺されずダラダラ過ごせそう。

外食はせず食材持参で自炊。別荘なのでテラスでごはんを食べたりできる。蚊に刺されるが・・・。街のスーパーは普通に充実しており特に高くもないので食材をもっていく必要なかった感じもする。レストランは少ない。自炊という判断は正しかった。

など。家から近いわりに非日常感を味わえて良かった。しかし友達の家族と行くにはさすがにヒマすぎて心苦しい。やはりちゃんと計画して Monterey なり Santa Cruz なり海のそばにとまりたい。ただし自分の家族だけで行くには良い。そして AirBnB で田舎の別荘に止まる子連れ夏休みは色々と都合がよいね。ヨセミテの麓あたりも色々泊まれそうなのだけれど、どうかな・・・。


Santa Cruz Mountains の山奥に村があるのはなぞ。もともとは 19 世紀の終わりから 20 世紀初頭に林業で栄えた鉄道の街らしい。鉄道も林業も廃れた今はある種のリゾート(?)として生き延びている。自分の感覚だと廃村になりそうな設定だけれど California は人口が増えてるのでこういうところにはみ出してくる人も一定数いるのだろうか。

距離的には Bay Area からすごく近いのに住んでいるのは白人ばかりで中国人もインド人もヒスパニックも全然いない。「アメリカの田舎」っぽい。そして家の値段が近隣の 1/2 - 1/3 と相対的に激安。利便性の対価よ・・・。

季節性のある仕事

|

自分のいるチームは特定電話機シリーズ向けのアプリを開発しているので、年に一回ある新しい電話機のリリースが主要なリリースターゲットである。それ以外のタイミングもいれると年に何回かリリースはするが、基本的には電話機のお披露目を中心に一年周期で物事が進む。近隣にある platform の人たちも、同じく年に一回の新バージョンのリリースに向けて一年のサイクルで仕事をしている。

これは daily, weekly あるいはせいぜい monthly か bi-monthly くらいで継続的にリリース/デプロイしていく近代的なソフトウェア開発とはだいぶ違う。昔のソフトウェア開発に近い。外から見ていたときはあいつらダメだなと思っていた。中の人となった今もダメだと思う。しかし自分がどうこうできる問題でもないので適応しないといけない。

サイクルが長いと具体的にどう困るか。今となっては珍しい体験な気もするので、慣れ切らないうちに様子を記録しておく。

締め切りの対価

サイクルが一年だと、ある締め切りを逃すと次は一年後である。自分はある新機能を unblock するために直してほしい platform のバグがあった。けれど二ヶ月くらい風邪で休んだりなんだりしているうちに締め切りをのがしてしまった。なんとか master branch では直してもらったのだけれど、それをリリースブランチに cherry pick してもらえなかった。なんとかしてくれとゴネるも交渉は成り立たず、結果としてその修正に依存していた機能達は軒並み drop された。厳しい。

自分が締め切りのインパクトを内面化していたら、もうちょっと優先度をあげて頑張っただろう。これが毎月リリースだったら翌月出せばよいだけなのだが・・・。もう締め切りというものを体が忘れてしまったよ。

締め切りは一つでなく「とりあえずデモできる程度に動く」「API 確定」「Dogfood できる」「バグなし」など複数のマイルストンにわかれている。レイヤによっても締め切りが違い、たとえばアプリのような事後的に空から撒きやすいやつは platform に比べると少しあとにずれている。なのでアプリのバグだとおもったら platformの バグだった、とわかったときには手遅れになることがありうる。

締め切りの前には駆け込みで変更が殺到し、ツリーが不安定になりバグトラッカーの流動が増し、機能を入れたい人々とツリーを安定させたい人のあいだに緊張が走り、チームの空気が殺伐としてくる。これといった新機能を持っていない、というか早い段階で drop されてしまった自分は、読み物で見聞きした世界だなー・・・などと眺めている。

長いブランチ

リリースブランチの寿命がながい。リリース間隔がながいからといって必ずしもツリーの安定化にかかる時間が長い必要はないが、長い。たぶんリリース間隔がながいと QA のプロセスを短縮する動機が弱まってしまうのだろう。結果として前のリリースブランチが死ぬ前に次のリリースブランチが切られたりして、カオス。

ようやく canary を撒いてみつかった crash report にでてきたクラス、リファクタリングされちゃって master にはないんですけど・・・みたいな事態が起こる。しかも社内のツール群は short living branch を前提としているため long living な branch で作業するのがすごい面倒。辛い。

それでも昔よりはよくなったらしい。昔はどうだったのか知りた・・くはないな別に。

手持ちぶたさ

リリースが近づくと ToT でもあまりでかい変更ができなくなる。ブランチを切ってあるから理論的にはできるわけだけれど、まわりの人たちがリリースにむけたバグ修正モードで仕事をしているところで実験的なコードを書いたりしてると肩身が狭いし、下手にでかいリファクタリングをして cherry pick の邪魔になっても気の毒だから気が乗らない。

まあ手持ちぶたさというのは語弊があり自分もバグ修正大会に参加しているので仕事はある。ただ自分の新機能は drop されている手前コードは動いておらず、バグもでてこない。なので他人の球拾い的なバグ修正が中心になる。バグ修正はきらいじゃないけど、それなりに大きな成果を求められる立場なのに細かい作業ばかりしてる不安はある。

まわりのシニアなエンジニアをみると、難しいバグを直したり遅れている機能を手伝ったりしている。なるほど。実力不足で手伝えなくてごめんね・・・

計画性

一方、来年にむけての計画のもようなものもどこかでは始まっているらしい。そこでちゃんとクビを突っ込んでおかないと、また必要な変更が締め切りに間に合わず先送りということになりかねない。

ただ自分は一年前ここにいなかったため、この序盤の計画フェーズがどう進むのかいまいちよくわからない。一方で目の前には pile of bugs がある。なのでついバグ修正を優先してしまうが、計画に時間と頭を使わなくていいのか不安。しかし何をすればいいのかわからない。落ち着かない。

長い坂道

一歩下がると、一年サイクルの問題点は学習の iteration が長いことである。

まず自分のような新入りがプロセスを見届けるのに一年かかる。自分の仕事が一年かかるだけでなく皆が同じサイクルで動いているため他人を見て学ぶのも難しい。しかし会社の勤務評定は年に二回容赦なくやってくる。ひどい。一周するまで待ってちょ・・・。

新入りだけでなく組織の学習サイクルも長くなってしまう。何かを変更して結果を見届けるのに一年かかる。外から見ていたときはこのひとたち全然よくならないな・・・とおもっていたが、納得。

構造的問題ゆえ自分がどうにかできるものではないけれど、適応の過程で近代的とは程遠いこのサイクルを当たり前と思わないようにしないとなあ。


といったところで適応のために必要なことを書き出してみると:

  • 様々な締め切りへの awareness を高める。Platform や電話機のリリースがずっと先でも、プロセスのマイルストンはそのもっと手前にやってくる。締め切り関係のメールを見落とさず、印刷して壁に貼るなりノートの冒頭に書いておくなりして目に入るようにする。
  • 各フェーズでやるべきことをやる。
    • リファクタリングが継続的な所作である、という理想は妥協し、でかいリファクタリングは序盤に済ませておく。後半で気づいた smell はどこかに記録して次のリファクタリング期に片付ける。
    • バグ取り期にはバグをとる。人のバグ取りを手伝う。
    • 新機能は早めに end-to-end で動かして下のレイヤのバグを特定する。(これはインクリメンタルな開発でも一緒だけどね。)
    • 計画・・・についてはどうすべきなのかまだわからん。

若干 sigh ではあるけれど、現実として受け入れます。はい。

Impulsively Toxed

|

面識のある東京の同僚氏が問題ジェンダー発言をしたどっかの若者プログラマを指して「やめちまえ」的なことを tweet しておりり、はーという気持ちになり reply しようともおもったが Twitter で議論してもいいこと無いと思いとどまり、メールしようかとも思ったがそれもなんか違うなと思いとどまり、郷に入りては郷に従い見解を tweet してみた

が、結果としては発言に対する言葉尻を捉えたがっかり反応を目にしてしまい、消耗してよくなかった。インターネットにおけるがっかり反応への耐性が年々さがっている身に Twitter は過酷すぎる。字数制限のせいでがっかりされない配慮を織り込めず、システムにがっかり反応を強制されるから。

そして字数制限に限らず Twitter は人を troll にしてよくないね。件の東京同僚氏もあって話せば普通に良い人なのだが、Twitter 上では感じの悪い外資ヤクザみたいになっている。自分の二つ目の tweet にしても本題とは関係ないのでなくてよかったはずだが、歓心の引力に負けつい感じの悪い外資トロル芸を発揮してしまった。そして案の定アンチトロル反応がおきた。自分にいたってはもはや外資ですらなく豊田市で働くトヨタ社員みたいなガチドメ勢だというのに・・・。

結局自分としては東京同僚氏に感じの悪さにともなうコミュニケーションの失敗をリマンドしたかったわけなので、メールをしておくくらいがよかったのだろう。他人の目のあるところで意味のある議論ができるはずがないとわかっていたはずなのに attention addiction に負けた。

中毒予防という意味では日本語のインターネットを見るのがよくなかった。Podcast を発端になし崩しで日本語インターネットを摂取してしまっていたけれど、また detach して暮らします。はい。Twitter もやりたくないけど Podcast のアナウンスがなー・・・。Buffer でも使うか。

性能仕事の退屈さ

|

今は主に性能改善の仕事をしていて、代表的なメトリクスについて性能改善をしたり regression を直したりしている。が、ある種の退屈さがある。たぶん自分の実力不足のせいなので文句は言えないのだが。

自分はやっている性能改善は、たとえばアプリの起動のような一瞬で終わるべきものがちゃんと一瞬で終わるようにする、という種類のものである。どうにもならないくらい遅いものをガツンと速くするような仕事ではない。

アプリ開発だと、こういう「すでにまあまあ速いものを速く保つ/更にもう少しだけ速くする」仕事は、割と打ち手が決まっている。投機的になんかする。逆に不要な処理(特に初期化)を lazy にする。クリティカルパスを見つけて不必要なものを別スレッドに追い出す(並列化する)。ラクするためにさぼっていた部分を汚く速くする (例: Layout XML の inflate をやめて Java にハードコードする, 無意味な future chain をまっすぐなコードに直す)。キャッシュする。要するに Systrace を睨んでブロックを移動したり、さぼりででかいブロックを縮めたり。なんというか、割と定型的。そしてガツンとは速くならない。

もちろん他人よりツールに精通することで遅さへの視力を高めることはできるのだけれど、視力を高めても細かいところが見えるようになるだけなので、より細々した高速化ができるようなりはすれどガツンとはしない。たとえば自分は Systrace やプロファイラ, dumpsys などは詳しい方だと思うしベンチマークの流し方もまあまあわかってる。それはそれでいいことなんだけど、どうしてもけちくさくなりがちなのだよな。

前のチームでは、人手不足で速度を見る人がいなかった。だからガツンと速くなることがあった。そして自分のブラウザ知識を WebView に転用して傍目には自明でない高速化をすることができた。サーバ側ふくめ end-to-end でさわるのも効いた。今のチームのコードはもともとそれなりに速いし、チーム内で自分しか持っていない知識というのもない。チームの境目を越えて動き回る力もない。だからガツンと速くすることも、自明でない高速化もできない。

アプリに改善の余地がない、という話ではない。たとえばある UI のまわりには以前からちょっとした遅さがあった。それが遅いことは自分ふくめみな知っていたのだが、interaction 仕様の都合であまり速くできなかった。けれどある日 UI を中心にみているプログラマがその遅い UI の挙動自体をちょこっと変えて速くなるプロトタイプを作り、UX のひとと話をしながらぱぱっと iterate して整合性を整え、コードを入れた。結果その機能ははっきりと体感できるほど速くなり、めでたしめでたしとなった。

こういう変更がしたいよなー。自明でない形で目に見えるくらい何かを速くしたい。

ただそのためには、アプリ本体やその依存先のコードに詳しくならないとダメだよなあ。読むだけでなく、書くのにも参加してないときびしい。ある程度 big picture をもち、上からガツンを書き換えて速くするみたいのが必要。速くなった UI にしても速くしたエンジニアは a lead としてコードをレビューしており、デザインをよくわかっていた。たぶんバグもぼちぼち直していた。

そういう意味では高速化ばっかりやっていないで機能開発もやってコードを内面化し、それから速度について振り返るほうがよいのかもしれない。


Platform の中の人としての performance team というのもあって、これはサーバサイドの同種の仕事にけっこう似ている。ブラックボックスである沢山のアプリの相互作用をシステムとして分析/推測し、なんかわからんが遅いとかいう問題の原因を探り当てる仕事。難しい仕事だしクライアントサイド性能改善の専門家として尊敬できる人たちだけれども、自分がやりたいのはこれではないとも思う。

アプリケーション側のプログラマとしてスタックを細部まで理解し、そいつの力を引き出すようなコードを書く。それが速い。パフォーマンスの専門家に頼らず、自分のコードは自分で速くする。そういうのがよい。

が、これは自分の今の仕事とはだいぶズレてるね。いまの自分はパフォーマンスの専門家のしょぼいやつ、というかんじだから。ほんとはもっとたくさんコードを書いて重要なサブシステムを own し、その上でちゃんと速いアプリにする、というのがあるべき姿なのだろう。今の自分からはだいぶ遠い話なあ・・・・。

Sigh.

 

Dogfooding

|

ウェブの Dogfooding

ウェブ開発では dogfooding の重要性、というか特異性が際立たなくなったと感じていた。ただ今のチームはウェブ開発と違うところが多く、dogfooding を見直した。

ウェブ開発での dogfooding は簡単である。開発中のソフトウェアを配るのに特別な仕組みがいらず、適当にホストした dev.example.com みたいなバージョンにアクセスすればいいし、開発もインクリメンタルでリリースが頻繁なため開発版とはいえそれほど派手に壊れない。使いはじめるバーも、使い続けるバーも低い。

そしてユーザの行動履歴を集めて集計するのが簡単。なので自分で使って良し悪しを判断するよりたとえばベータ版やインクリメンタルなデプロイ, dark launch などを使い実際に撒いて試す方が良い部分が増えていく。エッジケースでのクラッシュでもユーザにちょっと配るだけですぐわかる。逆にテストについても、dogfood とか言う前に自動テストでカバーしといてくれや、という空気がある。

もちろん実際のユーザに配る時点でわかっても手遅れな問題は沢山あるし、自動テストでは捕獲できずデプロイしないと現れないバグも沢山ある。だから dogfood に意味はあるし、やったほうがよい。ただなんというか、騒ぐような特別なものではない感じがする。「ドッグフードしてます!」とか言われても、あっそう、くらいにしか思えなかった。自分は勤務先アカウントでさわる職場のウェブアプリはすべて dogfood 版なはずだが、だからどうという感じもしない。UI が刷新されたとき、たまにオッとなるくらい。

OS の Dogfooding

自分のチームが開発しているのは OS 付属品というか特定電話機付属のアプリで、いちおう Play Store 経由でアップデートできるがそれでも年に数回しかリリースしない。そして下で動いているOSは基本的に年に一回しかリリースしない。フォローアップのマイナーリリースが追加で一回くらいとセキュリティパッチはあるけれど、とにかくリリースが少ない。そして複雑な割に自動テストが手薄。これらせいだけではないけれど、リリースから遠く離れた時期の開発バージョン OS は割と派手に壊れる。

テストがしょぼいのはさておき、リリース頻度が低いのはスマホの OS という性質を考えると割と仕方なく、同情の余地はある。更に OS とアプリ群の interaction はアプリ単体とは桁違いに複雑なので、ちょっとプログラマが自動テストを追加したくらいでは全然カバーできない。

ちょっとではなく沢山自動テストするというアプローチはありうる。たぶん Windows のような歴史のある OS は色々とがんばっていることだろうし、他の OS も成熟の過程で同じ進化を遂げるだろう。でもここはまだ進化の手前というか途中。

そういう世界では dogfooding が未だに特別な意味を持っている。つまり、テストではカバーできない問題を見つけてくれる。そして被験者として dogfood に手を染めるは普通に大変である。よく壊れるから。ウェブとは違うし、単体のアプリとも違う。自分のいるチームが作っているのは単体のアプリだけれど hardware への依存が高い上に resource intensive なので OS の人々と協力して問題にとりくむ機会が多い。

Be Good At Dogfooding

アプリほど気楽に撒けない制限だけが dogfooding の価値を高めているわけでもない。プライバシーやら帯域やらの理由で、ユーザから集められるデータには限りがある。そしてクラッシュみたいなわかりやすい問題のデータは集めることができるけれど、なんか遅いだとか UI がおかしいみたいな相対的に小さいが無視はできない問題のデータを集めるのは不可能ではないにせよ難しい。

Dogfooding はこうした自動で見つけたり集めたりするのが難しい問題をみつけるのに役立つ。Dogfood をしておかしな挙動に気づいた時、開発者はすかさず bugreport 情報をダンプし、あわよくば Systrace もキャプチャしてバグを file する。

これも「ユーザフィードバックの UI つければいいじゃない?」と思うかもしれないけれど、Dogfood ビルドの OS は一般のユーザからは集められない sensitive な情報をたくさん bugreport につっこむし、Systrace に至っては問題を再現しなおさないといけない。そして dogfooder は file した bug を通じて議論に参加し、必要に応じて追加の情報を提供することを期待されている。こういう込み入ったやり取りは、自動化されたエンドユーザからの情報だけでは実現できない。

個人的にはもうちょっとちゃんとデータを集め解析インフラも整備して dogfood への依存を減らした方が良いと思っているけれども、とはいえ dogfood でないと見つからず、直せない問題はあるとも思う。

Dogfooding には上手い下手がある。普段から奥の方のコードをいじって性能バグなどと戦っている人は傾向として dogfood がうまい。つまり、目の前で問題がおきたときにすかさず必要な情報を集めて適切な bug を file できる。練度の低い dogfooder は bugreport をとらずに曖昧な bug を file し、triage の質疑のなかで不完全なデータをもたもたと提供して開発者を疲れされる。もっと質が悪いのは社内 social media 上に文句を書くだけで bug を fileしないひと。おまえはなんのために dogfood してんだ、という気分になる。そんな troll はごく少数だけどね。

組織の VP みたいのがビシっとわかった感じの bug を file してくるとそうした exec への評価は高まる。モバイル OS 部門の higher management が管理職としてどのくらい立派なのかここでの評価を控えるけれども、少なくとも bug の filing ability はみなおしなべて高い。その点はすごく偉いなと思っている。

見方を変えると、制度としての dogfooding にだって出来不出来があると言える。参加者に対する適切な onboarding 教育はあるか。bug reporting を支援するツールは充実しているか。Bug tracker に何かを投稿するというのは、たとえばスマホのバグならモバイルの開発経験がないとプログラマであっても敷居が高いし、まして開発部門の外から参加している人にとっては恐怖さえあるかもしれない。開発者は未熟な dogfooder による bug を appreciate し、親身になって参加を encourage しているだろうか。

など、モバイルでの dogfooding は難しく、しかし得るものもあり、その運用を目の当たりにすると発見がある。先に書いたとおり自分はもともと dogfood をそれほど重視していなかったけれど、考えを改めた。私物の電話機に開発版 OS をインストールした。アプリも手元でビルドして入れた。

そしてインストールの前に二段階認証のバックアップをとりわすれておたおたする火曜日。

バグを眺める

|

真面目に会社員プログラマをする活動の一貫として、社内バグトラッカーのうちチームが own するカテゴリのアップデートを購読することにした。新規登録からコメントまで、何らかの更新があるたびにメールベースで通知が来るのを読む。今までは自分が assign されたやつにだけ反応していた。TL, Manager, TPM などはこのバグを実際に triage している。自分は自明なやつは別として特に triage とかには参加せず skim するだけ。

まあ良し悪しだなと思う。良いところとしては、チームというかプロダクト全体の温度感がわかる。どうもやばい変更が platform 側に入って燃えているらしいとか。どうも特定の人の持っている機能がずいぶん立て込んでいるらしいとか。人々が締め切りに殺到してるせいで不安定だとか。プロダクト全体としてどういう類のバグレポートが多く、それはどういう原因を持つ傾向があるとか。人々がどうやって原因を判断しているとか。

自分のやっているアプリはジャンルの性質なのかコードのせいなのかわからないがとにかくクラッシュが多い。しかし傍目には同じクラッシュでも原因は多岐に渡る。そのほか画面に何も表示されないなど、バグの主要な症状は原因のバリエーションに対しごく限られた種類しかない。人々はその原因をどう判断しているのか。

特に platform / HAL レイヤの TL はバグを次々に triage して自分のチームに割り振っているのだが、一体どうやっているのだろう。まあ bugreport ファイルを読んでいるのだろうけれども、自分の製品に限るとそんなに intellient な automation があるようにも見えないので、時間をかけている以外の方法を想像できない。

話がそれたけど、そういう感じでバグトラッカーは製品の weather を伝えてくれる。そういうのを把握するのは be prepared でよい。

その他に、バグの重複に気付けるというのがある。自分に assign されたよくわからんバグ、実は同じ原因のバグが他に file されていてそっちで議論が進んでいた、ということはよくある。そういうときはさっさと mark as dup すれば手持ちのバグが減る。逆に自分の見ているバグに巻き取ることもある。こうした dedup 作業は理想的には triage している人の仕事なわけだが、実際に問題の中身を知っている実務者(自分)の方が正しく判断できることはあるし、強い動機もある。

重複削除だけでなく、自分の知見によって原因を判断できる(場合によっては直せる)バグがあったりもする。そういうのは他人の triage を待たずさっさと引き取る。


とまあいいこともあるのだけれど、欠点もある: とにかく時間がかかる。そして自分にとって大半の updates はノイズなのですごく効率が悪い。これはツールの不出来という面もあるし、非生産的な文化の面もあるし、単にプロセスのまずさという面もあるし、表面的な原因は一緒なのに原因はフルスタックという製品の性質からくる大変さももあるし、tracking 以前に debug 支援の弱さからくる辛さもある。とにかく disentangle して負担を減らす方法がぱっと思いつかない。辛い。

単純に skimming の雑さを増すことで一定程度は速くできるけれども、今度は取りこぼしが増えて結局単位時間あたりの効率は変わらないようにも思える。いっそ triage に参加して使った時間の元をとろうともしてみたが、今度はかかる時間が倍増しすぎマジで仕事ができなくなってしまい早々に諦めた。

ツール志向な身としてはメールベースはきつすぎるので Jasper みたいのがあればなあと思うわけだが、トラッカーが内製なせいでこういう素敵ツールが現れる見込みは極めて薄い。ただでさえ内製ならではのできの悪さがあるというのに・・・。

この手の notification stream を消化する作業は直接の成果には繋がらないからやりたくないし、特に楽しくもない。自分の従来のポリシーにも合わない。ただ会社員としての成果を出すという今のフェーズでは必要かもしれないと試しにやっている。たしかに発見はある。しかし辛い。マネージャとか TPM とかよく burn out しないなと感心する。続けるべきか否かと悩みつつ、今のところまだやっている。消耗のダメージを最小化するため、午前中の生産的な時間には読まないことにしている。まあ決意しないと読めないのでうっかり時間をつかってしまう類のものではないのだが。

と書き出すと何か思いつくかとおもったけど、残念ながらそうでもかった・・・。しいていえばバグトラッカーは consumer product としてエンジニア資源を突っ込んで作らないと非効率すぎて辛い、くらいろうか。GitHub 使わせろとはいわないけれどせめて Jira とかだったらよかった人生だった・・・。


Jasper みたいな素敵 UI をつくるのはムリだけど、たとえば一定の期間内に発生したイベントを縦に連結した HTML に render するバッチスクリプトくらいなら隙をみて作れないかなあ。

追記

Dogfooding の本格化や新しいデバイスの dogfood 投入などに伴い流量が増えてついていけなくなり、一ヶ月くらいで挫折した。

 

Book: So Good They Can't Ignore You

|

So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for Work You Love: Cal Newport: 8601420220263: Amazon.com: Books

Kzys が読んでいるのを見て興味を持った。Audiobook だと 6 時間半の薄い本。

基本的にはモダン根性論のバリエーションで、自分の好きなことをやるといっても実力 すなわち "Career Capital" がないと成功しないからまずは努力して実力アップに励もうな、という話。典型的なモダン根性論との違いは capital を構築した上でそれをどう invest するかにも重きを置いているところ。根性論者はつい努力してればいつかうまくいく、という話になりがちなので、努力の成果をどうやってやりがいのある仕事に繋げていくかを議論しているのは面白い。

というか、このひとそもそも読者の entrepreneurship を全然疑ってないのよだね。「おまえら cubicle に縛られた社畜なんてイヤだから会社やめて独立したいと思ってるだろ?ちょっと待て、今それをやると失敗するからまずは修行だ。しばらく修行したあとにどうやって自由の扉を開ければいいか教えてやんよ」みたいな論調。じっさい著者は高校生だった dot-com 時代に web design の会社を作って小遣い稼ぎをしていたという。そこから MIT で CS の博士取ってるんだから、勢いのある人なのですね。

自分もおおむねモダン根性論者なので基本的な主張に異論はないが、一方で entrepreneurship は全然ないのでいまいち対象読者じゃない感はあった。たぶん期待されている感想は career capital 稼がねば、だと思うのだが、自分はどちらかというと career capital の investment についてもうちょっと考えればよかったな・・・と反省した。

プログラマたるもの career capital をどう積み増すかについては普段から考えているわけだけれども、使い方は、自分はそんなに深く考えてなかったね。そしてチマチマ貯めこむことばかり考えていたせいでガツっと増やす機会を逸したとも思う。結果だけ見ると、自分が二十代に溜め込んだ career capital でやったことといえば大企業への転職なわけで、そこにまったく entrepreneurship はない。そして大企業勤めの最初の数年で貯めこんだ career capital の使いみちは本社への転勤に使った。これらの選択をしたときはそれなりに冒険したつもりだったけれども、振り返ってみると国債買うようなもんだよな。もうちょっと他になかったのかね・・・。などと career capital について思いを馳せたりした。まあ大企業そこそこいいとこだし自分は臆病者なんでファンタジーですが。

日本語のコミュニティだと「やっていき」とかいってる人々からはこういう肝っ玉を感じ、割と尊敬している。


それはさておき、気に入らないところも多かった。

著者は "Passion Hypothethis" すなわち follow your passion then everything follows みたいな考え方はダメだと主張し、典型的には blog で micro-celebrity になって食ってく、みたいなのを強く批判している。自分も microcelebrity は普通にダメだと思うが、一方でそういう人生ドロップアウト路線に入りそうな人が MIT の Ph.D からストレートで full-time の academia に進むエリートの権化みたいな人の努力信奉に耳を貸すだろうか。人生ドロップアウトしたくなってしまう人というのは努力して報われると信じにくい立場にいることが多いわけで、本書のメッセージは人生行き詰まって博打で一発逆転に走ったりコミュニストに転向しかかってるひとに向かって資本家が「金を稼ぐといいよ」といってるようなもの。相当感じ悪い。自分だったらうっせー黙ってろ、と思って投げ捨てるね。本気でそういう人を説得したいなら他の語り方があると思う。

あとは "Knowledge Worker は努力しない" という話を繰り返すのだが、別に肉体労働者もサービス労働従事者も努力してないよ!というか knowledge worker は普通に雇用されているいわゆる労働者の中では努力してる方じゃね?著者がと実際に比較しているのはスポーツやエンタメ産業など競争が激しく半自営業的な振る舞いを求められる仕事をしている人々と雇用され給与で生きてる労働者であって、要するにボンヤリ労働者やってると搾取されるから頑張って自由な資本家というか career capitalist を目指そうな、という話じゃん。White collar とかいっておけばまだ角が立たなかったのに、オレ定義で knowledge worker とか言ってると Drucker に祟られるぞ。

あと職業的成功で行き着く先のイメージが若干 Soft Skills の人みたいで夢がないというか、いまいち憧れが刺激されない。著者はせっかくエリートなんだからもうちょっと高尚なビジョンみたいのがあってもよくね?全体的な意識の高さに反した motive の selfishness がやや白ける。これは趣味の問題かもしれないし、素直で良いという見方もあるとは思うけれど。個人的にはモダン根性論にはそういうキラキラ成分を求めているのであった。

著者はモデルケースとして色々な人々にインタビューし、それを語りに取り入れている。(Amazon のレビューにはこれを emulating Malcolm Gladwell と評しているものがあり、わからんでもない。) ただこうした語りの常として我田引水感が強い。

特にひどかったのが冒頭と結末に登場するアンチ・モデルケースのエピソード。就職した銀行員の仕事に早々に嫌気がさしアジアに飛んで職を転々としたある若者は放浪の果て仏道に入り、座禅や公案などの修行を重ねる。あるとき数ヶ月がかりの難しい公案を乗り越えたあと、若者は気づく。環境が変わっても自分は変わらないのだと。彼は林の中で泣く。そしてしばらくのち仏道を去って元の銀行員に復帰し、ハードワークを重ね出世し世界を飛び回るのだった・・・・

・・・という話なんだけど、著者はこのエピソードを「ほら経験なしに世界に飛び出してもいいことないでしょ、でもキチッと働いて成果を出せば世界を飛び回るような仕事ができるようになるよ。だから Career Capital 貯めてこうな」と解釈している。でもさ・・・普通に考えてこれ仏教のおかげで小さな悟りを開き煩悩をすてたからキャリアに集中できたって話じゃね?むしろ放浪の成果じゃね? ほんとにキリスト教圏の住人は他の宗教への敬意がなくてひどい。だからお前ら戦争ばっかしてんだよまったく・・・と呆れた。


などと writing や storytelling の浅はかさにはケチをつけたくなる面もあるけれど、全体として著者の切迫感は伝わってきた。著者が批判する lifestyle guru / microcelebrity をふくむ多くの自己啓発本著者は、自己啓発自体を生業にしている故の胡散臭さ、信頼できなさを拭い切れない。著者の Cal Newport はたぶん本当にアカデミアとして成功したいと思っており、この本もそのための "quest" なのだと言っている。だから浅はかさはあれ嘘くささは無い。

一歩下がってみると、全編を通じ自身が lifestyle guru に堕ちる誘惑と闘いながらアカデミアとしてのキャリア的成功に obsess する様が伝わってくる。そこには憎めなさがある。続編の Deep Work は書き手としての成熟を感じ、それはそれでよい。というかんじで Cal Newport への理解を深めました。

Book: The Manager's Path

|

The Manager's Path - O'Reilly Media

テック企業におけるマネージメントというかマネージャ業の薄い本。たまにはこういうのも読んどくかなということで。

マネージャ何してくれる人なの、という一章, mentoring, TL, managing people (Engineering Manager), Managing Teams (Director) と続き、最終的に CTO にまでたどり着くという壮大なストーリー。後半は完全に他人事すぎて目が滑ってしまった。ただ本業にならない限り tech 企業 management の本はもう読まなくていいかなと思う程度には漏れなく広く浅い構成だった。

よくかけていた。まず自分の勤務先のようなテック企業の実態をきちんと反映している。Generic な management の本ではなく、ほんとに software company で tech side の management をする人向け。話の前提に身に覚えがあり、したがって説得力もある。

全体的にすごく常識的で、ぶっとんだところがない。やたらと組織を変えろ!とか熱り立った主張はせず、立場に応じてできること、すべきことが説明されている。たとえば engineering manager とかには大した権力がないわけで、そういう実態を反映している。あとは management ladder に行く前に tech をそれなりマスターしておかないと厳しいよ、などともいう。そうでしょうな。

個人的に関係ありうるのは TL の話くらいまで(TL 業はしないけど、下っ端とはいえ年をとると一定程度 leading 色のあることをしないといけない)。Engineering Manager の話は上司のやってることを知る、という意味では良い。

先日読んだ Crucial Conversation にしろ、マネージャ大変だなと思いました。


後半は Director とか VP の話に進むわけだけれど、これちゃんとできるひといるんかな・・・というか、そのレイヤは経験的にぱっとしない人が多い印象を持っているが、書かれている仕事の大変さを考えるとそれも仕方ないなと思った。

やはりエライ人がすごい権力を発揮しなくても下々がよろしく働いて前にすすめる組織の方がいいよなあ。エライ人がぱっとしないのは、なんというか仕方ない・・・。

Director/VP でそれなりにうまくいっているパターンとしては、もともとスタートアップの社長でしたとか、競合/同業で TL だったけど色々あって移ってきました、という人たち。あとはチームがでかくなるにつれて上にずり上がっていった人も、そこそこちゃんとしている。一方で会社の中の関係ないところから異動してきたパターンにはあまりよい印象がない。

チームのプロパーが出世した場合、組織やコードベースの内情に通じている強さがある。競合やスタートアップから来た人は、チームが持っていない(が必要としている)何かを持っている。しかし会社の中から滑ってきた人には特に何もない、気がする。なにかある場合もあるんだろうけれども・・・。

まあ下っ端の戯言なんでエライ人はばかめ・・・とか思いつつそっとしておいてください。

モダン根性論

|

Learned Optimism, Mindset, Grit, Outliers, Deep Work などに示されるストイックかつ自己決定的な自己啓発の世界観を、自分はモダン根性論と呼んでいる。そしてまあまあ影響を受けている。

モダン根性論とは、成功するには才能よりも時間や労力をかけて全力でがんばり続けるのが大事なんだよ、という根性論的価値観がまずベースにあり、その上でがんばり続けるとはどういうことか、その難しさ、がんばり方、頑張りを支える考え方、頑張りを成果につなげる戦略などを色々と理論武装していく一派である。

自分はかつて、根性の有無について考えるのはよくないと思っていた。「根性の無さ」というのを才能のように捉えることで、自分の才能の無さを言い訳にしてしまいそうだったから。でもこの態度は良くなかったと今は思っている。これは結果として根性全体から目をそらし、方法論としての根性というものを見出す機会を逸しているから。

さらにこの態度は、ある種の才能主義を自分の無意識に植え付けてしまう。努力以外でなんとかなる、たとえば要領の良さみたいなものがあるという考え方は、はっきりとそう言わないだけで才能のようなものを想定しているからね。

要領というものはある。けれど大前提として努力は必要。モダン努力家はそれを努力とは呼ばないかもしれないけれど、沢山の時間や労力をつっこんではじめて要領を議論できる。元本なしに利息を考えても意味がないのと同じで。

という見方をすると sustainable かつ efficient な根性の運用方法、すなわち「方法論としての根性」について議論するのがモダン根性論とも言える。

自分は根性の playground である大学受験をスキップしてしまったせいで、根性について理解を深める機会を逸した。というと言い訳がましく、まさに自分の根性の無さへの恐れから大学受験をスキップしたのだと思う。当時は特にそう考えてはいなかったと思うけれど。

けれどあるとき仕事のやる気がない時期の現実逃避で割と熱心に英語を勉強したらそこそこできるようになったので、ああ時間と労力を割くと効果あるなと思い直し、そのあと冒頭にある本たちを読んだ際に convince されたのだった。


情報産業で成果を挙げたいなら素朴な根性、すなわち長い期間取り組むだけだといまいちだな、と思う。時間が全てを解決してくれるとは思えない。たとえば自分が今から余暇の全てをなげうって機械学習を勉強し、十年後に現段階の state of the art を完全に理解できたとする。自分は <AI 人材> になれるだろうか。あまりそういう気がしない。

なぜかというと、10年の間に世の中が前に進み、変化してしまうから。時の流れでうつろいゆくのは情報産業だけではない。とはいえ変化の速さは情報産業の特長の一つであるとも思う。なので時間をかければよいというものでもない気がしている。

自分に何が足りてないかといえば、まず絶対的な時間の不足はある。そして intensity も足りてないなと思う。単位時間あたりのがんばり不足。世の中のエリートを見ると、つっこんでる時間も多いけど密度も高い。モダン根性論のジャーゴンではこれを Delibrate Pratice と呼ぶ。エリートたちの Delibarate Practice への耐性は、人生のどこかの段階(大学受験、修士および博士過程など)での訓練を通じて身につけたものに見える。

情報産業の中で前の方に居続けたいと思うなら、時間をつっこむだけでなく密度も必要。自分はどちらも足りていない。ただまあ、今や世界の富が流れこむ競争の激しい世界なので仕方ないとも思う。The stake is high すぎというか...

十分な密度を持たない場合の選択肢として「前の方にいる」ことを諦める方法がある。今やそんなに流行ってもいないけれど、廃れてもいないテクノロジというのは沢山ある。そういうものの一つに詳しくなる。そのテクノロジが愛せるなら悪い選択肢ではない。典型的には、若かりし日に流行っていたテクノロジの第一人者になり、旬を過ぎた後も見捨てず第一人者であり続けるというスタイル。この道を選ぶ人はけっこういて、それなりに成果を出している。それはそれでいいとおもう。

自分がこの道を選ぶ気になれないのは、ひとつには愛せると思っていたテクノロジが目の前で失われる様を見たからだと思う。あとは特定のテクノロジよりソフトウェア産業のダイナミズムや時代性、軽薄さみたいなものに興味があるのかもしれない。

あるいは色々言い訳しているけれど、単にぜんぜん根性ないだけかもね。

追記

Grid に関するいくつかの反論:

しかし自分は、根拠が薄いのに「科学的」と特定のアジェンダに熱狂突撃していくモダン根性論のアメリカ人ぽさが好きなのであった。

On40: Health

|

ここ 10 年くらい年末に annual review 的なものを書いている。そうした記録や blog などを読むと、昔の自分は随分と心を病んでいる、というと大げさだけれども精神衛生はあまり優れていなかったなと思う。昔の日記も探すとどこかにあるはずだが、それに至っては怖くて読めない。

人生に思い悩むのは若さの特権と言えなくもないけれど、鬱っぽいと日常の生産性をすごく下げてしまうので程々にしたほうが良い。グジグジしている時間というのは何も前には進んでいないし、そうした気分からの現実逃避にマンガ読んだりしててもやはり前には進まないので、自分のしょぼさを、例えば他人と比べて失望したり絶望したりで消耗しているのはよくない。持てる駒の範囲でベストを尽くしていると信じ、できる範囲で前に進むほうが良い。他人の姿がくっきり見えるこの時代に、それは未だにしばしば難しいことだが。

という心境に至れたのは、ひとつはやはり運動による脳内麻薬の力であり、これがないと再び depression になってしまう危険は若干感じている。なので運動の確保は自分の中ですごいプライオリティが高い。あとは結婚して転勤して子供ができて本来の自分のリスク予算をだいぶぶっちぎってしまっているため、開き直りの境地に達した面もある。思い悩む余裕すらないというか・・・。

On40: Mediocrity

|

40才を口実にダラダラ書くシリーズ。

自分のボンクラさがさすがに無視できなくなった。過去を振り返ると、自分が中心になって成功したプロジェクトはない。いちおう納品した、みたいなやつはあるので完全に失敗だけとはいわないけれど、成功はない。受託開発していた頃はどれもプロジェクトの存在がダメだな、と言い訳していたものだが、HTML Imports を機にやはりこれらの失敗は自分のボンクラさなのだと納得した。

結局のところ何事にも成功のための障害はあるわけで、それらをなんとかして克服するのが実力なわけじゃん。HTML Imports の難しさは初期デザインの不味さだったわけだが、自分はそれをひっくり返してまともなものにできる立場にいた。というかそれが暗に求められている仕事だった。しかしできなかった。いまいちな初期デザインのまま仕様を書いて、なんとか実装して、出荷して、誰にも使われないまま数年後に消えるゴミとなった。どんなデザインなら良かったのかは未だにわからないが、きっといつか誰かが正解にたどり着いて答えを見せてくれるだろう。

ボンクラさに納得した後、この意見を変えるに至る証拠を生み出すには至っていない。

どうしたらボンクラでなくなるのだろう。失敗したものを成功まで持っていくのが答えなのかもしれないし、派手に失敗しないようにする手管が必要なのかもしれない。自分は仮説を持っているが、その仮説は自分にとって特段 helpful なものではないので今ここには書かない。

Fortieth

|

最近無事 40 歳になった。

節目の年齢を記念して色々キャリアについて振り返ったりする人もいるけれど、自分はキャリアについては普段から思い悩んでいる時間が長いのでそれほど書くこともない。感想としては 1) 昔の自分の期待とは良くも悪くも違う状態になった。合計すると少し良い側に振れているとは思う。 2) 自分の節目節目での判断は、良いものも悪いものもあった。というか原則から見ると悪いものの方が少し多かったと思うが、運の良さに救われた。3) 自分のボンクラさを受け入れるに至った。というところだろうか。

まあそれでもなんか書くかな。一箇所に長々と書くと永遠にドラフトのままになりそうなので、ぼちぼち小出しで書いていきます。

Book: Crucial Conversations

|

Crucial Conversations Tools for Talking When Stakes Are High, Second Edition: Kerry Patterson, Joseph Grenny, Ron McMillan, Al Switzler: 8580001040288: Amazon.com: Books

Audible できいた。難しいが重要な会話 = Crucial Conversation をちゃんとするにはどうするか、という本。自分はなんとなく交渉事が苦手な気がしていたので、何かの足しになればと思って読んだ。なんとなく tactic というか selfish なかんじで強引に話を片付けるみたいなものかと思っていたら、ずっと principled でまともな内容だった。

自分や相手がムカついた気分だったり過剰に警戒していたり感情的になっていたりすると難しい話はできないので、相手もまともな人間であるという前提で敬意を持って接し、自分の主張を開示しつつ相手の主張や意向を丁寧に汲み取り、合意できる部分を強調しつつ互いの着地点を探っていこうな、というような話。

こう書くとすごい精神論ぽいけれど実際にはそのためのステップが色々議論されている。ただステップを教えてくれるからといってうまくできる気がするかというとそんなことはまったくなく、文中に登場する沢山の胃が痛くなるような舞台設定や会話例にこりゃ難しいわ・・・という気持ちになる。

最初のステップとしては、会話の中で自分が感情的になる瞬間が crucial conversation の始まりなので、それを正しく検知して crucial mode に入る、というくらいはできるようになりたい気がした。

仕事よりは夫婦の会話の方が出番は多そう。今の仕事、よく考えるとそんなに crucial moment は無い気がする。マネージャとかだと出番も多そうだが。夫婦の会話、別にしょっちゅう crucial moment があるというわけではないけれど、自分たちは夫婦関係の stability に高い優先度をおいているので、こういうのは大事。


ふと翻訳あんのかなと Amazon.co.jp をみたらあるにはあるが全然読まれてなさげ。なぞ。

On Being Left

|

自分を勤務先にリファーしてくれた東京の同僚が辞めて景気のいいスタートアップに行くという。その人はもう 10 年以上勤めている古株で、いかにもすぐいなくなりそうなタイプなその人を長く引き止められているところに勤務先の力を感じていたが、それも終わった。

彼のような実力者が移る気になる会社がちゃんとあるという事実を含めこれはいい話なのだが、取り残されたようで寂しい気持にもなる。


最近の自分はカネのために働いていると思う。Financial Freedom がない以上ずっとカネのために働いていた面はあるわけだけれども、それでも一時期、カネは最重要でなかった。でもいまなぜこの勤務先で働いているかと聞かれたらカネのためだと答えるだろう。

カネのため「だけ」に働いているわけではない。仕事で手伝っている製品は割と好きだし、仕事には楽しい面もある。でも資産が二倍・・・だとちょっと厳しいかもだけど三倍くらいあったら違うことをしている気もする。けれど自分はカネを稼ぐための手段を多く持っていない。もっというとやりたいことをやって稼ぐ選択肢はない。今の収入からしてほとんど運みたいなもので再現性を感じないし。まあ三倍はいらないな資産。二倍でいい。別にリタイアしたいわけではないから。

この事実は受け入れているけれど、それでも稼ぐ能力のある人が謳歌する自由を目の当たりにすると眩しくて伏目がちになってしまう。だからどうって話じゃないので、まあこのくらいの愚痴は許してよな。

Podcast Busy-ness

|

"Pytorch" とかで Twitter を検索すると、様々な人々がいろいろ遊んでいる様子がわかる。別に ML 大学生や研究者ばかりでなく、普通にたとえば React Native をさわるようなノリで遊んでいる。

自分も Hello World よりもう少し先のことをしてみたいけれど、今の生活にはそんな隙間がない。きびしい。仕事と家の時間を引くと、あとは Podcast の準備と後始末ですべてが終わっている。

Misreading Chat の、毎週一本なにかを読むという縛りはけっこう大変。実際には周辺の論文も読まないとわからないことが多いし、編集にもまあまあ時間がかかる。そしてもう少し深掘りしたいとおもっても次週の準備に追われ踏み込めない。

こうしたフラストレーションから、やはり衝動で podcast  をはじめたのは失敗だったかと思うこともある。一方でそもそもたとえば PyTorch さわりたいなという気になったのも Autdiff 論文のついでにコードを読んだからだし、時間があったところで自分が有意義に使ったとも限らない。締め切りの力で毎週なにか読めている事実はあり、そのバランスの sweet spot はまだはっきりしない。仕事を真面目にやるという縛りの影響もあるし。

いずれにせよやりたいことができない事実はあるわけで、そのフラストレーションは精神衛生を損ねない程度に感じておくのが健全なのだろう。

On 20-Percent

|

20% プロジェクトというアイデアは、様々な人が様々な持論を支持する論拠に使われている。ただその理解が自分とはだいぶ違うように感じるのでここに個人的な見立てを書いてみる。

勤務先における 20% プロジェクトの由来については諸説あり、様々な corporate folklore を形成している(つまり決定的な証拠はない)。自分が好きなバージョンはこんなものだ: ある日、エンジニア部門のトップから社員たちにメールが届いた。「みな色々なプロジェクトに首を突っ込んで楽しくやってるみたいだけれど、本題のプロジェクトが進まないのは困るから他のとこに首をつっこむのは 20% <まで> にしといてね」

このバージョンは、自分が勤務先に対して抱いている文化感を反映している。つまり、

  • 良いプログラマは制度や仕事がどうであれ隙をみて面白いことをやろうとする。
  • マネージメントは雑で、細かいことは言わない。

こういう価値観というのは、良しにつけ悪しきにつけ色々と consequence がある。たとえば Disagree and Commit みたいのと(必ずしも矛盾はしないにせよ)相性が悪そうなのがわかると思う。

この視点でみると、マネジメントが 20% 制度を推奨するだとか 20% の成果も人事考課に組み込まれるなんていう主張は的外れに感じてしまう。もちろんタチの悪いマネージャの下についてしまった人が「権利としての 20%」を勝ち取るために制度が応援してあげるのはいいとおもうけれど、そもそもコソコソ勝手に何かするヒマがないほどキチキチに管理されている時点で cultural norm からは外れている・・・と思う。

つまりゆるくて雑でボトムアップなのが勤務先の良さだと思うのだよね。そこに 20% というラベルを付けて hiring のだしにするのはよいとおもうけれども、 それを 20% project という「制度のおかげで」なにか面白いことが起こると解釈されるとソワソワしてしまう。制度に頼るようになったらおわりだわ。


こうした文化や価値観は、会社や製品が巨大化するにつれその効力を失い、むしろ組織の足を引っ張ることすらある。それはよくないことで、正されるべきなのだろうか。わからない。似たような好き勝手文化を持つ DEC は滅び、正した IBM は生き延びた。でもこんなのは anec-data に過ぎない。

組織が成熟するなか, 文化的シンボルとしての 20% が制度としての 20% に姿を変えることはあるのだろうか。自分はそれを全く望んでいないけれども、他のオプションがよりマシとも限らないし、どうかね。


続きを書いた。

Multi-threading

|

定期的にマルチスレッド辛いという話を書いている気がする(前回)が、またそういう話です。

仕事のアプリはかなりマルチスレッドで、そのせいでしばしばスレッドまわりのバグがおこる。アプリケーションの性質上 compute intensive な部分や I/O (Binder) bound な部分がくまなくあるため、マルチスレッドを頑張っている事実はよい。しかしデザインが厳しい。

アプリは UI まわり以外はだいたいどこかの worker でコードが動く。そして UI 以外のコードは沢山ある。そうしたコード、というかクラスは thread-safe に書かれている。

でも thread-safe なコードを書くって大変じゃん?それよりは thread-safety というか concurrent access は一部の shared state 管理クラスにまかせ、あとは並列アクセスが発生しないように messaging based で作るほうがいいべ・・・。世の中サーバ側は割とそういう風になっている気がするのだが、クライアントサイドはなぜそうならないのだろうね。

前のプロジェクトは、所属するスレッドをあわらす context オブジェクトみたいのを持ち回るアーキテクチャを強いることでコードの実行スレッドを制限していた。Scala  だったら implicit parameter でやるようなことを手でやる雰囲気。これは機能していたが、一方でコードの古さから制限の仕方の筋が悪く、生産性は低かった。

オブジェクトの所属するスレッドを決める (広い意味で) actor 的なアプローチとは別に、Rx とかは状態をなるべく immutable にすることで thread-safety を実現している。これはこれでよい。アプリだとすべての状態を immutable にするのは現実的でない (Flux とかの連中はほっとくとしましょう) ので、Rx と actor をいい感じで使い分けて thread-safe なデザインを生み出してほしいものであることよ。

まあ世の中の大半のアプリのように background に追い出したいのが File I/O と Network プラスアルファくらいなら actor 的な部分はほとんど必要なく, Rx だけでよい。仕事のアプリはもうちょっと色々あるせいで話が単純でないから現状に至った結論を責める気はない。が、辛いことに代わりはない。


今のプロジェクトと前のプロジェクトに共通する問題。本来 thread-sanity をまあまあ実現できるデザインの意図があったことを読み取れる一方、その本来の意図が守られていない。architectural violation が発生しまくっている。そのせいで (たとえば thread context の持ち回りなど) 強制的な制限が残る一方で (immutability など) すり抜けやすい soft-constraint はすり抜けられ、バグがおこる。

これを architecture を守らないコードを書くやつが悪い、というのは簡単だけど、コードを書く側が守る気になれないようなデザインが悪いという方が自分の感覚に近い。デザインを決めた人 (TL とか) と下々のエンジニアの間に大きな実力差があり、かつ TL が micro-managing で下々が大人しい独裁的プロジェクトでは多少理不尽でも architectural constraint / contract を守り抜くことはできるけれど、もうちょっと下々がまともだと押し付けは成立しない。なので従うことにありがたみが感じられるようなデザインでないと生き残れない。そしてそういうデザインは、経験的には稀である。

のでかっこいいデザインを考えたい人は下々の気持ちになってがんばってちょ、と思うのだった。

On Device Tracing

|

Android P では on-device tracing すなわちデバイス上で Systrace をとる機能が追加された。これは性能バグ担当者からすると割と game changer である。

...というのを上司がファイルしてきた性能バグで学ぶ。この上司はもともと Android の中のひとだっただけあって色々よくわかっており、性能バグに bugreport ファイルだけでなくデバイス上で採取した ctrace ファイル(圧縮 Systrace ダンプ) を添付してくれた。たくさんのアプリを起動しまくり、かつネットワークも怪しい環境での Systrace. 今までに見たことのない現象が色々記録されている。すごい。こりゃいいわ。まあそういう厳しい環境下で怪しい挙動をする、とかいわれても直せないのだが・・・。

ところで Systrace が出力する HTML はでかい。でかすぎると Chrome が crash するため、事実上 Systrace ダンプの大きさを制限していた。自分も今まではでかい Systrace の閲覧を諦めてきたのだが上司のバグを無視するわけにもいかず重い腰をあげて回避策を調べてみた。

結論としては  V8 の heap size を大きくするフラグをわたして Chrome を起動すればよい。--js-flags="--max-old-space-size=10000" みたいな。Chrome のバグ参照のこと。

追記

500MB くらいになるとこのトリックをもってしても Chrome が死んでしまう。みんなどうしてんのこれ・・・。

伸ばした背筋の記憶

|

仕事日記、もともとの着想はワインバーグの「スーパーエンジニアへの道」という古い本から得た。

この本は会社員になってすぐの頃に読んで以来、仕事を真面目にする気になるたびに読み返している。別段新しい本でもないし、別にリーダーになりたいわけでもない(原題は Becoming a Technical Leader。)プログラマ向け自己啓発、今なら他にも色々あると思うので特に誰かに勧めたいとは思わないのだが、自分はなんとなく読み返してしまう。今もってるやつなんてこっちに引っ越してきたあとわざわざ Amazon.co.jp で買い直してる。

大した本でもないのになぜそんなに読み返してしまうのかと考える。たぶん、過去に自分が仕事を真面目にやろうとした頃の気分がかすかに蘇るからだろうな。それで背筋が伸びる。

20代の、自分がそのうちリーダーシップ的なものを持つと疑わなかった自分はきっと、この本を読んでやがて自分のテクニカルな技能を捨ててリーダーシップに舵を切るのだろうか・・・(しかし自分なら大丈夫に違いない・・・)とか思っていた気がする。しかし自分はリーダーシップのようなものを得ることは全くなく、というと言い過ぎだけれどそういうのは今の会社に入る前に卒業して、下っ端プログラマとして今日に至っている。なので本書も後半にいくほど段々と縁遠い話になっていく。

・・・とそれはさておき、ページをめくりながら自分が真面目に働いていた事実を思い出すと、ちょっとやる気がでる。そういう本ってきっとみんな別々に持っているんだろうなと思う。

仕事日記

|

仕事を真面目にやる活動の一貫として、一ヶ月くらい前から一日の終わりに10分くらいで仕事の日記を書く、ということをはじめた。割と続いている。

一日の終わりというのは退社前ではなく子供が寝たあとから自分が寝る前くらい。就業時間外に仕事のことを考えるのもどうかと思うけれど、一方できっかり nine-to-five で働いていると仕事中はいまいち心の余裕がなく内省的な気分になれない。少し距離のあるところで考えものをする良さもある。

まあ実際は Podcast の編集に追われたりで、翌朝会社で書いたりすることもしばしばだが。朝はもともと早めに行って本読んだりしてるため、職場の匂いからはデタッチできている。

10 分は短い。何をやったか思い出して書き出してだいたいおしまい。立ち入った考え事はあまりできない。それでも何かおかしいことに気がついたり、やり忘れていたことに気づいたりはけっこうある。10 分から得られる効能としては十分だと思う。No pun intended.

意識高い系の工夫として、以下の4つの項を含めることにしている: 気分、発見、感謝、債務

気分は、いいとか悪いとか疲れてるとか達成感あるとか、そういう話。悪い気分が続いていたら早めに気づけるように、というモニタリング目的。

発見は、新たに知ったことなど。コマンドラインの引数から同僚の性格まで。いちおう毎日何らかの歩みは進めていると自分に言い聞かせるための道具。

感謝は、これは完全にスピリチュアルな人みたいでアレだけれども、今日は誰に世話になったかという話。同僚とのインタラクションを思い出し、かつネガティブなことは含めない結果、一人で黙々と働いているという気分を和らげる効果がある。

債務は、やらなければなーと思いつつやっていないこと。調べ物、優先度見直し、バグ直し、など。

こういう必須項目についてのみ書いているわけではなく、むしろ最後に思い出してささっと書いて終わりくらいのもの。中身はなんでもいいけど何かしら書くことを決めておくとリズムができて良いと思った。

追記

その後、最後に「明日やる」のリストを書くことにした。これまでは本文に埋没してたけれど、リストにしておくと翌朝さっと見返せるので。

Cold Start and Busy Start on Android

|

Cold start 時のベンチマークが大きく下がっていることが発覚したので調べろと言われ、調査をする。しかし warm start 時と比べてこれといった違いがあるようには見えない。さて・・・。

改めて Systrace を睨むと、どうも自分たちのアプリではなく他のアプリが活発に動いている。なぜか。 Cold start を実現するためその測定はデバイスの再起動直後に行われていた。そしてデバイス起動の broadcast intent に反応し多くの pre-installed アプリがなんらかの準備運動を始めていたのだった。CPU が混雑するそんな起動直後でのベンチマーク。そりゃ遅くもなるわ・・・。

実際のところベンチマークは以前から起動直後に測定されているため、これだけが性能低下の原因だと言い切るのは勇み足の可能性がないではない。けどどうせ startup 時に色々やるアプリが増えたんでしょ... と shrug したい面はある。それに起動直後といういかにも non deterministic な環境で安定した測定ができるとも思えない。起動後はしばらくほっといてから測ってちょ、と伝える。測定のターンアラウンドが伸びてしまい気の毒だけれど・・・。

Cold start, 普通のアプリだったらプロセスを殺して page cache をクリアするくらいでだいたいいいと思うんだけど、センサーとかを使い始めるとまったく自明でないのだよなー・・・。一方でセンサーの cold start が遅くなったところでアプリにできることなんて大してない気もするのだが。しかし我々には platform に bug を file する、という責務があるのだった。

Turning English Mode On

|

通勤中の Podcast をやめてみると書いたけれど、結局再開している。これをやらないと勤務前に頭が英語モードにならず、ややおたおたした気分になってしまうことがわかったため。そういえば podcast を聞くのは単なるコンテンツ消化というだけではなく英語圧という面もあったのだった・・・。

そう考えると、聞き流すよりは集中して聞いて脳内シャドーイングするくらいの勢いが良い気がする。となるとあまりバカっぽいコンテンツよりはそれなりに身のあるものを聞きたい。あるいは一方的な broadcast より conversational なのを聞きたい。商業的なやつはどうしても broadcast ぽくなりがちで、一方 indie のやつはおおむねバカっぽい。トレードオフが悩ましい。

週末に会社で一服の気まずさ

|

週末の Left Alone 時間が午後にずれこんだため、コーヒー屋を諦めて会社に来ている。なぜコーヒー屋を諦めるかというと、午後は Wifi の混雑が厳しくなりがちだから。最近は書き物環境をほぼ WordPress に統一してしまったため、Wifi が欲しくなるのだった。On the go でちょっと書くならモバイルでいいんだけれど、時間をとって何かするときはラップトップとネットワークが欲しい。彼らの Electron アプリがオフライン対応してくれればいいのだが・・・。

週末に会社にいくなんてのは絶対にやりたくないことのひとつだったし、そういうことをする人々を内心見下していたものだけれど、すっかり見下される側になってしまった。Wifi の有無のようなロジスティクスの都合はさておき、心境の変化について考えてみる。

一番大きいのは、この Left Alone 時間は気分転換というより家の雑事から自分を切り離すための手段である、というところだろうな。自宅でもそこそこ集中して作業ができるなら気分転換先というだけで会社にいくのはいまいちだけれど、今は家から離れたいだけ。なお別に家が嫌という話ではなく、子供がいると本当に気が散るのだよね。たとえゆこっぷ(おくさん)が面倒を見てくれていても、声が聞こえるだけできびしい。なのでもう家以外だったら割とどこでも良いのだよな。

あと今は5時になったら容赦なく退社する暮らしをしているので、仕事や会社にうんざりするほど働いていないせいもあるかもしれない。家の都合があるから仕事のキリがいいところまで働くなんてことはできないから、むしろちょっと働き足りないみたいな。これは言い過ぎだけど、ある種の煮えきらなさはある。

ロジスティクス。家と会社が近くなったので、コーヒー屋も会社も体感距離が大差ない。そしてコーヒー屋は午後になると Wifi のみならず席も空いてないところが多いのだった。

まあ、それでも午前中にコーヒー屋に行くのが一番いいね。早い時間のコーヒー屋の雰囲気がよい。ただいつも午前中に時間をとれるわけではないから、そういうときは会社で妥協します。

表面的な話

|

Misreading Chat 表面的なところだけ追ってる、という感想を見かける。実際そうなのだが、悲しいことでもある。しかし時間や気力といった予算の都合によりそんなに立ち入った話はできないのだった。話ができない以前に、立ち入ったレベルまでは理解できない。

深い理解に基づいて詳しい話をする podcast は可能か。比較的じぶんがよく知っているものについて話すなら、ある程度は詳しい話ができるだろう。ただそれだと本人には得るものがないし、自分だとすぐ話すことがなくなってしまうね。なんでも詳しい人と言うのは存在するから、そういう人にはいいのかもしれない。

毎回よく調べてきて話すことも、頑張ればできるのかもしれない。それだと毎週やるのは難しいだろうけれども、それはそれで需要はあろう。このスタイルをやるならひとり語りにする方が良い、あるいは一人が話役、一人が聞き役みたいな。

Linear Digressions なんかはこの中間くらいで、host の Katie が専門であるデータサイエンスや機械学習について流行りの話題や気になる技術を調べてきて co-host の Ben に話すスタイル。これは Katie が優れたデータサイエンティストであるがゆえに成立している。自分には専門で追いかけている分野がないので、真似できない。

自分が先端にいる専門分野がない悲しさはある。受け入れているし日々はやり過ごしているが、ときどきその悲しさと向かい合わざるをえない。ひと目につくところで何かを語る以上、自分の vulnerable な部分に踏み込まれることに、あるいはそこ壁を立てることに、慣れないといけない。Blog では慣れたが、Podcast はまだ慣れないね。

よく知らないことをがんばって調べて話す。Revisionist History など商業的な podcast はそうなわけだが。程度を下げたとしても自分が余暇にできる感じじゃないな。

しばらく表面的な話をやっていきます。はい。

Re-Reading GAN

|

GANのep聞いたけど具体的にどのproposition, theoremがわからなかったか言ってくださるとよかったかな / 学部レベルの確率統計の知識でprop1とthm1はわかるはず. Thm2も用語調べつつ読めばわかるんじゃないかな

というフィードバック。聞いてる人が論文を手元にもってない前提で話しているし自分も向井さんの読んでる論文は手元においていないのでこのレベルの細かさで話すことはないけれども、一方で何がわかってないかちゃんと理解するのはいいことにも思える。

というわけで論文をちらっと眺めてみると・・・以前よんだとき、自分はそもそも式 (1) がよくわかってなかった気がする。今みるとわからなくもない。記憶をたどるに、まえは式中の P_{data} が何なのかわからなかったせいで行き詰まったのだと思う。文中にも出てこないし。これが要するに training data のことだよ、というのがわからなかった。今回は向井さんの話もあってそういうものだという前提で読めたのでわかった気になれたのだろう。

というところで満足して証明は読まず。ひどい。

 

 

Home Alone (6)

|

妻子帰宅。

一ヶ月を振り返ると:

  • 期待していたより生産的でなかった。インターネットで時間を無駄にしてしまうなど。
  • とはいえ時間はあった。結果として Misreading Chat 調べ物は過剰に捗った気がする。
  • 考え事ができたのはよかった。ゆこっぷ(おくさん)退職後、ようやく自分の体調が復帰して片働き会社員として仕事への取り組みを見直す必要があったなか、いいタイミングだった。

あとは妻子あり状態と独身状態の差を眺めるいい機会となった。そして自分の価値観は完全に妻子持ちに適応済であることを確認した。自分の時間があるのはいいことだけど、かといって独身に戻りたいかというと、そうでもないね。なぜかを説明するのは難しいけれど。妻子ありは(主に金銭的プレッシャーからくる)ストレスはあるけれど、ある種の精神的充足もある。

まったく説明になっていない。これは適応の結果なので別に独身者に結婚や子持ちを勧める類の話でもない。結婚生活とかムリとおもってても案外大丈夫だよというだけで、どちらかというと就職に似ている。学生時代、毎日朝から会社いくとか絶対ムリだわ・・・と思っていたけれど、案外適応できた。まあ働く必要がない身分なら別に仕事しなくていいと思うけど、仕事して金稼ぐってそれほどムリでもないよ、みたいな、そういうかんじ。

ただ家族持ち状態であっても、趣味のコードとかはさておき考え事をする時間についてはどうにかして確保した方がよいなともおもった。それなりにとっていたつもりだったけれども、こうして時間ができてみると足りてなかったことに気づく。特に自分は仕事についてほんとに何も考えてなかった事実にけっこうショックをうけた。その話は別に書く。

Book: The Essential Drucker

|

The Essential Drucker: The Best of Sixty Years of Peter Drucker's Essential Writings on Management (Play Books)

仕事のやる気を立て直すにあたり何か背筋が伸びる感じの本で読もう・・・ではなく聴こうと思い、そういえば Drucker って人気あるけど読んだことなかったなということで一冊。

古臭いし、前半のマネジメントの話は下々的にはどうでもよかったが、Knowledge Worker という概念を売り込む後半はそれなりによかった。なにかとリーダーシップの話になってしまう世の中の本と比べ、Knowledge Worker というのは専門職としてあるのだよ、という話をするので。この Knowledge Worker という概念、今ではあまり聞かなくなってしまった気がする。当たり前になってしまったのかもしれないし、他の名詞に置き代えられたのかもしれない。

もう少し細部を理解しようと paperback を買い直し、昨日届いたところ。読んだらまた感想でも書きます。


ところで Drucker, 日本では妙に人気がある気がする。アメリカでもそこそこ読まれているっぽいけれど, Amazon のレビューの星の数はそこらへんの作家と大差ない。

Drucker の文章にはよく日本がでてくる。Zaibatsu だとか Toyota だとか。昔の日本の影響力が垣間見えて感慨深い。このへんの日本贔屓がかの国での人気の秘密なのだろうか。

・・・とか思いながら paperback の冒頭を読んでいたら驚くべき事実が明らかになった: The Essential Drucker の元になったのは、なんと日本の Drucker 読み物なのだという。Drucker ファンである Mr. Ueda が、過去に当人の書き散らかしたの何冊もの本を通読して抜粋、編集しなおし、三冊にまとめたのだという。それを気に入った Drucker が Mr. Ueda バージョンを逆輸入した際、三冊だと多いねということで出版社が更に絞り込んで一冊にした。それがこの The Essential Drucker らしい。まじかー。Management の話はいらないから Individuals の部分だけ読みたいなーとおもいつつ聴いていたのだが、日本語ではそういう本がある。しかし英語にはない。なんだそりゃ・・・。

Amazon.co.jp の著者ページ をみると、Mr. Ueda はその後も様々なまとめバージョンの Drucker 本を出して啓蒙に勤しんでいる様子が伺える。つまり日本語圏での Drucker 人気は必ずしも Drucker の昔の文章に日本がよく出てくるからではなく、熱狂的 Drucker ファンであるところの Mr. Ueda ががんばったからなのだった! Drucker は本の冒頭で Mr. Ueda を指し "He is thus thoroughly familiar with my work - in fact, he knows it better than I do." とか言っている。そんなこと言われると原著厨の自分ですら Drucker は日本語で読んだ方が良いんじゃね、という気がしてきてしまう。Paperback 買ってしまったじゃないか...まあ絞られた分薄くなってるのでよしとしよう...。


訳者のがんばりでオリジナルの出版国より翻訳先で人気が出てしまう作家は確かにおり、たとえば柴田元幸が訳している作家とかはそういう面がある。Paul Auster にしろ Stuart Dybek にしろ、全然人気なくてびびる。柴田元幸の訳本が翻訳文学ファン以外でどれだけ人気なのかといわれるとわからないけれど・・・。

しかし超有名人だと思っていた Drucker が Paul Auster 枠だったとは、Mr. Ueda がんばったなあ。

Real ID

|

REAL ID Act

カルフォルニアの免許は連邦ID互換ではなかったためもうすぐヒコーキ(国内線)に乗る時に免許の他にパスポートが必要だよ、という警告があった。そして免許更新の再に少し手間を書ければ連邦互換の "REAL ID" というやつを作れるよ、という。この REAL ID を諦めればオンラインで免許が作れる。REAL ID のためには予約の上 DMV に行って手続きをしないといけない。別に Non-REAL ID でよいよねえ、とゆこっぷ(おくさん)に言ったら、いやふつうに考えて REAL ID でしょ、という。めんどくささへの耐性が一桁くらい違う感じがする。おかげでたすかっているのだが・・・。

で、仕方なくひと手間かけて取得した REAL ID が届いた。有効期限も 5 年くらいある。めでたい。予約していったおかげか、手続き自体はまあまあ速やかだった。ペーパーワークは電子化され、据え置きのPCから入力するシステムが導入されていた。

Home Alone (5)

|

平日夜や週末を生産的に過ごせる!と思っていたがダラダラすごしている。

平日夜。インターネットをダラダラやってしまい、結果として就寝が遅くなる。しかし夜は疲れていて時間があったところで頑張れない・・・・という二三年前にたどり着いた結論を思い出した。遅い就寝が貴重な朝の時間を奪っている。もったいない。あと一週間くらいは早寝早起きしよう。

週末も、もっと色々できるかと思ったが家事をして昼寝をして・・・とやはりダラダラしてしまった。週末って、そういえば前の日のうちにやることを決めておかないとぼんやり終わってしまうのだったな。やはり二三年前にはやってたけどこの一年ですっかり失われてしまっていたよ。

もっともそうやってキビキビした余暇をすごす努力自体、結婚したあとにはじめたことなので、独身時代の自分は時間はあったが生産的ではなかったね。早いうちからもてる時間を最大限使って前に進んでいる人たちが、いま同世代のスターになっているのだろうな。

家事育児などで時間がないとぐちぐち言えるほどもともとの自分は生産的でなかった。この事実はがっかりだけれど、一方で普段感じている不満の根拠がファンタジーだとわかったのは家庭平和の観点からよかったかもしれない。どうせ時間あってもダラダラインターネットするだけなんだから、それより限られた時間をうまくつかいなよと。

Mindfulness

|

ともだちがマインドフル·リーダーシップという本を読んでいた。リーダーシップにある人は mindfulness があったほうがいいよ、という話らしい。たしかに。上の人がイライラしたり気が散ってたりするとやだよな。そしてそういう人は一定数いそうではある。

既にどこかで書いた気もするけれど、自分が mindfulness というか meditation というものに興味を持ったのは10年くらい前に何かの雑誌で記事を読んだ時だった。外資系企業でブーム、みたいな内容だった記憶。最近は mindfulness を名を変えはやり続けている。息が長い。まあ仏教と同じくらいのロングセラーなわけだが・・・。

自分はそのときに半年くらいやってみて効能を感じ、その後も人生の辛い時期になるたび断続的に mediate していた。ただランニングをするようになって憂鬱な気持になることが減り、meditation もしなくなった。運動の方がはっきりと精神衛生に寄与するから。

ただ憂鬱な気持はともかく気が散る現象は続いていて、未だに苦しめられている。抗鬱ではなく集中のための道具としてふたたび取り組みなおしてもいいかもしれない。やりかた、だいぶ忘れちゃったな。

最近どこかのテック資本家が meditation は gdb みたいなものだと言っていた。自分はどちらかというとモニタリングみたいなものだと思う。top みたいな。言いたいことは同じだろう。何かおかしなプロセス(おかしな考え事)をみつけて、kill する。Meditation というのはおかしかろうがなんだろうがプロセス(考え事)が頭にうかんだら kill するプロセスを繰り返す練習。その訓練を重ねると日常生活の中でもバックグランドで top を起動しておき異変にきづき kill できるようになる。結果として集中力が増す。

これを教えに組み込んだ仏教は偉かった。キラーコンテンツ。でもそろそろ独占を手放す頃合いなのだろうね。

Assumption

|

Boundaries を書いて思い出したこと。

勤務先、自分が入社してから社員数がおよそ 3 倍くらいになっている。いま入ってくる人は自分が感じた以上に大企業の圧力を感じているだろう。たとえば自由度の低さとか。

自分は、この会社は割と自分でやると決めたことをやることができる、というか自分でやることを決めた方がよいと思っている。自分で決めないとマネージャとかが適当に仕事を持ってきてくれるのですごく困りはしないけれど、自分の好みや価値観はマネージャより自分の方がよく知っているはず。

ただ一方でやることに制限がないわけではない。適度に空気を読まないといけない。一方で、空気を読みすぎると自分を縛ってしまう。組織の巨大化にあわせ、空気はどうしても硬いものになっていくから。

比較的自由だった時代、あるいは比較的自由度の高いチームの空気を覚えていると、少しくらいまわりが堅苦しくなっても昔のように振る舞うことができる。多くの場合それで特に問題ない。でもいま入ってくる人たちは空気の味を知らないから、必要以上に自分を縛ってしまうように見える。ちょっともったいない。近隣大企業を渡り歩いてきた人なんかは勝手にやる空気のバリエーションを他所で身につけてくることもあるけれど、新卒とかはどうかな。

一方、自分より前からいる人はより一層自由の濃い空気を体験しており、より一層自律的に振る舞っているようにみえる。個人差はあるけれど。

自分は仕事を選べない受託開発の世界からやってきたため、やることを自分できめる空気に馴染むことがなかなかできなかった。そのせいで自由な時代、自由なチームの文化を無駄にしてしまった後悔がある。その反動で今はなるべく自分で仕事を決めるようにしており、それはうまくいくこともあれば行かないこともある。今のチームではまだ自分の知識が足りなすぎてうまくいかないことの方が多い。けれど仕事は自分で考える方が良い。自分はそう価値観を形成した。コードはどこまでもズカズカ踏み込んで行く方が良いという価値観と同じように。

こうした価値観の正しさを身をもって示すのがプログラマとしての自分の使命なのだろうとぼんやり思う。いまのとこぜんぜん示せてない。

Boundaries

|

今の仕事はアプリ開発な割にけっこう platform と密着しており、エッジケースのバグなどを踏むことが多い。というか自分がやっているプロジェクトが踏んでしまい困っている。

本来なら platform のコードを持ってきて直したいところなのだけれど、ビルドするのも動かすのもデバッグするのも大変。やりかたもよくわからない。そしてコードが雑然としている割に繊細な部分なので下手に触ると壊しそう。現実問題あまり直せる気がしない。いちおうビルドはしてみたが・・・。

アプリの開発をしていてサーバのコードを触るより、アプリの開発をしていて platform のコードをさわるほうが大変。実行環境の距離を考えると納得いかないけれど、スケールを考えると仕方ない気もしてくる。特定アプリの都合だけでどうにかできるものではない。

Platform とアプリの間の壁は受け入れるとして、連携している別アプリとの壁もけっこう厚そうに見える。そして platform 内部でもモジュール間の壁を感じる。

自分たちのアプリは monorepo に住んでいて、platform は monorepo 外の git repo 群にある。platform の中の壁は、たぶん git repo の間にあるのだろうと思う。連携しているアプリは同じく monorepo に住んでいるけれど、リリースサイクルの違いなどが壁になっている、気がする。

壁があるといっても、別に反目しあっているわけじゃない。相手のコードベースに踏み込んで直すのがやりにくいという話。かわりに相手に直してくれと頼む。頼むのが悪いとは思わないけれど、自分はよそのコードに踏み込んでいくのは得意だと思っていたのでやや物足りない。誰かに依存すると相手の都合に引きずられてしまうし。でも郷に入りてはで、頼み力を上げないといけないのだろうな。組織の壁というのも少しはあるし。


あるときコード解析ツールのグローバルな設定更新にあわせ自分たちのコードベースが間接的に依存しているどこかのプロジェクトのコードが壊れた。そのプロジェクトは解析ツールの設定を変えている問題に気づいていない。

壊れて困ってますとバグをファイルしたあと、ふと自分で直してしまう方が早いのではと思い立つ。たかだか数行の修正。ためしにレビューをもとめアップロードしたらあっさり受け入れられた。修正完了。二時間くらいでビルド回復終了。

壊れたコードのチームが何をやっているのかも、コードをレビューしてくれたのが誰かも、自分は知らない。にもかかわらず 1-2 時間で他人のコードに踏み込んでいって直せる。この壁の低さは monorepo と unified build system の力だと思う。じぶんは monorepo そんなに好きじゃないけど、いいところもあるね。レポジトリやビルド方法が違うと、なかなかこうはいかない。

思えばこのずかずか入っていって直すスタイルは Chrome 時代に身につけたものだ。Chrome もどちらかというと monorepo よりで、一つのツリーになるべく多くのコードを突っ込んである。だからチームやモジュールの垣根を超えてコードをいじりやすい。そして V8 や Skia を直すのには壁がある。この壁は明らかにレポジトリに起因している。意味的に似た関係である WebKit と JavaScriptCore のあいだの壁は低い。同居しているから。


Monorepo にはコードのでかさという代償がつきまとう。ソフトウェアを小さく分割し、壁の向こうは触らないと決めれば小さなコードの身軽さを楽しめるのかもしれない。けれど可能性があるなら踏み込みたいと自分は思ってしまう。価値観とチームのやり方にズレがあるのは悲しいけれど、異文化体験ということにしておく。

Home Alone (4)

|

車が自由に使えるの、ちょっと便利だね。たとえば東京に帰る日本人同僚の送別会がダウンタウンである、なんてとき身軽に行ける。通勤バスに乗りそびれた向井さんを家に送っていける。

自分の車を持っていたらまた違った生活ができたかなあ。しかしこの便利さはヒマとセットなので、ヒマがない今はあまり活用できそうにない。子供が生まれる前はどうだったか。少しは使ったかもしれない。

どちらかというと、もっと積極的に Uber や Lyft を使っておけばよかったという話か。週に一回乗るくらいなら車を買うよりも安上がりなのだから、「車を買うよりは安い」とおもってこれらのタクシーを使えばもっと積極的にイベントの類に顔を出せたことだろう。車がないのを言い訳に出不精してしまったのは、過去三年間の反省。

自分の、つまり家で二台目の車を持つのは、度々考えるけれど今のところ踏みとどまっている。周りを見ると子供が二人いる家では二台目に踏み切る人が多い。アメリカ人的には持っていて当然のようだけれど、その価値観はまだ受け入れていない。

GitBook Pivot

|

ふと GitBook を見てみたら、PDF と EPUB のエクスポート機能がなくなっていた。ええー・・・どうも電子書籍執筆ツールからテクニカルドキュメンテーションのホストに衣替えしたらしい。それ Read the Docs なのでは。一方で Read the Docs にマーケットがあったのは明らかなので、その市場に乗り込むのは正しいのかもしれない。

個人的にはオンラインで Markdown から EPUB を作れるサービスとして老後(?)の楽しみにしてたので残念。


ところで Read the Docs の Github アカウントは rdfd らしい。F を落としたのはえらかったね。落とさないという選択はあり得ない気もするけど。

README 表示という発明

|

GitHub のコードブラウザはディレクトリのページでまず README を表示してくれる。これは小さいながらすごく良い発明だったと思う。今では GitHub に限らずソースコードをホストするサイトは概ねこの仕様に従っている。

あるディレクトリやパッケージになにがあるかを説明したいことは多い。Javadoc にもそういう機能があった。でも言語を問わず README を書ける方が堅牢でいい。言語固有の拡張はあっていいと思うけれど。

会社の中にあるコードブラウザも数年前から README 表示がついた。Monorepo を採用していると README はプロジェクトのホームページみたいになる 。GitHub でいうとルートディレクトリの README が重要なのと同じ。これがない時代はいったいどうしてたのかと不思議になるくらいの必須機能。

ディレクトリ単位で README をつけられる機能、ソースコードの文脈以外でも欲しいことがよくある。ちょっと前から Google Apps に Team Drive という機能がようやく追加され、チームのドキュメントはここに集約しましょうという話になる。けれどディレクトリにファイルが並んでるだけだと、そこに本来なにがあるべきといった情報が足らず膨大なドキュメント群を navigate できない。

ここでディレクトリ単位の REDME があったらどれだけ便利だろう。とりあえず新入りはこのドキュメントを読め、新しい design doc はここにおけ、ミーティングの議事録はここ。そんなガイドを書いておける。今はそういう情報は Google Sites (まだあるよ!)に書くことが多いのだけれど, コードに近いドキュメントは markdown でレポジトリに入れそうでない文書は Docs で書く結果 Sites に残された情報って README 代替以外でそんなにないのだよね。しかも Sites と Docs は認知的に遠い上に主戦場が Docs なせいで README ページは保守されそこねがち。Docs に README があればもうチーム内情報の整理に Sites いらないじゃん。

ドキュメントはぜんぶ Markdown で書けば Docs だっていらないじゃん、という主張はありうるし、実際そういうチームもある。ただレビューしたり図を書いたりするのは Docs の方がだいぶラク。Docs がコードのレポジトリにチェックインできたらなあ・・・と思う瞬間がないではない。それは MS Word という。別に Word を使いたいわけじゃないんだよ。

Docs に README のインライン表示がついたら、自分の中にかすかに残る Wiki への郷愁を完全に殺すことができるのになー。

Proxy Child

|

最近ようやく(自分以外の)子供がかわいいという感覚がわかってきた。けれど自分の場合、よその子の中にも結局我が子の影を見ているからだなと思う。

3-4 歳くらいの子供が公園で遊んでいる。自分の子ももうすぐあんな風になるのかな、と思う。新生児が stroller の上で眠っている。自分の子も少し前まであんな風だったのに、大きくなったな、と思う。泣き叫んでいる子供を見ても、ああ可哀想に眠いのかな思い通りにいかないことがあったのかな、と思いはすれど特に不愉快に思うことはない。結局、自分の子供もそういう時があるからだと思う。共感といえば聞こえはいいけれど、天気みたいなものだよな。雨が降ってるのに怒っても仕方ないというか。

自分の子供が、たとえば10歳くらいになったとき、newborn や toddler を目にした自分は我が子の小さい頃を思い出すのだろうか。思い出せる方が子育ては実りあるものになると思うけど、物忘れは激しいし、どうかな。

平社員技能

|

仕事のうだつがあがらない問題に対処すべく、会社員技能について基本に立ち戻って見直そう、本でも読んで考えを整理したい、などと考える。

けれどプログラミングとかソフトウェア開発の本を読もうという気になれない。残念。なぜかと考える。たぶんコーディング能力をちょっとあげたらくらいでは仕事の難関を超えられる気がしないからだろうな。世の中にはコーディング能力がボトルネックになる仕事は割とあるし、圧倒的にコードがかければ多くの問題をその力で片付けることもできる。ただ自分の目の前の仕事はそうではない・・・つまり漸近的なプログラミング技能の改善が仕事の生産性に直結していない気がする。ドカーンと書けるようになれば別だけど、そういうことはおきないから。

それじゃジコケーハツでもしますか、というと・・・悪くはないだろうけど、自分は既にライフハック的なのはやってしまっているので、大きな期待ができない。復習がてら軽く古典的なやつを読み直してもいいかもは思う。達人プログラマ的なソフトウェア開発者向け読み物にせよ、GTD 的な一般ライフハック読み物にせよ。

自分が弱いなと思うのは「何をやるか決める」あるいは「なにをやり続けるかを決める」みたいな部分。最近 Sam Altman が書いていた Productivity という記事でもそれが一番大事と言う。自分は別に起業家でも経営者でもない会社員だけれども、そんな下っ端にも何をやるか/やらないかのオプションは結構あり、選択は成果に大きく影響する。

これは最初になにをやるか決める時だけでなく、プロジェクトを続けていくなかで予期しないことが起きた時に舵取りの判断をする話でもある。進みが遅いとき、大きな問題が起きた時、壁を押し続けるべきなのか、方向転換すべきなのか、諦めるべきか。それを誰に相談してどう決めるか。こういう判断は日々フラクタル的に発生してるけれど自分は良い舵取りの指針を持っていない。

あとは他の人と協力して何かやるのもあまり得意でないなあ。頼んだことをきちんとやってもらうとか、利害関係を調整してなんかやるとか。今のプロジェクトはそういう場面が多く、手こずっている。それだけじゃないけれど。

やることを決めるとか関係者との協力とかっていわゆる leadership の文脈で語られることが多いけれど、自分は別に lead ではない。世の中の leadership 愛好家は肩書とは関係なく leadership はあるというけれど、やはりチームとか組織の責任をもってる人と individual contributor では権力や戦力の量(立場があると強い)や身軽さ(立場がない方が高い)が違うので、個人として人々と協力しつつ価値のあることをやる手口は leadership とは別に議論してほしい。しかし世はなぜか個人の生産性の話を lifehack ぽい方向に向かわせがちで、そうじゃなくて・・・と思う。

「問題解決」みたいのは近いといえば近いけれど、なんちゅうか、製品開発は必ずしも問題解決ってわけでもないのだよな。そして問題解決とかいいだすとだいたいプロセスとかに手を出しがちで、しかしプログラマとしての自分はそういうので成果をだしたいわけではない。そうことやってると Engineering Manager とか TPM とかになってしまうよ・・・。

起業家や management ではない。Leadership でもない。問題解決コンサル/TPMでもない。スーパーハカーでもない。が、言われたことをやるだけの純粋末端というわけでもない。世間のよくある肩書の隙間にいるのがソフトウェア製品開発の IC なのだ・・・というのはいまいち納得がいかない。そんな特別なものじゃなくてみんなやってるはずだし何らかの方法論はできてるはずなのだが。みんな leadership 目指して頑張ってるの?そんなことないでしょ日銭稼ぐのだって多少は頭使うでしょ...

きっとそういう議論をしてる人はどこかにはいるのでしょう。自分が仕事のインパクトみたいな会社員的な語りから興味を失ったまま何年も過ごしてしまったから見えていないだけで。真面目にやります。はい。

つまり: 古典を読み直しつつ、弱点を補う話題の読むものを探す。考えを整理する。


なんか同じようなことを数年おきに考えてるなーとおもったら初出は 13 年まえだった。やばい。進歩してない。ていうか 13 年前のほうがちゃんと会社員だった気もする。

評価減

|

人事考課の評定が下がってしまった・・・。

しょうじき仕事がはかどってない体感はあり、予期はしていた。しかし実際に受け取るとへこむのだった。上司はチーム移ってまだ短いし仕方ないからここからアゲてこうなと励ましてくれたけれど、上司に励まされるのはヤバいよなあ。上司がでなく、自分が。よくやってるのでその調子で頼む、以外の評価はよくない。次の半年で同じ評定だとクビ・・・まではいかないけれどだいぶよろしくない。たとえば給料は下がる。困る。

今のチームはクライアントサイドの中では少し特殊なエリアで、自分も馴染みがない。だからこそ良い挑戦になろうと選んだのだけれど、挑むにあたり必要な頑張りが足りなかった。立場を追い込めば自然とがんばるという自分への期待を満たすことができなかった。堕落したな。

今は、去年よりマシとはいえやはり家事育児もあり仕事に使える時間や体力の資源は限られている。にもかかわらず唐突に Podcast をはじめてしまったり ML をやらなければみたいなプレッシャーを感じたりで気が散り、仕事への注力が足りていなかった。

これは優先順位だけの問題ではなく、「気が散る」ことからくる慢性的な生産性低下の問題でもある。仕事中なのに仕事に集中しきれない。これはほんとに堕落したとしかいいようがないので、立て直さないといけない。

集中力に限って言えば、過去に気が散る時期は何度もあった。今までの仕事は気が散っていても経験値で乗り切れたけれど、新しい慣れない仕事は経験値がないので気が散るとだめ。一方で、昔のようにガッツリのめり込んで駆け上がる体力も時間もない。

かわりに: 限られた時間の中で集中して働くこと。成果のでる仕事を優先すること。成果を出すやりかたを優先すること、が求められる。逆にいうと、たとえば新しいテクノロジをさわれる、みたいな自分の興味を優先すべきではないし、同じく深掘りして詳しくなりたい、みたいになんでも自分でやろうとはせず、できる人に頼むことを優先した方がよいということ。

もっというと、好奇心や学び優先ではなく成果を優先するよう自分の価値判断を調整しないといけない。すくなくともチームの中である程度の地位を獲得するまでは。

自分は個人的に成果自体より好奇心や目新しさやハンズオンの充足に重きをおいているのでこれは残念な話だけれど、いまは価値観を優先する余裕が自分にない。それが今回の評定であろう。 wake-up call というやつだ。がんばって成果をだして立場を固め余裕ができたらまた好奇心を優先できるようになる。そう信じて頑張らないといけない。

ただしょうじき、馴染みの薄いジャンルの新しいチームで成果を上げるにはどうべきか、いまいちよくわかんないのだよな。いまのところあまり立て直せる見通しがない。これは時間をかけて真面目に考えないとなあ・・・。自分がそんなちゃんと働けるプログラマなのか不安。しかしこれは向き合わなければいけない不安なのだよ・・・と自分に言い聞かせる。


成果と好奇心が一致していないのは悲しいことか。悲しいことではある。これは自分の実力と期待値と責務が釣り合っていない、端的にいうと実力不足ゆえの話なので、がんばって少しずつギャップをうめていくしかない。


追記: 人事考課の季節

Thinking and Listening

|

以前ドライブのあいだずっと podcast を聞きまくっていると話していた友達に、自分のやってる podcast を聞いてよと言ってみた。すると「今年は大きな仕事ができそうな気がしているので podcast は聞かないでぼんやり考え事してる」という返事。

仕事のことを考えるかどうかはさておき、通勤や移動の時間を考え事にあてたいのはわかる。自分も一時期 podcast や audiobook  などを聞きすぎて考え事ができていないと通勤中のオーディオ摂取をやめたことがあった。ただそのときは同じことを何度もぐるぐる考えてしまうだけで実りがなかったから、またオーディオ生活に復帰したのだった。

でもそろそろ考え事に時間を割いていい時期かもしれない。Podcast は楽しいけれど、ソーシャルメディアやニュースサイトを眺めるのと似て大きな実りはないよね。

Podcast を聴いている時間のうち、すべてが考え事に適しているわけでもない。たとえば料理中なんてのは考え事には向かない。作業への注意がそれなりに必要だから。でも通勤や運動のように、体は使うけれど頭を使わない時間は考え事に向いている。自分は今年から料理を含む家事の多くをゆこっぷ(奥さん)に移譲してしまったので、オーディオ可処分時間は減ったのだった。そのぶん他の時間が増えているはずなんだけど。

というわけで今月と来月は通勤中の podcast および audiobook はやめます。

Altair

|

Altair という Python の可視化 API がある。このあいだ社内で紹介テックトークがあったので手持ちの SQL/Notebook 仕事で使ってみた。結構良い。Pandas の plot() はしょぼすぎるから辛くても Matplotlib を・・・みたいな機会は, 自分の SQL 仕事の範囲ならもう起こらなそう。簡潔かつ強力。

バックエンドとフロントエンドを切り離し、そのあいだは Vega という JSON ベースのフォーマットで通信する、だからクロス言語にもできるんだよ!とかいうを昔きいたときはうげー overengineering で完成しなそうだし遅そう・・・と思って無視してたけど普通に使えました。ごめん。

ところで Altair と Vega (と Deneb) は Summer Triangle からきた命名なのだね。

Home Alone (3)

|

日曜日。リズムを維持するため定例のコーヒー外出をしている。家にいるとダラダラしてしまうし。家事は立て直せたが、そこから先に何をするかは未だ定まらず。家事をしていると思ったほど無限に時間があるわけでもない。会社員だから当たり前だけれど、時間がるとダラダラしてしまうという事実は、自分のぱっとしなさを象徴している感じはする。

朝に早起きするのがけっこう難しい。さすがに午後まで寝てしまうとかはなく 7時半くらいには起きているけれど、睡眠時間的には 6 時に起きてもバチはあたらない。今までは人の気配で起きていたのだなと思う。

思ったことを書くのについ Twitter をしてしまう。よくない。Blog に書きます。はい。

Home Alone (2)

|

留守番日記、二日目。(毎日はつけないよ。)

これは独身生活ではないよな。家が広すぎるしモノは多いし。そしてホテルでもない。自分の家族のために organize されているので。これは・・・留守番だな。若干寂しく、思ったほど心躍る感じでもない。しかし時間は時間なので活用していこうではないか。

昨日は気が散漫になってインターネットをしているうちに夜が更けてしまったので、反省して立て直しを図る。家事、一人だからやらなくていいわけではないと気づいたため朝晩週末とやることを紙に書き出して壁に貼る。家事そのものではなくやるべき家事を考えるのがストレスなので、紙に書いてあることを順番にやればよい。

食事。会社の夕食を食べようかと思ったが、夕食の提供開始が自分の定時よりだいぶ後だと気づく。そしてけっこう混んでて列が長い。暗くなってから帰るのは嫌なので帰って自炊することにする。ここ数年の訓練の結果とくに炊事に苦痛はなくなっていたのだった。自分で調味すると味覚が疲れないのもよい。会社飯、きらいじゃないけど味噌や醤油への craving を detach できていない自分。

といっても毎日自分のためだけに炊事するのは若干かったるいので来週はドカっとカレーでも作って食べ続ける所存。晩飯だけならまあ、いいでしょ。適当に野菜も食べたりして。今週は冷蔵庫の在庫処分を優先する。問題なければ来週以降も似たような感じで。

インターネットやりすぎ問題は残るため、久々に procrastination device であるところの Mono G をとりだしてセットアップした。この遅いデバイスでのみソーシャルメディアを見るものとする。

というかんじで昨日よりは留守番の姿勢が整ってきた気がする。

週末のつくりおき料理については色々具体的なアイデアが頭に浮かぶのに(カレー、ポトフ、ボロネーゼ、ゆで豚、浅漬け・・・)留守番コーディングプロジェクトについてはなんの具体性も浮かび上がらない。この 1-2 年の自分の暮らしぶりの現れなので仕方ないとはいえ、やれやれ・・・。

 

Home Alone

|

妻子が骨休めにと一ヶ月ほど実家に帰っていった。自由だ!と思っていたけれど、家に帰ってくると誰もいなくて奇妙な気分。もう結婚して四年以上なので家に誰もいない感覚を忘れている。家が自分のためではなく家族のためにセットアップされているにも関わらず自分しかいない、という点が特に奇妙だ。猫はいるのだが。

とか思いながらソーシャルメディアを眺めていたらあっという間に一時間たってしまった。ちゃんと計画なり思惑を持ってやることやらないとダメだな、ということでこれから考えます。ほんとは事前に考えておきたかったんだけど、ちょっと体調を崩したせいで出遅れたのだった。

さすがにずっと一人活動していると飽きそうなので、週末はともだちを捕まえて料理でもしたい。しかしこういうときに気軽に呼べる相手が案外少ないというのが今の自分なのだった。一人だけいて、よかったな、というとこです。

Data Expert

|

今のチーム, dashboard を誰が保守しているのかと思ったらつくった人はもう他所のチームに移ってしまっており、自分の隣の席の人が壊れたのをほそぼそと直していたのだった。そこで dashboard 開発を take over してみようかとコードを読んでみるとよく出来おり感心。社内のdashboard インフラを使いこなし、しかし大げさなことはせず、データパイプラインのほぼ全てが SQL で完結している。バッチの使い方とかも手堅い。Possibly privacy sensitive な raw log から aggregated なデータをつくるとか、こういうのは Java で書くものだと信じていたが SQL で足りるんだな。

LinkedIn を眺めると、その dashboard をつくった人は前の会社で何らかの analytics 業務をしていたらしい。道理で Android 開発者なのにばりばり SQL を書けるわけだ。そういえば隣の席の人も前の会社では Hadoop 的な世界でなんかやってたと言っていた。なぜこの人たちが Android のアプリを書いているのかは謎だが、それはさておき自分も若くて融通が効くうちにキャリアのどこかでデータに近づいておくんだったなあといつもの後悔が浮かび上がる。まあ 10 年前とかデータの仕事そんなになかった気がするけど。でもサーバ側をやっていれば SQL は得意になったかもね。


キャリアが若いうちは採用する側も色々甘く見てくれるため、わりと専門でない仕事をすることができる。だからたとえば自分のようにクライアントサイドばっかりの人も 2-3 年サーバサイドの修行でもするかな、と転職するのは割にあう気がする。

しかし実際にはそういう見通しで転職することを考えたこはなかった。なぜだろうね。まあ今の勤務先で長々とは働く前は小さい会社でそれなりに色々やっていたので、スキルセットの構築という点で特にまずい判断があった気はしない。大企業で長々と同じことをやるのが良くなかった、といういつもの結論にたどり着くだけだった。

Leave Me Alone

|

先人のアドバイスにより、週に一回数時間、家を離れてコーヒー屋で考え事などをする時間をもらうことにした。去年からやってたんだけど、風邪などのため数カ月中断していた。先週から再開。今もその時間でこれを書いている。

以前は snippets をやっていたんだけれど、去年の後半に家事育児のロードから個人的な活動が完全に途絶えてしまい「何もしていない」と書く snippets が二ヶ月以上続いた結果、かえってやる気を削ぐため一旦リタイアした。そのしばらくあとから病気の冬が始まり、そう考えるともう半年くらい何もやってない。

温かい気温のせいもあって気管支炎/喘息の症状は今週でほぼ完全に収まり、薬もいらなくなった。来週からは日常への復帰を始めたい。日常復帰の予定をここに書くのはなんとなく憚られるので、どっか他所に書きます。

ゆこっぷ(奥さん)が退職して家事を takeover してくれたおかげで、それまでの張り詰めた感じはなくなって心には余裕がある。とはいえ平日は相変わらず時間がないし、週末も家族のために使うのでこの leave me alone くらいしか時間はない。なんとか squeeze out していかねばなあ。

 

Hyperthyroidism

|

血液検査をしたら thyroid / 甲状腺のホルモンが多すぎるという結果。Hyperthyroidism というらしい。自覚症状はないけれど、症状がなくても心臓病のリスクがあるので治療した方がいいとある。しかし治療をした結果こんどはホルモンが少なくなりすぎることもあるらしく、そうすると回復する方法がないので一生薬を飲む必要があるらしい。厄介な病気になってしまったなあ。

持病。基本的には遺伝性の病気で、生活習慣がどうとかいうものではない模様。治療をする以外に actionable な要素がないので気に病んでも仕方ないのだが、一生薬を飲むとかいわれるとだいぶ肩が落ちる。いや、まだ治療してないからそうなると決まったわけではないのだけれど。心臓病(治療しない)のリスクか一生薬を飲む(治療する)リスクかという選択を迫られるのは憂鬱。まあ治療するつもりです。

皮肉なことに、自分にコントロールできるのはこの「憂鬱になる」という部分だけ。緩やかな老化の入り口として受け入れ、無駄に悩まず moving on したい。

2019-04-20 追記

一年くらい病院通いしたのち治った。やはり年末年始の激しい風邪のダメージだった模様。よかった。

Cold: A Postmortem

|

風邪をこじらせ数ヶ月にわたりひどい体調で過ごす羽目になった原因を考える。

11 月に引いた風邪のきっかけは、走って帰宅したあとシャワーも着替えもなく子供の世話に突入してしまい体を冷やしたことだった。目先の要望に追われても体調に関係する作業(着替え)は優先してやろう。

12 月にひいた風邪は、子供から移された。子供が風邪を引いたら家の中でもマスクをするようにした。症状をでてからマスクをしても遅いんだけれど、やらないよりはマシということで。ただマスクをして子供の相手をすると子供は親の表情が見えないので不機嫌になりがち。なやまし。

1 月の風邪、悪化して気管支炎から喘息に至ったいちばん酷いやつ、の原因は、端的にいうと色々不精だったなと思う。

  • まずこの時期は子供も風邪を引いており、自分の体調への注意が足りなかった。
  • 風邪を引いたあと、十分に安静にしなかった。会社は病欠したのだが、家で家事などをしてしまい安静にできなかった。風邪を引いたら寝よう。ただ一方で家族揃って不調だったなど家事のバックログはすごく溜まっていたので、家事をさぼって寝ているのが良かったのかはわからない。この問題は結局ゆこっぷ(奥さん)が仕事をやめて家事育児に集中するという形で解決した。
  • 寒さへの対策ができていなかった。
    • 自分のいるアパートは居間にしか暖房がない。なので寝室は寒い。居間のヒーターもよく止まってしまう。寒い時期にヒーターが止まっているのに気づかず寒いままだった。寝室にはオイルヒーターを買った。乾燥対策に加湿器も買った。滞在時間の長い台所、食卓ではヤカンを火にかけておき温度と湿度を得ている。
    • 夫婦で同じベッドに寝る際、奥さんに掛け布団を奪われていた。奪い取るのもどうかと我慢していたけれど、そのせいで寒さにやられた。掛け布団を一人一枚もつようにしたらだいぶ体調が回復した。体調が悪いときはほんとはベッドを独占出来たほうが圧倒的に回復するのだけれど、予備のベッドはないので基本的には諦め。
    • 寝具の保温性が低かった。ベッドの上に毛布を敷いた。暖かさが増し体調がよくなった。
    • 温かい寝間着を買った。睡眠時にシャツを重ね着るようにした。
    • 根本的には、特に睡眠時の寒さに無頓着だったと思う。「暖かくする」という風邪対策の基本が欠落していたせいで、ひどく悪化してしまった。夏と大差ない寝具で寝てたからね。そりゃ風邪もひくわ。むしろこれまでの三年間なぜ無事だったのかなぞ。
  • Primary Care Doctor がいないせいで、医者に行くのが遅れた。また urgent care や ER のようなその場しのぎの医者にばかりかかっていた。Primary Care Doctor を決めた。Primary Care という仕組みに馴染みがないせいでさぼっていたのがよくなかった。

来年の冬はこの投稿をみなおし、風邪に備えたい所存。

HTML Imports の死

|

Polymer 3.0 は HTML Imports をやめて JS の modules に移行するという。もうこれで HTML Imports を使う人はいなくなった。どのブラウザにも実装されなかったし、仕様自体も HTML Modules だかなんだかに morph しているらしい。詳しいことは知らないが・・・。

HTML Imports の仕事はたぶん 1-2 年くらいやっていて、開発者あたりの社会へのインパクトという意味では自分の人生で一番大きなプロジェクトだった。Shadow DOM とか Custom Elements も序盤のコードは結構書いたけれど、一番大変な後半の ship するところは他の人がやったからね。HTML Imports は仕様も書いたし一応 ship までやった。

そんな人生最大の仕事がウェブ標準の黒歴史として葬り去られた。悲しい。けれど一番の後悔があるとすれば、これを ship 前の早い段階で殺さなかったことだとずっと思っていた。Web Components の中で, HTML Imports だけは明らかに異質だった。Layered Architecture の principle に反していた。これはだめだという感覚がずっとあったけれど、それを信じることができなかった。これはダメだといえば、人々は聞き届けてくれたかもしれないのに。そしてそれは、自分の仕事の重要な部分であったろうに。勇気も自信も、よりよいアイデアもなかった。

だから HTML Imports が消えて無くなったこと自体は、落胆よりも安堵が大きい。自分の不甲斐なさのツケを、誰かが払ってくれたということだから。そのコストは大きなものだったけれど。


仕事であっても自分が正しいと思うことをやる。プロジェクトの価値観と自分の価値観の整合性に気を配る。この黒歴史を通じ、自分はそんな個人的な学びを得たのだった。

2017 Review

|

今年について。

1月に無事子供が生まれ、1Q は育休を取った。隙を見てやったのはアプリ開発。まあ何もやらないよりは良かったと思う。Kotlin に馴染めた。

2Q は主に Goodfellow を読んでいた。仕事はぱっとしなかった。復帰後に選んだプロジェクトがよくなかった。結局これが契機でチームを移ることにしたし。ただ自分にも明らかに非はあり、もっとうまくすすめることはできたと思う。

3Q は Goodfellow を切り上げ TF を少し触り、そのあたりで家事の忙しさが増し何もできなくなった。あとチーム変更の準備もいそがしかった。社内求人を眺める時間の確保にも手こずる有様。

4Q はじめに新しいチームにはいった。ただ下がりきった仕事への集中を立て直しそこね、最初の一ヶ月くらいを無駄に過ごしてしまった。気を取り直してピッチを上げた矢先、家族総出の大病気大会がはじまり、その余波でヘルニアになり病欠したまま年が終わった。仕事の外では引き続き何もできていない。

異動の感想とかは、まあ表立って書くことはないです。自分の実力をボトルネックにすることはできていると思うので、チームへの大きな不満はない。


今年の目標は、ML でなにか end-to-end で動くものを作る、だった。達成度はゼロ。異動を決めたあたりで失敗は確定したけど、その時点で何もコードがなかったので、どのみちダメだったとおもう。

だめだった原因は、自分がぼんやり考えていたアイデアが実力にあってなかったからだと考えている。データを集めるのがそれなりに大変で、モデルも多少 novelity が必要そうだった。バーが高すぎて手を動かすに至れなかった。

自分はデータの扱いもMLも素人なのだから、アイデアの退屈さは受け入れ既存の公開データを相手によく定義された問題を解いてみるべきだった。たとえば Kaggle の画像解析系を解いてみるとか。まあ、尊大だったね。難しい挑戦をしなれてない。次があったら謙虚にやります。


日々の印象として、自分のやってきたこと(やってこなかったこと)のツケを払うフェーズに入ったな、と感じた。良くも悪くも、これからさき自分の積み重ねの慣性から大きく舵を切るのは難しくなるだろう。舵とりの努力はするつもりだけれど、思うようにならない前提で人生設計しないと危険に思える。


子についてはここには書かない。なんとなくミスマッチに感じるので。

A Sense of Ending Career

|

今年の後半は家事育児の負担が増し、ほとんど何も出来ないままだった。時間の無さの内訳を書いても詮ないので詳細は省くけれど、今年の4月頃にも時間がないとか書いているのに輪をかけて何もできていない。

この状態が続くと、そして順当にいくなら最低数年は続くだろうが、プログラマとしての自分は終わると思う。正直なところ今の会社に入ったあと自分が以前より良いプログラマになったとは思わない(し、それは実績に反映されている)が、それでも時代への適応は一定程度してきたと思う。このままだとそれも終わり、やがて使えない年寄りになる。

多くの女性が結婚や出産を機にフルタイムの仕事を諦めることを考えると、これは自然な帰結に思える。共働きというのは、仕事への諦めを二人で折衷するということだから - つまりフルタイム労働はやめないけれど、そこから前に進むことも出来ない。折衷といっても奥さんは二時間労働時間を縮めているので自分の方がまだ多く働いている。フェアな分担でもない。

自分の主要な不安は、夫婦間の wage gap がありすぎるせいで職業的コミットメント低下に伴い自分の job security が下がる割に二重収入による financial security を得られないこと。つまり共働きは家庭の稼ぎを不安定にしていると感じてしまう。

この言い分はだいぶ横柄だし、 wage gap に文句を言うのは明らかに筋を違えている。それに自分で稼ぐという行為は純粋に金銭的な損得だけでなく個人の independence や dignity にも関わる場合があるので、単純に共働きをやめればいいというものでもない。自分も父親が早死したにもかかわらず母親が公務員だったおかげで無事大学を出られた経験があるため、共働きというか働く母親という概念の正しさには強いバイアスがある。海原雄山みたいな性格だったら葛藤もないのだろうけれど。

金銭的な不安定さへの不安とキャリアを追求できない不満を自分は分離できない。なのでこの金銭的な不安は単に自分の願望に言い訳を与えているだけではないかという思いがある。仮に自分がプログラマとしてのキャリアに集中できたところで、本当に金銭的な安定は増すのか? 自分の career investor としての実績をみるに多くは期待できない。

金銭と職業的コミットメントを関連付けられないのは、自分の今の収入がほぼ運頼みだと思っているからだろう。たとえば今この瞬間に会社をやめて、同じだけの収入が得られるだろうか。特に今のように nine-to-five の勤務で。まあ無理だわ。半分くらいがいいとこ。そして職業的コミットメントによって運と実力の溝を埋め切れる気がしない。かつて運が巡ってきた時にそれを掴みとるくらいの能力を持っていた点については我ながらよくやったと思うけれど、そのあとが続かなかったね。

収入との連動を約束できない自分の職業的コミットメント(つまり家をほっといて仕事したいというわがまま)のために、働く女性という個人の dignity/identity/ideology を犠牲にしろとは言えない。そうした犠牲を強いず済むのは社会の進歩のおかげでもあるし、運のおかげでもある。まあ自分のわがままをさしおけばいい話じゃないの。

この運もやがて尽きるだろう。その時にどうすればいいか。わからない。願わくばそれまでに一定程度の資産ができて、CoL の高い西海岸を撤収し日本で地味に働きながらほそぼそ暮らせば困らないくらいになっていたらいいなと思っている。あまりかっこいい話ではないけれど、運を頼りに理念を優先する人生の対価としては妥当なき気がする。


いちおう補足しておくと、これは自分個人の話であって何ら一般論ではない。共働きを勧めているわけでも、子持ち共働きが誰にとってもキャリアの終わりだと言いいたいわけでもない。職業的コミットメントと金銭的コミットメントを一致させ家族を養っている人もいるし、共働きをしながら良いプログラマでありつづける人もいる。自分がそうなっていないのは、個人としての価値観と能力と巡り合わせの帰結でしかない。要するに意固地で無能という話。仕方ない。

もうひとつ、自分はキャリアの終わりを予感しているし現状の収入は運だと思っているけれども、キャリアを終わらせたいとも運以外がまったく頼れないとも思っていない。家事育児の負担を金の力などで解決する方法は考えたり試したりしているし、役に立たない趣味はとっくに捨て、少しでも前に進むことができないかいつも考えている。ただ世の中には競争があるので、9時5時で帰って家事して飯食って寝てる人がガツガツ働いて帰ってからもコード書いたり読んだり勉強したりしてる人に勝てないのはなんというか、あたりまえじゃん?

この文章は愚痴だけれども、自分が総体として不幸だとは特に思ってない。日常は平和で、肉体的に追い詰められてもいない。仕事も嫌いではない。眠い、辛い、金がない、もう死ぬ、みたいなワーキングプア的苦しみには面していない。キャリアを追求できないだなんて、所詮は贅沢な悩みだとはおもう。

Reflection

|

今のチームでの自分の働きなどを振り返ってみる。

よかったこと:

  • 性能改善という、自分にとって正しいと思える仕事を主にすることができた。ブラウザの internals に詳しいおかげで常人にはできたないレベルのチューニングをできたのはよかった。ニッチすぎて機会は多くなかったけれど。
  • Android について一定程度理解が進んだ。特に性能調査の仕方は割と詳しくなった。
  • ぐっとこらえてリファクタリングに時間をかけなかった。
  • BigQuery に少し親しめた。
  • サーバ側を少しだけ触れた。
  • チームメイトのパーソナリティを以前のチームより深く知ることができた。(自分が何かしたからではなく、チームの小ささと各人の性格によるもの。)

よくなかったこと:

  • Android 愛が芽生えず、結果として理解も期待したほどには深まらなかった。
  • 普通のアプリ、結局は締め切りに間に合わせる見積もりおよび計画性と規模の大きさで破綻させない整理整頓の力というあまりに伝統的なエンジニアリング能力、しかもチームとしての力の大きい部分が重要であることがわかり、個人の開発者としてはいまいち熱意をわかせなかった。
  • そんな偉そうなことを言いつつ、性能改善の仕事は、成果はぱっとしなかった。あとは性能を継続的にトラックする側にもっと力を注ぐべきだった。基盤が揃ってる状態に spoil されていたせいか、がんばって基盤を作るのはやり損ねた。
  • UI の仕事をできなかった。高速化はしたけれど、UX のひとからモックをもらって書き起こすみたいのはやらなかった。まあ正直そんな興味ないんだけど訓練として一回くらいやるべきだった気がする。
  • コードの品質を追求しなかった。既存コードの品質に引きずられる中、それを変える努力をしなかった。これはリファクタリングをしない、の裏返しでもあるので仕方ないけれど。
  • チームの中で存在感を高める努力をしなかった。なんどかやろうとしたけれど、派生するめんどくさい議論を想像してくじけてしまった。コードの品質を追求したいなら、自分のコードをちゃんとするだけでなくあるべき姿について意見を言ったりしないといけない。そういうときは存在感が必要。ソフトウェア開発、なんだかんだでチームプレイだからね。
  • それに関連して、一人プロジェクトは mixed だった。自分が正しいと思うことに注力できたのはよかったが、もうちょっとチームの方針と align していることをやる方がチームとの一体感があってよい気がする。自分の仕事は方針と矛盾はしていなかった(だから仕事を続けられた)が、ぴったり合っていたとも言えない。やる気を出して働くには自分と価値観のあうチームで働くか、自分の価値観をチームにあわせるかが必要。どちらもなかった。まあ価値観はけっこう調整したつもりだけれど、自分もそれなりに stubborn なので。
  • 上の2つの結果として、いまいちチームへの所属意識、一体感みたいのが高まらなかった。サービスの方向性みたいのにも無関心になってしまった。会社員が熱心に働きたいならそういうのはあったほうがいい気がする。
  • サーバ側, serving だけでなく ingestion とか analytics のコードもどさくさで触りたかったけれど、ほとんど機会をつくれなかった。そういえば一回だけ Flume さわったけどほんと一瞬だったな・・・。
  • 育休復帰後の ramp up は完全に失敗した。どうにかする余地があったのかはわからないが。

つぎはもうちょっとうまく振る舞い、熱意をもって仕事ができるようにしたいもんです。

Moving

|

また別のチームに移ることにした。

もともと三年くらいたったら移りたいと思っており、データの仕事ができないかと考えていた。まだ三年はたっていないけれど、育休復帰に失敗していまいちなプロジェクトをやることになってしまい疲弊していたため早めに移動先を探していた。

結果として自分がやりたい類のデータの仕事ができるチームには移れなかった。いくつか興味深そうなものに応募したものの、すべて断られた。面接することもなくレジュメだけで断られ、しかもそのポジションは今も埋まっていない様子なので必要な基準をまったく満たせなかったのだろう。これはちょっとショックだった。レジュメで断らてしまうとちょっと業務外で勉強しておくくらいじゃどうにもならない。

データ感が薄めのポジションや巨大チームの下っ端など、未経験でもなんとかなりそうなサーバサイドの求人もあった。もともとはデータの仕事ができないならせめてそういうサーバサイドの仕事で社内インフラの経験を積もうと考えていたけれど、いざ実際の求人を見るとやる気がおきない。修行なので仕方ないとはいえ、社内インフラ経験のためだけにあと数年たいして興味もない仕事をする様を想像すると、ちゃんと働ける気がしなかった。

オープンソース信者の自分は社内のプロプリエタリなスタックは遅かれ早かれ滅びると信じている。次のステップのため自分が信じていないテクノロジを学ぶ仕事をする。しかも経験者の古株社員がいっぱいいる世界で下っ端からスタート。盛り上がれない。

もうちょっと好きになれそうな仕事がないかと眺めていたら、Android アプリの求人がひとつ目についた。自分はアプリ仕事からは足を洗いたいと思っていたけれど、その求人はなんとなく自分の好みにあっているように感じた。周辺情報を調べた後話を聞いてみると実際悪くはなさそうだった。アプリ仕事をやるはこの一年書いてきた見通しと全く矛盾するけれど、一方で gut feeling というかある種のときめきがある。そして何か面白いことがあるかもしれないという感触は、自分がここ数年失っていたものだと気づいた。

データの仕事がみつからない失望が生んだ幻想かもしれないし、目先の誘惑で将来の roadmap から外れるのはどうかとも思う。一方でわざわざ他所の国まできて働いているのは何らかの excitement が欲しいから。机上の計画に滅私奉公なんてやってられん。と結論してその Android アプリのチームにいくことにした。


結果として自分はもうこの会社でデータの仕事はおろかサーバサイドの仕事すらやることはほぼなくなったと思う。その先の将来も同じ傾向だろう。まあまあ絶望している。分散コンピューティングや機械学習みたいなかっこいい仕事がしたい人生だった。ただしこれは今回絶たれた道ではなく、これまで仕事をつづけてきたなかで少しずつ無意識に捨ててしまった道だとも思う。東京にいたときも、前回の異動でも、サーバサイドに舵を切ることは出来た。でも社内スタックを信じられないからと近づかなかった。結果として自分のレジュメにはサーバサイドやデータの仕事ができない人の匂いが染み付いてしまった。数年後に今回と同じような職探しをしても同じように断られるだろう。経験者がゴロゴロいるなかで未経験なおっさんを選ぶ理由がない。

仕事の外でなんとかする道筋も見えない。いまや業務外に使える時間予算は限られているし、その時間はしばらく新しい仕事に関係する勉強に使うつもりでいる。今のところその中にサーバサイド技術を使う機会は見いだせていない。

だから順当にいけば自分はサーバサイドのできない、データのわからない、クライアント専業プログラマになるだろう。悲しい。いつか目先のやることが落ち着いて、また仕事と関係ないテクノロジをさわる余裕が戻ってくるだろうか。いまのところ期待できない。こうしてキャリアの扉は閉ざされていく。

ある可能性を捨て選んだもうひとつの道で、その犠牲にみあった成果がだせるだろうか。まあがんばります。


この記事は 2017 年には publish しない予定。