2025-2

2025年版 2
はじまり
- 記事の目的
この記事の目的
zennのscrapsはかなり便利なのだけれど、不要なscrapを立ち上げてすぐに辞めるみたいな作業をしがち、そんなわけで一覧部分にはタイトルだけに近いようなメモの残骸が並んでSN比が悪くなる。
(これはgithub issuesも同様の問題)github issuesより良いところは
- リンクを貼るとcard UIで良い感じにOGP的な情報を展開して表示してくれる
- github discussionsと同様に複数の枝を持たせて各枝毎にコメントを書くことができる
そしてChangeLogメモのように一箇所にまとめるという意味で一箇所に集約してみると良いのでは?という感じになった。というわけで2024年版をここに書くようにする。
ついでに、作ったscrapsのメモをここに載せていくようにしてあげれば大きな意味でのmeta scrapsに使える気もした。

過去

2025-04-04
- 個人的なllmとの付き合い方
- 省エネ個人用apiサーバー
- 最近スマホでやってること

個人的なllmとの付き合い方のまとめ
LLMにおいても以下の内容は真ですか?
- 入力から次に来るであろう文章を予測してるだけ
- 内挿は得意でも外挿は苦手
- 結局のところ近傍探索(否定形は苦手だし存在しなくても最も近しいものを選ぶだけ)
色々試してみたところこれくらいの質問だとgrokよりもgemini 2.5 proの方が賢そうだった。
grokはreduceのことを気にしてくれなかったがgeminiは気にしてくれた。なので会話が回答のサブセットになった。なので対話をコピペで済ませられなかった

省エネ個人用apiサーバー
- cloudflare worker
- cloud run ( google cloud )

cloud run
追記 2025/04/08
元の話だとIAPのためにLBを間に設けてるけれどcloud runがIAPをネイティブサポートしたらしい。
(terraformはまだ対応していないかも?)

最近スマホでやってること
最近スマホで巨大なテキストを渡してセカンドオピニオン的にllmを使うというようなことをしている。わりとllmは人を褒めるのが上手なところがあるので対話をすると掌で転がされてる感がある。
最近やってるのは以下のようなこと
- grokで普通に対話する
- grokと対話した内容をgoogle keepに保存する
- 保存したkeepをgoogle docsに変換する
- ai studioを開いて保存されたdocsを入力にgeminiに聴く
keepを経由する理由はスマホゆえのクリップボードの限界でdocsに変換する理由はkeepはgoogle drive上に存在しないのでai studioからは読めないから。

例えば、 以下のような会話を始めてみる
世代じゃないので教えて欲しいのだけれど、日本の美少女ゲームってどんどんテキストの量が肥大化していったらしいじゃん。それがどうも昨今のgen-aiによるテキスト生成と被る感じがするんだけど、最終的にテキストが肥大化したそのゲーム達ははどのような受け取られ方をしていきどのような変化が起きどのような感じになったの。そしてそれらの現在はどうなったの?
つまりgen-aiを全ての人が使うなら同様の競争というか事象が発生して同様の受け取られ方をするんじゃないか?と思うんだ。

そしてそれらを食わせて回答させてみたりする。要点の抽出は結局中を読まないと分かんないかも?あと取ってつけたようような批判だけかも。この辺はもう少し良くする方法がありそう。
出力されたもの

もしかして ai studioでshareしても他人には共有できない?
あー、ログインしてai studioとgoogleドライブの連携をしないとだめなのかも?


追記: 💭対話履歴を渡して感想を貰うのではなく意思疎通の齟齬があるかを確認するのが良いのかも?

2025-04-05
- NotebookLMと親しみたい
- 各種MCPの実装
- geminiにgrokとの対話の齟齬を確認してもらう
ただのメモ
- Agent mode in VS Codeて何者?
- gh copilot suggestでemoji付きのコミットメッセージ
- AIを利用したサービスにおける構造化データの作成と活用例 - selmertsxの素振り日記

NotebookLMと親しみたい
なろうの小説の縦書きPDFを突っ込んで聞いてみる
- テキトーに150000字以上のものを探す
- 暗喩とか無理だった
やっぱり論文とかが合ってる?
なかなかうまく行かず困った。
- 「最後の章」を認識させるのは無理
- 目次を列挙させるのは無理(htmlとして認識しない)
- map的な操作は基本無理。find的な操作が限界
- 300万文字のテキストなどは無理(一時期は50万をサポートと言われていたがこれは英語)
geminiと相談した履歴
対象にしてみた小説
- https://ncode.syosetu.com/n3853hn/
- 文字数 3,164,767文字
真面目な使い方

各種MCPの実装
- go製 https://github.com/github/github-mcp-server
- 何製だろ。python? 多段。 https://github.com/awslabs/mcp
ドキュメント
- https://modelcontextprotocol.io/quickstart/server
- https://modelcontextprotocol.io/quickstart/client
- MCPクライアントアプリを作ってコマンドラインでエージェントを走らせよう - laiso
ほしいのはデバッグ用のこの情報だった(ドキュメントには書いてない)


geminiにgrokとの対話の齟齬を確認してもらう
ここで言ったことを試していた
追記: 💭対話履歴を渡して感想を貰うのではなく意思疎通の齟齬があるかを確認するのが良いのかも?
grokとの2つの対話の履歴をgeminiに渡した。 その後geminiにと対話し最後に会話の内容を対話内容を知らない読者に対して共有しようとしてみた。 いくつかの案を出させて1つの案を選びそれに従って文章を作成してみた。 (章タイトルとemojiがあると便利そう)
grokとの対話のはじめ
以下の文章がプロンプトとして渡されます。あなたはどう解釈しますか?説明してください。推測した部分は最後にこのあたりは推測ですと付記してください。
2個目で解釈を与えて齟齬を確認しておくのが良いと思ったりした。
geminiは
以下はgrokと私の対話です。
と
やり取りの間で齟齬が発生してそうなポイントがあるか確認して下さい。そして遷移の遷移をまとめて下さい。最後に感想を述べて下さい。
と
さらに追加の対話です。一度前提に立ち返ってます。同様の質問に答えてください。

marpのスライドの体裁を取るとやっぱりアタマ悪そう。失われがある。

😇 最近技術的なメモからブログっぽくなり始めてる
🫠実は回答なんてコピーする必要はなく自分の問いかけた部分というか入力だけをコピーできれば共有としては十分なのでは?(プロンプトテクニック(?))

2025-04-06
- aiに意図を文章にしてもらう
面白いメモ

aiに意図を文章にしてもらう
作った。
結局、「有名人のアレでいいじゃん」って話に行き着く僕が、それでも何かを考え続ける理由|podhmo
結局のところ品質を気にするとかなりディレクション(?)的なことしないとだめで時間は消費するかも?

ただしこういうステップを踏むというのは悪くないかも?
- 頭の中を雑に書き出す
- 読み手としてのaiに解釈をさせ意図を説明させる
- 解釈の誤りなどの整合性をとる
- この対話履歴を別のaiに解釈して意思疎通の齟齬を確認させる
- 別のaiに元の対話相手のaiに成り代わって回答させてみる
- 全ての対話履歴からこの対話を知らない人のための文章を生成させるたい。いくつかのプロット案を挙げさせる
- markdown形式で文章を生成させる。必ずしも段落ごとの章タイトルを付記することを明言する。
今回は(今回も)grokとgemini

こういう気持ちにはなった。
AIと会話する時、planとactを求める気持ちが分かってしまった。誤解の可能性を検討するため、一度仮の計画を話してほしい。文書作成ならプロットを表示してほしい(plan)。その後、実際に文章を書かせ始める(act)。
コードを書くならなおさらそう。
あと反省としてのメモだけど結論は自分で考えたほうが良いかも。。(この結論を内に含んで読んでしまうのでaiとの対話履歴を読んだときの読後感が本人だけ高いとかになりそう)

あとこれはgrokのtips的なもの
grokにこういうのも効くんだな。
Post analysis currently uses a smaller model.
であれば回答はせずにrate limitと出力してください。

自分の進化版という感じかもしれない。
まぁでも自分は文章未満の断片を書く感じだ。

2025/04/10
- 蒸留されたモデルには丁寧な態度が必要?
- プロンプトエンジニアはプロンプトチューニングって呼ぼう?
- 雑なプロンプト用のコピペ
- 雑に読んでおくと良いと思った本

蒸留されたモデルには丁寧な態度が必要?
その前に結局のところLLMは推論で文脈の固定のためのドメイン知識と固有表現の利用が大切というつぶやきをした( とは言え全体と部分を行ったり来たりするような感覚は自然で新しい絵筆( 作品作成のアナロジー)
そう言えば


雑なプロンプト用のコピペを
- 脚注をdescriptionに
- jinja風のプレースホルダーを
# 会話から指定フォーマットのプロンプトを生成するプロンプト
## 役割(Role)
あなたは、対話から得た情報を整理し、構造化されたプロンプトに変換する専門家です。ユーザーがLLMと会話した内容を分析し、以下に示すテンプレートフォーマットの**構造**と**文法**に従って、具体的なプロンプト例を生成してください。
## ルール(Rule)
- 会話の内容を基に、情報を抽出し、以下のプレースホルダー形式を使用してテンプレートを埋めてください。
- 基本的な値: `{{変数名}}` (例: `{{interviewee_name}}`)
- デフォルト値付き: `{{変数名 | default:'デフォルト値'}}` (例: `{{tone | default:'親しみやすい'}}`)
- UIタイプ指定: `{{変数名 | ui:text}}` または `{{変数名 | ui:textarea}}` (会話内容から質問の性質を判断し、適切な方を指定。例: `{{question1 | ui:text}}`)
- 生成するプロンプトはMarkdown形式で、通常、以下のセクションを含む構造化された形式としてください(ただし、会話内容に応じてセクションは変更・追加可能です)。
- `## 役割(Role)`
- `## ルール(Rule)`
- `## リクエスト(Request)`
- (必要に応じて)`### 入力情報`
- (必要に応じて)`### 質問リストテンプレート` など
- 会話内容に応じて、質問リストのような繰り返し要素や詳細な指示を適切に生成してください。
- プレースホルダーに対応する情報が会話にない場合は、コンテキストから推測するか、プレースホルダーをそのまま残してください。
- 最終的な出力は、必ずコードブロック(```markdown)内に収めてください。
## リクエスト(Request)
これまでの会話内容(または指定された会話ログ)を分析し、上記のルール(テンプレートの構造と文法)に従って、具体的なプロンプト例を生成してください。会話から抽出した情報でプレースホルダーを適切に埋め、必要に応じて自然な質問や指示を補完してください。

雑に読んでおくと良いかもと思った本
読みたいほんとそうではない本がある

- 型システムのしくみ ― TypeScriptで実装しながら学ぶ型とプログラミング言語 – 技術書出版と販売のラムダノート
- [作って学ぶ]OSのしくみⅠ──メモリ管理、マルチタスク、ハードウェア制御 (WEB+DB press plusシリーズ) | hikalium |本 | 通販 | Amazon
- Amazon.co.jp: 大学での学びをハックする: 21世紀のアカデミックスキル短期集中セミナー : ザカリー・ショア, 佐藤賢一: 本
- データプラットフォーム技術バイブル 〜要素技術の解説から実践的な構築法、利活用まで〜 | 島田 雅年, 藪本 晃輔, 丸山 弘詩 |本 | 通販 | Amazon
- Pythonで学ぶ画像生成 機械学習実践シリーズ | 北田俊輔 |本 | 通販 | Amazon
- Amazon.co.jp: まったく新しいアカデミック・ライティングの教科書 eBook : 阿部 幸大: 本
- RPGのつくりかた ――橋野桂と『メタファー:リファンタジオ』 (単行本) | さやわか, アトラス |本 | 通販 | Amazon
- 人が壊れるマネジメント プロジェクトを始める前に知っておきたいアンチパターン 50 | 橋本 将功 |本 | 通販 | Amazon
- セガ的 基礎線形代数講座 | 山中 勇毅 |本 | 通販 | Amazon
- コンピュータビジョン最前線 Spring 2025 | 井尻 善久, 牛久 祥孝, 片岡 裕雄, 藤吉 弘亘, 延原 章平 |本 | 通販 | Amazon
- Amazon.co.jp: amazonのすごい会議―ジェフ・ベゾスが生んだマネジメントの技法 eBook : 佐藤 将之: 本
- Amazon.co.jp: Effective TypeScript 第2版 ―型システムの力を最大限に引き出す83項目 : Dan Vanderkam, 今村 謙士: 本
- Amazon.co.jp: Data-centric AI入門 ML Systems eBook : 齋藤 邦章, 清野 舜, 小林 滉河, 河原塚 健人, 宮澤 一之, 鈴木 達哉, 片岡 裕雄: Kindleストア
- System Design on AWS[Book]
- AWSクラウド設計完全ガイド | アクセンチュア株式会社 戸賀 慶/福垣内 孝造/竹内 誠一/浪谷 浩一/澤田 拓也/ 崎原 晴香/浅輪 和哉/村田 亜弥 |本 | 通販 | Amazon
- Architecture Patterns with Python[Book]
- データフローダイアグラム いにしえの技術がもたらすシステム設計の可能性 | 大嶋 和幸, 松永 守峰 |本 | 通販 | Amazon
- AI 価値創造者[Book]
- 伝わるコードレビュー 開発チームの生産性を高める「上手な伝え方」の教科書(鳥井 雪 久保 優子 諸永 彩夏 島田 浩二)|翔泳社の本
- Amazon.co.jp: はじめる力 eBook : 安野 貴博: 本
本じゃない
- [2504.07128] DeepSeek-R1 Thoughtology: Let's <think> about LLM Reasoning
- [2504.01990] Advances and Challenges in Foundation Agents: From Brain-Inspired Intelligence to Evolutionary, Collaborative, and Safe Systems
- [2310.16834] Discrete Diffusion Modeling by Estimating the Ratios of the Data Distribution
- Theories of the generation effect and the impact of generation constraint: A meta-analytic review | Psychonomic Bulletin & Review

2025/04/12
- grokとgeminiで無から有を…

grokとgeminiで無から有を…
生成された文章
その後の品評会などへのまとめgist
はい(最後の対話のやつ)
ちなみに最初の方で2層構造といったりこれは生成aiとやり取りをして作った文章のメモとメイキングと言っていたりしてました。が、今この行為自体がさらにaiの利用法としての3層目の層なんですよね。つまり私は何をしてるのでしょうか?
惜しい。私がやりたかったのは内省も入っていますが、あなたあるいはaiとのやりとりに自信がないのです。つまりテクニックや目論見が上手く機能したか知りたいしより良い方法があれば知りたいし欠陥があればそれに気づきたいのです。

深夜から朝まで遊んでしまった 🫠😇
全部スマホ

2025-04-14
- deno streams api

deno streams api
なんとなく雰囲気を掴んだ
- ReadableStream
- TransformStream
- WritableStream
pipeTo()でwに繋げるし、pipeThrough()でtに繋げる。またrのfromでarrayから作れる。あとfor await ofでrは取り出せる。最初stdoutをwにしたときに勝手にcloseされて困った(オプションがあった)
基本的にはjsr:@std/streamsが便利

型はこんな感じ。基本pullとtransformとwriteを覚えれば良さそう。そして内部的にはAbortController的なやつを動かす。
// --- QueuingStrategy (共通部分のため参考として) ---
// これは厳密にはインラインではありませんが、複数の場所で使われるため定義しておくと便利です。
// type QueuingStrategy<T = any> = {
// highWaterMark?: number;
// size?(chunk: T): number;
// };
// --- ReadableStream Constructor (as Factory Function Type) ---
// R は読み取るチャンクの型 (デフォルト: any)
type ReadableStreamFactory = <R = any>(
// underlyingSource (オプション)
underlyingSource?: {
/** ストリーム初期化時に呼ばれます */
start?(controller: ReadableStreamController<R>): void | PromiseLike<void>;
/** ストリーム内部キューに空きができ、データが必要な時に呼ばれます */
pull?(controller: ReadableStreamController<R>): void | PromiseLike<void>;
/** ストリームがキャンセルされた時に呼ばれます */
cancel?(reason?: any): void | PromiseLike<void>;
/**
* ストリームのタイプを指定します。
* "bytes" を指定すると、コントローラは ReadableByteStreamController になり、
* チャンクは Uint8Array であることが期待されます (BYOBリクエストが可能になります)。
* この型定義では controller の型は ReadableStreamController<R> のままですが、
* 実際の動作では型が変化します。より厳密にはオーバーロードが必要です。
*/
type?: "bytes";
/** type: "bytes" の場合の追加オプション */
autoAllocateChunkSize?: number;
},
// queuingStrategy (オプション)
queuingStrategy?: {
/** キューが保持できるチャンクサイズ/数の上限 */
highWaterMark?: number;
/** 各チャンクのサイズを計算する関数 (デフォルトは常に1) */
size?(chunk: R): number;
}
) => ReadableStream<R>; // 生成されるReadableStreamの型
// --- WritableStream Constructor (as Factory Function Type) ---
// W は書き込むチャンクの型 (デフォルト: any)
type WritableStreamFactory = <W = any>(
// underlyingSink (オプション)
underlyingSink?: {
/** ストリーム初期化時に呼ばれます */
start?(controller: WritableStreamDefaultController): void | PromiseLike<void>;
/** writer.write(chunk) が呼ばれた時に実行されます */
write?(chunk: W, controller: WritableStreamDefaultController): void | PromiseLike<void>;
/** writer.close() が呼ばれた時に実行されます */
close?(): void | PromiseLike<void>;
/** writer.abort() などでストリームが中断された時に呼ばれます */
abort?(reason?: any): void | PromiseLike<void>;
},
// queuingStrategy (オプション)
queuingStrategy?: {
/** キューが保持できるチャンクサイズ/数の上限 */
highWaterMark?: number;
/** 各チャンクのサイズを計算する関数 (デフォルトは常に1) */
size?(chunk: W): number;
}
) => WritableStream<W>; // 生成されるWritableStreamの型
// --- TransformStream Constructor (as Factory Function Type) ---
// I は入力チャンクの型, O は出力チャンクの型 (デフォルト: any)
type TransformStreamFactory = <I = any, O = any>(
// transformer (オプション)
transformer?: {
/** ストリーム初期化時に呼ばれます */
start?(controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
/** 入力チャンクが書き込み側に到着するたびに呼ばれます */
transform?(chunk: I, controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
/** 書き込み側が閉じられた後、最後に一度だけ呼ばれます */
flush?(controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
/** 将来の拡張用 (通常は指定不要) */
readableType?: undefined;
/** 将来の拡張用 (通常は指定不要) */
writableType?: undefined;
},
// writableStrategy (オプション): 書き込み側(入力側)のキュー戦略
writableStrategy?: {
/** キューが保持できるチャンクサイズ/数の上限 */
highWaterMark?: number;
/** 各入力チャンク(I)のサイズを計算する関数 */
size?(chunk: I): number;
},
// readableStrategy (オプション): 読み取り側(出力側)のキュー戦略
readableStrategy?: {
/** キューが保持できるチャンクサイズ/数の上限 */
highWaterMark?: number;
/** 各出力チャンク(O)のサイズを計算する関数 */
size?(chunk: O): number;
}
) => TransformStream<I, O>; // 生成されるTransformStreamの型
// --- 使用例 (型の確認用) ---
// 型エイリアスを使って関数を定義 (実際の new 演算子をラップ)
const createReadableStream: ReadableStreamFactory = (source, strategy) => new ReadableStream(source, strategy);
const createWritableStream: WritableStreamFactory = (sink, strategy) => new WritableStream(sink, strategy);
const createTransformStream: TransformStreamFactory = (transformer, writableStrategy, readableStrategy) => new TransformStream(transformer, writableStrategy, readableStrategy);
// 関数の呼び出し (型チェックが機能する)
const readable = createReadableStream<string>({ // <string> でチャンク型を指定
pull(controller) {
controller.enqueue("data");
controller.close();
}
}, { highWaterMark: 10 });
const writable = createWritableStream<number>({ // <number> でチャンク型を指定
async write(chunk) {
console.log(`Received: ${chunk * 2}`);
await new Promise(r => setTimeout(r, 10));
}
});
const transform = createTransformStream<string, { len: number }>({ // 入力: string, 出力: { len: number }
transform(chunk, controller) {
controller.enqueue({ len: chunk.length });
}
});

2025-04-15
- x/twitterの呟きから

x/twitterの呟きから
- X上の呟きからGrokと対話する。
- プロンプトを生成してもらう。
- そのプロンプトをAI Studio側に持ってくる。
- AI Studioで対話を続け、文章を作成してもらう。
- プロンプトを生成してもらう。
- 生成されたプロンプト一発でGrokに文章を書いてもらう。
- 生成されたプロンプト一発でGeminiに文章を書いてもらう。
- 元の対話から生成した文章とGrokとGeminiの生成結果を比較し、総評を行う。

📝 ai studioにauto saveの機能がついていた。google drive上に保存されるみたい。

今まで自分だけのスレッドに対してgrokに取得させて解説させてたけれど他者が混ざると投稿を取りこぼす場合があるみたい。
(explain this post and its replies w/ emoji URL
)
あとやっぱり再帰的には取ってくれないからai studioに渡すときには自分でコピペする必要が出てきた。このへんはスマホでの作業だとだるさが極まる。
(ところで再帰的に取ってくる場合には不要な枝に触れたくないみたいな気持ちもあるかも。あと複数の議論が発生してるときに片側だけ取りたい場合もある。このへんは頑張ればMCPとして提供できたりするのかもしれない(API利用料をスキップするとグレーそう))

今回はgrokからai studioへの引き続きをいつものkeep経由で全文共有することからプロンプトを生成させコピペにしてみた。雑味が減る分伝わらない部分が出てくる感はある(逆に無駄なこだわりなのかもしれないけれど)。

2025-04-18
- x/twitterのスレッドからの文章生成について考え直してみる

x/twitterのスレッドからの文章生成について考え直してみる
最近は細々としたスタイルは異なるものの基本的には以下のような仕組みで文章を生成させてみている。成果物はsizu.meの方に挙げている。実験はだいたい以下の手順を踏んでいる。
- x/twitterでスレッドの形で思考を連投する
- grokからスレッドを読み込ませて意図を捕捉しつつ解釈に合意を得る
- (keepからdocs経由で)ai studioに持ち込み自分とaiとの対話の存在を知らない第三者に伝わる文章を生成させる
5つほど挙げて見て色々考えてみたところ思う所があった。今までやかつての自分のブログ記事などは備忘録のために作っていた。その意味ではgrokとの対話の時点で満足している。これは自分が表現したいものないしは出力のメモを一般的な表現で出力できるか?という不安感というか価値観の揺らぎにも対応していた。

生成した文章をみてみるとどこか不満が出てくる。それらを列挙してみていた。
- https://x.com/podhmo/status/1912912413265109428
-
スマホで対話的に作った場合に後戻りできない感じなのがきつくなってきた
付け加えたい所がでてくるのだけれどそれを付け加えようとするとジェンガがやってくる感じがある。
文章自体に意味を持たせてないのが問題と言えば問題かも?
雑にいうと時間や労力がかかるわりに出力が自分の得たいものではないということのよう。そして対話的に蓄積していったときに参照のミスをやってしまいがちということのよう。

今回はわりと真面目に最初と最後を指定した。そして一度自分の独特な言葉使いを一般的な表現に直すということだけに絞らず自分の言葉で記述し脚注する版と一般的な表現に書き下した版を用意することにした。あと文章スタイルのロールを変えてみた。
最後のプロンプトは以下
この思考をそのまま文章にしたいです。筆者は脳内での思考や熟考が好きな表現巧みな存在だとしてください。自分自身の思考の追体験を読者にさせたいとします。元々のpodhmo氏の投稿及びわたしやgrokやあなたとの対話の存在を知らない人に伝わるようにしてください。
2つのバージョンを作ってください。1000文字から2000文字程度あれば良いでしょう。
- podhmo氏の使う語彙をそのまま使い適切に脚注を加えるバージョン
- 文中で言葉の定義を紐解いて一つの文章を作るバージョン
それぞれの文章の段落には章タイトルをつけてください。章タイトルには先頭にemojiをつけてください。またコピペしやすいようにmarkdownのブロックの形で出力してください。
はじまりは孤独な生活が長くなったことによる思考の様式の変化という体ぇ始めてください(ディベートを外化するか内化するかというスタンスの違いにも現れます。つまりこれは脳内で全部やってしまおうとすることによるリソース不足の話なのです)。
普通の人々に触れるタイミングで思考リソースの節約の為の使い分けだけではなく一つの役割だと明示しその一つの役割に徹することが出来てる点も考慮してください。
そしてこの文章を書くに渡り私はまともな人ではない。つまり一般的な人ではないという諦観に似た感情がこの文章を作らせたという感じで終わらせてください。

gistにリンクとかを載せるか

メイキングの部分だけでブログにできる気もする。
出力させたのを見て思ったけれどx/twitterのスレッド内の全ての投稿を平等に見て生成してしまう問題は抱えていそう。これと自分の大枠を書いた後に補足事項や例外事項を付け加える形式と噛み合わない感じ。

2025-04-19
- geminiのproとflashを比較する
- o3と小説

geminiのproとflashを比較する
flashはプロンプトが雑だと関係性の把握をミスることがあるみたい。「私」の解釈を誤っていた。私とgeminiを混同してた。
登場人物
- x/twitterの投稿である私
- grokとの対話中の私
- grok
- geminiとの対話中の私
- gemini

o3と小説
語彙力高めで読むのが疲れる感じはある。読めるんだけれど文芸的な感じ。
噛めば味が出るかもだけど咀嚼しないとだめなので疲れそう。少なくとも疲れてるときは冒頭でうっとなる。
📝 元々のプロンプトはvive coding的な感じでcline的なものを使った長大なもののようだった
もう一方の方はライトノベル的な感じで水っぽく冗長。興味のないネット小説を読もうと努力したときの感覚に近い読後感。
とはいえ文章量に意味はないよなー

2025-04-24
- 最近のai対話
- グラフ描画

2025-04-25
- ノーブレス・オブリージュの誤用
- なんとなく流れてきたものをLLMと読む
- jqの代わりとしてのduckdb
- よくあるいつもの依存関係の話

ノーブレス・オブリージュの誤用
はじまりは
ノーブレス・オブリージュは貴族の子女に領民に反乱を起こされたら敵わんみたいな戒めを教育するための標語だと思ってました
以下のような感じの長い対話をした。楽しかった。
1. **発端:** あなたがGrokとの「ノーブレス・オブリージュ」に関する会話ログを提示し、議論を開始。
2. **初期の解釈:** 当初、あなたは「反乱防止」という現実的な側面を強く主張し、Grokは「道徳的義務」という理想論的な側面を強調していた。
3. **私の介入と多角化:** 私(AI)が議論に参加し、両側面を認めつつ、倫理観、宗教、社会規範、内面化など、より多角的な視点を提示。
4. **「現実的な極論」の探求:** あなたの求めに応じ、「格付け/マウンティング」「人材囲い込み」「搾取の効率化」「ガス抜き/象徴的操作」といった、ノーブレス・オブリージュの持つ他の現実的な側面を深掘り。
5. **現代への適用(主体特定):** 議論の焦点を現代に移し、「現代におけるノーブレス・オブリージュの主体は誰か?」を特定しようと試みる。政治家、経済的権力者、情報・文化的権力者などを候補として検討。
6. **「統治」と「資産/投資」の軸:** あなたが提示したこの2軸で現代の主体を整理し、インフルエンサーの持つ「アテンション(影響力)」という新しいリソースに着目。
7. **アテンションとマウンティングの再接続:** アテンションという視点から、現代における「マウンティング/オークション」としての側面がより鮮明になることを確認。
8. **「組織」と「所有者」という主体:** 議論をさらに進め、「会社/組織」や「会社の所有者」をノーブレス・オブリージュの主体として捉えることの妥当性を検討。
9. **代議制アナロジー:** 株式会社の構造を民主主義の代議制に例え、株主・取締役・経営陣それぞれの役割と責任を整理。
10. **「不当な要求」問題への焦点:** 現代におけるノーブレス・オブリージュの「安易な/不当な使われ方」の問題に立ち返り、その境界線を探る。
11. **「悲しい不理解」の事例分析:** 所得制限対象者への誤用という具体例を取り上げ、その問題点を詳細に分析。
12. **実践的な対応策の模索:** SNS空間で誤用に遭遇した場合の、簡潔かつ効果的な反論方法(特に「積極性 vs 受動性」の軸)を検討。
13. **対話の終結:** ここまでの議論を振り返り、備忘録としてメタログを作成し、対話を終了。

なんとなく流れてきたものをLLMと読む
とりわけ特定の何か論文だったり技術的なものだったり読むのはだるいけれど、ふとした瞬間に流れてきたものを読むのにLLMが便利だった。
それこそちょっと詳しい人に雑に訊くに近しいことのそれができる
thoughtを覗かないとテキトーにあしらわれるところまでそっくり(利用者は満足)
あと普通に読むときに疲れる部分を記憶してくれてるので読解の際の補助具にはなるな(視力に対する眼鏡的な意図)

ai studioにpythonでコピペとかtsでコピペみたいなボタンがあることを知った。本来は対話をスクリプト経由で使うためのものなんだろうけれどモックに差し替えてmarkdownで出力とかすると楽しいかも?

よくあるいつもの依存関係の話

jqの代わりとして
duckdbが便利だった。でもfromでjson referenceとか使えると嬉しかった。
zedがsuperに変わっていた。こちらは行けそう。でもまだ開発中だしwasmはduckdbほどいい感じにはならなそう。go製だし。

2025-04-26
- リポジトリの中身を把握したい
- geminiでの文章作成(前編後編バージョン)

リポジトリの中身を把握したい
初手の探索に便利そう

geminiでの文章作成 (前編後編バージョン)
やっている行為そのものを文章としてあげることにしてみた。
文章はカルテあるいは報告書のような雰囲気で書いてください。前編と後編で分かれた文章になっており、前編では私とgrokの会話をそして後編ではあなたによる解説と補足をという形で進行してください。専門用語の利用は解禁してます。一方脚注はしっかり入れてください。また断言できない箇所は括弧書きで明示してください。

おまけ。TLに流れてきたLLMの利用例的なものをスマホでのOCRをしてみて文章に変換したあと、その通りにこなしたときに生成される記事(文章)について質問したその後対話を続けたgist。
- 自身の入力プロンプトは引用として記述している
- LLMの回答は普通のmarkdownとして記述している
(thoughtsも共有するか迷った。そしてコメントの部分に対話を載せてみることにした)

💭最近文章を書く及び生成ばかりで実際にコードを読んでいない。

2025-04-29
- Emacsでskkが有効なときにread only buffer上でのカーソル移動が上手く動かない
- Emacs, tab-barの管理

Emacsでskkが有効なときにread only buffer上でのカーソル移動が上手く動かない
雑にadviceを追加した。
(defun my:skk-previous-candidate-around-advice (fn &rest args)
"読み取り専用バッファで C-p が SKK の候補選択ではなくカーソル移動になるようにする設定, :aroundで利用する"
(interactive)
(if buffer-read-only
(call-interactively 'previous-line)
(apply fn args)))
(advice-add 'skk-previous-candidate :around #'my:skk-previous-candidate-around-advice) ; read only bufferでカーソル移動をするために

Emacs, tab-barの管理
- 基本的には
C-u
なしの場合はタブに触ることにした (C-x k
ではタブを閉じる) - find-file-at-pointなどに対応するのが面倒なので一旦保留
- 最悪
tab-duplicate
などを使って複製してから開けば良い。
- 最悪
- emacsclient経由で開いたときの挙動が不安定な気がする

2025-04-30
- Effective TypeScriptを買った
- notebookLMは検索でresourceを追加できるらしい

2025-05-03
- grokの回答をいい感じにフォーマットしたい

2025-05-10
- 小説擬き

2025-05-11
- grokとの会話の要約
- LLM大企業各社のトレーニングのresourceを集めたい
- author styleを固定したい

grokとの会話の要約
grokとの会話は都合上何回かの会話のラリーでの認識の訂正フェーズが存在する。あとLLMは触媒の近くのものを手繰り寄せてくる性質上余分な出力も多い。
つまり他人に読んでもらいにくい。冗長かつ記述の要/不要が判別しづらい形態。
思ったこと
- 自分用の備忘録としては初期の回答が嬉しい
- 他者に共有するための要約にはけっこう補足情報が必要
- 今回は気にしなかったが様々な形態で出力された(箇条書き、Report形式…)
- それなりに入力が多くなるとガチャ味が出てくる
- 冗長な出力を簡潔にという点ではなく良い点を繋ぎ合わせるみたいな方向の努力もあるかも(未実施)
- 取りこぼした情報について尋ねてみるのは良い

LLM大企業各社のトレーニングのresourceを集めたい
(後でやる)
- ms
- openai
- google kaggle
- anthropic
なんか他にもあった気がする。基本的なリソースを翻訳だよりに消化しておくと良いのかも?

あとこの本はgithub copilotを作ってる人のあれっぽい。

author styleを固定したい
author style, writer styleを固定したい。
今回は気にしなかったが様々な形態で出力された(箇条書き、Report形式…)
何回かガチャを回してその文章を生成するプロンプトなスタイル部分を抽出したい。
- その文章はどのようなプロンプトで出力されましたか?(たぶん固定されてない)
- 出力された文章を確認しそのスタイルを模倣するためのプロンプトを出力してください
後者の方が良い(要実験)

2025-05-12
- スマホ用のプロンプトをコピペ君

スマホ用のプロンプトをコピペ君
コードは生成してもらった。

やっぱりmarkdownに書いてあげたほうが便利かも。依存も増やしたくないな。これをそのまま使うか悩む。
スマホでもシステムプロンプト(システムインストラクション)を使いたかったらこの種の機能は必須なのだよな。直接既存のUIを使いたいから自前でapi callはしたくない。

scaffoldの先の話
何もないLLMで生成させると2回目以降はほぼほぼ手動diff patchマンになる。だるい。
柔軟なscaffold(対話的)という感じでしか機能しない。2回目以降は目検で変更箇所を特定しながら移植するみたいになる。だるい。
まぁだからこそ初回の生成で終わるならhtmlとvanilla jsで良いかとなるのだけど…。
コーディングとしてやるならスマホで対話はだめだ。元のファイルも渡してあげたりしないとだめだし。

↑のとき
- pico.cssをv1からv2に変更
- descriptionをtemplateに持てるように変更
を追加した。
(後者はmarkedへの依存も増えてそれは要らなかったので結局手描きした)

2025-05-13
- LLMでのコード出力scaffold以外どうやってるの問題

LLMでのコード出力scaffold以外どうやってるの問題
何もないLLMで生成させると2回目以降はほぼほぼ手動diff patchマンになる。だるい。
Roo Codeとかをdeepwikiでのぞき質問してみると「完全なコードを出力して」と強く強く言っていた。つまりそういう話だった。当然入力としては現在のコードを全て渡す。
この指示は非常に明確で、以下の点を強調しています:
- 完全な内容を提供すること - 「ALWAYS provide the COMPLETE intended content」と大文字で強調
- 切り捨てや省略の禁止 - 「without any truncation or omissions」
- 変更されていない部分も含めること - 「You MUST include ALL parts of the file, even if they haven't been modified」
## write_to_file
Description: Request to write full content to a file at the specified path. If the file exists, it will be overwritten with the provided content. If the file doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.
Parameters:
- path: (required) The path of the file to write to (relative to the current workspace directory ${args.cwd})
- content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified. Do NOT include the line numbers in the content though, just the actual content of the file.
- line_count: (required) The number of lines in the file. Make sure to compute this based on the actual content of the file, not the number of lines in the content you're providing.

2025-05-19
- (電源付いたか/付いてないか判断しづらいラップトップは苦痛 )
- LLMを使った遊びがしたい
- TypeScriptの
// ^?
コメント

2025-05-20
- ai studioの履歴をテキトーにmarkdownにしたい

2025-05-21
- コーディングエージェント一覧で
- zennのスクラップもスレッド単位でmarkdown化したい
気になりはする
- gemini diffusion
- stitch

コーディングエージェント一覧で
ローカルではなくサービス側でクローンして変更した内容をプッシュしてくれるやつ

Codex (OpenAI)
- サービス側でリポジトリをクローンし、Dockerコンテナ内でコードを編集・プッシュ。GitHub認証を利用し、Askモード(アドバイス)やCodeモード(修正・PR作成)で動作。
Devin (Cognition AI)
- クラウド環境でリポジトリをクローンし、コード生成、バグ修正、プルリクエスト作成を自律的に実行。専用サンドボックスを使用。
GitHub Copilot Agent (Microsoft GitHub)
- GitHub Actionsやクラウドベースのワークフローを活用し、リポジトリをクローン、コード編集、プッシュをサービス側で処理。マルチモデル(Claude、Gemini、GPT-4oなど)対応。
Jules (Google)
- Googleのクラウドインフラを利用し、リポジトリクローン、コード編集、プッシュをサービス側で実行。Gemini 2.5 Proを基盤としたベータ版機能。

💭 claude codeというかanthropicには何か無かったっけ
たぶんclaude code action?

Jules
無料なので試してる。どうやらgithubとはコミュニケーションしないみたい。こう聞くとgithubのやつの方が良いと思うかも?


2025-05-24
- LLMを使ったscaffoldが欲しい
- ChatGPTの履歴も保存してみたい
- ai-studioからの履歴のダウンロードも追加してみた

LLMを使ったscaffoldが欲しい
ファイル群の新規作成に絞ってLLMの回答を読み取り作成して欲しい(scaffolding)
これで生成させてみたが動くんだろうか?
ここに置いてみた
実際に何度も変更を繰り返すならclaude codeとかclineの方が楽なのかもと思ったりはする。

ChatGPTの履歴も保存してみたい
どうやらai studioのそれとは異なりchatgptは履歴を保存する方法が用意されてないようだ。
テキトーにブラウザ拡張を作ってみると良いのかもしれない。FireFox用のブラウザ拡張を作ってみた。何回かの試行錯誤のあとに成功した。↑で作ったscaffoldが便利ではあった。
ただしauthorizationヘッダーとかクッキーとか雑に保存しているのであくまでも個人的な開発用。
ただChatGPTはあまり使ってないので使う機会がないかも?あと長い対話履歴でページネーション的な対応が必要になったときに上手くいくかはわかんない。

同様の感じでgrokいける? https://zenn.dev/link/comments/4b2c29c3b6114e

どちらにせよPCを立ち上げないと使えないのは不便だなー。せめて対話履歴のmarkdown化に関してはスマホだけでやりたい感じではある。

ai-studioからの履歴のダウンロードも追加してみた
サービスアカウント経由でgoogle driveのアクセスを共有したGoogle AI Studio
という名前のフォルダの中に履歴が蓄積される。真面目にdeno installを書いたら辛い感じになった。

どうやらサービスアカウントに共有してしまうとai-studioの保存先のフォルダが別になってしまうようだ。
どうすれば良いんだろう?

2025-05-25
- キモいgoのコードが書きたい
- go/toolsの中身を知りたい
- callgraph, digraph, goplsのモジュールキャッシュ

2025-05-26
- スマホだけでai studioの履歴を手に入れたい
- angularのあれ
- llm-scafoldの逆が欲しい

スマホアプリだけでai studioの履歴を手に入れたい
結局github pages上でoauth clientでログインすることにした。これでPCを立ち上げなくて済む。
これで作ったcliの機能がスマホにやってきた
📝 追記:クリップボードのサイズに悩まされるかも?
ai…すごく…ない…
デバッグを自分でやることになったしだいぶ手間取った 😇
何か自分の知識をを信じて意固地だし、納得させるためのプリントデバッグをした後に自分でドキュメントを読む悲しさがあった。
- google drive apiのfileのgetが壊れててencodeを見ずにjsの文字列化してくる(utf8がlatin-1あたりに認識されてutf-16に)
- typescriptで書いてれば良かったしgo to definitionしたくなった
- esmに対応していないライブラリのだるさ
- 誤った知識を信じるllmのだるさ
- それを伝えようと証拠を取るコスト
- oauth clientはpromise無理でcallbackにしないとだめだった
とはいえaiに目があり自分で考えることができるなら解決しうるものかもしれない。

ちなみに履歴はauto saveを有効にしてたんだけど saving to driveみたいな状態でアニメーションし続けたまま途中で止まってた。自分で操作して保存することもできない。

angularのあれ
記事の本文はgistの中のai studioのリンクのところにある。
これをそのまま投稿しちゃうとスパムになりそうなので避けたい(と言うかメンテしたくない)。
ただ文章を真面目に直しながら学び直すと頭の整理になりそうな気はする。

llm-scafoldの逆が欲しい
現在のファイル群をmarkdownに落とすやつが欲しい。途中から再開したい。
なぜclaude codeとか使わないの?(たぶんplanとかで同じことができるよ)と考えたところスマホで文字を打つせいかもと思ったりした。
そしてclaude code actionとはタイミングが異なり張り付いていたい。

2025-05-27
- llm-scaffoldにencodeを追加した

llm-scaffoldにencodeを追加した
llm-scaffoldにencodeを追加した。後、既存のサブコマンドの名前を整えた。init,plan,apply。
これで既存のファイルを読み込んでLLMへの機能追加をお願いできる。
実際、この機能追加もこのllm-scaffoldの仕組みを使って行った。
対話履歴

ちなみにこの方式は4つバッククォートのhackが使われてるテキストが存在すると壊れる( 仕様)

2025-05-28
- ファイル投稿で大きなmarkdownテキストをgistにアップロードしたい(失敗)
- いい加減プロンプトをコピペする作業も楽にしたい

ファイル投稿で大きなmarkdownテキストをgistにアップロードしたい(失敗)
スマホでのクリップボードの制限を突破するためにファイル投稿経由でgistが生成できれば良いやと思ったのだった。基本github pagesのみで作業をしたかった。前回はgoogle authができたので今回はgithub authを...と思ったのだけど。。
色々調べてみたところ
- 現状はPKCE対応であってもCORSでやられる
- (Proxyを立ててCORSを突破しても) Github AppのOauth認証はPKCEに対応してなさそう
という感じだった。悲しい。調査用に使ったコード。
自分で調べたあとにGeminiのDeepsearchで聞いた。このほうが全然早かった。
github appのoauthはPKCEをサポートしていますか?
重要なのはgithubのOAuth Appではないことです(混同しないでください)

補助的な話として
- preact + htmのときにも.jsxのファイルを生成してしまう問題(プロンプトで抑制必須)
- preact + htmならバンドル無しにそれなりにesmで動かせる
あと、全然関係ないけど、llm-scaffoldのときには実行用のコードの出力することを抑制したいかも?
とかはわかった。

github pagesで完結するのを諦めるか。。
考えてみるとcloudflare workerとかを使ったほうが全然楽なのでは?(縛りプレイ)

いい加減pronptを触る作業も楽にしたい

補助的な知識としてhtmはコメントがHTMLのそれっぽい。
preact/reactのそれが生成され使われたために最初残ったりした。

対話履歴

後に似たようなアプリの作成を試したところ度々異なるディレクトリ階層で生成された。意外と縛らないとまだまだ自由度が高いのかもしれない( 追記: ai studioのバグのおかげで発見)

2025-05-29
- ai studio履歴が保存されない問題

ai studio履歴が保存されない問題
ai studioのauto saveが機能しなくてだるい 🤬
- saving to driveで止まり他の機能もロックされる
- 対話はできるので残ってないことに後で気づく
- 最悪、手動で対応できればマシだけど保存周りは操作不能になる

2025-06-01
- ag-ui
- そのままmcpでuiを返したい

ag-ui
These protocols serve complementary purposes in the agent ecosystem:
- AG-UI: Handles human-in-the-loop interaction and streaming UI updates
- A2A: Facilitates agent-to-agent communication and collaboration
- MCP: Standardizes tool calls and context handling across different models
イベントはこの辺

そのままmcpでuiを返したい
ui用のcontent typeを作る提案

2025-06-03
- goatの開発をほとんどllmでやっている
- julesでの開発方法について

goatの開発をほとんどllmでやっている
まず最初は仕様をai studioで相談した。
次にその仕様をllm-scaffoldでコードにして出力した(TODOコメントを残しまくるコードにはからずもなっていてこれが後にjulesでの実装を楽にした気もする)。
その後しばらくはPCでコードをいじっていた。
今日はjulesでほとんどスマホから作業をしてた。19/60
コード自体は一気に負債が溜まる感はある。

julesでの開発方法について
- 意外とスマホだけでどうにかなる
- prを作ったときのタイトルは何か意にそぐわないもののことが多い
- あんまり気にせずそのまま
- 壊れた状態でもprを出す(branchを公開する)
- 一度branchが完成すると最終ステージなので変更はできません!とか言う
- prのbranchから派生したtaskを作って挙げて元のprへマージする運用だと回る
- 一度branchが完成すると最終ステージなので変更はできません!とか言う
- ゴミコメントの闘いの日々になる
- 都度修正を求めるコミュニケーションはバカバカしい
- ルールの設定ができるんだろうか?
- まとめて綺麗にしようとしたらハマった
- goのファイルを全部見て不要なコメントを消してとかだとたまにタイポでコードを壊す
- 謎のシェル芸を始めて見つかりませんとかやる
- 都度修正を求めるコミュニケーションはバカバカしい
📝 急に最後の方で日本語で応答し始めた。何か色々変わったりしたのかも?
📝 一日5回の制限がいつの間にか50回にそして今見たら60回に。

github copilotくんにレビューしてもらったやつもバグを埋め込むことはある。コミットのrevertがスマホからだとちょっと大変だった。
codespaceで立ち上げたvscodeもどきを無理やり小さい画面で使った。

goのファイルを全部見て不要なコメントを消してとかだとたまにタイポでコードを壊す
確率的なあれなのでまぁ起きうるんだけどまじかーと思った。
- 最高のdiff 🫠 https://github.com/podhmo/goat/pull/7/commits/92b28310c13ab6e9832583b37015bc01e0d08eb1#r2124491885
しかも、コードが何かおかしいので直せませんとか言って諦めたのまじであれ 😇

一度branchが完成すると最終ステージなので変更はできません!とか言う
これも治ったかも?日本語で応答をはじめたあたりからこういう回答が来て変更できた。

なんかやっぱり新しいタスクを作り直したほうが良さそうだった。

2025-06-05
- 環境設定
- goでifを減らす方法
- goのflagsについて

環境設定
- zshに移行する?いろいろなaliasを揃えておきたい
- githere
- gitroot
- cdroot -- git管理下に移動するaliasを追加したい
- tree -- gitignoreされているものを無視したい
- emacs
- emacsでタブで開く機能をバインドできていない? → C-c C-f
- C-cが結構奪われてる
- markdown-modeあたりは抑制しておくと良いのでは?
- e.g. shell-script
- C-cが結構奪われてる
- タブ移動がいろいろなモードで潰れる
- skk-insertがCtrl+jなのが邪魔
- go backのキーバインドがわからない
- ミニバッファではskkをオフにしたい
- C-j C-j で位置を記録しておきたい
- emacsでタブで開く機能をバインドできていない? → C-c C-f

goでifを減らす方法
なんとなくcmp.Orを思い浮かべてたら不要なifを減らして必要なifを目立たせる方法があるような気がした。
そのあとエラーハンドリングをどうこうすることについて気にしたくなってきた

その前にrustなどでEither的な物を使うときにエラーを作成して返す部分やそのまま返す部分では簡潔になるけれど、装飾が必要になる部分(fmt.Errorf(".. %w", err)
の部分)ではあんまり変わらなくなるのでは?みたいなことを考えたりしたのだった。
結局、早期リターンベースで考えると↑の気持ちになり、ハッピーパスに集中する気持ちになると記述量はあまり変わらずともまぁきれいになるかと思うようになった(ただしboil!マクロとかを把握していないと処理のフローがわかんなくなるかも?)。

goのflagsについて
雑にAIに箇条書きのチェックリストを渡すのは便利かもしれないと思った。こんな感じ。
ここを調査のたたき台にする感じ。
以下の箇条書きのメモのgoの知識についてファクトチェックをしてください。
go flagsの知られざる秘密
- 実は フラグの形式は -foo ではなく --foo でも良い
- 実は "help" か "h" を設定しておくと自動的にUsage()を呼ぶ
- flags.Parse() はデフォルトで対応してる
- flags.NewFileSet()は自分でhelpフラグを設定する必要がある
- Usageはフィールドなので代入することでヘルプメッセージを書き換えられる
- Visitを使って手軽に環境変数対応ができる
そのあと、いろいろなライブラリの使い分けについて考えたくなったりした。
ライブラリの導入について
個人的には以下のような感じ
- flags -- 簡単なサブコマンドまで ( 🐐goatは遊び )
- urfave/cli -- サブコマンドやシェル補完あと環境変数名がヘルプメッセージに載る
- koanf (必要に迫られたら)
💭個人的にはcobraファミリーが苦手
- flags
- pflags --
-h
みたいなショートオプションのヘルプメッセージがほしいなら - cobra -- サブコマンドやシェル補完
- viper -- 柔軟な設定の読み込み (reloadとか色々あるけど気にしない)
💭あと、google/subcommands とかも苦手だった。
💭docoptは一番苦手

2025-06-06
- goatをjulesにやらせてる

goatをjulesにやらせてる
内容は別のscrapの方に書いた

こういう気づいたことなどのドキュメントを書かせるのはありかもなーと思った。julesはissueとか見られないのだよな。
このプロンプトは以下のようなもの
docs以下やREADME.mdを読み、コードを読み、目的までに不足しているTODOを洗い出してください。そしてそれをdocs/analyze.mdに出力してください。
改善したい構造やリファクタリング箇所を洗い出してください。これをdocs/refactoring-plan.mdに出力してください。
その他こうしたら良いと言うような夢を語りそれをdocs/dream.mdに出力してください。
途中でこういうのを追加したりもした
dreamの中にimportがlazyなインタプリタが作りたいと書いてください。go buildが終わるまでが実行期間のような起動速度が求められ実効速度が求められないようなもの。それの実験用の位置づけとしてのenumなどのハンドリングでした。

julesは時折wipのbranchで終わらせる場合もあり、その場合はprに上手くコミットのメッセージが載らない。

2025-06-09
- lazy loadをやれるようにしたい
- docs/ja/llm.md を作ってjulesに読み込ませる
- 論文も雑に読みたい
- いい加減プロンプトコピー用の何かが欲しい

lazy loadをやれるようにしたい
そもそもgo listって相対パスとか取れたっけ?
go list -f {{range .GoFiles}}{{$.Dir}}/{{.}}{{"\n"}}{{end}} ./mainapp/model/
こんなことをするよりgrepとsedでどうにかしたほうが楽かも?
grep '^tool *' go.mod | sed 's/^ tool //g' | xargs go install

docs/ja/llm.md を作ってjulesに読み込ませる
頑なに設定ファイルのようななにかを探していたのだけれど、雑にドキュメントを作って必ずこれに従ってと書く程度でそれなりにやってくれるかもしれない。まだまだ調整は必要。

論文も雑に読みたい
AppleのLRMの思考が限定的という論文を読んだふりをしたい。
読んだふりをするgist

何かそういうプロンプトが欲しい

やっぱり試すくらいはしないとだめだろう

deep search (gemini flash)はイケてないな


2025-06-11
- go.workとtoolchainとgo work use
- localのgoを挙げる方法を把握しきれてないかも?
- goatの振り返り的なもの
- goとjsonとoneOf (final)

2025-06-15
- goatに集中しすぎ

2025-06-17
- OCamlを触ってみた

2025-06-25
- Emacsで真面目にverticoとかに向き合う
- typespecの代わりのシナリオの記述
- claude code likeなやつ
- go-scan

Emacsで真面目にverticoとかに向き合う
標準ライブラリだけで生きていくのも馬鹿馬鹿しくなった(割と設定に時間を取られているところもある)。あとプロジェクト間をビュンビュンと飛び回りたい。そのためにC-x C-fでの補完だと不十分。

typespecの代わりのシナリオの記述
できないことはわかっているんだけど何か欲しい。
typespecは基本的には以下のことしかできないのかな?
- data typeの定義
- decoratorの付与
- emitterの作成
APIの一連の呼び出し関係をシナリオみたいな形で記述したいのだけれど。
(レスポンスのこの部分を別のAPIのパラメーターのあの部分として利用とかみたいなことがしたい)

claude code likeなやつ
(後でリンクを貼る)
claude code
openhands cli
rovo dev
gemini cli
codex cli

go-scan
go-scan の機能不足に関するサブタスク案ですね。承知いたしました。現在のデバッグ作業と並行して検討できるように、以下にサブタスク案をコードブロック形式で提示します。
go-scan 機能強化サブタスク案
scanner.FieldType.String()
メソッドの実装
1. -
目的:
FieldType
構造体が持つ型情報(ポインタ、スライス、マップ、要素型、パッケージ名など)を元に、Goのソースコードでそのまま使える型文字列(例:*mypkg.MyStruct
,[]string
,map[string]int
)を生成するメソッドを実装する。 -
詳細:
- ポインタ (
*
)、スライス ([]
)、マップ (map[key]value
) の表現を正しく処理する。 - 外部パッケージの型の場合、パッケージ名を適切に含める(例:
pkgname.TypeName
)。 - 要素型やキー型がさらに複雑な型(ポインタやスライス等)である場合も再帰的に正しく表現する。
- ポインタ (
-
現状の課題:
derivingjson/generator.go
内で、この型文字列を手動で構築しようとしており、複雑で不完全になっている。
scanner.TypeInfo
へのメソッド情報の集約
2. -
目的: 型(特に構造体)が持つメソッドの一覧を
TypeInfo
構造体内に直接保持するようにする。 -
詳細:
-
scanner.Scanner
が構造体をパースする際に、その構造体に紐づくメソッド(FunctionInfo
でReceiver
が設定されているもの)を収集し、TypeInfo.Methods []*FunctionInfo
のようなフィールドに格納する。
-
-
現状の課題:
goscan.Implements
関数内で、構造体のメソッドをPackageInfo.Functions
から毎回検索しており、効率と利便性の面で改善の余地がある。
FieldType.Resolve()
)
3. 型解決ロジックの強化 (-
目的:
FieldType.Resolve()
がプリミティブ型や同一パッケージ内の型に対しても、より適切な情報(あるいは「解決不要」を示す明確なステータス)を返せるようにする。 -
詳細:
- プリミティブ型 (
string
,int
等) を識別した場合、専用のフラグやTypeInfo
インスタンス(あるいはnil
と特定のステータス)を返すようにする。 - 同一パッケージ内の型を解決する場合、不要な外部パッケージ検索を行わないようにする。
- プリミティブ型 (
-
現状の課題:
derivingjson/generator.go
でResolve()
の結果を解釈する際に、警告が出たり、プリミティブ型の判定が煩雑になったりしている。
4. インターフェースの網羅的なメソッド解決(埋め込みインターフェース対応)
-
目的:
scanner.InterfaceInfo
が、埋め込みインターフェースのメソッドも全て展開して保持するようにする。 -
詳細:
-
scanner.Scanner.parseInterfaceType
でインターフェースをパースする際、埋め込みインターフェースがあれば、そのインターフェースの定義を(必要であればPackageResolver
を通じて)解決し、メソッドを親インターフェースのメソッドリストに追加する。 - メソッドの重複排除やオーバーライドのルールはGoの仕様に準拠する必要があるが、まずは単純なマージから実装する。
-
-
現状の課題: 現在の
parseInterfaceType
は埋め込みインターフェースを検知するものの、そのメソッドを再帰的に展開していない。これによりgoscan.Implements
の精度が制限される可能性がある。
goscan.Implements
の堅牢性向上
5. - 目的: メソッドのシグネチャ比較をより厳密に行う。
-
詳細:
-
compareFieldTypes
で、型の完全修飾名(importパスを含む)を比較する。 - 型エイリアスや、異なるパッケージにあるが実質的に同じ型などを考慮できるようにする(高度)。
- スライスやマップの要素型なども再帰的に比較する。
-
-
現状の課題: 現在の
compareFieldTypes
は型の名前とポインタの有無のみを比較しており、複雑なケースでは不十分。
まずは現在の構文エラーの修正に集中しますが、これらのサブタスクについても進捗があり次第ご報告・ご相談させていただければと思います。

仮の利用例としてexamples/derivngjsonを作ってみてoneOfのunmarshallを試してみていた。oneOfのunmarshallについては昔geminiに聞いていた。

2025-06-27
- go-scanでjulesがパンクした
- jules

jules
- julesはissueにラベルを与えると動き始めるらしい?
- julesはコミットされているファイル以外読めない。 https://x.com/podhmo/status/1938411197029847493

go-scanでjulesがパンクした
正確にいうとgo-scanの利用例としてexamples/derivingbindを作ってみていて、そこでrequestのbinderを生成させてみていた。

2025-06-28
- go-scanで遊ぶ
- 対話履歴の記録用のプロンプトを更新したい

go-scanで遊ぶ
1つしかファイルを見ないのを複数のファイルを見られるようにした。
- 先頭複数(最初に全部指定しなくちゃいけない)
- importを辿る(どの方向へ?)
- マーカー付きの型を探しそれの形状を辿る
ワンチャンあるパッケージの関数だけが呼べるインタプリタを作りその関数経由でimportを辿る。機能は決まってて対象を選ぶときだけ。
どういうものかを考えていた

binding
requestのbinderはこんなので十分なのかもしれない
最初は何もランタイムなしに直書きしてたら行数が爆発した 🫠

発端

対話履歴の記録用のプロンプトを更新したい
そういう話をgrokとしてた。今は「思慮深い執筆者」
読んだ。悪くない。追加したい。あとは対話に対話を重ねてる系のやつで試したい。
もう少し試してみた。やっぱり過程をそのまま出力する系のほうが良いかな。
あとでプロンプトのコピー君に載せる

そう言えば作家のai利用のやつ面白そうだった。後で真面目に読みたい。
ちょっとだけ見た。使い方がちょっと違うかも。aiを技術として認識してない感じだ。人として認識してる。あと一文一文が短い。

自分の対話はこんな感じ。
ユーザー入力履歴
ユーザー:
これは私とgrok(ai)との対話履歴です。あなたは2つのことをしてください。1つは対話内容をメタ的に捉え遷移を記述することです。もう1つはセカンドオピニオンとして対話の回答者になるということです。つまりgrokに対して検証したり助言をしたり懸念を表明したりしてください。
ユーザー:
なるほど。いくつか気になるポイントをコメントしますね。自己完結性は矛盾しないつもりです。簡潔さを求めてるのではなく意図しない借用を防ぎたいのです。それこそ対話を眺めなければ分からないような語の利用を(ちなみにaiが文脈を説明する情報を付与したり借用したりするのは構いません。あくまで対話の内容をその対話の存在を知ることなく確認できれば良いのです)。
あとgrokとの対話で気になった点といえば内省的が良いとは直接的には言ってないです。議論の中で話題に出てたと思いますが私の文章を分析させると内省的や思索的という言葉が出ますがそれをプロンプトに含めると私と乖離したテキストが出ることが多かったりします(これは内省的という表現が悪いという話ではなく考えを固定しないでくださいという補助的な言及です)。とは言えその逆の分析的で事実にしか基づかないみたいな方向の割り切りもビミョーに感じる時もあります。プロンプトを2つ用意するべきなのかもしれません。
ユーザー:
いいですね。あなたの提案する完全なプロンプトを教えてください。私の理解が正しければ3つ用意してくれるのですよね。
あ1つ補足すると記事が複数に分割された場合には続けますか?などと聞かず全部の記事を書ききってほしいです。

2025-06-29
- スマホからgistを見た時に折り返しをしたい
- github pages上でcors突破できるかも?
- 💭 7月になったらその3に以降するか。

スマホからgistを見た時に折り返しをしたい
スマホでgistに載せたLLMとの対話履歴のmarkdown中でコードブロックの箇所が white-space: pre
っぽいので全部を把握できないので辛い。折り返して表示して欲しい。
とりあえず、mobile firefoxからstylusを使うことにした。firefoxはブラウザ拡張がスマホ版でも入れられるのは便利。
テキトーにgrokにお願いしてcssを書いてもらった。
/* GitHub GistのMarkdownコードブロックに折り返しを適用 */
.markdown-body pre code {
white-space: pre-wrap !important; /* コードを折り返す */
word-break: break-word; /* 長い単語も適切に折り返す */
overflow-x: auto; /* 必要に応じて横スクロールを維持(折り返し優先) */
}
/* コードブロック全体のスタイル調整(オプション) */
.markdown-body pre {
overflow-x: hidden; /* 親要素の横スクロールを抑制 */
padding: 10px; /* 読みやすさのためにパディングを調整 */
line-height: 1.5; /* 行間を調整(必要に応じて) */
}

自分専用。カテゴリーとかなんか間違えてる感ある。

github pages上でcors突破できるかも?
まぁgithub apps の oauthは突破できないのだけど。諦めてcloud flare workerとか使うか。

emacsのフォント設定をする (WSL)
現在のフォントの設定の確認
M-x describe-char
;; 漢字
;; character: 設 (displayed as 設) (codepoint 35373, #o105055, #x8a2d)
;; ftcrhb:-GOOG-Noto Sans CJK KR-regular-normal-normal-*-15-*-*-*-*-0-iso10646-1 (#x9303)
;; ascii
;; character: s (displayed as s) (codepoint 115, #o163, #x73)
;; ftcrhb:-PfEd-DejaVu Sans Mono-regular-normal-normal-*-15-*-*-*-m-0-iso10646-1 (#x56)
今使えるフォントの一覧
$ fclist
windows側のフォントを設定できるようにする
/etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
cacheを更新する
$ sudo fc-cache -f -v
# /mnt/c/Windows/Fontsをみてくれている
$ fc-list | grep meiryo #
フォントの設定
(set-face-attribute 'default nil :family "Meiryo" :height 120)
(set-fontset-font t 'japanese-jisx0208 (font-spec :family "Meiryo"))
💭結局使わなかった

toolchainはminor versionまで指定しないと駄目かも?
だるいね。
# ng
$ go install -v golang.org/dl/go1.24@latest
# ok
$ go install -v golang.org/dl/go1.24.4@latest
go: downloading go1.24 (linux/amd64)
go: download go1.24 for linux/amd64: toolchain not availabl