Jason — 做了什么— build log— 制作ログ

在日本,用 AI 一个人做一堆小产品。找工作 / 合作 / 投资都可以聊。Building lots of small products solo with AI, from Japan. Open to jobs, collaboration, or investment.日本で、AI を使って一人でたくさんの小さなプロダクトを作っています。仕事・協業・出資、どれでもお話しできます。

gao616188@gmail.com
maysuns.uk ↗

PJ62PJ62PJ621 · 2026-08-29

PJ62 量化实验:从 3 个虚拟交易员扩到 8 个,接上每天多次的邮件汇报PJ62 quant experiment: from 3 virtual traders to 8, wired to a daily email digestPJ62 クオンツ実験:仮想トレーダーを 3 人から 8 人に拡張し、毎日複数回のメール通知につないだ

PJ62 是一个「多角色虚拟纸上交易」实验——不连券商、不下真单,只是让 AI 扮演几种不同风格的交易员(趋势跟随 / 逆向 / 保守 / 日本市场 / 中国市场 / 外汇带杠杆 / 高活跃 / 纯机械规则),共用一笔虚拟资金,每天按各自规则做假设性决策并记录,长期对比哪种风格在哪种行情占优。

本周把角色从 3 个扩到 8 个,加了强制规则(不交易必须写明具体原因)、买卖点必须带百分比、每次附机构常用的参数区间做参照。还写了一份 v0.1 的「我的交易系统」规则草稿,之后每月对照实际结果修订。

配套做了 Windows 计划任务,每天在东京收盘、中国收盘、外汇活跃时段、次日凌晨各跑一次,把 8 个角色的动作和账面情况用邮件发出来。全程用本地 Claude Code 订阅额度,提示词写成模型无关的,换别的 AI CLI 也能跑。

PJ62 is a multi-persona paper-trading experiment — no broker, no real orders. Several AI personas (trend-following, contrarian, conservative, Japan market, China market, leveraged FX, high-activity, and a purely mechanical rules-based one) share one pool of virtual money, each making hypothetical decisions by its own rules every day, so that over time I can compare which style wins in which market conditions.

This week I grew the personas from 3 to 8, added hard rules (a no-trade day must state a concrete reason), required every entry and exit to carry a percentage, and attached the parameter ranges institutions commonly use as a reference. I also wrote a v0.1 draft of "my trading system" that I'll revise monthly against the actual results.

A Windows scheduled task runs it four times a day — Tokyo close, China close, the active FX window, and early the next morning — and emails out all 8 personas' moves and balances. It all runs on my local Claude Code subscription, and the prompts are written to be model-agnostic so another AI CLI could run it too.

PJ62 は複数ペルソナによるペーパートレード実験で、証券会社にはつながず、実注文も出しません。トレンドフォロー/逆張り/保守/日本市場/中国市場/レバレッジ FX/高頻度/純粋なルールベース、といった複数の AI ペルソナが 1 つの仮想資金を共有し、それぞれのルールで毎日、仮の売買判断を記録します。長期的に、どのスタイルがどの相場で優位かを比較するのが狙いです。

今週はペルソナを 3 人から 8 人に増やし、強制ルール(取引しない日は具体的な理由を明記)、売買ポイントには必ずパーセンテージを付ける、機関投資家がよく使うパラメータ範囲を参照として添付、を追加しました。さらに v0.1 の「自分のトレーディングシステム」草案を書き、今後は実績と照らして毎月見直します。

Windows のタスクスケジューラで 1 日 4 回(東京クローズ/中国クローズ/FX の活発な時間帯/翌朝未明)実行し、8 人の動きと残高をメールで送ります。すべてローカルの Claude Code のサブスク枠で動き、プロンプトはモデル非依存で書いてあるので他の AI CLI でも動かせます。

AIquantside-project

PJ55PJ55PJ551 · 2026-08-29

PJ55 精神营养库:给自己(和别人)做的励志短读物,能朗读PJ55 "mental nutrition" library: short motivational reads for myself (and others), with text-to-speechPJ55「心の栄養」ライブラリ:自分(と他の人)のための短い励ましの読み物、読み上げ付き

我常常一刷短视频就是几个小时,然后责怪自己。PJ55 是对抗这件事的个人工具,原本只是每日「执行意图」打卡。这周给它加了一个「精神营养库」:几篇 300-600 字的短文——林肯从一连串失败到签署解放奴隶宣言、安藤忠雄一个没上过大学的拳击手拿到普利兹克奖、村上春树 29 岁在球场看台上决定开始写小说;还有两篇原创影评,写《フラガール》和《南極料理人》这类「普通人把一件不被看好的事一天天做下去」的日本电影。

每篇配一个朗读按钮,用浏览器自带的语音,当有声读物听。内容存在一个 JSON 文件里,加删都很方便。

I often lose hours to short videos and then beat myself up about it. PJ55 is a personal tool against that; it started as a daily "implementation intention" check-in. This week I added a "mental nutrition" library: a few 300–600 word pieces — Lincoln going from a string of failures to signing the Emancipation Proclamation; Tadao Ando, a boxer who never went to university, winning the Pritzker Prize; Haruki Murakami deciding at 29, in the bleachers at a baseball game, to start writing novels. Plus two original film notes on Japanese movies like Hula Girls and The Chef of South Polar — ordinary people keeping at something nobody bet on, one day at a time.

Each piece has a read-aloud button using the browser's built-in speech, so I can listen to them like an audiobook. The content lives in a JSON file, so adding or removing pieces is easy.

私はよく短い動画に何時間も溶かして、そのあと自分を責めます。PJ55 はそれに抗うための個人ツールで、もともとは毎日の「実行意図」チェックインでした。今週は「心の栄養」ライブラリを追加しました。300〜600 字の短文がいくつか——失敗続きから奴隷解放宣言に署名するまでのリンカーン、大学に行かなかった元ボクサーでプリツカー賞を取った安藤忠雄、29 歳で野球場のスタンドで小説を書き始めると決めた村上春樹。さらに『フラガール』『南極料理人』のような、普通の人が見込みのないことを一日ずつ続ける日本映画についてのオリジナルの短い感想が 2 本。

各編にブラウザ内蔵の音声を使った読み上げボタンがあり、オーディオブックのように聴けます。内容は JSON ファイルにあるので、追加も削除も簡単です。

productself-improvementPWA

PJ50PJ50PJ501 · 2026-08-27

PJ50 个人站:Search Console 多账号排查 + SEO/GEO 优化Personal site: Search Console multi-account debugging + SEO/GEO tune-up個人サイト:Search Console の複数アカウント切り分け+ SEO/GEO 最適化

个人网站 maysuns.uk 的 Google Search Console 一度被误判成「验证失败」,实际是查的时候用错了同时登录的另一个 Google 账号。排查清楚后补了 DNS 验证和 27 条 sitemap,做了一轮 SEO / AI 搜索优化。

顺手总结成一条规则:用浏览器查 Google 这类支持多账号的服务时,看到「没有权限」别急着下结论,先确认自己查的是哪个账号。

My personal site maysuns.uk was briefly misread as "verification failed" in Google Search Console — it turned out I'd been checking it while signed in to a different Google account that was logged in at the same time. Once that was sorted, I added DNS verification and a 27-URL sitemap and did a round of SEO / AI-search optimization.

I turned it into a rule: when checking a Google service that supports multiple accounts from a browser, don't conclude "no permission" too fast — first confirm which account you're actually looking at.

個人サイト maysuns.uk が Google Search Console で一時「確認できませんでした」と誤判定されました。実は、同時にログインしていた別の Google アカウントで見ていたのが原因でした。切り分けたあと、DNS 確認と 27 件の sitemap を追加し、SEO/AI 検索の最適化を一通り行いました。

ルールにしました:複数アカウントに対応した Google のサービスをブラウザで確認するとき、「権限がない」と早く結論づけず、まず自分がどのアカウントで見ているか確認する。

personal-siteSEO

其他Otherその他11 · 2026-10-06

做不到的写"没测到",不假装做完Say "not tested" instead of pretending it is doneできていないことは「未確認」と書く。できたふりをしない

每次汇报我要求写清三件事:做了什么、没测到什么、差什么条件才能变真。比如"登录后的显示没测,因为我没有账号密码",或"手机没测,只测了电脑宽度"。

好处:下一次打开时,不会把"看起来能用"当成"已经验证"。

Every report must state three things: what was done, what was not tested, and what condition would make a placeholder real. For example: "the signed-in view is untested because I do not have the account", or "mobile is untested; only desktop width was checked".

Benefit: next time, "looks like it works" is never mistaken for "verified".

毎回の報告に3つを書くルールです。何をしたか、何を確認していないか、どんな条件で本物になるか。たとえば「ログイン後の表示は、アカウントがないので未確認」「スマホは未確認、PC 幅のみ確認」。

効果:次に開いたとき、「動いていそう」を「確認済み」と取り違えません。

process

用 req/reply 文件和 AI 协作:为什么不用聊天窗口Working with AI through req/reply files instead of a chat windowチャット窓ではなく req/reply ファイルで AI と協業する理由

我把问题写进一个 req 文件,AI 把回答追加进 reply 文件,用行号互相指代。好处:①原文逐字留档,清空后也看得懂 ②每个问题有编号映射,不会漏答 ③长回答不挤在聊天里,我可以按行号回复。

代价:需要自己保存文件,并且回答只能追加不能改旧的。

I write questions into a req file; the AI appends answers to a reply file; we refer to each other by line number. Benefits: (1) the original wording is kept verbatim and still makes sense after clearing; (2) every question is numbered and mapped, so none is skipped; (3) long answers stay out of the chat and I can reply by line number.

Cost: I have to save files myself, and answers are append-only.

質問を req ファイルに書き、AI が reply ファイルに回答を追記し、行番号で互いを参照します。利点:①原文がそのまま残り、クリア後も意味が通る ②各質問に番号と対応表があり、回答漏れがない ③長い回答がチャットを埋めず、行番号で返信できる。

代償:ファイルを自分で保存する必要があり、回答は追記のみで過去分は直せません。

ai-workflow

把一个小站发布到 GitHub:什么能放、什么不能放Publishing a small site to GitHub: what goes in, what stays out小さなサイトを GitHub に公開:入れるもの、入れないもの

把日语短视频学习站公开到 GitHub 时:放了页面、字幕/翻译数据、sitemap、README 和 MIT 许可证。

没放:视频文件(约 780MB,超过单文件限制,且各自有授权)、访问统计脚本(免得别人 fork 后数据记到我的统计站)、含制作细节的内部页面。

发布前搜了一遍:没有密钥、密码、服务器地址和本机路径。README 如实写了"英日字幕是翻译的翻译,未经母语者校对"。

When publishing the Japanese short-video learning site to GitHub: included the pages, subtitle/translation data, sitemap, README and an MIT license.

Excluded: video files (about 780 MB, over the per-file limit and each with its own license), the analytics script (so forks do not send data to my stats site), and internal pages with production details.

Before publishing I searched for secrets, passwords, server addresses and local paths: none. The README states honestly that the English and Japanese subtitles are translations of translations, not checked by native speakers.

日本語ショート動画学習サイトを GitHub に公開するとき、ページ、字幕・翻訳データ、sitemap、README、MIT ライセンスを入れました。

入れなかったもの:動画ファイル(約 780MB で単一ファイルの上限を超え、各素材に個別のライセンスあり)、アクセス解析スクリプト(フォーク先のデータが私の解析サイトに送られないように)、制作の詳細を含む内部ページ。

公開前に鍵・パスワード・サーバーアドレス・ローカルパスを検索して、該当なし。README には「英語・日本語字幕は翻訳の翻訳で、ネイティブ確認なし」と正直に書きました。

githubopen-source

"登录后才显示"要在服务器判断,不能只在网页里藏"Visible after sign-in" must be decided on the server, not hidden in the page「ログイン後に表示」はサーバーで判断する。ページ内で隠すだけでは不十分

想让某些内容只对登录用户可见,只在网页里用 CSS/JS 隐藏是假的——查看源码就能看到。

正确做法:内容放在单独文件,nginx 先问登录服务"这个人是谁",是才发送,不是返回 401。

诚实边界:如果演示本身要在浏览器里运行,它用到的代码就必然会到达浏览器,这时能挡住的只是"完整源码、复制、下载"。

Hiding content with CSS/JS only is fake protection; view-source reveals it.

The right way: put the content in a separate file; nginx first asks the sign-in service who the visitor is, and sends the file only if signed in, otherwise 401.

Honest limit: if a demo must run in the browser, its code necessarily reaches the browser; what you can gate is the full source, copy and download.

CSS/JS で隠すだけの保護は見せかけで、ソース表示で見えてしまいます。

正しい方法:内容を別ファイルに置き、nginx がまずログインサービスに「誰か」を問い合わせ、ログイン済みの場合のみ送信、そうでなければ 401 を返す。

正直な限界:デモがブラウザで動く以上、そのコードは必ずブラウザに届きます。止められるのは「完全なソース・コピー・ダウンロード」までです。

securityweb

一个看不见的坑:字面写出的 </body> 让整页按钮失效An invisible trap: a literal </body> broke every button on the page見えない落とし穴:文字どおりの </body> でページ全体のボタンが効かなくなった

现象:某个页面左侧菜单几乎都点不动。

根因:服务器为所有网站统一注入一段脚本,做法是把 </body> 替换成"脚本+</body>";页面自己的脚本字符串里恰好也写着 </body>,被一起替换,整段脚本语法崩掉。

修法:站内脚本里不再出现字面的 </body>(拆成 '<'+'/body>')。教训:全站统一注入的机制,会影响每个页面的字符串。

Symptom: most left-menu items did nothing.

Cause: the server injects a script into every site by replacing </body> with "script + </body>"; the page's own script also contained a literal </body> in a string, which got replaced too and broke the script's syntax.

Fix: never write a literal </body> inside site scripts (split it as '<'+'/body>'). Lesson: a site-wide injection mechanism affects strings in every page.

症状:左メニューのほとんどが反応しない。

原因:サーバーが全サイトに共通スクリプトを注入するため </body> を「スクリプト+</body>」に置換しており、ページ自身のスクリプト文字列にあった </body> も置換されて構文が壊れました。

対策:サイトのスクリプトに文字どおりの </body> を書かない('<'+'/body>' と分割)。教訓:全体注入の仕組みは、全ページの文字列に影響します。

debugging

用浏览器自动化给 58 个设计网站截首屏,做成灵感墙Screenshotting 58 design sites with browser automation for an inspiration wallブラウザ自動化でデザインサイト 58 件のスクリーンショットを撮り、インスピレーション壁に

设计库的"找灵感"原来是一排文字链接。现在用自动化浏览器逐个打开 58 个设计网站,截首屏做成缩略图。51 个成功,6 个打不开、被机器人验证拦住或截出空白,保留为文字卡。

注意:截图版权归各网站,仅作参考缩略图;"首屏"不一定是该站最有特点的部分。

The "inspiration" section was just a list of text links. An automated browser now opens 58 design sites and captures the first screen as a thumbnail. 51 worked; 6 failed (timeouts, bot checks, blank captures) and stay as text cards.

Note: screenshot copyright belongs to each site and is used only as a reference thumbnail; the first screen is not always a site's most distinctive part.

「インスピレーション」欄は、これまでテキストリンクの一覧でした。自動化ブラウザで 58 サイトを開き、最初の画面をサムネイルにしました。51 件は成功、6 件はタイムアウトやボット確認、空白のため文字カードのままです。

注意:スクリーンショットの著作権は各サイトにあり、参考用サムネイルとしてのみ使用。最初の画面がそのサイトの一番の特徴とは限りません。

automationweb

一次密钥泄露复盘:前端构建把 API Key 打进了网页A key-leak postmortem: the frontend build baked an API key into the page鍵漏えいの振り返り:フロントエンドのビルドが API キーをページに埋め込んだ

发现:一个项目的前端构建把 .env 里的 OpenRouter Key 嵌进了线上 JS,任何人看网页源码都能搜到。

处理:去掉"没填 Key 就用 .env"的后备,重新构建,线上搜同一个值 0 处;让该 Key 作废并换新;扫描服务器所有网页文件,没发现别的。

固定做法:构建后用 .env 里的真实值去 dist 里搜,必须 0 命中。(本文不含密钥本身。)

Found: one project's frontend build embedded an OpenRouter key from .env into the live JavaScript, searchable by anyone viewing the source.

Fix: removed the "use .env when no key is entered" fallback, rebuilt, searched production for the same value (0 hits), revoked and replaced the key, and scanned every web file on the server for other leaks (none found).

Standing rule: after every frontend build, grep dist/ for the real values from .env; the result must be 0. (This post contains no key.)

発見:あるプロジェクトのビルドが .env の OpenRouter キーを公開 JavaScript に埋め込み、ソース表示で誰でも検索できる状態でした。

対応:「キー未入力なら .env を使う」フォールバックを削除して再ビルドし、本番で同じ値を検索(0 件)。キーを無効化して再発行し、サーバー上の全ウェブファイルも走査しました(他には見つからず)。

固定ルール:ビルド後は .env の実値を dist/ で検索し、必ず 0 件にする。(この記事にキー自体は含みません。)

securitypostmortem

登录改成弹出小窗口:错了很多次,最后好用了Sign-in as a pop-up window: wrong many times, finally rightログインをポップアップ窓に:何度も間違えて、ようやく使えた

统一登录(auth.maysuns.uk)原来是整页跳转:登录完回头一看,原页面没了。

改成弹出一个 460×640 的小窗口,加了"取消",登录成功后小窗自己关闭,原页面自动认出用户。

过程里改错了很多次;每次"不对"都被记下来再改。写成了一个小故事《小登录窗的故事》。

Our shared sign-in (auth.maysuns.uk) used to redirect the whole page; after signing in, the original page was gone.

It is now a small 460×640 pop-up with a Cancel button; on success it closes itself and the original page recognizes the user.

It took many wrong attempts, each noted and fixed. I wrote it up as a short story, "The Little Login Window".

共通ログイン(auth.maysuns.uk)は以前、ページ全体が遷移する方式で、ログイン後に元のページが消えていました。

今は 460×640 の小さなポップアップで、キャンセルボタン付き。成功すると自動で閉じ、元のページがユーザーを認識します。

何度も間違えましたが、そのたびに記録して直しました。短い物語「小さなログイン窓の話」にもしました。

authstory

动效图库:30 个只用 CSS 的动画,登录后才看源码Motion gallery: 30 CSS-only animations, source visible after sign-inモーションギャラリー:CSS だけの動き 30 個、ソースはログイン後に表示

动效图库(html.maysuns.uk)收了 30 个纯 CSS/SVG 动画:加载、按钮、卡片翻转、文字特效、天空/雨/海浪/雪等,每个都配"怎么动的"说明,可按分类筛选、搜索、调速、暂停。

源码、复制、下载放在服务器上,登录后才发送,让页面保持简洁。

如实说明:演示要在浏览器里跑,所以懂技术的人仍可从开发者工具看到样式,这一步不是防抄袭。

The motion gallery (html.maysuns.uk) holds 30 pure CSS/SVG animations: loaders, buttons, card flips, text effects, sky/rain/waves/snow and more. Each has a "how it moves" note, with category filter, search, speed control and pause.

Source, copy and download live on the server and are only sent after sign-in, to keep the page clean.

Honest note: demos run in the browser, so anyone technical can still inspect the styles; this is about tidiness, not copy protection.

モーションギャラリー(html.maysuns.uk)には、ローダー・ボタン・カード反転・文字効果・空/雨/波/雪など、純粋な CSS/SVG アニメーションが 30 個あります。それぞれ「どう動くか」の説明付きで、カテゴリ絞り込み・検索・速度変更・一時停止ができます。

ソース・コピー・ダウンロードはサーバー側に置き、ログイン後にだけ送ります(ページをすっきりさせるため)。

正直な注記:デモはブラウザで動くため、詳しい人は開発者ツールでスタイルを見られます。コピー防止ではなく整理が目的です。

webanimation

一天做出一整套网页设计库:29 个主题、35 张背景、22 个模板One day, a whole web design library: 29 themes, 35 backgrounds, 22 templates一日でウェブデザインライブラリを一式:テーマ 29、背景 35、テンプレート 22

网页设计库(design.maysunai.com)把"主题(颜色)、背景、页面模板"拆开,任意组合。目前有 29 个主题、35 张 SVG 背景、4 个会动的背景(蓝天白云/下雨/大海/雪)、22 个电脑多栏页面模板。

所有颜色都走"令牌",换主题整页跟着变;每个主题的文字对比度自动校验。

没做完的:把首页拆成几个独立网页、用真实照片做动画背景。

The web design library separates themes (colors), backgrounds and page templates so any combination works. It now has 29 themes, 35 SVG backgrounds, 4 animated backgrounds (sky, rain, sea, snow) and 22 multi-column page templates.

Every color goes through design tokens, so switching a theme restyles the whole page; text contrast is checked automatically.

Not done yet: splitting the home page into separate pages, and photo-based animated backgrounds.

ウェブデザインライブラリは「テーマ(色)・背景・ページテンプレート」を分けて、自由に組み合わせられます。現在はテーマ 29、SVG 背景 35、動く背景 4 種(青空・雨・海・雪)、PC 向け多段組みテンプレート 22。

色はすべてトークン経由なので、テーマを変えるとページ全体が変わり、文字のコントラストも自動でチェックします。

未完成:トップページの分割、実写真を使った動く背景。

webdesign

学会了用 git 提交代码Finally learned to commit code with gitようやく git でコードをコミットできるようになった

我一直想学 git,学了很久没学会。这次让 AI 用我一个真实项目里十几个没提交的文件当练习题,写了一份带具体命令、每步「你应该看到什么」、以及「出错了怎么办」对照表的动手指南。照着走了一遍,第一次自己完成了一次干净的 commit——只提交了该项目的文件,没把别的项目的改动混进去。

感受是:以前不是学不会,是缺一个「就照这个具体例子做一遍」的材料。

I'd wanted to learn git for a long time and kept failing at it. This time I had the AI use a dozen uncommitted files in a real project of mine as the exercise, and write a hands-on guide with concrete commands, a "what you should see" note for each step, and a "what to do if it goes wrong" table. I followed it through and made my first clean commit on my own — only the files for that project, without mixing in changes from other projects.

The takeaway: it wasn't that I couldn't learn it, it was that I lacked material that said "just do it once, following this specific example."

ずっと git を学びたくて、長いこと身につきませんでした。今回は、自分の実プロジェクトの未コミットのファイル十数個を練習問題にして、具体的なコマンド、各ステップの「こう表示されるはず」、そして「うまくいかないときの対処」対照表を含むハンズオンガイドを AI に書いてもらいました。その通りに一度やってみて、初めて自分できれいなコミットができました——そのプロジェクトのファイルだけを、他のプロジェクトの変更を混ぜずに。

分かったのは、学べなかったのではなく、「この具体例のとおりに一度やってみる」ための教材が足りなかっただけ、ということです。

learninggit