Diary

Diary

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

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

Syntax highlighting has been temporarily turned off (Android Studio)

Android Studio から build.gradle (app レベル) の依存関係を更新した時、Android Studio から『Syntax highlighting has been temporarily turned off』と言われ、補完等が一切効かなくなりました。 今回はその解消方法についてメモしておきます。 環境 An…

シェルのパイプ連結をシステムコールから理解する

シェルの上でよく遊ぶ方であれば、パイプ | は非常にお世話になっているかと思います。 今回はそんなパイプについて、どのようなシステムコールが呼ばれているかを追うことで理解を深めてみました。 [目次] - まとめ - 環境 - pipe status の復習 - システム…

【自動化の敵】対話型 CLI を expect で突破する

突然ですがみなさん、自動化しているでしょうか? 自動化するときに悩むのが、対話型 CLI に代表されるインタラクティブなツールの存在だと思います。 個人的には、自動化もできないし打ち間違いも発生するしで、対話型 CLI はエンジニアの使うツールとして…

Go で HTTP 呼び出し時に Context のキャンセルが TCP コネクションに伝播されるまで

Go

go 1.7 で追加された Context には『key, value 形式による情報の伝搬』と『Goroutine の適切なキャンセル』の主に2つの役割があります。 後者の『Goroutine の適切なキャンセル』が便利で、公式ブログでも並行処理パターンとして紹介されているように、各ラ…

M1 mac の VSCode のターミナルで go: no such tool "compile"

VSCode の terminal で go install しようとしたところ、no such tool と言われました。 $ go install github.com/bufbuild/connect-go/cmd/protoc-gen-connect-go@latest go: no such tool "compile" go: no such tool "compile" go: no such tool "compile…

Postman でパラメーターは URL エンコードされないらしい

結論としてはタイトルの通り『Postman でパラメーターは URL エンコードされない』っていうことなんですが、これに気づかず時間を無駄にしてしまったため共有させてください。 Postman のバージョン m1 mac で以下のバージョンのデスクトップアプリを使って…

Jetpack Compose でカスタム shape を作る

今回は、よくあるチャットメッセージのような吹き出しを作成したので、その方法を簡単に紹介します。 より一般には Text などの compose 関数を、名前のついてない自由な形に変形させることが目標です。 環境 compose_ui_version = '1.4.0-beta01' 作成方法 …

minio を使ってローカル実行時に s3 を代替する

minio の詳しい説明は公式に頼りたいところですが、minio とは s3 と互換性のある object storage です(object storage とは)。 今回はこの『s3 と互換性のある』って部分を少し深ぼって、golang の sdk から s3 にアクセスする既存コードを使い、ローカル…

GitHub の GraphQL を android から叩く(Apollo client)

前回は GraphQL を Postman から叩いてみました。 koko206.hatenablog.com 今回はその続編として、Android から GitHub の GraphQL API を叩いてみようと思います。 (該当リポジトリ) Apollo とは Apollo は GraphQL API 用のライブラリで、React, Kotlin,…

GraphQL(GitHub API )の叩き方

GraphQL とは 現在主流の REST 設計では、アプリが複雑になるにつれ複数のエンドポイントが用意され、場合によっては1画面表示するのに複数の API を叩く必要があったりします。 これを解決するため、GraphQL はクライアントが必要なデータのみを単一のリク…

Jetpack Compose の Webview でリダイレクトされなかった

OAuth の連携画面を Jetpack Compose の Webview で表示していて、ログイン後にリダイレクトされないことがありました。 次のように javascript を有効にしてあげることで解決しました。 (リダイレクトに javascript が使われることが多々あるようです。) …

Apache2 で特定のパスへの reverse proxy

いつもやり方がわからなくなるので、備忘録として残しておきます。 やりたいこと 同じローカルマシンに立てたサーバーに、特定のパスを reverse proxy したい。 例: <base_url>/status にアクセスが来たとき、localhost:3000 に立てたサーバーに reverse proxy する。 </base_url>…

Logicool の進む・戻るボタンが Mac の VSCode で使えなかった

Logicool のマウスを Logi Options のアプリとともに使っていたのですが、VSCode での戻る・進むボタンが機能しない問題が発生しました。 windows では機能するのにな〜とか思って VSCode の設定とかいろいろ探してたのですが、最終的には GitHub のこちらの…

Jetpack Compose: coil の AsyncImage が正常に clip されない?

coil.compose.AsyncImage を使っている時に、正常に形が clip されない?と勘違いしてしまったことがありました。 (Image も同様でした。) 結論からいうと、AsyncImage, Image などの clip したい要素を、そのさらに外から fullScreen などの Column 等で…

ついに Compose Multiplatform に iOS がきたぞ!

Compose for iOS は KotlinConf23 で発表されました(2023/04/19 現在 α 版)。 KMM において UI コードを共通化する大本命でもあるため注目度は高かったと思いますが、今回ついに公式から説明があったため触ってみました!。 [目次] 触ってみる 前提条件 実…