Diary

Diary

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

2023-01-01から1年間の記事一覧

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時点) 目次 まとめ おさら…

Android: coil でアプリ全体の画像キャッシュ戦略を決める

Android の ImageLoader ライブラリとしては Picasso や Glide などがありますが、今回は Compose と相性がいい Coil を使います。 環境 io.coil-kt:coil-compose:2.4.0 compose-bom:2023.06.01

RDB のプレースホルダーは何を守ってくれるか 〜Go での確認を添えて〜

DB Go

特に深いことは語れないのですが、安全な SQL の呼び出し方を読んで気づきがあったためメモしておきます。 まとめ SQL の構成要素(以下を意識して区別する!) キーワード(予約語): SELECT, WHERE, AND, ... 演算子など: =, >=, ... 識別子: テーブル名、…

VSCode で自分だけの補完機能を作る 〜postfix 拡張機能作成のすすめ〜

VSCode にはユーザー独自のスニペットを作る機能があり、prefix に反応して補完する機能であれば Snippets の機能を使えば簡単にできます。 例えば workspace でのみ有効なスニペットを定義するには、.vscode フォルダ内に拡張子を code-snippets にした以下…

はてなブログ API の結果を xml から json へ変換(xq, sed, jq)

はてなブログ API を叩いた時の備忘録と、その際 jq を使ってみたのでそのメモになります。 レスポンスが xml だったので、xq と sed と jq を使って一歩ずつ理想とする形に近づけました。 結論 xq を使って xml を json にしたら要素が 1 つの時は string, …

複合 index の順番には注意したい

DB

複合インデックスとは 複合インデックスは、2つ以上のカラムを組み合わせて作成されるインデックスのことを指します。 DB スペシャリストの問題文にあったため 複合インデックスの定義順によってはインデックスが使われたり使われなかったりするらしいと知っ…

中間テーブルを正規化の観点から考える

DB

一般に『多対多の時は中間テーブル(連関エンティティ)を作成せよ』とあると思うのですが、今回は、中間テーブルの存在意義を正規化の観点から考えてみました。

コードジャンプする VSCode 拡張の作り方

今回初めて VSCode の拡張機能を作ってみたのですが、予想より簡単で面白かったためその紹介です。

CORS について整理しておく

最近は N 年間放置していた徳丸本を真面目に読み進めており、今回はその §3.3 CORS についてのアウトプットになります。 ぜひ皆さんも一緒に読み進めていきましょう。 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理…

プライバシーポリシー

広告の配信 Google アドセンスなど

go の標準パッケージ sql がコネクションを管理する際の注意点

Go

標準パッケージ sql は一般的な SQL のインタフェースを提供しています。 使用する際は各ベンダーの用意するドライバーと共に使うことが必要で、諸々の使い方は go の wiki にも書いてあります。 今回はこの sql パッケージで注意が必要な点(と自分が今認識…

Jetpack Compose の TabRow(material3) で画面を横スクロールで切り替える方法

material3 のドキュメントでいう『Swipe within the content area』を compose で実現する方法が v1.1.1 の compose.material3 にはなさそうだったため、その実装方法のメモです。

markdown のリンクで URL のなかに () がある時に失敗する

https://example.com/hoge()pi のようなリンクがある時、ナイーブに [title](https://example.com/hoge()pi) としてしまうと、titlepi) のようになります。 表示も期待値ではないし、リンクも正しくありません。 そんな時は URL 部分を パーセントエンコーデ…

go の標準パッケージ json がどのようにタグを解釈するかを理解し、独自のタグを設定してみる

Go

json パッケージが最終的に Tag を解釈しているところまでに、以下のような関数呼び出しが発生します。 Marshal > marshal > reflectValue > valueEncoder > typeEncoder > newTypeEncoder > newStructEncoder > cachedTypeFields > typeFields