Spinach Forest

December, 2018

/ 先送り   / MN #48 - Halide Tutorial   / What To Give Up   / Link: ngrok - secure introspectable tunnels to localhost   / HV: Steering   / MN #47 - Weekly Review   / MN #46 - Blog For a Change.   / My "Things I Don’t Know"   / #45 - Resuming Halide Tutorial   / Comments and Commit Logs in English   / 来年以降のキャリアをぼんやり考える   / Building The OS   / MN #43 - Home Chore, Then Note Prep   / 家でも非同期コミュニケーション   / MN #42 - Firecracker Reading, continued.   / MN #41 - Podcast Prep Reading, Firecracker   / Review 2018 / Work   / MN #41 Weekly Review   / MN #40 - Podcast Editing   / Mercari IR   / プログラミング言語の習熟   / 2018 Review   / MN #39 - QEMU   / MN #38 - Podcast Note Writing   / MN #37 - Podcast Paper Reading   / (Audio)books 2018   / NM #36 - Podcast Prep   / 職場における自分個人の進行管理   / Podcast Channels to Settle   / Links: Book Lists   / NM #35 - Weekly Review @SB   / NM #34 - Halide Tutorial Leasson 03 -   / MN #33 - Halide Tutorial   / TabCopy   / MN #32 - Halide Continues   / android_library   / Revisiting Simplenote (and Failed Again)   / NM #31 - Halide   / NM #30 - Histogram Equalization   / MN #29 - Weekly Review @SB   / Playing With Firefox   / MN #28 - Histogram Equalization   / MN #27 - Demosaicing   / Skimming OpenCV   / C++ programming with Visual Studio Code   / 給与改定の季節   / Link: Microsoft Edge: Making the web better through more open source collaboration - Windows Experience BlogWindows Experience Blog   / MN #26 - Demosaicing Prep.   / MN #25 - Cleanup   / KVM Papers and Links   / Link: The Friendship That Made Google Huge | The New Yorker   / Link: My New Book: Digital Minimalism - Study Hacks - Cal Newport   / NM #24 Libpng   / Precision 5530 Setup Log   / NM #23 - Laptop Setup   / Roadtrip   / MN #22 - Podcast Planning @SB   / NM #21 - Pondering   / ... 

先送り

|

いつもはこの blog を年末にまとめて公開していたが、書いてから人に読まれるまで時間を挟みたい意図が年末に近づくほど薄れてしまうのがいまいち。しかも Podcast などの影響で自分のことを認知する人が増えてしまい(いいことのはずだが)、居心地の悪さが閾値を超えた。

ので 2018 年分は 2020 年頭か 2019 年末あたりに公開することにしたい。年末の方がヒマでいいかな。たぶん。

人に読ませるものを書く気が一層薄れそうだが、人に読ませるものを書かないというのは当初の目的の一つだったのでそれで良しとする。コンテンツとしての自分の価値を高くしないのは、精神衛生を保つ上で重要な指針に思える。Podcast だけで十分。

MN #48 - Halide Tutorial

04:52.

今年最後の課外活動は... Halide tutorial でもやるかな。そしてどうでもいいけど halide-lang.org は未だに HTTP だな。自分のブログもどっかで HTTPS にしないとなあ...

  • Lesson13, Tuples.
    • arg_max なるほどこうなるのか。Halide の関数はなんとなく常に 1 以上の次元を持っている気がしていたが、引数無しで scalar value を出力しても良いんだね。
    • Tuple を C++ のクラスでラップしているのもなるほどというかんじだ。コード生成前の abstraction だからやりたい放題ということか。こうやって値をグループ化しても実行時の plane が分かれてるのは面白いよな。
    • それにしても select() で分岐とか TensorFlow みたいだな。言語内 DSL だから似てくるのも当たり前っちゃそうなのだけれど。
  • Lesson14, The Halide Type System.
    • 読むだけ。
    • Expr や Funcs の型, 実行時にチェックできるのか。型が合わないエラーは結構おきたので、明示的にチェックできるのは良い。Halide, なにかとちゃんと作ってあるなあ。

 

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 をやっているわけで、自分の名を関しているのはそうしたコンテンツやメディアであってコードではないのだろうな。

これは我が体を表していると思うし現状として受け入れているけれども、この先もずっとそうなのかと思うとだいぶ悲しい。


年末だからと将来のことを考えると暗くなりがち。程々にして、また目先のことに気を取られつつ暮らしていきたい。

Link: ngrok - secure introspectable tunnels to localhost

|

via ngrok - secure introspectable tunnels to localhost

自分であげた GCE のインスタンスにある Jupyter をどこからでもさわりたい問題、ふと調べてみたら ngrok という port forwarding 業者を使えそうだとわかった。まあ今どき人々は Colab なのかもしんないけど、自分でインスタンスを持ちたいときには便利かもしんない。

個人事業主がやってるインディーっぽいサービス。しかし Webhook API を提供している業者のチュートリアルでは隈なく使われているという。インターネット、いいかげんでよいな。

HV: Steering

カメラまわりハローワーク、当初の予定を若干逸脱しているので見直す。Halide チュートリアルのあとやることリスト:

  • Bazel + Android Java
  • (Stretch) Bazel + Android Kotlin
  • Bazel + NDK
  • Android ML Kit
  • (Stretch) Android TF Lite

次点:

  • Camera2, 3A integration
  • Android Caffe2Go
  • Android Vulkan
  • Android C++ OpenGL

次点までバーっとさわってみたい気もするが、その手前で一旦 wrapup して他のことをやってもよい、ということにしておく。そのときに次点もカバーするならすると判断すればよい。

ハローワーク、触れる要素技術が増えること自体は一定程度不安を和らげてくれはするのだがいまいち達成感ないのが長く続ける意欲を削ぎがち。なんかまとまった量のものを書きたい。しかし現状の自分はあまりに丸腰すぎて何も興味深いことができないので仕方なし。

MN #47 - Weekly Review

05:45. @SB. 寒いなどの理由で普段は歩きのところ車に載ってみたら窓が凍っていた。そしてスタバ、ついに何も言わなくてもコーヒーとドーナツが出てくるようになった。常連だ!

考え事の日です。

 

MN #46 - Blog For a Change.

04:40. 昨日は疲労のためスキップ。

今日はなんとなくどうでもいいブログでも書くかという気分。

  • どうでもいいのを書いたので Halide 続きやるかな・・・。
  • しかし Lesson 09 後半, 難しい。真面目にやる日が来たら読み直すことにしてパス。
  • 10, 11, AOT や cross compilation の話。このへんは Bazel 任せなのでいいかな。クロスコンパイルも C++ の中でできる、という事実はなかなか豪快だが、ビルドツールとインテグレーションするが面倒そうでもある。やはり Python くらいがよったのでは・・・と思わざるを得ない。
  • 12. GPU... は環境がないのでスキップ。

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 してます。色々触れる仕事は遠くなりにけり。

追記

自分の知らないことを書くのに気が乗らない理由の一つは、こういう上から教えたがりさんに絡まれる可能性への億劫さだと思う。

#45 - Resuming Halide Tutorial

05:00. よく見ると #41 が重複していたので #44 はスキップ。

Halide やんぞ。

  • しかしもう忘れちゃったよ・・・
  • Lesson 05 done. 最適化の話。可視化がクール。
    • 変数を前もって宣言して in-out 引数のように扱うのは若干 ugly に感じ、どうせならたとえば split() の結果として2つの Halide::Var を返せばいいと思ったが、そうすると builder 的な fluent interface にできないね。言語内 DSL だとこんなもんかな。
    • 強力さは理解した。でも真価を発揮するのは multi-stage の pipeline だろうなー。
  • Lesson 07.
    • Multi-stage!
    • Expr と Func の違いをいまいち附に落とせていなかったが、さわるとわかるね。つまり Expr はスカラな変数で Func はベクトル化された値、と考えればよさそう。たとえば blur_x と blur_y を一つの blur Func で表現しようとすると blur_x に相当するフェーズがベクトル化されず、実行もシリアルになってしまう。計算結果の再利用の仕方とかも埋め込んでしまう。Func にするとそれらを Halide に任せられる。なるほど。
    • Buffer の set_min とか何に使うのかと思ったら halo を表現する必要があるのか。なるほど・・・。
  • Lesson 08. めんどくさくなってきたので読むだけ。コメントを丁寧に読むのが大事とわかってきた。重要情報が書いてあるので。
    • compute_at() とか store_at() は producer 側に指定するのだな。すると consumer 側がどう producer を使うかコントロールできる。
    • 単一ステージだと comput_at() とか store_at() に意味がないのは、そこに consumer がいないからである。というデザイン。
    • store_root() しても中間バッファの量は最小化される!なぜなら: "Note that my claimed amount of memory allocated doesn't match the reference C code. Halide is performing one more optimization under the hood. It folds the storage for the producer down into a circular buffer of two scanlines." ほー。逆に store_root() しないと隣接行は再利用してくれないのか。
    • scheduler についていまいちメンタルモデルを form できないね。ステージとステージの間を調停してくれる、と考えるとだいたい合ってるのかなあ。
  • Lesson09. Update functions
    • Histogram!
    • RDom はほんとにループを綺麗に書けるだけ、という存在だった。本来ループが存在しない Halide の世界になぜループの話があるかというと、Update functions はHalide の原則から例外的にはずれて副作用のある世界になるから。そんな話だったなそういえば。
    • しかしなんで振る舞いを決定的にできるのかわからないな。associative であるような演算だけ、とか何らかの性質を使うのだがろうがリテラシー不足でわからん。不安。

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 をみて思ったことだが、自分は目先の仕事でなく転職や課外活動などを中心にしすぎている。このバイアスは正さないと雇用が危うい。資源が限られているときは目先の仕事重要。

 

Building The OS

|

年末でコードレビューを頼む相手もおらず暇なのと、去年は OS のバグに苦しめられたのとで、手元で OS をビルドできるようにしておこう計画を進めてみる。すなわち repo init, repo sync して本体をビルドしてみる。

でかい。社内ビルドなのでアプリも全部入っている。それだけでなく、ビルドをしていると中間生成物でディスク残量がみるみる減っていく。複数チェックアウトを手元にもつのは厳しい感じのサイズ。Chrome のときもでかいと思ったけど、比べ物にならないね。コードの複雑さ以前に物理的なバイト数で。このクソでかいのにたいした専用インフラなしにやってる OS の一味やばいと思わざるをえない。せめて Ninja になってたのはよかったね。

ワークステーションは、最近 Mac Pro もびっくりの業務用超速くてデカくてうるさいやつにアップデートしてもらったのでディスクサイズを別にするとびくともしない。ビルドもファンがうるさいが速い。すごい。ただしアプリ開発には overkill だな。

そしてビルドとインストールはできたけど仮にまたバグがあったとしてデバッグできる気が全くしない・・・。

MN #43 - Home Chore, Then Note Prep

04:49

  • 家事雑用をやってからノートかき。
  • ノート準備終了。今週は木金となんか違うことできるぞ(健康なら)!

家でも非同期コミュニケーション

|

ゆこっぷ(奥さん)が子と添い寝をするようになって夫婦の会話が不足がちになったので、あるときから文通をしてみることにした。半年くらい前。メディアとしては例のごとく WordPress を使っている(二人ともブログ世代なので。)一つのサイトで運用。

今は休暇中だし、子供の相手をしながらなんとなく会話をする技術も向上してきたので以前ほど頻度はない。それでも少し立て込んだ話をするのには文章でコミュニケーションした方が良いことも結構あり、そういうときは重宝している。(たとえば家電製品のマニュアル PDF  のスクリーンショットをとって張り、昼間にここみて XX しておいて、と頼むなど。あるいは Amazon にある子供おもちゃのリンクを複数張り、レビューサイトへのリンクもはって引用をコピペし、これはどうだろうかと言うなど。)あと仕事の昼休みとか朝早くとかに書いておける非同期性も助けになる。

たぶん普通だとソーシャルメディアでグループ使うとかの方が良いのだろうけれど、ブログはソーシャルメディアにありがちな他人のノイズがないのは良い。文通、という感じがする。あとから見返す楽しみがあるのもよい。あとチャットはチャットで使っている。でも情報量に応じてメディアを使い分けるほうが良い気がする。

MN #42 - Firecracker Reading, continued.

04:45.

昨日の夜もちょっとだけ読んだ。さっさと wrap up せねば。

MN #41 - Podcast Prep Reading, Firecracker

04:53.

Firecracker のコードを読む、前にまずは周辺ドキュメントだな。

  • ビルドは Docker の中でやってくれるので自分で Rust を入れる必要なし、なのはいいが、この Dockefile rustup をバリっと読んでるだけなのでまったくツールチェインのバージョンとか再現性がない。Hermetic Build の時代は過ぎ、荒々しい時代であることよ。そして rustup は shell script かと思いきや Rust で書いてあるのだね。

ドキュメント読んでビルドして、ちょっとコード読んだくらいで時間切れ。

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 の人々の成果だし、アプリのレイヤにしても自分はほとんど貢献してないので特に胸を張る感じでもないけれど、それでもなにかクールなことが起こる瞬間を比較的近くで目撃できるのは良いものである。

 

MN #41 Weekly Review

05:50 @SB

今日は Weekly review の日です。Podcast 編集はまた明日。というか podcast 編集とか別に集中力必要ないので朝の元気な時間を使うの勿体無いね。寝る前の 30 分とかでちまちまやる方が良いのではないか。リリースまで時間がかかってしまうが。

 

MN #40 - Podcast Editing

05:16.

編集の日です。

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 は締め切りの力で若干無理しつつ継続できた。結果として他のことはいよいよ何も出来なくなった。
  • ここ一ヶ月くらいの早起き活動は絶望的な時間の無さを救ってくれている。どれだけ継続できるかは未知数。
  • 機械学習との距離は、去年より大きくなってしまったなと思う。

子供

  • 概ね順調に育っており胸をなでおろしている。
  • 歩けるようになり、言葉もしゃべり、人間になったので張り合いがある。
  • プラス去年よりは生活に余裕があるせいもあり、細々した外出が増えた。
  • 変化が速いので自分の準備が後手に回りがちなのが不安。
  • かわいい。

目標達成度

  • 目標を立ててないのでアレだが、たててもきっとゼロだったんじゃないかな。日々の実感から高い期待値を持つのが難しい。クビにならずひどい病気にもならずに生き延びられてよかったね、という気分。

英語

  • 以前は毎年英語学習について何らかの目標をもっていたが、今年はなにもなし。結果として若干退行気味。悲しいがやむなし。

去年。

MN #39 - QEMU

04:53.

KVM の論文を読んだことだし QEMU 動かしてみようかな。

  • KVM/Installation - Community Help Wiki
  • てかインストーラの ISO からスタートかいな・・・。ベースイメージとかないのね。そういえばなかったね。スポイルされてるな。
  • ISO の題材になんとなく Linux Mint でもみてみるが・・・どうでもいい。
  • アイドル時に全然 CPU を使わないのは感心する。メモリも、昔は指定したサイズそのままガバっと確保されてた気がするけどそういう様子もない。まあ VirtualBox を Vagrant 越しに使っていたときもそういう感じだったので当たり前ではあるけれど、自分のデスクトップ仮想化の記憶は 10 年前以上で止まっているので若干の驚きはあるのだった。
  • ただ仮想化デスクトップを使いたいとは思わないね。Vagrant とかああいうのでサーバ的に使うくらいがいい。しかし Vagrant は公式には KVM/QEMU 対応していないのだった。残念。

コマンドラインからお気楽実用 QEMU/KVM 入門みたいな記事ないかな・・・

  • Get started with KVM & Kubernetes これは (Kube はおいとくと) やりたいことに近い気がする。Bridge network  とかそんなのあったねそういえば・・・。
    • BridgeNetworkConnections - Debian Wiki
    • /etc/network/interfaces になんも書いてないんだけどどうすればいいんだろうか。なんか動的な仕組みで見つけてるのだとして、それを bridge するにはどうするの?
    • ギャー適当にさわったらネットワーク繋がらくなった・・・。
    • networking - Wireless bridge on KVM virtual machine - Super User Wifi で頑張るのはなんとなく大変っぽいことを理解した。NAT を使えということかな。それにしてもわかんないけど。

まあ当面 Ops ごっこする気はないのでここらへんで挫折しておこう。VM たくさん起動して手元で分散システムごっこは一度くらいしてみたいなあ。


ただ手元で分散システムごっこをするのに VM/QEMU は良い切り口なのだろうか。Vagrant みたいにベースイメージがあるならいいけど、自分で用意するのかったるいよね。それのみならず、極端にいうと EC2 にあたる VM provisioning のレイヤを自分で再現せねばならず、それはやる気にならない。色々ハードコードしたシェルスクリプトを用意するにしても素人には大仕事すぎる。

もうちょっと上のレイヤのフレームワークとなるとたとえば OpenStack なんだろうけれど、これもまったくやる気にならない。

となると VM はやめて Kubernetes というか Minikube とかで遊ぶのがよいのかな。 とドキュメントを冷やかすと、その感想はだいたいあってるっぽい。そしてなんか KVM 上に provision できると書いてるな。まじで。これを使えばローカルの KVM の上で Kubernetes を動かせるっぽいじゃん。

が KVM を挟まないオプションも用意されており、じっさい別に KVM 挟まなくてよくね?どうせ Docker なんでしょ?というか Minikube が VM を使うのは Mac とか Windows ユーザのために見える。KVM 対応とか誰得。やはり VM は使わず Minikube で遊ぶ、が Linux  ユーザの正しい分散システムごっこなのだろうな。まあ老後の楽しみということで、そのうち。

MN #38 - Podcast Note Writing

05:28. ねぼう...

Podcast 話すことの準備。しかしもう木曜とはギリギリじゃんか。時間のなさよ・・・。

MN #37 - Podcast Paper Reading

05:03. 体調びみょう・・・

引き続き論文読み。

(Audio)books 2018

|

聞いた/読んだ本備忘録

途中で挫折

くじけた本については、1. アメリカ辛い話は去年含め聴き疲れた。精神衛生に悪いのでもうしばらくパス。2. Behavioral economics 周辺も食傷気味。3. 育児系は飽きがち(子育てに飽きたという話じゃないよ)。4. Malcolm Gradwell は podcast を聞いた後だと間延びしてて退屈してしまった。など。CV 系は途中でやめてるけど途中まででもそれなりに得るものはあったかな。

電子書籍仕事をやめたせいか、去年と比べ今年はあんまし本聞いてないね。来年はもうちょっと読んだり聞いたりしたいもんです。ちゃんとした教科書を一冊も読めてないのも無念だけれど、論文読んでると無理。

NM #36 - Podcast Prep

04:44. 昨日は子から風邪をうつされかかっていたので寝た. 早起き、どうしても健康マージンのギリギリを攻めがちなので気をつけないとね。

今日は論文読みです。

朝は論文読んでも全然眠くならなくてすごいな・・・・。それと比べて昼食後は最悪。日々の時間配分を考えた方がいい気がする(と思っていつも何もしないのだが。)たとえば昼食後はおとなしく昼寝しとくのがトータルの生産性にプラスなのでは、など。

職場における自分個人の進行管理

|

締め切りの存在や打ち寄せるバグの波と戦うべく個人レベルのプロジェクト管理的なものを真面目にやる必要性を感じはじめ、どうすべきかと考える。道具に頼りたい性格なので、のっかるツールやアプリの選択に思い悩む時間が長い。

何度か書いているが勤務先にはまともなプロジェクト・タスク管理システムがない。一番近いのは 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 してもいいのではないか。

仕事タスク管理に希望の光が挿した年の瀬。来年も会社員やってくぞ!

Podcast Channels to Settle

Audiobook を増やすのにあわせ podcast も定番を聴くだけにして新しいやつの追求はしなくていいかな。というわけで subscription を整理しようではないか。

以下の奴らは好きなので残しておく:

以下のやつらは全然聞かないしもういいかと unsub:

面白い番組がないかと時折探したりしてきたけれど、Audiobook もあるし耳の予算は使い切ってる。今聴いてるやつだけでもうたくさん。新番組探索はしばらくおやすみ。

追記

まだ多すぎる気がしたので5本くらいに絞った。

Links: Book Lists

読む、というか聴く本のバックログを補充するにはいい季節。

読むものあるね。しかし多すぎ。適当にフィルタリングしつつキューしてみる。

 

Audible に復帰する日が来た気がする。Wishlist につっこむべし。


そういえばなんで Audible やめたんだっけ、と振り返るに

しかし podcast ばかり聞いてるのはどうしても時間の無駄感が拭えないので audiobook に復帰したい所存です。

NM #35 - Weekly Review @SB

05:50 @ Starbucks. この時間にスタバにきて談笑してる中年三人組どういう経緯なのか気になる...

今日はコードは書かず weekly review などをする日です。そして来週から podcast 再開なのでしばらくあんましコード書けないな。

NM #34 - Halide Tutorial Leasson 03 -

05:18. 前日が定例家族会議で遅寝のため.

Lesson 03.

  • 生成されたコードを見る・・・Bazel/AOT 勢なのでこのままだとダメだが、なんか build rule のオプションに指定できた気がするな。
  • halide_library の extra_outputs に "html" を追加すればよい。
  • 同様に codegen_debug_level attribute も指定できる。2 にすると LLVM の bitcode もダンプされる。しかしファイルに書かれるのではなくビルド中にデバッグ出力に出てくる。突然の手抜き・・・。まあ Halide 本体の開発者以外は使わないのだろうな。
  • しょうじき Halide 自体の IR もよくわからん。参考のために gist に貼っておく。produce, parallel, for とかがなにしてるのかわからないとだめだね。

Lesson 04

  • デバッグのやりかた。うーむなんか AOT 方式色々やりにくいな。JIT できないものか・・・。
  • できた。若干 Bazel リテラシーを要求されるね当たり前だけど。そして実際に使うなら JIT も AOT も両方欲しい気がする。プロダクションで JIT しなくても、開発中につつくには JIT の方がラク。というのは JIT しながらつつく前提で色々デバッグ用の関数が用意されてるから。
  • 一方で AOT するにはビルドが複雑になりがちなのでそこに Bazel rule を提供してるのは正しい気がする。
  • しかし Python で触りたい類のコードだよなーこれ。がんばって PIP してくれないもんかなー・・・。

Leasson 05 途中で時間切れ。

 

MN #33 - Halide Tutorial

04:50.

Halide のチュートリアルをやる・・・ために HalideBuffer を png にしたい。

よし絵が出たぞ!もとは HalideBuffer<float> だったのを適当に PNG にしたのを JPEG としてアップロードしてます。

hello-halide

あとはフラグで実行するパイプラインを選べるようにして進めてけばよいでしょう。

  • HalideBuffer は強力。任意の dimension を持てて stride とかもある。NumPy array みたいなもの。そして OpenCV の array よりはクリーン。本気でやるなら自分で画像のクラスを定義するよりは HalideBuffer そのまま使う方が良い気もする。
  • Tutorial 2.
    • やっぱ png 読むのいるわ・・・。
    • libpng 辛い・・・。恐ろしいのは、自分の中に libpng は他の画像ライブラリより若干マシ、というぼんやりした記憶があったことである。やはり昔のプログラミングは不必要に難しかったというか理不尽な部分が多すぎたよ。失業におびえつつも現代まで生き延びてよかったと appreciate せざるをえない。
    • Tutorial2 うごいた。Halide, 自分で for を回すよりラクというわけではないな。速いのだろうけれど。

今日はここまで。

TabCopy

|

Firefox 生活は思わぬ形で早くも終わりを迎えた。すなわち・・・ TabCopy がない!みんなこれなしにどうやってメモやブログを書いてるんだ、というような重要機能なのだよ自分にとっては。

ブックマークレットとかで適当にちょろまかせる気もするが・・・

まあクリップボードにコピーするのは手動でもいいかもだけど、いずれにせよヒマなしにつきまた今度ということで。

MN #32 - Halide Continues

04:42. 昨日は不穏に疲れてたので一回休み。子も風邪気味につき用心せねば。

今日は Halide + Bazel なんとかビルドしたい。というか今日やってダメなら諦めかな・・・。

$bazel query "somepath(//halide @halide//:arm_64_android_halide_library_runtime)"
...
//halide:halide
//halide:hello
@halide//:halide_library_runtime
@halide//:arm_64_android/halide_library_runtime.o
@halide//:arm_64_android_halide_library_runtime

なぜ・・・

  • _define_halide_library_runtime() が正しく target を select できてないげ。
  • query ではなく cquery を使わないと select のある dependency graph を正しく調査できないのか・・・。
  • 結論としては --android_cpu=armeabi とすればよい。よくみると halide.bzl にもそんなコメント書いてるね。しかしこのコメントは答えを知っていないと理解できないべ。
  • Bazel は Gradle と同じで print() デバッグできるのが救いといえば救いになる、気もする。

さてそんじゃ Tutorial でもやってみるべとおもったが・・・

  • サンプルは JIT を使っているのか。そして Bazel のビルドルールは AOT (Generator)を前提にしている。むー・・・。JIT でも動かしてみたいけど、せっかくビルドできたのでまずは generator で話をすすめるかなー。
  • 絵を出したり、写真に対してフィルタあてたりしたいが、どうするかな。
    • PNG を読むコードを書く?それとも自分の雑 RAW を使う?まあ雑RAWでいいかな。
    • チュートリアルを書いては実行してくために若干コードの整理が必要・・・。

じかんぎれ。

android_library

|

via Android Rules - Bazel

慣れ以外で Bazel を使うそれなりにマシな理由としては native code  が Android Studio 推奨の方法よりラクそう、というのがある。一方でその他のツーリングとかは標準 Android の方が良い気もするので、NDK まわりだけ Bazel を使えないかと考えてみる。

で android_library. 期待どおり AAR を出してくれる。つまり .so を含めることができる。Bazel で C++ と周辺の Java を書いて AAR にして、そっから先は好きにする、という方法はあるかもなあ。

そのうちためそう。

Revisiting Simplenote (and Failed Again)

ふと見ると Simplenote for Linux にキーボードショートカットがついている。ようやく。そして WordPress アカウントでログインできるようになった。いいかも。

・・・と試すが、きびしいなあ。

  • Markdown を使わないとリンクを clickable にできないが、マークダウンをデフォルトで有効にするあるいはショートカット一つで有効する方法がない。Android 版は URL を autolink してくれた気がするのだが autolink もない。HTML の UI ハイパーリンクの話で Mac や Android に負けちゃうの・・・。
  • タグをつけるショートカットがない。
  • 時々画面が white out する(バグ)。

特に URL がクリックできないってメモツールとしてはだいぶ致命的だとおもうんだけど、じぶんがウェブべったりすぎるのかなあ。別にクリッピングとかを求めてるわけではないのだよ。URL を書いたらそれを開く方法がほしいだけだよ?

まあ遅々とではあるがよくなっており degrade はしてない感じなので、引き続き年一回くらい見守りたい所存。

Evernote やっつけたい勢にとって Electron は大変良いプラットフォームだと思うので、誰か頑張ってやっつけた上でついでに linux 版もリリースしてちょうだいね。


なお最近は Standard Notes も定期ウォッチ対象にしている。やはり markdown が first citizen な世代なほうが良いなあと。しかしこいつらもキーボード・ショートカットがないのだった。おまえら desktop/laptop をなんだと思ってるんだ・・・。

NM #31 - Halide

04:42

今日は Halide を動かしてみたい。チェックアウトしてツリーの中でサンプルをビルドするのは前にやったので、今日は自分のプロジェクトに組み込む、という視点でやってみる。Android でやる・・・のは大変そうだからまずは Linux で。

  • prebuild release を使おうとおもったが、なんかコンパイラのバージョンに繊細そうな雰囲気・・・。
  • というわけで master もってくる。ビルドは(驚くべきことに)割とかんたん。apt-get install llvm-dev, clang, zlib1g-dev したのち make -j distrib すればよい。この超複雑なプロジェクトでこのビルドのラクさは評価されてしかるべきじゃん。
  • なぜか bazel が ARM 用の何かをビルドしようとしてリンクに失敗している。わけわからん。公式 Bazel スクリプトを使っているのだが・・・。
  • generator (host binary) は正しくできている。こいつが ARM のバイナリを出力してしまっているようだが、なんで?
  • bazel query "deps(//hello/halide)" とやるとなぜか ARM target が依存関係に含まれてしまっているなあ。この Bazel スクリプトはデフォルトでは全アーキテクチャ用にライブラリを生成しようとするが、そんな環境は手元にないのでダメという話か。なんとかして target を絞り込む必要がある。

じかんぎれ。また明日。

NM #30 - Histogram Equalization

五時くらいに起きた。朝はインターネット接続が落ちていたので夜書いている。

そんでまあ Histogram Equalization 動いた気がするよ。なお 10bit くらいの画像を 8 bit にmap するのも equalization の過程でやっている。

equalized_kitten

なんかノイジーだね。昭和の写真みたいというか・・・。

equalized_kitchen

しかし「ノイズがある、なんか色が褪せてる」以上に言語化できないな。写真リテラシーなさすぎ。

なんかヘンな原因を考えてみる。

  • 元画像が暗すぎる = Exposure がおかしい。しかし viewfinder ではちゃんと見えていたはずなので RAW だけおかしいというのはちょっと考えづらい。
  • どこかで情報というかビットが欠落している. Demosaic 後が既に最大で 9 bit くらいしか使ってなかった。ほんとはもっと使ってるとか?
  • ガンマ補正してない。してないですが、いちおう png にするときには gamma = 1 をしていしているのでよろしくやってくれそうなもんだけどなー。でもその過程で精度が落ちるのは事実だから、equalization の一環としてやるべきなのかな。
  • Lens shading を補正してない。ので画面の端の暗い部分に暗いビットを使われてしまって、明るい部分が白く飛んでしまう。これはありそうな気がする。
  • 単純にもっと Lightroom 的、人工的な補正をしたほうが良い (彩度を上げるとか。) んー・・・。そういう主観の「チューニング」でなんかする必要があるのはだいぶ先だと思うんだけど。
  • Histogram Equalization してはいけない。すべての輝度が一様に存在するという仮定にはなんの根拠もないわけで。そんな気もする。一方でじゃあどうすんの、と言われても困る感はある。とりあえずクリップしない程度にゲインを上げる、くらいからスタートかなあ。

こうした問題を追求したい気もするが、一方で hello work の backlog も溜まっている。一通り色々さわるのを優先し、現像プログラミングはここで一旦終了。#30 ということはカメラから現像までたどり着くのにおおむね一ヶ月。まったく速くないが、これが現実というものでしょう。

MN #29 - Weekly Review @SB

06:15 於 Starbucks. ゆこっぷ(奥さん)につきあって夜ふかし。週末やむなし。

今日はコードは書かず weekly review をしたりなんだりです。

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 追悼にはならないのだった。あれはオープンソースでもないし。

今の所つかっていてすごく困ることもないのでしばらく試します。

MN #28 - Histogram Equalization

05:03 朝起きてやるゲームを探していたら寝坊。やはりゲームはよくない。自分の自制心バジェットと釣り合ってない。

ヒストグラム、最初は Python かなにかで見ようとおもったがふつうに GIMP で見れたのでそれでよしとする。CVAA にのってた histogram equalization でもやってみようかな。

  • libpng の圧縮を切ったら 7 秒だった処理が 0.7 秒に。
  • 今は Image<uint8_t, 3> みたいな雑なクラスを定義しているが、この RGB  を三つの mono color images に見せる View みたいなクラスが欲しくなるなあ。ピクセル単位の offset と stride を指定できればよいが、柔軟にするとそれはそれで面倒。おとなしくガバっと Image<uint8_t, 1> 3つに変換するようなコードを書くべし。このへん全部やってる numpy は偉いね。
  • Bazel で c++14 を使うには

といったところで時間切れ。

MN #27 - Demosaicing

04:47. 4 時に目覚ましなってんだけどなー・・・。せめてあと 15分 くらい早くできないものか。ついインターネットで管巻いてしまうのがよくない。しかしスマホ等の明るい画面による覚醒効果は得たい。5 分くらい遊べるゲームとかしようかな・・・(泥沼の予感)

Demosaic すんぞ。

うごいた。ハローにゃんこ!

demosaic_naive

  • 現物は PNG ですがサイズの都合で JPEG でアップロードしてます。
  • 動いた、といってみたものの暗くてよくわからん。クッションが赤いのはあってる。なんでこんなに暗いんだろうね?元々暗かったのか、ガンマ補正してないせいなのか、もっと初歩的なバグか。
  • 端っこのピクセルは処理をさぼって (0, 0, 0) のままだけど、この解像度だとわかんないね。しばらく放置でよしとする。
  • PNG の保存がいよいよ遅くなり 7 secくらい vs. Bayer そのままのモノクロ RGB では 2.5 sec. libpng がしょぼいのが自分のコードが何かを間違えているのか。

明るくしたいが、その前にもうちょっと G や B の入った画像を試してみるべきだな。なお単体テストなどは一行も書いておりません。

demosaic_kitchen

というわけでキッチン。包丁立てと水筒が赤、まな板とインスタントコーヒーが緑、 Oreo が青、というかんじで概ね合ってる気がする。寄って見てもあからさまにバグっぽいパターンとかはなし。しかし暗い。そしてなんか緑っぽくない?いちおうオフィシャルカメラでとった正解画像もあげときます。

kitchen_gca

自分のバージョンは問答無用で画像を上下反転していたが、ほんとは gyro で向きを検出のうえ正しい方向にしないとだめ、ということがわかりますな・・・。(上の画像はもともとは portrait size で、90度回転した。)

burst merge するまでもなく色々やることがあるけれども、次はどうしようかなあ。histogram を眺めるなどが必要なのかもしんない。あとはラズパイRAW現像の blog でも読み直すか。


ところで自分の demosaicing のアルゴリズムはあり得る限り一番素朴なバージョンを使っている。ちょっと探して出てきた 15 年前のサーベイ論文によると、この方法だとモアレみたいな aliasing が出ちゃうからもうちょっとマシな方法を使うほうが良いといっている。実際ラスパイ RAW 現像のひとはそういうアルゴリズムを実装している。がよくわかんないね。

 

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 的グラフでがんばるモデルもあるらしい。こういうのは学ぶ価値ありなのかもしらん。

C++ programming with Visual Studio Code

|

via C++ programming with Visual Studio Code

C++ mode の出来の良さに感銘を受けたのでちょっと真面目にショートカットなどを覚えてみる試み。さすがちゃんと定義されている。しかし Android Studio と混ざって若干つらい。べつにどちらがわるいせいでもないのだが。

定義にジャンプする機能で STL などシステムのヘッダまで潜っていけるのは素晴らしい。C++ に限れば全部のコードが読めるということで、これコードリーディングとかするとき素晴らしいのではなかろうか。

ただ C++ 環境の質の良さは若干とびぬけている気がする。Python とか Java とか Go とか Rust とか C++ じゃないけど大規模コードになりがちな子たちはどのくらいちゃんと動くのかなあ。

給与改定の季節

|

下がらなかったぞ!!やーよかったよかった。これで来年も家賃とデイケア代が払えるわ。

しかし年々基本給の割合が低くなってて心臓によくない。景気が悪くなったとき勤務先はどうするだろうか。理論上は基本給以外のところを減らすのが答えの一つなわけだが、現実には不採算部門レイオフの方がふつうに見える。ボーナスとは何なのか・・・。

Link: Microsoft Edge: Making the web better through more open source collaboration - Windows Experience BlogWindows Experience Blog

|

via Microsoft Edge: Making the web better through more open source collaboration - Windows Experience BlogWindows Experience Blog

Blink がフォークして、WebKit/Blink が the Web Renderer (というと Mozilla の人に怒られそうだが) でなくなってしまった失望はブラウザから足を洗うきっかけになったわけだけれども、その後エンドユーザ製品としての Chrome の嫌われぶりとは裏腹に Electron だの Brave だのなんだのの Chromium 派製品は割と幅を利かせ続け、ついに IE/Edge も(何らかの形で) Chromium ベースになる日が来た。

これは Chrome/Chromium がんばったという話ではもちろんあるわけだけれども、それ以上に Microsoft の Windows というか desktop のやる気のなさの表れとも言える。だから方針を巡って喧嘩になったりはしないだろうね。

最近 desktop(laptop) を新調した身としては複雑な気分。Apple の Mac のやる気の無さの結果 Macbook が全体的にぱっとしなくなってしまった一方、一時期の Macbook のがんばりでバーを引き上げられた Windows laptop 業界は (Windows を受け入れるなら) 割といい製品が増え、Apple ファンはしばしば悔しがっていた。そうした高評価 Windows laptop の仲間には Microsoft の Surface ファミリも含まれている。でも Windows 本体がやる気ないんじゃハードウェアがんばってもしゃあねえな、という話にならないのかね。Windows PC メーカーは後に引けないから頑張るしかないのかもしらんが。PC オワコン気味は仕方ないけど滅びたわでもないんだから各位もうちょっとがんばってくれないかなあ。

一方で、力が抜けて色々クロスプラットフォームフレンドリになった Windows は、自分のように歴史的経緯で Windows に拒否反応がでてしまう勢がもう PC でどうでもいいわ、力を抜いてと戻る先にもなりうる。5 年後, Windows 11 は Linux ベース、とかわけわかんないこといいだしても不思議ではないな。Windows 全然好きじゃないけど、すくなくともドライバを自分でビルドしなくてもきちんと動くからね。


インターネットをみてるとウェブ標準の行方を気にしている人が一定数いる。個人的にはウェブ標準にかぎらずこの手のコードを伴わない標準というものはオープンソースによってだいぶ役割が小さくなったと思っており、標準とか言ってないでコードの側で透明性を保つ方がいいんじゃないの、と思っている。たとえば新しいプログラミング言語で標準化がどうとか言ってるのほとんどないよね。昔は ANSI とか ISO とかで標準化していたのに。

まあ単一私企業が実質的な主導権を持ってるオープンソースプロジェクトに透明性を期待できないという主張はわかるので、去年書いたみたいに foundation にするのが良いと思っていたけれど、さすがに the ship has sailed でしょう。やるなら WebKit だったろうから。Turning points というのは事後的にしかわからないものだね。

MN #26 - Demosaicing Prep.

04:47. 寝る前に調べものなどをして無駄な夜ふかし...すべてを投げ打って寝るには規律が必要.

猫の Bayer image をとりあえずそのまま png にする。それが動いたら素朴に demosaic を実装したい所存。


  • Gflags のドキュメント微妙に間違ってる。気が向いたら昼間レポートする https://gflags.github.io/gflags/
  • VSCode, gflags のマクロが作る変数名まで補完できる。すごい。余暇に限ると CLion に金払う必要なし。
  • Raw を何もせず無理やり 8bit RGB にするコードを書いたが、最適化コンパイルしても 2.5 秒くらいかかるね。ファイル読み書きもあるんでループだけともいえず内訳が知りたいが、素の Linux/C++ だとさっと速度を道具がないなあ。
  • absl/time で雑にシングルスレッド用 trace を実装してみる。PNG 書くのが大半でループは数十ms. ですよね・・・。それにしたって遅すぎる気がするけれど。
  • とかやってたら時間切れ。明日こそ demosaic すんぞ。

MN #25 - Cleanup

04:45.

仕事がはかどってない問題について考える時間を取りたいが、コードも書きたい。むー。ちょっとコードかく。

とりあえず少しコードを整理してチェックイン。

  • C++ まあまあ忘れているが、それ以上に画像処理のコードというものをどう構成したものかアイデアがない。既存のコードベースに参加するときは他人のデザインに従うだけなので、こういうデザインできないで困ることは少ないが、イチから自分でかくと困るね。こうしてたくさんのゴミが生まれるのである、が、仕方ない。とはいえたとえば OpenCV のコードを見るなりして定石を学ぶべきなのかもね。今のところ深入りする意欲がないので雑なままになっている。
  • VSCode, 生成された設定ファイルをみるに、include path は workspace 以下にあるものをぜんぶつっこむ、という方針らしい。それなら bazel がつくる奇妙なディレクトリも読めるし、コード生成とかもいけそうね。この雑さはよい。
  • Precision 5530, 画面がでかい + HDPI なのはさすがによいな。

 

KVM Papers and Links

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 が灯る。

悲しい話だと思いませんか。

 

Link: My New Book: Digital Minimalism - Study Hacks - Cal Newport

|

via My New Book: Digital Minimalism - Study Hacks - Cal Newport

Cal Newport, またつまらぬ本を書いてしまったようだな。控えめに言ってライフスタイル・グルなのではないか・・・。なまぬるいファンとして、またやる気がない時でも読んであげることにしよう。

NM #24 Libpng

04:44. なかなか 21 時に寝られない日々。

今日こそ C++ で PNG 書くぞ。libpng, 10 年以上前に使ったことあるはずだけど 1 ミリも覚えてないね。

clang-format を使いたい・・・が我慢。

8bit depth では書けるが 16 bit depth での保存がうまくいかない・・・。たぶん自分が間違っているが、世の中のビューアを信じ切ることもできないマイナーフォマットであるところの 16 bit depth png. そして libpng はドキュメントが厳しいうえに世の中のウェブも頼りにならん。

表示するときは 8 ビットに保存し、それ以外の中間データは生の配列のまま突き進むかなあ。きびしい。

vscode は C++ ファイル保存時にのエラーをハイライトしたり関数の引数を表示したりしてくれてるんだけど、どうなってんの? libpng なんて bazel 管理下の奇妙なディレクトリに保存されてるから普通に考えたら見つけられるはずないんだけど、不思議。

Precision 5530 Setup Log

Configurations:

  • Slowest CPU (to skip NVIDIA GPU)
  • HDPI Display. (Note that touch doesn't work at all.)
  • Ubuntu 16.04 pre-installed.

OS Setup:

Code related setup:

 

NM #23 - Laptop Setup

04:49.

今日は新しく買った laptop のセットアップをします。昨晩半分くらいおわらせといたのであとはコードを古い方から移動するくらいかな。そしたら Bazel + C++ Hello に戻りたい。


新しく買った laptop は Dell の Precision 5530 というモデル。NVIDIA GPU のついてない構成を選んだおかげで Ubuntu 18.04 もあっさりインストールできた。しかし当然トラブルもあり、具体的には Wifi の通信速度が異常に遅い。色々調べてたどり着いたこの askubuntu の解答で治った。2018 年にもなって自分でカーネルドライバビルドしろと言われるとは思わなかったよ・・・てかこのすごいアクティブにコミットがある git repo の master をビルドしていれるの? 狂気としかいいようがないが、自分は私用の Linux lapotp を新規購入セットアップするという狂気のさなかにいるという事実を受け入れると期待値の範囲だった。返品一歩手前。昨日が日曜なおかげでサポートが休業しててよかった。

なおこの laptop は Ubuntu 16.04 プリインストールなのだけれども、その状態でも Wifi は遅かった。つまり Dell はドライバの壊れた Wifi をくっつけて売っている。Sucks. しかし Dell って Suck だからみんな Apple 製品買うんでしょ、といわれるとおっしゃるとおりなのだった。

Askubuntu にコメントしようと思うも reputation 不足。まあいい。各人苦労してください。


もぞもぞしているうちに時間切れ。C++ は明日からかな。

  • OpenJDK の代わりに Corretto どうかな、と思ったが RPM しかなかった。残念。まあ Ubuntu についてくるやつ使っときますわ・・・。なお Android Studio にはいつの間にか Java がついてくるようになった。でかいわけだわ。
  • Bazel, 依存関係なにもせずビルドするだけでバイナリができるのは C++ 的には新鮮。
  • この PC, なんかビルドするとすぐファンが鳴るね。実際なんか熱いし。XPS13 は静かな子だったと思い知る。低温火傷がやや心配。
  • Chrome と Android Studio と IntelliJ を同時に起動しても問題なし。16GB RAM にしてよかった・・・。いっそ 32GB でもいいかなとおもってたけど、今の所大丈夫そう。足りなくなってから考えます。

Roadtrip

|

自分は車の運転があまり好きでない。田舎暮らしなのに損しているなと思う。それでも California は road trip の国だけあってそこそこ眺めの良い道もあり、最近は娘の昼寝ドライブなどで無駄に運転をしている。昼寝に限らず週末の車外出が増えた。

家族でドライブするのはまあまあ楽しい。娘がいると家ではあまりゆこっぷ(奥さん)と話す時間がとれないけれど、ドライブ中は子供が寝ていればそれなりに話せるし。

ただ子供はヒマだろうな。少し前、NYTimes に「シリコンバレーの親は子供に画面を与えない」という記事があった。その記事に登場する draconian な親ですら、例外として長時間のドライブでは子供に iPad を渡すと話している。ドライブ中の子供のヒマさを象徴するエピソードといえよう。

自分の両親もよくドライブしていた。この間電話をして確認したところ、自分が記憶していたドライブ先は軽井沢の先にあるジャムの店だったらしい。Google Map によると当時の居宅から車で片道三時間弱。子供の頃、大人はなぜこのどうでもいい遠出をするのかと思っていた。(ジャムとかそのへんでも買えるじゃん?)今思えば当人たちは楽しかったのだろうな。当時は当然 iPad などなく超絶ヒマだった記憶しかないが、大人のたまの息抜きに付き合うのも子供の仕事のうち、ということにしておこう。悪いな娘よ。


と言うはなしをゆこっぷとして、我々は子供の頃どうやってドライブ中のヒマを耐え忍んでいたのだろうと話す。すると地図を見ていたという。たしかに地図は暇つぶしになったな。しかし・・・このへんの道は地図で暇をつぶすには若干まっすぐすぎるなあ。

MN #22 - Podcast Planning @SB

06:12. 定例家族会議のため就寝遅れ。そしてだいぶ久しぶりにスタバ。前来た時まだ夏時間だったような・・・。

今日は来季 Podcast なにやるかについて考える日などです。

 

NM #21 - Pondering

6:00 ゆこっぷ(奥さん)風邪につき2日ほど娘の添い寝を引き取って、朝何もできず。今日はまあ、寝坊です。添い寝わりと眠りが浅くなるとおもうんだけど、と聞くと、慣れると寝られるとのこと。ほんまかいな。一時期娘が母親でないと駄目だと insist したためゆこっぷ専属になってたけど、もう大丈夫であることが判明してのでもうちょっと引き取った方がいい気もする。しかし朝何もできないのみならず仕事中眠くなってしまう。添い寝力が必要。

スタバに行こうと思うもまた雨。まあ今日は朝飯の準備くらいしたほうがよかろうからいいとして、明日も雨だったら車かなあ。

まとまった時間もないし、コードは保留で考え事の日とする。