CQRSについて調べたことをメモ
2023年9月18日概要 CQRSについて調べたことをメモ。 CQRSとは Command Query Responsibility Segregation CommandとQueryに責務分離するパターン Command データの更新を行う データではなくタスクにフォーカスしたコマンドを設計 DDDのドメインモデルを内包することが想定されている Query データの参照を行う ユースケースごとに最適化されたオ...
概要 CQRSについて調べたことをメモ。 CQRSとは Command Query Responsibility Segregation CommandとQueryに責務分離するパターン Command データの更新を行う データではなくタスクにフォーカスしたコマンドを設計 DDDのドメインモデルを内包することが想定されている Query データの参照を行う ユースケースごとに最適化されたオ...
概要 Sagaパターンについて調べたことをメモ。 Sagaパターンとは マイクロサービスにおいては、分散トランザクション(2phase commitなど)は推奨されていない 分散トランザクションを避け、整合性を担保するパターンとしてSagaパターンがある 長時間のロックを避け、結果整合性を利用する 補償トランザクション 一連のトランザクションの取り消しを行う操作 Sagaパターンでは単純なロ...
概要 Goのresponse.WriteHeaderの副作用についてメモする。 superfluous response.WriteHeader 以下は愚直な例だが、次のようにWriteHeaderを複数回呼ぶと、http: superfluous response.WriteHeader call from main.handlerというエラーが出る。 package main import ...
以前からウォッチしていたnet/http: enhanced ServeMux routing #61410がAcceptedになったので、それについてポエムをかく。 最終的な仕様がどうなるかはわからないが、静的なルーティングの機能(/foo/barのような固定値のルーティング)しか持っていないServeMuxに動的なルーティング(/foo/:idのようなパスパラメータを使ったルーティング)の機能...
概要 BFFについて調べたことをまとめる。 BFFとは Backends For Frontendsの略。Best Friends Forever(ズッ友だよ)ではない。 名前の通り、フロントエンドのためのバックエンドサーバーのことで、フロントエンドのためのAPIやHTMLをレスポンスするなどUI・UXのための役割を担っている。 クライアント(サーバーの呼び出し側)の多様性に応えるのが難し...
概要 通知基盤の構築に関してざっくりと考えたことや調べたことなどをまとめておく。 通知基盤とは ユーザーに通知(メール・プッシュ・SMS・音声など)を行うためのシステム基盤。 クライアント(通知を依頼するシステム)からリクエストを受けて、送信先・送信内容など通知に関する処理を担うシステム。 通知基盤の設計・実装における観点 考えることが一杯ありそうだと思ったので、思いついた順で雑に書いた。整理でき...
Go言語100Tips 開発者にありがちな間違いへの対処法 (impress top gear)を読んだ。 タイトル通りGoでありがちなミスが網羅的にカバーされているTips本。 Goに書き慣れてはいるけどより品質を上げたいというときに読んでおきたい一冊。 ...
概要 Goのhttp.RoundTripperについてかく。 http.RoundTripperとは HTTPクライアントの通信を担っているインターフェース。 cf. pkg.go.dev - net/http#RoundTripper HTTPクライアントにおいてリクエストからレスポンスを受け取るまでの間の処理をカスタマイズすることができる。 HTTPクライアントにおけるミドルウェアというイメー...
概要 並行処理のパターンであるfan-in、fan-outをGoで実装する。 fan-in/fan-outとは fan-inは、複数の入力を1つにまとめる処理で、fan-outは、1つの入力を複数に分ける処理である。 fan-inはデータを集約させ、fan-outはデータを分散させる。 Goではchannelとgoroutineを使って実現することができる。 実装 ソースコードはgithubにも置...
概要 GoFの振る舞いに関するパターンであるTemplate MethodパターンとStrategyパターンについてまとめる。 Template Methodパターンとは 大枠の処理を上位のクラスで決めておき、具体的な処理の流れを下位のクラスに任せる設計パターン。 package main type Game interface { Init() Start() End(...
Go言語による分散サービスを読んだ。 Goでの分散サービスの実践について書かれた本。 マイクロサービス文脈でのモダンな技術、構成の背景や実践についても学べると思う。 ...
スライディングウィンドウとは 配列のサブアレイを”ウィンドウ(サブセット)”をずらすしていくように探索するアルゴリズム。 ウィンドウサイズは固定または動的。 実例としては、レートリミッターで使われたりする。 実装 ソースコードは以下。 sliding_window 与えられた配列から合計がN以上になるサブアレイを探索する関数。 package main import "fmt"...
概要 docker-composeで構成されている個人開発のアプリケーションをKubernetes(k3s)へ移行するという試みの際に、multipassを使ってみたのでそれについてメモを残す。 結局移行はしなかったが... k3sはCNCFに認証されたKubernetesディストリビューション。IoTやエッジコンピューティング用途向け。メモリを節約したい、Kubernetesほどのスケールは不要...
概要 二分探索木とは どのノードにおいても、左の子ノード<親ノード<右の子ノードとなるような木。 ex. 5 / \ 3 8 / \ / \ 1 4 6 9 探索パターン 深さ優先探索(DFS: Depth first search) それぞれのノード探索順はwww.momoyama-usagi.com - うさぎでもわかる2分探索木 後編 2分探索木における4つの...
概要 尺取り法についてまとめる。 英語だと、Two Pointer ApproachまたはTwo Pointer Techniqueと呼ばれる。 尺取り法とは データセット(数列や文字列など)の右端と左端のインデックスを保持して、条件によって左右のインデックスを移動させることで、条件を満たすデータを探索するアルゴリズム。 特定の条件を満たすデータを区間の中から探索したいような時に役立つ。 例題 配...
scruminc.japanのRegistered Scrum Masterの研修・試験を受けて認定スクラムマスターになったので感想とメモ。 ちなみに認定期間が1年らしいので、認定を継続するには年に1回小テストを受けて更新する必要があるらしい。 研修を受けた理由 普段、チームでスクラム開発を行っているが、開発者(というかチームリーダー)としてスクラムについて理解を深めて、チームのプロセス改善とプロ...
概要 アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 ハッシュマップ ハッシュ値を添え字とした配列 ハッシュの衝突処理 開番地法 衝突が生じた際に、ハッシュ関数とは別の関数を使って別の番地を求める方法。 連鎖法 衝突が生じても新しい番地を求めずに、衝突した番地に衝突したキー同...
概要 グラフを表現するためのデータ構造である隣接リストと隣接リストについてまとめる。 隣接リストや隣接行列は有向グラフでも無向グラフでも利用できる。 隣接リスト(Adjacency List) 各頂点(ノード)ごとに隣接する頂点をリストとして持つデータ構造。 // 無向グラフの例 A---B | / | | / | C---D // 隣接リストで表現すると、次のような形になる A: [B...
Goでスタックとキューをそれぞれ実装してみた。 スライスを使ったパターンと連結リストを使ったパターンをそれぞれ実装している。 個人的にはスライスを使ったパターンの方が実装は楽かなと思う。 スタックのpush、pop、キューのenqueue、dequeueの時間計算量はそれぞれO(1)で実装できるが、一部サボってO(N)になってしまっているものがある。 スタック ソースコード:stack 連結リスト...
連結リストの走査で役立つランナーテクニックについてまとめる。 世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法で紹介されていて初めて知った。 ランナーテクニックとは 連結リストの先頭から走査していくポインタと、そのポインタより先から走査していくポインタの2種類を用意して、同時に走査していく方法。 これが何に役立つかというと、例えば次のような例題を解くのに役立つ。 例題 単...
再帰処理はプログラマーの嗜み!エレガントにかけて当たり前!・・・と自信を持って言いたいところだが、自分は正直なところ苦手である。 日頃再帰処理を書く機会といえばコーディングクイズくらいで実際のところあまり書く機会がない.. 再帰処理はケースによってはメモ化や末尾最適化までエレガントにやらないと計算量が大きくなったり、メモリを食うだけのコードになってしまうが、アルゴリズムによってはシンプルなコードに...
概要 コーディングクイズを解く日課を再開するに当たって、リハビリを兼ねてアルゴリズムとデータ構造の基本について復習。 配列 連続した配置でメモリを確保する 単一のデータ型 サイズは一般的には固定だが、言語によっては動的(可変長配列) サブアレイ 配列内から連続した形で取り出される配列 [1, 2, 3, 4, 5] →[2, 3, 4] サブシーケンス 要素順を変更せずに、一部の要素...
カウントソートとは ソートアルゴリズムの中でも比較を使わずにソートする変わった?アルゴリズム。 比較せずに要素をカウントすることでソートができる。 カウントしてソートすることができるというのは不思議!と思ったので調べてみた。 前提 累積和について知っておく必要がある。 cf. qiita.com - 累積和とは(超初心者用) 実装 ソースコードは以下。 count_sort package mai...
プログラミング脳をこれから鍛える本を読んだ。 算数を題材として思考法についてトレーニングが書かれた本。内容は平易で大人向けではないかもしれない。 ...
バックトラッキングとは 指定された制約を満たすような組み合わせを探索するアルゴリズム。 重複しない組み合わせ(nCr)を全て探索するようなときに使える。 実装 ソースコードは以下。 backtrack 与えられた配列からN個の重複しないサブシーケンスを取得する処理。 以下は4C3の例。 package main import "fmt" func backtrack(rs...
Makuake Advent Calendar 2022の9日目の記事です! Goで始めるコードのパフォーマンス改善 自作HTTP Routerのgoblinのパフォーマンス改善をしよう思った際に、Goのパフォーマンス改善について取り組んでみたので、その際のアプローチと実践した取り組みについて書く。 前提知識 より奥深いチューニングをする上ではもっと必要な知識があると思うが、最低限必要なことだけリ...
概要 MySQLのトランザクションのアノマリーについてまとめる。 MySQLのバージョンは8系を想定する。 検証環境 検証に使う環境はdocker-composeで用意した。(1コンテナだけなのでcomposeを使わなくも良いのだが..) . ├── docker-compose.yml └── initdb.d └── 1_schema.sql docker-compose.yml v...
概要 トランザクションについてまとめる。 トランザクション データを正しく保つための手法。DB固有の概念ではなく、一つの理論として独立している。 多数のクライアントからDBサーバーに対して同時アクセスが発生するような状況や、DBサーバーまたはアプリケーションが更新処理途中にクラッシュするという状況などからデータの整合性を守りたい時に必要とされる。 トランザクションが提供する機能は2点ある。 同時...
概要 Google Cloud認定アソシエイトクラウドエンジニアを受験して合格したので、再受験するときや別の試験を受けるときのために勉強した過程を振り返っておく。 前提 ソフトウェアエンジニア7~8年目くらい。 GCPの経験は2年くらいあるかな・・どちらかというとAWSのほうが触っている感じ。 モチベーション 業務でAWSとGCPの両方を触る機会があり、AWSの方はアソシエイトレベルの認定を取得し...
今までGoogle Driveで管理していたレジュメをGithubで管理するようにした。 これが個人的に良い取り組みだったので記事にしておく。 ここでいうレジュメは、自分のキャリアのあれこれがテキストベースでまとめられたものを指す。 モチベーション Google Driveでファイルをアップロードして管理していたが、イマイチ更新しづらかったり、更新する気力が沸かなかったりした。 差分がわかりやすい...
概要 ISUcon出場に向けて準備したことを記す。 目標・目的を定めた 目標 ISUconの予選の時間を目一杯使い切ってチューニングをする 勝つことが目標ではあるが、初参戦なので現実的なラインの目標を立てた 目的 インフラ周りの知見を高める パフォーマンスを考慮したアプリケーション構築のための知見を高める 社内のパフォーマンス・チューニングの業務に携われるようにする(頑張る) メン...
概要 コンテナ技術についてのまとめ。 Dockerを使わずにコンテナをつくって触ってみる。 コンテナとは ホストOSからアプリケーションとランタイムをまとめて、分離した一連のプロセス。 コンテナの歴史 1979年 UNIX OSにchrootが登場。 2000年 FreeBSD jailsがFreeBSD 4.0に登場。chrootの発展系。 2001年 VServer Projectを通じて...
概要 キャッシュの書き込み方式についてまとめる。 ライトスルー データがキャッシュに書き込まれると同時にメインメモリにも書き込む方式。 書き込み操作がキャッシュとメインメモリ両方に対して発生する。 データの一貫性を保ちやすいが、書き込みの遅延が発生する可能性がある。 ライトバック データがキャッシュに書き込まれた後、メインメモリに書き込みをするまでキャッシュ内にデータが保持される方式。 書き込み操...
概要 デプロイ戦略についてまとめる。 デプロイ・リリース・ロールバックの定義 デプロイ戦略の前提知識として言葉の定義を明確にしておく。 デプロイとは、「実行環境に実行可能なプログラムを配置すること」 リリースとは、「ユーザーがアクセスできる状態にすること」 ロールバックとは、「古いバージョンのリリースをリリースすること」 デプロイ戦略の種類 代表的と思われるものを取り上げる。 インプレースデプロイ...
概要 時々どっちがどっちか混乱してしまうので、メモを残す。 シャーディングとパーティショニングの違い 項目 シャーディング パーティショニング データの分割方法 水平方向(≒水平パーティショニング) ex. 行 垂直方向 ex. テーブル、データベース、カラム メリット パフォーマンスの向上、スケーラビリティの向上 パフォーマンスの向上、データの検索性向上 デメリット データや...
概要 プロキシサーバー(フォワードプロキシサーバー)・リバースプロキシサーバー・ゲートウェイサーバーの違いについてまとめる。 プロキシサーバー(フォワードプロキシサーバー)とは クライアントとサーバーの間に配置され、両者の通信を代理で行う(中継する)サーバー。 クライアントからのリクエストを代理をする。 クライアント→プロキシサーバー→インターネット→サーバー メリットは次のようなものがある。 ...
概要 Google Cloud認定アソシエイトクラウドエンジニアの試験に向けた勉強をしている際の雑多な覚え書き。 考え方 責任共有モデル 最小権限の原則 組織全体でガバナンスを発揮する 権限の分譲 ステートレスなアプリケーションとイミュータブルなインフラ 自動化によるトイルの削減 スケーラブル・高可用性・堅牢性 モニタリングと自動的な通知 cf. https://blog.g-gen.co.j...
ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方を読んだ。 ユニコーン企業の組織論や文化について学べる。 役者あとがきに書かれているが、ユニコーン企業ではスクラムをやっていない。これについてどう捉えるかによって本書の読み終わりのイメージが変わるのではないかと思う。 自分としては守破離の離に達したスクラムを超えた先という捉え方をしているが、方法論は問わず成長性を支える文化や...
ライト、ついてますか 問題発見の人間学を読んだ。 名著に数えられる一冊だと思われる。 読み終わったときは何だかあんまり腑に落ちなかったというか、しっくりこなかったが、時間を置いて振り返ってみるとこの本のメッセージ性をちゃんと捉えることができるようになった気がする。 「問題は解くことよりも見つけることが難しい、解き方よりも見つけるべき問題を見誤ると意味がない。」というのは当たり前のことのように思える...
概要 PyroscopeというContinous Profilingのツールを導入してみた。 Continous Profilingについてはこちら参照。 What is continuous profiling? 今年に入ってからGrafanaが買収したらしい。 Grafana Labs が Pyroscope を買収してコード プロファイリング機能を追加 買収してからは、Grafana Pyr...
ステータス 解決 事象 2023年1月2日正午頃、https://bmf-tech.com/ にアクセスするとレスポンスが遅い、500エラーが常に返却されることに気づき、発覚。 grafanaにログインして調査をしようとしたが、ログインができなかった。 一部コンテナが何らかの原因でダウンした可能性を考慮して、デプロイを実施したが、no space left on device のエラーログを確認...
概要 MySQLにはだいぶ前から全文検索が使えるになっているが、最近まで全然触ってもいなかったので軽く素振りしてみた。 MySQLで全文検索を始める MySQLで全文検索を利用するのはElasticSearchよりも圧倒的に手間が掛からない。 検索対象としたいカラムにFULLTEXT INDEXを付与、MATCH (col1,col2,...) AGAINST (expr [search_modi...
概要 net/http/pprofをDefaultServeMux以外(Goの標準のルーター以外)で使う方法についてメモ。 ハマりどころ pprofをblank importするだけではだめ。 package main import ( _ "net/http/pprof" ) DefaultServeMux以外のルーターを使う場合はblank importするだけ...
概要 html/templateを使っているときに、テンプレートに渡すURLをエンコードさせたくなかった。 template.URLを使う Goのhtml/templateを使って、URLをテンプレートに渡すとエンコードされてしまう仕様になっている。 cf. https://pkg.go.dev/html/template#hdr-Contexts セキュリティ上の理由でこのような仕様になっている...
概要 プライベートで開発しているアプリケーションのイメージをクロスコンパイルする必要性に駆られて(ローカルの開発環境と本番の環境でアーキテクチャが異なっていることが起因)対応したのでメモ。 buildx Docker Desktopにはbuildxが標準で備わっているのでそちらを利用する。 Docker Buildx buildxを使うことでマルチアーキテクチャ対応のイメージを簡単に作ることができ...
NewSQLについての色々と調べて読み漁ってみたので読んだものをまとめておく。 元々いくつかのNewSQLのDBについての比較をしてみたいと思って漁っていたのだが、内部で使われている技術について知っておく必要があったので、関連技術についての記事が多めになっている。 資料一覧 Hybrid Clock Hybrid Logical Clock (HLC) 本当は恐ろしい分散システムの話 分散処理シ...
概要 dockerコマンドをcronで実行しようとしたら"the input device is not a TTY"と怒られてしまった。 cronに設定しようとした内容例は以下。 * * * * * user docker exec -it container-name mysqldump dbname -uuser -ppassword > backup.sql ...
概要 2023年3月現在のFuelPHPの現況についてざっくり調べたことをまとめる。 独自に調べた情報なので正確性には欠けるかもしれない。 PHPのフレームワークはLaravelが圧倒的に人気があるように感じるが、FuelPHPもまだ現役で使っている人がいるかもしれないので、何か一助になれば嬉しい。 FuelPHPバージョン情報 独自に調べたFuelPHPの情報をまとめる。 Version ...
システム設計の面接試験を読んだ。 System Design Interview – An insider's guideの和訳本。 donnemartin/system-design-primerを読んでいるとある程度知っている内容ではあるが、この類の本は日本ではあまり出版されていないような気がするので、手元において置きたい一冊。 ByteByteGoは著者が運営しているサービス。一部無...
データ指向アプリケーションデザインを読んだ。 分散システム設計における名著。 理解がしきれていない部分も多いの読み直したい。 ...
ソフトウェアアーキテクチャの基礎を読んだ。 ソフトウェアのアーキテクチャの評価観点やアーキテクチャパターンについて書かれた本。 ...
ソフトウェアアーキテクチャ Hardpartsを読んだ。 分散システムにおけるアプローチは難しい問題について書かれた本。 ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチと進化的アーキテクチャ ―絶え間ない変化を支えるを事前に読んでおいたほうが読みやすいかもしれない。 アーキテクチャをどのように再構築していくかについての考え方やアプローチについて整理されている。 個人的...
システム設計関連の資料をいくつか読み漁ったので、リンク集的にまとめておく。 動画系は見れていないものが多い。 あとあんまり関係なさそうなやや離れたトピックに関してのコンテンツも含んでいたりする。 モチベーション なぜ色々と調べてみたかというと、システム設計について体系的に学ぶことができないか知りたかった、学んでみたかったからである。 もっというと、システム設計についての能力を高める糸口が欲しかった...
ストレスフリー超大全を読んだ。 ストレスとどう向き合うか教えてくれる本。 良いマインドセットや考え方、行動など学ぶことができるのでおすすめ。 ストレスと良い関係性を持てるようになると人生の何%か良い時間の過ごし方ができると思うので、ストレスフル社会に生きる社会人は読んでおいて損がないと思う。 ...
概要 Datadog continuous testingについて調べたことのメモ。 Datadog continuous testingとは ノーコード 画面ポチポチでテストを用意できる 自己修復型E2E "回復力"のあるテスト 誤検出を最小限に抑える クロスブラウザテスト対応 主要なインテグレーションをカバー CircleCI、Github Actions、Jen...
2022年の振り返りと来年の抱負 毎年恒例の振り返りと抱負について書く。 2021年の振り返りと来年の抱負 2020年の振り返りと来年の抱負 2019年の振り返りと来年の抱負 2018年の振り返りと2019年の目標 プライベート やれたこと 自分の中で大きめの課題であった、このbmf-techのリプレースを完了したことが一番達成感があったことかもしれない。ソフトウェアエンジニアリング総合格闘技...
Makuake Advent Calendar 2022の5日目の記事です! 概要 GoのHTTP Routerのパフォーマンスを比較するためのベンチマーカーを実装した。 bmf-san/go-router-benchmark 現在のところ以下のHTTP Routerを比較対象としている。 bmf-san/goblin julienschmidt/httprouter go-chi/chi gi...
Makuake Advent Calendar 2022の7日目の記事です! 概要 オレオレTechnology Radarの作り方についてかく。 Technology Radarとは Technology Radarとは、ThoughtWorks社(ソフトウェア開発やコンサルティングをグローバル展開している企業。マーティン・ファウラー氏が所属している。)が発信しているソフトウェア開発における技術...
Makuake Advent Calendar 2022の6日目の記事です! 概要 最近スクラムチームのプロセス改善について頻繁に思いを馳せており、カイゼンのヒントが何か得られないだろうかと思ってアジャイルメトリクスを読んでみた。 アジャイルメトリクス 原著は多分Agile Metrics in Action。何年か前に出版された本。 アジャイルメトリクスとは? アジャイルメトリクスとは、アジャイ...
「アジャイル式」健康カイゼンガイドを読んだ。 健康×アジャイルという珍しい。 アジャイルの考えた方は色々なところで活きるが、健康を改善するうえでも役に立つ面が多いようだ。 健康のための習慣、行動パターンについて色々書かれているので、実践しやすい。 ...
Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る を読んだ。 GoでWebアプリケーションをつくる実践的な方法について書かれている。 ...
アジャイルメトリクスを読んだ。 アジャイル開発における計測指標を教えてくれる本。 チームのパフォーマンス向上のための観察手法を学ぶことできる。 ...
ソフトウェアテストをカイゼンする50のアイデアを読んだ。 テスト品質を向上させるアイデアについて学べる本。 ...
ソフトウェアテストの教科書を読んだ。 テストについての体系的な知識を得ることができる。 ...
SOAとマイクロサービスの違いについて整理したくなったときに漁った記事の雑メモ。 aws.amazon.com - サービス指向アーキテクチャとは何ですか? www.talend.com - マイクロサービスとSOA:の違い 適したユースケースとは ja.wikipedia.org - エンタープライズ・サービス・バス www.xlsoft.com - API インフラストラクチャ: ESB と...
概要 Homebrewでインストールするパッケージで過去のバージョンを指定してインストールしたいときがたまにある。 Homebrewは最新版のみ保持する方針になったらしく、過去バージョンをインストールするときはひと手間かかったのでメモ。 やり方 今回vim9系からvim8系のダウングレードをしたかったので、そのときの手順を例に上げる。 手順は以下。 brew tap-new bmf-san/vim...
概要 ADR(Architecture Decision Record)について調べた。 ADRとは 2011年にMichael Nygardによって紹介されたアーキテクチャに関する決定事項を記録したドキュメントのこと。 cf. cognitect.com - DOCUMENTING ARCHITECTURE DECISIONS フォーマット Michael Nygardは提案するフォーマットは次...
概要 Design Docsについて調べてみた。 Design Docsとは Design Docsはソフトウェア設計のためのドキュメント。 決まった形式を持たず、プロジェクトにとって意味ある形で書くことをルールとしている Design Docsは開発プロセスにおいて、以下のようないくつかのメリットを持つ。 設計上の課題洗い出し、手戻りの軽減 設計について合意形成 横断的な関心事についての整理・...
概要 Cloud Functionsを使ってSlack AppのSlash Commandを実装する。 今回作ったボイラープレートはこちら。 go-slack-app-on-cloud-functions-boilerplate Slash Commandの使えるSlack Appを作る方法は色々あるが、安く、簡単に、サーバーレスで作れるということでCloudFront Functionsを使って...
SLI・SLO・SLAについて SLI・SLO・SLAについて色々調べてみたことをまとめる。 SLO・SLI・SLAとは何か SLO、SLI、SLAとは、サービスレベル(Service Level)に関わる指標、目標、合意のことである。 サービスレベルとは一定の期間内で提供されたサービスを特定の方法で測定して表したものである。 SLI(Service Level Indicator) サービスレ...
概要 先日認定スクラムマスターの研修を受けたのだが、スクラムマスターとプロダクトオーナーの違いについて改めて整理しておく必要があると感じたので、記事にする。 cf. 認定スクラムマスター(LSM)になった スクラムマスターとは 責任 スクラムの確立と有効性に責任を持つ スクラムが正しく実践されるようにスクラムの理論やプロセスをスクラムチームに理解してもらえるようにする スクラムチームがスクラム...
概要 GoでClean Architectureのレイヤーを静的解析する方法についてのメモ。 go-cleanarchを使う 静的解析のツールを自作しても良かったが、簡単に導入できるツールがあったのでこちらを使ってみた。 roblaszczak/go-cleanarch 自作CMSのgobel-apiに導入してみた。 cf. PR go install github.com/roblaszcza...
概要 マークダウン形式のファイルをPDFファイルに変換したいという要望に応えるための簡易的なドキュメント管理ツールを作った。 bmf-san/docs-md-to-pdf-example 特に深く考えることなくあり物のライブラリを活用して作ったので、あまりサステナビリティを感じない構成になっている。 モチベーション 単にマークダウン形式のファイルをPDFファイルに変換するだけであれば、md-to-...
bmf-techを支える技術 このブログ(bmf-tech.com)を支える技術スタックについてかく。 旧bmf-techの構成 まずは現行のbmf-techはよりも1世代前の構成について。 アプリケーションはLaravelをベースとしたモノリシックな構成 APIはPHPで、管理画面はReactでSPAを構築していた 当時触っていた技術を何となく採用しただけ Sakura VPSでホ...
ブログのシステムを移行したので記念投稿。 bmf-tech.comはWordpress→Laravel製自作CMS→Go製自作CMSと3世代目のアップデートをすることができた。 振り返りの記事をそのうち書く予定。 ...
達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践を読んだ。 ISUCONに参加するなら一度読んでおきたい本。 ...
ゼロからわかるファイナンス思考 働く人と会社の成長戦略を読んだ。 長期的な目線での企業価値の最大化を図るファイナンス思考につい優しく書かれた本。 ...
概要PHPの知識が7.3から止まっているので8.1までの新機能を駆け足でキャッチアップする。 PHP 7.3.x - PHP 7.4.x新機能型付きプロパティ<?php class Person { public int $age; // 指定の型だけ代入できるように強制される public string $name; } ?> アロ...
Conoha VPSでAnsibleを使ってLet's EncryptのSSL証明書の取得を行おうとしていた。 証明書の取得はDNS-01方式(ドメインのTXTレコードに認証局が発行したワンタイムトークンを登録して検証する)で取得したかったので、ConohaのAPIを使って、TXTレコードを登録、削除するようなスクリプトを組んで対応(cf. github.com - k2snow/lets...
概要この記事はMakuake Advent Calendar 2021の24日目の記事です。(大遅刻しました・・)ラウンドロビンで負荷分散するロードバランサーをGolangで自作してみるという話です。 ロードバランサーとは何かロードバランサーはリクエストを複数のサーバーへ振り分けて負荷分散する(ロードバランシング)機能を持ったサーバーです。 サービスの可用性を高めてくれるリバースプロキシの一種で...
2021年の振り返りと来年の抱負 去年のやつ。 2020年の振り返りと来年の抱負 今年も振り返りを書いておこうと思うが、年々面倒になってきたのでざっくりにかく。 良い買い物 2021は自分の人生で一番出費があった年だったと思う。 結婚式 引っ越し 車 M1 Macbook Air オフィスチェア あと何か色々細々としたものを買ったような気がする。 どちらかといえばケチなタイプだが、有意義な出費...
この記事はMakuake Advent Calendar 2021の17日目の記事です。 気づけば入社して丸3年が経ち、会社のアドベントカレンダーも3回目の参戦です。 ここ1年はRe-ArchitectureチームというMakuakeのサービス基盤の開発・運用を行うチームに所属し、色々と奮闘してきました。 来年もきっとあれこれと奮闘するでしょう。 Re-Architectureチームの求人はこちら...
概要 StreamYardを使ってプレゼンする機会があったのでやり方をメモしておく。 Keynoteの発表者ディスプレイを表示しつつ、再生中のスライドだけをStreamYardで共有する方法について手順をまとめる。 必要なもの ディスプレイが2枚必要。 手順 Keynoteでプレゼン資料を開く。ウインドウで再生をクリック。 再生中のウインドウ画面右上、発表者ディスプレイをウインドウで表示。...
はじめに本記事では、Golangの標準パッケージであるnet/httpを用いて、HTTPルーターを自作する方法について解説します。 標準パッケージはあまり多くのルーティングの機能を提供していません。 例えばHTTPメソッドごとのルーティングの定義ができなかったり、URLをパスパラメータとして利用できなかったり、正規表現を利用したルーティングの定義ができなかったりします。 その為、実際のアプリケーシ...
今年もISUCONに参加してきた 去年に続き、今年も同じメンバーで参加してきた。 ISUCON参加はこれで3度目になる。 bmf-tech.com - Road to ISUcon bmf-tech.com - ISUCON10に参加してきた この1年間はメンバーと去年のKPTを元に、ボトルネックの調査までのフローやオペレーションの練習、全ISUCON過去問を見て出題傾向や解法のパターンなどの勉...
概要ECS on Fargate環境でDatadog APMを導入したときの雑メモ。 PHPコンテナイメージの調整php-fpmのイメージをベースとしたカスタムイメージを使っている。datadog-php-tracerをが必要なので以下のような感じでイメージに組み込んでいる。 ENV DDTRACE_VERSION=0.65.1 RUN curl -Lo datadog-php-tracer.a...
AWSコンテナ設計・構築[本格]入門を読んだ。 AWSのコンテナ関連サービスについてわかりやすく書かれた本。実務でコンテナ運用する機会があったため読んだ。 ...
概要長文の執筆をする際にテキスト校正を自動化しておきたかったのでやってみた。 構成テキストはGithub上で管理するようにしており、ディレクトリ構成は以下のようになっている。 ├── .circleci │ └── config.yml ├── README.md ├── documents │ ├── はじめに.md │ └── おわりに.md ├── images ├── .tex...
雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイドを読んだ。 OAuth2.0の入門として読みやすい。 ...
OAuth徹底入門 セキュアな認可システムを適用するための原則と実践を読んだ。 OAuthについて詳しく書かれた数少ない本。 入門書を読んだ後で、仕様書を読む流れなどで読んだおきたい。 ...
概要 OAuth2、OIDCのキャッチアップで読み漁った資料など。 仕様書 OIDC OpenID Connect Core 1.0 incorporating errata set 1 OpenID Connect Dynamic Client Registration 1.0 incorporating errata set 1 OAuth 2.0 Multiple Response Typ...
OAuth、OAuth認証、OpenID Connectの違いを整理して理解できる本を読んだ。 それぞれの違いについて入門者がわかりやすく理解できるように解説されている。 ...
OAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編)を読んだ。 OAuth・OIDCの基本的なセキュリティについて優しく解説されている。 ...
Gitでコミットを分割する方法のメモ。たまにやりたくなる。 // 分割したところを指定。対象commitをeditする。 git rebase -i HEAD~5 // 対象commitがunstageされる git reset HEAD~ // 任意の粒度でadd&commit git add ~ git commit ~ git rebase --continue ...
概要 Ubuntu 20.04.2 LTSでmysqlコンテナを起動しようとと以下のようなエラーが出てコンテナ起動に失敗する。 Could not open file '/var/log/mysql/mysql-error.log' for error logging: Permission denied” dockerfile 問題が発生したdockerfile。 dock...
M1 Macに買い替えたので手元の開発環境のためにmysqlコンテナを動かそうとしたら動かなかった。 エラーはこんな感じ。 runtime: failed to create new OS thread (have 2 already; errno=22) goのエラーだったので、アーキテクチャの何かしらの問題で動いていないのだろうと推測。 とりあえずdocker hubを見て8.0.17より最...