自分でも理解が超曖昧なのでまとめる。随時更新していく。
公開鍵証明書
デジタル証明書や単に証明書とも呼ばれる
CSR(証明書署名要求)
秘密鍵
公開鍵基盤(PKI)
OpenSSL
RSA暗号
デジタル署名を実現するための暗号方式。
超雑な説明。
デジタル署名
SSL/TLS
Transport Layer Security - Wikipedia
自分でも理解が超曖昧なのでまとめる。随時更新していく。
デジタル証明書や単に証明書とも呼ばれる
デジタル署名を実現するための暗号方式。
超雑な説明。
Transport Layer Security - Wikipedia
〇〇 req/sec という rate limit を実装する例。 どちらも Fixed window counters を前提に説明する。
5req/sec、10req/sec などに制限するような場合
Redis の公式ドキュメントに記載されていた rate limit 実装を 丸パクり 参考にするのが良さそう
See. https://redis.io/commands/INCR#pattern-rate-limiter-1
# 公式ドキュメントの擬似コード FUNCTION LIMIT_API_CALL(ip) ts = CURRENT_UNIX_TIME() keyname = ip+":"+ts MULTI INCR(keyname) EXPIRE(keyname,10) EXEC current = RESPONSE_OF_INCR_WITHIN_MULTI IF current > 10 THEN ERROR "too many requests per second" ELSE PERFORM_API_CALL() END
何らかの理由で INCR 後の EXPIRE のセットが失敗すると rate limit が機能しなくなる。 Redis ドキュメントにもレースコンディションが発生しうる、かつこれを回避するには複雑な実装が必要との記載あり。
See. https://redis.io/commands/INCR#pattern-rate-limiter-2
1req/sec に制限するような場合
いや、この場合もマルチスレッド環境にて同じタイミングで GET が走ると複数回 API リクエスト実行されるから競合状態は起きうる。(典型的な check-then-act 処理)
$ cargo install diesel_cli --no-default-features --features postgres
した時に以下のようなエラーが出る場合の対処方法を記す。
$ cargo install diesel_cli --no-default-features --features postgres ... Compiling diesel_cli v1.4.1 error: linking with `cc` failed: exit status: 1 | = note: "cc" "-m64" "-arch" "x86_64" "/var/folders/y_/4r9vf_jn4qx6wd44z61hd7bm0000gp/T/cargo-installc0nGsu/release/deps/diesel-c3215a2deafd6029.diesel.47e90c54-cgu.0.rcgu.o" "/var/folders/y_/4r9vf_jn4qx6wd44z61hd7bm0000gp/T/cargo-installc0nGsu/release/deps/diesel-c…nodefaultlibs"... = note: ld: library not found for -lpq clang: error: linker command failed with exit code 1 (use -v to see invocation) error: failed to compile `diesel_cli v1.4.1`, intermediate artifacts can be found at `/var/folders/y_/4r9vf_jn4qx6wd44z61hd7bm0000gp/T/cargo-installc0nGsu` Caused by: could not compile `diesel_cli` due to previous error
以下のどちらかで解決する。
$ brew install postgresql $ cargo install diesel_cli --no-default-features --features postgres # or $ brew install libpq $ PATH="/usr/local/opt/libpq/bin:$PATH" cargo install diesel_cli --no-default-features --features postgres
公式ドキュメント(のドラフト)的には postgresql をインストールするよう書いてあるので、普通にそっちで良さそう。
See. https://github.com/diesel-rs/diesel/blob/v1.4.8/guide_drafts/backend_installation.md#mac-osx
--no-default-features --features postgres
は diesel のバックエンド(DB)を postgres に限定するオプション、デフォルトでは diesel は mysql, sqlite, postgres 全てのクライアントライブラリのインストールを要求する
$ brew install libpq
した時に表示されるメッセージ
libpq is keg-only, which means it was not symlinked into /usr/local, because conflicts with postgres formula.
See. 型システム入門 プログラミング言語と型の理論 | Amazon
TAPL 1.2 に書いてあったので自分なりに要約する。
👆 に加えて、今なら IDE による補完などもメリットに入ると思う
Also see. 私と型システムとポエム - The curse of λ
A: { a: number } :> B: { a: number, b: string }
の A, B のように、親の型の構造が子のそれを含有する時、部分型であるとみなす型システムB extends A
のような宣言があった場合のみ部分型であるとみなす型システム[2024/02/26 Update]
Vercel もDB 提供するようになったし、Planetscale や Supabase も出てきてます。この記事の内容は古いので鵜呑みにしないでください。
[2022/08/26 Update]
Heroku 有料になりましたね、、無念。
チラシの裏的な記事です。やっぱりなるべく無料にこだわりたい。
[2024/02/26 Update]
今なら Cloudflare Pages かなぁ
--example
オプションで入れられるチュートリアルなかったので拾ってきた OpenAPI の定義ファイルから typescript-fetch なるジェネレータでコード吐くところまでやった。
チュートリアルなかったので適当な graphql スキーマからクライアントの生成(typescript-operations, typescript-graphql-request)とリゾルバの型定義の生成(typescript-resolvers)するところまでやった。
@graphql-codegen/typescript
だけだと最低限の型定義のみで、プラグインを使うことでクライアントやリゾルバの型定義を生成できる
Building GraphQL servers in golang — gqlgen やった。
graph/model/models_gen.go
とは別に graph/model/xx.go
的なファイル作る、struct の名前被ってても generate コマンド打てば勝手に上書きしてくれる) -> generate コマンドで未実装の resolver 生成 -> スキーマを満たす resolver 実装って感じ
Quickstart: Getting started with TypeScript & SQLite | Prisma Docs やった。
コース紹介 | Hasura GraphQLチュートリアル を途中までやった。
調べていく中で見つけたやつ。