2019年3月にやったこと

色々忙しかったのであんまり何もしてない。中国語の勉強を始めた。 英語、中国語、アルゴリズムをメインにやっていきたい。

Release It! 本番用ソフトウェア製品の設計とデプロイのために

9章まで見た。「タイムアウトさせよう」「ネットワークを介した接続は失敗する可能性が常にあるからな」みたいな局所局所の話は実感できるんだけど、ブレーカーがどうとか、こういう変なアクセスがいっぱいきたからメモリが爆発してどうこう、みたいな話が、わかるけど実感はできてない気がする、という状態である。 多分私はこういう話を実際に体験しないと実感できないことが多いんだけど、体験するためのハードルがでかいなーみたいなことを考えている。 読み終わったら現状のアーキテクチャに適用できるとしたらこれ、みたいなことを考えられたら良さそう。

英語

English Bellを40レッスン受講した。道のりが長い。 再来月はTOEICを受ける。大学の後輩とTOEICを競うことになった。

中国語

https://www.amazon.co.jp/dp/4863922191をひたすら読んでるが、まだ始めたばかりで挨拶が覚えられないレベル。6月に中国語検定準4級を受ける予定でいる。辞書ひくのが面倒だなーと思っている。あと、調べた単語をメモできる辞書のアプリが欲しい。

書いた記事

qiita.com

でかいPRをレビューするときに、ファイルごとにレビュー済みマークをつけるためのChrome拡張を作った。ここ最近はずっとこれを使ってレビューしているが結構便利だと思う。

これからやること

  • 読書会プラットフォーム作る
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
    • 読む
  • ElectronかWebアプリ(サーバなし)でNature RemoのPC用クライアントを作る
    • なぜか俺は音声やスマホよりもPCで操作したい時がたまにある
      • あとはSPAとJSの学習用に
        • 読書会プラットフォームの後
  • Goならわかるシステムプログラミング
  • 英語
  • 中国語
  • Release It!
  • ここ最近ほとんど業務でプログラミングをしなくなって、調整とかレビューとかばっかしてるがかなり雰囲気でやってるので、マネジメント系の本を読もうとしている
    • なにがいいのかよくわからん
  • Effective Go - The Go Programming Language
  • パタヘネ

なぜ私はソースコードレビューをするのか

この文章は一般論としてなぜソースコードレビューをするのか、ではなく、私が個人として、コードレビューをしているモチベーションはなんなのかを整理するために書いた。

最近ずっとソースコードレビューをしているが苦痛になってきた。ので、ソースコードレビューをやめるか、ソースコードレビューを苦痛でなくするか、苦痛なまま続けるか、いずれかを選ぶ必要がある。 やめる案に関しては、一旦考えないことにする。レビューがビジネスに対して与えるメリットが、レビューのコストを上回るかどうかは正直よくわからない。 これがわかるとやめる選択をとれたり、レビューに対する苦痛が少し減ったりする気がするが。 今の所はどうしても、メリットがあるからレビューをする、というよりも開発に対する美意識としてやるべきだと感じているからやる、という感覚でレビューをしている気がする。

どのようなコードのレビューをしているかというと、複数の似たようなサービスを、統一されたインターフェースで呼び出すためのプロキシのようなサービスを開発していて、そのサービスが統合可能なサービスを追加するためのコードをレビューをしている。 「設計から外れたコードが書かれていないか」「何か複雑で特殊なことをする必要があるときに、良い感じの構造になっていそうか」「統合先のサービスの仕様に乗っ取っているか」「いわゆるプログラミングとして、あまりよろしくないコードになっていないか(変数名が変だとか)」「テストが網羅的か」といった観点でのレビューをしている。

なぜレビューをしているか。私の場合は主に「1. 人はミスするので、それを減らしたい」、「2. 視点を増やしたい」、「3. 読んでいて辛い気持ちになるコードを増やしたくない」の3点である。 教育としてのレビューを行なっている感覚はあまりない。以前の環境では教育が8割くらいの気持ちだったので、ここの感覚はコードを書く人の能力に寄ると思っている。 特に1と2が重要だと思っている。1は単純にヒューマンエラーをダブルチェックで減らそうぜ、みたいな話で、2はいろんな視点でコードを見たいという話だ。 いろんな視点で、というのはなんと言えばいいのか、いろんな経験から踏まえて、というのがいいのだろうか。

アプリケーションが正しく動かない原因は色々あるが、単純なミスだけではなく経験からくる知見がないと防げないものがあると思っている。 例えば複数のトランザクションが複数のリソースをロックする場合に、リソースをロックする順序がトランザクションごとに異なるとデッドロックする可能性がある、みたいな話だ。 そういった観点は他にも色々あると思っていて、賢い人なら論理的思考力と想像力で防げるのかもしれないが、私には無理だ。 そして、私は当然全ての知見を持っていないし、他の人も大抵の場合そうだと思っているので、視点を増やすのが重要だと思っている。

バグを完全になくすことはできないが、個人的には時間をかけてでもレビューをすべきだと思えるくらいにはバグを減らせるのではないかと思っている。 計測したことはない。どう計測すれば良いのだろうか。何かデータがあれば見たいが、コードを書く人のレベル感でこのあたりの感覚はかなり変わってくると思っており、計測って可能なんだろうかとも思っている。 やるべきかどうか、についてはアプリケーションの用途にもよると思っていて、バグってたら都度都度直せばいいや、みたいなものであればそれはそれで良いと思っている。 ただし、現在開発しているアプリケーションをそういった類のものだと思っていないので、レビューを続けている。

3については自己満足かもしれない。バグの少ないプログラムを書くためには、コードの綺麗さよりもテストにこだわった方が効率が良いと思っているからだ。 しかし、謎解きのようなコードを読んでいるとすごくモチベーションが落ちて効率が落ちるので、個人的には力を入れている。 ただしあくまで私の感情の話で、読みづらいコードによってモチベーションが落ちるのが一般的でないのであれば、ここに関してはそれほどこだわらなくても良いのではないかとも思っている。

2019年2月にやったこと

花粉が出てきてつらい。

Release It! 本番用ソフトウェア製品の設計とデプロイのために

4章の後半まで見た。ここまでは基本的に事例の紹介でここから対策という感じ。基本的にリソースを分割して障害の伝搬を防ぐ話と、タイムアウト設定して完全にロックしたままにならないようにしようぜみたいな話が多いっぽい。

読書会プラットフォームを作り始めた

読書会プラットフォームを作り始めた。 本検索して読書会登録するとdiscordのURL吐き出されるみたいな感じのやつ。

フロントがReact.jsでバックエンドがGAE+Golangで作っている。2人で作ってて私はバックエンドを作っている。 まだほぼ何もない。認証の仕組みを作っているところ。GAEもFirebaseもめちゃくちゃサクサク動かせてすごい。

3月中にリリースできたら嬉しい。

基礎から学ぶ Vue.js

ざらざらっと全部読んでなんとなく挙動はわかった気がする。webpackとかvue-routerとかはよくわかってない。

lorcaでtreviewのUI作った

inabajunmr.hatenablog.com

Vue.jsがなんとなくわかったので画面を作ってみた。lorcaもなんとなく触れるようになったっぽい。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

ちょろちょろ読み始めた。いくつかソートを実装したあたりでまだ本番感はあんまりない。今月中に読み終わりたい。

情熱プログラマー ソフトウェア開発者の幸せな生き方

トイレとかでちまちま読んでる。

英語

12レッスン受講した。だれているが当面これを終わらせる方向で頑張ることにした。

書いた記事

qiita.com

qiita.com

qiita.com

これからやること

  • 読書会プラットフォーム作る
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
    • 読む
  • ElectronかWebアプリ(サーバなし)でNature RemoのPC用クライアントを作る
    • なぜか俺は音声やスマホよりもPCで操作したい時がたまにある
      • あとはSPAとJSの学習用に
        • 読書会プラットフォームの後
  • Goならわかるシステムプログラミング
  • 英語
  • Release It!
  • ここ最近ほとんど業務でプログラミングをしなくなって、調整とかレビューとかばっかしてるがかなり雰囲気でやってるので、マネジメント系の本を読もうとしている
    • なにがいいのかよくわからん
  • Effective Go - The Go Programming Language

GitHubのPRの差分を見るときレビュー済み/未レビューをファイルごとにTODOリスト化したい

でかいPRがあるととりあえず差分を上から見てくんだけどこの上から見てく、ってのは本当は間違ってると思ってて多分見てく上で正しい順番みたいなものがある

複数レイヤーにまたがったPRだったら依存される側から見てくべき、とか

実装とFW的な奴がごっちゃに飛んできたらFWから見てくべき、とか

ただしそれとは別に、全部の差分を見たい、というのがある

それで、上から見てくと"全部みる"、という意味では効率が良い

というか見たいとこから見てくと全部見たかどうかわからなくなる

ので、見たい差分を選んで、見終わったら見終わったマークをつけるような奴が欲しいなと思った

イメージ的には

  1. 差分のページに行くとデフォルトで全部の差分が閉じた状態で表示
  2. 開いてレビュー
  3. 完了したら見たよマークをつけるとなんか背景とかがわかりやすい色になる

そういう感じのやつ

とりあえず全ファイルを閉じたかったのでそれはこんなん

Array.from( document.getElementsByClassName("file") ).forEach(e => {e.classList.remove("open"); e.classList.remove("Details--on")});

3/2 追記 作った

chrome.google.com

qiita.com

treviewにlorcaでGUIをつけてみた

前作った「GitHubのtrendingって面白いけど毎日同じのでがちだから今日の新着的なのだけみたいなー」と思って作ったやつに画面をつけてみました。

GitHub Trendingに毎日同じリポジトリがいるのを見たくないので俺がその日初めて見るリポジトリだけを見るためのツールを作った - チョキチョキかにさん

インストールとかはGitHubからです。とりあえずmacosの64ビットのバイナリしかないです。

github.com

画面はこんなんです。余白が多いのでなんとかしたい。

f:id:inabajunmr:20190211003059p:plain

技術とかの話

Lorca

Lorcaを使いました。 github.com

めちゃくちゃ雑にいうとElectronみたいな感じで画面作れてさらにJSの関数にGoの関数をバインディングできるやつです。 ただし

Unlike Electron it doesn't bundle Chrome into the app package, but rather reuses the one that is already installed.

です。 HTMLだけ書けばあとは雰囲気でCLIGUIにできる気がします。 データの受け渡しはJS->Goは勝手にJSONをオブジェクトにマッピングしてくれて、逆はJSONで受け渡しができます。

JSからGoはこんな感じでGoからJSはこんな感じでした。

静的コンテンツ込みのビルドがよくわかんなかったのでゴニョゴニョしたらできたのでそっちはQiitaにあげました。

qiita.com

ロスコンパイルはよくわかんないというか手元で起動できなくてどっちにしろテストできないので一旦やめました。workspaceとかを使えばいいという説もあります。

Vue.js

使ったけどなんか使った範囲ではわかったけど、って感じでなんとも言えない感じでした。ただまあ使った範囲では便利っぽい感じでした。 とりあえずAPIでとってくるデータとformの入力値を定義して前者はビューにバインドして後者はwatchでGoの関数を呼び出してました。それくらいしかしてないです。

今ふと「開発用のVue.jsでそのままバイナリをリリースしてしまった・・・」ってのを思い出したんですが全部HTMLに直接CDNで埋め込んでるのでビルドがめんどくさいですね。 この辺のフローとかはちゃんと学ばないといけない気がしました。

オンライン読書会のプラットフォーム

  • 本検索できる
  • 本の中に読書会リソースを登録できる
    • 読書会の中に参加者の概念がある
    • 読書会からDiscordか何かに飛べる
  • 本に感想とか進捗とか書ける

だいたいそんなイメージ

画面一覧

  • 技術書一覧
  • 技術書詳細
    • 開催中の読書会一覧がみれる
    • 読書会登録できる
    • 本の感想とか登録できる?
  • 読書会登録
    • タイトルとか詳細とか登録できる
    • スケジュール登録できる
      • 毎週金曜日19:00-20:00とか
    • 登録するとdiscordのリンクが払いだされる
  • 読書会詳細
    • discordのリンクとかタイトルとか詳細とか表示される
    • 参加するリンクから参加できる
    • 参加するリンクなしでいきなりdiscordでもいいけど参加人数とかは見れるようにしたい
  • あとはまあ普通のユーザ登録とか
    • GitHubログインだけでいいと思っている

2019年1月にやったこと

年があけた。

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

読み終わった。この本で出てくる範囲では、AWSとの違いは

  • アカウントの下にプロジェクトの概念があること
    • やーめた、で全部消せて便利
  • IAMじゃなくてプロジェクトに対してAPIを有効化するというやり方なこと(多分他にもある気がするが)
  • Webからコンソールでだいたいゴニョゴニョできる
    • AWS Systems Managerと同じようなものなのかはよくわかっていない
    • Cloud Shellがどこで動いてて何に触れるのか、みたいなことが理解できてない
  • DynamoDBっぽいやつに親子の概念がある

くらいかなあと思った。サクサク進むしとりあえずデプロイするというところまでではまとまって良かった。

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

最近JavaScriptをよく書きなぐるのだが(主にChrome拡張で)あまりにも雰囲気で書いているのでいい加減体系的に学ぼうと思って読んだ。 面白かった。プログラミングの勉強って面白いなって久しぶりに思った。最近仕事でプログラミングをしていない。

第1級関数についてようやく理解した気がする。なぜGolangチュートリアルをやったのに理解していないのか。

後半のDOMいじりはリファレンス感があったので結構ざっくり読んだ。

しかし私の書くChrome拡張はだいたいどこかのWebページの構造に依存しているのであまり真面目に作る気持ちになれないという問題はある。本当はE2Eテストを自動化したい。HeadlessなChromeはextensionをサポートしていないとのことなので困っている。まあコンテンツで完結するやつはHeadlessなChromeスクリプトだけ叩けばいいような気もするけど。

Release It! 本番用ソフトウェア製品の設計とデプロイのために

この本を読まないといけないらしいのでせっかくなので社内で読書会をやってみた。いわゆる技術の本はわかるまで読めばわかるがこの手の本は人と読んだ方が楽しい気がするな。 まだ2章までなのでここからが本番な感じ。読書会て参加したことなかったのに企画をしてしまった。 会社ならいいけど読書会って通うのめんどくさくて参加できない。Webで読書会企画するプラットフォームとかあったらいいのかな。一緒にこの本やっていこうぜ!みたいな。本に対するメーリングリストの集合体でもいいんだけども。

情熱プログラマー ソフトウェア開発者の幸せな生き方

最近よく俺はなんなんだという気持ちになっているので読んでいる。半分くらい読んだ。モチベーションが下がっている時に読むと良い。楽しくて厳しい方向に進むぞ。

英語

Englishbellを43レッスン受講した。18時間くらい。ステージ7まで行ったが正直飽きてきてしまった。雑談がしたいが雑談をするならDMMに変えたい。 あと5ステージだがおそらく1年弱かかる気がする。どうしようか。

あとはEnglishbell用にしょうもないChrome拡張を作った。

inabajunmr.hatenablog.com

あとはTEDを見る活動を始めた。なんだかんだ英語力は上がっているようで初見で5〜8割くらいは理解できる気がするので普通に喋っている内容をある程度楽しめるので良さそう。

書いた記事

re:invent2018がらみの諸々を書いていた。書いていましたよ。 あとはQiitaにどうでもいいようなことをいくつか。

これからやること

  • 既存のChrome拡張を書き直す
    • せっかくJavaScript学んだので
      • でもこれはやらないかもしれん・・・
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
    • いい加減この手のプログラミングが弱いという気持ちで暮らすのは嫌なのでいい加減なんとかする
      • ポチった
  • 基礎から学ぶ Vue.js
    • 学ぼう
  • ElectronかWebアプリ(サーバなし)でNature RemoのPC用クライアントを作る
    • なぜか俺は音声やスマホよりもPCで操作したい時がたまにある
      • あとはSPAとJSの学習用に
  • lorcaでtreviewのアプリを作る
    • これは気が向いたら
  • Goならわかるシステムプログラミング
  • 英語
  • Release It!
  • ここ最近ほとんど業務でプログラミングをしなくなって、調整とかレビューとかばっかしてるがかなり雰囲気でやってるので、マネジメント系の本を読もうとしている
    • なにがいいのかよくわからん

ここ最近いろいろ考えていたがおれはまだエンジニアリングをやりたいのでエンジニアリングをやるぞという意思を明確にした。楽しくて厳しい環境を探す。