Misreading Chat, 日本だと Pocketcasts の technology カテゴリにランクインしてると教わったので見てみたら、案外知らないプログラマ Podcast がいっぱいあった。探してないから知らないのも当たり前といえばあたりまえなんだけど、驚き。そして無知を反省。
そういえば ajitofm というのは前に一回聴いた気がする。
ランクにはいっている他のやつで Rebuild 以外だと自分が名前を聞いたことがあったのは backspace.fm, tcfm, mozaic.fm くらい。
サイトを見る限り、これらはニュースへのコメンタリ、仕事や趣味での体験や考えなどを話しているようにみえる。そういう話はじっさい面白いだが、そういうのばっかりでも飽きる。これは「ポエム」とか「退職エントリ」みたいなブログへの飽きに似ている。ので毛色の違うことをやろうとおもって論文を読むことにしたのが Misreading Chat なのだった。
まあしょうじき飽きるとか偉そうなことを言う以前に話すことがないよね。大企業下っ端だと。別にカッティングエッジな技術を使っているでもなし、イニシアティブをリードしているでもなし。
先人のアドバイスにより、週に一回数時間、家を離れてコーヒー屋で考え事などをする時間をもらうことにした。去年からやってたんだけど、風邪などのため数カ月中断していた。先週から再開。今もその時間でこれを書いている。
以前は snippets をやっていたんだけれど、去年の後半に家事育児のロードから個人的な活動が完全に途絶えてしまい「何もしていない」と書く snippets が二ヶ月以上続いた結果、かえってやる気を削ぐため一旦リタイアした。そのしばらくあとから病気の冬が始まり、そう考えるともう半年くらい何もやってない。
温かい気温のせいもあって気管支炎/喘息の症状は今週でほぼ完全に収まり、薬もいらなくなった。来週からは日常への復帰を始めたい。日常復帰の予定をここに書くのはなんとなく憚られるので、どっか他所に書きます。
ゆこっぷ(奥さん)が退職して家事を takeover してくれたおかげで、それまでの張り詰めた感じはなくなって心には余裕がある。とはいえ平日は相変わらず時間がないし、週末も家族のために使うのでこの leave me alone くらいしか時間はない。なんとか squeeze out していかねばなあ。
血液検査をしたら thyroid / 甲状腺のホルモンが多すぎるという結果。Hyperthyroidism というらしい。自覚症状はないけれど、症状がなくても心臓病のリスクがあるので治療した方がいいとある。しかし治療をした結果こんどはホルモンが少なくなりすぎることもあるらしく、そうすると回復する方法がないので一生薬を飲む必要があるらしい。厄介な病気になってしまったなあ。
持病。基本的には遺伝性の病気で、生活習慣がどうとかいうものではない模様。治療をする以外に actionable な要素がないので気に病んでも仕方ないのだが、一生薬を飲むとかいわれるとだいぶ肩が落ちる。いや、まだ治療してないからそうなると決まったわけではないのだけれど。心臓病(治療しない)のリスクか一生薬を飲む(治療する)リスクかという選択を迫られるのは憂鬱。まあ治療するつもりです。
皮肉なことに、自分にコントロールできるのはこの「憂鬱になる」という部分だけ。緩やかな老化の入り口として受け入れ、無駄に悩まず moving on したい。
2019-04-20 追記
一年くらい病院通いしたのち治った。やはり年末年始の激しい風邪のダメージだった模様。よかった。
Buffer size 増やしんたいんだけど、と隣の同僚に言われて調べたのだが、コードなどをみたところ結局 atrace コマンド (Systrace から呼ばれてデバイス側で動く) がカーネルパラメタをセットしてくれるので systrace の -b オプションを指定するだけで良いっぽい。そして atrace がしかるべき kernel parameter をセットしてくれるので自分でどうこうする必要はなさげ。自分は -t と -b は相反するコマンドだとおもってたけど、両方同時に指定してよいんだな。
仕事のコードベースで静的解析が強化され、なにかと presubmit check が失敗するようになってしまった。静的解析、昔は憧れがあったし今もまあ有用ではあると思うけれども、すきになれないなあ。
静的解析は、言語のセマンティクスを変えている(狭めている、といっても良い。有効なコードの範囲が減るので。)しかしその変更は、言語のデザインとは別に追加されている。そして静的解析の都合で言語側のデザインが変わることはない。デザインを変えられないから外側のツールとして動いているわけで。
結果として静的解析を通すためのコードは cumbersome になりがちである。自分が一番嫌なのは、コンストラクタの中でメソッドを呼べない(呼びにくい)という制限。コンストラクタが終わるまでオブジェクトは未初期化かもしれないから、未初期化のものを触る際の制限を受ける。でもさー・・・たとえば Android の View とかってのはコンストラクタの中で色々やる前提でデザインされている。コンストラクタがシステムから呼ばれるので、たとえば factory method でコンストラクタをラップして factory method 側で初期化処理の仕上げをする、とかはできない。もっと端的にいえば、もし Android 本体に自分のチームが使っている静的解析をかけたらやまほどエラーができると思う。
結局のところ、言語機能になってるべきものを外側で誤魔化そうとするから歪みが出る。コンパイラの警告も静的解析に似た annoyance があるけれど、それほど理不尽には感じない。あれらは言語の機能と密着しているので、基本的にはその言語として良いコードを書けば直るようになっている。静的解析は違う。言語の外側に作られた静的解析用の DSL, というか annotation を頼るわけだけれど、こいつは言語の思想とは必ずしも会ってないので歪みが生まれる。
なので静的解析のようなものは言語処理系が(言語のデザインも含めて)提供すべきであって、あとづけ、そとづけの静的解析はいまいちだと思う。ま、言語を直せないから仕方ないんだけど。誰か Safe Java みたいのをつくってほしいもんです。というか Kotlin があればいいです。
今月はだらだら過ごしている。体調も回復しきっておらず運動もしてない。勉強もしてない。来月から頑張る。
体調が悪いと、頑張るとふたたび体調を崩すのではないかという恐怖があってよくない。かれこれ4ヶ月くらいこんな調子だったせいで、自分ががんばっている状態をうまくイメージできなくなってしまった。
あと頑張るというのは子や妻との bonding をさぼるという副作用もあり、その心理的抵抗もある。頑張っていた頃は暗黙のうちにぶっちぎっていたわけだが。一方で bonding にかけられる時間に上限はないので、どこかで切り上げないと何も出来ないのだった。悩ましいね。
今月のさぼりは受け入れるとして、4月から通常運行に復帰すべくすこしずつ準備をしないとなあ。
仕事のコードでレイアウトが遅くて困っているため View 構造の改善をやっている。
この作業は、少なくとも最初のステップは割と定形的だと自分は思っている。つまり、表示しない View の visibility を GONE にする。一部の機能でしか必要のない View subtree を ViewStub に押し込む。
この後が悩ましい。まず GONE とはいえ hierarchy に参加している View には一定程度のコストがある。だから可能なら hierarchy から外したほうが良い。このアプローチを dynamic mutation とでも読んでおこう。
もうひとつのアプローチは View の入れ子で実現しているものを一つの View に押し込む。そして入れ子の親だった何らかの layout view を消す。これは view flattening と呼ばれている。
Dynamic mutation を使うと XML で宣言的に View を作ることができない。だから保守性が下がる。保守性を下げずに dynamic mutation を実現する良い方法がない。View flattening も conventional に書く良い方法がない。まあ ConstraintLayout で入れ子になったレイアウとを減らすのは conventional と言えるかな。でも flattening できるケースってそれだけじゃないよね。
Platform の convention に従うと遅いこの現状は Android にとって良い物ではないよなあ。
なぜこんなに遅いのか。View というオブジェクトが heavyweight で, かつライフタイムのフックというユーザのコードが View と一体化しているせいでツリートラバースでチートができない二点が原因だと自分は思っている。ウェブブラウザだと個々の Element は小さいしライフタイムのフックはそれなりに isolate されているのでたくさん Element を作ったりトラバースでチートしたりすることができた。
まあだからといってウェブアプリは convention に書けば速いかというと、そうは信じられていない。だから React みたいなものが幅を利かせることになった。
Android における React 的存在はなにか。ひとつは React Native で、もうひとつは Litho だろうな。
HTML にしろ View にしろ、プラットホームの convention はやがて React や Litho のような第三者に蹂躙される運命なのだろうか。そんなことはないと思うけれど、自分の身近な platform が二回続けてやられてしまうと platform というものへの faith を保てないのも事実だね。
風邪をこじらせ数ヶ月にわたりひどい体調で過ごす羽目になった原因を考える。
11 月に引いた風邪のきっかけは、走って帰宅したあとシャワーも着替えもなく子供の世話に突入してしまい体を冷やしたことだった。目先の要望に追われても体調に関係する作業(着替え)は優先してやろう。
12 月にひいた風邪は、子供から移された。子供が風邪を引いたら家の中でもマスクをするようにした。症状をでてからマスクをしても遅いんだけれど、やらないよりはマシということで。ただマスクをして子供の相手をすると子供は親の表情が見えないので不機嫌になりがち。なやまし。
1 月の風邪、悪化して気管支炎から喘息に至ったいちばん酷いやつ、の原因は、端的にいうと色々不精だったなと思う。
- まずこの時期は子供も風邪を引いており、自分の体調への注意が足りなかった。
- 風邪を引いたあと、十分に安静にしなかった。会社は病欠したのだが、家で家事などをしてしまい安静にできなかった。風邪を引いたら寝よう。ただ一方で家族揃って不調だったなど家事のバックログはすごく溜まっていたので、家事をさぼって寝ているのが良かったのかはわからない。この問題は結局ゆこっぷ(奥さん)が仕事をやめて家事育児に集中するという形で解決した。
- 寒さへの対策ができていなかった。
- 自分のいるアパートは居間にしか暖房がない。なので寝室は寒い。居間のヒーターもよく止まってしまう。寒い時期にヒーターが止まっているのに気づかず寒いままだった。寝室にはオイルヒーターを買った。乾燥対策に加湿器も買った。滞在時間の長い台所、食卓ではヤカンを火にかけておき温度と湿度を得ている。
- 夫婦で同じベッドに寝る際、奥さんに掛け布団を奪われていた。奪い取るのもどうかと我慢していたけれど、そのせいで寒さにやられた。掛け布団を一人一枚もつようにしたらだいぶ体調が回復した。体調が悪いときはほんとはベッドを独占出来たほうが圧倒的に回復するのだけれど、予備のベッドはないので基本的には諦め。
- 寝具の保温性が低かった。ベッドの上に毛布を敷いた。暖かさが増し体調がよくなった。
- 温かい寝間着を買った。睡眠時にシャツを重ね着るようにした。
- 根本的には、特に睡眠時の寒さに無頓着だったと思う。「暖かくする」という風邪対策の基本が欠落していたせいで、ひどく悪化してしまった。夏と大差ない寝具で寝てたからね。そりゃ風邪もひくわ。むしろこれまでの三年間なぜ無事だったのかなぞ。
- Primary Care Doctor がいないせいで、医者に行くのが遅れた。また urgent care や ER のようなその場しのぎの医者にばかりかかっていた。Primary Care Doctor を決めた。Primary Care という仕組みに馴染みがないせいでさぼっていたのがよくなかった。
来年の冬はこの投稿をみなおし、風邪に備えたい所存。
11月の下旬に風邪を引き、12月はヘルニアになり、1月はまた風邪を引き、そしてこの風邪が気管支炎になり、その影響で chest wall pain もおこり、などなどひどい体調が続いていた。1月に The Worst Winter と書いたとおり。
その後ちゃんと医者にかかったところ慢性の喘息むけの薬を処方された。喘息か・・・と落ち込むも、この薬はだいぶ効いて、ふつうに働ける程度には回復した。まだ薬には頼っており、あとchest wall pain もまだ残っているけれど、先月よりはだいぶマシ。このまま天気が暖かくなるのにあわせて治ると良いなと思っている。
喘息というか気管支の症状があるうちは、そして chest wall pain があるうちは運動ができず、そのせいで色々はかどらないのがつらい。それでも先週くらいから通勤をバスでなく歩きに戻した。走るのはまだ無理だけど、少しでも体を動かせると精神衛生には良い。
といったかんじでここまで三ヶ月くらいひどい体調。はやく元気になりたい。こじらせてしまった反省は稿をわけて書きます。