Fly.io のファーストインプレッション

Heroku の料金体系改定 Heroku’s Next Chapter | Heroku でアナウンスされている通り 11/28 から heroku の料金体系が改定されます。無料枠の Free と Hobby プランは 11/28 で廃止されます。そのため、多くのエンジニアが無料枠を求めて fly.io, railway, r…

開発環境の sqlite3@mac とステージング環境の postgresql@heroku をデータベースツールキット sequel とカスタム rake タスクで同期する

sqlite3 DB(on Mac) と postgresql DB(on Heroku) を同期する 私の場合 Rails の開発環境とステージング環境をそれぞれ以下のように構築しています。開発に伴う動作確認や実際の英単語の入力は開発環境(Mac mini)で行うことがほとんどなので、自然と両環境で…

Rails で Firebase Authentication を使う場合のユーザーモデルとテスト

Firebase Authentication を使う場合、ユーザーモデルとテストはどうする? Rails で個人用の英単語帳アプリを開発しています。開発環境は Rails 7.0.4 + Ruby 3.1.2 です。 ユーザ認証に Firebase Authentication を導入すると、フォームに入力した email と…

unbuffer と tee の組み合わせで標準出力とログのカラーを保持する

tee に渡すとカラー出力が打ち消されて色なしになってしまう 開発環境の構築などの定型処理は Rakefile でタスクを定義して、バッチ処理として実行しています。 この際にログも保持するようにしているのですが、単純に tee に渡すだけでは標準出力もログもカ…

Real World Exception Handling

奇数(odd)がだめなら偶数(even)にすればいいじゃない スプレッドシートからデータをインポート処理を書いています。指定地点 s から指定された h[:x], h[:y] の座標分、セルを切り取って配列(matrix) とハッシュ(kv_pair_matrix) のどちらからでもデータを利…

ansible の command module を使用して複数ホストのログを確認する

複数ホストへコマンドを一括実行したい時 複数ホストに一括してコマンドを実行したい時がたまにあります。繰り返す作業ではなく、ざっとログにエラーメッセージが出ていないかなどをアドホックに確認したい時など。これは ansible の command module を利用…

starship を使用してプロンプトにコンテキスト情報を表示する

「今、自分はどのコンテキストにいるのか?」を知る starship でプロンプトに表示可能な情報は大きく分けると 3 つです。 環境変数(ユーザ名, ホスト名, カレントディレクトリ, ...) git 情報(branch, status, ...) 言語情報(ruby, rust, node.js, ...) クラ…

ひとつの入力語に対して複数カラムを対象にして検索を行い結果をまとめる

「空気を読む」検索 Rails の検索には Ransack が重用されます。Ransack では基本的にモデルの単一カラムに対して cont(contain) や eq(equal) といった条件で検索が可能です。この場合、ユーザーがひとつの用語で複数のカラムを検索したい場合、別々の入力…

AWS CDK で EC2 を構築する時の地雷処理

古い AWS アカウントの呪い(?) 私の AWS アカウントでは Tokyo リージョン(ap-northeast-1) の Availability Zone の a が使用できません。使用できるのは b と c だけです。これはアカウントを作成した時期(2011年)に関係しているようです。比較的新しい時…

Tenets of SRE を Github Issues/Pull Requests のラベルにする

Tenets of SRE を Github Issues/Pull Requests のラベルにする Github にデフォルトで用意されているラベル(bug, duplicate, enhancement, ...) はアプリ開発向けです。インフラ開発向けの課題管理には SRE Book で定義されている Tenets of SRE(availabili…

バッチ処理を cron から k8s cronjob に移行する

Shamshir のスタンドアローン版を k8s(minikube) の cronjob に移植した記録です。 cron でバッチを動かす時の問題点 node, ruby, python 他インタプリンタ系の言語でプログラムを作ると nodenv + npm/yarn, rbenv + bundler, pyenv + pip などのエコシステ…

Chrome で検索対象の言語を英語のみにして検索する

設定方法 URL バーを右クリックして「検索エンジンを管理」のメニューを表示します。 メニューを以下のように修正します。検索エンジン名とキーワード(トリガーとなるキー)をお好みで指定します。 https://www.google.com/search?gl=us&hl=en&gws_rd=cr&pws=…

aws-minikube: ELB とも連携できてフットワークが軽い AWS k8s 環境

k8s 環境として minikube, eks, aws-minikube を比較してみました(k3s は未経験)。個人的には aws-minikube がコスト面/機能面でよさそうに思えたので紹介です。 aws-minikube とは? EC2 1 台で k8s 環境が整うツールです。Red Hat 社の Jakub Scholz 氏が 2…

Getting started with Amazon EKS (2) とコスト計算

前回 に引き続き、EKS でサンプルの nginx pod を外部公開するまでを実施しました。 docs.aws.amazon.com Service の外部公開 Getting Started with Amazon EKS で紹介されているデプロイだと Type:ClusterIP でクラスタ内部への公開なので、これを type: Lo…

Ansible における抽象/具体モデルと誰が/何をするの考え方

Ansible の group と host, role と task の関係が 公式ドキュメント からだと個人的にわかりにくかったのでまとめた図です。頭の中でなんとなく理解していたことを図や表に起こしてみることで理解が促進されました(公式ドキュメントにこういった説明があれ…

Node.js のテストフレームワークとデバッガ

テストフレームワーク Jest shamshir に細かなバグを見つけたので少しの間、我流のプリントデバッグをしていたのですが、継続的なメンテナンスを考えてテストフレームワークを導入することにしました。参考にしている「ハンズオン Node.js」の「8 章 ユニッ…

Getting started with Amazon EKS の地雷処理

2 年ぶりに Kubernetes を使います。以前、仕事で AWS とオンプレそれぞれにクラスタを構築して運用していたもの、構築部分は k8s プロフェッショナルなエンジニアが身近にいたせいでおんぶにだっこの状態でした。過去に Kubernetes The Hard Way を AWS で…

Shamshir を Github Marketplace にリリースしました

ShamshirLabeling という名前でリリースしています。よろしければお使いください。 github.com

Github Sponsors に登録するには

大きな流れ Introduction (5,000 characters) と Short bio (250 characters) を書く(自己紹介と略歴) Sponsor tiers や Goals を決める($1/月で 10 人が目標、スポンサーになってくれた方への特典など) Github と連携する Stripe のアカウントを作成し、銀…

Shamshir が Github Actions に対応しました

従来のスタンドアローンでの起動に加えて、Github Actions からも起動できるようになりました。よろしければお使いください。 https://github.com/kyagi/shamshir uses: kyagi/shamshir@v1 トリガーのイベントとして「PR のレビューや修正」だと数が多くて G…

Github で PR の APPROVED 数に応じてラベル(releasable) をつけたり外したりする

Dismiss stale pull request approvals when new commits are pushed Github の Pull Request のレビュー後、APPROVED の数に応じてラベルをつける運用を自動化します。APPROVED 後にコミットがあった場合、自動的に APPROVED が取り消される運用(画像) での…

Web の QMK Configurator でキーマップを作成してからローカルの QMK Firmware でビルド/書き込みを行う

Corne Cherry で自分専用のキーマップを作成してファームウェアをビルド、書き込みする手順です。ビルドガイドの補足情報としてお役に立てば幸いです。 Corne Cherry のファームウェア書き込みについて ビルドガイドにもある通り、QMK Firmware を使用してフ…

HAProxy 2.0.1 の Docker イメージは prometheus 機能がデフォルトでビルドされる

Dockerhub の haproxy:2.0.1 では prometheus へ統計情報を export する機能がデフォルトで組み込まれる HAProxy 2.0.1 の Docker イメージから拡張機能である prometheus.o がデフォルトのビルドオプションに含まれるようになった。これで前回の記事で紹介…

HAProxy 2.0 (-dev7) の prometheus サポート拡張機能を利用してマルチスレッドの統計情報を exporter なしで正しく取得する

HAProxy 1.7 から 2.0 へ移行 前回 試した通り、HAProxy 1.7 + haproxy-exporter の組み合わせではマルチプロセス時に統計情報が正しく取得できない。代替案として prometheus サポートが提供される HAProxy 2.0 (dev7) を試してみた結果、こちらでうまくい…

HAProxy 1.7 ではマルチプロセス時の統計情報が正しく取得できない

HAProxy 1.7 をマルチプロセスで動かした場合、統計情報がおかしくなる Kubernetes 上で haproxy を HTTP/HTTPS のロードバランサとして使用したところ、動作的には問題ないが prometheus/grafana で出力する統計情報(stats)が正しくないことに気がついた。…

meishi キットからはじめる自作キーボード入門

meishi キットとは 遊舎工房さんで販売している自作キーボードの入門セットです。「名刺」サイズの基盤に4つのキーを載せたミニキーボードの組み立てを通して、自作キーボードの作業の概要を把握できるようになっています。費用は meishi キット(1,000 円ほ…

Kubernetes The Hard Way を AWS で実施する

Kubernetes The Hard Way とは Kubernetes の公式ドキュメントで Setup の項目をたどると kubeadm を使う例が記載されている。いくつかの機能はまだ alpha/beta であるものの公式でも kubeadm をクラスタ構築に使う流れを後押ししたいように見える。確かに k…

世界各都市の現地時刻を表示するコマンドを作った

仕事上、東京とロサンゼルスの時間を気にする必要があるので、時差を知りたい時は環境変数 TZ にそれぞれの都市を入れて date していたのを peco を使って拡張してみた。timedatectl list-timezones で抜き出したタイムゾーンのリストを peco でフィルタして…

IntelliJ から Docker イメージの開発作業を行う

IntelliJ の Docker Integration プラグインを使う Dockerfile の修正、ビルド、イメージの動作確認を行うのに、今まではターミナルから docker build -> run -> attach をしていたけれど、全て IntelliJ のインターフェイスでサイクルを回した効率がよかっ…

mac mini 2018 向けのディスプレイケーブルとマイク

mac

年末に mac mini 2018 を購入した際に発生した問題がふたつ。 それまでのディスプレイケーブルが使えない。USB Type C to HDMI のものを書い直さないといけない。 マイクがない(マイクがないと日課のオンライン英会話が mac mini できない)。 しょうがないの…