舎路(シアトル)日記

シアトルで働く日本人プログラマの日記です。

Q1 をふりかえる

Mar 21, 2018

定期的ブログ更新

わりと読まれて良かった一方で、このブログの定期更新は途絶えがちで、いまひとつ説得力にかけるものがあった。日本語で書きたいことは貯まっているので、しばらくは隔週で更新する予定でいる。

可視化

英語で書くものは可視化関係に限定していた。

買ったもの

OnePlus 5T は気に入っている。OnePlus 6 は Oppo R15 と同様に iPhone X 風の横長のノッチがつくらしく、それだったら 5T のほうが好みだなと思う。

勉強

Udacity の機械学習コースは無事に完走できて良かった。

引き続き iKnow では英語を、Duolingo では会社のチームに話せる人の多い中国語を勉強している。どちらもあまり時間はさけていない。

Q2 にむけて

自分のソフトウェアを作るというのを長らくできていなくて、悲しい話をすると出来ていた時期のほうが例外的だったのかもしれないけれど、結果として

  • 大企業でチームでソフトウェアを開発する、というのが自分にとっての「ソフトウェア開発」になりつつある
  • 自分の出来ることをオープンにみせる場所がない
  • 分散投資ができておらず、仕事の結果の、自分に対する影響力が強すぎる

いろいろよくないなと思えてきたので、なんとか自分のソフトウェア (アプリケーションでもライブラリでも) を書く時間を取るようにしたい。

先週の月曜日 (2/13) に会社で携帯電話を無くしてしまった。

その日のうちに会社の Lost & Found に報告しつつも、家に固定電話がなく、あらゆる場所に携帯電話の番号を書いている身としては、手元に電話がないのは大分こころもとない。結局、火曜日には代わりの電話として以前から気になっていた OnePlus 5T を注文していた。もし見つかったら返品すればいい。

もちろん、水曜日には電話は見つかって、金曜日には手元に2台の電話が並んでいた。

いままで使っていた Moto X は、アメリカにきたばかりのとき、2014年の10月末に買ったものだ。そろそろ寿命を迎えつつあって、OS は Android 6.0 のままだし、セキュリティアップデートは来ないし、バッテリーは突然 0% になってしまう。

それと比べると、2017年11月に発売されたばかりの OnePlus 5T は流石に良い。画面は広く、背面には指紋センサーがあり、ポートは USB-C で、一方でヘッドフォンジャックはまだ残っている。

結局 Moto X は引退させて、OnePlus 5T を使うことにした。

フォントを OnePlus Slate から Roboto にする

Settings > Font

しばらくデフォルトのフォントの OnePlus Slate を使っていたんだけど、どうやらこのフォントは CJK 統合漢字について日本語のグリフがないようで「戻」(U+623B) とかが正しく表示されない。Roboto に変更すると日本語のグリフも正しく表示できるようになる。どのグリフが選ばれるかは Settings > Languages & Input > Languages をみているみたい。

グループ SMS のために Android Messages をインストールする

No Group Text - OnePlus Forums

I am having the same problem with my OP5. I do not see the advanced settings for the OP5 messaging app. The only mms setting options are Auto-retrieve and Roaming auto retrieve. Please help.

フォーラムでも報告されているように、デフォルトの SMS クライアントはグループ SMS (複数人にあてた SMS) をグループとしてまとめて表示できない。代わりに Android Messages を SMS クライアントとしてインストールすると、きちんとグループとして表示されるようになる。

背面の指紋センサーのスワイプで通知を出し入れする

Settings > Gestures > Swipe fingerprint for notifications

ちょっと変な機能だけど、片手で持ったまま、親指を上に持っていかないで通知を出し入れ出来るのは便利。

去年にはじめた Udacity の Intro to Machine Learning をようやく終わらせた。

Udacity は Coursera のような MOOC の一種で、今は有料の Nanodegree と呼ばれるプログラムに注力しているように見えるけれど、無料のコースも色々とある。

Intro to Machine Learning のことは Machine Learning in a Year で知った。Coursera の Machine Learning に挫折したという著者が

If I could go back in time, I’d choose Udacity’s Intro to Machine Learning, as it’s easier and uses Python and Scikit Learn. This way, we would have gotten our hands dirty as soon as possible, gained confidence, and had more fun.

と Udacity のコースを紹介しているのをみて、Coursera のコースに数回挑戦しては完走せずに挫折していた私でも、これならなんとかなるかもと思って挑戦してみた。

良いところ

コース全体は Python をプログラミング言語に、scikit-learn をライブラリに、色々な機械学習のアルゴリズム (ただし深層学習以前のもの) を使ってみる、というところに重きがおかれている。

理解度は、動画の途中に挟まるクイズと、その後の「ミニプロジェクト」と呼ばれる、実際に Python でコードを書いてみるところで、ある程度わかっていないと先に進めないようになっている。とはいえどちらも難易度はそこまで高くない。

Udacity 全体の傾向なのか、このコースだけなのか、動画は数分程度の短いものが多いので、私は昼食をひっそり早めに食べて、会社で黙々とやったりもしていた。

講師が二人いて、途中でバトンタッチしながら進むのも、ちょっとしたアクセントになって良い感じだった。

良くないところ

コースは数年前に作られたものなので、Python は 2.x 系だし、Jupyter Notebook も登場しない。

また、ファイナルプロジェクトについては、動画の中では提出すれば採点されそうな雰囲気を出しているけど、フォーラムによると提出する場所はもうなく、採点はされないらしい。ここらへんは、最初にふれた Nanodegree だとチューターがつくのかもしれない。

scikit-learn も、最新バージョン向けにちょっと書き換えが必要だったりするけれど、ここはミニプロジェクトの直前に説明があったりするので、そこまでは困らなかった。

ながらく「ブログなんて、書きたいときに好きなだけ書けばいい」と思っていたんだけど、去年の12月に「週に3回、月曜日と水曜日と金曜日に書く」というのを決めたら結構よかったので、今年もしばらくは「英語のブログは、毎週の月曜日に更新する」というスケジュールで書こうと思っている。日本語は隔週にしようと思っていたけど、先週に忘れてしまったので、3週間ごとになりそう。

定期的ブログ更新の良さの、半分は時間割を決めることの良さだと思う。higepon さんの 勉強方法を勉強して分かった僕に足りなかった3つのこと (2008) にある通り、

勉強をコンスタントに長期的に続けるならば時間割は大変有用。

時間割を作り実践してみて分かったが「次に何をやるべきか」に迷う時間は振り返ればとてももったいなかった。

私はまだ道半ばで徹底できてはいないけれど「次に何をやるべきか」は事前に決めてしまったほうがいい。

ふと時間が空いたときに「今日ブログを書くか、書かないか、書くとしたら何について書くか」なんて考え出して、その日のうちに公開までたどり着くのは難しい。その難易度は「ふと空いた時間」が短くなっていくにつれて上がっていく。

残りの半分は、ソフトウェアの定期リリースの良さに似ている。

定期リリース

ソフトウェアの定期的なリリースは、最近よくみかけるようになったアイデアで、Rust の RFC 0507 (2014) では

This RFC describes changes to the Rust release process, primarily the division of Rust’s time-based releases into ‘release channels’, following the ‘release train’ model used by e.g. Firefox and Chrome; as well as ‘feature staging’, which enables the continued development of unstable language features and libraries APIs while providing strong stability guarantees in stable releases.

「リリーストレイン」モデルとも説明されている1。電車のたとえは Chrome の Release Early, Release Often (2010) でも使われている。

We basically wanted to operate more like trains leaving Grand Central Station (regularly scheduled and always on time), and less like taxis leaving the Bronx (ad hoc and unpredictable).

従来の「書きたいことがあったらブログを書く」というスタイルは、これまた従来の「リリースに足りる変更があったらリリースする」というスタイルに似ている。

この主観的な判断は、結果としてブログの更新ないしソフトウェアのリリースを遅らせがちだ。それなりに価値のある細々とした情報 (or 細々としたバグの修正) もあるのに、著者独自の視点や良い導入/まとめ (or 目玉となる新機能の追加) が足りないといって、ずるずると公開 (or リリース) を先延ばしにしてしまう。

ブログをしばらく書いていると、こうやってお蔵入りになっている草稿の一つや二つは、誰でも管理画面やローカルのフォルダに残っているんじゃないだろうか。

中堅/中年プログラマこそ定期更新がおすすめ

定期的なブログの更新は、自分のなかでブログに求める基準が上がりつつも、一方でブログに費やす時間は減りつつある、中堅/中年プログラマにこそおすすめだと思っている。突然に徹夜してみたり、休日を丸々潰したりできる人なら、こういう細かいことを考える必要はない。

上がる基準と、減る時間にどう対処するのか、という観点でまとめると「基準を下げながら、時間を効率的に使う」という方法だとも言える。ただし、基準の部分は更新頻度を減らすことで (例えば、毎週のかわりに隔週としてみることで) 調整可能だとも思う。

「今年こそブログをもう少し、できれば月に一回以上は書きたい」という代わりに「今年は毎月第三水曜日にブログを書こう」と決めるの、どうでしょうか?


  1. ただし、単純に「リリーストレイン」とだけ言った場合には、複数のチーム間のリリースの同期に重きが置かれた用例もみられるので、ここでは「定期リリース」という語を主に使っている。 [return]

去年の末に娘が生まれ、今年の頭に社内でチームを移り、忙しい時期を重ねてしまったなと思ったら、さらに三月に父が突然に亡くなってしまい、慌ただしい一年だった。

グリーンカードがとれたのはよかった。法律上は転職できる身分になり、入国の手続きも半自動化されたし、その際に面接に応じる人もこころなしか優しくなった気がする。

来年にむけて

「会社に歩いて通勤し、車を持たず、たまに日本人の友達に会う」という今の生活は、ほとんど完成してしまい、子供ができたのも守りの傾向に拍車をかけている。来年はもう少しリスクをとって、アメリカらしい生活をこころがけたい。

ブログや Twitter もしばらくは英語で書いてみるつもり。

インターネットに何かを書くというのは、世界のどこかにいる誰かに届くかもしれない、という期待が少しだけある行為で、それは Facebook と LINE の時代の「インターネット」ではないし1、読者の姿がはっきりしていくにつれ忘れられてしまうことなんだけど、私はそういう、会ったこともない人に向けて、言葉を尽くして書かれたような文章が好きだったりする。

逆に、Firefox を火狐と書いてみるのとか、サイバーエージェントを「渋谷の緑色の会社」と書いてみるのとか、そういうコミュニティ内の言い換えには、想定された読者に対する「あなたもこれはわかりますよね」みたいな目配せと仲間意識の強要を感じてしまい、わかっていても目をそらしたくなる。われながら心がせまい。

何かを英語で書くのは「世界のどこかにいる誰かに届くかもしれない」という期待の延長線上にある、と自分が書いたソフトウェアのダウンロードページをせっせと英語で書いていた昔には思っていたはずで、そういう初心は忘れずにいたい。


  1. インフラでしかないインターネットに何らかの価値判断の傾向を見いだすのは、もう理解されないことなのかもしれない。「インターネットらしさ」は「電気らしさ」くらい無意味な言葉になるんだろうか。 [return]