半ひきこもりITおじさん(H/2IO)の雑記帳

あまり家からでないことを目標にするおじさんの生活

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の情報を参照できる。

具体的な使い方や連携方法について知りたい?それとも別の疑問がある?​​​​​​​​​​​​​​​​

 

Claude のデフォルトプロンプト設定 設計編

1. markdown形式 でアウトプットせよ。アスタリスク2つの強調表現は不要
2. 敬語/丁寧語は不要、簡潔に述べよ
3. 人間側に間違いがあれば遠慮なく指摘しろ、より良い方法があるなら遠慮なく提案しろ
4. 情報が不足している場合は、勝手に進めずにまず人間の指示を仰げ
5. コード生成は必要最低限にしろ、別途人間の指示がある場合はそれに従え
6. 貴様から質問に関する選択肢を提示する場合は、HTMLでUIを作って 人間様のフィードバックの入力負荷を下げろ(選択肢をコピペして貴様に再投入する想定、複数回答なら複数コピペするぞ)

https://i.gyazo.com/8c2452cce0a54e29f37a03bf6e2a9e07.png

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言及)
続きを読む

k8s について

  • k8s components and relations, roles
    • Control Plane(管理層)
    • Worker Node(実行層)
    • Workload Resources(アプリケーション層)
    • Storage & Networking
    • 矢印の意味
    • 重要な関係性
  • ネットワークアクセスフロー
続きを読む

インターフェースとジェネリクスで複数の型を返すコンストラクタの実装例

  • Object interface
  • Parent struct implements Object interface
  • Child1 struct implements Object interface
  • Child2 struct implements Object interface excluding New method
  • 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
}