Zettelkasten
https://www.ssp.sh/brain/zettelkasten
この記事は「Zettelkasten」(ツェッテルカステン)というノート術とObsidianでの実装方法を示している。
# Zettelkastenの基本構造
## 3つのボックス(保管場所)
1. INBOX - 入口
1. SLIP-BOX - 作業場所
1. OUTBOX - 出口/最終成果物
## ワークフロー(番号順)
### 1. Fleeting Notes(一時メモ)
- 書籍やインターネットから得た情報の一時的な記録
- Obsidianの一時的な場所に保存
### 2. Literature Notes(文献メモ)
- 読んだ内容を自分の言葉で要約
- 一時的な保存(Obsidianの一時エリア)
### 3. Permanent Notes(恒久メモ)
- 自分の考えや洞察を記録
- Obsidianの恒久的な保存場所へ
### 4. Bibliographical Notes(書誌情報メモ)
- 参照した文献の情報を記録
- Obsidianに保存
### 5. Structure Notes(構造メモ)/ Index
- トピックごとにメモを整理
- 下層に画像、書籍、テンプレートなどを配置
### 6. Project Notes(プロジェクトメモ)
- 最終成果物(論文など)
- マニュスクリプトとして出力
## Reference Management System(参考文献管理)
- 下層で全体をサポート
- Zoteroなどのツールを使用
この方法の特徴は、情報を段階的に精錬しながら、最終的な知的成果物(論文や記事)へと変換していく点だ。Obsidianの双方向リンク機能を活用することで、アイデア同士の繋がりを可視化できる。
何か特定の部分について詳しく知りたい?
# Zoteroの役割
- 参考文献の管理に特化
- PDFの保存と整理
- 書誌情報(著者、タイトル、出版年など)の自動取得
- 引用の自動生成
- 論文のメタデータ管理
要するに「何を読んだか」の記録と管理
# Obsidianの役割
- 読んだ内容から得た自分の考えを記録
- アイデア同士を繋げる(双方向リンク)
- 知識を構造化・体系化
- 最終的な執筆作業
要するに「読んで何を考えたか」の記録と思考の発展
# 連携の流れ
```
Zotero(文献を保存)
↓
Obsidian(Literature Notes作成)
↓
Obsidian(自分の考えをPermanent Notesに)
↓
Obsidian(執筆時にZoteroから引用情報を引用)
```
実際にはZotero Integration pluginなどを使ってObsidianからZoteroの情報を参照できる。
具体的な使い方や連携方法について知りたい?それとも別の疑問がある?
Data Loading Patterns
- 定番パターン 8種類
- 1. Full Refresh
- 2. Incremental Load
- 3. Delta Load
- 4. Append-only Load
- 5. Upsert / Merge
- 6. CDC - Change Data Capture
- 7. SCD Type 2 - Slowly Changing Dimension
- 8. Partition-based Load パーティション単位でFull Refresh
- ETLでの拡張的なパターン
- 9. Snapshot-based Load(スナップショット同期)
- 10. Multi-Source Merge 複数ソース統合
- 11. Staging-based Load データ検証・再処理性の確保
- 12. Streaming ETL リアルタイム処理(Kafkaなど)
- 13. Data Vault Loading 完全履歴型DWHモデル
- 14. SCD Type 3 軽量履歴保持
- 15. Data Quality Check 品質保証・ETLの信頼性向上
イベントストーミング
- 概要
- 基本要素
- 付箋の色分け
- 進行ステップ
- メリット
- よくある間違い
- イベントストーミング参考リンク
- 公式・基本リソース
- Alberto Brandolini(創始者)関連
- 学習ガイド・チュートリアル
- 日本語リソース(限定的)
- 英語ガイド
- GitHub・技術リソース
- Awesome系リスト
- 実装例・テンプレート
- 動画・講演
- Alberto Brandolini講演
- その他講演者
- オンラインツール
- テンプレート
- 書籍(EventStorming言及)
- 公式・基本リソース
インターフェースとジェネリクスで複数の型を返すコンストラクタの実装例
- Object interface
- Parent struct implements Object interface
- Child1 struct implements Object interface
- Child2 struct implements Object interface excluding
Newmethod func NewObject[T Object]() T
コード例
package main import "fmt" type Object interface { ID() string New() Object } type Parent struct{} func (p Parent) ID() string { return "p" } func (p Parent) New() Object { return Parent{} } type Child1 struct { Parent } func (c Child1) ID() string { return "c1" } func (Child1) New() Object { return Child1{} } type Child2 struct { Parent } func (c Child2) ID() string { return "c2" } // Child2はNewメソッドを持たない // 埋め込まれたParent.New()が呼ばれる func NewObject[T Object]() T { var zero T result := zero.New() // Parent{}が返された場合は、要求された型に変換 if _, isParent := result.(Parent); isParent { return zero // zeroは既に正しい型のゼロ値 } return result.(T) } func main() { fmt.Printf("child1: %s\n", NewObject[Child1]().ID()) //=>child1: c1 fmt.Printf("child2: %s\n", NewObject[Child2]().ID()) //=>child2: c2 }
メソッドのシャドーイングによるなんちゃって継承の実装
最近はgolangしか書いてないでごわす。 やりたいこととしては、以下のような構造体群があるとして
- Parent
- Child
- Child2
Child構造体では、そのChild固有のIdメソッドを呼び、 Child2構造体ではParent構造体のIdメソッドが呼ばれることで、 必要に応じてメソッドを上書きしたり/しなかったり をしたかった。 ついでに Interface を実装して型安全を確保できることも確認した。
OO言語ではよくあるやつかと思うが、golangではどうやるのかちょっと気になったので試してみた。
結論:
package main import "fmt" type Identifier interface { Id() string } type Parent struct { Name string } func (p Parent) Id() string { return p.Name + " p1" } type Child struct { Parent } func (c Child) Id() string { return c.Name + " c1" } type Child2 struct { Parent // Id メソッドなし - Parent の Id() が使われる } func NewParent(name string) Parent { return Parent{name} } func NewChild() Child { p := NewParent("Hoge") return Child{p} } func NewChild2() Child2 { p := NewParent("Piyo") return Child2{p} } func childrenProcess(children ...Identifier) { for _, c := range children { fmt.Println(c.Id()) } } func main() { c1 := NewChild() c2 := NewChild2() childrenProcess(c1, c2) //=> Hoge c1, Piyo p1 }

