Diary

Diary

日々学んだことをアウトプットする場として初めてみました

rm コマンドはファイルを削除するわけではない: Linux のファイルシステム深掘り

Linux システムにおけるファイル管理は、その強力な機能性と柔軟性により、開発者やシステム管理者に広く利用されています。 多くのユーザーが頻繁に使用する rm コマンドは、ファイルを『削除する』と一般に認識されていますが、その背後にはより複雑なメカ…

grep で特定のフォルダを無視して再帰検索する

プログラミングにおいてコード内の特定の文字列を探すことは多いですが、特に大規模なプロジェクトでは、この作業が一筋縄ではいかないことがあります。 node_modules や dist といったディレクトリを含めたくない場合がその典型例です。 今回は, grep のオ…

Go で是非とも使いたいオプション一覧

Go

Go のコマンドには様々なオプションが存在します。 今回は、現時点でつけておいて損がないのではないかと思ってるフラグを紹介させてもらいます。 まとめ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -o ./api2 ./app go te…

【Cloudflare】R2 を Go から扱う

Cloudflare でオブジェクトストレージといえば R2 ですが、 ドキュメントにもあるように S3 との互換性を大切にしています。 今回は Cloudflare の web 画面での R2 バケットの作成から、s3 の sdk を使って object の作成・取得を試してみたいと思います。 …

【AWS-CLI】Lightsail の push-container-image 実行時に Is the docker daemon running? エラー

[目次] 環境 まとめ 背景 おわりに 環境 Host: mac m1 Docker: v24.0.6 Docker context: Docker Desktop AWS CLI: aws-cli/2.13.25 Python/3.11.6 Darwin/22.1.0 source/arm64 prompt/off まとめ エラー内容 $ aws lightsail push-container-image --region …

正規表現でキャメルケースをスネークケースにする

ユースケース HogeFuga → hogeFuga みたいな『先頭のみの大文字小文字を変換する』ということがしたいケースがありました。 同じ要領で『キャメルケース → スネークケース(逆も)』ができたのでその紹介です。 (注: 以下コマンドの結果はすべて GNU sed に…

systemd で定期実行する

『systemd で定期実行をする』というよくある内容ですが、設定できたつもりになってた自分自身の反省を兼ねてメモしておきます。 (細かい設定方法については説明しません。) systemd などのタスク系に関しては、うまく動いてるかの確認がより大事になって…

2023 のエンジニア活動振り返り

(github)

Jetpack Compose で画像をピンチしてズーム・移動・回転する

こんな感じのことをできるようにします。

go で init 関数などが初期化される順番の整理

Go

go で初期化処理を書くために init 関数を使っている方もいるかと思うのですが、呼び出される順番を 1 回正しく整理しておきたいと思います。 [目次] まとめ 1パッケージのみ 1ファイルのみ 複数ファイル まとめ 複数パッケージ まとめ(再掲) グローバル変…

terminal で alias の定義場所を探す

ターミナルで作業をする時、alias 等を使い極力文字数を減らして打ち間違いを防ぐ事が多いかと思います。 しかし oh-my-zsh などのツールによって設定された値など、たまに「あれ?これどこで定義された alias だっけ?」ってなる事があります。 そんな時は…

bash でシェルオプションを確認・変更する

『現在のシェルセッションにおける変数と関数の一覧を表示』するには set コマンドに何もつけずに叩きます。 # 240 行もあり。 $ set | wc -l 242 # PATH だけを出力。 set | grep PATH シェルオプションの現在の状態を表示するには o オプションをつけて叩…

bash で標準エラー出力のリダイレクト・パイプラインを扱う

今更感ですが、標準エラー出力をリダイレクトやパイプに渡す方法をメモしておきます。 [目次] 標準エラー出力とは 標準エラー出力を特定のファイルにリダイレクトさせる 標準エラー出力を切り捨てる 標準エラー出力をパイプに渡す

bash のみで progress bar をつくる

特に bash のみで作る理由はないですが、こんなことも出来るんだという紹介です。 [目次] echo のオプション r c progress bar 実装

openapi-generator の作る Go の構造体を使ったら json.Marshal が 10 倍遅くなった

Go

この記事は Go 言語 Advent Calendar 2023 シリーズ 2 の 10 日目の記事です。 openapi から Go のコードを生成するツールとしては、oapi-codegen, ogen などが勢いありますが、今回は openapi generator にまつわる話をします。 このライブラリで生成された…

Golang で Multi-stage builds すると『version `GLIBC_2.34' not found』のエラー

Golang で Dockerfile を Multi-stage builds で作成した際に、 docker run すると『version `GLIBC_2.34' not found』のエラーが出ることがありました。 今回はその原因と解決策について共有します。 事象 環境 Host mac m2 Docker v24.0.7 Dockerfile buil…

zsh: history から失敗したコマンドを削除する

課題 terminal 上のコマンドは実行履歴が残っており、それを shell の history と呼ぶのですが、そんな history は情報の山となってます。 自分は主に『過去のコマンドを history から呼び出し fzf で曖昧に検索する』みたいな用途で使っているのですが、そ…

k8s 内部でホスト名を指定するときのベストプラクティス

k8s

『Kubernetes と名前解決』という記事が非常に面白くためになったため、自分なりに実験したものもまとめさせていただきます。 [目次] まとめ DNS をみるための準備 環境 サービスを持つ minimum の k8s 構成を kind と helm で作成する サービス名で名前解決…

GitLab プロジェクトの go get で『The project you were looking for could not be found or you don't have permission to view it.』

まとめ GitLab の Go module には、リポジトリの終わりに .git をつける GitHub の Go module には .git をつけない

python を VSCode で使っていてコード定義へのジャンプが効かなかった

原因 pyenv で複数のバージョンを使っており, VSCode の解釈する python のバージョンとターミナル(実際に実行する部分)でのバージョンに差異があったことが原因。 解決方法 VSCode で python のプロジェクトを開いてる時、下のバーに python Interpreter …

どうしてもヌルバイトを使用したい

どうしてもヌルバイト (NUL) を出力・使用したいことがあったで、その時の出し方についてメモしておきます。 [目次] ヌルバイトとは ターミナルからの出力 どんな問題が? db: postgresql コマンドの結果が期待値とならない シェル設定によってはセパレータ…

context ネイティブ世代の semaphore を使いこなし効率的な流量制御を

Go

典型的な『worker pool』パターンを実装するのに便利な semaphore の紹介です。 チャネルを使った流量制御のパターンと比べ、デフォルトで ctx のキャンセルに対応していることを実動で確認します。 [目次] channel パターン sync/semaphore パターン おまけ…

システムコールを元に HTTP サーバーの解像度を上げる (with Go 実装)

HTTP サーバーってどんな仕組みで動いてるのかずっと気になっていたのですが、 『ふつうのLinuxプログラミング』に説明 + c での実装があったため、その理解を元に適当に Go でやってみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるg…

mac と Linux で特定のポートを使用しているプロセスを調べる

lsof を使うのが簡単で良さそうです。 lsof -i:8080 $ lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME main 77228 kokoichi 4u IPv6 0x50df81af803226e5 0t0 TCP *:http-alt (LISTEN) # その後該当プロセスを削除する場合。 # 77228 は上…

Jetpack Compose による Wear OS 開発入門

最近 pixel watch を買ってみたので WearOS を少し触ってみています。 今更ですが『Jetpack Compose で始める WearOS 開発入門』という内容で、Android 開発との違いに焦点を当てて記事を書いてみます。 (Jetpack Compose での wear os 開発の基礎となる an…

パイプの中身をシステムコールレベルで理解・実装する

パイプの中身をシステムコールレベルで理解・実装する 『ふつうのLinuxプログラミング』を読んで勉強させてもらったメモになります。 コードは載ってなかったため自分で実装してみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べる…

k8s の cpu limit をつけるとアプリが 10 倍遅くなった

Go

k8s の cpu limit をつけることで、実行時間が見事に遅くなってしまったのでその成果発表です。 (参考記事) [目次] 背景 調べたこと k8s が CPU を割り当てる方法 マルチコアの場合 Go のコンテナで動かしてるんですが

Go: panic と recover は goroutine 単位

Go

go での panic recover 基礎 gin のケース goroutine 実行の考慮 おわりに

mongodb 用の docker compose ファイルを準備する

公式に書いてあるのでそれを使います。 下記の compose ファイルで mongodb と web UI である mongo-express が起動できます。

Basic 認証のあれこれ

非常に今更ですが、徳丸本 §3.1 ででてきたため、実際に手を動かして確認してみました。 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践新品価格¥3,344から(2023/10/18 00:27時点) 目次 まとめ おさら…