2021-06-15 県民の日とエンジニアリングマネジメント学習会

今日は社内でやってるEngineering Management学習会の日。@nyanyamiが紹介してくれたkamranahmedse/developer-roadmap: Roadmap to becoming a web developer in 2021が面白かった。

Webアプリケーションは難しいの2021年度版とも言える内容だと思い、変わらないものもある中で全体としてのボリュームは明らかに増えてるよなぁと感じた。

また、具体的なツールやフレームワークまで入っているのは良し悪しだが、具体的なイメージが付きやすいと、概念的なものとその実装という粒度を合わせるのにも役立っていて自分は良いと思った。社内でスキルマップのようなものを作ることもあるのだけど、このあたりの粒度をあわせるのに苦労するので参考にしていきたい。

さて、6/15は千葉県の県民の日らしく、学校が休みなので子の友達が家にきていた。自分が子供の頃は県民の日で休みなんて概念が存在していなかったのでずっと不思議に思っていたのだけど、どうやら県民の日で学校が休みなのは全国区ではなく、関東の一部だけっぽい。ずるい。

2021-06-09: ほぼ毎週カレーを作っていた

今年の2月くらいに、会社の人がおすすめしているのを見かけて南インド料理店総料理長が教える だいたい15分! 本格インドカレー を買ってから、ほぼ毎週カレーを作り続けていた。

一人暮らしを初めてから20年間、生きるための料理以上のことをしてこなかった自分でも、レシピ通りに作るとかなりそれっぽくなるのでよくできてると思う。15分というのはだいぶ盛ってると思うけど、最近作ったひよこ豆もカレーは、マサラさえ作っておけば数分で完成するので本当に便利だった。

今まで作ったカレーはこんな感じ。サバ缶からはじめて、チキン、キーマ、ひよこ豆と作って、作りたかったのは一通りつくれたのでよかった。

付け合せのレシピも充実してて、人参のトーレンは息子が気に入ったらしくよく食べてくれるので良かった。

ただ、流石にそろそろ別のカレーも作ってみたいと思うようになってきたので、おすすめの本やレシピがあれば何らかの方法で教えて下さい。

2021-05-14: 発熱で病院へ

木曜の朝からちょっと喉がおかしいなと思っていたのだが、夕方には割と我慢できないくらい痛くなって、夜には発熱という最近あまりなかったパターンでダウン。

状況もあるので、病院に電話してから通院してもろもろ検査をしてもらった。病院でできる範囲ではコロナウィルスの感染ではないという結論で一安心。時系列はこんな感じ。

  • 木曜の朝、喉が少しガラガラする。GW明けからしゃべることが多かったからかなと思って仕事をする
  • 木曜の夕方、喉の痛みがひどくなってきて怪しさを感じる
  • 木曜の夜、ひどい頭痛と熱っぽい感じ。体温は37°。これはやばいやつだと思って寝ようとするも、熱が上がってきて寝れない
  • 金曜の朝、38°。昨今の状況もあるので病院に電話して、来院の予約を取る。発熱してる人は院内に入れないので裏口を案内される。
  • 病院に行くと、通用口を改造した発熱者対応のスペースに通される。看護師の方の問診と血液採取。テレビでよく見るビニールっぽい防護服を装備してた。
  • 採血の結果が出るまで1時間くらい待つ。待合室じゃないので椅子が厳しくて、採血用の腕を乗せる台に頭をおいて休む。
  • 内科の医者から血液検査の結果を聞く。ウィルスよりは細菌感染の可能性が高いこと、心配であれば抗体検査はできるとのことなのでお願いする。
  • 抗体検査の結果も陰性。よかった。
  • 謎スペースで、薬をもらって会計もしてもらってそのまま帰る。

家族も似た症状(発熱はひどくないっぽいが)だったので、もしこれでアレだったら家族全員検査じゃんとおもっていたのだが、そうではなかったので本当によかった。

「睡眠こそ最強の解決策である」を読んだ

最近睡眠が破滅しているというのをチームのふりかえりで話したところ、「睡眠について科学的にわかっていることを体系的に学び、それを実践せよ」というまっとうな意見とおすすめ図書を教えてもらったので、観念して「睡眠こそ最強の解決策である」を読んだ。

読み終えてから改めてAmazonのページを見ると、サマリはここに全部書いてあるじゃんという気持ちになるのだけど、それはそれとして、睡眠についてどこまで解明できているのかというのがしっかり書かれているので読み物としても面白かった。特に「夢」についての実験は興味が惹かれるものが多かったように思う。また、これに関連してカフェインについて調べてみたら、実はコーヒーよりも玉露のほうが含有量が多いというのを見て、玉露入り緑茶が最大の敵ということがわかってよかった(?)。

実践しないと意味がないので、まずはこんなことをやっている。

  • PCのナイトモード設定をより強くした
    • Windows 10の夜間モードで強さ70
  • PCのある部屋の照明を一番暖色&暗くした
  • 外でコーヒーを飲むのをやめた
    • 家ではもともとカフェインレスコーヒーだけだったので外では紅茶にするようにした
  • 0時までに寝室に行く
  • 寝る前に気になったことをすぐメモして忘れられるようにペンと紙を持って寝室に行く
    • 気になることが頭に残って寝れないこともあったので、書き出してしまうと頭からでていくかなと期待して
  • 寝る前に頭を使わなくてもいい、使うつもりがない本を読む
  • 寝れなかったら体温下げるためにアイスノンを使う
    • これは本当に良いかわからないけど、体温下げるのに役立つと期待してやっている

しばらくはこれで様子を見ようと思う。アルコールは、やめればいいんだけどまぁたまには……

以下読書メモ。

  • カフェインは精神刺激性のドラッグ
  • 寝ないと本当に死ぬ
  • 朝型夜型の分類は遺伝で決まる事が多い
  • 概日リズムとアデノシンによって睡眠圧がかかる
  • レム睡眠はニューロンのつながりを強化する、ノンレム睡眠はニューロンのつながりを削除する
  • レム睡眠による夢はメンタルヘルスを整えるだけじゃなく、問題解決と創造性にも寄与することがある
  • まだ眠くても起きて行動するのは人間だけ
  • 睡眠薬やアルコールによる眠りは、自然の眠りの効果を得られない
  • 睡眠不足の人は簡単な仕事を選びがちだが、本人は簡単な仕事を選んでいるという自覚もなくなってしまう。自己評価と他人からの評価がずれていく。

RDS for MySQLのファーストタッチペナルティを解除する3ライナー

この記事の3ライナーはほぼ @yoku0825 によるものです。感謝。

RDS for MySQLのデータボリュームはEBSの技術を使っているため、スナップショットから復元を行うと初回のデータアクセス時にレイテンシの悪化が起こる。これは「ファーストタッチペナルティ」または「ファーストタッチレイテンシー」と呼ばれていて、AWSのドキュメントにも記載のある現象である。(Amazon EBS ボリュームの初期化 - Amazon Elastic Compute Cloud)

EC2+EBSの場合は、ddで触るといった方法でこれを解消することになるが、RDS for MySQLではもう少し複雑な作業が必要になる。

具体的には次の3つのことをしなければいけない。

  • primary keyをすべて読み込み
  • secondary keyをすべて読み込む
  • すべてのデータを読み込む

ファーストタッチペナルティの解除についてインターネットで探すと、「select count(*) from テーブル名 を全テーブルに打ちましょう」というのがよくでてくるが、これだけだとsecondary keyを読み込めてないので本番投入後に特定のSQLが最初だけ遅いという現象が起きうる。(MySQLの count(*) は実データに触るので、3番目のすべてのデータを読み込むというのは達成できている。)

さて、MySQL 5.6(RDS for MySQLの現時点で利用できる下限のバージョン)以上では、information_schemaにsecondary keyを含むすべてのインデックスの情報が入っているので、これを利用してファーストタッチペナルティを解除するスクリプトを作ることができる。それが以下の3ライナー。YOUR_DATABASE_NAMEをDB名に置き換え、ホスト名などの認証情報は~/.my.cnf等に書いておくと楽。

mysql -sse "SELECT distinct table_name, index_name FROM information_schema.statistics WHERE table_schema = 'YOUR_DATABASE_NAME'" | while read table index ; do
        mysql -sse "SELECT count(*) FROM $table FORCE INDEX($index)" YOUR_DATABASE_NAME > /dev/null &
done

どれくらいで終わるかはテーブルとレコードの量、インスタンスタイプに依存するので一概には言えないけど、こういうのを考える必要があるサービスの規模であれば、数時間は見ておいて方がいいだろう。終わったかどうかは実行したクライアントマシンのmysqlプロセスの数を見るか、MySQLサーバに入ってshow processlist等でSELECTクエリが残っているかをみればよい。

なお、新しいDBサーバの本番投入の前には、バッファプールも整えておいたほうが良い。これこそサービス依存なのでこうすればいいというのは存在しないが、SELECTされる回数の多いテーブルなどメモリにのっていてほしいデータをSELECTするクエリを流しておくとよい。

参考文献