メンテのいらないソフトウェア

ソフトウェアエンジニアとして働き始めて 20 年以上になります。 元々ソフトウェアでいろいろ作りたくて就いた職業なので、結構な数のプロダクトを開発してきました。 私がメインで開発したもので OSS として出ているものでは、 [yrmcds]: memcached クロー…

OpenTelemetry 良い感じ

最初に断っておきますと、OpenTelemetry を良く知っていたり真面目に調査しようという人が読むべき内容はここにはありません。 公式ドキュメントなりをご参照ください。これは最近 OpenTelemetry を使いだした一般人の感想記事です。 さて、いけてる Web 開…

Go 1.21 に入る予定の log/slog パッケージの話

Go

ログ出力をどうするかっていうのは、Go 書くときに常にちょっとした悩みの種でした。 標準の log パッケージはあるものの、実用には機能が不足していると見なす人が多いためです。 かくいう私もその一人で、近年は Kubernetes 界隈でよく使われている以下を…

PRECIS 知ってますか?

昨今 ID 管理系の業務をやっていて、まあ色々学びがあるんですがそのうちのひとつ、PRECIS について。 PRECIS というのは RFC 8264 で規定される、ユニコード文字列を適正に比較するためのフレームワークです。 PReparation, Enforcement, and Comparison of…

アトピーとデュピルマブ

今年は一本も記事書いてなくて、このままだとあれかなということで近況報告がてら。 前の業務は Kubernetes まわりの技術で積極的に情報出していたんですけど、目下の取り組みはまだ世に出せないことが多くてネタに乏しいです。 というわけで生活的な話。 私…

ダイエット

35を越えたあたりから毎年堅調に体重が増えてきて、40を超えてからは毎年 1 kg 近い体重増加ペースになってました。 さらに去年からは COVID-19 のため在宅勤務が多く、運動が減って明らかにカロリー過剰を感じてました。 そこでここ 2 か月ほど人生初めての…

root 権限がいらない Squid Docker イメージを作った

Squid と言えば Web proxy のド定番なわけでコンテナ化して走らせたいことも多いでしょう。 巷に転がっている Squid 用の Dockerfile は root 権限が必要なものが多く root 権限が不要なものが見当たらなかったので作ってみました。 以下に置いてあるのでご…

Kubernetes 専門家として知るべき 47 のこと

この記事は私が過去 3 年ほど Kubernetes に携わる中で学んだ、ちょっと見つけにくい知識をまとめたものです。 特にカスタムコントローラーを開発するような人に必要となる知識群です。 感想とか指摘とかあれば Twitter までお寄せください。 更新履歴 2021-…

あけまして Ubuntu 20.04 開発環境

あけましておめでとうございます。年賀状代わりに開発環境の構築記事を差し上げます。 いやわりと真剣に、開発環境にはその開発者の近況が表れていると思うのですよ。 いっちょあなたもどうですか 閑話休題。 以下今日やった Ubuntu 20.04 LTS のインストー…

モブプログラミングに向いてない私の話

新型コロナウィルスの影響も長引いてますが、皆さま無事お過ごしでしょうか。私は幸い無事です。 日ごろチームでソフトウェア開発をしているのですが、近年社内ではペアプログラミングやモブプログラミングが流行しています。 私のいるチームでもここ二年ほ…

HTTP 100 Continue in Go

Go

使おうとするたびに忘れて調べなおすのでメモ。 HTTP のレスポンスコード 100 は、クライアントが大きなデータを送る前に送信ヘッダレベルで リクエストの受付が可能か調べて、処理可能ならいったん返すためにある。 用途例: Authorization ヘッダによる認…

To mock, or not to mock, that is the question

さて、テストコードなんて書きたくなかった私ですが、世の流れには逆らえず今はせっせとテストコードを量産しています。 開発完了=試験完了=出荷可能が求められる忙しない世の中でありますから。 目下開発しているのは Kubernetes 向けのネットワークソフ…

kubebuilder v2 で webhook 開発

仕事で、データセンターのアーキテクチャを刷新するプロジェクトを進めてます。 Kubernetes を中心としているので、必然的に Kubernetes 上で動作するアプリケーションを開発する機会があります。 Kubernetes は API サーバー (kube-apiserver) にリソースを…

code-server で実現する Windows 上で Linux 向けの快適な Go 開発環境

業務で Linux 向けの Go プログラムを多数開発しています。 しかしながら、開発している機材の OS は好きこのんで Windows です。 在宅から勤務するときに、Windows のリモートデスクトップが最強すぎるので手放せないのが大きな理由です。 そんなわけで、Wi…

Go で GitHub v4 GraphQL API を使って draft pull request を自動作成

先日 GitHub に「開発中のためまだマージするべきでない」プルリクエストを作ることができる Draft Pull Request 機能が追加されました。 今の業務では複数人でモブプロしたりする関係で、開発途中のブランチを GitHub に push してひとまずプルリクエストを…

WSL で快適な Go 開発環境を作る

Go

個人的な備忘録です。 仕事上 Ubuntu をターゲットに Go のプログラム開発をする必要があるのですが、従前 Windows デスクトップに Hyper-V の Ubuntu で Emacs で開発していたところをVisual Studio Code(vscode) に開発環境を変えたいと考えました。理由は…

golang.org/x/crypto/ssh で固まらないようにする

Go

最近 CKE というベアメタル向けの Kubernetes 管理ツールを作っています。 ブートストラップツールではなく自律的・継続的にクラスタの構成を修正していくツールで、以下が特徴です。 ネットワークプラグイン非依存 HA 対応 CKE 自体の高可用性 今日は CKE …

builderscon tokyo 2018 二日目

初日についてはこちらをどうぞ。 builderscon tokyo 2018 一日目 - 誰かの役に立てばいいブログ 二日目は QUIC+TLS1.3 や Jepsen など楽しみにしていたセッションと、私も内容に関わったセッションなどに参加しました。

builderscon tokyo 2018 一日目

builderscon tokyo 2018に参加してきましたので、メモ。 仕事で Kubernetes を扱っているので、その周辺技術の話を聞いてきました。 初日はサービスメッシュ関係がたくさん。

NVMe ストレージの揮発性内部キャッシュ

TL;DR HDD 同様、NVMe ストレージも nobarrier するなら内部キャッシュを無効化したほうがいいケースがあります。 分かる人向けに端的に書くと、NVMe 仕様には volatile write cache の有無と、有効化/無効化切り替え、および有効な場合にデータが消失するケ…

SRE 本は二度以上読む価値がある

@tamagawa_ryuji 氏からこの度和訳して発売された「SRE サイトリライアビリティエンジニアリング」をご恵贈いただきました。 英語の原本は昨年発売されており、Google のサービス運用について実践的な知見が得られる貴重な書籍ということで、去年のうちに英…

iOS でクライアント証明書認証

長年 Android を使っていたんですが、最近 iPhone にしまして。 cybozu.com にリモートからアクセスする際、クライアント証明書で認証する「セキュアアクセス」という機能があるのですが、Safari で使うには証明書を読み込ませておかねばなりません。 Androi…

http.Response を返すような関数は作らないのが賢明

go Go

Go 1.7 から本体に入った context パッケージは便利、というより今や必須の道具です。以下のように書くことで、一定時間で処理をキャンセルできたりします。 func slowOperationWithTimeout(ctx context.Context) (Result, error) { ctx, cancel := context.…

「みんなの Go 言語」は忙しいプログラマこそ読むべき本

@songmu 氏からご恵贈いただいた「みんなの Go 言語」(みんGo)、早速拝読しました。 書評としてはタイトル通り、なのですがそれではあんまりなのでもう少し。 本書でも述べられている通り、Go 言語は早ければ一日で大体学べてしまう学習効率の良さが魅力で…

Windows の Path をコマンドラインから設定する

メモです。C:\Go\bin にパスを通したいとして、以下のようにするとマシン全体の Path に追加できます。 PowerShell を管理者権限で起動する 以下を文字通りに入力する [Environment]::SetEnvironmentVariable("Path", $env:Path+";C:\Go\bin", "Machine") コ…

memcached の二つのプロトコルと API デザインの難題について

yrmcdsという memcached のクローンを開発・メンテナンスしています。yrmcds は memcached を機能拡張しているので、クライアントライブラリも独自に開発する必要があり、libyrmcds という C/C++ 用クライアントライブラリとそれを基にした php-yrmcds とい…

PHP7 で yrmcds クライアントの拡張を動くようにした

先日 PHP のメジャーバージョンである [PHP7][] がリリースされました。 性能向上のために内部構造が大きく変更されているため、PHP5 向けの拡張モジュールは大幅に書き直しが必要です。 拡張モジュールを開発したことがある人はご存知の通り、PHP の内部 AP…

LXC 特権コンテナ HowTo

Ubuntu 14.04 の LXC で CentOS 6 の特権コンテナをたてて外部から SSH できるようにした記録。 Keywords: Ubuntu LXC CentOS block device ブロックデバイス 特権コンテナ

先頭行だけ grep してファイル名を表示したい

/usr/local/bin にある #!/usr/bin/python3 をみつけたい、場面です。 こんな感じ。 find /usr/local/bin -type file | xargs awk '/python3/ {print FILENAME} {nextfile}' 1行目だけ検査したらさっさと nextfile で次に移るので OK というわけ。 nextfile…

Go のポインタメソッドとバリューメソッドのどちらが良いのか

Go

TL; DR ほとんどの場合ポインタメソッドにしておけば良い。 Go のメソッドは、レシーバーとして値(value)を受け取るかポインタを受け取るか選択できます。