Rubyのシンボルについて
2024年5月14日概要 Rubyのシンボルについて書く。 シンボルとは 任意の文字列と対に対応するオブジェクト。 内部実装では、整数として管理されている。 :symbol :'symbol' %s!symbol! シンボルはSymbolクラスのオブジェクトであり、文字列はStringクラスのオブジェクトである。そのためメモリ効率が良い。 文字列と違い、シンボルは同一のオブジェクトである。 # ...
概要 Rubyのシンボルについて書く。 シンボルとは 任意の文字列と対に対応するオブジェクト。 内部実装では、整数として管理されている。 :symbol :'symbol' %s!symbol! シンボルはSymbolクラスのオブジェクトであり、文字列はStringクラスのオブジェクトである。そのためメモリ効率が良い。 文字列と違い、シンボルは同一のオブジェクトである。 # ...
マスタリングTCP/IP―入門編―(第6版)を読んだ。 例えが分かりやすくて読みやすい。 TCP/IPの基本からネットワークについての理解を進める入門書として良い教科書だと感じた。 ネットワークはつい苦手意識を持ってしまっておざなりになっているが、この本は読みやすくて良かった。 ...
健康になる技術 大全を読んだ。 エビデンスを強く意識した健康についての本。 エビデンスについての捉え方や考え方を前提として整理されている。参考文献の量に圧倒される。 食についての章に最もページを割かれているが、食事は健康にとって最も重要な要素の一つなのでこれは有り難い。 食については、一概に健康に良い・悪いではなく、リスクが高い・低い程度に捉えるのが良いのだろうと感じる部分が多かった。エビデンスに...
内部構造から学ぶPostgreSQL―設計・運用計画の鉄則を読んだ。 PostgreSQLを運用するに当たって知っておきたいことが設計・運用の観点で網羅されていて良い。 MySQLにもこういう本ないかなぁ。ありそう。 ...
PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用までを読んだ。 PostgreSQLを触ったことなかった自分にはちょうど良い入門書だった。 アプリケーションの実例の章が割と多めにページを割かれているが、PostgreSQLの基本的なことはカバーされている。 ...
パーフェクトRuby on Railsを読んだ。 Ruby on Railsに入門したくて読んだ本。網羅的に書かれているのでフレームワークの機能を把握するのに役立つ。 ...
プロを目指す人のためのRuby入門を読んだ。 業務レベルで役に立ちそうなことが詳細に書かれている。読みやすい。 ...
パーフェクトRubyを読んだ。 パーフェクトシリーズは他にはPHPとJavaScriptしか読んだことないが、安定のパーフェクトシリーズといった感じ。 ...
コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識を読んだ。 改訂版が出ていたので読み直した。 ハードウェアからソフトウェアまでの流れを理解することができる。 プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識もセットで読むと良い気がする。 ...
プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識を読んだ。 改訂版が出ていたの読み直した。 情報系の学校であればこういうことは講義で学んでいる気がしている。 ...
概要 これまでgoblinという自作HTTPルーターを自分のアプリケーションで使っていたが、Go1.22でServeMuxの機能が拡張されてからはServeMuxを使うようになった。 この記事では、Go1.22で追加されたServeMuxの機能や性能について整理し、これからのGoのHTTPルーター選定について考えてみる。 Go1.22で追加されたServeMuxの機能 Go1.22rcの公開時にS...
図解 人材マネジメント 入門 人事の基礎をゼロからおさえておきたい人のための「理論と実践」100のツボ 人事の関心事について知ることができる本。人事担当者でなくとも読みやすい視点で書かれている。 ...
「人事・労務」の実務がまるごとわかる本を読んだ 人事・労務の仕事についてあれこれ学べる本。 ...
改訂2版 最新 知りたいことがパッとわかる 社会保険と労働保険の届け出・手続きができる本 を読んだ。 社会保険・労働保険についてパッと学べることができる本。各種手続きや書類の数、法改正など大変そうだ... ...
ALL for SaaS SaaS立ち上げのすべてを読んだので気になったことをメモする。 ASPとSaaSの違い シングルテナントなのがASP、マルチテナントなのがSaaS と語られることもある リカーリングレベニュー 繰延収益 企業の売上の内、継続可能性のあるもの ユニットエコノミクス Unit ecnomics = Life time value/Customer Acquisi...
正しいものを正しくつくる プロダクトをつくるとはどういうことなのか、あるいはアジャイルのその先についてを読んだ。 プロダクト開発のプロセスのあれこれが言語化された本。気になったことをメモしておく。 プロダクトづくりのマネジメントを操作する2つのレバーは関係性がある リスクマネジメント 要求リスク、技術リスク、要員リスク、政治リスクをいち早く検知・対処する 期待マネジメント ステークホルダー間...
カイゼン・ジャーニーを読んだので感想をメモする。 感想 ストーリー調なのが読みやすいような読みにくいようなという印象を持ったのが、読み終わってみると「越境」というものを追体験するには分かりやすい形式だなと感じた。 登場するアジャイルのプラクティスは、他で学んだことがあるので目新しさは個人的にはなかった。 ただこの本ではそうしたプラクティスの詳細よりも「越境」することの目的や意義にメッセージ性を強く...
概要 ISUCON環境を利用してシステムメトリクスをちゃんと見れるようなろうという勉強会を定期的に行っているので、そのまとめを残す。 Webエンジニアが知っておきたいインフラの基本 インフラの設計から構成、監視、チューニングまでを参考図書とし、第5章以降の内容を実際に手を動かして確認するような形で行っている。 環境はConohaでISUCON8のイメージを利用してサーバーを立てている。 プラン:メ...
概要 カンファレンスなどの登壇イベントでCFPを提出することがあるが、自分がどのようにCFPを書き上げ、提出しているかについてポエムを書いておく。 これまでの実績 過去CFPを提出した回数が7回、採択率は100%(うち1件は諸事情により辞退)であった。 登壇したイベントは、PHPのカンファレンスとGoのカンファレンスで、PHPのカンファレンスのほうが登壇回数が多い。 cf. https://spe...
PHPCompatibilitiyを使ってPHP8.2の互換性チェックを行う際にハマったことのメモ。 ハマったこと 2023年10月現在、latestである9.3.5をインストールしてもPHP8.2の互換性チェックはできない。 9.3.5は2019年リリースで、最近のPHPのバージョンにまだ対応していないらしい・・・ 解決策 もしかして開発止まってる?と一瞬思ったが、その様子はない。 develo...
達人に学ぶDB設計徹底指南書: 初級者で終わりたくないあなたへを読んだ。 体系的に解説されていて分かりやすい。 ...
概要 MySQLのロックについてまとめる。 MySQLのバージョンは8系を想定する。 検証環境 検証に使う環境はdocker-composeで用意した。(1コンテナだけなのでcomposeを使わなくも良いのだが..) . ├── docker-compose.yml └── initdb.d └── 1_schema.sql docker-compose.yml version: &#x...
エンジニアが学ぶ金融システムの「知識」と「技術」を読んだ。 システム的な話より金融のドメイン知識が多めの印象。銀行、保険、証券、クレジットカード会社などの業務やシステムについて説明されている。決済システムに関わるような人でも役立つ本かなと思った。 ...
エンジニアが学ぶ会計システムの「知識」と「技術」を読んだ。 会計や簿記の知識が前提になり、どんなインプットからアウトプットを出すかということが説明されている。この分野には苦手意識がある。。。 ...
エンジニアが学ぶ在庫管理システムの「知識」と「技術」を読んだ。 在庫管理の難しさを知った。生産、販売、購買、会計、原価と関係するシステムもあり、在庫管理に求められる機能の複雑さを感じた。 ...
エンジニアが学ぶ生産管理システムの「知識」と「技術」を読んだ。 生産管理システムに限った話ではないが、業務フローを深く理解することがシステムの品質に大きく関わるなぁというのをひしひし感じた。 ...
エンジニアが学ぶ物流システムの「知識」と「技術」を読んだ。 モノの流れ、モノの管理をどのように最適化するかということが業務知識とともに語れているのが興味深かった。 ...
インデックスとは テーブルに格納されているレコードを高速に取り出すための仕組み 以下のようなO(n)問題を抱えたクエリがあるとする。 SELECT * FROM users WHERE first_name = ‘Tom’ このクエリのパフォーマンスを上げるためには、以下のようにIndexを貼る。 ALTER TABLE users ADD INDEX (first_name) メリット・デメリッ...
理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)を読んだ。 理論から学ぶことでRDBに対する向き合い方、考え方を整理することができる。集合論や論理学は理解しきれていないので今後の課題。 ...
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへを読んだ。 「なるほどこういうふうに書けるのか〜」といった感じにSQLの引き出しが増えた気がする。 ...
初めてのSQL 第3版を読んだ。 SQL入門書として分かりやすい。駆け出しの時に読んでおけば良かった。基本的なことを振り返るにもちょうどよい。 ...
SQLアンチパターンを読んだ。 定番of定番。分かりやすい解説でアンチパターンが紹介されている。 ...
SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)を読んだ。 SQLを書くときに意識しておきたいことが整理されている。 ...
NULLとは 「値が存在しない」または「値が不明」ということを示す。 値ではないため値のように比較できない。 空集合(要素が0個の集合)ではなく、存在しない集合と見なされる。 リレーショナルモデルに反するNULL リレーショナルモデルは閉世界仮説(真であると判明しないものは全て偽であると仮定すること)に基づいており、NULLはこれに反する。 リレーショナルモデルでは2値論理が元となっているため、真...
キャパシティプランニングの目的 システムのリソース管理を目的とし、リソースを効率的に利用することを目指す。 キャパシティプランニングのプロセス キャパシティプランニングは概算と詳細を使い分ける。不必要に詳細に踏み込まないようにし、必要な時に適切な詳細を用意する。 アプリケーションのパフォーマンス要件を定義する レスポンスタイム、スループット、同時接続数、負荷性能など。 現在のインフラの稼働状...
IDとは あるものを一意に特定するもの。 集合論において、あるものと属性が1:1で対応することを全単射と呼ぶ。 全単射になっているものはIDとして機能とする。 IDを考えるときは、単数に対するものか、複数(グループ)に対するものか、複数であればどのような粒度であるのか?などを考慮する必要がある。ex. カニという属性を考えるとして、どんな種類なのか?何科目なのか?色は?名称は? 一見一意性を持たな...
キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置を読んだ。 古い本ではあるが、キャパシティプランニングについての基本的な考え方を学ぶことができる。 オンプレが前提とはなっているが、クラウドにおいても転用できる考え方があると思う。 ...
QPDFをインストールする。 brew install qpdf 対象ファイルのパスワードを解除する。 qpdf --decrypt input.pdf --password=PASSWORD output.pdf 〜完〜 ...
Kubernetesの各コンポーネントについて Control Plane Components kube-apiserver クラスタを操作するためのKubernetes APIを提供するサーバー。水平スケールが可能な形に設計されている。 etcd 全てのクラスタの状態管理を行うための高可用性のキーバリューストア。 kube-scheduler ノードが未割り当ての新しく生成されたPodをどの...
概要 Cloud Spannerの知見を漁ったのでメモ。走り書きなのでカテゴライズしていない。 メモ 計画メンテナンスやスキーマ変更のためのダウンタイムなし、最大99.999%の可用性を保証 Cloud SQLはダウンタイムありの計画のメンテナンス Cloud Spannerのアーキテクチャ構成 クライアント R/Wするコードが実行されているサーバーやコンテナ クライアントライブラリを使うと...
bufferサイズを記録したかったときに調べていたのでメモ。 large_client_header_buffers ngx_http_core_module モジュールに含まれるディレクティブ 構文: large_client_header_buffers number size; デフォルト: large_client_header_buffers 4 8k; コンテキスト: http, s...
SaaSなんもわからん!からSaaS完全に理解した!に近づくために参考になりそうな資料をまとめておく。 資料 docs.aws.amazon.com - SaaS アーキテクチャの基礎 docs.aws.amazon.com - SaaSレンズ docs.aws.amazon.com - SaaS Tenant Isolation Strategies: Isolating Resources ...
実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策までを読んだ。 メール技術について体系立てキャッチアップしたことがなかったので大変役に立った。 ...
rune型とは int32のエイリアス型で、Unicodeのコードポイントを表す。 Unicodeは符号化文字集合や、文字符号化方式などを定めた文字コードの標準規格で、世界の多様な言語や書式、記号に番号を割り当てたもの。 符号化文字集合とは、コンピューター上で扱う文字や記号を重複しないように集めた文字セットのことであり、文字と文字に割り当てられた番号の対応表を指す。文字符号化方式は、文字に割り当て...
GoでHTTPサーバーを書いているときなどオレオレ証明書がほしいときに役立つワンライナー。 go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -rsa-bits 2048 -host localhost cert.pemとkey.pemが用意できる。 openssl使ったりmkcert使ったりしていたけどGo使っていたらこれで良さそう...
入門 考える技術・書く技術――日本人のロジカルシンキング実践法を読んだ。 クリティカルシンキングとかロジカルシンキングとかそのへんのテーマの本も一読しておくと理解が深まりそう。昔読んだその手の本が割と役立った。 ...
指数バックオフ(Exponential backoff) リクエストの遅延を乗算的に増加させる(リトライ間隔を遅延させていく)形で失敗したリクエストを定期的に再試行(リトライ)する手法。 ex. 1回目のリトライは1秒後、2回目は2秒後、3回目は4秒後、4回目は8秒後... リトライ設計においては、バックオフのみに依存するのではなく、リトライ上限やタイムアウト(接続タイムアウトとリクエストタイムア...
この記事はMakuake Advent Calendar 2023の24日目の記事です。 概要 10年以上運用しているサービスのPHPとFuelPHPのアップデートを行ったプロジェクトのレポーティングをする。 アップデート対象 メインサービス(会社が運用する主要なサービス)のアプリケーション FuelPHP利用 メインサービスが利用している社内ライブラリ(2つ) PHP製 メインサービス...
この記事はMakuake Advent Calendar 2023の19日目の記事です。 なんでこんな大遅刻かというと、唯一埋まっていなかった19日の枠を急遽埋めようと思って投稿したため。元々掴んでいた枠ではないので遅刻ではない。 概要 去年くらいからGoのnet/httpに含まれるServeMuxの機能拡張の提案が出ていてウォッチしていたのだが、最近Closedになったらしい。 cf. net/...
概要 gRPCとProtocol Buffersについて改めておさらいしておきたかった。 リンク gRPC grpc.io 公式ドキュメント zenn.dev - 作ってわかる! はじめてのgRPC まだ読んだことなかったので読んでみたのだが大変勉強になった。日本語情報はまずこれ読んでみると良いかも。 www.wantedly.com - gRPC Internal - gRPC の設計...
最近モブプロを人生で初めて経験したので、その体験の良さを忘れないようにメモ書きしておく。 モブプログラミングとは 3人以上のメンバーで1台のコンピューターを共有してプログラミングする手法のこと。 通常コードを書くドライバーと、それを支えるナビゲーターの二手に分かれて作業をする。 Pros / Cons Pros ナレッジ共有がしやすい 同期的なフィードバックを得ることができる 認識を合わせやすい...
OpenAPI Specificationとは 言語依存のない形でHTTP APIの仕様を定義するためのフォーマット。YAMLまたはJSONで記述する。 Swagger SpecificationはOpenAPI Specificationの前身である。 OpenAPIを採用するメリット・デメリット メリット REST APIの標準化されたフォーマットであり、開発者間のコミュニケーションコストを...
Go1.18から追加されたWorkspace modeを使ったことがなかったので、使ってみた。 Workspace modeとは Goのマルチモジュール構成を便利するための機能。 Workspace modeの使い方 次のような構成を用意する。 . ├── bar │ └── bar.go └── foo └── foo.go // foo.go package foo func ...
世界一流エンジニアの思考法をちょっと前に読んだのでメモ。 この本で書かれていることはどこかで聞いたり学んだりしたことが多かったので個人的にはあまり目新しいことがなかったのだが、2つほど頭に留めておきたいことがあった。 1つはBelazyであれということ。より少ない時間で価値を最大化しようという考え。 これは一人でも実践できるマインドセットだが、周りの環境もBelazyであることがより大事かなと思っ...
2023年の振り返りと来年の抱負 今年も1年を振り返って来年の抱負を記す。 2022年の振り返りと来年の抱負 2021年の振り返りと来年の抱負 2020年の振り返りと来年の抱負 2019年の振り返りと来年の抱負 2018年の振り返りと2019年の目標 プライベート 昨年やれなかったことを今年はやれたか振り返ってみる。 Kubernetes→CKAの取得には至らなかったが、勉強にはある程度時間を...
開発生産性についての記事を漁った。 記事リスト github.com - dora-team/fourkeys fourkeysを計測するためのツール dl.acm.org - The SPACE of Developer Produtivity SPACEについての論文 www.atlassian.com - 5 つの役立つアジャイル KPI 指標 bliki-ja.github.io...
ソフトウェアのアーキテクチャと組織の設計に関して記事を漁ってみたので、読んだものをリストアップしておく。随時読んだものを追加していこうと思う。 記事リスト logmi.jp - 状況に合わせたトレードオフで“ベター”を目指す 組織設計における、書籍『ソフトウェアアーキテクチャ・ハードパーツ』の活用 engineer.crowdworks.jp - 変化に適応するソフトウェアアーキテクチャと組織構...
Aurora Serverlessについて興味を持ったので記事を漁ってみた。 チェックした記事 aws.amazon.com - Amazon Aurora Serverless techblog.zozo.com - Aurora Serverless v2を本番導入した話 〜検討や導入時のポイント・得られた効果について〜 www.plan-b.co.jp - Aurora Serverles...
概要 GrafanaでContact Pointsがプロビジョニングがいつの間にかできるようになっていたので、プロビジョニングを設定してみる。 環境 grafana-oss 10.0.1 Docker Docker Compose 設定方法 雑メモなのでDocker Composeを使ったビルド周りの説明は割愛する。bmf-san/gobel-exampleを参照。 provisioning/...
この記事はMakuake Advent Calendar 2023の22日目の記事(ポエム)です。 概要 ソフトウェア開発のプロジェクトにおける不確実性について、自分が日々どのように向き合っているかを言語化してみる。 アジャイル関連の本を読み漁ったり、PMBOKの勉強をしたりと体系的に学んできたわけではないので、経験に基づいた主観的な話になる。 前提 自分がどのような環境で不確実性に向き合っている...
概要 モニタリングのシステムにおけるPull型とPush型のアプローチの違いについてまとめる。 Pull型 監視サーバー側で監視対象ホストについて設定をし、監視サーバーから監視ホストにデータを取得しにいく。 ex. Prometheus、Nagios、Zabbixなど PrometheusはPull型の欠点を補うかのように、exporterというPush型のようなアプローチのような仕組みがある。e...
概要 構成図レベルでのアーキテクチャの設計をする時の進め方として個人的に良いと思ったやり方を1つ取り上げてまとめておく。 進め方 事前に要件定義や調査がある程度済んでいるという状態を前提として、アーキテクチャの構成図を書きながら設計を進めていく作業の取り組み方法について書く。 といってとても単純で、「最初からゴールの絵を描こうとせずに、段階を踏んで設計する」というだけである。 上図のように...
GoReleaserを使ってGoのアプリケーションをクロスコンパイルしてバイナリ配布をやってみた。 GoReleaserとは GoReleaserは、Go言語で書かれたアプリケーションのビルド、パッケージング、およびリリースを自動化するツール。 クロスコンパイル、バイナリの圧縮、アーカイブの作成、GitHubなどのプラットフォームへのアーティファクトのアップロードができる。 GitHub Acti...
ADRのテンプレートファイルを生成するだけのMakeコマンドを作成したのでメモっておく。 コマンド .PHONY:help help: ## Print help. @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n"...
概要 GraphQLの素振りをしていたので調べたことについてまとめておく。 親切なチュートリアルが用意されており、始めやすい。 cf. www.howtographql.com GraphQLとは Meta社によって開発されたWeb API開発のためのクエリ言語。 GraphQLはGraphQL Foundationによって管理されており、Meta社はその一員である。 GraphQLの仕様と全ての...
概要 サービスメッシュについて調べたことをまとめる。 サービスメッシュとは サービス間(分散システム)の通信を管理するためのネットワークインフラストラクチャのこと。 一般的にはサービスにプロキシをサイドカーとして追加することで構成する。 サービスメッシュが解決すること 可観測性の向上 サービス間の通信の管理・制御 サービス間の通信のセキュリティ向上 サービスメッシュの機能 サービスディスカバ...
概要 CircleCIでphpunitの並列テストを行うアプローチについてかく。 PHPUnitの設定ファイルを生成するスクリプトを用意する #!/bin/sh basePath="/foo/bar" testFiles=$@ xmlFileStringData="" for file in $testFiles; do xmlFileStrin...
概要 Goでlog/slogを使ったcontextual loggingについてまとめる。 log/slogとは Go1.21で追加された構造化ロギングのためのパッケージ。 構造化ロギングとは、ログを構造化されたデータとして出力すること。 今まではGoで構造化ロギングをする場合はサードパーティのパッケージを利用するか、自前でスクラッチするかしか手段がなかったが、今後は標準パッケージも視野に入るよう...
More Effective Agileを読んだ。 アジャイルを実践するためのプラクティスがまとめられた本。 アジャイルワークショップの教科書として活用させてもらった。 ...
概要 モジュラモノリスについて調べたことをメモする。 モジュラモノリスとは モジュール分割をしたモノリス モジュール分割はドメインによる分割が一般的に見えるが、機能分割や技術分割など様々なパターンを検討することができる モノリスと同じく単一のデプロイメントパイプラインを持つ メリット モジュールが分割されているのでモジュール単位で開発を独立して行うことができる マイクロサービスへの移行が容易...
概要 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種類を用意して、同時に走査していく方法。 これが何に役立つかというと、例えば次のような例題を解くのに役立つ。 例題 単...