2025

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

2025-01-01
- htmlを書く練習がしたい
- 自分用のホームページ

htmlを書く練習がしたい
denoでSSEを使ったブラウザリロードをするようなサーバーを作ってそれをもとにhtmlを書く練習をする。具体的にはpico.cssを使ってモバイル用の表示をまともにしたい。

すぐに飽きてしまった。pico.cssに関してはexamplesにあるものを見た目を眺めながら追加していくみたいな感じで良いきがする。ところでスマホからの場合にはCodeSandboxを見るときのストレスがひどい。使い物にならない。

自分用のホームページ
https://podhmo.github.io/ に自分用のリンクを追加した

ちなみにスマホでの自分用のメモは階層型メモというやつを使っている。2024年は上から下に記述していき後の後悔していた。2025年は下から上に記述していく。新しい日付のものは上に来る。

カレンダーアプリを使いこなせていないので日程調整が苦手すぎる

2025-01-02
- jsr:@podhmo/glue@0.2.1
- react-router

jsr:@podhmo/glue@0.2.1
今まで作っていたやつをjsrにアップロードした
- サブコマンドで動かせるようにした
- initコマンドを作った
jsr.io へのパッケージのアップロードの話
💭yankができてもjsrは一度publishしたものを変更することはできない。素直にrcとかpre-release的な運用をするべきなのかもしれない。毎回0.2.0とか切りの良いバージョンでのpublishに失敗する。
CLIの話
あとバージョン情報はどこかで持っていた方が良いのかもしれない。pip freeze的なものが存在指定無さそうなので。

deno install
deno install -g
はどうやらデフォルトでは $HOME/.deno/bin
あたりにインストールされるらしい。あるいはDENO_INSTALL_ROOTの環境変数以下のbinにインストールされるらしい。
$ deno install -g -A jsr:@podhmo/glue@0.2.1 --name podhmo-glue
とかしてみた。

react-router
いじっていたらなんか厳しい感じになっていそう?
- react-router@7はreact@19に依存していそう?(18だと上手く動かない)
- react@19はesm.shだとdevelopmentモードじゃないと動かない
-
deps=react@18,react-dom@18
と指定しても上手く動いてくれない

glueで追加でquery stringを要求したときに上手く動いてくれ無さそう
depsの指定に対応する必要がありそう?(deno.lockを覗く?)

変に自作しないでここにコードを渡してあげたほうが良かったりする?
import build from "https://esm.sh/build";
const ret = await build({
dependencies: {
"preact": "^10.13.2",
"preact-render-to-string": "^6.0.2",
},
code: `
/* @jsx h */
import { h } from "preact";
import { renderToString } from "preact-render-to-string";
export function render(): string {
return renderToString(<h1>Hello world!</h1>);
}
`,
// for types checking and LSP completion
types: `
export function render(): string;
`,
});
// import module
const { render } = await import(ret.url);
// import bundled module
const { render } = await import(ret.bundleUrl);
render(); // "<h1>Hello world!</h1>"

2025-01-04
- denoでpreactに型がつかない
- 依存関係を真面目に記述すればesm.shでreact@19を動かせるか試す
- v0も動かしてみたい
- vendoringしてるdenosaurs/cacheのキャッシュの持ち方を変えた

denoでpreactに型がつかない
deno lintのエラーは解決する
全部を @jsxRuntime automatic
と @jsxImportSource
で統一したい。そうするとdenoのlintのエラーが無くなる。
こういうエラー。
$ deno lint
error[verbatim-module-syntax]: All import identifiers are used in types
--> /home/po/ghq/github.com/podhmo/deno-glue/testdata/src/cards-component.tsx:3:1
|
3 | import { h } from "npm:preact@10.5.13"
| ^^^^^^
= hint: Change `import` to `import type` and optionally add an explicit side effect import
docs: https://lint.deno.land/rules/verbatim-module-syntax
deno-lsでの型がanyになるエラーが解決できない
一方で、tsxを開いたときのhtmlタグへの型が上手く認識されていないみたい。ちょうどreactで@jsxImportSourceTypes npm:@types/react
的な物を忘れたときの感じ。
JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.
どうやら.d.tsを上手く呼んでくれれば良いらしいのだけれど、型情報はここにある。

jsx-runtime.d.ts という名前である必要がある?

この時の状況に近しいそうなのだけれど。。
import { type JSX } from 'npm:preact@10';
としても以下のようなメッセージが出る。
Namespace '"file:///home/po/.cache/deno/npm/registry.npmjs.org/preact/10.5.13/src/jsx".JSXInternal' has no exported member 'FunctionalComponent'.
あとなんだかReactのnamespaceとして認識されているみたい?
Cannot find name 'React'. Did you mean 'preact'?

これとおんなじ感じでキャッシュを消したりどうこうしたりとかと言われていて辛い。
ちなみに自分の現状
- deno.jsonのcompilerOptionsは空(全部tsx側でヒントを追加している)
- deno checkは型エラーを起こさない
- deno language serverでanyのエラーが出る

依存関係を真面目に記述すればreact@19をesm.shで動かせるか試す
できた。こんな感じで真面目に記述した。
import { createRoot } from "/react-dom@19.0.0/client?deps=react@19.0.0,scheduler@0.25.0";

v0も動かしてみたい

これが使われてる

vendoringしてるdenosaurs/cacheのキャッシュの持ち方を変えた
- 元の実装: prefix + sha-256を単純に文字列化
- 今の実装: prefix + sha-256をhex化したものの先頭2文字 + sha256をhex化したもの
最初は雑に元の実装でヌル文字が出てくるのを抑制するためにreplaceで取り除くみたいな対応をしてたけれどこれって衝突確率上がるよなーとか思ったりした。結局真面目な感じにやった。
こんな感じ
$ /home/po/.cache/deno/podhmo-glue/https/esm.sh/
/home/po/.cache/deno/podhmo-glue/https/esm.sh/
├── 02
│ ├── 024918a2bd912a6402761400bbd88be111c489f6d6ba4efd03384a10463b58c0
│ └── 024918a2bd912a6402761400bbd88be111c489f6d6ba4efd03384a10463b58c0.metadata.json
├── 09
│ ├── 09caff866810183a8af0d31faaf68a3d52a8817e597c5699eb4a7a6272361eb0.mjs
│ └── 09caff866810183a8af0d31faaf68a3d52a8817e597c5699eb4a7a6272361eb0.mjs.metadata.json
├── 0f
│ ├── 0f28e32feef847c5516653f5990a9c7dac360f95ab1d926b10d5d0cfba32416b.js
│ └── 0f28e32feef847c5516653f5990a9c7dac360f95ab1d926b10d5d0cfba32416b.js.metadata.json
├── 39
│ ├── 393444a2b028d7fd9a8c79828d525e3c7fc8c4c1ba57aee0777fd964f4c81434
│ └── 393444a2b028d7fd9a8c79828d525e3c7fc8c4c1ba57aee0777fd964f4c81434.metadata.json
├── 96
│ ├── 961a4c68016956a8cf639585afa60924bd335b27c8c32b290262c3fe72d9e11d.mjs
│ └── 961a4c68016956a8cf639585afa60924bd335b27c8c32b290262c3fe72d9e11d.mjs.metadata.json
├── a6
│ ├── a6c34286d1d97cc1d6c76d1839e3fdd87acdaafb2eeb3feb35ac05221a90382b.mjs
│ └── a6c34286d1d97cc1d6c76d1839e3fdd87acdaafb2eeb3feb35ac05221a90382b.mjs.metadata.json
├── ae
│ ├── ae37f7cad8b022c86514797e01b6276f474dd129857537976d09eca5cb942399.1
│ └── ae37f7cad8b022c86514797e01b6276f474dd129857537976d09eca5cb942399.1.metadata.json
└── ef
├── ef41068c009cb9899696a6bb54986e770d8689981775da87e23b163908eee3a0.js
└── ef41068c009cb9899696a6bb54986e770d8689981775da87e23b163908eee3a0.js.metadata.json

2025-01-06
- 書いてみたコードの共有はcodepenが良いかも?
- reactのいろいろなライブラリをesm.sh経由で実行してみたい (失敗)

書いてみたコードの共有はcodepenが良いかも?
前提として
- 1つのアプリを少しずつ手を加えていくのではなく今日作って今日捨てる
- html,css,jsあたりの練習が主
- 可能なら1日の間に何個も試したい。プロジェクトを作りたくない。
- 成果物を利用したいわけではない。メカニズムを理解したい(deployしたくない)
- 実行可能な形でコードを共有したいがbundleなどしたくない
- スマホでも表示を確認したいし、コードの内容も把握したい
というのがある。
候補としてはstackblitzやcodesandboxもあったがこれらはスマホで見るのが厳しい。加えてnpmの環境なども要らなかったのでcodepenが良さそうだった。
例えばこういう感じでgistのあとにcodepenのURLを載せる

APIを必要とするものになったら手元で動かす事ができるが共有はできない。
(cloudflawre workerだとかcloud runだとかになる)

reactのいろいろなライブラリをesm.sh経由で実行してみたい(失敗)
幾つか試そうとしてみた
- react-markdown
- MUI
- v0 (shadcn)
どうやらすべての依存を書き出して実行するとエラーになるみたい。
- URLが長すぎる
- 依存の書き出しを間違えている
CDNのキャッシュのあたりでエラーが返ってきているので原因はわからない(URLが長すぎる場合は520が返るみたいなことは書かれては居た)
これくらいなら通る。
http "https://esm.sh/react-markdown@8.0.7?deps=react@18.3.1"
Dockerとかで動かして試してみるしかないかも?

一足飛びにやりすぎたのかもしれない。まずはrouterを動かすとかjotaiを動かすとかtailwindを動かすとかから始めたほうが良さそう。

jotaiとかは動く

Tailwindとかはesbuildの範疇を超えるから、remix,next.jsとか使うか、viteを使うか,,みたいな感じになるのかな?

追記: https://next.esm.sh なら動く

2025-01-07
- esm.shをローカルで動かす

esm.shをローカルで動かす
これで動かなかったのでローカルでesm.shを動かして試してみた。何か普通に動いた。。
(voltaは便利だった)

2025-01-10
- denoのcliをgithubのURLからinstallしたい
- denoでdeno.lockされたパッケージの依存を更新したい
- denoで自分自身の親ディレクトリを知りたい

denoのcliをgithubのURLからinstallしたい
この例だと1ファイルのことしか書いていない気がする。deno.jsonを見るようなプロジェクトでは上手く動いてくれない。
$ deno install https://raw.githubusercontent.com/podhmo/deno-glue/refs/heads/main/main.ts --global --name podhmo-glue -f

どうやらローカルでinstallする場合にはdeno.jsonを読み込んでくれないらしい。ディレクトリを指定したらそのdeno.jsonを呼んでくれたりすると嬉しいがそんなことはなかったみたい。
--config
オプションで明示的に指定してmain.tsを明示的に指定する必要があるみたい。
$ deno install -A -f --name podhmo-glue --global --config deno.json ./main.ts

denoでdeno.lockされたパッケージの依存を更新したい
$ deno outdated --update

denoで自分自身の親ディレクトリを知りたい
実行対象のファイルの親ディレクトリを知りたい場合は import.meta.dirname

2025-01-12
- 色々な例を追加したい
- denoのhttp serverちょっとおそい?
- 簡単なPWAを試したい

いろいろな例を追加したい
- simpleなreactのtutorial
- 何らかのrouterを使ったような例 (client side routing)
- 複数のtsxを同時にサポートするような例 (server side routing)
した
コピペも辛い気がするけれどどうするのが良いんだろう?

error boundaryのようなものなど不足している部分を埋めておきたいかも?

denoのhttp serverちょっと遅い?
esbuildを実行したりなどしたhandlerが遅い(0.7s)かと思ったがそもそもhonoのシンプルなapiを書いてみても0.4s程度掛かっていた。
app.get("/api/hello", (ctx: Context) => {
return ctx.json({ message: "hello" });
});
それならhonoのオーバーヘッドが重いのかと思ってdeno init --serve
の結果を試してみたところあんまり変わらなかった(0.4s)。これはwsl上で立ち上げたサーバーにwsl上でhttpieでリクエストしたもの。WSL上でのrequestが重いのかも?

簡単なPWAを試したい

📝スマホのブラウザでスーパーリロードをする方法がわからない。chromeで過去のPWAのキャッシュが消せない。特定のサイトのデータだけを選んで消す方法が見つからなかった(期間しか選べない)

2025-01-13
- web.devのPWAのやつを読み返してみていた
- スマホ用にtitle,urlをいい感じにmd形式でコピーするPWAをつくった

web.devのPWAのやつを読み返してみていた
スマホからchromeの翻訳経由で読んでいた。概ねゲーム用の機能かも?と思ったけれどweb share APIとかweb share APIはスマホ用に使えるかも?と思ったりした(OS integrationの章)。
そしてweb.dev的な雰囲気のページを読むのに似た技能をChatGPTなどの応答を読むのにも使う気がする。それは概ね読み飛ばす的な技能なのだけれど、それは母国語でないと厳しい感じがあり、この辺でスペック差が開くなーと思ったりした。
中身の薄い水っぽい文章を読み取ることになるので。

スマホ用にtitle,urlをいい感じにmd形式でコピーするPWAを作った
web share target APIが便利。
特に不要そうなservice workerが存在しないとスマホ側でPWAとして認識されない場合がある(?)

ブラウザで文字列を選択して渡せるな。
そういう方法もあるのか。

画像も共有できるのか何かやれることあるかな…
しかしこの場合にはPOSTを受け取る必要がありそう。この場合にはgithub pagesでは対応できなそう。

2025-01-18
‐github issueを各自が母国語で書いても問題ない感じにできるか?

github issueを各自が母国語で書いても問題ない感じにできるか?
ということを考えてみていた
- https://x.com/podhmo/status/1880474008224973195
- テキトーに翻訳してくれるのでは?
- 何かしらのメタデータを読み込む仕組みがあれば良い?
- コメントごとにhtmlのlang属性は持てる
codepenにテキトーにそれっぽいページを作ってみたがダメそうだった。真面目に自分で変換しないと対応はできない。

codepenの問題だった。普通にいける

2025-01-19
- gistを投稿するときにreadmeからタイトルを取りたい
- react-markdown余計じゃない?
- viteをscaffoldとして使うところが多い気がする

gistを投稿するときにreadmeからタイトルを取りたい
selfishでできるようにした。
あと依存とか諸々更新した。
そして画像が投稿できるようになってたことに気付いた。

react-markdown余計じゃない?
なんというか、過度にパッケージ化されてて全貌を掴みにくい。
ちなみに内部的なjsxへの変換はこれが使われてたみたい。

hastscriptとは何もの?

viteをscaffoldとして使うところが多い気がする
↓をやっていて思った
- viteをstarter kitのscaffoldのinfraとして使うことが多い
- いちいちgistで共有可能な形にするために書き換えるのは不毛なきがする
- ネストしたディレクトリをフラットな構造に変換している
- import部分を全部denoの形式に変換している
- vite上では動くのに書き換えたあとは動かない
- (cssをいい感じに読み込んで変換しているような感じがしている。esm.shでcssを取ってくる方法はどうやるんだろ?)

それならいっそのことviteの形から始めて1枚htmlにまとめられるみたいな感じになってると嬉しいのでは?
importも自動で書き換えるとまでは言わないけれど変換してあげれば?
意外とcodepenで動かせるような形に変換することを考えるのは楽しいかもしれない。
(本題からどんどん外れているけれど)
- viteのようにcssのimportに対応する
- ネストしたファイル構造をフラットにする( これはgist用)
- index.htmlにcssを追加で書けるようにする
- serveはそれで問題ないけれどbundleは無理では?

2025-01-21
- deepseek R1
- denoからnpmパッケージをつくる?

2025/01/31
- 手軽にsystem instructionを保持したUIが欲しい
- mac上のemacsでもddskkを使えるようにする

手軽にsystem instructionを保持したUIが欲しい
gptsとかgemini gemsとかは課金ユーザーだけっぽいのでover killっぽい
↓から探すのもめんどう

emacsでも...
- emacsでも少なくともsyntax highlightは欲しいかも?
- emacsでも少なくともformatterは欲しいかも?
- (emacsでの入力は(mac上でも)skkにしたいかも)

mac上のemacsでもddskkを使えるようにする
なるべくemacs側の機能を使ってインストールすることにする
(辞書はemojiを使いたいのでutf-8にする)
melpaから取得できるようにする。
(setq package-archives `(("melpa" . "https://melpa.org/packages/") ("melpa-stable" . "https://stable.melpa.org/packages/") ,@package-archives))
(package-initialize)
;; M-x package-list-packages で ddskk をinstall
M-x skk-get
で辞書の取得をする。~/.emacs.d/skk-get-jisyo
以下にダウンロードされる。
ユーザー用の辞書は以下のような感じで変換しておく。
$ cp .skk-jisyo{,.bak}
$ iconv -f EUC-JP -t UTF-8 -o .skk-jisyo.utf-8 .skk-jisyo
$ file .skk-jisyo.utf-8
.skk-jisyo.utf-8: Unicode text, UTF-8 text
$ mv .skk-jisyo{.utf-8,}
# $ rm .skk-jisyo.utf-8
設定でutf-8で読み込むようにしておく
(setq skk-jisyo-code "utf-8") ; jisyoのエンコーディングをutf-8にする
ミニマムな辞書の設定 (~/.skk-jisyo)
;; okuri-ari entries.
;; okuri-nasi entries.
tada /🎉/
memo /📝/
thought /💭/
こんにちは /今日は/
today /(skk-current-date (lambda (date-information format gengo and-time) (format-time-string "%Y-%m-%d" (current-time))))/(skk-current-date)/
参考

2025/02/04
- vm作る部分だけでも眺めてみたい

2025/02/10
- webでのテキストの読み上げ

2025/02/13
- chatgpt to markdown

chatgpt to markdown
chromeでは Emulate a focusing page しないとだめ。firefoxにはその種のオプションがない。

2025-02-14
- emacsの設定の調整

emacsの設定の調整
- tab-bar-modeのバグを直す
- ok emacsでのtab-bar-modeの現状の設定をしらべる
- ok emacsでfind-fileの補完をcase insensitiveでやりたい
- ok emacsで/tmp以下を開くと自動保存が無効になる?
- ok emacsでM-.でgoto definitionしたあとにM-*で戻ってきたい(M-,を使うのが良い)
- ok emacsでredo/undoを動かせるようにする (undo/undo-redo)
詳細
emacsでのtab-bar-modeの現状の設定をしらべる
- emacsclientで開いたときには常にタブを開くようにする
- kill-buffer時にタブも消えるようにする
- 重複したタブが開かれるようにするのを防ぐ
- (debug的なbufferが常に表示されるとだるいかも)
find-fileの補完をcase insensitiveでやりたい
-
mini-buffer-completionが実行されている
-
read-file-nameが使われている
-
read-file-name-defaultが使われている
-
この中で `read-file-name-completion-ignore-case' を見て補完時の大文字小文字を無視できるようになる
See also
read-file-name-completion-ignore-case' and
read-file-name-function'."
emacsで/tmp以下を開くと自動保存が無効になる?
-
(auto-save-visited-mode -1)
を実行しているせい -
(setq-local auto-save-visited-mode nil)
が正しい - (あるいは auto-save-visited-predicateを設定する)
You can also set the buffer-local value of the variable
auto-save-visited-mode' to nil. A buffer where the buffer-local value of this variable is nil is ignored for the purpose of
auto-save-visited-mode', even if `auto-save-visited-mode' is
enabled.
emacsでM-.でgoto definitionしたあとにM-*で戻ってきたい
- M-.はxref-find-definition
- M-,でxref-pop-marker-stack
📝{, . /}
というキーバインドので混乱していたみたい undoは {. /}
のペア

そもそもtab-barの自動的なdedupは余計なきがする

2025-02-17
- esbuildでのcssの取り扱い

esbuildでのcssの取り扱い
- bundle css、 単にbundleされるだけ
- from js、 jsの中でcssをimportするとjsと同名のprefixをファイル名として持つcssが生成される(app.js, app.css)。
- css modules、 <name>.module.css という形式のファイルをjsからimportすると良いかんじにファイル名をprefixとして使う code.module.css の .normal が .code_normal に変換される。

2025-02-18
- 環境作成(?)

2025-02-19
- 分割されたページを全部渡したい

2025/02/22
- viteのproxy周りを理解したい

viteのproxy周りを理解したい
- 少なくともAPIを呼び出したい
- mock的な定義ではなくフルのAPIをimportして使いたい
- deploy時の方の対応もしたい
- incremental buildが機能して欲しい

2025-02-25
- 同一ホストで複数のPWAの提供
- 複数のmodelに並列的にリクエストしたい
- rust - js 間で自前アドレスで送受信

同一ホストで複数のPWAの提供
普通にいけそうな感じだった。相対パスでregisterを呼ぶときにはscopeを明示したほうが良いんだろうか?
GETだけだと厳しいのでgithub actionsだけだと辛いかも( スマホのアウトラインエディタの内容をmarkdownに変換するPWAが欲しい)
追記: できなそう…

cat something したものをtoolにパイプで渡したいだけなのに…

複数のmodelに並列的にリクエストしたい
claudeも試したい。
いっそのことツールを作る?( 探せばある気がする)
共通の構造を定義するのにollamaとかを覗くと良いんだろうか?( これ自体がchatgptのrequest/responseの形状を参考にしてるのだっけ?)

中を覗いても良いかも

関係ないけどneverthrowみたいなdependenciesが空なライブラリはdenoから使っても良さそう。

rust - js 間で自前アドレスで送受信
denoのlintにjs側での制御を組み込もうとしてみたときの話。面白かった。
とはいえrolldownやesbuildでpluginの条件にfilterオプション( 正規表現)を使えみたいなそもそもホスト言語から出るなみたいな話はずっとありそう( ここでjsはゲスト言語)

2025-02-26
- スマホのアウトラインエディタからmarkdownの作成

2025-02-27
- mdlist-to-text
- pwaではなくそのままアプリにした方が良いのかも?
- スマホだけでアプリ作成を完結させたい

mdlist-to-text
昨日のやつをPWAにした。
生成aiにコードの生成を任せようと頑張ってはみたものの上手くいかなくて結局自分でコードを書いた。かなしい。
github pagesに置いたが問題がある。
- 長過ぎるとGETで受け取れなくてエラーになる
- github pages自体はPOSTで受け取れない
- 同一Origin単位でアプリが認識してしまっている?
- 昔作ったmdcopyと干渉してしまっている?
- /pwa/mdcopy と /pwa/mdlist-to-text を併存させたかった

manifest.jsonにidが必要?
未定義ならstart_urlが使われると書いてあるのだけれど。。

こうなってしまうしサイトデータ単位になってしまうのかな?
ドメインとか買いたくないよ

domain/origin/host
かなしい…
同じオリジンを使用すると多くの問題と制限が生じます。その根本的な原因は、ブラウザがこれらを明確に異なる「アプリ」と見なさないことです。そのため、このアプローチは推奨されません。

pwaではなくそのままアプリにした方が良いのかも?
直接ネイティブアプリを作ったほうが良いかも?とりあえず前作ったmdcopy(単にブラウザから共有するとmarkdownのリンク形式でクリップボードにコピーするだけ)をネイティブアプリにしてみる。
本当は対話した後にプロンプトを作って欲しかった。
手動でプロンプトを弄ったもの
claudeはなんか大量に出力してくれた。

動くかどうか試せてない。スマホだけから試す分には手順は
- 仕様などを出力したプロンプトを対話的に作る
- 作ったプロンプトをそのまま流す
- (github actionsなどでビルド/テストされることを確認する)
とかになりそうだけれど性善説というか楽観的過ぎる方法かも?あとclaudeなどがワッと作ったファイル群を手軽にgithubのrepositoryに置きたい。スマホだとコピペ対応は無理…

スマホだけでアプリ作成を完結させたい
(回答の精度みたいなものは一旦置いておくとして)
色々雑にgrokのdeepsearchに絡んだ。厳しい。個別にダウンロードを強制させられる時点で死ぬ。
スマホだけで完結したいんだ。ファイルのセットをダウンロードしてきてgithubにアップロードしてきてapkを得たい。
結局のところまとめてダウンロードがしたいのかも?いまひとつ良い回答が得られない。
リミットに達してしまったのでclaudeに訊く。
回答をparseして複数ファイルをまとめて保存したいだけなんだ…

こう言うのがせいぜい?
# モバイルアプリの基本構造を生成してください
以下の仕様に基づいたReactNativeアプリの基本ファイル構造を生成してください:
- アプリ名: TaskManager
- 機能: タスク管理、優先度設定、通知
- 必要ファイル: App.js, タスクコンポーネント、ナビゲーション設定
出力は以下のJSON形式で提供してください:
```json
{
"project_name": "プロジェクト名",
"version": "バージョン",
"files": [
{
"path": "ファイルパス",
"content": "ファイル内容"
},
// 他のファイル...
]
}
```
このフォーマットに厳密に従ってください。これにより私のスクリプトが自動的にファイル構造を生成できます。

deepsearchはこういうのを読んできて提案して欲しかったのだよな…
(clineはxml?で形式を指定するプロンプトを使ってリクエストしてる?(まじめに読んでない))

さらに延々とgrokと戯れる
本題はexplain
this postのボタンがuiから消えて、直接プロンプトに書けば良いという話を聞いて試したところから。スレッドも読んでくれるか不安だった。感覚的にはひとつのポストしか見てくれてない気がする(ボタンを押したときはスレッドを見てくれてた感があった)
その後は延々とgrokに絡んでた。
途中なぜか拙い英語で話しかけたり、vscodeのclineはvscodeのcliと認識されることなどがわかった。あとURLを貼っても見てくれないかも?
(searchをonにしたときはそう。clineのpromptのソースコードのURLは見てくれなかった。あるいはoffでもtwitterのURLとか一部だけかも?)

2025-03-06
- grokにx/twitter のスレッドを読み込ませることに成功

grokにx/twitter のスレッドを読み込ませることに成功
スマホでは入出力に難を抱えてるのでまとまった入力をaiに渡す方法が限られてる。
あとx/twitterに一度書いた内容を食わせられるaiは現状grokだけな気がする。一時期 explain this postボタンが投稿の脇に存在していてそれがスレッド全体を読み込んでくれてそうだったのだけれど消えてしまった。
以前に試行錯誤したときは上手くいかず余分なものも検索したりフェイクの入力を読んだりしてたがプロンプトでどうにかする方法がわかったのでメモ()単なる改善の結果かもしれない。
explain this thread
<url>
A thread is a post on X/Twitter and its replies.
都合よく英語でのプロンプトのおかげで英訳された結果も貼られて勉強になる(?)

もっと豪華なのはこんなやつ
<x post URL>
Provide a detailed analysis of the following X thread (including the original post and its entire reaction chain). In this thread, the initial poster presents a specific topic or idea, and subsequent reactions from other users include opinions, questions, or additional insights. Focus on the following aspects in your analysis:
- The content and intent of the initial post, including its context and background.
- The flow of discussion and key themes that emerge through the reaction chain.
- Any memes referenced, alluded to, or implied within the thread, including their definitions, cultural significance, origins, and how they enhance or shape the conversation.
Clearly articulate the original poster's intent, explore how the reaction chain deepens or expands the discussion, and offer a technical, social, and cultural perspective on the thread’s dynamics, with a particular emphasis on the role and impact of memes.

grok ✔️
chatgpt ❌️
claude ❌️
perplexity ❌️

2025-03-08
- grokは基本的には記事の本文を読まないみたい
- ログが透けて見えるやつが嬉しい
- 自分用のscraper的なものを手元に持っておいたほうが良いかも?

grokは基本的には記事の本文を読まないみたい
あるgigazineの記事を対象にその記事が参照してる元の論文を探させようとした(記事の本文の中にその論文へのURLは存在する)
この記事の元の論文を探して
https://gigazine.net/news/20250307-age-cognitive-skill/
これでは上手くいかなかった。どうやらすぐに検索に移行してしまうらしい。
昨日はx/twitterのスレッドを読み込ませることに成功して喜んでいたが例外的な状況だったらしい。
deepsearchでは
deepsearchのオプションを付けた場合には紆余曲折のあとに成功した。
とはいえthinkingのログを覗くとurlを構築したり本文が読めないという言葉を繰り返してたり何だか怪しい感じの挙動。
(余談: 雑に眺めて挙動を推測した感じだった。この時の振る舞いをいい感じに要約させたい。コンテキスト長の問題でサポートしてるのはgeminiだけだっけ?)
もしかして日本語の記事は英語ではないと判断して捨てるみたいな挙動をしたりしてる?ということが気になったりした。
基本読めてなさそう
別の会話を開いて、
explain this article <URL>
この回答を得るのに何を参照しましたか?
みたいなプロンプトを投げまくってみた。
- 日本語の記事 ❌️
- 英語の記事 ❌️
- 元の論文のURL ❔️
直感的には全て英語で捉えて英語以外の言語がやってきたときには翻訳をかけて読み込むなどと頑張らず素直に打ち切るみたいな処理になってると思ったのだった。
英語であっても本文は読んでなさそうだった。基本的には検索しかしなさそうだった。
一部元の論文のURLを投げたときにはそれっぽい回答をしてる面もあったけれど、特別対応されるdomainが存在するかなどはわからない(wikipedia辺りはされてるかもしれない?)。単にabstract単位では至る所で切り貼りされたサイトが散在してるが故に結果的に上手く取り出せただけかもしれない。

たぶん検索してdescriptionを読むくらいな感じそう。

ログが透けて見えるやつが嬉しい
creatrを少し試した。アクアリウムみがあった。しかしもう少しログが出てると嬉しかったというようなことを呟いた。

creatr自体はweb上でclineをやってみましたよ的な感じのもの。テキトーにtwitterのtimeline的なものを作らせてみた。
スマホでは厳しかったのでタブレットで昨日やった。わりとfixing issueで止まる。
一応previewも共有できる

2025-03-27
- MCP
- プロンプトエンジニアリング

2025-03-28
- 久しぶりにEmacsで遊ぶ (widget)
- HTMLでやってみた

久しぶりにEmacsで遊ぶ (widget)
あんまり使われることがない(使ったことがなかった)widgetパッケージを使って遊んでみることにした。
これが書いたelisp。
M-x my:widget-example
からはじめて C-c n
や C-c d
でノードの追加と削除が出来る。
最初はgrokやgeminiにコードを生成してもらおうかとしたが全然上手く動かなかった(grokはノードの追加で壊してた。geminiは2.5 PROを使って一見もっともらしいコードを生成したが存在していないkey-mapの変数などを参照したりなどしてそもそも動かなかった)。一方ドキュメントの検索としての機能としてはとても役に立った。
はじめはドキュメントのコード例から始める (実際のところswitch-to-bufferよりもpop-to-bufferのほうが便利)
インデントをつけた表示をやりたくてgroup widgetの使い方にはまったりなどしてた。

地味にerace-bufferをするときにwidgetのread-onlyなoverlayの部分にアクセスしようとして上手く消せなかった。こんな感じにしてあげる必要があった。
(let ((inhibit-read-only t))
(delete-all-overlays buf)
(erase-buffer))

あとまっさらな環境でEmacsを立ち上げたかったので以下みたいな感じで実行しまくっていた。
$ emacs -q -l ~/.emacs.d/widget-example.el

HTMLでやってみた
以下のような条件でHTMLで書く事を考えてみる。
- ↑のx/twitterのスレッドみたいなテキストの連鎖のようなUI
- スマホ対応
- 全部を辿ってクリップボードにコピー
grokに任せた。すごい。一瞬だった。
codepen
履歴

まぁテキスト化してクリップボードにコピーする機能はつけたけれどテキストから読み込む機能とかないし、スマホから使うと文字を入力している最中に追加のボタンが押せないなどわりと使いにくかったりするけれど。

Gemini 2.5 Proの場合
履歴

gemini版のほうが入力中にノードを追加できたので便利。何も言わずともexport機能を作ってくれていた。でもファイルダウンロードだった。

2025-03-30
- 昨日のemacs lispをリファクタリングしてもらう

昨日のemacs lispをリファクタリングしてもらう
geminiはきれいに動かないコードを生成したし、リファクタリングとかなら上手くいくんじゃないか?(gemini 2.5 pro)
スマホから実行するのに面倒なのでsystem instructionのところに作業の指定を書いて、初回の入力はコードだけにした。
まだ試せてない

試した
普通に初手からぶっ壊してきたな。widgetのoverlayなんて取得できないのに。。
ヘルプメッセージとか変数や定数の定義とかは嬉しいからそれくらいで終わりそう。
🚧 壊れたところ
- nodeの追加時の移動でoverlay取得しようとしたが失敗
- nodeの削除時の確認でwidgetのtypeを取得するときwidget-typeではなくwidget-getに:typeを指定して取ろうとして失敗
- widget-forwardに謎の引数を与えて失敗 (widget-moveから勝手に変える, suppress-echo分の引数を余分に与える)
- 全部走査して文字を集めてくる部分をぶっ壊す(移動の関数が戻り値を返す前提でコードを書き換える条件式が壊れる)
基本的には、widgetとのコミュニケーションの問題(widgetのコード自体は読んでないのか)。
まぁ悪い感じのコードというか既存の実装に従ったhackyなコードの部分が壊れたといえなくはないが..。一番嫌な動作確認的な受け入れテストだけをやらされている感じ。これでできましたとかPR出されたらキレるレベル。

普通にjson的な何かとして保存して読み込んだときにuiを作る仕組みの方が良いかもしれない。.ipynbの再発明だ。
こんなのでコードを書き換え直させてたけれどだめだった。
あなたはEmacsを利用する開発者です。書いたコードは実験用のものです。これを公開したelispパッケージのようなきれいな形に変換したいです。関数名のprefixはchain-text:に変更してください。
以下のコードに対して、次の制約の下で改善を行ってください。
- コードの振る舞い(機能)は一切変更しない。
- 実装のロジックや構造を大きく変更しない(アルゴリズムや制御フローの本質を変えるリファクタリングは禁止)。
- 許可する変更は以下に限定する:
- 変数名や関数名の変更(意味が明確になる場合のみ)。
- マジカルナンバーやマジカルストリングを適切な定数や変数に置き換える(ただし、計算やロジックは変えない)。
- ドキュメントコメントの追加(トップレベルのコメントだけ追加してほしい。インラインの説明コメントは不要)。
- 一般的に公開パッケージに付与されるようなメタデータ(例:パッケージコメント、ライセンス情報)の追加。
- 補助関数の導入による関数の分割(ただし、元のロジックの意味が完全に等価であること。関数の呼び出しコストなどの差異は無視する)。
- その他、意味的に完全に等価な変換(コードの動作や実装の意図が変わらないもの)。
- 以下の変更は一切行わない:
- 余分なチェックコードの追加(例:入力検証や境界チェック)。
- エラーハンドリングの追加や強化。
- 上記に該当しない機能的・構造的な改善や最適化。
改善後のコードを返してください。
愚痴
- https://x.com/podhmo/status/1906054918399762579
- 事細かにコメントを書くのは嬉しいが嘘のこともある
- whileの条件をこれでもぶっ壊すので辛い
生成されたプロンプトをそのまま使っているのが間違いかも?(大きな変更はしないと書かれていた事に気づいた。小さな変更はするのか。。)

dired
- widgetなどとは異なりtabとかで移動してくれないのか