ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

2021/08/22 ~ 2021/08/28のふりかえり

暑い。暑すぎるぜ。

仕事

  • 体調が悪い日が続いて月曜はほぼ休んだ。お陰様で回復。
    • ISUCON疲れかもしれない。
  • 問いのデザインの3章に出てくるプロセス目標をちゃんと立てておくのは大事だなとあとで気づいた。
    • これはプロジェクトが終了したあとに「このプロジェクトで他チームとのコミュニケーションが活発になって連携しやすくなった」というような副産物を前もって定義しておこうというもの。
      • いま進めているプロジェクトでは「チーム全体/チーム内で決められてなかったこと」をFix出来たり(Fixしよう進めたり)とプロジェクトの目標達成までの道のりで良い副産物が出ている。定義しておくとさらに出来ることが増えたりすると思っている。
  • 1on1をしたときに「maaaatoさんと話していると前向きな気持ちになってきますね」と嬉しいフィードバックをもらえた。なにか特別なことを言ったつもりはないけど、いまチームで取り組んでいることなどを話したのがよかったのかもしれない。
    • 割と自分はネガティブに取らえてしまって気分が落ちてしまうことが多いなと思っていたのだけど、ストレングス・ファインダーを去年の年末にしたときに「ポジティブ思考」となっていて「え、そうなのか」と驚いたことがある。
    • 最初はネガティブに捉えるのだけどあとから「でもこれってこういうことでいいことだよな」とポジティブな面を見つけて気持ちを盛り返すことがあったなと振り返りが出来たことがある。
    • 物事にはネガティブ、ポジティブがあって両方をバランス良く見る目が必要だと思っているのでこの傾向は自分にとっていい事だと思っている。
  • Google Apps ScriptからTypetalkに投稿するBotを作った。
    • チームをサポートするという意味を込めて「Nanny」命名した。
  • EC2のルートデバイスが枯渇するのコワイ。。。
    • そもそもログインもできない状態になってしまうので拡張ができなくなる。
      • sshは出来たがセッションマネージャーが実行不可能になってしまった。

プライベート

  • ウマ娘 3rdイベント Day1をAbemaで観た。めちゃくちゃ良かった。Day2も楽しみ。
    • マルチアングルにしたけど結局メインアングルしか使わなかった。
    • メインアングルではVRの演出も入っていて迫力があってとても盛り上がった。
    • 会場で見れた人が羨ましい。。。
    • ゲームの最新情報やその他の情報も解禁されて今後が楽しみになった。
  • 結婚記念と付き合った記念をした。
    • 結婚9年目に突入。
    • 付き合ってから14年目に突入。
  • お菓子メーカーのシャトレーゼが気になって近くの店舗を調べて行ってきた。
    • お菓子うまい。
    • 山梨が本社ということもあり、ワインを樽出ししていたので白を飲んでみた。軽い印象で飲みやすい分類。次は赤を飲んでみたい。
  • いつもお世話になっている理容師の方が異動になって別店舗に行くことになった。ちょっと行くには遠くなってしまうので悩む。。。
    • いつも行っているウルフマンバーバー。雰囲気が落ち着いていてとても気に入っている。

See you next time:)

2021/08/15 ~ 08/21の振り返りとISUCON11の感想を添えて

今週は ICL 手術後の一ヶ月検診があったり ISUCON11 に参戦したりした。ISUCON の話にも少しだけ触れておこうと思う。

仕事

  • 普段仕事でペアプロ(ペア作業)をすることが多いのだけどVS Code の Live Shareを試すなどした
    • 1年前くらいに使ったときは挙動が不安定でちょっと利用するのは難しいなとおもったけど今回はサクサク雨後したし、3人でシェアしても問題なかった
  • オペレーション作業をする時にメトリクスを見ながら「あ、この時間帯は避けておこう」と判断するのだけど、今回もやっててよかったなと改めて思った
    • 特にユーザーに影響がないと思っていた作業も実はサーバーリソースを以外と食っているケースがあるので慎重に
  • スクラムセレモニーがだいぶ慣れてきた感じで設けた時間を大きく超過することがなかった
  • 個人開発部が出来たので雑にChromeエクステンション作ってますとチャットに書いたところChromeエクステンションマスターがいたので1on1をしてみていろいろと話しを聞けた++
    • ホットリロードにweb-extがいいよと教えてもらったので試してみる

プライベート

  • 作りかけてまったく動作しなかったChromeエクステンションが動いた
    • github.com
    • エクステンションとして公開しみようと思う(需要はないだろうけど)
  • ICLの一ヶ月後検診が無事終了
    • まだハログレア現象が気になるけど半年もすればだいぶよくなるとのこと
  • 東急プラザ銀座で食べた牛タン利休の「濃い卵」が人生で一番美味しかった。ほんとうに味が濃くて食べた時に醤油に漬けてたのかと思った。それぐらい濃かった。もちろん牛タンも美味しかった
  • 16時間ファスティングを卒業した。朝を抜くと基礎代謝分のカロリーを下回ることが増えてしまったので朝も食べるようにした。ただ夜は20時ぐらいに済ますようにしている。体調はいい感じ
  • ISUCON11に参戦してきた。後述する

ISUCON11の感想

最後に出場したのがISUCON6 or 7だった記憶で約5年ぶりに出場。
毎回3人で出場して主にインフラ面を担当していたのだけど今回はソロで出場してみた(チーム名はpokke)理由はコロナの影響で直接会うことが難しそうだったのとソロでインフラ以外にも手を出してみようと思ったのが理由。オンラインでつないでやることも出来たと思ったけど、ちょっと大変そうに思えたため。
今回はソロでインフラ以外にアプリにも手を出せたのは良かった。ただ、やっぱソロはきつい。当然ながら担当範囲が広くなるのとアプリの改修に没頭してサーバーのリソース状況の把握など全く出来ずという始末。あとスコアの仕様がちゃんと理解する余裕もなかった。。。
結果はもちろん予選敗退でまた来年参戦したい。実力をシンプルに試されるのが本当に面白い。

twitter.com

続きを読む

2021/08/08 ~ 08/14の振り返り

今日も今日とて1週間の振り返りを。一週間経つのは早い。

仕事

  • 一つ目標にしていたところが無事クリアできた
  • PagerDutyのページを毎朝チェックしているんだけどリポートページをちょっと便利にするスクリプトを書いた
    • chromeのエクステンションにする
  • お盆ということもありいろんなミーティングがなかった
  • InteliJに不慣れすぎて疲れた
  • 問いのデザイン勉強会で小さなワークショップを体験した
    • 問い大事

プライベート

  • 読了した
    • お酒は簡単に手に入る「薬物」
    • 依存症の場合は回復するときにいろんな問題が見えてきて余計絶望しやすい
    • シラフの時間が増えたことで筋トレする時間、コードを書く時間が増えた
    • とはいってもお酒は適量であれば時間を楽しく過ごすためのものと思っているので、「特別」な時には飲むことにしている
  • 寝間着を新調しようと思い、ユニクロのエアリズムを試してみたところ、着心地も良いし値段もリーズナブルで大変気に入っている
  • 仕事の欄に書いたchromeエクステンションを書き始めた
    • github.com
    • chromeエクステンションの仕様が全然わかってなくてメッセージパッシングでハマる
    • 全然動いてないので修正する
  • シンエヴァがアマプラで公開されたので2回観た
    • ウルトラマンに出てくるワードが散りばめられていることがわかった
    • 庵野監督の密着も観た
  • 筋トレして2日後くらいに疲労が来るのでグルタミンを買った
  • カロリー制限ダイエットを試しているけどちょっと停滞してきたのでカルニチンを摂ってみる(まだ到着してない)
  • 枯節の鰹節で出汁をとってみたけど荒節とあまりかわらない感じがした
  • Nature Remo2とGoogle Homeを連携させて寝室においたので音声でエアコンのコントロールができるようになった
    • あとなぜか未開封Google Homeが2つ残っている... See you next time:)

強いキャッシュ弱いキャッシュについて改めて調べてみた Cache-Control,Expires,Last-Modified,ETag

キャッシュについて調べることがあったのでそのメモ。強い弱いがあるのを知らなかったりCache-ControlExpiresの関係など理解ができた。やはりキャッシュは複雑だなというのが感想。

キャッシュとは?

なにかしら処理をした結果を保持しておき、その結果が必要になった場合に保持していた内容をレスポンスすることで不必要な処理を省くことができ、結果的にレスポンスを早くすることができる。
例えばDBから値を取得してレスポンスする場合、SQLが時間のかかるものであった場合に結果をキャッシュ(保持しておく)ことで二回目からはSQLの実行を減らすことができる。
一方、古い結果を保持し続けてしまうと新しい結果を取得できない状態になってしまうので、キャッシュする期間やキャッシュする内容は慎重に設計する必要がある。

キャッシュの種類

クエリキャッシュ

RDMS側でクエリをキャシュする。ただしMySQL8.0からは廃止され、PostgreSQLはpgpool-Ⅱを利用して実現するため、実際は使われるケースが少ない。

The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0.

https://dev.mysql.com/doc/refman/5.7/en/query-cache.html

ブラウザキャッシュ(ローカルキャッシュ)

CSS/JavaScript/画像などをブラウザでキャッシュしておき、サーバーから取得する必要がなく高速になる。

経路上のキャッシュ

Proxy/CDNを用いる、配信経路上に配置されたキャッシュ。
キャッシュでオリジンへの負荷を減らすことやクライアントに近い場所へ配置することで経路を最適化したり、大きな配信帯域を確保したりするために導入する

プロキシキャッシュ(ゲートウェイのキャッシュ)

オリジンでのキャッシュ。主にProxyを利用してキャッシュする。
Varnish,nginx,Apache Traffic Serverなど

キャッシュで利用するヘッダー

  • Expire(強いキャッシュ)
  • Cache-Control(強いキャッシュ)
  • Last-Modified(弱いキャッシュ)
  • ETag(弱いキャッシュ)

Expires

レスポンスヘッダーとしてExpiresヘッダーに有効期限を指定することで有効期限が切れるまでは自動的にブラウザにキャッシュされたリソースを参照する。
期限が切れるまではブラウザは一度リソースを取得するとマシン内部にキャッシュするため、一度有効になるとHTTPリクエストをサーバーに送信しなくなる。
Expires: Wed, 04 Aug 2021 13:50:37 GMT

クライアントとサーバー間で時間設定が異なると、うまく設定されないケースがある。

またExpires: -1と設定することでアクセスの1秒前の時間を設定することができるため、Cache-Control: no-cacheと組み合わせることでCache-Controleが有効じゃないブラウザに関しても都度オリジンにリソースの検証を行うことができる。

Cache-Control

Cache-Controlを有効にすることでブラウザにキャッシュが存在する場合にはそのリソースへのリクエストが送信されないようにすることも可能(都度キャッシュが新鮮か確認させることもできる)

  • max-age
    • max-age=600と指定した場合、取得されてから600秒間はブラウザのマシン内にキャッシュされる。

ちなみにCache-ControlExpireが両方設定されている場合はCache-Controlが優先される。

  • shared(public)
    • 複数のクライアントから参照可能な性質を持つ。
    • 1:nでキャッシュする。本来キャッシュできないものでもキャッシュ可能。

  • private
    • 特定のクライアントのみが参照可能な性質を持つ。
    • 1:1でキャッシュする。本来キャッシュできないものでもキャッシュ可能。
    • ユーザー情報を含んだAPIなど、他者から参照されることを防ぐべき情報も含まれるので慎重に扱う

※クライアントに対してキャッシュが1:1を表す図

  • no-cache
    • オリジンサーバーに更新がないか都度確認をし、更新がなければ304ステータスになり、ローカルキャッシュを参照する。更新があればそのデータを取得する。
    • オリジンサーバーに問い合わせをしているのでリクエスト自体は発生している。
  • must-revalidate
    • no-cacheと似た挙動を持つが、キャッシュが有効期限内であればキャッシュの検証を行わないため、リクエストが発生しない。
    • 有効期限が切れている場合はキャッシュの検証を行うためリクエストを発行する。

Last-Modified

レスポンスヘッダーにLast-Modified Wed, 18 Oct 2017 08:00:40 GMTを設定することで次回ブラウザがリクエストを送信するときにはリクエストヘッダーにIf-Modified-Since Wed, 18 Oct 2017 08:00:40 GMTを付与する。
If-Modified-Sinceの日時とリソースの最終変更日を比較し、更新されてなければ304ステータスを返却し、不要なデータの送信を抑えることができる。このIf-Modified-Sinceを含んだGETリクエストを条件付きGETリクエストと呼ぶ。
304 Not Modifiedはレスポンスボディが含まれていない小さなHTTPレスポンス。

ETag

Last-Modifiedと似た挙動をするがリソースの内容が更新されているか判断をする。リソースのinode番号と更新日時とサイズからタグを生成(Apacheの例ではFileETag INode MTime Sizeを仕様した場合)し、レスポンスヘッダーのETagに設定する。
例)ETag: "30-448b28913d700"
次に同じリソースに対してリクエストを送信するときにリクエストヘッダーにIf-None-Match:"30-448b28913d700"を設定し、サーバー側はリソースの現在のETagの値と比較し、同じであればリソースは変わってないので304ステータスを返す。一致しない場合は対応するキャッシュがブラウザ側にないので通常のレスポンスを返す。

キャッシュの陳腐化(stale)が発生した場合の図

陳腐化したリソースへのリクエストをキャッシュが受け取るとIf-None-Matchを付加してリクエストを転送する。
https://developer.mozilla.org/ja/docs/Web/HTTP/Caching

キャッシュさせたくない場合

no-storeを指定すること

ブラウザのキャッシュサイズについて

  • 永続的
    • 長期間に渡って保存されるため、保存する場合はユーザーに警告ポップアップが表示される。ユーザーがデータを削除する。
  • 一時的

    • 長期間に渡って保存する必要がないデータ。ストレージの容量制限に達するとLRUポリシーに沿って削除される。
  • Chrome

    • キャッシュサイズ
      • Chrome allows the browser to use up to 80% of total disk space. An origin can use up to 60% of the total disk space.

      • https://web.dev/storage-for-the-web/#how-much
      • -disk-cache-size
        • 画像やCSSなどのキャッシュサイズ
      • -media-cache-seize
        • HTML5の動画や音楽のキャッシュサイズ
    • データ削除ポリシー
  • Firefox
  • Safari
    • キャッシュサイズ
    • データ削除ポリシー
      • Safari previously did not evict data, but recently implemented a new seven-day cap on all writable storage (see below).

      • Starting in iOS and iPadOS 13.4 and Safari 13.1 on macOS, there is a seven-day cap on all script writable storage, including IndexedDB, service worker registration, and the Cache API. This means Safari will evict all content from the cache after seven days of Safari use if the user does not interact with the site. This eviction policy does not apply to installed PWAs that have been added to the home screen. See Full Third-Party Cookie Blocking and More on the WebKit blog for complete details

      • 書込み可能なすべてのストレージに7日間の上限が設定された模様

参考書籍

See you next time:)

2021/08/01 ~ 08/07の振り返り

先週に続いて1週間の出来事を振り返ってみようと思う。前回は7月中の話も入っていたのでボリュームがあったが今回はかなりシュッとまとまった。

仕事

  • 毎朝メトリクスをチームで見ていて「ここ改善できそうだね」とチームで話をして実際に改善ができた
    • ちょこっと値を修正するだけで効果が出たのでかけるコストに比べて得られるメリットが大きく「ハハ・・・もうけたね」状態
    • 他にも似たような箇所があるのでやっていく
  • 個人開発熱が高くなっているのだけど同僚たちもやっていくということで個人開発部ができた
    • とりあえず自分で使えるアプリを作るつもり
  • 他のチームメンバーに変わって各種ミーティングに参加したのだけどミーティングが多くまた連チャンでなかなかハード(月で交代)
  • SecurityGroupのアウトバウンドでいろいろ制限すると「あのポートも必要だったわ」ということが多々出てきて毎回修正している
  • 朝会でアイスブレイクの話をするようにしている(昨日こんなことがあったとかこれをやろうとしているとか)
  • 新入社員とのすごろくトークに参加して「こんなバックグラウンドがあったのか!」とびっくりした
  • Ubie社は最近熱いよねーという会話をした
  • 同僚が会社ブログを公開した

プライベート

  • 16時間ファスティングをするようになって朝すぐに起きられるようになった(最近はだいたい5時6時ぐらいに起きている)
  • いろんな化粧水、乳液を試してローコストでいいものを使おうと思いバルクオムを解約した
    • バルクオム自体はいい商品だと思うし気に入ってはいたけどサブスクなので早めに解約
  • ISUCON11のスポンサー特典が届いた
  • ISUCON11に向けての素振りが一切できてないのでピンチ
  • 同僚がお酒を控えてから調子がいいとのことなのでお酒を控えるためにこの本を読んでいる
  • システム設計入門というリポジトリを教えてもらった。有名なサービスのアーキテクチャが載っている。

2021/07/26 ~ 07/31の振り返り

一週間の出来事を振り返ってみようという話があり、せっかくなら雑にブログにメモとして書いておくと振り返りの振り返りができていいかなと思ったのでやってみようと思う。(僕以外の方が見ても役に立つことはないと思う)

仕事

  • 7月から新しいチームにジョインしたこともあっていろいろとキャッチアップしたり、チームでこれは大事にしたいねなどチームビルディングをメンバーと一緒にした(これは7月頭の話)
  • terraformを書いているがworkspaceを使った書き方が難しくて手こずっている
  • ICL(眼内コンタクトレンズ)の手術明けから仕事復帰(ICLについては別でブログを書く予定。アウトラインは書いている)
  • 新しい技術の話を他チームに共有するときってちょっと緊張するよねとか予想外の反応されると(ネガより)気まずいよねという話をしてちょうどこにふぁーさんのブログが参考になりそうという話をした
  • 加えてfukabori.fmのこにふぁーさんのEMの話も参考になることが多く、特に褒めるポイントをメモっておくのは自身もやってみようと思う
  • 問いのデザインを読み始めた(会社の人で読もうという話になったので参加)
    • モチベーションとしてはミーティングなどで場が停滞したときに良い質問をして流れを変えたい。そのスキルを身に着けたいのが狙い

プライベート

  • ICLでQoLが上がった
  • 妻と付き合って13年11ヶ月記念、結婚して8年11ヶ月記念をした
  • ほしいスニーカーがたくさんあってつらい(ダンクSB58とダンクSB High Atlas)
  • 分散投資インデックスを始めようと思ってPayPay銀行と楽天証券に口座を作った
  • ネットワークスペシャリストを受けようとぼんやり思っている(先に応用技術者試験を受けようと思ったが、過去問を見たところ実務とは関係ない所も把握する必要があるので受けるのをやめた)
  • 冷やしおでんづくりにハマっている(出汁を取るのも面白くていろんな種類の鰹節や昆布で試していきたい)
  • 洗顔後に化粧水と乳液を朝夜にやるようにしている(バルクオムを使っている)
  • audibleでSTARTUP 優れた起業家は何を考え、どう行動したかを聴いて個人開発やっていき欲が上がった
  • 猫がクーラーの上に上がるようになってしまって困った
  • 16時間ファスティングを始めた
  • シャドーハウスが面白い
  • ザ・ファブル第二章が始まって嬉しい:)
  • 歯科矯正を初めて1年7ヶ月になったのであと5ヶ月で器具が外れる(矯正前と比べるとめちゃくちゃきれいになっている)

7月中の出来事も含んでしまったけど問題なしで

See you next time:)

ウェブの基礎 ヘッダーについて改めて調べてみた

いまウェブの基礎について改めて復習をしています。その過程で調べたことをブログにメモっておこうと思いました。
改めて復習をしていると「ちゃんとわかってなかったな」と気づくことが多々あり、とてもいいインプットになっています。今回はヘッダーについていくつか調べましたが、その他のヘッダーについても調べておきたいし、ウェブセキュリティ周りも復習していく予定。

Host

リクエストヘッダーのひとつ。
リクエスト先のホスト名とポート番号が記載される。
HTTP 1.1 ではHostヘッダーは必須になるが、HTTP/2では代わりに疑似ヘッダーである:authorityにホスト名とポート番号が値として入る。

例:

  • HTTP 1.1
    • Host: itdoc.hitachi.co.jp
  • HTTP/2
    • :authority: developer.mozilla.org

サーバーで VirtualHost を利用する場合にサーバーはHostヘッダーの値を判断してリクエストを振り分ける。

続きを読む