2022年の振り返り

仕事

4月からSREチームに異動した。お前がやってるの転職じゃなくて転社だよ!の中間形態です。

インプットする情報が変わると人の思考は変わるのだなというのを感じた一年であった。

バックエンドとして働いていた時は、モデリング、DDD、データ整合性について考えることが多かったがSREになってからはCPU、OS、コストについて考えることが多くなった。

チームメンバー全員が技術に関心があり議論できる環境なのは恵まれているとヒシヒシと感じる。

異動前に少しの間スクラムマスターをやっていたが、やりたいこととアンマッチしていたというのは別で振り返りたい。(自分からやりたいと言った。俺が悪かった。あれは間違いだ!)

チーム異動して成果を発揮できるか心配だったが杞憂だった。(給与が下がらなかったため。)

理想と現実とのギャップを明らかにし課題を発見する。進むべき方向があっているか検査するためチェックポイントをタスク開始時に設定する。といった汎用的なスキルを身につけていたのが大きかったように思える。また、バックエンドの知識を活かした取り組みなど自分が価値を発揮しやすいところを探して目標設定するみたいな社会人っぽい動きもした。

異動後に新規構築タスクを2つ任せてもらえたのでSREの仕事全体を早めにキャッチアップできたのも大きかった。やりたいと言ったら信頼して任せてもらえるチームメンバーや上司には感謝しかない。

とはいってもインフラやSRE活動面では、チームメンバーとの知識ギャップがありTakerになっているので、何かしら分野でGiverになりたい。

技術面では、以下のような成長があった。

  • 怪しさ満載だが体験が良いJPINJava学ぶことでinterfaceに対してプログラミングするという言葉の意味がやっとわかった。
  • [試して理解]Linuxのしくみ 第一版やコンピュータの構成と設計の下巻を読むことでCPUやメモリについて理解できた
  • K8sや周辺ツールを基礎知識
  • AWS SAAやTerraform Associate試験を通して基礎知識をつけることができた
  • ガベージコレクションについて理解した。ガベージコレクションアルゴリズムと実装は、いいぞ!
  • インフラを管理するとコスト意識を持つようになり財務諸表を読めるようになった。

SREをやっていくには、人を動かすようなスキルが必要ということを理解したので人格形成が課題だ。また、顧客やプロダクトのことを深く理解してSLOを設定するためのアプローチを確立できていないのも課題なのでやっていきである。RDRAを駆使してSLO設定できないか?というアイデアを持っているので深めていきたい。

人生

進捗なしです。

マッチングサービスを使ってみるかと思いPairsに登録してマッチングしたりしなかったりした。(この構文誰が始めたのか謎。流行表現になってる。)

大抵の男は何も考えず右スワイプすると思うのだが、マッチングした後に特に返信内容が思いつかないので、まあ軽く1週間ぐらい放置し1週間経つと返信しなくなるというループを繰り返していた。1万円で右手の稼働時間を増やしたのでヨシとしたい。まずは、右手から運動していこうな。

後半は、メッセージのやり取りがないDineを使っていたがトークスキルのなさを感じる結果となった。日々精進です。右スワイプは継続中。

女体に興味ないのでは?という鋭い指摘を飲み会でされた。興味あるはず!多分ね。。。人に興味ないのもかも?

交友関係は、良好だった。

社を離れた人と定期的にシズラー行ったり、飲みに行ったりした。ユナイトもな!

大学時代の友人とも定期的に交流している。

つなげーと」というサービスを利用して、外に出る機会を作っている。イベント以降遊びに行くことが皆無なのだが、一人だけ仲良くなって1月にスノボーに行くことになった。大切にしていきたい。

自分が好きなことを一緒にやってくれる友達を見つけたい。スノボーや日本酒を飲みに行ける人ね。

まとめ

まあ、人生なので色々ある。そろそろ社会人5年目になるので、2023はキャリアを考える年にしていきたい。

週報 12/20-12/26

技術メモ

日記

  • アプリケーションコードを書いている時はリファクタリング好きだったが、IaCのリファクタリングはテンションが上がらないという不思議
  • リンク集販売サービスと飲みたい日本酒からお店を探すことができるサービスを作ろうと思う。年末に作るぞ!!!
  • 開催しているRuby内部構造の勉強会が次回で最後だ。しばらくは、勉強会開催するの控えたい。理由は、まあ色々ある。
  • Dineでマッチングした。前回の反省として以下があるので、トレーニングを積んでいきたい。
    • 興味ない話に興味のあるふりをできないという社会性のなさ。
      • 自分の深掘り力が足りないのも良くないと思うので、コーチングの書籍読むとかする。
    • 記憶力が皆無なので、読んだ本やアニメ、ドラマ、映画の内容を覚えておらず話題が続かない。5minぐらい話せるのは、大学の歴史か豆腐カレーのことぐらい。
      • 記憶が定着しない理由を考えた。インプットした後にアウトプットをしていないが悪い。映画を一人で見るな。友達と語り合え。ブログを書け。
  • Dineでマッチングしたが、返信来なかった。一回休み。
  • 年末は足元を見られて物価が高騰するので、勉強や内省をしたい。3月に台湾行きたいので調査するぞ!
  • フロント強い人があれであれしてるので、TypeScriptやブラウザの勉強してフィードバック得るという作戦もありだな〜と思ってる。
  • 社の人と漫画の話をした。みんなの好きなコンテンツを知れるのは良い。
  • M-1とかいう最強の娯楽。Youtube配信してる。これ読んでいるお前も免許奉納していけ!
  • ハリーポッターを見たくなった。せいやさんの着眼点はすごい
  • 2019年に社の人と飲んだ店に再訪した。残っているのは僕だけ。それぞれの人生を再度交わせる。最高に楽しかった。次は、僕の退職した時に集まるそうです。
  • クラブで踊った。(例のアレです。察して下さい。)何事も経験。
  • カジュアル面談を受けることになったので、業界知識をインプットできる書籍を読んだ。賃金安すぎて辛い….。国に大きく依存している業界の開発について根掘り葉掘り聞いていきたい。
  • 勉強ばかりしていて遊んでないので、遊んでいくぞ!
  • 3年ぶりに歯医者に行った。金を稼いでいてよかった。

読んだ本・記事

今週のお店

https://tabelog.com/ibaraki/A0802/A080201/8000161/

https://tabelog.com/tokyo/A1305/A130503/13012817

今週の英語

  • hinder: 妨げる

週報 12/12-12/19

技術

日記

  • 食べログで評価の標準があるの良いとなった。みんなに入力してほしいので、設定する前までは目立つ場所においてほしい。
  • Herokuの404ページが、開発意欲を上げてくるのでよい

  • YoutubeM-1を見始めた。

  • Laprasからきたスカウトが興味をそそる分野だった。GovTech面白そう。昔は、教育に興味あったが今は薄れてきている。転職するなら、ミッションクリティカルな分野や知識をアウトプットする人が多い会社が良いな〜とぼんやり思い始めた。
  • 来週は、飲み会が多いので楽しみだ。
  • 親からピスタチオが送られてきた。感謝。

読んだ本・記事

今週の英語

日本語で過ごした。

週報 12/05 -12/11

技術メモ

日記

読んだ書籍

  • ITエンジニアのための伝わる文章力ドリル
  • 考える技術・書く技術―問題解決力を伸ばすピラミッド原則
  • 「ソフトウェアアークテクチャーの基礎」1-2章
  • システム運用アンチパターン
    • 情報のため込み:ブレントだけが知っている

読んだ記事

https://i.loveruby.net/ja/rhg/book/gc.html

https://netmark.jp/2022/12/2022-12-05-13-43.html

http://matsu-www.is.titech.ac.jp/~endo/gc/gc.pdf

https://go.dev/doc/effective_go#interfaces_and_types

https://go.dev/ref/spec#Interface_types

https://qiita.com/advent-calendar/2022/memory-chan

今週の英語

週報 11/28-12/04

大週報時代の波に乗ることにしました。これを見たお前もやったりやらなかったりしていけ。

https://qwyng.dev/posts/20221127/

https://shifumin.hatenadiary.com/entry/2022/11/06/200000

https://log.chroju.dev/2022-1-2649042839c24aaaab5d130542ec8bf3

技術メモ

  • assume roleしているroleを調べるときに便利。SREになって覚えたデバッグ術とか整理したい。
  $ aws sts get-caller-identity
  • Kinesis Firehoseでバッチ処理的なことができるらしい。試したい。
  • WEB+DB PRESS Vol.117 page.130
    • 完全に理解しました。
  • ディスク周りの調査コマンド集

      $ df -h # ディスク使用量を調べるコマンド。ファイルシステム単位
      $ df -i # ディスクinode数などを調べるコマンド
      $ du -sh ./ # ディスク使用量を調べるコマンド。ファイル単位
      $ free # メモリ使用量を確認するコマンド
      $ swapoff -a # /etc/fstabでスワップとして認識されているデバイス領域を無効にする。ディスクが溢れた時に使うと良さそう。
    
  • linux snap mount

  • ECSのデバッグ方法。task定義とclusterだけは、ECS Execできない…。ちょっと不便だ。

      # タスク定義にFARGATEを指定していると、--launch-type。
      # awsvpcを指定していると、--network-configurationの設定追加が必要。
      $ aws ecs create-service --cluster cluster --enable-execute-command
          --task task --desired-count 1 --service-name service_name 
          --network-configuration 'awsvpcConfiguration={subnets=[subnet],securityGroups=[sg]'
          --launch-type FARGATE 
    
      $ aws ecs execute-command --cluster cluster --command "/bin/sh"  --interactive --task task
    
      $ aws ecs describe-tasks --cluster cluster --tasks task | jq '.tasks[].enableExecuteCommand'
    
  • Advent Calendarに向けてガベージコレクションの実装方式の一つであるマーク・アンド・スイープの実装を進めていた。頭で理解していると実装できるとの間には、大きな壁があるんだな〜と改めて感じた。RVAULEのptr先のバイト列もGC heapのメモリを利用すると思っていた。今の理解は、以下
    • GCのheapは、RVAULEのみを管理する。GCは、RVAULEが指すptrをfreeする。
  • さっとググった範囲では、golangenum型を定義することができない?color2は、コンパイルエラーになってほしい…。どうにかならないものだろうか
package main
    
import (
  "fmt"
)
    
type Color int
    
const (
  Red Color = iota
  Blue
  Yellow
)
    
func main() {
  var color1 Color = Yellow;
  var color2 Color = 10; # コンパイルエラーになってほしい
  fmt.Println(color1)
  fmt.Println(color2)
}

日記

  • 食事制限のため豆腐カレーを食してる。水は切れば切れるほど旨い。不足した栄養素は、金曜日にシズラーで帳尻を合わせる。
  • 海外の企業に履歴書出すのやってないので、やっていきたい。英語の履歴書を書くのってめんどくさいじゃん….
  • ポケモンは楽しい。ポケモンは、スピンオフ。ポケットモンスターが本家。ポケモンリーグ行く前に図鑑を埋めたい。
  • インフラ業のセルフサービス化推進に伴い、業務でドキュメントを書く機会が増えた。人に動いてもらえる文書書くトレーニングを積みたい。
  • https://youtrust.jp/ に登録した。今のところ魅力がわかってない。知り合いが今何しているか知れるのは少し嬉しい。各位転職先を公開したり、しなかったりしろ。
  • AWSを使ったインフラ構築できる副業先を見つけたい。
  • 社会人になって初めてIT系以外の友達ができたかもしれない。
  • 整体で教えてもらったストレッチを続けたおかげで、2週間経っても肩こりがなかった
  • 突然お湯が出なくなったので管理者会社に給湯器を修理してもらうことになった。止血策として電子ケトルでお湯を沸かして風呂に入った。人間本気になれば、電気ケトル2回分で風呂に入れる。風呂桶は、2.5Lという知見を得た。
  • JAISTで科目履修するために書類を書いた。石川の授業を受けることができるのか不明なのでメールか電話で確認したい。電話の方が早そう。受けたいのは、以下2つ。曜日時限が被ってるので、無理そうか?
  • 給湯器の修理が完了する12/8まで銭湯に通うことなった。入れ墨をしている人を毎日観測するので、多分50人に1人は入れ墨してる。
  • すずめの戸締まりを観た。正直、特段感想がない。面白かった。面白かった以外の深いコメントができない。もっと、語彙力と感受性を磨いていきたい。

読んだ記事

https://lab.astamuse.co.jp/entry/2018/03/15/114500

https://speakerdeck.com/matsuihidetoshi/komiyuniteiibentopei-xin-ji-pan-defalse-sabaresuakitekutiyashi-jian

https://techlife.cookpad.com/entry/2018/05/10/090000

https://creators.bengo4.com/entry/2022/11/29/083000

https://blog.studysapuri.jp/entry/slo-burn-rate-monitoring

https://note.com/n0mimono/n/n548fac74f8e7

https://qiita.com/c60evaporator/items/2f24d4796202e8b06a77

今週の英語

ISUCON9にて、nginxのaccess_log Directives設定が反映されない際の対応

予選用イメージファイルを利用したインスタンスの起動を参考に、AWSに環境構築した。その後、ベンチマークを流したがaccess_log の出力先にログが吐かれない。

上記を問題を解決する方法がわかったので、ブログに残しておく。

解決策

80番ポートをlistenさせる。

$ cat /etc/nginx/sites-enabled/isucari.conf

server {
    access_log  /var/log/nginx/isucon.log;
    listen 80; # 追加
    listen 443 ssl;
    server_name isucon9.catatsuy.org;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8000;
    }
}

その後、EC2のパブリック IPv4 アドレス を benchmarkerの target-urltarget-host に渡せばよい。

$ pwd
/home/isucon/isucari
$ ./bin/benchmarker  -target-url http://public_ip_address -target-host public_ip_address

解説

ベンチマーカの説明から、デフォルトtarget-urltarget-host は以下の通りである。

  -target-host string
        target host (default "isucon9.catatsuy.org")
  -target-url string
        target url (default "http://127.0.0.1:8000")

デフォルトでは、アプリケーションに対して直接ベンチマーカを実行するため、nginxを経由しない。そのため、/var/log/nginx/isucon.log にログが吐き出さない。

解決策は、nginxを経由するようにベンチマーカにオプションを渡すことだ。

解決策に至るまでのプロセス

ブラウザからアクセスすると、アクセスログにログを吐く。ベンチマーカを実行するとログを吐かない。

このことから、ベンチマーカはNginxにリクエストしていない可能性があると考えた。仮説を元に、ドキュメントを読み解決に至った。

アドバイスほしいところ

以下のように、https に対してベンチマーカを実行したかったが、証明書問題を解決できなかった。 https に対して、ベンチマークを実行する方法を知っていればコメントもらいたい。

$ ./bin/benchmarker  -target-url https://public_ip_address -target-host public_ip_address

文字集合とエンコーディングについて説明してみた

MySQL徹底入門 第4版 MySQL 8.0対応を読んでいる

11章 CharSetの紹介で、文字集合とエンコーディングを合わせたものがCharSetであると記載されているが、各用語の意味が理解できていなかったので言語化してみた

現実世界の文字集合をコンピューター世界の文字集合に写像させたい
この時、コンピュータ世界の文字集合は数値として表現される
つまり、現実世界の文字集合を数値集合に写像したい
この数値集合の元を文字コードと呼ぶ

エンコーディングは、写像する時の関数である

間違っていたら、Twitterでメンションなど頂けると幸いです

Chapter 10 Character Sets, Collations, Unicode

gemのコードリーディング手法

sidekiq-cronを題材にする

いつも調べてしまうので、自分用メモとして残しておく

# Gemfile
# frozen_string_literal: true

source 'https://rubygems.org'

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

gem 'sidekiq'
gem "sidekiq-cron", "~> 1.1"
gem 'pry-byebug'
# debug.rb

require "bundler/setup"
Bundler.require

hash = {
  'name_of_job' => {
    'class' => 'MyClass',
    'cron'  => '1 * * * *',
    'args'  => '(OPTIONAL) [Array or Hash]'
  },
  'My super iber cool job' => {
    'class' => 'SecondClass',
    'cron'  => '*/5 * * * *'
  }
}

Sidekiq::Cron::Job.load_from_hash hash

bundle install --path vendor/bundle を実行後、vendor/bundleの該当箇所に、binding.pryを差し込む。その後、ruby debug.rb を実行

require "bundler/setup"Bundler.requireが肝です。後は、普段開発しているように地味にデバックしていくだけ

branch間の移動を数字で行う方法

メモ書きです

git checkout branch-name で、いつもbranch移動をしていた。

branch移動は、頻繁に行うため簡略化すると生産性が向上するので、調査を行った。以下のAliasを追加すればよい。

$ cat ~/.gitconfig

[alias]
    b = "! git branch | cat -n"
    sbn = "!f() { branch_name=$(git branch --format='%(refname:short)' | head -n $1 | tail -n 1); git checkout $branch_name; }; f" # switch branch by number

参考記事

Can git branches be listed with numbers?