Markdown 構文と外部タグの記述方法まとめ
Markdown 構文標準フォーマット 参考:Markdown 语法图文全面详解(10 分钟学会) 注意:このページではまれに CSS の競合問題が発生することがあります! コードブロック 示例源码渲染演示\```sh # VSCode终端 hexo clean; hexo s hexo clean; hexo g; hexo d git add .; git commit -m "npm publish"; npm version patch; git push # Cmder终端 hexo clean && hexo s hexo clean && hexo g && hexo d git add . && git commit -m "npm publish" && npm version patch git push \```# VSCode终端 hexo clean; hexo s hexo clean; hexo g; hexo d git add .; git commit -...
質問の智慧
転載声明 以下の内容はすべてAsunaによりHow-To-Ask-Questions-The-Smart-Wayから転載したものです。 中国大陸内でのアクセスを高速化することのみを目的としており、権利侵害があればご連絡いただければ削除します! 質問の作法 How To Ask Questions The Smart Way Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen 本ガイドの英語版の著作権は Eric S. Raymond, Rick Moen に帰属します。 原文 URL:http://www.catb.org/~esr/faqs/smart-questions.html Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 本中国語ガイドは、原文 3.10 版および 2010 年にGasolinが翻訳した版を基にした最新の翻訳です。 翻訳上の問題をご指摘いただける方は、发 issueしていただくか、あるいは直接发...
8つの作業ラインが同時に走っているとき、私は何をしているのか
この記事を書く前にビルドマシンをちらっと見た。5 つの tmux セッションが動いていて、~/.local/state/ai-jobs の下に 372 個のタスクディレクトリ、3.1 GB、load average は 2.90 で二から七の間をずっと漂っている。このマシンは 128 コア、起動してから四日半。数字はサンプリングした一瞬のもので、この段落を書き終えるころにはまた変わっている——それ自体がひとつの説明でもある。 同じ瞬間に手元にあるプロジェクト:Rust + SQL のサイトで統計クエリを直している、Next.js アプリで service worker を退役させている、Bun + Hono のサービスでトンネルの origin を修正している、Prisma + tRPC の monorepo、C# のゲーム私設サーバーで資料フィールドを補っている、C/C++ の SDL3/WASM 移植、Zola/Hexo のドキュメントサイトが二つ。~/Code の下に 64 個のディレクトリ、36 個の git リポジトリ。 これは「たくさんウィンドウを開いた」という類の並...
マージ後、typecheck はグリーンだった
2aa1194ed、タイトルは「Merge latest main into zsf」。これ以上ないほどありふれたマージコミットだ。 これが Adjust ランタイム一式を消し飛ばした。packages/api/src/adjust/ 配下の 8 ファイルのうち 7 つが丸ごと削除され、diff --stat は 4 行追加・292 行削除。 コンフリクトなし。コンパイルエラーなし。CI はグリーン。 削除はどう紛れ込んだのか マージの両親は e5051db93 と 93173a00b(main)、マージベースは e11e286ff。base の時点でこの 8 ファイルは健在で、git ls-tree の名前もすべて載っている。 問題は zsf 側のブランチが先にそれらを消していたことだ。あのブランチがやるべきは別の機能で、Adjust は「main に増えた余計なもの」に見えた。消せばローカルはきれいになる。そうしてマージのとき、git が向き合ったのは「片方が削除、片方が無変更」——三者マージのルールでは、削除は zsf の変更としてそのまま採用される。 これはロールバック...
トンネルの後ろにあるサーバーは自分がhttpの中にいると思っている
サイトは Bun + Hono で書かれていて、コンテナの中で動き、外部へは Cloudflare Tunnel 経由で出している。5日前に立て続けに2つのバグ(be15f5a、2ea4f53、間隔は8分)が出たが、どちらも「ローカル開発時の前提をこのトポロジに持ち込んでしまった」ものだった。 ひとつめ:origin が http トンネルが公網からリクエストを送り込むとき、コンテナに届くこの一跳は http になる。そのため request.url で origin を取得している箇所では、どこでも http://... が返ってくる。 大半の箇所では問題ないが、2か所だけまずい: cookie の Secure 属性、および OAuth コールバック URL の組み立て——組み上がるのは http のコールバックで、リダイレクトバック時にはブラウザが https として扱うので食い違う。 外部向けに絶対 URL を生成する場合(共有リンク、メール内のリンク)——送り出されるのは http で、ユーザーがクリックするとリダイレクトされるか、そもそも繋がらない。 Cloud...
Service Worker を自ら降板させる
88b54539 refactor(web): retire service worker caching safely、1107 行削除、354 行追加。数字だけ見るとリファクタリングのようだが、実態はまだ生きているものに退場を段取りする作業だ。 なぜ削除したいのか このサイトは Next.js アプリで、以前は Serwist を使って PWA のプリキャッシュを行っていた。問題は徐々に表面化してきた: デプロイ後もブラウザ側のプリキャッシュは残り、ユーザーは前バージョンの HTML と前バージョンの JS を受け取ってしまう。 キャッシュ内の古い chunk が消された後、ページがそれを参照して、そのまま白画面になる。 問題が起きてもユーザー側で「キャッシュを消す」しかなく、こちら側には救済手段が一切ない。 一方でそれによって得られる利点はどんどん小さくなっていた:アプリは既に正常にインストールできる(2026-10-30 に Google の現行インストール条件をわざわざ確認したが、service worker はとうに必須ではなくなっている)し、プッシュも使ってい...
EXISTS を FILTER の外に出したあと
渠道統計の詳細ページに1.5秒かかる。管理画面のダッシュボードとしては壊滅的ではないが、更新のたびに1秒半待たされれば、使う人は覚えている。 30日ウィンドウ、24.6万件のクリックという本番規模でのベンチマーク。詳細ページ1.51秒、チャネル横断のサマリー1.49秒、共有ページ0.85秒——共有ページは広告主側に見せるものだから、1秒半の白画面は見栄えが悪い。 問題はデータ量ではない まず「有効デバイス」という言葉を整理しておく。独立デバイスのうち、クリック後30分以内に実際にランディングしたものだ。判定条件は LANDED というマクロで、中核は EXISTS の一文で、0067 で作った idx_channel_pv_device(デバイス+時点)を引く。 元の書き方は LANDED を集約の FILTER に押し込むものだった: count(DISTINCT c.device_id) FILTER (WHERE NOT c.is_bot AND {LANDED}) AS valid_devices 自然に見える——FILTER はまさにそのためのもの...
本番停止と引き換えに得たあのコメント
infra/migrations/0055_work_code_case_uniq.sql の冒頭コメントには、実際に一度本番を止めて手に入れた一文がある。それを書く前に、私はまずひとつの判断を書いた。そしてその判断は本番環境に跳ね返された。 まず背景をはっきりさせておく。そうでなければ、あのコメントはただ慎重ぶった冗長な文章に見えるだけだ。 直すべきは「見つからない」ではない 0001_init.sql が work.code に渡しているのは生の TEXT UNIQUE、つまり UNIQUE (code) で、大文字小文字を区別する。一方、サイト全体の読み取り側は一律 lower(code) = lower($1) でマッチしている。 両者がずれることの結果は「見つからない」ではなく、同じ作品が DB の中で二行に裂けることだ。カタログ配信元の 2026-08 のバッチが番号を dass-966 から DASS-966 へと推送し直したため、upsert_work の ON CONFLICT (code) がヒットせず、新しい行が挿入された。本番では実際に三組が裂けた:DA...
_config.yml から鍵を移した後、すべてのコマンドで別の設定を指定するのを忘れられなくなった
8月4日の朝の一連のコミットは、ブログ設定から機密値を追い出すことをテーマにしていた。Baidu/Bing のプッシュ用 token、LLM でタグ付けする api_key、記事暗号化カテゴリのパスワード——すべてを .gitignore の _config.local.yml に移し、リポジトリには _config.local.example.yml のテンプレートだけを残した。 同じ日に、関連する三つのことも行った。コメントシステムを Twikoo+Waline から Artalk に変更、ライセンスを CC BY-NC-SA 4.0 から CC BY 4.0 に変更、AI クローラーを許可して llms.txt を生成。この記事では設定の階層化のコストを記録し、ついでに GEO とクレジット表示の二つについても書く。 機密除去は値を消すことではない _config.yml は公開されているので、鍵をそこに書くのは公開するのと同じだ。しかし Hexo のビルドには実際の値が必要なので、階層化する: # _config.local.example.yml(进仓库) hexo_...
188個のプレイヤー、0個が鳴る:テーマアップグレードで露呈した旧不具合
Butterfly を 5.6.1 から 5.7.0 に上げたときのリリースノートには、「内蔵の APlayer/Meting サポートを削除」と書かれていた。アップグレード後、aplayerInject の設定は無効になり、layout/includes/third-party/aplayer.pug と plugins.yml の関連項目も一緒に消えた。 /music/ には 188 個の <meting-js> があり、inject には固定プレイヤーも 1 つある。タグ自体は残っているのに、スクリプトの注入がなくなったので、ページ上には空のカスタム要素が並ぶだけだ。 普通なら話はここで「アップグレードがプレイヤーを壊した、すぐロールバックするか inject を自分で書こう」で終わる。だがまずベースラインを測ってみたところ、結果は少し意外なものだった。 アップグレード前から、実は 0 個だった meting-js はデフォルトで MetingJS 内蔵のバックエンド api.i-meto.com を使う。これはすでにサービスを停止しており、レスポンスに CO...
