2023/05 2週目
Rust
- RustにおけるGitHub Actionsベストプラクティス
- Javaエンジニアだった私が当時困ったRustのコンセプト
- Rustの2種類の 'static
- 'static ライフタイム境界の話
fn f<T: 'static>(v: T) {}
のような書き方のことを指す
- 'static ライフタイムは、参照を含まないデータか、'staticな参照を含むデータしか渡せない
fn f<T: 'a>(v: T) {}
の場合も同様で、'a
以上のライフタイムを含むであれば渡せる
- 'static ライフタイム境界の話
- Optimizing Rust container builds
- Dockerでcargo buildするとき、うまくキャッシュする具体例が載っている
RISC-V
- RISC-VとChiselで学ぶ はじめてのCPU自作
- RISC-Vの実装まで解説している
- テストスイートも通すっぽい(これが個人的に一番のポイント)
- https://github.com/bokuweb/r2
- Rustで書かれた小さな RISC-V エミュレーター
- NOMMU Linuxを動かせるレベル
- ブラウザでも動かせる
- RISC-V原典
- RISC-Vの設計思想と命令の解説書
OS
- KernelVM式 nommu Linux入門/introduce of nommu Linux for KernelVM
- 一般的なOSは仮想メモリ制御ユニット(Memory Management Unit)が基本的に必要だけど、マイコンのCPUではMMUがないっぽい?
- wikiを見るとCPUはMMUを通して物理メモリアドレスを取得している
- NOMMU Linuxを使うとマイコンでもLinuxを動かせる
- ブートローダー + Linux カーネル + device tree blob + rootfs で動くらしい
- ブートローダー
- SDRAMの有効化
- SDRAMへのカーネル読み込み
- カーネル起動
- カーネル
- 各種ペリフェラルの初期化
- OSの基本機能の初期化
- rootfsのマウント
- init処理の実行
- rootfs
- busyboxなどの実行バイナリの提供
- ブートローダー
- ブートローダー + Linux カーネル + device tree blob + rootfs で動くらしい
- NOMMU Linuxの一種?でuClinuxというのがある
- 一般的なOSは仮想メモリ制御ユニット(Memory Management Unit)が基本的に必要だけど、マイコンのCPUではMMUがないっぽい?
- コンピュータ講座 応用編
- CPUの基礎の講座
- バスなどについての説明がある
- ArmのCPUとは何か
- ARM関連の連載
- MMUの詳細な説明もある
- はじめて学ぶデバイスドライバ開発。組み込みLinuxによるハードウェア制御の仕組みを学ぶ
- デバイスドライバについて解説している
デバイスドライバは、制御対象のデバイスを適切にコントロールし、ハードウェアが提供する機能を運用。アプリケーションをはじめとする他のプログラムに対して、機能を実現するために不可欠なAPI内の実装を提供するソフトウェアです。
- デバイスドライバについて解説している
- Device Tree についてのまとめ
- デバイスツリーについて解説
ARM Linux 向けにで使用されているプロパティ情報を記述した設定ファイルのこと。 Device Treeの仕組み自体は1994年に標準化されたOpen Firmwareというものを元にしている。 デバイスのベースアドレスや、クロック、割り込み番号といった、ハードウェア固有のプロパティをカーネルから分離しデバイスドライバの再利用性を高めることが目的の機能らしい。 Device Tree Souce に記載したプロパティをデバイスドライバから読み込んで使用する。
- 雑なまとめ
- デバイスツリーはデバイスのプロパティ(デバイスノード名やレジスタマップなど)を定義したもの
- カーネルはデバイスツリーがないと正しくデバイスを認識できないらしい
- デバイスドライバはデバイスツリーの情報を使ってデバイスを操作するためのAPIを提供
- アプリケーションはデバイスドライバが提供しているAPIを使ってデバイスを操作する
- デバイスツリーについて解説
Deno
- deno compile が npm specifier をサポートするPRがマージされた(まだリリースされていない)
- これにより、npmモジュールを使っても deno compile で単一バイナリを生成できるようになった
- https://github.com/denoland/deno/pull/19005
ELF
- Wiki
- ELF Header
- System V の ELF の Header の定義
- https://pkg.go.dev/debug/elf@go1.20.4
- GoのELFパーサー
React
- https://react.dev/learn
- Render and Commit
- レンダリングしたあと、コミットするまでDOMに反映されないらしい
- Triggering a render (delivering the guest’s order to the kitchen)
- Rendering the component (preparing the order in the kitchen)
- Committing to the DOM (placing the order on the table)
- レンダリングしたあと、コミットするまでDOMに反映されないらしい
- useState
- コンポーネント単位で状態を保持するためのやつ
- オンメモリts
// age データ読み取り用 // setAge は age を変更する関数 const [age, setAge] = useState(28);
- useEffect
- コンポーネントのレンダリングによって引き起こされる「副作用」を指定する
- イベントは特定の操作によって引き起こされる
- 画面更新後、コミットされる前にeffetctが実行されるらしい
Effects run at the end of a commit after the screen updates
- Render and Commit
- Reactコンポーネントのテストを書こう
- Jestでテストを書こう
- Viteベースの高速テスティングフレームワークVitestを使ってみる
Next.js
k8s
- https://github.com/sozercan/kubectl-ai
- k8sの yaml をAIに吐いてもらうプラグイン
- oktetoで無料Kubernetesを遊び尽くす
- 無料のk8sマネージドサービスokteto
- 記事を読む限り簡単にアプリをデプロイして公開できる様子
dev.okteto.com/auto-ingress: "true"
ラベルをつけるだけ
アジャイル
- スクラムイベントの参加者とタイムボックス
- スクラム開発のイベントについて色々と説明されている
プロトコル
認証認可
- 基本から理解するJWTとJWT認証の仕
- JWT(JSON Web Token)はHTTPヘッダーやクエリパラメータにJSONデータをうまく載せるための仕様
- JWS(JSON Web Signature)は受け取ったJWTが本物(改善されていない)ものかどうかを確認する仕組み
- 暗号鍵を使ってペイロード(JWT)を暗号化する
- 暗号化されたペイロード(シグネチャ)を復号化して、JWTの中身が変わっていないことを確認することで改ざんされないことを検知できる
- IDプロバイダーが提供している認証情報を持つJWSが正しいかどうかをプロバイダーに問い合わせて検証して問題ないなら、JWSにある認証情報を使ってあれこれする
- 一番分かりやすい OpenID Connect の説明
- トークンを発行者の署名付き名刺に例えて説明していてわかりやすかった
- IDトークン(認証)とアクセストークン(認可)を払い出すことができる
そもそも ID トークンは何のためにあるのでしょうか? それは、ユーザーが認証されたという事実とそのユーザーの属性情報を、捏造されていないことを確認可能な方法で、各所に引き回すためです。 一ヶ所で(=一つの OpenID プロバイダーで)ユーザー認証をおこない、発行された ID トークンを引き回すことができれば、別の場所で何度もユーザー認証を繰り返す必要がなくなります。 短く言うと、『ID 連携』ができます。
- IDトークンが分かれば OpenID Connect が分かる
- IDトークンの1つであるJWTについて細かく説明している
- 一番分かりやすい OAuth の説明
- 認可の流れがわかりやすく説明されている
- KeycloakによるAPIセキュリティの基本
- Certified OpenID Connect Implementations
- OIDCの実装一覧
- https://github.com/zitadel/zitadel
- Kyecloakみたいなやつ(まだちゃんと見ていない)