generated at
2020年を振り返る

相変わらず適当なペースでCosenseを作っていた
色々大変な年であったが、株式会社Helpfeelの労働環境としては個人的には変化なかった
完全リモートワークでずっとやっていたので
久しぶりに個人の能力的な成長があった年だった

あまり外出しなかった
COVID-19で外に出れないので
電車に乗ったのも、春と秋の健康診断の2回くらい
飲食も観光も完全に密を避けれた
部屋に露天風呂があって2泊3日で12回ぐらい入って最高だった
外出しなかったぶん食べ物は色々変化があったかも



仕事
書ける成果のうち主な物は下のような感じ
他にも色々やってはいる
プロトタイプ作って自分で自分のプルリクをレビューして叩いてcloseしたり
bug修正やライブラリアップデートなど

2月ごろ
4月にユーザーが増える事を予想していた
準備はしていた
それだけでは足りなかった

4月頭、Covid-19で急に1.5倍ぐらいユーザーが増えた
急激にリクエストが増えると、これまで問題として現れていなかった不具合が表面に出てくる
サービスが30分ほど不調になった事が3日間、合計5回ほどあった
CPU使用率やIOPSなどのmetricsを見てscrapboxのサーバー側の事を考えれるようになった
超久しぶりにプレッシャーで胃が痛くなって気持ち悪くなった
なんとか乗り越えた
クソデカJSONとの戦い
titlesの取得を複数回に分割する with daiiz
サーバーでクソデカJSON作るとNode.jsのパフォーマンスが落ちる
pagingして解決
WebWorkerからUIスレッドへのpostMessageをchunk分割する
WebWorkerからUIスレッドにpostMessageでクソデカJSON送ると、UIスレッドがフリーズする
chunkingして解決
Auto project backupを1ページずつJSON化してwritable streamに出力する
数百MBのクソデカJSON生成するとnodeがJavaScript heap out of memoryで落ちる
人が多いprojectがそれなりの期間運用されて、ページが蓄積されバックアップも巨大になった
streamでJSONをパーツ毎に動的に作って流して解決した
JSONという効率の悪いフォーマットを選んだ事を少し後悔もした
末尾まで受信しないとparseできないフォーマットよ
この頃に得たインフラ・パフォーマンスチューニングの感覚と作法は、自分が成長した感があったshokai
詳解システムパフォーマンスで読んだ事柄も役に立った
実際やってみないと身には付かない
mLabからMongoDB Atlasへの移行や、Elasticsearchなどにも役に立った


逆にCovid-19の影響で、いくつかの機能への要望が激減した
人々がインターネットの無い場所に行く頻度が減ったのだろう


2020/8ごろ、GCSファイルアップロードを実装した
signed URLを使ったファイルアップロード
cloud functionsでサムネイル作ったり
ずっとほしかった機能を、やったことない新アーキテクチャで実装して、ちゃんと動いてよかったshokai
サーバー側のコードを書かずにスマホ等のクライアント側だけでアプリの実装を完結させる為の機能だと思うけど、こういうの普通にwebアプリにも有用なので便利ですね
リクエストが一切app serverを通らないのでサーバー負荷が全く無い
クライアントがリクエスト→Node.js app serverでsigned URLを発行、リダイレクト
こうするとServiceWorkerでファイルをcache storageに入れる事もできる
なかなか効率よい実装ができた


mLabからMongoDB Atlasに移行した
5月か6月ごろ、急に「サービス終わるから」と言われてヒエーと思いつつ、まあなんとかなるだろと楽観
実際そんな大変ではなかったが
どうしても数分のダウンタイムは発生するので念のため夜中にやった
昼間にサーバーを見守りつつ夜中にインフラ変更してたら若干体調悪くなった
移行した
Scrapbox本体
Scrapbox セミオンプレ版全部
staging環境
Helpfeelも
サーバー構成を細かく設定できて面白い
MongoDB AtlasはHeroku addonがない
mLabはHeroku addonで使ってた
これは実際Atlasを使ってみて理由がよくわかった
DBaaSは、パフォーマンス・メトリクス情報を利用者に提示する事で教育する
利用者はCPU・メモリ・サーバー構成を自由に変更し、試行錯誤する
アプリケーション毎に最適なDB構成は違うから、運用ログに基づいて設計にフィードバックするべき
heroku addonは料金プランが1次元だから、そういう細かいチューニングができない


複数の人が並列してページ作る、リンクする、ページ分割する、ページのマージ、の粗がなくなってきた
色々やった
Update LinksとMerge pagesのボタン2つが1つに統合された
他のページから新たにリンクされたら、関連ページリストをリロードする
他のページからリンクされたら関連ページリストが更新される
これまでは編集したページ側しか更新されていなかった
タイトル変更したページ内のリンク記法も更新する
Socket.IO再接続後の挙動
titles API再読み込みをwindowがactiveになるまで待つ等
などなど
merge pageで合流できる様になった
これまで
存在しないページをslackなどから共有されて複数人が同時に書き始めると
タイトルに _2 がついて別ページに書く事になってしまっていた
合流できるようになった


絶妙なアイディアで整合性を取った
実装は普通
実装よりも仕様を練るのをがんばった
新機能と既存の仕様の辻褄をなんとかうまく合わせた


全文検索Elasticsearchを導入しはじめている with balar
まだ試験的な段階
クリスマスに実装した
今の所調子よく動いてる
一旦実装を終えて、どこをどう直していくか整理してだいたい見えたところ


来年はオンラインでdrinkupなどやりたい