lynx   »   [go: up one dir, main page]

おんがえしの blog

作ったプログラムと調べた技術情報

Obsidian に収集するメモの厳選

Obsidian の収集機能は強力なので、気がつくと対して興味の無いものや重複した内容を収集(キャプチャー)してしまうことがある。メモを集めすぎると後で考えを整理するときのノイズとなってしまう。大切なのは今必要としている情報を「厳選」することで、その自分なりの方法をまとめておく。

1. 収集候補と実際に収集するメモを分ける

ニュース、SNS、検索、LLMとの対話などをしていると無限に気になる情報が見つかる。このときはすぐに収集せずに一時置き場に保存する。一時置き場というのは見ているコンテンツにとって1番簡単な方法で保存するということ。youtube を見ているなら「保存」、はてブtwitterを見ているなら「ブックマーク」、ブラウザなら標準のブックマーク機能や「Pocket」など。後から見返せるようになっていればどこでもよい。

自分は Obsidian のデイリーノートの1番下に「つぶやき」という見出しを作っており、Quick Add プラグイン経由で時刻付きでメモを残せるようにしている。人と話していて面白い話を聞いたり、何か思いついたときにここに残すようにしている。収集したメモが分散することになるがこれらは収集候補に過ぎず、このままでは再利用される確率も低いので、この時点では集めやすさにフォーカスする。

2. 数を絞って収集する

寝る前に今日集めた収集候補の中から1番よさそうなものを1つだけ選ぶ。そしてObsidian に「名前付きのページを作って」取り込み、「デイリーノートにリンクを貼る」。こうすることで外部からリンクしたり、将来のプロジェクトで再利用しやすくなる。デイリーノートにリンクを貼っておくことでこのページがいつ作られたかも分かりやすくなる。(Obsidian は特定のページへのバックリンクを簡単に調べることができるので、1番古いデイリーノートへのリンクがそのページの作成日となる。)

収集候補はいくつ集めてもいいけど、Obsidian にページを作って収集するのは1つに絞る。書籍の「SECOND BRAIN 時間に追われない知的生産術」 では筆者は1日平均2つと書いていたが、私は1日の作業量を最小限にするのと厳選度を上げるために1つにしている。後述するがその日取り込まなくても再度取り込むチャンスはあるので慌てない。

3. 何を収集するか?

自分が今一番、やっていること、興味があること、気になっていることを収集する。今日だからこそ選ぶもの、明日はきっと違うものを収集する、そういうつもりで直感に沿って大胆に選ぶ。

「コジ10 ep.2 最高の書籍紹介」で紹介されていた書籍の選び方のように、自分にとって最高のもの、他の人が見つけていないものを選んで収集することに価値がある。

4. 収集するべきよいコンテンツが見つからなかったとき

過去の収集候補を見返す。収集候補だったけどその日は収集されなかったコンテンツを探して収集する。

探す収集元は日によってローテーションする。昨日ははてブから収集したなら、今日は Youtube の「後で見る」を探す。

まとめ

収集の過程を経て、自分が今何に興味を持っていて、何にコミットしているのかがはっきりしていく、させていくのがこの方法の面白いところ。

後は気が向いたときに、集めたメモを使って新しい文章を書いたり、LLM に分析させたりすればよい。

MarkdownコピーとMarkdown引用のブックマークレットを追加

Webページの内容をMarkdown形式でコピーしたり引用したりするブックマークレットを追加しました。これにより、ブログ記事やドキュメント作成時にWebページからの情報を簡単に取り込めるようになります。

Markdownコピーブックマークレット

Webページの内容をMarkdown形式でコピーするブックマークレットです。テキストを選択した場合は選択したテキストをリンクテキストとして、選択していない場合はページタイトルをリンクテキストとして使用します。

設定方法

  1. Markdownコピーブックマークレット のページを参考にインストール。

  2. Webページ上でテキストを選択し、登録したブックマークレットを実行すると、クリップボードMarkdown形式でコピーされる

Markdown引用ブックマークレット

Webページの内容をMarkdown形式で引用するブックマークレットです。テキストを選択した場合は選択したテキストを引用として、ページタイトルとURLをリンクとして使用します。

設定方法

  1. Markdown引用ブックマークレット のページを参考にインストール。

  2. Webページ上でテキストを選択し、登録したブックマークレットを実行すると、クリップボードMarkdown形式で引用される

使い方の例

例えば、このブログ記事のタイトルを引用する場合:

  1. タイトル「MarkdownコピーとMarkdown引用のブックマークレットを追加しました」を選択
  2. Markdown引用」ブックマークレットをクリック
  3. クリップボードに以下のようなMarkdownがコピーされる:
[MarkdownコピーとMarkdown引用のブックマークレットを追加しました](https://ongaeshi.hatenablog.com/entry/2025/04/add-markdown-bookmarklet)

> MarkdownコピーとMarkdown引用のブックマークレットを追加しました

これで、ブログ記事やドキュメント作成時にWebページからの情報を簡単に取り込めるようになりました。ぜひお試しください。

p5.rb CLIをリリースしました

p5rb_cli という RubyGems をつくりました。今まで p5.rb を使って Ruby でクリエイティブコーディングをしたい場合、ローカルに p5.rb スクリプトをダウンロードし、手動で読み込み用の HTML を作成する必要がありましたが、p5rb_cli を使うとコマンドを使って簡単にクリエイティブコーディングを始めることができます。

RubyKaigi で VJ ツールとして使っていただいた方がいらっしゃったと聞いてとても嬉しく思いました。 私自身も RubyMusicMixin2025VJ.rb を手元で動かしたりして楽しませてもらいました。 やっとパワーが出たので p5.rb CLI の紹介記事も書けました。 holygrail.hatenablog.com

インストール

gem install p5rb_cli

Ruby さえあれば誰でも簡単にインストールできるように、最小限の gem 依存で作成しています。webrick と thor しか使っていないので、大体どの OS でもインストールできると思います。

使い方

新しいスケッチの作成

p5rb new path/to/hello.rb
# => Created hello.rb

作成された hello.rb は GitHub Copilot や Cursor がコードを生成しやすいように命名規則や代表的なメソッド名などがスクリプトのヘッダに添付されます。(不要なら削除しても問題ありません)

スケッチの実行

p5rb run path/to/hello.rb
# => http://localhost:8000

このコマンドは指定したスケッチをローカルサーバーで実行し、ブラウザで表示します。

ウェブアプリ

hello.rb

p5rb run で指定したスクリプトの実行結果が画面に表示されます。

スクリプトを任意のエディタで編集してから Run ボタンを押すと画面が新しい実行結果で更新されます。

Save ボタンを押すとスクリーンショットがローカルに保存されます。

サンプルコード1(画像の表示)

ローカル環境での実行なので loadImage などのローカルアセットにアクセスする API が使えるようになります。

load_image.rb

def setup
  createCanvas(600, 600)
  @cat = loadImage('asset/cat.png')
  @landscape = loadImage('asset/landscape.jpg')
end

def draw
  background(255)
  image(@landscape, 0, 0)
  img_width = width / 5
  img_height = height / 5
  (0...1).each do |i|
    (0...5).each do |j|
      push
      translate(i * img_width + img_width / 2, j * img_height + img_height / 2)
      rotate((i - j) * (PI / 5))
      image(@cat, -img_width / 2, -img_height / 2, img_width, img_height)
      pop
    end
  end
end

サンプルコード2(3D)

GitHub Copilot に手伝ってもらった書いた3Dデモです。(p5.js のこの辺りの API の知識は自分にはほとんどない状態で記述しています。)

3d_primitive.rb]

def setup
  createCanvas(710, 400, WEBGL)
  @voxel_colors = Array.new(11) { Array.new(11) { [random(255), random(255), random(255)] } }
end

def draw
  background(100)
  orbitControl

  noStroke()
  fill(50)
  push()
  translate(-275, 175)
  rotateY(1.25)
  rotateX(-0.9)
  box(100)
  pop()

  noFill()
  stroke(255)
  push()
  translate(500, height * 0.35, -200)
  sphere(300)
  pop()

  push()
  translate(0, -200, 0)
  rotateY(frameCount * 0.01)
  rotateX(frameCount * 0.01)
  beginShape()
  (0..9).each do |i|
    phi = map(i, 0, 9, 0, TWO_PI)
    (0..9).each do |j|
      theta = map(j, 0, 9, 0, PI)
      x = 10 * sin(theta) * cos(phi)
      y = 10 * sin(theta) * sin(phi)
      z = 10 * cos(theta)
      vertex(x, y, z)
    end
  end
  endShape(CLOSE)
  pop()

  push()
  rotateY(frameCount * 0.01)
  draw_voxel_mountain
  pop()
end

def draw_voxel_mountain
  size = 20
  (0..10).each do |i|
    (0..10).each do |j|
      h = noise(i * 0.1, j * 0.1) * 400
      push()
      translate(i * size - 100, -h / 2 + 100, j * size - 100)
      fill(*@voxel_colors[i][j])
      box(size, h, size)
      pop()
    end
  end
end

まとめ

p5.rb がお気に入りのエディタやAI支援を受けながら開発することができるようになりました。Ruby でもクリエイティブコーディングを楽しんでいただけたら幸いです。 ご質問やフィードバックがございましたら、お気軽にお寄せください。

英語のハノンを読みながらChatGPTに質問する

少しずつ続けている英語のハノンがついに上級まで来ました。

最近試している方法で、課題を進めているときに分からないことや気になることが出てきた場合に、それを問いの形にして ChatGPT に質問する、ということをやっています。勉強中に分からないことがあるときはたとえハルシネーションのリスクがあっても何らかの回答を読みたいと感じているものですし、さらに例題や解答として出ている文が正しいことはある程度保証されているため、ただ知らないことを ChatGPT に聞くよりも安心して質問することができます。

Unit 10.6

例を挙げてみます。以下の文を It is ... that ... の強調構文に直せというものです。

Not until I graduated from college was I aware of the importance of study.

解答はこのようになります。

It wasn't until I graduated from college that I was aware of the importance of study.

書き方は分かったのですが、この2つの文をどうやって使い分ければいいのかが気になりました。ということで問いを立てて教えてもらいます。

質問

2つの文を訳して違いを教えて。

Not until I graduated from college was I aware of the importance of study.
It wasn't until I graduated from college that I was aware of the importance of study.

回答(ここは ChatGPT が生成した文)

訳:

  1. Not until I graduated from college was I aware of the importance of study.
    「大学を卒業して初めて、勉強の重要性に気づいた。」

  2. It wasn't until I graduated from college that I was aware of the importance of study.
    「大学を卒業して初めて、勉強の重要性に気づいた。」

違い:

文の意味はほぼ同じで、「大学を卒業するまで勉強の重要性に気づかなかった」という内容を表しています。ただし、文法構造ニュアンスに若干の違いがあります。

  1. Not until...構文

    • 形式的で強調された印象を与える文。
    • 倒置構文(主語と動詞の語順が入れ替わる)を用いるため、やや硬い印象。
    • 詩的または文学的な表現として使われることが多い。
  2. It wasn't until...構文

    • 日常会話や書き言葉で自然に使われる表現。
    • 「It wasn't until... that」という構造が原因と結果を明確に強調する役割を果たす。

使用場面:

  • 1番目の文はフォーマルなスピーチやエッセイで効果的。
  • 2番目の文は日常会話やカジュアルな文章で自然に使いやすい。

どちらを使うかは、文の雰囲気や場面に応じて選ぶとよいでしょう。

まとめ

倒置があるとフォーマルな印象になる、というのが今回は特に参考になりました。

ChatGPT などの LLM が質問者にとって良い回答を出せるかどうかは、問いの立て方に大きく影響されます。実際のところ、ChatGPT は確率で続きを書く機械(from 深津式プロンプト読本)です。参考書で問題を解いたり本を読んでいる際に自分が知りたくなったことをベースに問いを立てることは、問いの精度を高めるのに役立ちます。

正確な記述が本の中に含まれていること、つまり信頼できる足場がある状態から LLM と対話することが重要なのだと感じています。

ホームページを VitePress でリニューアルした

ongaeshi.me

自分のウェブサイトを VitePress でリニューアルした。 自分がやりたいことは VitePress のデフォルトテーマの機能だけで完全に賄うことができた。一通りそろっていている。起動が早いのもよい。

レポジトリはGitHubで管理されており、push すると自動で deploy されるようになっている。この辺りはほぼ VitePress 公式の設定でうまくいった。

github.com

一番の目的は Markdown で書けるようにしてウェブサイトの更新頻度を上げるためで 、これで Obsidian を使って原稿の執筆が可能になった。普段使っている Vault に https://ongaeshi.me/history.html の原稿をコピーして運用している。追記したいときは Obsidian で編集・確認後、そのままクリップボード経由で GitHub にコミット。これでモバイルからでもホームページの編集ができるようになった。

Obsidian Web Clipper がすごい

https://obsidian.md/clipper

最近リリースされたばかりの新機能。ブラウザの拡張機能として使えて、Web 上の記事を簡単に Obsidian 上に取り込むことができる。Web 上にあるたくさんのドキュメントを読むのに重宝している。

iOS からも使える

Safari の拡張機能としてもリリースされているので実はスマホからも使えるのがポイント高い。SNS で流れてきた記事をスマホでクリップして後からオフラインで読んだり、はてブや Pocket でブックマークしておいた(後で読まれることのない)記事をまとめて取り込んだりできる。

PC でまとめて取り込んで後からスマホで読む

PC の Firefox からまとめて取り込んで、後からスマホで読む。PC だとちょっと取り込んだデータが壊れていてもこっちで加工したり複数のクリップを1つにまとめたりの編集作業が簡単にできる。

PC とモバイルの Obsidian 間の同期は色々なツールがあるのでそれぞれのお気に入りを使うとよい。(私は Obsidian Sync を使っている。)

専用の valut 「scrap」

長い記事を大量に取り込むのを躊躇しないように、メインで使っている Obsidian ノート(以下 main vault)とは別の専用の vault を作ることにした。名前は「scrap」とした。

scrap valut

この vault には気になった記事やページをどんどん取り込むことができ、情報収集がスムーズに進む(購入したいものの Amazon ページとかも取り込んでいる)。フォルダ構造も専用の vault なので極力シンプルにしている。

フォルダ名 説明
Clippings Obsidian Web Clipper がデフォルトで取り込むフォルダ。
Archive 読み終わったらこっちに移動。

Obsidian Web Clipper はデフォルトだと開いている vault に対して取り込みを行うので、設定で scrap vault を直接指定して取り込むようにしている。

Obsidian Web Clipper Settings

vault を分けておくことで scrap に絞って全文検索できるようになるのも便利。

外国語の記事は翻訳したものを取り込む

原文はリンクさえ残っていれば(それは Obsidian Web Clipper がやってくれる)いつでも確認できると割り切る。

Google ウェブサイト翻訳で翻訳したページを直接取り込むようにしている。日本語だと読むスピードが全然違う。ちまちまと頑張っている英語の勉強はこの記事は面白そうかの判断に使っている。

※ 書きながらこのメソッドなら中国語だろうがドイツ語だろうが何だって読めるじゃん!と思ったが、パッと見たときに面白そうかの判断が難しいんだろうなぁ。

取り込んだ記事にメモを残す

記事を読む中で気になった箇所には==テキスト==でハイライトを付ける。自分の考えをその場でメモとして追記してしまうこともある。

能動的に読んだ方が記憶の定着率がよいので色々手を動かしながら読むと理解力が上がる感覚がある。

メインノートにスクラップ

読み終わって特に面白いと感じた記事は、ハイライト部分などを抜粋して main vault に新規ページとしてスクラップする。このプロセスによって、日常的に参照したい情報と一時的な情報を自然に分けることができ、 main vault が効率よく整備される。

実用 git 第3版を読んだ

内部実装を分かりやすく説明した2章が特に面白い。 それぞれはシンプルな blob, tree, commit の組み合わせで複雑なバージョン管理が実現できているのが分かった。

blob はBinary Large OBjectの略だということをこの本で初めて知った。

ChatGPT さんにも聞いてみる。

「blob」は「Binary Large Object」の略です。データベースやファイルシステムで、画像や動画、音声データなどの大量のバイナリデータを扱う際に使われます。構造化されていない大きなデータをそのまま保存するための形式として広く利用されています。

Лучший частный хостинг